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

Отметьте чтение, запись и выполнение для владельца, группы и остальных, чтобы получить восьмеричное число chmod, символьную строку rwx и команду для вставки в терминал.

Отметьте флажки, чтобы получить число, или введите число, чтобы увидеть, что оно на самом деле разрешает. Права применяются к трём категориям — владельцу файла, его группе и всем остальным — и каждая категория независимо получает чтение, запись и выполнение. Переключайте сетку или введите восьмеричное значение; оба поля синхронизируются.

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

Чтение и запись битов прав Unix

Три триады, по три бита каждая

Каждый файл Unix несёт девять битов прав, упорядоченных как три группы по три. Первая триада принадлежит владельцу файла, вторая — группе файла, третья — всем остальным в системе. Внутри каждой триады биты означают чтение, запись и выполнение и имеют вес 4, 2 и 1 соответственно. Сложив значения нужных битов, получаем одну цифру от 0 до 7, поэтому права традиционно записываются тремя восьмеричными цифрами.

В этом и состоит весь секрет числа вроде 755. Цифра владельца — 7, то есть 4 + 2 + 1, значит, владелец может читать, записывать и выполнять. Цифры группы и остальных — по 5, то есть 4 + 1, значит, они могут читать и выполнять, но не изменять. Символьно то же значение пишется как rwxr-xr-x, что ровно и выводит ls -l после начального символа типа файла.

Три глагола на каталоге означают немного разное. Чтение позволяет перечислить имена внутри него, запись позволяет создавать и удалять записи, а выполнение позволяет заходить внутрь, чтобы добраться до уже известного пути. Каталог с чтением, но без выполнения, почти бесполезен: вы видите имена, но не можете открыть ничего за ними.

Значения, которые вы реально будете вводить

Горсть комбинаций покрывает большинство реальных задач. 644 (rw-r--r--) — нормальный режим для документа или исходного файла: владелец редактирует его, остальные читают. 755 (rwxr-xr-x) — нормальный режим для каталога или исполняемого скрипта, поскольку обоим нужен бит выполнения, чтобы быть хоть как-то применимыми. 600 (rw-------) держит файл приватным для владельца — именно этого требует OpenSSH для закрытых ключей, а 700 делает то же для каталога.

Режимы, дающие право записи остальным, заслуживают второго взгляда. 777 позволяет любой учётной записи на машине перезаписать или удалить файл, и почти никогда не является правильным ответом — это просто самый быстрый способ скрыть ошибку прав, не поняв её. Когда веб-сервер не может записать в каталог загрузок, настоящее решение обычно в смене владельца или группы через chown, а не в открытии файла всему миру.

Права также взаимодействуют с umask. Новые файлы создаются с режимом по умолчанию, уменьшенным на значение umask, обычно 022, поэтому свежесозданный файл чаще приходит как 644, а не 666.

Setuid, setgid и sticky bit

Четвёртая цифра может стоять перед тремя привычными и несёт три специальных бита: setuid (4), setgid (2) и sticky bit (1). Они меняют, от чьего лица запускается программа и как каталог обращается с создаваемыми внутри файлами.

Setuid на исполняемом файле заставляет его работать с правами владельца файла, а не запустившего его пользователя. Так passwd может обновлять общесистемный файл, будучи запущенным непривилегированным пользователем, и именно поэтому бинарники с setuid так тщательно проверяют — ошибка в одном из них — прямой путь к правам владельца. Setgid делает то же для группы. На каталоге setgid имеет более дружелюбный смысл: новые файлы внутри наследуют группу каталога, что сохраняет согласованность общего проектного каталога вне зависимости от автора записи.

Sticky bit наиболее знаком по /tmp, обычно записываемому как 1777. Он позволяет любому создавать файлы в каталоге, но ограничивает удаление владельцем каждого файла, так что пользователи не могут удалять временные файлы друг друга. В длинном списке эти биты заменяют символ выполнения: s вместо x означает установленный setuid или setgid, S с большой буквы — бит установлен, а выполнение нет, а t отмечает sticky bit.

Примечание с открытым исходным кодом: реализовано на чистом JavaScript без сторонних библиотек.

Частые вопросы

Что именно означает 755?
Владелец может читать, записывать и выполнять; группа и все остальные могут читать и выполнять, но не изменять. Это обычный режим для каталогов и скриптов, которые должны быть запускаемы другими пользователями.
Мой скрипт читается, но выдаёт «доступ запрещён». Почему?
Чтение файла и его запуск — разные биты. Скрипту нужен бит выполнения для пользователя, который его запускает, поэтому 644 недостаточно — используйте 755 или запустите явно через интерпретатор.
Бывает ли 777 правильным выбором?
Почти никогда на общей или доступной из интернета машине, поскольку это позволяет любой локальной учётной записи изменять или удалять файл. Если сервис не может никуда записать, смените владельца или группу вместо расширения режима.
В чём разница между 644 и 0644?
Никакой, для девяти стандартных битов. Ведущий ноль — это цифра специальных битов, и установка её в 0 сбрасывает setuid, setgid и sticky bit. Многие пишут четыре цифры просто по привычке.
Почему SSH отказывается использовать мой закрытый ключ?
OpenSSH отвергает закрытый ключ, который могут прочитать другие пользователи. Установите ключу режим 600, а содержащему каталогу .ssh — 700, и предупреждение исчезнет.
Одинаково ли ведёт себя chmod в macOS и Linux?
Числовые режимы идентичны. Различия проявляются вокруг расширенных атрибутов и ACL, которые macOS показывает знаком «+» после строки прав и которыми один chmod не управляет.