bitlvl
RU

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

Отметьте флажки или введите восьмеричное число, строку rwx либо символьное изменение вроде u+x,go-w. Команда и её значение обновляются по мере ввода.

Права доступа
Чтение (4)
Запись (2)
Выполнение (1)
Владелец
Группа
Остальные

Результаты и сообщения этого инструмента выводятся на английском языке.

Как устроены права доступа в Unix

У каждого файла есть три набора по три бита прав: для владельца файла, для его группы и для всех остальных. Каждый набор может разрешать чтение (r, значение 4), запись (w, 2) и выполнение (x, 1). Сложите значения в каждом наборе — получится одна восьмеричная цифра, поэтому права записывают тремя цифрами: rwxr-xr-x — это 4+2+1, 4+1, 4+1 = 755.

Для каталогов те же биты означают немного другое: чтение позволяет вывести список записей, запись — создавать и удалять записи, а выполнение — входить в каталог и обращаться к файлам внутри. Каталог без x непригоден даже при наличии r.

Специальные биты

Четвёртая, ведущая цифра хранит ещё три бита. setuid (4) запускает исполняемый файл от имени его владельца — именно так passwd может править файл, принадлежащий root. setgid (2) делает то же для группы, а на каталоге заставляет новые файлы наследовать группу каталога, что и нужно для общих папок проекта. sticky (1) на каталоге не даёт пользователям удалять чужие файлы; у /tmp права 1777.

Символьный режим

chmod принимает и изменения, а не только абсолютные значения: u+x добавляет выполнение владельцу, go-w снимает запись у группы и остальных, a=r даёт всем только чтение. X (заглавная) добавляет выполнение только каталогам и файлам, у которых оно уже где-то есть, поэтому chmod -R a+rX — безопасный способ открыть дерево на чтение.

umask

Новые файлы начинают с 666, а каталоги с 777, минус umask. Распространённая umask 022 даёт 644 и 755; 077 даёт 600 и 700 (приватно). umask без аргументов показывает текущее значение.

Распространённые значения

ВосьмеричноеСимвольноеПрименение
644rw-r--r--Обычные файлы, веб-контент
755rwxr-xr-xИсполняемые файлы, скрипты, каталоги
600rw-------Приватные ключи, .env, файлы с паролями
700rwx------~/.ssh и другие приватные каталоги
664 / 775rw-rw-r-- / rwxrwxr-xФайлы / каталоги для совместной работы в группе
2775rwxrwsr-xОбщий каталог с наследованием группы
1777rwxrwxrwt/tmp
4755rwsr-xr-xПрограммы с setuid, например passwd, sudo

Вопросы

Что означает chmod 755?

Владелец может читать, писать и выполнять; группа и остальные — читать и выполнять. Это обычный режим для программ, скриптов и каталогов.

Что делает chmod 777 и почему это плохо?

Он позволяет каждому пользователю системы читать, записывать и выполнять файл. На общей или доступной из интернета машине это значит, что изменить его может кто угодно, включая скомпрометированный сервис. Это почти никогда не правильное решение ошибки доступа; обычно помогает смена владельца (chown) или 755/644.

Почему мой скрипт выдаёт «permission denied»?

У него нет бита выполнения. Выполните chmod +x script.sh (или 755). Если файл лежит на файловой системе, смонтированной с noexec, или строка shebang указывает на отсутствующий интерпретатор, вы получите то же сообщение.

Что означают s или t в выводе ls -l?

Строчная s в позиции выполнения владельца или группы означает, что setuid или setgid установлен вместе с выполнением; заглавная S — что специальный бит установлен без выполнения (обычно ошибка). t и T — то же самое для бита sticky. Вставьте строку в поле символьного режима, чтобы расшифровать её.

В чём разница между chmod и chown?

chmod меняет биты прав доступа; chown меняет, какому пользователю и группе принадлежит файл. Многие проблемы «permission denied» — это проблемы владения: биты правильные, но не для того пользователя.

Как задать права рекурсивно?

chmod -R. Чтобы не сделать каждый файл исполняемым, используйте chmod -R u=rwX,go=rX dir, где заглавная X применяет выполнение только к каталогам и уже исполняемым файлам.