Права доступа к файлам Unix и команда chmod: полное руководство
Как работают права доступа к файлам Unix, что означают восьмеричные коды chmod, как читать вывод ls -l и практические примеры команд chmod.
Каждый файл и каталог в Linux или macOS имеет набор прав доступа, управляющих тем, кто может читать его, записывать в него или исполнять его. Правильная настройка этих прав — разница между защищённым сервером и тем, что утечёт данные или окажется скомпрометированным. Тем не менее запись вроде chmod 755 или вывод ls -la с -rwxr-xr-- могут казаться непрозрачными, пока вы не поймёте лежащую в основе модель. Это руководство объясняет права доступа Unix с первых принципов.
Вы можете вычислять значения прав и конвертировать между восьмеричной и символьной нотацией с помощью калькулятора chmod BrowseryTools — бесплатно, без регистрации, всё работает в браузере.
Модель прав Unix: владелец, группа, остальные
Unix назначает каждому файлу и каталогу три набора прав, каждый из которых охватывает определённую аудиторию:
- Владелец (user) — учётная запись пользователя, которому принадлежит файл. Как правило, пользователь, создавший его.
- Группа — именованная группа пользователей. Файл принадлежит одной группе; все члены этой группы разделяют групповые права.
- Остальные (other/world) — все остальные пользователи системы, кроме владельца и членов группы.
Внутри каждого из трёх наборов есть три бита прав: чтение (r), запись (w) и выполнение (x). Итого девять битов прав, которые напрямую соответствуют девяти символам после индикатора типа файла в выводе ls -la.
Чтение вывода ls -la
При запуске ls -la каждая строка начинается с 10-символьной строки вроде -rwxr-xr--. Вот как её читать:
- rwx r-x r-- ^ ^^^ ^^^ ^^^ | | | └── остальные: только чтение | | └─────── группа: чтение + выполнение | └──────────── владелец: чтение + запись + выполнение └─────────────── тип файла: - = файл, d = каталог, l = символическая ссылка
Дефис - на месте бита права означает, что это право не предоставлено. Таким образом, r-x означает: чтение и выполнение разрешены, запись — нет.
Смысл чтения, записи и выполнения для файлов и каталогов
Три бита прав имеют разный смысл в зависимости от того, применяются ли они к файлу или каталогу:
- Чтение файла (r) — можно читать содержимое файла (
cat,less, открыть в редакторе). - Запись файла (w) — можно изменять или усекать файл. Удаление файла контролируется правом на запись родительского каталога, а не битом записи самого файла.
- Выполнение файла (x) — можно запускать файл как программу или скрипт. Без этого бита
./script.shвозвращает «Permission denied», даже если файл можно читать. - Чтение каталога (r) — можно просматривать содержимое каталога (
ls). Без него каталог существует, но его содержимое невидимо. - Запись каталога (w) — можно создавать, переименовывать или удалять файлы внутри каталога. Поэтому можно удалить файл, которым не владеешь, если есть право записи в родительский каталог.
- Выполнение каталога (x) — можно входить в каталог (
cd) и обращаться к файлам внутри, зная их имена. Иногда называется «битом поиска». Каталог сr--позволяет перечислять имена файлов, но не обращаться к ним; каталог с--xпозволяет обращаться к файлам по имени, но не перечислять их.
Восьмеричная нотация: 755, 644, 777
Каждый набор прав (владелец, группа, остальные) — три бита. Три бита могут представлять значения от 0 до 7 — ровно одна восьмеричная цифра. Именно поэтому права записываются как три восьмеричные цифры, по одной для каждой аудитории:
Значения битов: r = 4, w = 2, x = 1 rwx = 4+2+1 = 7 r-x = 4+0+1 = 5 r-- = 4+0+0 = 4 --- = 0+0+0 = 0 chmod 755 → владелец: 7 (rwx), группа: 5 (r-x), остальные: 5 (r-x) chmod 644 → владелец: 6 (rw-), группа: 4 (r--), остальные: 4 (r--) chmod 600 → владелец: 6 (rw-), группа: 0 (---), остальные: 0 (---)
Запоминать все комбинации необязательно — используйте калькулятор chmod BrowseryTools, чтобы проверить смысл любого восьмеричного значения или подобрать нужное для вашей ситуации.
Символьная нотация: u+x, g-w, o=r
Символьный режим позволяет изменять права относительно их текущего состояния, не задавая все три набора сразу. Формат: [кто][операция][права]:
- Кто:
u(владелец/пользователь),g(группа),o(остальные),a(все трое) - Операция:
+(добавить),-(убрать),=(задать точно) - Права:
r,w,x
chmod u+x script.sh # добавить выполнение только для владельца chmod g-w config.txt # убрать запись для группы chmod o=r public.html # задать остальным только чтение chmod a+r file.txt # добавить чтение для всех chmod u=rwx,g=rx,o= # эквивалентно chmod 750
Типичные паттерны прав: разбор
- 755 (
rwxr-xr-x) — стандарт для исполняемых файлов и каталогов. Владелец может всё; все остальные могут читать и выполнять (или входить в каталог), но не записывать. По умолчанию для корневых каталогов документов веб-сервера и публичных скриптов. - 644 (
rw-r--r--) — стандарт для обычных файлов. Владелец может читать и писать; все остальные только читают. Подходит для веб-ресурсов, конфигурационных файлов без секретов и большинства статического контента. - 600 (
rw-------) — владелец может читать и писать; никто другой не имеет доступа. Обязателен для приватных SSH-ключей (~/.ssh/id_rsa). SSH откажется использовать файл ключа с более слабыми правами. - 700 (
rwx------) — владелец может всё; никто другой не имеет доступа. Хорошо для приватных скриптов и каталогов с конфиденциальными данными. - 400 (
r--------) — только чтение для владельца; полная блокировка для всех остальных. Используется для неизменяемых конфигурационных файлов и сертификатов, где случайная запись была бы опасна.
Почему 777 опасен
chmod 777 даёт права на чтение, запись и выполнение каждому пользователю в системе. Это означает, что любой процесс, запущенный от любого пользователя — включая скомпрометированное веб-приложение, вредоносный скрипт в общем хостинге или любого другого пользователя на машине — может изменить или исполнить файл. В контексте веб-сервера PHP-файл с правами 777 позволяет любому другому процессу перезаписать его вредоносным кодом. Никогда не используйте 777 в продакшне. Если вы используете его для «исправления ошибки прав», правильное решение — передать файл нужному пользователю или группе.
Setuid, Setgid и Sticky bit
Помимо девяти стандартных битов, существуют три специальных бита, отображаемых как четвёртая ведущая цифра в четырёхзначной восьмеричной нотации:
- Setuid (4xxx) — при установке на исполняемый файл программа запускается с привилегиями владельца файла, а не вызывающего.
/usr/bin/passwdиспользует это, чтобы обычные пользователи могли писать в/etc/shadow, принадлежащий root. - Setgid (2xxx) — на исполняемом файле запускается с привилегиями группы файла. На каталоге: новые файлы, созданные внутри, наследуют группу каталога, а не основную группу создателя — полезно для каталогов совместных проектов.
- Sticky bit (1xxx) — на каталоге запрещает пользователям удалять файлы, которыми они не владеют, даже если есть право записи в каталог. На
/tmpустановлен sticky bit (chmod 1777), чтобы пользователи могли создавать свои временные файлы, но не могли удалять чужие.
chmod с флагом -R и практические примеры
Флаг -R рекурсивно применяет изменение прав к каталогу и всему его содержимому. Используйте его осторожно — применение одних и тех же прав и к файлам, и к каталогам часто неверно, потому что каталогам нужен бит выполнения для входа в них, а обычные файлы в норме не должны иметь права выполнения:
# Веб-сервер: каталогам нужны 755, файлам — 644
find /var/www/html -type d -exec chmod 755 {} ;
find /var/www/html -type f -exec chmod 644 {} ;
# Исправить права SSH-ключей
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 644 ~/.ssh/authorized_keys
# Сделать скрипт деплоя исполняемым
chmod +x deploy.shЕсли вы не уверены, какое восьмеричное значение использовать, калькулятор chmod BrowseryTools позволяет отмечать чекбоксы прав для владельца, группы и остальных и сразу видеть результирующее восьмеричное значение и символьную нотацию.
Бесплатный калькулятор chmod — восьмеричное ↔ символьное ↔ читаемое
Открыть калькулятор chmod →Try the Tools — 100% Free, No Sign-Up
Everything runs in your browser. No uploads. No accounts. No ads.
Explore All Tools →