Калькулятор chmod — права доступа к файлам в Linux
Переводите права доступа к файлам в Linux между интерактивной сеткой флажков, восьмеричным кодом (например, 755) и символьной записью (например, rwxr-xr-x). Получите готовые команды chmod, предпросмотр вывода ls -l и заметки о безопасности для обычных файлов и каталогов.
Преобразование прав доступа Linux между флажками, восьмеричным кодом и символьной записью
Формула chmod
Обозначения:
- \(r\), \(w\), \(x\) — биты чтения, записи и выполнения: каждый равен 1, если право предоставлено, и 0, если нет;
- \(d\) — восьмеричная цифра одного класса (владелец, группа или остальные), собранная из весов 4–2–1;
- \(s_{\text{uid}}\), \(s_{\text{gid}}\), \(s_{\text{sticky}}\) — специальные биты setuid, setgid и sticky (также 0 или 1).
Каждому классу прав соответствует одна восьмеричная цифра: чтение считается как 4, запись — как 2, выполнение — как 1; сумма предоставленных значений даёт число от 0 до 7. Необязательная ведущая цифра кодирует специальные биты по тем же весам 4–2–1, поэтому 4755 означает setuid плюс привычные 755.
Chmod — пример расчёта
Пример: скрипт, который владелец может свободно изменять и запускать, а группа и все остальные — только читать и запускать. Это классический набор прав 755 (и он же задан в калькуляторе по умолчанию: владелец r+w+x, группа r+x, остальные r+x).
\[ d_{\text{владелец}} = 4 + 2 + 1 = 7 \]
\[ d_{\text{группа}} = 4 + 0 + 1 = 5 \]
\[ d_{\text{остальные}} = 4 + 0 + 1 = 5 \]
\[ \text{режим} = 755 \]
Результат: восьмеричный режим 755, символьный режим rwxr-xr-x, команда chmod 755 file. В выводе ls -l файл отобразится как -rwxr-xr-x.
Как пользоваться калькулятором
- Откройте выпадающий список Способ ввода и выберите, как вы хотите описать права: Флажки (сетка прав), Восьмеричный код, Символьная запись или Готовые наборы. Видимыми останутся только поля, относящиеся к выбранному способу.
- В режиме Флажки отметьте Чтение, Запись и Выполнение для каждого класса — владелец (u), группа (g) и остальные (o) — а при необходимости и специальные биты Setuid, Setgid и Sticky.
- В поле Восьмеричный код введите три цифры (например, 755) либо четыре с ведущей цифрой специальных битов (например, 4755). В поле Символьная запись укажите девять символов, например rwxr-xr-x, либо вставьте полную строку из
ls -lвида-rwxr-xr-x— ведущий символ типа файла отбрасывается автоматически. В режиме Готовые наборы достаточно выбрать предложенный вариант прав. - Установите Тип файла — Обычный файл (-) или Каталог (d), чтобы пояснение и предпросмотр
ls -lиспользовали правильные формулировки. - Изучите результаты: числовой (восьмеричный) режим, символьный режим, готовые к копированию команды chmod, предпросмотр в стиле ls -l, понятное объяснение и заметки о безопасности.
Что такое права доступа в Linux и как их читать
У каждого файла и каталога в Linux есть девять битов прав, разделённых на три класса: владелец (u), создавивший файл, группа (g), к которой файл относится, и остальные (o) — все прочие пользователи машины. Внутри каждого класса три бита показывают, может ли класс читать (r), записывать (w) и выполнять (x) файл. Команда chmod изменяет эти биты, а калькулятор переводит любое их представление во все остальные.
Восьмеричная запись упаковывает каждый класс в одну цифру по весам 4–2–1 — отсюда режимы вроде 644 или 755. Символьная запись описывает те же биты девятью символами, читаемыми слева направо: триада владельца, триада группы, триада остальных. Прочерк означает отсутствие права, поэтому rw-r--r-- — это доступный для чтения, но не для выполнения режим 644. Обе формы описывают ровно одни и те же биты — выбирайте ту, которую принимает инструмент, с которым вы работаете.
Смысл битов зависит от типа файла. Для обычного файла r — это просмотр содержимого, w — его изменение, x — запуск как программы. Для каталога r — просмотр списка имён внутри, w — создание, переименование и удаление записей, а x — возможность войти в него командой cd и открывать находящиеся в нём файлы. Именно поэтому каталогу нужен бит x, чтобы его содержимым можно было пользоваться, и именно поэтому 700 — стандартный режим для личных папок вроде ~/.ssh.
Полную картину дополняют три специальных бита. Setuid (4) заставляет программу выполняться с правами её владельца — так работает /usr/bin/passwd. Setgid (2) делает то же самое для группы, а на каталогах он заставляет новые файлы наследовать группу каталога. Sticky (1) ограничивает удаление в общем каталоге с правом записи: удалять можно только свои собственные файлы — это правило сохраняет безопасность /tmp (1777). В символьном выводе эти биты отображаются как s/S в позиции выполнения либо t/T в последней позиции; заглавная буква означает, что бит выполнения под ней выключен.
Популярные режимы доступа
| Режим | Символьная запись | Типичное применение |
|---|---|---|
| 600 | rw------- | Личные файлы, например SSH-ключи |
| 644 | rw-r--r-- | Обычные файлы, веб-контент |
| 700 | rwx------ | Личные каталоги, например ~/.ssh |
| 755 | rwxr-xr-x | Программы, скрипты, файлы, отдаваемые веб-сервером |
| 775 | rwxrwxr-x | Общие каталоги для доверенной группы |
| 1777 | rwxrwxrwt | Общее «черновое» пространство вроде /tmp |
| 4755 | rwsr-xr-x | Исполняемые файлы с setuid root (использовать осторожно) |
Допущения, ограничения и практические советы
- 777 почти никогда не бывает правильным ответом. Разрешение записи всем подряд открывает файл любой учётной записи системы. Сначала попробуйте 775 с правильно подобранной группой или списки ACL (
setfacl) и лишь в крайнем случае — 777. - Никогда не сочетайте запись для всех с setuid или setgid. Режимы вроде 4777 или 7777 позволяют любому заменить файл, который при этом продолжает выполняться с повышенными правами, — классическая дыра для повышения привилегий.
- Права остальных не должны превышать права владельца. Если третья цифра больше первой, вы почти наверняка ошиблись при вводе режима; калькулятор отметит это в заметках о безопасности.
- 000 блокирует доступ всем, включая владельца. Вернуть доступ сможет только root, поэтому для конфиденциальности используйте 600 или 700.
- Осторожнее с
chmod -R. Рекурсивный числовой режим перезаписывает все биты сразу у всех файлов и подкаталогов; каталогам обычно нужен бит x, а файлам данных — нет. Задавайте права отдельно для каждого типа файлов, а не для всего дерева сразу. - Root игнорирует биты прав. Права ограничивают обычных пользователей, но не защищают от доступа уровня root.
- Калькулятор сопоставляет известные представления прав, включая специальные биты, но не учитывает списки ACL, SELinux и другие системы обязательного управления доступом, которые также могут влиять на реальный доступ.
Если вы работаете и с другими форматами данных Linux, вам могут пригодиться конвертер меток времени Unix, конвертер шестнадцатеричных чисел и двоичный калькулятор — они помогут разобраться в лежащих в основе системах счисления.
Часто задаваемые вопросы
Как рекурсивно задать разные права файлам и каталогам?
Используйте find, чтобы применить отдельный режим к каждому типу файлов: find /path -type d -exec chmod 755 {} + для каталогов и find /path -type f -exec chmod 644 {} + для файлов. Обычный chmod -R 755 добавляет файлам данных ненужный бит выполнения, а -R 644 наоборот лишает каталоги бита x, из-за чего в них становится невозможно войти. Разделение по типам исключает обе ошибки.
Как посмотреть текущие права файла в виде восьмеричного числа?
Выполните stat -c '%a' filename (или stat -f '%Lp' filename на macOS) — режим сразу вернётся цифрами вида 644. Длинный список ls -l показывает только символьную форму, которую придётся расшифровывать самостоятельно. Такой восьмеричный вывод — ровно то, что ожидает поле «Восьмеричный код» в калькуляторе, так что его можно вставить туда и посмотреть, что делает каждый бит.
Почему после chmod всё равно появляется «Permission denied»?
Проверьте три вещи: каждый каталог по пути к файлу должен давать вам право x (выполнение), иначе до файла не добраться — каталог с режимом 644 блокирует всё внутри, даже если сам файл имеет 777. Кроме того, нельзя выполнить chmod для файла, которым вы не владеете. Наконец, режим могут перекрывать правила уровня файловой системы: параметры монтирования вроде noexec, списки ACL, SELinux или AppArmor способны запрещать доступ независимо от битов прав.
Что означает chmod a+r и чем это отличается от o+r?
a означает «all», то есть изменение применяется сразу к владельцу (u), группе (g) и остальным (o), поэтому a+r даёт право чтения всем. Команда o+r затрагивает только класс «остальные». В восьмеричной записи такого сокращения нет: числовой режим всегда перезаписывает все девять бит. Поэтому, если нужно сохранить существующие права некоторых классов, их удобнее менять символьными операциями + и −, а не полной числовой заменой.
Почему новые файлы получают 664, а не 755? Что такое umask?
umask — это настройка уровня оболочки, которая срезает биты с режима, запрошенного программой при создании файла. При распространённом umask 002 программа, запросившая 666 (rw-rw-rw-), получит 664, а запрос 777 для каталога даст 775. Увидеть текущее значение можно командой umask, изменить — например, umask 022. chmod при создании файла не участвует: он лишь переписывает биты задним числом.
Почему setuid не работает на моём shell-скрипте?
Большинство систем Linux намеренно игнорируют бит setuid на интерпретируемых скриптах (shell, Python и подобных), потому что фактически выполняется интерпретатор, а не сам скрипт, а интерпретатор работает от имени вызвавшего пользователя. Setuid действует практически только на скомпилированные бинарные файлы вроде /usr/bin/passwd. Если скрипту нужны действия с повышенными правами, настройте правила sudo вместо надежды на chmod 4755 для скрипта.