Введение / Зачем это нужно
В Linux многопользовательская система, где каждый файл и каталог имеет владельца и группу. Права доступа контролируют, кто может читать, изменять или выполнять файлы. Понимание прав доступа критически важно для безопасности, предотвращения ошибок "Permission denied" и корректной работы сервисов. После этого руководства вы сможете уверенно настраивать права для любых сценариев.
Требования / Подготовка
Перед началом убедитесь, что у вас есть:
- Доступ к терминалу Linux (локально или через SSH).
- Базовые знания навигации в командной строке.
- Для операций изменения владельца или специальных битов потребуются права суперпользователя (sudo).
Шаг 1: Основы прав доступа: владелец, группа, остальные
Каждый файл и каталог в Linux имеет три категории пользователей:
- Владелец (user) — пользователь, создавший объект.
- Группа (group) — пользователи, входящие в группу-владельца.
- Остальные (others) — все остальные пользователи системы.
Для каждой категории можно задать три типа действий:
- r (read) — чтение содержимого файла или списка файлов в каталоге.
- w (write) — изменение файла или создание/удаление в каталоге.
- x (execute) — запуск файла как программы или вход в каталог (для
cd).
Шаг 2: Как читать права доступа: команда ls -l
Чтобы увидеть права, выполните:
ls -l имя_файла
Пример вывода:
-rwxr-xr-- 1 alice developers 4096 Feb 17 10:00 script.sh
Расшифровка первых 10 символов:
-— тип объекта (-файл,dкаталог,lсимвольная ссылка).rwx— права владельца (alice: читать, писать, выполнять).r-x— права группы (developers: читать и выполнять).r--— права остальных (только чтение).
Шаг 3: Типы прав: read, write, execute
- Чтение (r): для файла — просмотр содержимого; для каталога — список файлов (
ls). - Запись (w): для файла — изменение содержимого; для каталога — создание, удаление, переименование файлов (требуется также
xна каталоге). - Выполнение (x): для файла — запуск как программы; для каталога — вход (
cd) и доступ к метаданным.
Шаг 4: Изменение прав с помощью chmod
Команда chmod изменяет права. Есть два режима:
Числовой (восьмеричный)
Каждой категории соответствует трехбитное число. Права суммируются: r=4, w=2, x=1.
Пример: rwx = 7, rw- = 6, r-x = 5, r-- = 4.
Установка rwxr-xr-x (755):
chmod 755 script.sh
Символьный
Синтаксис: chmod [who][operator][permissions]
who:u(владелец),g(группа),o(остальные),a(все, по умолчанию).operator:+(добавить),-(удалить),=(установить точно).permissions:r,w,x,s(setuid/setgid),t(sticky bit).
Примеры:
chmod u+x script.sh # Добавить execute для владельца
chmod g-w script.sh # Удалить write для группы
chmod o=r script.sh # Установить только чтение для остальных
chmod a+x script.sh # Добавить execute для всех
Шаг 5: Изменение владельца и группы: chown и chgrp
Для смены владельца используйте chown:
sudo chown new_owner файл
Для смены и владельца, и группы:
sudo chown new_owner:new_group файл
Только группа:
sudo chgrp new_group файл
# или
sudo chown :new_group файл
Эти команды требуют прав суперпользователя.
Шаг 6: Специальные биты: setuid, setgid и sticky bit
Помимо rwx, есть специальные биты:
- setuid (4000) — файл выполняется с правами владельца, а не текущего пользователя. Используется для программ вроде
passwd.sudo chmod 4755 /usr/bin/passwd
Вls -lотображается какrwsr-xr-x(s вместо x для владельца). - setgid (2000) — для файла: выполнение от имени группы-владельца; для каталога: новые файлы наследуют группу каталога.
sudo chmod 2770 каталог
Отображается какrwxrwsr-x(s для группы). - sticky bit (1000) — на каталогах: только владелец файла может удалить/переименовать его, даже если у остальных есть
wна каталог. Пример —/tmp.sudo chmod 1777 /tmp
Отображается какrwxrwxrwt(t вместо x для остальных).
Шаг 7: Расширенные права: ACL
Стандартных прав иногда недостаточно. POSIX ACL позволяет задавать права для конкретных пользователей или групп, не входящих в основные категории.
Установка прав для пользователя:
sudo setfacl -m u:username:rwx файл
Удаление:
sudo setfacl -x u:username файл
Просмотр:
getfacl файл
В ls -l ACL обозначается + в конце строки прав (например, -rwxr-xr--+).
Проверка результата
После изменений проверьте права командой ls -l. Для ACL используйте getfacl для детального просмотра. Убедитесь, что строка прав (или ACL) соответствует ожидаемым.
Возможные проблемы
- Permission denied при выполнении команды: недостаточно прав (требуется
sudo) или попытка выполнить файл безx. - Потеря прав при копировании:
cpпо умолчанию сбрасывает права. Используйтеcp -pдля сохранения. - Неправильный числовой режим: запомните, что каждый разряд — отдельная категория.
chmod 777дает полные права всем — опасная практика. - Сброс setuid/setgid: при изменении через символьный режим без
u+s/g+sспециальные биты могут сброситься. Используйте числовой режим или явно укажитеu+s. - ACL не работает: файловая система должна быть смонтирована с опцией
acl(например, для ext4 в/etc/fstab). Проверьтеmount | grep /илиtune2fs -l /dev/sdX | grep 'Default mount options'.