Калькулятор chmod
Переводит права доступа к файлам Unix между восьмеричной формой (755), символьной (rwxr-xr-x) и сеткой флажков, включая setuid, setgid и sticky-бит.
| Класс | Чтение | Запись | Выполнение |
|---|---|---|---|
| Владелец | |||
| Группа | |||
| Остальные |
chmod 644 filechmod u=rw,g=r,o=r file-rw-r--r--Что делает этот инструмент
У каждого файла в системе Unix есть набор прав, определяющих, кто может его читать, изменять или выполнять. Команда chmod задаёт их и принимает эти права в двух довольно разных записях — трёхзначным восьмеричным числом и строкой из букв, — которые описывают ровно одно и то же. Этот инструмент держит обе записи, а вдобавок сетку флажков, синхронными, так что вы начинаете с той формы, что у вас есть, и копируете ту, что нужна.
Всё выполняется в вашем браузере и представляет собой чистую арифметику: сервера нет, и ничего из введённого никуда не отправляется. Это калькулятор и справочник, а не способ изменить права на реальной машине — для этого вы копируете полученную команду chmod и выполняете её сами.
Три группы, три права
Права организованы в три группы по три. Группы — это владелец файла, группа, которой он принадлежит, и все остальные («остальные»). Внутри каждой группы есть три права: чтение, запись и выполнение.
- Чтение (r) — просмотреть содержимое файла или получить список записей каталога.
- Запись (w) — изменить файл либо добавлять и удалять записи в каталоге.
- Выполнение (x) — запустить файл как программу либо войти в каталог и добраться до файлов внутри него.
Для каталога выполнение означает не то же самое, что для файла, и на этом спотыкаются: каталог, который вы можете читать, но не выполнять, позволяет увидеть имена того, что внутри, но не открыть ничего из этого.
Как устроено восьмеричное число
Три права каждой группы упаковываются в одну восьмеричную цифру сложением фиксированных значений: чтение — 4, запись — 2, выполнение — 1. Чтение-запись-выполнение даёт 4+2+1 = 7; чтение-выполнение даёт 4+1 = 5; чтение-запись даёт 4+2 = 6. Три группы дают три цифры.
755 7 = 4+2+1 # владелец: чтение + запись + выполнение 5 = 4+0+1 # группа: чтение + выполнение 5 = 4+0+1 # остальные: чтение + выполнение
Так что 755 означает «владельцу можно всё, остальным можно читать и выполнять, но не изменять» — обычный режим для программы или каталога. 644 — чтение и запись владельцу, только чтение остальным — обычный режим для рядового файла. Когда закономерность становится привычной, распространённые режимы читаются с одного взгляда.
Символьная строка
Другая запись — та, что печатает ls -l: девять символов, по три на группу, каждый либо своя буква, либо дефис. 755 — это rwxr-xr-x; 644 — это rw-r--r--. Она несёт ровно ту же информацию, что и восьмеричное число, просто разложенную так, чтобы видеть каждое право, а не складывать цифры в уме.
У строки ls -l впереди есть десятый символ — d для каталога, дефис для обычного файла, l для символьной ссылки. Этот начальный символ — тип файла, а не право, и chmod не может его изменить. Сюда можно вставить всё поле прав из ls -l: символ типа просто игнорируется.
Специальные биты: setuid, setgid и sticky
Над девятью обычными битами расположены три специальных, записываемые как необязательная четвёртая восьмеричная цифра впереди: setuid (4), setgid (2) и sticky-бит (1). Своего столбца у них нет; вместо этого каждый накладывается на позицию выполнения в символьной строке — отсюда и берутся прописные буквы, которые сбивают с толку.
- setuid на исполняемом файле заставляет его работать от имени владельца файла, а не запустившего пользователя. Именно так passwd может обновить системный файл, в который вам нельзя писать напрямую, — и поэтому setuid-программа с ошибкой является серьёзной дырой.
- setgid на исполняемом файле запускает его с группой файла. На каталоге он делает нечто более полезное и безопасное: новые файлы, созданные внутри, наследуют эту группу вместо группы создателя.
- Sticky-бит на каталоге означает, что удалить или переименовать файл может только его владелец, даже когда писать в каталог могут все. Именно это делает /tmp общим и при этом безопасным. На обычном файле он не делает ничего.
В символьной строке установленный специальный бит превращает свою позицию выполнения в букву: s в позиции владельца для setuid, s в позиции группы для setgid, t в позиции остальных для sticky. Регистр буквы говорит, включено ли и выполнение: строчная — да, прописная — нет.
rwsr-xr-x 4755 # setuid, и владелец выполняет rwSr-xr-x 4655 # setuid, но владелец НЕ выполняет rwxrwxrwt 1777 # sticky, и остальные выполняют rwxrwxrwT 1776 # sticky, но остальные НЕ выполняют
Прописная S или T почти всегда является ошибкой: она означает, что специальный бит поставлен на файл, который не является исполняемым, и биту попросту не на что действовать.
Восьмеричная или символьная форма в командной строке
chmod принимает обе формы, и этот инструмент выписывает обе. Восьмеричная форма задаёт все биты разом: chmod 755 file. Символьная форма с = делает то же самое абсолютным образом — chmod u=rwx,g=rx,o=rx file — перечисляя каждую группу, чтобы результат не зависел от того, каким файл был до этого.
Есть и третья, относительная форма, которая калькулятору не нужна, но вам встретится: chmod +x file добавляет выполнение всем, chmod g-w file снимает запись у группы, chmod o= file очищает всё для остальных. Эта форма меняет биты относительно текущего режима, а не задаёт его целиком, что удобно в командной строке, но не имеет единственного «результата» для отображения.
Режимы, которые лучше не ставить
Инструмент для прав должен также говорить, когда режим — плохая идея. Два встречаются постоянно:
- 777 даёт каждому пользователю чтение, запись и выполнение. Это рефлекторное «исправление», когда что-то «не работает», и оно почти всегда меняет мелкую проблему на настоящую брешь в безопасности. Правильный режим почти всегда уже — обычно 755 или 644.
- Любой файл, доступный на запись всем (последняя цифра включает 2), позволяет любой учётной записи на машине переписать его содержимое. Для всего, что выполняется, подключается или считается доверенным, это путь внутрь. Дайте право записи группе или оставьте его только владельцу.
Инструмент отмечает их по мере появления. Он не может знать, файл у вас или каталог, поэтому формулирует их как то, что стоит второго взгляда, а не как ошибки: sticky-бит верен на каталоге и бесполезен на файле, и только вы знаете, что именно у вас.
Частые вопросы
- В чём разница между 644 и 755?
- 644 — это чтение и запись владельцу и только чтение всем остальным, обычный режим рядового файла. 755 добавляет выполнение всем трём группам, что нужно программе для запуска, а каталогу — чтобы в него можно было войти. Используйте 644 для документов и исходных файлов, 755 — для скриптов и каталогов.
- Почему в моём режиме появилась прописная S или T?
- Потому что специальный бит поставлен на группу, у которой нет права выполнения. Строчная s или t означает, что и специальный бит, и выполнение включены; прописная форма означает, что специальный бит включён, а выполнение — нет, и это обычно говорит, что режим не тот, который задумывался: например, 4644 (rwSr--r--) — это setuid на файле, который никто не может выполнить.
- Что на самом деле делает chmod 777 и почему это не рекомендуется?
- Он даёт чтение, запись и выполнение владельцу, группе и всем остальным — полный доступ для каждой учётной записи в системе. Это не рекомендуется, потому что снимает всю защиту разом: файл, в который может писать каждый, — это файл, который каждый может подменить, а каталог, в который может писать каждый, — это каталог, куда каждый может подложить файлы. Почти любой случай, тянущийся к 777, решается через 755 или 644 и правильную принадлежность.
- Обязательна ли ведущая цифра?
- Нет. Когда ни один специальный бит не установлен, режим состоит всего из трёх цифр — 755, а не 0755, — и именно это показывает инструмент. Ведущий ноль принимается и означает то же самое; ведущие 4, 2 или 1 включают setuid, setgid или sticky-бит соответственно.
- Можно ли вставить строку прямо из ls -l?
- Да. Вставьте поле прав из десяти символов, например -rwxr-xr-x или drwxr-xr-x, и инструмент уберёт начальный символ типа и прочтёт остальное. Тип (файл, каталог, ссылка) не является правом, и chmod не может его изменить, поэтому он игнорируется.
- Отправляется ли что-нибудь из введённого на сервер?
- Нет. Весь инструмент — это арифметика, выполняемая в вашем браузере. Ничего не загружается, не записывается в журнал и не сохраняется, поэтому он работает и вовсе без подключения к сети.