Введение / Зачем это нужно
Права доступа в Linux — это фундаментальный механизм безопасности, который определяет, кто (какой пользователь или группа) может что делать с файлами и каталогами. Неправильная настройка прав — одна из частых причин уязвимостей, сбоев в работе сервисов и ошибок "Permission denied". Этот гайд поможет вам уверенно управлять правами, использовать как базовые (chmod, chown), так и расширенные инструменты (ACL, chattr), и понимать логику системы Linux. После его выполнения вы сможете грамотно настраивать доступ для веб-серверов, shared-каталогов, скриптов и системных файлов.
Требования / Подготовка
- Доступ к терминалу Linux (Ubuntu, CentOS, Debian, Arch или любая другая дистрибутив).
- Права суперпользователя (sudo) для изменения прав системных файлов и использования
chattr. - Базовое понимание командной строки:
ls,cd,cat. - Установленный пакет
acl(для работы с расширенными ACL) в дистрибутивах на базе RPM/Deb:# Для Debian/Ubuntu sudo apt update && sudo apt install acl # Для RHEL/CentOS/Fedora sudo yum install acl - Знание, что вы делаете. Изменение прав на системные файлы (
/etc,/bin,/usr) может привести к неработоспособности системы.
Пошаговая инструкция
Шаг 1: Изучите текущие права файла
Перед любым изменением всегда проверяйте текущие права. Команда ls -l — ваш основной инструмент.
ls -l /etc/passwd /home/user/documents
Пример вывода:
-rw-r--r-- 1 root root 1234 Feb 17 10:00 /etc/passwd
drwxr-xr-x 2 user user 4096 Feb 17 10:05 /home/user/documents
Как читать:
- Первый символ:
-— обычный файл,d— каталог,l— символьная ссылка. - Следующие 9 символов: три группы по три.
rw-(владелец): чтение (r), запись (w), нет исполнения (x).r--(группа): только чтение.r--(остальные): только чтение.
- Владелец:
root, Группа:root(для первого файла).
Шаг 2: Измените права числовым методом (chmod)
Это самый быстрый и распространённый способ. Каждому типу доступа (владелец, группа, другие) соответствует своя цифра в восьмеричной системе.
Логика:
4= чтение (read)2= запись (write)1= исполнение (execute)- Сумма:
7= 4+2+1 (rwx),6= 4+2 (rw-),5= 4+1 (r-x),0= ---
Примеры:
# Дать владельцу все права (rwx), группе и другим только чтение и исполнение (r-x)
chmod 755 script.sh
# Разрешить владельцу чтение/запись, группе — только чтение, другим — никаких прав
chmod 640 config.conf
# Рекурсивно (включая все вложенные файлы и каталоги) установить права 755 для каталога project/
chmod -R 755 project/
⚠️ Важно: Использование
chmod -Rтребует осторожности. Для каталогов обычно нуженx(доступ к содержимому), а для файлов он не всегда требуется. Командаchmod -R 755 /some/pathустановитxдля всех файлов, что может быть небезопасно.
Шаг 3: Измените права символьным методом (chmod)
Более гибкий и читаемый способ, особенно когда нужно изменить только одну часть прав.
Синтаксис: chmod [ugoa][+-=][rwx] <файл>
- Кто:
u(user/владелец),g(group/группа),o(others/остальные),a(all/все, по умолчанию). - Оператор:
+(добавить),-(удалить),=(установить точно). - Права:
r,w,x.
Примеры:
# Добавить право на выполнение (x) для владельца файла
chmod u+x /usr/local/bin/myscript
# Удалить право на запись (w) для группы и остальных
chmod go-w sensitive_data.txt
# Владелец: rwx, Группа: rwx, Остальные: --- (полная изоляция)
chmod 770 private_folder/
# Или символьно: chmod u=rwx,g=rwx,o= private_folder/
# Дать группе те же права, что и владельцу (часто используется для совместной работы)
chmod g=u shared_file.log
Шаг 4: Настройте расширенные ACL (setfacl)
Стандартная модель (владелец/группа/остальные) часто недостаточна. ACL (Access Control Lists) позволяют задавать права для конкретного пользователя или группы, не меняя владельца или основную группу файла.
Установка прав:
# Дать пользователю ivan полный доступ (rwx) к файлу report.pdf
sudo setfacl -m u:ivan:rwx report.pdf
# Дать группе developers права на чтение и запись (rw-) к каталогу src/
sudo setfacl -m g:developers:rw- src/
# Удалить ACL-запись для пользователя ivan
sudo setfacl -x u:ivan report.pdf
Просмотр ACL:
# Показать стандартные и расширенные права
getfacl report.pdf
Пример вывода getfacl:
# file: report.pdf
# owner: user
# group: staff
user::rw-
group::r--
mask::rwx
other::r--
user:ivan:rwx # <- наша ACL-запись
group:developers:rw- # <- ещё одна ACL-запись
Примечание:
mask— это маска для ACL-записей. Обычно она совпадает с максимальными правами из всех ACL-записей для группы/остальных. Устанавливается автоматически, но может быть изменена черезsetfacl -m m::rwx.
Рекурсивная настройка ACL для каталога:
# Установить ACL по умолчанию для новых файлов в каталоге (важно для shared-папок)
sudo setfacl -d -m g:developers:rwx /projects/shared/
# Теперь все новые файлы, созданные в /projects/shared/, унаследуют эти права.
Шаг 5: Установите специальные атрибуты (chattr)
Атрибуты, управляемые командой chattr, работают на уровне файловой системы (ext3/ext4, XFS) и не могут быть изменены обычными средствами, даже root'ом, пока установлены. Это мощный инструмент для защиты критичных файлов.
Основные флаги:
i(immutable) — файл нельзя изменять, удалять, переименовывать, создавать на его месте ссылки.a(append-only) — файл можно только дописывать в конец (например, для логов).s(secure deletion) — при удалении файла блоки диска обнуляются (медленно).u(undelete) — при удалении сохраняется возможность восстановления.
Примеры:
# Сделать файл неизменяемым (защита от случайного удаления/изменения)
sudo chattr +i /etc/nginx/nginx.conf
# Проверить атрибуты: lsattr /etc/nginx/nginx.conf
# Разрешить изменения (снять защиту)
sudo chattr -i /etc/nginx/nginx.conf
# Установить режим "дозапись" для лог-файла (защита от подмены)
sudo chattr +a /var/log/application.log
Важно: Для каталогов флаг i блокирует создание/удаление файлов внутри него.
Шаг 6: Работа с setuid, setgid и sticky bit
Это специальные биты прав доступа, которые меняют поведение при выполнении или создании файлов.
- setuid (4000 / s для владельца): Когда исполняемый файл имеет этот бит, он запускается с правами владельца файла, а не того, кто его запустил. Классический пример —
passwd(владелец root).ls -l /usr/bin/passwd # -rwsr-xr-x 1 root root ... /usr/bin/passwd # Обратите внимание на 's' вместо 'x' у владельца.⚠️ Осторожно! Не устанавливайте setuid на скрипты (обходка через интерпретатор) или ненадёжные программы.
- setgid (2000 / s для группы): Два эффекта:
- Для исполняемого файла: запускается с правами группы-владельца.
- Для каталога: все новые файлы, созданные внутри, наследуют группу-владельца каталога, а не основную группу пользователя, их создавшего. Незаменимо для общих каталогов.
# Установить setgid для каталога shared (чтобы новые файлы принадлежали группе 'devs') chmod 2775 /shared/ # Или символьно: chmod g+s /shared/ - sticky bit (1000 / t для остальных): В каталоге с sticky bit пользователь может удалять/переименовывать только свои файлы, даже если имеет право на запись в каталог. Классический пример —
/tmp.ls -ld /tmp # drwxrwxrwt 10 root root ... /tmp # Обратите внимание на 't' вместо 'x' у остальных.
Шаг 7: Управление владельцем и группой (chown, chgrp)
Иногда нужно сменить не права, а собственника файла.
# Изменить владельца файла
sudo chown alice:developers config.yml
# Эквивалентно: sudo chown alice config.yml && sudo chgrp developers config.yml
# Рекурсивно сменить владельца всего каталога project и его содержимого
sudo chown -R www-data:www-data /var/www/project/
# Изменить только группу (chgrp)
sudo chgrp -R staff /opt/scripts/
Проверка результата
После внесения изменений обязательно проверьте их:
- Для стандартных прав:
ls -l <файл/каталог> - Для ACL:
getfacl <файл/каталог> - Для атрибутов chattr:
lsattr <файл/каталог> - Практический тест: Попробуйте выполнить действие от имени другого пользователя (с помощью
sudo -u <user> <command>или переключившись в его сессию), чтобы убедиться, что доступ работает так, как задумано.
Возможные проблемы
- "Permission denied" при выполнении скрипта: Проверьте, есть ли у владельца файла и текущего пользователя право на выполнение (
x). Также проверьте, не установлен ли атрибутiчерезchattr. - Потеря доступа после
chmod 777илиchmod 000: Если вы случайно установили слишком строгие или слишком общие права, верните нужные значения черезsudo chmod(если у вас ещё есть права sudo) или загрузитесь в режиме восстановления (recovery mode). - ACL не работают: Убедитесь, что файловая система смонтирована с опцией
acl(обычно в современных дистрибутивах это по умолчанию). Проверьте/etc/fstab. Для применения изменений вfstab可能需要 перемонтировать раздел. - Setuid на скрипте не работает: Это особенность ядра Linux. Setuid работает только с бинарными исполняемыми файлами. Для скриптов используйте
sudoс настройкой в/etc/sudoersили setgid на каталоге с wrapper-скриптом. - Не удаётся удалить файл в каталоге с setgid: Убедитесь, что у вас есть право на запись (
w) в сам каталог, а не только на файл. Удаление файла — это изменение содержимого каталога.
Хотите углубиться в управление привилегиями? Ознакомьтесь с нашим подробным гайдом по настройке sudoers для безопасного делегирования прав: /guides/linux/linux-sudoers-config
Заключение и лучшие практики
- Принцип наименьших привилегий: Давайте только те права, которые необходимы для работы. Избегайте
777и666. - Используйте группы для совместного доступа: Создавайте группы (
groupadd devs), добавляйте пользователей (usermod -aG devs alice) и давайте права группе (chmod 770 /project). - Для сложных сценариев — ACL: Если модели "владелец/группа/остальные" недостаточно, сразу переходите на ACL.
- Защищайте критические файлы: Используйте
chattr +iдля конфигурационных файлов ядра, системных утилит или важных скриптов. - Setuid/setgid — с умом: Устанавливайте только на проверенные, доверенные бинарные файлы. Никогда — на скрипты.
- Всегда проверяйте: После настройки прав протестируйте доступ от имени нужных пользователей.
Права доступа — это мощный, но требующий аккуратности инструмент. Освойте его, и ваша Linux-система станет значительно надёжнее и безопаснее.