Якщо ви випадково вистрілили собі в ногу командою на кшталт chown -R $USER / — дихайте рівно. Це класична помилка з розряду «помилки Linux», але її реально виправити. У цій інструкції покажу покроково, як у термінал Linux повернути коректних власників файлів, відновити критичні дозволи та знову завантажити систему.

Що сталося і чого не робити

  • chown -R без обмежень міг поміняти власника майже всіх файлів. Сервіси й sudo зламуються, пакети й бінарники можуть не стартувати.
  • Не запускайте випадкові «універсальні» скрипти з інтернету, що роблять chmod 777 -R / — це погіршує ситуацію.
  • Згадуйте: під яким користувачем ви працюєте? Це стане в пригоді для відновлення користувачі та групи Linux у /home.
  • Якщо система ще працює — зробіть нотатки/фото помилок. Якщо не працює — скористайтеся Live USB.

Покрокове відновлення системи

1) Отримайте root-доступ (Recovery/Live USB + chroot)

Якщо sudo зламаний або система не вантажиться, зайдіть у режим відновлення або з Live USB і змонтуйте ваш root-розділ у chroot. Далі всі кроки робіть там.

# Подивитися розділи
lsblk

# Припустимо, root на /dev/sdXn
sudo mount /dev/sdXn /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo mount --bind /run /mnt/run

# Якщо є окремий /boot або /boot/efi — змонтуйте їх теж
# sudo mount /dev/sdXb /mnt/boot
# sudo mount /dev/sdXc /mnt/boot/efi

sudo chroot /mnt /bin/bash
export PATH=/usr/sbin:/usr/bin:/sbin:/bin

2) Відновіть базові власники для критичних директорій

Поверніть root:root там, де це обов’язково. Обережно з /var — багато підкаталогів мають сервісні власники, ми їх поправимо окремо пакетним способом.

# Корінь і базові системні каталоги
chown root:root /
chown -R root:root /bin /sbin /lib /lib64 /usr /opt /boot /etc

# Деякі «верхні» каталоги всередині /var повинні бути root:root
# (глибоко рекурсивно /var поки НЕ чіпаємо)
chown root:root /var /var/tmp /var/log /var/lib /var/run 2>/dev/null || true

# Спеціальні тимчасові каталоги мають бути sticky (1777)
chown root:root /tmp /var/tmp
chmod 1777 /tmp /var/tmp

# Домашні каталоги — повертаємо власників користувачам
for u in /home/*; do
  [ -d "$u" ] || continue
  user="$(basename "$u")"
  if id "$user" &>/dev/null; then
    chown -R "$user":"$user" "$u"
  fi
done

# Каталог root має належати root і бути закритим
chown -R root:root /root
chmod 700 /root

3) Відновіть власників і права за даними дистрибутива

Тепер — магія пакетного менеджера. Він знає «як треба» для файлів із пакунків.

  • Debian/Ubuntu/Linux Mint: перевстановіть усі інстальовані пакети, щоб відновити власників/права.
apt-get update
apt-get --reinstall install -y $(dpkg-query -W -f='${binary:Package}\n')
  • Fedora/RHEL/CentOS/Alma/Rocky: rpm уміє одразу відкотити власників і права.
rpm --setugids -a   # відновити власників/групи
rpm --setperms -a   # відновити права
# додатково можна перевстановити базові пакети
dnf reinstall -y \*
  • Arch/Manjaro: перевстановіть нативні пакети та перевірте цілісність.
pacman -Qnq > /tmp/pkgs
pacman -S --noconfirm $(cat /tmp/pkgs)
# Перевірка цілісності (Qkk покаже невідповідності прав/власників)
pacman -Qkk | grep -E "(MISSING|WARNING|Permissions)" || true

Якщо SELinux увімкнений (Fedora/RHEL), відновіть контексти:

restorecon -RFv /etc /usr /bin /sbin /lib /lib64 /var

4) Перегенерація initramfs і завантажувача

Після масових змін корисно оновити initramfs та конфіг завантажувача.

  • Debian/Ubuntu: update-initramfs -u -k all && update-grub
  • Fedora/RHEL: dracut -f та grub2-mkconfig -o /boot/grub2/grub.cfg (або для UEFI: /boot/efi/EFI/<distro>/grub.cfg)
  • Arch: mkinitcpio -P і grub-mkconfig -o /boot/grub/grub.cfg
# Debian/Ubuntu приклад
update-initramfs -u -k all
update-grub

Альтернативні способи

  • Відновлення з бекапу: якщо ви робили snapshot-и (Timeshift, btrfs, LVM) або мали rsync-бекап — найшвидший і найчистіший спосіб.
  • Точкова ручна правка: для невеликої шкоди можна порівнювати з еталонною системою або документацією пакета і повертати власників окремим каталогам.
  • Відновлення sudoers: якщо проблема лише з sudo — виправте права/власника і перевірте синтаксис.
chown root:root /etc/sudoers /etc/sudoers.d
chmod 440 /etc/sudoers
chmod 750 /etc/sudoers.d
visudo -c

GUI-спосіб (обережно)

У файловому менеджері (Nautilus/Dolphin) можна відкрити Властивості → Дозволи й змінити власника/групу, відзначивши «Застосувати до вкладених». Але цей метод варто використовувати лише для вашого /home/<user>. Для системних каталогів краще термінал Linux і перевстановлення пакетів. ⚠️

FAQ

Чому після chown -R нічого не запускається?

Бінарники, служби й сокети очікують конкретних власників/прав. Після масової зміни «права доступу Linux» стають некоректними, і запуск блокується.

Система не вантажиться. Що робити?

Завантажтеся з Live USB, змонтуйте файлову систему в chroot (див. вище), відновіть ключові каталоги, далі — пакетний ремонт і оновлення initramfs/GRUB.

sudo не працює: «user is not in the sudoers file» або помилки прав

Виправте власника й права файлів sudoers (див. альтернативні способи), потім перевірте командою visudo -c.

У чому різниця між chmod і chown?

chown змінює власника/групу (користувачі та групи Linux), а chmod — самі дозволи. Плутанина між ними — типова причина «помилки Linux» у безпеці.

Навіщо ставити 1777 для /tmp і /var/tmp?

Це «sticky bit»: будь-хто може створювати файли, але видаляти у /tmp — лише власник або root. Без нього програми поводяться нестабільно.

SELinux лається після відновлення

Відкотіть контексти командою restorecon -RFv /... для ключових шляхів. Це не змінює власників/права, лише мітки SELinux.

Порада від Kernelka 🧠

  • Замість «всліпу» chown -R використовуйте обмеження: --from і --preserve-root.
# Лише якщо файл зараз належить olduser:oldgroup
chown -R --from=olduser:oldgroup newuser:newgroup /path

# Уникайте операцій над коренем
chown -R --preserve-root "$USER":"$USER" /some/safe/path

# Спершу «сухий прогін» списку цілей
find /some/safe/path -type f -print | head -n 20

І завжди майте бекап. Маленький snapshot економить великі нерви 😉

Підсумок 🔧

  • Зайдіть у chroot через Live USB і поверніть базові власники для критичних шляхів.
  • Відновіть /tmp і /var/tmp до 1777, а /home — до власників користувачів.
  • Далі використайте менеджер пакетів (apt/dnf/pacman/rpm), щоб масово відкотити власників і права до значень пакунків.
  • Перегенеруйте initramfs і конфіг завантажувача, перевірте sudoers.
  • На майбутнє: використовуйте --from, --preserve-root і бекапи, аби схожі «помилки Linux» не ламали систему.