Что делает chmod?
Команда chmod (от change mode, «изменить режим») в Linux и Unix определяет, кто может читать, изменять и запускать файл или папку. У каждого файла три набора прав: для владельца, для группы и для всех остальных (others). Калькулятор выше превращает эти девять флажков в число или буквы, которые ожидает chmod, и обратно.
Режим можно передать chmod двумя способами: восьмеричным числом, например chmod 755 script.sh, или в символьной форме, например chmod u+x script.sh. Изменить права файла может только его владелец или root.

Как работают права доступа к файлам в Linux
У каждого права есть значение: чтение = 4, запись = 2 и выполнение = 1. Сложите их для каждого класса и получите одну цифру от 0 до 7, затем запишите три цифры по порядку: владелец, группа, остальные. Так, rwx даёт 4+2+1 = 7, r-x даёт 4+0+1 = 5, а rwxr-xr-x даёт 755.
Команда ls -l показывает то же самое буквами, например -rwxr-xr-x. Первый символ обозначает тип файла (- для обычного файла, d для каталога, l для символической ссылки), за ним идут три группы rwx для владельца, группы и остальных. Дефис означает, что право выключено.
Для файлов и для папок буквы означают немного разное:
Файл: открыть и прочитать содержимое. Папка: вывести список имён внутри с помощью ls.
Файл: изменить содержимое. Папка: создавать, удалять и переименовывать файлы внутри (для этого нужно также право выполнения на папку). Возможность удалить файл зависит от права записи на папку, а не на сам файл.
Файл: запустить как программу или скрипт. Папка: войти в неё командой cd и открывать файлы внутри по имени. С правом чтения, но без выполнения можно увидеть имена в папке, но нельзя ничего в ней открыть.
u означает владельца файла, g его группу, а o всех остальных. Linux применяет только первый подходящий вам класс: если вы владелец, права группы и остальных к вам не относятся, даже если они шире.
Advertisement
Популярные права chmod и когда их использовать
Эти режимы покрывают почти все реальные случаи. Большинство из них также есть в калькуляторе в виде готовых кнопок.
Режим по умолчанию для большинства файлов: веб-страниц, изображений и несекретных конфигурационных файлов. Владелец может редактировать, все остальные только читать.
Режим по умолчанию для каталогов и для программ или скриптов, которые может запускать каждый. Изменять их может только владелец.
Читать и записывать может только владелец. Используйте для закрытых ключей SSH, файлов .env, API-токенов и всего, где есть пароль.
Открывать папку и просматривать её содержимое может только владелец. Стандарт для ~/.ssh и личных папок со скриптами.
Владелец редактирует, одна группа (например, группа веб-сервера) читает, а больше никто файл не видит.
У владельца полный доступ, группа может открывать и читать папку, остальным вход закрыт.
Редактировать могут и владелец, и группа. Часто встречается на командных серверах, где несколько пользователей входят в одну группу.
Владелец и группа могут создавать и удалять файлы внутри, остальные могут только смотреть.
Читать может только владелец, записывать не может никто. AWS советует выполнить chmod 400 для скачанной пары ключей .pem перед использованием с SSH.
Любой пользователь и процесс на машине может читать, изменять и запускать файл. Почти никогда не бывает правильным решением, и следующий раздел объясняет почему.
chmod 755, 644 или 777
755 и 644 различаются только битом выполнения: 755 позволяет всем запускать файл или открывать папку, а 644 нет. Поэтому обычное правило звучит так: папки 755, файлы 644. Папкам нужно право выполнения, чтобы в них можно было войти, а большинство файлов никогда не должны запускаться.
777 даёт право записи каждой учётной записи на машине, включая пользователя веб-сервера. Если любой сайт или скрипт на сервере будет взломан, злоумышленник сможет изменить или подменить ваши файлы, внедрить вредоносный код в страницы или оставить бэкдор. Когда что-то падает с ошибкой «Permission denied», настоящее решение обычно в правильном владельце (chown) или группе, а не в 777.
Рекомендуемые права для самых частых случаев:
Файлы сайта (HTML, PHP, изображения):
644. Папки сайта:755. Это рекомендуют WordPress и большинство панелей управления хостингом.wp-config.php и другие файлы с паролями от базы данных: WordPress предлагает
440или400, чтобы другие пользователи сервера не могли их прочитать.600или640тоже сохраняют файл закрытым и позволяют владельцу его редактировать.Папки загрузок или кеша, в которые должен записывать веб-сервер: дайте группе веб-сервера право записи (
775) или сделайте пользователя веб-сервера владельцем вместо777.Папка ~/.ssh:
700. Закрытые ключи (id_ed25519,id_rsa):600или400. authorized_keys:600. Открытые ключи (.pub):644.Shell-скрипты, которые вы хотите запускать:
755или700, если запускать их должны только вы.chmod +x script.shдобавляет выполнение, не трогая остальные биты.
Advertisement
Как исправить «Permissions 0644 are too open» для SSH-ключей
SSH игнорирует закрытый ключ, который могут читать другие пользователи, и выводит WARNING: UNPROTECTED PRIVATE KEY FILE!, а затем Permissions 0644 for '/home/you/.ssh/id_rsa' are too open. Выполните chmod 600 ~/.ssh/id_rsa (или chmod 400) и подключитесь снова. На стороне сервера при настройке по умолчанию StrictModes yes демон SSH также игнорирует authorized_keys, если этот файл, ~/.ssh или ваша домашняя папка доступны для записи группе или остальным.
Если права в порядке, а подключиться всё равно не удаётся, проверьте, открыт ли порт 22 на сервере.
Специальные права: setuid, setgid и sticky bit
Четвёртая, ведущая цифра добавляет три специальных бита: 4 = setuid, 2 = setgid и 1 = sticky. Они складываются так же, как остальные, поэтому 6755 означает setuid плюс setgid. В выводе ls -l они занимают место буквы выполнения: s в позиции владельца или группы, t в позиции остальных.
Одна особенность Linux: GNU chmod 755 dir (и chmod 0755 dir) оставляет уже установленный бит setuid или setgid на каталоге. Чтобы его снять, укажите это явно с помощью chmod g-s dir (или chmod a-s dir для обоих битов) либо используйте пять цифр: chmod 00755 dir.
Программа с setuid выполняется с правами своего владельца, а не с вашими. /usr/bin/passwd в большинстве систем Linux имеет режим 4755 (-rwsr-xr-x), поэтому обычные пользователи могут обновлять файл паролей, принадлежащий root. Linux игнорирует setuid у shell-скриптов и каталогов.
Программа запускается с группой файла. На папке этот бит полезнее: новые файлы внутри получают группу папки, а новые подпапки наследуют setgid. 2775 является классическим режимом для общей папки команды.
В такой папке удалять или переименовывать файлы может только владелец файла, владелец папки или root, даже если записывать туда могут все. Поэтому у /tmp режим 1777 (drwxrwxrwt). Linux игнорирует sticky bit у файлов.
Заглавная S или T в ls -l означает, что специальный бит установлен, а бит выполнения в той же позиции нет. Например, 4644 отображается как rwSr--r--, а 1666 как rw-rw-rwT.
Advertisement
Символьный режим: u, g, o, a с +, - и =
Символьный режим изменяет права относительно уже существующих, чего обычное восьмеричное число сделать не может. Он состоит из трёх частей: кому (u владелец, g группа, o остальные, a все), оператор (+ добавить, - убрать, = задать точно) и права (r, w, x, а также s и t). Несколько изменений разделяйте запятыми без пробелов.
chmod +x file без буквы класса означает все три класса, за вычетом того, что блокирует ваш umask. При обычном umask 022 это то же самое, что a+x.
chmod u+x deploy.sh: разрешить владельцу запускать скрипт и больше ничего не менять.chmod go-w report.txt: убрать право записи у группы и остальных.chmod o= secrets.txt: забрать у остальных все права.chmod a+r index.html: файл может читать каждый.chmod u=rwx,g=rx,o=rx app: символьная запись режима 755. Калькулятор показывает эту форму для любого режима.chmod -R u=rwX,go=rX public_html: заглавная X добавляет выполнение только папкам и файлам, которые уже исполняемые, поэтому папки получают 755, а обычные файлы 644.
umask: права по умолчанию для новых файлов
umask определяет, какие права получают новые файлы и папки. Большинство программ создают файлы с режимом 666 (rw-rw-rw-) и папки с 777, а каждый бит, установленный в umask, выключается. При распространённом umask 022 новые файлы получают 644, а новые папки 755.
Это побитовая маска, а не вычитание. При umask 027 файлы получают 640, а поразрядное вычитание 027 из 666 даже не даёт допустимого режима. Откройте вкладку Umask в калькуляторе, чтобы увидеть результат для любого значения.
022: файлы 644, папки 755. Обычное значение по умолчанию.002: файлы 664, папки 775. Позволяет вашей группе редактировать созданное вами; часто используется там, где у каждого пользователя своя личная группа.027: файлы 640, папки 750. Ничего для остальных, хороший выбор для серверов.077: файлы 600, папки 700. Полностью закрыто.Выполните
umask, чтобы увидеть своё значение,umask -S, чтобы увидеть его буквами, иumask 027, чтобы изменить его для текущей оболочки. Добавьте команду в~/.bashrcили~/.profile, чтобы сохранить её.
Advertisement
Как пользоваться калькулятором chmod
Отметьте Чтение, Запись и Выполнение для владельца, группы и остальных или нажмите готовый вариант, например 644 или 755. Каждая строка сразу показывает свою цифру.
Введите восьмеричное число, например 750 или 2775, или вставьте символьную строку, например rwxr-x---. Подойдёт и полная строка ls -l, такая как drwxr-sr-x: тогда будет показан и тип файла.
Отметьте Setuid, Setgid или Sticky, чтобы получить 4-значный режим. Если режим позволяет записывать всем без sticky bit, появится предупреждение.
Введите имя файла или папки, отметьте Рекурсивно для всего дерева каталогов и скопируйте числовую или символьную команду chmod. Адрес страницы сохраняет режим (например, ?mode=750), поэтому его можно добавить в закладки или отправить.
Примеры команды chmod
Выполняйте их в терминале Linux или macOS. Добавьте sudo в начало, если файл принадлежит другому пользователю или root.
chmod +x deploy.sh # добавить выполнение
chmod 755 deploy.sh # или задать режим целиком
./deploy.shfind /var/www/html -type d -exec chmod 755 {} +
find /var/www/html -type f -exec chmod 644 {} +chmod -R 755 folder # файлы тоже станут исполняемыми
chmod -R u=rwX,go=rX folder # папки 755, файлы 644chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/id_ed25519.pubstat -c '%a %n' file # Linux: 644 file
stat -f '%Lp %N' file # macOS: 644 file
stat -f '%Mp%Lp %N' file # macOS со специальными битами: 0644 filechgrp developers /srv/project
chmod 2775 /srv/project # новые файлы получают группу developersДругие инструменты для разработчиков
Другие бесплатные инструменты для разработчиков и системных администраторов, все работают в браузере. Нужны уникальные ID для файлов или записей? Попробуйте генератор UUID.
Диапазоны CIDR, маски сети и доступные хосты с наглядной сеткой битов.
Узнайте, открыт ли порт 22, 80, 443 или любой другой.
Надёжные случайные пароли с анализом энтропии.
Метки времени Unix в даты и обратно, в любом часовом поясе.