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

Переводит права доступа к файлам Unix между восьмеричной формой (755), символьной (rwxr-xr-x) и сеткой флажков, включая setuid, setgid и sticky-бит.

Частые режимы
КлассЧтениеЗаписьВыполнение
Владелец
Группа
Остальные
Восьмеричная
Символьная
Восьмеричная команда
chmod 644 file
Символьная команда
chmod u=rw,g=r,o=r file
Формат ls -l
-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-бит верен на каталоге и бесполезен на файле, и только вы знаете, что именно у вас.

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

Это режим, к которому приходит почти любой скрипт, программа и каталог, и читается он по одной группе за раз. Каждая цифра — это три права данной группы, сложенные вместе: чтение 4, запись 2, выполнение 1. Так что 7 — это все три, а 5 — чтение плюс выполнение с отброшенной записью.

  • Владелец — 7 = 4+2+1. Чтение, запись и выполнение: вы можете править файл и запускать его.
  • Группа — 5 = 4+0+1. Чтение и выполнение, без записи: участники группы файла могут читать его и запускать и не могут изменять.
  • Остальные — 5 = 4+0+1. То же самое снова: любая другая учётная запись на машине может читать и запускать его, и ни одна не может его изменить.

Выписанный полностью, это rwxr-xr-x, а команда — chmod 755 file или chmod u=rwx,g=rx,o=rx file, если вам удобнее буквы. На каталоге те же биты читаются иначе, потому что там выполнение означает, что в него можно войти и добраться до содержимого: 755 — это каталог, который любой может просмотреть и в который может войти, тогда как добавлять и удалять записи может только владелец. Про 755 инструмент не говорит ничего, и это намеренно: это самый узкий режим, при котором другие учётные записи всё ещё могут запустить написанное вами. Если группе нужно и править файл, режим, добавляющий запись для группы, — это 775, а не 777.

Что означает chmod 644 и почему он у ваших файлов уже есть

644 — это 755 с вынутыми битами выполнения: 6 = 4+2 владельцу, затем 4 = 4+0+0 группе и снова 4 остальным, то есть rw-r--r--. Запустить его не может никто, и это именно то, что нужно всему, что только читается: документу, странице HTML, файлу настроек, исходному файлу, который компилирует другая программа. На каталоге же он не ограничивает, а ломает: без выполнения войти внутрь ничто не может, поэтому имена внутри перечисляются, а ни одно из них не открывается.

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

  • umask 022, обычное значение по умолчанию: новый файл выходит 644, а новый каталог 755.
  • umask 002, который ставят там, где у каждого пользователя своя группа: 664 и 775, так что участники группы тоже могут править.
  • umask 077, приватная настройка: 600 и 700, которые никто, кроме владельца, не может даже прочитать.

Все шесть есть здесь среди готовых режимов, и это не совпадение: это три umask, которые люди действительно ставят, применённые один раз к файлу и один раз к каталогу. Читать их как три пары, а не как шесть значений, — самый быстрый способ перестать искать режимы в справочниках.

Что означает chmod 711: войти, но не смотреть

711 — распространённый режим, выдающий выполнение без чтения: 7 = 4+2+1 владельцу, затем 1 = 0+0+1 дважды, то есть rwx--x--x. Смысл он приобретает лишь тогда, когда снова разделишь два права каталога: чтение перечисляет имена, а выполнение позволяет пройти сквозь него. Поэтому в каталог с режимом 711 может войти всякий, кто уже знает имя нужного ему, и просмотреть его не может никто.

  • На каталоге это по-настоящему полезно. Домашний каталог с 711 позволяет веб-серверу или другой учётной записи на общей машине открыть /home/you/public/report.pdf, тогда как ls /home/you получает отказ. От владельца ничего не скрыто; просто перечислить имена извне нельзя.
  • На файле это почти бесполезно. Запуск скрипта оболочки означает, что интерпретатор открывает файл и читает его, поэтому выполнение без чтения не удаётся; работает только скомпилированный двоичный файл, который загружает сам ядро. Если вы имели в виду скрипт, запускаемый другими, вам нужен был 755.

Про 711 инструмент тоже ничего не говорит, потому что он уже, а не шире 755: он не даёт ничего, чего не даёт 755. Соседние режимы появляются по той же причине: 751 отдаёт группе просмотр, в котором отказано остальным, а 700 отнимает даже проход, и это то, что нужно каталогу, предназначенному одной учётной записи.

777 и 1777: один бит разницы и разные советы

Два режима, которые притягивает к себе общий каталог, различаются одним битом, и этот инструмент отвечает на них по-разному намеренно. 777 — это rwxrwxrwx, и он возвращается отмеченным как опасность; 1777 — это rwxrwxrwt, он возвращается обычным примечанием и есть среди готовых режимов выше: это режим, который на самом деле имеет /tmp.

  • 777 — каждая цифра это 4+2+1: чтение, запись и выполнение владельцу, группе и всем остальным. Защищать что-либо больше нечем: любая учётная запись может перезаписать файл, и любая может удалить или подменить запись в каталоге с таким режимом. Это рефлекторное исправление проблемы с правами, и оно почти всегда меняет небольшую проблему на настоящую.
  • 1777 — те же девять бит плюс sticky-бит, который разрешает удалять и переименовывать запись только её собственному владельцу. Именно это единственное ограничение делает безопасным каталог, открытый на запись всем, и именно поэтому работает /tmp: создать там файл может любой, а удалить чужой не может никто.

Различие держится только там, где у остальных есть и выполнение, и инструмент в этом строг. 1666 — это rw-rw-rwT, sticky-бит на режиме, где выполнения нет ни у одной группы, а ничто такой формы не может быть работающим каталогом; значит, sticky-бит ничего не охраняет, и режим отмечается как доступный на запись всем с полной серьёзностью, точно как 666. Прописная T говорит то же самое одним символом.

Итак: каталогу, который должен быть общим, нужен 1777, а ещё лучше 775 с правильной группой; а файл, который не открывается, — почти всегда проблема владения, а не повод для 777.

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

В чём разница между 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 не может его изменить, поэтому он игнорируется.
Отправляется ли что-нибудь из введённого на сервер?
Нет. Весь инструмент — это арифметика, выполняемая в вашем браузере. Ничего не загружается, не записывается в журнал и не сохраняется, поэтому он работает и вовсе без подключения к сети.
Что делает chmod 711?
Он даёт владельцу всё, а группе и всем остальным — только выполнение, то есть rwx--x--x. На каталоге это значит, что они могут пройти сквозь него к уже известному им пути, но не могут просмотреть его содержимое, а это обычно и нужно домашнему каталогу на общей машине. На файле он бесполезен: скрипт оболочки должен быть прочитан своим интерпретатором, чтобы запуститься, поэтому выполнение без чтения просто не удаётся.
Чем chmod 777 отличается от chmod 1777?
Одним битом — sticky-битом, который записывается ведущей единицей и превращает последний символ из x в t. Оба дают каждой учётной записи чтение, запись и выполнение; 1777 вдобавок разрешает удалять и переименовывать запись только её владельцу. Поэтому инструмент отмечает 777 как почти никогда не верный, а 1777 называет стандартным режимом общего каталога вроде /tmp.
Почему новые файлы получаются 644, а новые каталоги 755?
Из-за umask. Программа, создающая файл, запрашивает 666, а создающая каталог — 777, и umask снимает с этого биты ещё до того, как файл возник. Обычное значение, 022, отнимает запись у группы и у остальных, и остаются 644 и 755. Запустите umask в оболочке, чтобы увидеть своё: 002 даёт 664 и 775, а 077 даёт 600 и 700.
Что означает rwxr-xr-x?
Это 755, выписанный полностью. Читайте по три символа: rwx — владелец, с чтением, записью и выполнением; r-x — группа, с чтением и выполнением, но без записи; r-x снова — все остальные. Дефис означает, что это право отключено. Вставьте строку в поле «Символьная» здесь, и в поле «Восьмеричная» появится 755.

Похожие инструменты