belun.app Блог
EN

chmod без магии: как читать права доступа в Unix

Что на самом деле значат 755 и 644, как связаны числовой и символьный форматы прав и когда нужны setuid, setgid и бит sticky.

Тёмный экран терминала со строками прав доступа Linux и командами chmod в коде

Первый раз, когда chmod 755 чинит сломавшийся деплой, это похоже на заклинание. Копируешь строку со Stack Overflow, ошибка 500 исчезает — и идёшь дальше, так и не поняв, что означала цифра. Всё хорошо ровно до того дня, когда 755 оказывается неверным ответом, а почему — непонятно. Калькулятор chmod превращает эту цифру в то, что можно прочитать.

Три цифры — три категории

У каждого файла в Unix есть права для трёх категорий: владелец, группа владельца и все остальные. Это и есть три цифры в 755, слева направо: владелец, группа, остальные.

Каждая цифра — сумма трёх значений:

  • чтение = 4
  • запись = 2
  • выполнение = 1

Складываете нужные. Чтение плюс запись — это 6. Чтение плюс выполнение — 5. Всё вместе — 7. Ничего — 0. Так что 755 читается как: владельцу всё (7), группе и остальным — чтение и выполнение (5 и 5). В символьной форме тот же режим выглядит как rwxr-xr-x — те же девять переключателей, только выписанные буквами.

Режимы, которые реально набирают

Запоминать все 512 комбинаций не нужно. На практике почти всё закрывает несколько:

  • 644 (rw-r--r--) — обычный файл. Владелец правит, остальные читают. Конфиги, HTML, картинки.
  • 755 (rwxr-xr-x) — скрипты, программы и каталоги. Бит выполнения на каталоге означает «сюда можно войти», и на этом спотыкаются постоянно.
  • 600 (rw-------) — приватные файлы. Здесь живёт ваш SSH-ключ. Если его сможет прочитать кто-то ещё, ssh откажется его использовать.
  • 700 (rwx------) — каталог, который можете открыть только вы.

С битом выполнения на каталоге стоит разобраться отдельно. Папка с правами 644 выглядит читаемой, но зайти в неё через cd или нормально посмотреть содержимое не получится: для каталогов «выполнение» значит «проход внутрь». Я видел, как люди по двадцать минут ловят ошибку доступа, которую снял бы один +x на папке.

Символьный режим, когда цифры надоели

Числовой режим заменяет весь набор прав целиком. Иногда же надо поменять всего один бит — и тут символьная запись выручает:

  • chmod +x script.sh — сделать исполняемым, остальное не трогать
  • chmod u+w file — дать владельцу право на запись
  • chmod go-r secret.txt — забрать чтение у группы и остальных

Разница важна. chmod 700 говорит «поставь ровно это». chmod +x говорит «добавь вот это к тому, что уже есть». На общем файле второй вариант заметно безопаснее.

Четвёртая цифра, которую никто не объясняет

Иногда встречается режим из четырёх цифр — 4755 или 1777. Ведущая цифра управляет специальными битами:

  • setuid (4) запускает программу от имени владельца, а не от вашего. Именно так passwd правит /etc/shadow, хотя вам туда нельзя.
  • setgid (2) делает то же для группы, а на каталоге заставляет новые файлы наследовать группу папки — удобно для общих проектных каталогов.
  • бит sticky (1) защищает общий каталог. У /tmp права 1777: файлы создавать может любой, а удалять — только свои. Без него любой пользователь стёр бы чужие временные файлы.

В этих битах лучше разобраться, а не копировать вслепую: случайный setuid на неправильном бинарнике — это настоящая дыра в безопасности.

Проверьте перед запуском

Права — из тех вещей, где ошибка молчит ровно до того момента, когда перестаёт: утёкший ключ, скрипт, который не запускается, веб-сервер с ошибкой 403. Введите режим в Калькулятор chmod — и он покажет символьную строку, строку ls -l, точную команду и понятную заметку о том, кто что может. Прочитайте один раз, а потом выполняйте команду со спокойной душой.

Попробуйте инструмент

Калькулятор chmod →