Объяснение прав доступа к файлам в Linux
Каждая система Linux использует права доступа к файлам для контроля того, кто может читать, изменять или выполнять файл. Неправильная настройка прав либо блокирует доступ легитимным пользователям, либо оставляет конфиденциальные файлы незащищёнными. Это руководство объясняет, как работают владение файлами и права доступа в Linux, как читать строку прав доступа и как изменять права с помощью chmod и chown.
Ключевые моменты
- Каждый файл имеет владельца, группу и набор прав для трёх классов: владелец, группа и остальные.
- Триплеты прав используют
r(чтение),w(запись) иx(выполнение) — и ведут себя по-разному для файлов и каталогов. - Используйте
chmodдля изменения прав (символьный или восьмеричный режим) иchownдля изменения владельца. - Значение
umaskконтролирует права по умолчанию для вновь создаваемых файлов и каталогов. - Специальные биты (setuid, setgid, sticky) и POSIX ACL обрабатывают случаи, которые стандартная модель не может покрыть.
Структура владения файлами и прав доступа в Linux
Каждому файлу и каталогу в Linux назначаются:
- Владелец (учётная запись пользователя)
- Группа (набор пользователей)
- Набор прав для трёх классов: владелец, группа и остальные
Когда процесс пытается получить доступ к файлу, ядро проверяет эти классы по порядку — сначала владельца, затем группу, затем остальных — и останавливается на первом совпадении. Классы взаимоисключающие: если вы являетесь владельцем, применяются только биты владельца, даже если биты группы более разрешающие.
Как читать права rwx в Linux
Выполните ls -l для просмотра прав:
$ ls -l
-rw-r--r-- 1 alice developers 4017 Jun 1 10:00 config.conf
drwxr-x--- 2 alice developers 68 Jun 1 10:00 project/
Первый символ — это тип файла (- для обычного файла, d для каталога, l для символической ссылки). Следующие девять символов — это три триплета прав:
rw- r-- r--
↑ ↑ ↑
владелец группа остальные
Каждый триплет использует три бита: r (read — чтение), w (write — запись), x (execute — выполнение). Символ - означает, что право не установлено.
Примечание: Если вы видите
+в конце строки прав (например,-rw-r--r--+), к файлу применён POSIX ACL. Стандартныйls -lне покажет эти дополнительные правила — используйтеgetfaclдля их просмотра.
Что на самом деле делает каждый бит прав
Для файлов:
| Бит | Эффект |
|---|---|
r | Чтение содержимого файла (cat, cp) |
w | Изменение или перезапись файла |
x | Выполнение файла как программы или скрипта |
Для каталогов:
| Бит | Эффект |
|---|---|
r | Просмотр содержимого каталога (имена файлов) |
w | Создание, переименование или удаление файлов внутри |
x | Переход в каталог (cd, открытие файлов по пути) |
Бит выполнения для каталогов часто неправильно понимают. Без него вы не можете выполнить cd в каталог или получить доступ к любому файлу внутри него по пути — даже если у вас есть право на чтение.
Как изменить права доступа к файлам в Linux с помощью chmod
chmod принимает как символьный, так и числовой (восьмеричный) режимы.
Символьный режим:
chmod u+x script.sh # добавить выполнение для владельца
chmod go-w config.conf # убрать запись у группы и остальных
chmod u=rwx,g=rx,o= app/ # установить точные права для всех классов
chmod -R u=rwX,g=rX,o=rX /var/www/html # рекурсивно: заглавная X устанавливает выполнение на каталоги и файлы, у которых уже есть право выполнения
Числовой (восьмеричный) режим — каждая цифра суммирует r=4, w=2, x=1:
chmod 644 config.conf # владелец rw, группа r, остальные r
chmod 750 script.sh # владелец rwx, группа rx, остальные нет
chmod 700 ~/.ssh # только владелец — правильно для SSH-каталогов
Discover how at OpenReplay.com.
Как изменить владельца файла с помощью chown
chown изменяет владельца, группу или оба параметра:
chown alice config.conf # изменить только владельца
chown alice:developers config.conf # изменить владельца и группу
chown -R www-data:www-data /var/www # рекурсивное изменение владельца
Как устанавливаются права по умолчанию с помощью umask
Новые файлы не начинаются с открытыми правами. Значение umask маскирует биты из системного значения по умолчанию (обычно 666 для файлов, 777 для каталогов). umask со значением 022 создаёт файлы 644 и каталоги 755 — наиболее распространённое значение по умолчанию на серверах Linux.
Если для родительского каталога настроен ACL по умолчанию, эти правила ACL наследуются вместо того, чтобы полагаться исключительно на umask.
umask # просмотр текущего umask
umask 027 # установить более строгое значение по умолчанию: файлы 640, каталоги 750
Специальные биты прав: setuid, setgid и sticky bit
Они расширяют стандартную модель для конкретных случаев использования:
- setuid (4xxx): Исполняемый файл запускается с привилегиями владельца файла. Используется системными утилитами, такими как
/usr/bin/passwd. Опасен для пользовательских скриптов — избегайте его использования. - setgid (2xxx) для каталога: Новые файлы наследуют группу каталога вместо основной группы создателя. Полезно для общих проектных каталогов.
- Sticky bit (1xxx) для каталога: Только владелец файла, владелец каталога или root могут удалять файлы внутри. Стандартно установлен для
/tmp.
chmod 2775 /shared/project # setgid для общего каталога
chmod 1777 /tmp # sticky bit — уже установлен по умолчанию
За пределами классических прав: ACL и модули безопасности
Стандартные права rwx покрывают большинство случаев использования, но у них есть ограничения. Если вам нужно предоставить доступ конкретному пользователю без изменения членства в группе, используйте POSIX ACL через setfacl и getfacl. В системах с SELinux или AppArmor политики модулей безопасности применяются поверх стандартных прав — файл может быть доступен для чтения всем на уровне UNIX, но всё равно заблокирован политикой SELinux.
Краткий справочник: распространённые шаблоны прав
| Режим | Символьный | Типичное использование |
|---|---|---|
644 | rw-r--r-- | Конфигурационные файлы веб-сервера, публичный контент |
755 | rwxr-xr-x | Каталоги, исполняемые скрипты |
700 | rwx------ | Домашние каталоги, каталог SSH-ключей |
600 | rw------- | Файлы приватных ключей (~/.ssh/id_rsa) |
2775 | rwxrwsr-x | Общие групповые каталоги |
1777 | rwxrwxrwt | Общедоступные для записи каталоги, такие как /tmp |
Заключение
Права доступа к файлам в Linux следуют последовательной, предсказуемой модели. Как только вы поймёте структуру владелец/группа/остальные, биты rwx и то, как chmod и chown их применяют, у вас будет основа для правильной защиты любого файла или каталога. Для случаев, когда модель трёх классов недостаточно детализирована, используйте ACL — и всегда помните о принципе минимальных привилегий.
Часто задаваемые вопросы
Установка 777 предоставляет права на чтение, запись и выполнение каждому пользователю в системе. Хотя это снимает все барьеры доступа, это также означает, что любой пользователь или скомпрометированный процесс может изменить или удалить файл. Всегда назначайте минимальные права, необходимые для корректной работы файла.
chmod изменяет, какие действия (чтение, запись, выполнение) разрешены для файла. chown изменяет, кто владеет файлом и к какой группе он принадлежит. Обычно вы сначала используете chown для назначения правильного владельца и группы, затем chmod для установки соответствующих битов прав для каждого класса.
Для просмотра требуется бит чтения (r), но для входа в каталог требуется бит выполнения (x). Если у каталога есть r, но нет x, вы можете видеть имена файлов с помощью ls, но не можете выполнить cd в него или открыть любой файл внутри по пути. Добавьте бит выполнения с помощью chmod, чтобы исправить это.
Используйте chmod с заглавной X вместо строчной x. Флаг заглавной X устанавливает выполнение только для каталогов и файлов, у которых уже установлен хотя бы один бит выполнения. Например, chmod -R u=rwX,g=rX,o=rX /path применяет выполнение к каталогам, оставляя обычные файлы неисполняемыми.
Gain control over your UX
See how users are using your site as if you were sitting next to them, learn and iterate faster with OpenReplay. — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.