Что такое восьмеричный и символьный режимы chmod?

chmod устанавливает права доступа к файлу в Linux, macOS и других Unix-системах и принимает их в двух нотациях. Восьмеричный режим, например 755, содержит по одной цифре для владельца, группы и всех остальных пользователей: право на чтение обозначается числом 4, на запись — 2, а на выполнение — 1. Символьный режим, например u=rwx,g=rx,o=rx, вместо этого указывает классы (u — владелец, g — группа, o — остальные, a — все) и права (r, w, x).

Символьные режимы также могут изменять права, а не только устанавливать их полностью: u+x добавляет право на выполнение для владельца, go-w удаляет право на запись для группы и остальных пользователей, а g=u копирует права владельца для группы. Восьмеричный режим всегда устанавливает все права, поэтому результат изменения в восьмеричной форме зависит от режима, который был установлен у файла ранее.

Описание инструмента

Этот инструмент преобразует режимы chmod между восьмеричной и символьной нотациями. Выберите исходную и целевую нотацию или оставьте для исходной нотации автоматическое определение: введите 755, чтобы получить u=rwx,g=rx,o=rx, или введите символьный режим, чтобы получить восьмеричное значение. Для изменений вроде u+x или a+X введите текущий режим файла и посмотрите режим, который после этого установит chmod. Также можно вставить строку прав из ls -l, например -rwxr-xr-x, или целую команду chmod.

Примеры

Восьмеричный Символьный ls -l Типичное применение
644 u=rw,go=r -rw-r--r-- Обычные файлы
755 u=rwx,go=rx -rwxr-xr-x Скрипты, программы и каталоги
600 u=rw,go= -rw------- Личные файлы, например ключи SSH
2775 u=rwx,g=rwxs,o=rx drwxrwsr-x Общие каталоги, сохраняющие свою группу
1777 a=rwx,+t drwxrwxrwt /tmp и другие общие временные каталоги
4755 u=rwxs,go=rx -rwsr-xr-x Программы, например passwd

Возможности

  • Преобразование восьмеричного режима в символьный и символьного в восьмеричный с помощью кнопки обмена для смены направления
  • Определение нотации введённого режима или преобразование в выбранную нотацию
  • Применение относительных изменений, таких как u+x, go-w, a=r,u+w, g=u и a+X, к текущему режиму
  • Поддержка setuid, setgid и sticky bit (s, t и четырёхзначных восьмеричных режимов)
  • Вывод символьного режима полностью (u=rwx,g=rx,o=rx) или в компактной форме (u=rwx,go=rx)
  • Чтение и запись строк прав ls -l, включая s, S, t и T
  • Поддержка вставленных команд, таких как sudo chmod -R 755 dir
  • Указание точного символа, если режим недействителен

Как это работает

Восьмеричный режим считывается как число длиной до четырёх цифр: необязательная первая цифра содержит параметры setuid (4), setgid (2) и sticky bit (1), а остальные три — права владельца, группы и остальных пользователей. Символьный режим считывается по отдельным конструкциям в соответствии с грамматикой POSIX и применяется к текущему режиму так же, как это делает GNU chmod в Linux:

  • + добавляет права, - удаляет их, а = устанавливает их и сбрасывает остальные права для указанных классов.
  • X добавляет право на выполнение только каталогам и файлам, у которых это право уже есть хотя бы для одного пользователя.
  • s устанавливает setuid с u и setgid с g. t устанавливает sticky bit с o, a или без указания класса.
  • Если класс не указан, как в +x, изменение применяется ко всем пользователям, за исключением битов, заблокированных umask.
  • Для каталогов setuid и setgid сохраняются без изменений, если режим явно не указывает их, как в g-s.

Символьный вывод явно устанавливает каждый бит, поэтому для файла он даёт один и тот же результат независимо от режима, который был установлен ранее. Sticky bit записывается отдельной конструкцией +t, поскольку GNU и BSD chmod поддерживают его в таком виде.

Советы

  • Используйте a+X с chmod -R, чтобы сделать каталоги доступными для обхода, не назначая право на выполнение каждому файлу.
  • chmod 755 для каталога не удаляет setgid в GNU chmod. Используйте chmod 00755 или g-s, чтобы удалить его.
  • Ansible и многие файлы конфигурации требуют начальный ноль, как в 0755. Включите параметр «Всегда показывать 4 восьмеричные цифры», чтобы получать такой формат.
  • Символ . или + после строки ls -l обозначает контекст SELinux или ACL. Используйте getfacl, чтобы просмотреть записи ACL, которые не отображаются в режиме.