Вивчіть команду Linux 'setfacl'

Утиліта Setfacl встановлює списки контролю доступу (ACL) файлів і каталогів. На командний рядок, за послідовністю команд слідує послідовність файлів (за якою, у свою чергу, може слідувати інша послідовність команд тощо).

  • Варіанти -м, і -x очікуйте ACL у командному рядку. Кілька записів ACL розділяються символами коми (`,'). Варіанти -М, і -X прочитати ACL з файлу або зі стандартного введення. Формат запису ACL описано в розділі ACL ENTRIES.
  • The --набір і --set-file параметри встановлюють ACL файлу або каталогу. Попередній ACL замінено. Записи ACL для цієї операції повинні містити дозволи.
  • The -m (--змінити) і -M (--змінити-файл) параметри змінюють ACL для a файл або каталог. Записи ACL для цієї операції повинні містити дозволи.
  • The -x (--видалити) і -X (--видалити-файл) параметри видалення записів ACL. Тільки записи ACL без завивки поле приймаються як параметри, якщо не визначено POSIXLY_CORRECT.

При читанні з файлів за допомогою -М, і -X параметри, setfacl приймає вихід getfacl виробляє. У кожному рядку є не більше одного запису ACL. Після знака фунта (`#') усе до кінця рядка розглядається як коментар.

Якщо setfacl використовується у файловій системі, яка не підтримує списки керування доступом, setfacl працює з бітами дозволу режиму файлу. Якщо ACL не вписується повністю в біти дозволу, setfacl змінює біти дозволу режиму файлу, щоб відобразити ACL якомога ближче, записує повідомлення про помилку до стандартної помилки та повертає зі статусом виходу більше ніж 0.

Використання Setfacl

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

mkdir ~/acl-test. 

Далі використовуйте setfacl, щоб надати іншому користувачеві вашої системи доступ до папки. Setfacl використовує прапорець, щоб змінити списки контролю доступу до файлу. Зазвичай це означає додавання користувача або групи.

setfacl -m u: ім'я користувача: rwx ~/acl-test/

The u перед тим, як перша двокрапка повідомляє команді, про яку ви говорите ім’я користувача. The rwx після другої гранти рead, wобряд, та exдозволи на виконання.

Те ж саме працює для груп шляхом вказівки g замість u перед першою товстою кишкою.

setfacl -m g: назва групи: rwx ~/acl-test/

Він працює так само, як і попередній приклад, за винятком того, що він надає дозволи всій групі.

The -x прапор працює протилежно . Це скасує доступ до вказаного користувача або групи.

setfacl -x u: ім'я користувача: w ~/acl-test/

Команда скасовує користувачеві доступ на запис до каталогу.

Ви також можете безпосередньо змінити дозволи для всіх поточних користувачів. Це включає власника файлу та будь-яких додаткових користувачів, яким надано дозволи. Це щось на кшталт ярлика, використовуючи існуючу команду, але пропускаючи ім’я користувача.

setfacl -m u:: rx ~/acl-test/

Це надає всім існуючим користувачам дозволи на читання та виконання, але усуває доступ на запис.

Те ж саме працює з -x прапорець і видалення дозволів.

setfacl -x u:: w ~/acl-test/

Це по суті те саме, що й попередній приклад, перевернутий.

setfacl також дозволяє копіювати списки контролю доступу з одного файлу в інший. Переконайтеся, що ваш користувач має повний доступ до тестової папки, і створіть два нових файли для роботи.

торкніться ~/acl-test/file{1,2}.txt. 

Тепер змініть права доступу до першого файлу.

setfacl -m u: ім'я користувача: rx ~/acl-text/file1.txt. 

Тепер ви можете передати результати getfacl, команди для отримання поточної інформації ACL, у setfacl.

getfacl ~/acl-test/file1.txt | setfacl --set-file=- ~/acl-text/file2.txt. 

Друге заповнення матиме ті самі дозволи, що й перше.

Нарешті, ви можете видалити всі розширені записи ACL, створені командою. Це залишить у файлі права користувача та групи, які він мав спочатку. Для цього скористайтеся прапорцем -b.

setfacl -b ~/acl-test/

Це найбільш поширене використання setfacl. Якщо ви хочете зануритися глибше, наступна частина цього посібника – це повна технічна розбивка команди.

Технічна поломка Setfacl

setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] файл...

setfacl --відновити=файл.

Дозволи

Власнику файлу та процесам, здатним до CAP_FOWNER, надається право змінювати списки ACL файлу. Це аналогічно дозволам, необхідним для доступу до файлового режиму. (У поточних системах Linux root є єдиним користувачем з можливістю CAP_FOWNER.)

Параметри

-b, --видалити-всі

  • Видаліть усі розширені записи ACL. Базові записи ACL власника, групи та інших зберігаються.

-k, --remove-за замовчуванням

  • Видаліть ACL за замовчуванням. Якщо ACL за замовчуванням не існує, попередження не видаються.

-n, --без маски

  • Не перераховуйте діючу маску прав. Поведінка setfacl за замовчуванням полягає в перерахунку запису маски ACL, якщо запис маски не вказано явно. Запис маски встановлюється на об’єднання всіх дозволів групи-власника, а також усіх іменованих записів користувачів і груп. (Це саме записи, на які впливає запис маски).

--маска

  • Перерахуйте діючу маску прав, навіть якщо запис маски ACL був явно вказаний. (Див -n варіант.)

-d, --за замовчуванням

  • Усі операції застосовуються до За замовчуванням ACL. Звичайні записи ACL у вхідному наборі підвищуються до записів ACL за замовчуванням. Записи ACL за замовчуванням у вхідному наборі відкидаються. (Якщо це станеться, видається попередження).

--відновити=файл

  • Відновіть резервну копію дозволів, створену `getfacl -R' або подібним. За допомогою цього механізму відновлюються всі дозволи повного піддерева каталогів. Якщо вхідні дані містять коментарі власника або коментарі групи, а setfacl виконується користувачем root, власник і група власників усіх файлів також відновлюються. Цей параметр не можна змішувати з іншими параметрами, крім `--test'.

--тест

  • Тестовий режим. Замість того, щоб змінювати списки керування доступом для будь-яких файлів, у списку відображаються отримані списки керування доступом.

-R, --рекурсивний

  • Застосовувати операції до всіх файлів і каталогів рекурсивно. Цей параметр не можна змішувати з `--restore'.

-L, --логічний

  • Логічна прогулянка, перейдіть за символічними посиланнями. Поведінка за замовчуванням полягає в тому, щоб слідувати аргументам символьного посилання та пропускати символічні посилання, які зустрічаються в підкаталогах. Цей параметр не можна змішувати з `--restore'.

-P, --фізичний

  • Фізична прогулянка, пропустити все символічні посилання. Це також пропускає аргументи символічного посилання. Цей параметр не можна змішувати з `--restore'.

-- версія

  • Роздрукуйте версію setfacl і вийдіть.

--допомога

  • Надрукуйте довідку з поясненням параметрів командного рядка.

Параметри кінця командного рядка. Усі інші параметри інтерпретуються як імена файлів, навіть якщо вони починаються з тире.

Якщо параметр імені файлу є одним тире, setfacl зчитує список файлів зі стандартного введення.

Записи ACL

Утиліта setfacl розпізнає такі формати записів ACL:

[d[за замовчуванням]:] [u[ser]:]uid [:завивки]

  • Дозволи іменованого користувача. Дозволи власника файлу якщо uid пусто.

[d[за замовчуванням]:] g[група]:gid [:завивки]

  • Дозволи названої групи. Дозволи групи власників якщо gid пусто.

[d[за замовчуванням]:] m[запитати][:] [:завивки]

  • Ефективна маска прав людини

[d[за замовчуванням]:] інше][:] [:завивки]

  • Дозволи інших

Пробіли між символами-розділювачами та символами без роздільників ігноруються.

Належні записи ACL, включаючи дозволи, використовуються в операціях модифікації та встановлення. (варіанти , , --набір і --set-file). Записи без завивки поля використовуються для видалення записів (опції -x і -X).

Для uid і gid Ви можете вказати ім'я або номер.

The завивки поле являє собою комбінацію символів, які вказують на права: read (г), пишіть (ж), виконати (x), виконується, лише якщо файл є каталогом або вже має дозвіл на виконання для певного користувача(X). Як варіант, завивки поле може бути вісімковою цифрою (0-7).

Автоматично створені записи

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

  • Три базові записи неможливо видалити. Для кожного з цих базових типів записів має бути рівно один запис.
  • Щоразу, коли ACL містить іменовані записи користувача або іменовані об’єкти групи, він також повинен містити ефективну маску прав.
  • Щоразу, коли ACL містить будь-які записи ACL за замовчуванням, три базові записи ACL за замовчуванням (власник за замовчуванням, група за замовчуванням та інші) також повинні існувати.
  • Щоразу, коли ACL за замовчуванням містить іменовані записи користувача або іменовані об’єкти групи, він також повинен містити діючу маску прав за замовчуванням.

Щоб допомогти користувачеві забезпечити ці правила, setfacl створює записи з наявних записів за таких умов:

  • Якщо ACL містить записи імені користувача або групи, а запис маски не існує, створюється запис маски, що містить ті самі дозволи, що й запис групи. Хіба що -n якщо задано параметр, дозволи запису маски додатково коригуються, щоб включати об’єднання всіх дозволів, на які впливає запис маски. (Див -n опис варіанту).
  • Якщо створено запис ACL за замовчуванням, а ACL за замовчуванням не містить власника, групи власників або інших записів, копія запису власника ACL, групи власників або інших записів додається до ACL за замовчуванням.
  • Якщо ACL за замовчуванням містить іменовані записи користувачів або іменовані записи групи, а запис маски не існує, додається запис маски, що містить ті самі дозволи, що й запис групи ACL за замовчуванням. Хіба що -n якщо задано параметр, дозволи запису маски додатково коригуються, щоб включати об’єднання всіх дозволів, на які впливає запис маски. (Див -nопис варіанту).

Приклади

  • Надання додаткового доступу для читання користувача
  • setfacl -m u: lisa: r файл
  • Скасування доступу до запису для всіх груп і всіх іменованих користувачів (з використанням ефективної маски прав)
  • setfacl -m m:: файл rx
  • Видалення запису іменованої групи з ACL файлу
  • setfacl -x g: файл персоналу
  • Копіювання ACL одного файлу в інший
  • getfacl файл1 | setfacl --set-file=- файл2
  • Копіювання ACL доступу в ACL за замовчуванням
  • getfacl -a dir | setfacl -d -M- реж

Відповідність 17 проекту стандарту Posix 1003.1e

Якщо змінна середовища POSIXLY_CORRECT визначена, поведінка setfacl за замовчуванням змінюється наступним чином: Усі нестандартні параметри вимкнено. Префікс `` за замовчуванням:'' вимкнено. The -x і -X Параметри також приймають поля дозволів (і ігнорують їх).