Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Всім привіт. Це переклад статті з книги RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 та EX300.

Від себе: Сподіваюся стаття буде корисна не лише початківцям, а й допоможе досвідченішим адміністраторам упорядкувати свої знання.

Отже, поїхали.

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Для доступу до файлів у Linux використовуються дозволи. Ці дозволи призначаються трьом об'єктам: власнику файлу, власнику групи та іншому об'єкту (тобто решті). У цій статті ви дізнаєтесь, як застосовувати дозволи.

Стаття починається з огляду основних понять, після чого обговорюються спеціальні дозволи (Special permissions) та списки контролю доступу (ACL). Наприкінці цієї статті розглядається налаштування прав доступу за умовчанням через umask, а також керування розширеними атрибутами користувача.

Управління володінням файлами

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

Відображення власника файлу чи каталогу

У Linux кожен файл і кожен каталог мають два власники: користувач і власник групи.

Ці власники встановлюються під час створення файлу чи каталогу. Користувач, який створює файл, стає власником цього файлу, а первинна група, в яку входить цей же користувач, так само стає власником цього файлу. Щоб визначити, чи є у вас як у користувача права доступу до файлу чи каталогу, оболонка перевіряє володіння ними.

Це відбувається в наступному порядку:

  1. Оболонка перевіряє, чи ви є власником файлу, до якого ви хочете отримати доступ. Якщо ви є цим власником, ви отримуєте дозволи та оболонка припиняє перевірку.
  2. Якщо ви не є власником файлу, оболонка перевірить, чи ви є учасником групи, яка має дозвіл на цей файл. Якщо ви є учасником цієї групи, ви отримуєте доступ до файлу з дозволами, які для групи встановлені, та оболонка припинить перевірку.
  3. Якщо ви не є ні користувачем, ні власником групи, ви отримуєте права інших користувачів (Other).

Щоб побачити поточні призначення власника, можна використовувати команду ls -l. Ця команда показує користувача та власника групи. Нижче ви можете побачити налаштування власника для каталогів у каталозі /home.

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

За допомогою команди ls Ви можете відобразити власника файлів у цьому каталозі. Іноді може бути корисним отримати список всіх файлів у системі, в яких як власник зазначений даний користувач або група. Для цього ви можете використати знаходити. Аргумент find -user може бути використаний для цієї мети. Наприклад, наступна команда показує всі файли, у яких як власник зазначений користувач linda:

find / -user linda

Ви також можете використовувати знаходити для пошуку файлів, у яких певна група є власником.

Наприклад, наступна команда шукає всі файли, що належать до групи користувачі:

find / -group users

Зміна власника

Щоб застосувати відповідні дозволи, перше, що потрібно враховувати, це володіння. Для цього є команда Чаун. Синтаксис цієї команди нескладний для розуміння:

chown кто что

Наприклад, наступна команда змінює власника каталогу /home/account на користувача linda:

chown linda /home/account

Команда Чаун має кілька опцій, одна з яких особливо корисна: -R. Ви можете здогадатися, що він робить, тому що ця опція доступна для багатьох інших команд. Це дозволяє вам рекурсивно встановлювати власника, що дозволяє встановити власника поточного каталогу і всього, що знаходиться нижче. Наступна команда змінює власника для каталогу /home та всього, що знаходиться під ним, на користувача linda:

Нині власники виглядають так:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

Виконаємо:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Тепер користувач lisa став власником каталогу account:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

Зміна власника групи

Є два способи змінити володіння групою. Ви можете зробити це, використовуючи Чаунале є спеціальна команда з ім'ям chgrpяка виконує цю роботу. Якщо ви хочете використати команду Чаун, використовуйте . або : перед назвою групи.

Наступна команда змінює будь-якого власника групи /home/account на групу account:

chown .account /home/account

Ви можете використовувати Чаун зміни власника користувача та/або групи декількома способами. Ось кілька прикладів:

  • chown lisa myfile1 встановлює користувача lisa власником файлу myfile1.
  • chown lisa.sales myfile встановлює користувача lisa власником файлу myfile, а також встановлює групу sales власником цього файлу.
  • chown lisa: sales myfile те саме, що й попередня команда.
  • chown .sales myfile встановлює групу sales власником файлу myfile без зміни власника користувача.
  • chown: sales myfile те саме, що й попередня команда.

Ви можете використати команду chgrp, щоб змінити власника групи. Розглянемо наступний приклад, де ви можете за допомогою chgrp встановити власником каталогу account групу sales:

chgrp .sales /home/account

Як і у випадку з ЧаунВи можете використовувати опцію -R с chgrp, а також рекурсивно міняти власника групи.

Розуміння власника за умовчанням

Ви могли помітити, що коли користувач створює файл, застосовується стандартне володіння.
Користувач, який створює файл, автоматично стає власником цього файлу, а основна група цього користувача автоматично стає власником цього файлу. Зазвичай це група, яка вказана у файлі /etc/passwd як основна група користувача. Однак, якщо користувач є членом декількох груп, він може змінити ефективну основну групу.

Щоб показати поточну ефективну первинну групу, користувач може використати команду групи:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Якщо поточний користувач linda хоче змінити ефективну первинну групу, він використовуватиме команду нова група, за якою слідує ім'я групи, яку він хоче встановити як нову ефективну первинну групу. Після використання команди нова група первинна група буде активною, поки користувач не введе команду вихід або не вийде із системи.

Нижче показано, як користувач linda використовує цю команду, що первинною групою стала група sales:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

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

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

Управління основними правами

Система дозволів Linux була винайдена у 1970-х роках. Оскільки обчислювальні потреби були обмежені у роки, базова система дозволів була досить обмежена. Ця система дозволів використовує три дозволи, які можна застосовувати до файлів та каталогів. У цьому розділі ви дізнаєтесь, як використовувати та змінювати ці дозволи.

Розуміння прав на читання, запис та виконання

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

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

Щодо каталогу читання дозволяє відображати вміст цього каталогу. Ви повинні знати, що цей дозвіл не дозволяє читати файли в каталозі. Система дозволів Linux не знає успадкування, і єдиний спосіб прочитати файл – використовувати дозволи на читання для цього файлу.

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

Дозвіл на виконання – це те, що потрібно для виконання файлу. Воно ніколи не буде встановлено за умовчанням, що робить Linux практично повністю несприйнятливим до вірусів. Тільки хтось із правами запису на каталог може застосовувати дозвіл на виконання.

Нижче узагальнюється використання основних дозволів:

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

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

Для керування правами використовується команда CHMOD. При використанні CHMOD можна встановлювати дозволи для користувача (user), групи (group) та інших (other). Цю команду можна використовувати у двох режимах: відносний режим і абсолютний режим. В абсолютному режимі три цифри використовуються для встановлення основних дозволів.

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

При налаштуванні дозволів розрахуйте потрібне вам значення. Якщо ви хочете встановити читання, запис та виконання для користувача, читання та виконання для групи, а також читання та виконання для інших у файлі /somefile, то ви використовуєте наступну команду CHMOD:

chmod 755 /somefile

Коли ви використовуєте CHMOD у такий спосіб, всі поточні дозволи замінюються встановленими вами дозволами.

Якщо ви хочете змінити дозволи щодо поточних дозволів, можна використовувати CHMOD у відносному режимі. При використанні CHMOD у відносному режимі ви працюєте з трьома індикаторами, щоб вказати, що ви хочете зробити:

  1. Спочатку ви вказуєте, для кого хочете змінити дозволи. Для цього ви можете вибрати між користувачем (u), групою (g) та іншими (o).
  2. Потім ви використовуєте оператор для додавання або видалення дозволів із поточного режиму або встановлюєте їх абсолютно.
  3. В кінці ви використовуєте r, w и x, щоб вказати, які дозволи ви хочете встановити.

При зміні дозволів у відносному режимі можна пропустити частину «кому», щоб додати або видалити дозвіл для всіх об'єктів. Наприклад, ця команда додає дозвіл на виконання для всіх користувачів:

chmod +x somefile

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

chmod g+w,o-r somefile

Під час використання chmod -R o+rx /data Ви встановлюєте дозвіл на виконання всіх каталогів, а також для файлів у каталозі /data. Щоб встановити дозвіл на виконання лише для каталогів, а не для файлів, використовуйте chmod -R o + rX /data.

Верхній регістр X гарантує, що файли не отримають дозвіл на виконання, якщо файл вже не встановив дозвіл на виконання для деяких об'єктів. Це робить X більш розумним способом роботи з дозволами виконання; це дозволить уникнути встановлення цієї роздільної здатності на файли, де вона не потрібна.

розширені права

Крім основних дозволів, про які ви щойно прочитали, Linux також має набір розширених дозволів. Це не ті дозволи, які ви встановлюєте за промовчанням, але іноді вони надають корисне доповнення. У цьому розділі ви дізнаєтеся, що вони являють собою і як їх налаштувати.

Розуміння розширених прав SUID, GUID та sticky bit

Є три просунуті дозволи. Перший — це дозвіл на встановлення ідентифікатора користувача (SUID). У деяких особливих випадках ви можете застосувати цей дозвіл до файлів, що виконуються. За замовчуванням користувач, який запускає файл, що виконується, запускає цей файл зі своїми власними дозволами.

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

Розглянемо, наприклад, ситуацію, коли користувачеві необхідно змінити пароль. Для цього користувач повинен записати свій новий пароль файл /etc/shadow. Однак цей файл недоступний для запису користувачам, які не мають права доступу root:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

Вирішення SUID пропонує вирішення цієї проблеми. В утиліті /usr/bin/passwd ця роздільна здатність застосовується за умовчанням. Це означає, що при зміні пароля користувач тимчасово отримує права root, що дозволяє йому записувати файл /etc/shadow. Ви можете бачити дозвіл SUID з ls -l як s у позиції, де зазвичай ви очікуєте побачити x для дозволів користувача:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

Дозвіл SUID може виглядати корисним (і в деяких випадках так і є), але в той же час він потенційно небезпечний. При неправильному застосуванні Ви можете випадково роздати права доступу root. Тому рекомендую використовувати його тільки з максимальною обережністю.

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

Другий спеціальний дозвіл – це ідентифікатор групи (SGID). Ця роздільна здатність має два ефекти. При застосуванні до виконуваного файлу він дає користувачеві, який виконує файл, дозволи власника групи цього файлу. Таким чином, SGID може виконати більш-менш те саме, що SUID. Однак для цього SGID практично не використовується.

Як і у випадку з роздільною здатністю SUID, SGID застосовується до деяких системних файлів як налаштування за замовчуванням.

Коли застосовується до каталогу, SGID може бути корисним, тому що ви можете використовувати його для встановлення власника групи за промовчанням для файлів та підкаталогів, створених у цьому каталозі. За промовчанням, коли користувач створює файл, його ефективна первинна група встановлюється як власник групи цього файлу.

Це не завжди дуже корисно, особливо тому, що у користувачів Red Hat/CentOS як основна група задана група з тим же ім'ям, що і у користувача, і з яких користувач є єдиним учасником. Таким чином, за промовчанням файли, які створює користувач, будуть груповими для спільного доступу.

Уявіть собі ситуацію, коли користувачі linda та lori працюють у бухгалтерії та є членами групи рахунок. За замовчуванням ці користувачі є членами приватної групи, єдиним членом якої є. Однак обидва користувачі є членами групи account, але також як параметр вторинної групи.

Ситуація за промовчанням полягає в тому, що коли будь-який з цих користувачів створює файл, основна група стає власником. Тому за умовчанням linda не може отримати доступ до файлів, створених lori, і навпаки. Однак, якщо ви створюєте спільний каталог групи (скажімо, /groups/account) і переконайтеся, що роздільна здатність SGID застосована до цього каталогу і що облік групи встановлений як власник групи для цього каталогу, всі файли, створені в цьому каталозі та у всіх його підкаталогах , також отримують обліковий запис групи як власника групи за замовчуванням.

З цієї причини роздільна здатність SGID є дуже корисною роздільною здатністю для встановлення в каталогах спільних груп.

Дозвіл SGID відображається у виводі ls -l як s у позиції, де ви зазвичай знаходите дозвіл на виконання групи:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

Третій із спеціальних дозволів - sticky bit. Ця роздільна здатність корисна для захисту файлів від випадкового видалення в середовищі, де декілька користувачів мають права на запис в той самий каталог. Якщо застосовується закріплений sticky bit, користувач може видалити файл, лише якщо він є користувачем-власником файлу чи каталогу, у якому міститься файл. З цієї причини він застосовується як стандартний дозвіл для каталогу /tmp і може бути корисний також для каталогів загальних груп.

Без sticky bit, якщо користувач може створювати файли в каталозі, він може видаляти файли з цього каталогу. У загальнодоступному груповому середовищі це може дратувати. Уявіть собі користувачів linda та lori, які обидва мають права на запис у каталог /data/account та отримують ці дозволи завдяки участі у групі account. Тому linda може видаляти файли, створені lori, і навпаки.

Коли ви використовуєте sticky bit, користувач може видаляти файли, тільки якщо виконується одна з таких умов:

  • Користувач є власником файлу;
  • Користувач є власником каталогу, де знаходиться файл.

Під час використання ls -l, ви можете бачити sticky bit як t у позиції, де ви зазвичай бачите дозвіл на виконання для інших:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

Застосування розширених прав

Щоб застосувати SUID, SGID та sticky bit, ви також можете використовувати CHMOD. SUID має числове значення 4, SGID має числове значення 2, а sticky bit має числове значення 1.

Якщо ви хочете застосувати ці дозволи, вам потрібно додати чотиризначний аргумент у CHMOD, перша цифра якого відноситься до спеціальних дозволів. Наступний рядок, наприклад, додасть дозвіл SGID на каталог і встановить rwx для користувача та rx для групи та інших:

chmod 2755 /somedir

Це досить непрактично, якщо вам потрібно переглянути поточні права доступу, які встановлені, перш ніж працювати з CHMOD в абсолютному режимі. (Ви ризикуєте перезаписати дозволи, якщо ви цього не зробите.) Тому я рекомендую працювати в відносному режимі, якщо вам потрібно застосувати якийсь із спеціальних дозволів:

  1. Для SUID використовуйте chmod u+s.
  2. Для SGID використовуйте chmod g+s.
  3. Для sticky bit використовуйте chmod +t, а потім ім'я файлу або каталогу, для якого потрібно встановити дозвіл.

У таблиці узагальнено все, що важливо знати про управління спеціальними дозволами.

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Приклад роботи із спеціальними правами

У цьому прикладі ви використовуєте спеціальні дозволи, щоб членам групи було простіше обмінюватися файлами у каталозі спільної групи. Ви призначаєте ID-біт встановленого ідентифікатора групи, а також sticky bit, і бачите, що після їх встановлення додаються функції, які полегшують спільну роботу членів групи.

  1. Відкрийте термінал, в якому ви є користувачем Linda. Створити користувача можна командою useradd linda, додати пароль passwd linda.
  2. Створіть в корені каталог /data та підкаталог /data/sales командою mkdir -p /data/sales. Виконайте cd /data/sales, щоб перейти до каталогу sales. Виконайте touch linda1 и touch linda2, щоб створити два порожні файли, власником яких є Linda.
  3. виконайте su - lisa для перемикання поточного користувача користувача lisa, який також є членом групи sales.
  4. виконайте cd /data/sales і з цього каталогу виконайте ls -l. Ви побачите два файли, створені користувачем linda і належать групі linda. Виконайте rm -f linda*. Це видалити обидва файли.
  5. виконайте touch lisa1 и touch lisa2, щоб створити два файли, які належать користувачеві lisa.
  6. виконайте su - для підвищення ваших привілеїв рівня root.
  7. виконайте chmod g+s,o+t /data/sales, щоб встановити біт ідентифікатора групи (GUID), а також sticky bit у каталозі спільної групи.
  8. виконайте su - linda. Потім виконайте touch linda3 и touch linda4. Тепер ви повинні побачити, що два створені вами файли належать групі sales, яка є власником групи каталогу /data/sales.
  9. виконайте rm -rf lisa*. Sticky bit запобігає видаленню цих файлів від імені користувача linda, оскільки ви не є власником цих файлів. Зауважте, що якщо користувач linda є власником каталогу /data/sales, він у будь-якому випадку може видалити ці файли!

Управління ACL (setfacl, getfacl) у Linux

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

Списки контролю доступу пропонують цю функцію. Крім того, вони дозволяють адміністраторам встановлювати стандартні дозволи складним способом, при якому встановлені дозволи можуть відрізнятися в різних каталогах.

Розуміння ACL

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

Утиліта tar не підтримує ACL. Щоб переконатися, що установки ACL не будуть втрачені під час створення резервної копії, використовуйте зірка замість tar. зірка працює з тими ж параметрами, що й tar; він просто додає підтримку налаштувань ACL.

Ви також можете створити резервну копію ACL за допомогою getfacl, яку можна відновити за допомогою setfacl команди. Щоб створити резервну копію, використовуйте getfacl -R /directory > file.acls. Щоб відновити налаштування з файлу резервної копії, використовуйте setfacl -restore = file.acl.

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

Підготовка файлової системи для ACL

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

Щоб це виправити, потрібно додати опцію acl mount у файлі /etc/fstab, щоб файлова система була змонтована за допомогою ACL за промовчанням.

Зміна та перегляд параметрів ACL за допомогою setfacl та getfacl

Щоб встановити ACL, вам потрібна команда setfacl. Щоб побачити поточні установки ACL, вам потрібен getfacl. команда ls -l не показує існуючих ACL; він просто показує + після списку дозволів, який вказує на те, що списки ACL застосовуються і до файлу.

Перед налаштуванням списків ACL завжди корисно показати поточні налаштування ACL за допомогою getfacl. Нижче на прикладі ви можете побачити поточні права доступу, як показано за допомогою ls -l, а також як показано з getfacl. Якщо ви подивіться досить уважно, ви побачите, що показана інформація така сама.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

В результаті виконання команди getfacl Нижче видно, що дозволи показані для трьох різних об'єктів: користувача, групи та інших. Тепер давайте додамо ACL, щоб дати права на читання та виконання та групі sales. Команда для цього setfacl -mg: sales: rx /dir. У цій команді -m вказує, що поточні установки ACL необхідно змінити. Після цього g:sales:rx повідомляє команді встановити ACL для читання та виконання (rx) для групи (g) sales. Нижче можна побачити, як виглядає команда, а також виведення команди getfacl після зміни поточних налаштувань ACL.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Тепер, коли ви розумієте, як встановити груповий ACL, легко зрозуміти ACL для користувачів та інших користувачів. Наприклад, команда setfacl -mu:linda:rwx /data дає дозволи користувачеві linda у каталозі /data, не роблячи його власником та не змінюючи призначення поточного власника.

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

Робота з ACL за замовчуванням

Однією з переваг використання списків ACL є те, що ви можете давати дозволи кільком користувачам або групам у каталозі. Ще однією перевагою є те, що ви можете включити спадкування, працюючи з ACL за промовчанням.

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

Це важливо знати. Якщо ви хочете використовувати ACL для налаштування доступу декількох користувачів або груп до одного каталогу, ви повинні встановити ACL двічі. Спочатку використовуйте setfacl -R -m, щоб змінити ACL для поточних файлів. Потім використовуйте setfacl -md:щоб подбати про всі нові елементи, які також будуть створені.

Щоб встановити ACL за промовчанням, вам просто потрібно додати опцію d після опції -m (Порядок має значення!). Тому використовуйте setfacl -md:g:sales:rx /data, якщо ви хочете, щоб групові продажі прочитали та виконали все, що будь-коли буде створено в каталозі /data.

У разі використання списків ACL за промовчанням також може бути корисно встановити ACL для інших. Зазвичай це не має особливого сенсу, тому що ви також можете змінити дозволи для інших, використовуючи CHMOD. Однак, що ви не можете зробити за допомогою CHMOD, це вказати права, які мають бути надані іншим користувачам для кожного нового файлу, який будь-коли буде створено. Якщо ви хочете, щоб інші не отримували жодних дозволів на будь-що створене в /data, наприклад, використовуйте setfacl -md:o::- /data.

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

Приклад управління розширеними правами за допомогою ACL

У цьому прикладі ви продовжите роботу з каталогами /data/account та /data/sales, які ви створили раніше. У попередніх прикладах ви гарантували, що група sales має дозволи на /data/sales, а група account має дозволи на /data/account.

Спочатку переконайтеся, що група account отримує дозволи на читання в каталозі /data/sales, а група sales отримує дозволи на читання в каталозі /data/account.

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

  1. Відкрийте термінал.
  2. виконайте setfacl -mg:account:rx /data/sales и setfacl -mg:sales:rx /data/account.
  3. виконайте getfaclщоб переконатися, що права доступу були встановлені так, як ви хотіли.
  4. виконайте setfacl -md:g:account:rwx,g:sales:rx /data/sales, щоб встановити ACL за промовчанням для каталогу sales.
  5. Додайте ACL за промовчанням для каталогу /data/account, використовуючи setfacl -md:g:sales:rwx,g:account:rx /data/account.
  6. Переконайтеся, що налаштування ACL діють, додавши новий файл /data/sales. Виконайте touch /data/sales/newfile і виконайте getfacl /data/sales/newfile для перевірки поточних дозволів.

Встановлення стандартних прав за допомогою umask

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

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

Однак деякі винятки стосуються цього правила. Ви можете знайти повний огляд налаштувань умаск у таблиці внизу.

З цифр, що використовуються в умаск, як і у разі числових аргументів для команди CHMOD, перша цифра відноситься до дозволів користувача, друга цифра відноситься до дозволів групи, а остання відноситься до дозволів за замовчуванням, встановлених для інших. Значення умаск 022 за промовчанням дає 644 для всіх нових файлів і 755 для всіх нових каталогів, створених на вашому сервері.

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

Права в Linux (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Простий спосіб побачити, як працює параметр umask, виглядає наступним чином: почніть з дозволів за промовчанням для файлу, встановленого на 666, і відніміть umask, щоб отримати чинні дозволи. Зробіть те саме для каталогу та його дозволів за умовчанням 777.

Є два способи змінити налаштування umask: для всіх користувачів та окремих користувачів. Якщо ви хочете встановити umask для всіх користувачів, ви повинні переконатися, що параметр umask враховується під час запуску файлів середовища оболонки, як зазначено у /etc/profile. Правильний підхід – створити сценарій оболонки з ім'ям umask.sh у каталозі /etc/profile.d та вказати umask, який ви хочете використовувати у цьому сценарії оболонки. Якщо файл змінюється umask, він застосовується до всіх користувачів після входу на сервер.

Альтернативою налаштування umask через /etc/profile та пов'язані файли, де він застосовується до всіх користувачів, що входять до системи, є зміна налаштувань umask у файлі з ім'ям .profile, який створюється в домашньому каталозі кожного користувача.

Налаштування, застосовані в цьому файлі, використовуються лише для окремого користувача; отже, це хороший метод, якщо вам потрібно більше деталізації. Мені особисто подобається ця функція, щоб змінити значення umask за промовчанням для користувача root на 027, тоді як звичайні користувачі працюють з umask за умовчанням 022.

Робота з розширеними атрибутами користувача

Це заключний розділ про права Linux.

Під час роботи з дозволами завжди існує зв'язок між об'єктом користувача або групи та дозволами, які ці об'єкти користувача або групи мають для файлу або каталогу. Альтернативний метод захисту файлів на сервері Linux – робота з атрибутами.
Атрибути виконують роботу незалежно від користувача, який звертається до файлу.

Як і у випадку з ACL, для атрибутів файлу може знадобитися увімкнути параметр монтувати.

Це опція user_xattr. Якщо ви отримуєте повідомлення «operation not supported» під час роботи з розширеними атрибутами користувача, обов'язково встановіть параметр монтувати у файлі /etc/fstab.

Багато атрибутів задокументовано. Деякі атрибути доступні, але не реалізовані. Не використовуйте їх; вони вам нічого не принесуть.

Нижче наведені найкорисніші атрибути, які ви можете застосувати:

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

a Цей атрибут дозволяє додавати, але не видаляти файл.

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

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

d Цей атрибут гарантує, що файл не буде збережено у резервних копіях, де використовується утиліта дампа.

I Цей атрибут включає індексування для каталогу, де він включений. Це забезпечує швидший доступ до файлів примітивних файлових систем, таких як Ext3, які не використовують базу даних B-tree для швидкого доступу до файлів.

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

j Цей атрибут гарантує, що у файловій системі ext3 файл спочатку записується в журнал, а потім у блоки даних на жорсткому диску.

s Перезаписати блоки, в яких був збережений файл, на 0 з після видалення файлу. Це гарантує, що відновлення файлу неможливо після видалення.

u Цей атрибут зберігає інформацію про видалення. Це дозволяє розробляти утиліту, яка працює із цією інформацією для порятунку віддалених файлів.

Якщо ви хочете застосувати атрибути, ви можете використати команду балаканина. Наприклад, використовуйте chattr +s somefile, щоб застосувати атрибути до одногофайлу. Чи потрібно видалити атрибут? Тоді використовуйте chattr -s somefile, і він буде видалено. Щоб отримати огляд усіх атрибутів, які зараз застосовуються, використовуйте команду lsattr.

Резюме

У цій статті ви дізналися, як працювати з дозволами. Ви прочитали про три основні дозволи, розширені дозволи та про те, як застосовувати ACL-списки у файловій системі. Ви також дізналися, як використовувати параметр umask для застосування стандартних дозволів. Наприкінці цієї статті ви дізналися, як використовувати розширені користувачем атрибути для додаткового рівня безпеки файлової системи.

Якщо вам сподобався цей переклад, прошу написати про це в коментарях. Буде більше мотивації робити корисні переклади.

У статті виправив деякі помилки та граматичні помилки. Зменшив деякі громіздкі абзаци на дрібніші для зручності сприйняття.

Замість «Тільки хтось із адміністративними правами на каталог може застосовувати дозвіл на виконання.» виправив на «Тільки хтось із правами запису на каталог може застосовувати дозвіл на виконання», що буде більш правильним.

За зауваження дякую берез.

Замінив:
Якщо ви не є власником користувача, оболонка перевірить, чи ви є учасником групи, яка також називається групою файлу.

На:
Якщо ви не є власником файлу, оболонка перевірить, чи ви є учасником групи, яка має дозвіл на цей файл. Якщо ви є учасником цієї групи, ви отримуєте доступ до файлу з дозволами, які для групи встановлені, та оболонка припинить перевірку.

Дякую за зауваження CryptoPirate

Джерело: habr.com

Додати коментар або відгук