🔒
Инструменты разработчика
March 21, 20268 min readBy BrowseryTools Team

Права доступа к файлам Unix и команда chmod: полное руководство

Как работают права доступа к файлам Unix, что означают восьмеричные коды chmod, как читать вывод ls -l и практические примеры команд chmod.

chmodправа доступаlinuxunixфайловая система

Каждый файл и каталог в 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 →