Правильні права — це безпека і порядок. Сьогодні я покажу, як налаштовувати права доступу в Linux за допомогою chown, chmod і setfacl, щоб ваше управління файлами було чітким і безпечним. Працюємо акуратно в термінал Linux, з поясненнями для людей, не для роботів 🔒

Що таке власник, група і права (коротко)

У Linux кожен файл має: власника (user), групу (group) і права для трьох ролей: власника (u), групи (g) та інших (o). Права бувають: читання (r), запис (w), виконання (x). Числа — це теж права: 7=rwx, 6=rw-, 5=r-x, 4=r--, 0=---.

Подивитися атрибути можна так:

ls -l file.txt
# d або - попереду означає директорію чи файл
# приклад: -rw-r--r-- 1 alice dev 1234 Feb  1 12:00 file.txt

How-to: базові сценарії з chown, chmod і setfacl

1) Змінити власника та групу: chown

Команда chown керує тим, хто відповідає за файл. Це серце теми «права доступу Linux» і працює в тандемі з «користувачі та групи Linux».

# Змінити власника на alice
sudo chown alice file.txt

# Змінити групу на dev
sudo chown :dev file.txt

# Змінити власника і групу разом
sudo chown alice:dev file.txt

# Рекурсивно для каталогу
sudo chown -R alice:dev /srv/project

Порада: користуйтеся -R обережно. Перевіряйте шлях тричі, щоб не зламати системні файли.

2) Налаштувати права: chmod

chmod змінює режими доступу. Є два способи: символьний (u,g,o,+,-,=) і числовий (750 тощо).

# Файл для конфігів: лише власник читає/пише
chmod 600 config.ini

# Скрипт, який можна запускати власнику і групі, інші не можуть
chmod 750 deploy.sh

# Веб-статичні файли: читати всім, писати лише власнику
chmod 644 index.html

# Символьний варіант: додати виконання лише власнику
chmod u+x script.sh

# Для директорій часто: 755 (заходити всім, змінювати лише власнику)
chmod 755 /var/www

Пам'ятайте: для директорій біт x означає можливість заходити в каталог; без нього навіть при r ви не побачите вміст повністю.

3) Розширені права з ACL: setfacl

ACL дозволяє дати доступ окремим користувачам чи групам, не змінюючи базові права. Перевіряти — getfacl.

# Дати користувачу bob повний доступ до файлу
setfacl -m u:bob:rwx report.xlsx

# Дати групі dev читання і виконання рекурсивно (X означає x лише для директорій та виконуваних файлів)
setfacl -R -m g:dev:rX /srv/project

# Зробити так, щоб усі нові файли в каталозі спадкували ACL (default)
setfacl -m d:u:bob:rwX /srv/shared
setfacl -m d:g:dev:rwx /srv/shared

# Подивитися ACL
getfacl /srv/shared

# Прибрати всі ACL і повернутися до звичайних прав
setfacl -b file.txt

Якщо додали ACL, але доступ все одно не працює, перевірте маску (m:). Вона обмежує максимальні ефективні права:

# Розширити маску до rwx, щоб ACL запрацювали
setfacl -m m:rwx file.txt

4) Перевірка результатів

# Базові права
ls -l file.txt

# Розширені права ACL
getfacl file.txt

# Хто фактично може, тест командою від імені користувача
sudo -u bob cat file.txt

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

  • chgrp: коли треба змінити лише групу, зручно і коротко.
sudo chgrp dev file.txt
  • setgid на директорії: нові файли автоматично успадковують групу каталогу.
sudo chmod g+s /srv/project  # виведе s у правах каталогу
  • sticky bit для спільних каталогів (як /tmp): видаляти може лише власник файлу.
sudo chmod +t /srv/shared
  • umask контролює права нових файлів/каталогів вашої сесії.
umask           # подивитися
umask 002       # команда для колаборації в групі (нові файли 664/директорії 775)
  • find + chmod/chown для складних структур.
# Права на всі директорії та файли задаємо окремо
find /srv/project -type d -exec chmod 755 {} +
find /srv/project -type f -exec chmod 644 {} +

GUI-спосіб (GNOME/KDE)

Якщо любите графіку, базові речі можна зробити у файловому менеджері (частина про GUI Linux теж корисна):

  1. Відкрийте Files (GNOME) або Dolphin (KDE).
  2. Правий клік по файлу/каталогу → Properties → вкладка Permissions.
  3. Змініть Owner/Group і рівень доступу (Read/Write/Execute).
  4. Для рекурсії у Dolphin є опція застосувати до вмісту. У GNOME іноді простіше скористатися терміналом.

Примітка: ACL через GUI підтримуються не всюди. Для точного контролю використовуйте setfacl у терміналі 🧰

FAQ

Чому отримую «Permission denied»?

Перевірте власника/групу і права: ls -l. Можливо, файл належить іншому користувачу. Виправте chown/chmod. Також переконайтеся, що ви у потрібній групі (groups), і перелогіньтеся після додавання до групи.

«Operation not permitted» навіть з sudo?

Може бути виставлений immutable-біт або особливі атрибути.

lsattr file.txt
sudo chattr -i file.txt   # знімаємо immutable

Також гляньте опції монтування (noexec, ro) у /etc/fstab або через mount.

777 — це нормально?

Краще ні. 777 відкриває запис усім. Для каталогів найчастіше 755 або 750; для файлів 644 або 640; для секретів 600.

Чим відрізняється 755 від 0755?

У сучасному Linux для chmod це однаково. Нуль попереду не обов'язковий.

Додав ACL, але доступу немає. Чому?

Перевірте маску ACL (m:). Вона обмежує ефективні права груп/користувачів. Розширте її: setfacl -m m:rwx file. Також перевірте, чи директорії мають x.

Як зробити, щоб усі нові файли в каталозі були у спільній групі?

Виставте setgid на каталог і додайте default ACL при потребі:

sudo chgrp dev /srv/shared
sudo chmod g+s /srv/shared
setfacl -m d:g:dev:rwx /srv/shared

Як скинути все до стандартних прав?

Приберіть ACL і задайте мінімальний набір прав заново:

setfacl -bR /srv/project
chmod -R u=rwX,go=rX /srv/project

Як швидко зрозуміти, хто має доступ?

Комбінуйте базові та розширені перегляди:

namei -l /srv/project/file.txt
getfacl /srv/project/file.txt

Порада від Kernelka

Тестуйте права очима того, хто ними користується: запускайте команду від імені потрібного користувача. Так ви зловите проблеми до продакшена.

sudo -u bob -H bash -lc 'touch /srv/shared/test && ls -l /srv/shared/test'

І ще: коли копіюєте дані між серверами, зберігайте права й ACL через rsync:

sudo rsync -aAX --info=progress2 /srv/project/ backup:/srv/project/

Підсумок

  • chown керує тим, хто володіє файлом і групою; chmod задає базові rwx; setfacl додає точний контроль доступу.
  • Для колаборації використовуйте групи, setgid на каталогах і default ACL.
  • Не захоплюйтеся 777; підбирайте мінімально необхідні права.
  • Перевіряйте результат: ls -l, getfacl і тест командою від імені користувача.
  • GUI допомагає для базових задач, але тонкі налаштування робіть у терміналі.
  • Ці практики зроблять ваше управління файлами передбачуваним і безпечним.