JavaRush /Курси /Docker SELF /Керування правами доступу за допомогою ACL (`setfacl`, `g...

Керування правами доступу за допомогою ACL (`setfacl`, `getfacl`)

Docker SELF
Рівень 5 , Лекція 3
Відкрита

1. Знайомство з ACL

Уявіть, що ви організатор вечірки (або адміністратор системи). Ви хочете, щоб гості могли ходити в певні кімнати, а в інші — тільки з вашого дозволу. Базові права доступу в Linux rwx дозволяють вам керувати доступом лише для трьох категорій: власника (user), групи (group) і всіх інших (others). Але що, якщо вам потрібно дати доступ до кімнати лише особливому другу? Дивак із типовою моделлю прав скаже вам: "Гей, так не вийде". Ось тут і з'являються ACL, готові виручити.

ACL (Access Control Lists) вирішують проблему обмежень класичної трирівневої системи прав, дозволяючи задавати права доступу конкретним користувачам і групам.

Основні можливості ACL:

  1. Встановлення індивідуальних прав на файли та каталоги для певних користувачів і груп.
  2. Спадкування прав для нових файлів всередині каталогу.
  3. Більш гнучке налаштування, ніж традиційний підхід 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:

  1. Дати Alice повний доступ:

    sudo setfacl -m u:alice:rwx /project
    
  2. Надати Bob доступ тільки на читання:

    sudo setfacl -m u:bob:r-- /project
    
  3. Для Eve нічого не робимо — у неї не буде доступу за замовчуванням.

Переглянемо поточний список ACL:

getfacl /project

Вивід:

# file: /project
# owner: root
# group: root
user::rwx
user:alice:rwx
user:bob:r--
group::---
other::---

Тепер Alice може працювати без обмежень, Bob може лише переглядати файли, а Eve залишається осторонь.


5. Потенційні помилки та їх вирішення

  1. ACL не працюють, хоча ви їх налаштували. Можливо, розділ не змонтований з опцією acl. Використовуйте mount для перевірки і перемонтуйте його за необхідністю.

  2. Конфлікт між стандартними правами і ACL. ACL завжди мають пріоритет над стандартними правами. Наприклад, навіть якщо у "others" встановлена заборона на читання, ACL може дозволити доступ конкретному користувачеві.

  3. Забудете про успадковані ACL. Якщо ви налаштували -d (default) права, перевірте, чи успадкувалися ці правила новими файлами.

Чому це важливо?

Управління правами через ACL дозволяє вам гнучко налаштовувати доступ для різних користувачів і груп. Це особливо корисно на робочих серверах, де потрібен розподіл прав доступу з урахуванням ролей. Наприклад, в компаніях ACL використовуються для обмеження доступу лише тим, хто "в темі" — один із ключів до безпеки.

Додатково можна вивчити офіційний посібник по ACL, щоб ще краще зрозуміти їх можливості.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ