Введение / Зачем это нужно
В Linux права доступа — это фундаментальный механизм безопасности. Они определяют, кто может читать, изменять или выполнять файлы и папки. Неправильные настройки могут привести к утечке конфиденциальных данных, ошибкам работы программ или невозможности совместного использования ресурсов. Этот гайд поможет вам освоить полный цикл управления правами: от чтения текущих настроек до тонкой настройки с помощью ACL. Вы сможете защитить систему и гибко настраивать доступ для разных пользователей и групп.
Требования / Подготовка
Перед началом убедитесь, что у вас есть:
- Доступ к терминалу Linux (любой дистрибутив: Ubuntu, CentOS, Debian, Arch и т.д.).
- Базовые навыки работы с командной строкой (навигация, создание файлов).
- Права администратора (
sudo) для смены владельца (chown) и установки некоторых расширенных прав (ACL). Для простогоchmodправаsudoобычно не требуются, если вы являетесь владельцем файла.
Шаг 1: Понимание текущих прав доступа
Прежде чем что-то менять, нужно уметь читать текущие настройки. Основная команда — ls -l. Она выводит детальную информацию о файлах.
$ ls -l /etc/passwd
-rw-r--r-- 1 root root 2564 фев 16 10:30 /etc/passwd
Разберем вывод:
-rw-r--r--— это строка прав доступа (10 символов).- Первый символ (
-): тип файла (-— обычный файл,d— каталог,l— ссылка). - Следующие 9 символов разбиты на три triplet по 3 символа: владелец (user), группа (group), остальные (others).
r— чтение (read),w— запись (write),x— выполнение (execute),-— отсутствие права.- Пример:
rw-— чтение и запись, но без выполнения.
- Первый символ (
1— количество жестких ссылок.root root— владелец и группа файла.2564— размер в байтах.фев 16 10:30— дата и время последнего изменения./etc/passwd— имя файла.
Ключевое правило: Права применяются в порядке: владелец > группа > остальные. Система проверяет, кем вы являетесь (владельцем, членом группы или ни тем, ни другим), и применяет первую подходящую тройку.
Шаг 2: Изменение владельца и группы (команда chown)
Часто требуется сменить, кто owns (владеет) файлом. Это делается командой chown.
Базовый синтаксис:
sudo chown [новый_владелец] [файл]
Примеры:
# Сменить только владельца
sudo chown alice script.sh
# Сменить и владельца, и группу
sudo chown alice:developers script.sh
# Сменить только группу (владелец остается прежним)
sudo chown :developers script.sh
# Рекурсивно для всей директории и ее содержимого
sudo chown -R alice:developers /project/
⚠️ Важно: Для смены владельца почти всегда требуются права
sudo. Обычный пользователь не может "забрать" файл у другого пользователя.
Шаг 3: Изменение прав доступа (команда chmod)
Самая частая операция — установка прав rwx. Это делает команда chmod. Есть два основных способа: числовой (octal) и символьный.
Числовой режим (octal)
Здесь каждая позиция (владелец, группа, другие) задается цифрой от 0 до 7, которая является суммой значений: r=4, w=2, x=1.
| Цифра | Права (rwx) |
|---|---|
| 0 | --- |
| 1 | --x |
| 2 | -w- |
| 3 | -wx |
| 4 | r-- |
| 5 | r-x |
| 6 | rw- |
| 7 | rwx |
Пример:
# Дать владельцу полные права (rwx=7), группе и остальным — чтение и выполнение (r-x=5)
chmod 755 script.sh
# Разрешить всем полный доступ (НЕБЕЗОПАСНО, только для общих папок!)
chmod 777 shared_folder/
# Владелец: чтение/запись, группа: только чтение, остальные: никаких
chmod 640 config.conf
Символьный режим
Более гибкий способ, где вы явно указываете, для кого (u — user, g — group, o — others, a — all) и какие права (r, w, x) добавлять (+), убирать (-) или устанавливать точно (=).
Примеры:
# Добавить выполнение (x) для владельца
chmod u+x script.sh
# Убрать запись (w) у группы и остальных
chmod go-w important.log
# Дать группе полные права (rwx), остальным — только чтение
chmod g=rwx,o=r file.txt
# Установить точные права: владелец rwx, группа и остальные r-x
chmod a=rx,u+w file.sh # эквивалент 755
Шаг 4: Расширенные права доступа (ACL)
Стандартная модель (владелец/группа/остальные) часто недостаточна. Для тонкого управления (например, дать права отдельному пользователю ivan на конкретный файл) используются Access Control Lists (ACL).
- Проверьте, включена ли поддержка ACL на вашем разделе (обычно включена по умолчанию для ext4):
mount | grep ' / ' | grep acl
Если вывод есть — все в порядке. - Установите ACL для файла
report.pdf, чтобы пользовательivanмог его читать и писать:sudo setfacl -m u:ivan:rw- report.pdf - Просмотрите текущий ACL:
getfacl report.pdf
Вывод будет содержать стандартные права и строку с пользовательскими настройками:user:ivan:rw- - Удалите ACL для пользователя:
sudo setfacl -x u:ivan report.pdf
💡 Совет: ACL особенно полезны для общих сетевых папок (
/srv/share), где нужно предоставить доступ нескольким конкретным пользователям, не создавая отдельные группы.
Шаг 5: Практические примеры
Теперь применим знания на типичных задачах.
Пример 1: Сделать скрипт исполняемым
У вас есть скрипт deploy.sh, но при запуске ./deploy.sh вы получаете "Permission denied".
# 1. Проверьте текущие права
ls -l deploy.sh
# Вывод: -rw-r--r-- 1 user user 1234 ... deploy.sh (нет x)
# 2. Добавьте право на выполнение для владельца
chmod u+x deploy.sh
# 3. Проверьте результат
ls -l deploy.sh
# Вывод: -rwxr--r-- 1 user user 1234 ... deploy.sh
Пример 2: Разрешить запись для группы разработчиков
Вы хотите, чтобы все члены группы devs могли редактировать файл config.ini.
# 1. Убедитесь, что файл принадлежит группе devs
ls -l config.ini
# Вывод: -rw-r--r-- 1 alice devs ... config.ini
# 2. Если группа уже devs, просто дайте группе право на запись
chmod g+w config.ini
# Теперь права: -rw-rw-r-- (764). Группа devs может читать и писать.
# 3. (Опционально) Если файл должен быть доступен только на чтение для остальных
chmod o-r config.ini
# Итог: -rw-rw---- (760)
Пример 3: Создать защищенную общую папку с sticky bit
Вы создаете папку /shared/uploads, куда все могут загружать файлы, но удалять могут только свои файлы или root.
mkdir /shared/uploads
# Даем полный доступ всем на запись и чтение (для загрузки)
chmod 777 /shared/uploads
# Включаем sticky bit (t в правах для "остальных")
chmod +t /shared/uploads
# Проверьте: drwxrwxrwt (последний символ 't' вместо 'x')
ls -ld /shared/uploads
Теперь любой пользователь может создать файл в этой папке, но не сможет удалить или переименовать файл, созданный другим пользователем.
Проверка результата
После внесения изменений обязательно проверьте:
- Базовые права:
ls -l [файл/папка]— убедитесь, что владелец, группа и триплеты (rwx) соответствуют ожиданиям. - ACL (если использовали):
getfacl [файл]— проверьте наличие и корректность записейuser:[имя]:[права]. - Функциональность: Попробуйте выполнить действие от имени нужного пользователя (например, прочитать, записать или выполнить файл). Для теста можно использовать
sudo -u [пользователь] [команда].
Возможные проблемы
- Ошибка
Operation not permittedприchownилиchmod:- Вы не запустили команду с
sudo(если меняете не свой файл). - Файловая система смонтирована с опцией
nosuidилиnodev(редко). - У файла установлен immutable флаг (
chattr +i файл). Снимите его:sudo chattr -i файл.
- Вы не запустили команду с
- ACL не применяются:
- Файловая система не поддерживает ACL (см. Шаг 4). Нужно перемонтировать с опцией
acl. - Вы не использовали
sudoдляsetfacl(требуется для изменения ACL чужих файлов).
- Файловая система не поддерживает ACL (см. Шаг 4). Нужно перемонтировать с опцией
- Изменения
chmodне влияют на доступ:- Вы пытаетесь изменить права на файл, который находится на смонтированном сетевом ресурсе (NFS, Samba). Права могут управляться на стороне сервера.
- Вы являетесь не владельцем файла и у вас нет
sudo.
- После
chmod 777доступ все равно запрещен:- Проверьте SELinux/AppArmor. Они могут блокировать доступ независимо от стандартных прав. Временно отключите для диагностики (не в продакшене!):
sudo setenforce 0(SELinux).
- Проверьте SELinux/AppArmor. Они могут блокировать доступ независимо от стандартных прав. Временно отключите для диагностики (не в продакшене!):