16. Права доступа к файлам и директориям команды chmod, chown, chgrp
Введение
В Linux всё — файл, и каждый файл или директория имеет владельца, группу и набор прав доступа. Эти права определяют, кто и что может делать с файлом: читать, изменять или запускать. Сегодня разберём, как управлять правами с помощью команд chmod, chown и chgrp, и как это связано с полномочиями суперпользователя (root), о котором мы говорили ранее.
Зачем нужны права доступа
Linux — многопользовательская система. Права доступа:
- Защищают файлы от несанкционированного доступа.
- Позволяют разграничивать доступ между пользователями, группами и всеми остальными.
- Обеспечивают безопасность системы.
Например:
- Пользователь ivanov не должен удалить файлы petrov.
- Веб-сервер (www-data) должен иметь доступ только к своим файлам.
- Секретные файлы (например, /etc/shadow) доступны только root.
Как устроены права доступа
Каждый файл/директория имеет:
- Владельца (user).
- Группу (group).
- Права для трёх категорий:
- u (user) — владелец.
- g (group) — группа.
- o (others) — остальные.
Посмотреть права можно командой:
ls -l
Пример вывода:
-rwxr-xr-- 1 ivanov developers 4096 Dec 11 2025 script.sh
Разберём:
- rwxr-xr--:
- 1-й символ: - (файл, d — директория, l — ссылка).
- 2–4: rwx — права владельца (чтение, запись, выполнение).
- 5–7: r-x — права группы (чтение, выполнение, без записи).
- 8–10: r-- — права остальных (только чтение).
- ivanov — владелец.
- developers — группа.
- script.sh — имя файла.
Команда chmod — управление правами
chmod изменяет права доступа к файлам и директориям.
Синтаксис:
Bash
chmod [опции] режим файл
Два способа задания прав:
-
Восьмеричный (числовой):
- Права задаются тремя цифрами (для u, g, o).
- Каждое право имеет значение:
- r (read) = 4
- w (write) = 2
- x (execute) = 1
- — (нет права) = 0
Примеры:
bash chmod 755 script.sh # rwxr-xr-x (владелец: всё, остальные: чтение+выполнение) chmod 644 document.txt # rw-r--r-- (владелец: чтение+запись, остальные: чтение) chmod 600 private.key # rw------- (только владелец) -
Символьный:
- Используется для добавления/удаления прав.
- Формат: [u|g|o|a][+|-|=][r|w|x].
Примеры:
bash chmod u+x script.sh # Дать владельцу право выполнения chmod g-w file.txt # Убрать у группы право записи chmod o=r report.pdf # Остальным только чтение chmod a+rwx data/ # Всем всё (осторожно!)
Опция -R:
-
Рекурсивное применение прав:
bash chmod -R 755 /var/www/html
Команда chown — смена владельца
chown изменяет владельца и/или группу файла. Обычно требует прав root.
Синтаксис:
chown [опции] пользователь[:группа] файл
Примеры:
sudo chown root script.sh # Сделать root владельцем
sudo chown www-data:www-data /var/www/html # Владелец и группа — www-data
sudo chown :developers project/ # Сменить только группу
sudo chown -R ivanov:ivanov /home/ivanov # Рекурсивно
Команда chgrp — смена группы
chgrp меняет группу-владельца. Можно использовать chown вместо неё.
Синтаксис:
chgrp [опции] группа файл
Примеры:
sudo chgrp developers script.sh
sudo chgrp -R webdev /var/www
Эквивалент через chown:
sudo chown :developers script.sh
Связь с root
- Только root (или пользователь с соответствующими привилегиями) может:
- Менять владельца (chown).
- Менять группу (chgrp) для файлов, не входящих в свои группы.
- Изменять права системных файлов.
-
Используйте sudo для таких операций:
bash sudo chmod 600 /etc/shadow sudo chown root:root /etc/passwd
Типичные ошибки
- chmod 777 для всего:
- Это открывает доступ всем, включая злоумышленников.
- Вместо этого: используйте минимально необходимые права (например, 644 для файлов, 755 для директорий).
- Забыть -R для директорий:
- Права не применятся к содержимому.
- Правильно: chmod -R 755 /var/www.
- Неправильный владелец:
- Например, сделать root владельцем пользовательских файлов.
- Проверяйте: ls -l.
- Игнорирование групп:
- Группы упрощают разграничение доступа. Используйте их!
Полезные команды для диагностики
id # Кто я и мои группы
stat -c "%a %n" file.txt # Права в численном виде
find / -perm -4000 # Найти файлы с setuid
find /var/www -type f ! -perm 644 # Найти файлы с неправильными правами
Итоги
- Права доступа — основа безопасности Linux.
- chmod: управляет, кто что может делать (rwx).
- chown: меняет владельца.
- chgrp: меняет группу (или используйте chown :group).
- Используйте sudo для операций, требующих прав root.
- Всегда проверяйте права перед изменением и избегайте 777!