1. Знайомство з ACL
Уявіть, що ви організатор вечірки (або адміністратор системи). Ви хочете, щоб гості могли ходити в певні кімнати, а в інші — тільки з вашого дозволу. Базові права доступу в Linux rwx дозволяють вам керувати доступом лише для трьох категорій: власника (user), групи (group) і всіх інших (others). Але що, якщо вам потрібно дати доступ до кімнати лише особливому другу? Дивак із типовою моделлю прав скаже вам: "Гей, так не вийде". Ось тут і з'являються ACL, готові виручити.
ACL (Access Control Lists) вирішують проблему обмежень класичної трирівневої системи прав, дозволяючи задавати права доступу конкретним користувачам і групам.
Основні можливості ACL:
- Встановлення індивідуальних прав на файли та каталоги для певних користувачів і груп.
- Спадкування прав для нових файлів всередині каталогу.
- Більш гнучке налаштування, ніж традиційний підхід
chmod.
2. Як дізнатися, чи увімкнено ACL?
Перед тим як почати керувати ACL, давай з'ясуємо, чи підтримуються вони твоєю системою. Ти можеш перевірити це за допомогою команди:
mount | grep acl
Якщо файлова система була змонтована з опцією acl, ти готовий до справи! Інакше потрібно перемонтувати розділ із додаванням acl:
sudo mount -o remount,acl /your/mount/point
Все, тепер ти у всеозброєнні. Настав час занурюватися у практику.
3. Основні команди для роботи з ACL
| Команда | Опис |
|---|---|
getfacl |
Отримати список поточних ACL для файлу або каталогу. |
setfacl |
Встановити або змінити ACL для файлу або каталогу. |
setfacl -m |
Змінити (modify) поточні права доступу. |
setfacl -x |
Видалити (remove) певні права доступу. |
setfacl -b |
Видалити всі записи ACL для файлу або каталогу. |
setfacl -d |
Встановити права за замовчуванням для каталогу, які наслідуються файлами. |
Тепер давайте на прикладах розберемо кожну з цих команд!
Отримання поточних ACL getfacl
Припустимо, у нас є файл example.txt. Ми хочемо побачити поточні права доступу з використанням ACL. Для цього достатньо однієї команди:
getfacl example.txt
Приблизний вивід виглядатиме так:
# file: example.txt
# owner: user1
# group: group1
user::rw-
group::r--
other::---
Цей список показує стандартні права: власник user1 може читати і писати, група group1 тільки читати, а інші користувачі взагалі не мають доступу.
Встановлення індивідуальних прав доступу (setfacl)
Тепер уявімо, що користувачу user2 потрібно дозволити записувати у файл example.txt. Це можна зробити так:
sudo setfacl -m u:user2:rw example.txt
Команда означає:
-m: модифікація прав.u:user2:rw: додати або змінити права для користувачаuser2(read-write).
Перевіримо результат:
getfacl example.txt
Тепер вивід виглядає так:
# file: example.txt
# owner: user1
# group: group1
user::rw-
user:user2:rw # Додаткове правило!
group::r--
other::---
Видалення індивідуальних прав доступу setfacl -x
Якщо ви вирішили, що користувач user2 більше не повинен мати права на запис, права можна видалити:
sudo setfacl -x u:user2 example.txt
Перевіримо:
getfacl example.txt
Більше ніяких додаткових правил для user2!
Встановлення прав для груп
Права через ACL можна задавати не лише для окремих користувачів, але й для цілих груп. Наприклад, щоб дати групі devteam доступ на читання і запис, виконайте:
sudo setfacl -m g:devteam:rw example.txt
Встановлення прав за замовчуванням setfacl -d
Часто потрібно автоматично задавати права для всіх нових файлів і директорій усередині певного каталогу. Наприклад, ви хочете, щоб усі файли у каталозі project_dir мали права на запис для користувача developer. У цьому випадку:
sudo setfacl -d -m u:developer:rw project_dir
Перевірити права можна так:
getfacl project_dir
Тепер для всіх нових файлів і підкаталогів у project_dir буде застосовуватися це правило за замовчуванням.
Видалення всіх ACL setfacl -b
Якщо ви хочете повністю очистити всі ACL для файлу:
sudo setfacl -b example.txt
Тепер файл повернеться до стандартної моделі прав доступу user:group:others.
4. Практичне застосування ACL
Сценарій: Спільна робота над проєктом
Припустимо, у вас є проєкт, що зберігається в каталозі /project. Над ним працюють три людини:
Aliceмає мати повний доступ (читання, запис, виконання).Bobповинен лише читати файли.Eveвзагалі не повинна бачити каталог.
Налаштовуємо це за допомогою ACL:
Дати
Aliceповний доступ:sudo setfacl -m u:alice:rwx /projectНадати
Bobдоступ тільки на читання:sudo setfacl -m u:bob:r-- /projectДля
Eveнічого не робимо — у неї не буде доступу за замовчуванням.
Переглянемо поточний список ACL:
getfacl /project
Вивід:
# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---
Тепер Alice може працювати без обмежень, Bob може лише переглядати файли, а Eve залишається осторонь.
5. Потенційні помилки та їх вирішення
ACL не працюють, хоча ви їх налаштували. Можливо, розділ не змонтований з опцією
acl. Використовуйтеmountдля перевірки і перемонтуйте його за необхідністю.Конфлікт між стандартними правами і ACL. ACL завжди мають пріоритет над стандартними правами. Наприклад, навіть якщо у "others" встановлена заборона на читання, ACL може дозволити доступ конкретному користувачеві.
Забудете про успадковані ACL. Якщо ви налаштували
-d(default) права, перевірте, чи успадкувалися ці правила новими файлами.
Чому це важливо?
Управління правами через ACL дозволяє вам гнучко налаштовувати доступ для різних користувачів і груп. Це особливо корисно на робочих серверах, де потрібен розподіл прав доступу з урахуванням ролей. Наприклад, в компаніях ACL використовуються для обмеження доступу лише тим, хто "в темі" — один із ключів до безпеки.
Додатково можна вивчити офіційний посібник по ACL, щоб ще краще зрозуміти їх можливості.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ