Что такое сhmod?
chmod изменяет права доступа к файлам и каталогам в Unix-подобных системах. Права на чтение, запись и выполнение задают отдельно для владельца, группы и остальных пользователей. Права на каталог влияют на просмотр его списка, создание файлов и доступ к вложенным путям.
Символьная и числовая запись
chmod u+x script.sh добавляет владельцу право выполнения. Число 755 означает rwxr-xr-x: владельцу доступны чтение, запись и выполнение, группе и остальным — чтение и выполнение. Цифры складываются из 4 (чтение), 2 (запись), 1 (выполнение). Значение 644 часто подходит для обычного файла, но его правильность зависит от назначения файла и окружения.
Права каталогов и удаление
Для каталога r позволяет перечислять имена, w — изменять список записей, x — проходить по известному пути. Удаление файла обычно определяется правами на родительский каталог, а не правом записи в сам файл. Поэтому chmod 444 file не запрещает владельцу доступного для записи каталога удалить этот файл. Это разъясняет руководство GNU Coreutils.
Особые биты
Начальная восьмеричная цифра задаёт специальные биты: 4 — setuid, 2 — setgid, 1 — sticky. Например, 4755 включает setuid для исполняемого файла; его следует применять только при понимании рисков. В каталоге setgid помогает наследовать группу, а sticky ограничивает удаление чужих файлов в общем каталоге вроде /tmp. Для проверки числового режима используйте калькулятор chmod.
Пример настройки сайта
Представим каталог с HTML-файлами, которые веб-сервер должен читать, а обновлять может только владелец. Для каталога часто начинают с 755, для обычных файлов — с 644, затем учитывают владельца процесса, группы и правила хостинга. Это пример, а не универсальный рецепт: закрытые конфигурационные файлы требуют более строгих прав. Не ставьте 777 для «исправления» ошибки доступа: так любой локальный пользователь получает право изменять объект, если другие ограничения не помешают.
Проверьте текущие права командой ls -l и владельца командой stat. Если разрешения выглядят верно, но доступ всё равно запрещён, причина может быть в правах одного из родительских каталогов, списках ACL, SELinux/AppArmor или работе сервиса под другим пользователем. Изменение только последнего файла в пути тогда не поможет. Перед рекурсивным chmod -R проверьте, какие файлы и каталоги оно затронет: одинаковые права обычно не подходят исполняемым файлам, обычным документам и каталогам.
Как не ошибиться со специальными битами
Число 455 состоит только из трёх цифр и не включает setuid; для setuid нужна четвёртая начальная цифра, как в 4755. Setuid не делает программу безопасной: ошибка в такой программе может дать доступ с правами её владельца. Sticky bit полезен в общих каталогах, где несколько пользователей могут создавать файлы, но не должен заменять ограничение доступа и наблюдение за безопасностью. Официальные правила описаны в руководстве GNU.
После изменения прав проверьте ожидаемое действие от имени того пользователя, под которым работает сервис. Успешный запуск команды администратором не доказывает, что доступ есть у обычного процесса.
