• База знань
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Стаття також доступна російською (перейти до перегляду).

Повний гайд з прав у Linux: chmod, chown, ACL, спеціальні дозволи. Безпечна робота з файлами та каталогами

Зміст:

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

Поняття прав на ресурси файлової системи

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

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

Таким чином, права доступу до об’єкту можуть бути визначені для трьох суб’єктів у тлумаченні Linux: 

  • Користувача, котрий створив об’єкт;

  • Для всіх учасників основної групи, до котрої належить користувач;

  • Для всіх інших (Other).    

Стандартні права на об’єкт завжди можна змінити і, навіть, можна змінити всіх або частину його власників, включаючи і користувача, котрий його створив. Наприклад, якщо користувач є учасником декількох груп, то він може змінити свою основну групу на іншу і тоді власником всіх об’єктів користувача стане ця обрана група і всі її учасники. Для зміни власника будь-якого об’єкту, наприклад, файлу можна скористатися стандартним засобом – командою chown, використання котрої пізніше нами буде продемонстровано.

Приклади

Дізнатися хто є власником файлів поточної директорії можна за допомогою команди ls із опцією -l:

$ ls -l

$ ls -l

total 4
-rw-r--r—1  root  root  727   Sep  8  19:24   example_backup.sh

Власником єдиного файлу із ім’ям example_backup.sh є користувач root. 

Отримати список усіх файлів, власником котрих є визначений користувач, можна за допомогою наступної команди:

$ find / -user victor

$ find / -user victor

Список доволі великий і тому представимо лише файли домашньої директорії користувача із ім’ям victor:

/home/victor
/home/victor/myfile
/home/victor/.profile
/home/victor/.bashrc
/home/victor/.local
/home/victor/.local/share
/home/victor/.local/share/nano
/home/victor/.bash_logout

Змінимо власника файлу із ім’ям myfile, котрий належить користувачу із ім’ям victor. Введемо в терміналі:

$ chown grisha /home/victor/myfile

$ chown grisha /home/victor/myfile

Перевіримо результат:

$ find / -user victor

$ find / -user victor

Можна переконатися, що файл відсутній серед ресурсів, котрі належить користувачу victor. 

$ find / -user grisha

$ find / -user grisha

Вихід команди:

/home/victor/myfile
/home/grisha
/home/grisha/.profile
/home/grisha/.bashrc
/home/grisha/.bash_logout

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

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

$ chown -R grisha /home/victor/dir

Тут dir – каталог, котрий належить користувачу victor.

Слід зазначити, що за допомогою команди chown можна змінити не лише користувача, але й групу. Окрім того, для зміни власника ресурсу можна використовувати команду chgrp. 

Наприклад, встановити власником каталогу testing групу office можна за допомогою наступної команди:

$ chgrp .office testing

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

$ groups grisha 

$ groups grisha

Вивід:

grisha : grisha users

Основна група для цього користувача – група grisha. При бажанні можна тимчасово змінити основну групу, однак при цьому необхідно виконання умови присутності користувача у цій групі. Команда при цьому повинна бути такою:

$ newgrp xxxxx 

Тут xxxxx – ім’я групи, котра стане основною для поточного користувача до застосування команди exit або виходу користувача із системи. Після цього старі налаштування повернуться і первинна група знову стане основною для користувача.

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

Види дозволів

Система прав Linux підтримує три основних видів дозволів, котрі можуть бути встановлені для визначеного об’єкту:

  • Дозвіл на читання (Read);

  • Дозвіл на запис (Write);

  • Дозвіл на виконання (Execute).

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

Для можливості використання у командах, кожний із вказаних дозволів має своє числове значення. У Таблиці 1 наведена інформація про дію кожного дозволу для файлів та каталогів, а також вказані їх числові значення. 

Таблиця 1. Результати застосування основних дозволів до файлів та каталогів.

ДозвілЧислове
значення
ФайлКаталог
Read 4 Читання вмісту Відображення вмісту
Write 2 Зміна даних Створення, видалення або встановлення дозволів для файлів
Execute 1 Запуск на виконання Перехід до каталогу

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

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

Абсолютний режим передбачає використання у команді числових значень дозволів у наступній формі:

UGO

Тут позиція U – відображає права на об’єкт для користувача, G – для групи, O – для всіх інших. 

Наприклад, встановимо права на файл із ім’ям myfile:

$ chmod 755 /home/victor/myfile

Тут користувач отримав максимальні права: 4 (читання) + 2 (запис) + 1 (виконання) = 7; група отримала права лише на читання та виконання: 4 + 1 = 5; всі інші також лише читання та виконання.  

$ chmod 755 /home/victor/myfile

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

Наприклад, додамо дозвіл на запис для файлу myfile для групи, але заборонимо його виконання для всіх інших користувачів системи:

$ chmod g+w,o-x /home/victor/myfile

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

Наприклад, додамо дозволи на читання та виконання для всіх інших користувачів для каталогу testing та всіх вкладених каталогів та файлів:  

$ chmod -R o+rx testing

$ chmod -R o+rx testing

Якщо ж необхідно встановити вказані дозволи лише для каталогів, то команду слід змінити наступним чином:

$ chmod -R o+rX testing

Тут ми вказали дозвіл на виконання, записаний у верхньому регістрі (+X). Саме це діє як заборона на виконання для всіх файлів.

$ chmod -R o+rx testing

Використання спеціальних дозволів

Спеціальні дозволи дозволяють отримати розширені права на об'єкти в Linux. Вони  реалізуються за допомогою набору спеціальних дозволів, основна інформація по котрим наведена у Таблиці 2.

Таблиця 2. Синтаксис та характеристики спеціальних дозволів Linux.

ДозвілОписЧислове значенняПриклад використанняДія по відношенню до файлівДія по відношенню до каталогів
SUID Встановлює ідентифікатор користувача 4 chmod u+s myfile Дозвіл на виконання із повноваженнями власника Не використовується
SGID Встановлює ідентифікатор групи 2 chmod g+s mydir Дозвіл на виконання із повноваженнями власника групи Власником усіх файлів каталогу (як існуючих, так і нових) стає власник групи
Sticky bit Блокує видалення файлів 1 chmod +t mydir Не використовується Заборона на видалення файлів іншими користувачами

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

Введемо в терміналі:

$ chmod 2775 testing

Тут, у першій позиції вказується число (2), котрим позначаються спеціальні дозволи; інші числа визначають дозволи для користувача (rwx), групи (rwx) та інших користувачів (rx).  

$ ls -ld testing

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

Перевірити, чи застосовані до каталогу спеціальні дозволи можна за допомогою наступної команди:

$ ls -ld testing

$ ls -ld testing

Вихід команди:

drwxrwsr-x  2  root  root  4096  Sep 20 19:22  testing

Ознакою того, що для каталогу діють спеціальні дозволи, є наявність символу «s» у позиції дозволу на виконання. 

Для файлів для визначення застосування спеціальних дозволів слід використати команду ls із опцією -l. Наявність символу «s» у позиції дозволу на виконання буде свідчити про дію спеціальних дозволів для обраного файлу.

Списки контролю доступу

Розглянуті вище можливості системи управління правами в Linux мають один недолік – вони не дають змоги в одному файлі надавати дозволи більш ніж одному користувачу або групі. Списки контролю доступу (ACL) вирішують це питання, хоча не кожна утиліта підтримує роботу з ними і тому при копіюванні або переміщенні файлів можна втратити налаштування ACL. Наприклад, архіватор tar їх не підтримує і тому замість неї для створення резервних копій файлів можна застосовувати утиліту star або getfacl. 

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

Підготовка до використання

Не кожний дистрибутив Linux має проінстальований пакет ACL і тому його спочатку необхідно встановити. Зробимо це. Введемо в терміналі:

$ apt-get install acl

$ apt-get install acl

Результат: Setting up acl (2.3.1-3). Пакет версії 2.3.1 успішно встановлено.

У більшості випадків стандартна підтримка ACL зазвичай відсутня, ознакою чого може бути поява системного повідомлення operation not supported під час налаштування списків. І тому перед використанням пакету необхідно підготувати файлову систему. Це можна зробити шляхом редагування файлу /etc/fstab, у котрому слід встановити для файлової системи монтування із ACL у якості стандартної функції. 

Введемо в терміналі:

$ nano /etc/fstab

$ nano /etc/fstab

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

Перегляд та зміни налаштувань для об’єктів

Перед внесенням будь-яких змін необхідно володіти поточною інформацією. Переглянути поточні налаштування для каталогу testing можна за допомогою наступної команди:

$ getfacl testing

$ getfacl testing

Вихід команди:

# file: testing
# owner: root
# group: root
# flags: -s-
user::rwx
group::rwx
other::r-x

Команда вивела поточні значення дозволів окремо для користувача, групи та інших. Ця ж інформація може бути виведена за допомогою команди ls -ld, що ми вже демонстрували раніше.

Тепер ми спробуємо за допомогою ACL надати права на читання та виконання для каталогу testing групі office, котра була створена нами раніше. Для цього введемо в терміналі:

$ setfacl -m g:office:rwx testing

Тут параметр -m вказує на необхідність зміни поточних налаштувань ACL.

$ setfacl -m g:office:rwx testing

Знову скористаємося командою getfacl для перевірки нових налаштувань. Введемо в терміналі:

$ getfacl testing

$ getfacl testing

Вихід команди:

# file: testing
# owner: root
# group: root
# flags: -s-

user::rwx group::rwx group:office:rwx mask::rwx other::r-x

Можна переконатися, що для групи із ім’ям office тепер встановлені ті ж самі дозволи, що і для основної групи користувача (rwx), і вони є відмінними від дозволів для всіх інших груп. 

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

Експорт та імпорт ACL прав за допомогою файлів

Технологія передбачає можливість збереження у текстовому файлі поточних ACL-налаштувань для об’єктів файлової системи для подальшого їх відновлення у випадку необхідності. Продемонструємо це на прикладі.

Збережемо поточні налаштування для каталогу testing у файлі acl_backup.txt:

$ getfacl -p testing > acl_backup.txt

Тут опція -p забезпечує збереження шляху до каталогу / файлу на виході команди. Це зручно у випадку масового відновлення даних. 

$ getfacl -p testing > acl_backup.txt

Змінимо права групи office для каталогу testing:  

$ setfacl -m g:office:rw testing

$ setfacl -m g:office:rw testing

Переглянемо поточні налаштування каталогу:

$ getfacl testing

$ getfacl testing

Вихід:

user::rwx
group::rwx
group:office:rw-
mask::rwx
other::r-x

Права групи змінилися із rwx на rw-.

Відновимо попередні налаштування із раніш збереженого файлу acl_backup.txt. Для цього введемо в терміналі:

$ setfacl --restore=acl_backup.txt

Опція --restore забезпечує відновлення даних у форматі getfacl із опцією -p.

$ setfacl --restore=acl_backup.txt

Знову переглянемо поточні налаштування для каталогу testing:

$ getfacl testing

$ getfacl testing

Вихід:

user::rwx
group::rwx
group:office:rwx
mask::rwx
other::r-x

Можна переконатися, що права групи office відновилися, тобто, операція імпорту раніше збережених налаштувань спрацювала.  

Технічне рішення FREEhost.UA

Розуміння системи прав у Linux допомагає адмініструвати сервери. Але якщо ви хочете отримати вже готовий до роботи VPS або виділений сервер із підтримкою спеціалістів FREEhost.UA — наші фахівці допоможуть налаштувати доступи, безпеку та резервні копії.

Підписуйтесь на наш телеграм-канал https://t.me/freehostua, щоб бути в курсі нових корисних матеріалів.

Дивіться наш канал Youtube на https://www.youtube.com/freehostua.

Ми у чомусь помилилися, чи щось пропустили?

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

Дата: 25.09.2025
Автор: Олександр Ровник
Голосування

Авторам статті важлива Ваша думка. Будемо раді його обговорити з Вами:

comments powered by Disqus
navigate
go
exit
Дякуємо, що обираєте FREEhost.UA