chmod
Изменить права доступа к файлу или директории
Описание
Команда chmod (change mode) — одна из фундаментальных команд UNIX-систем, появившаяся ещё в Version 1 AT&T Unix (1971). Она позволяет управлять правами доступа к файлам и директориям, определяя, кто может читать, записывать и исполнять файл.
В Linux каждый файл имеет три категории пользователей: владелец (user/owner), группа (group) и остальные (others). Для каждой категории задаются три типа прав: чтение (r=4), запись (w=2) и исполнение (x=1). Команда chmod позволяет задавать права как в символьном (u+x), так и в числовом восьмеричном (755) формате.
Используйте chmod, когда нужно: сделать скрипт исполняемым, ограничить доступ к конфиденциальному файлу, выдать группе право на запись в общую директорию, или настроить права рекурсивно для целого дерева файлов.
Синтаксис
Компоненты символьного режима
| Часть | Значение | Варианты |
|---|---|---|
| Кому | Категория пользователя | u (владелец), g (группа), o (остальные), a (все) |
| Действие | Что делать с правом | + (добавить), - (убрать), = (установить точно) |
| Право | Тип доступа | r (чтение=4), w (запись=2), x (исполнение=1), s (SUID/SGID), t (sticky bit) |
Числовой (восьмеричный) режим
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-R, --recursive |
Рекурсивно изменить права для всех файлов и поддиректорий | chmod -R 755 /var/www/ |
-v, --verbose |
Вывести подробную информацию о каждом обработанном файле | chmod -v 644 file.txt |
-c, --changes |
Вывести информацию только о файлах, права которых реально изменились | chmod -c 755 *.sh |
-f, --silent |
Подавить сообщения об ошибках (тихий режим) | chmod -f 644 /etc/passwd |
--reference=FILE |
Использовать права указанного файла-образца как источник | chmod --reference=src.sh dst.sh |
--preserve-root |
Запретить рекурсивную операцию на корневом каталоге / |
chmod --preserve-root -R 755 / |
--no-preserve-root |
Разрешить операцию на / (опасно, по умолчанию в некоторых системах) |
chmod --no-preserve-root -R 644 / |
--version |
Показать версию утилиты и выйти | chmod --version |
--help |
Показать справку по использованию | chmod --help |
Специальные биты
| Бит | Числовое значение | Описание |
|---|---|---|
SUID (s) | 4xxx, напр. 4755 | Файл запускается с правами владельца (напр. /usr/bin/passwd) |
SGID (s) | 2xxx, напр. 2755 | Файл запускается с правами группы; для директорий — новые файлы наследуют группу |
Sticky bit (t) | 1xxx, напр. 1777 | В директории удалить файл может только его владелец (напр. /tmp) |
Паттерны использования
Сделать скрипт исполняемым
chmod +x deploy.sh chmod u+x,go-x secret-script.sh # Проверить результат: ls -l deploy.sh # -rwxr-xr-x 1 user group 1024 Jun 11 deploy.sh
Защита конфиденциального файла
# Только владелец может читать/писать chmod 600 ~/.ssh/id_rsa chmod 600 .env # Директория ~/.ssh — только владелец chmod 700 ~/.ssh
Права для веб-сервера
# Файлы: чтение для всех, запись только владельцу
chmod -R 644 /var/www/html/
# Директории: +x чтобы можно было войти
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
Общая директория для группы
# Группа может читать и писать chmod 775 /shared/project/ # SGID: новые файлы наследуют группу chmod 2775 /shared/project/ ls -ld /shared/project/ # drwxrwsr-x 2 user devteam /shared/project/
Символьные операции — добавить/убрать
# Добавить право на исполнение для всех chmod a+x script.sh # Убрать запись у остальных и группы chmod go-w important.conf # Установить точные права (заменить) chmod u=rwx,go=r-- file.txt
Sticky bit для /tmp
# Директория доступна всем, но удалять # файл может только его владелец chmod 1777 /tmp ls -ld /tmp # drwxrwxrwt 12 root root 4096 /tmp # ^ 't' — sticky bit активен
Советы и предупреждения
После изменения прав всегда проверяйте результат командой
ls -l файл или stat файл. Команда stat показывает права и в символьном, и в числовом виде одновременно: stat -c "%a %n" файл выведет только числовые права.
При рекурсивной установке прав удобно разделять файлы и директории, так как директориям нужен бит
x для возможности входа:find /path -type f -exec chmod 644 {} +find /path -type d -exec chmod 755 {} +Флаг
+ вместо \; передаёт несколько файлов за раз — работает быстрее.
Никогда не запускайте
chmod -R 777 / или аналогичные команды на корневой файловой системе. Это уничтожит права доступа всей системы и сделает её неработоспособной. Всегда используйте --preserve-root как защиту.
Установка прав
777 (все для всех) — частая ошибка начинающих. Это означает, что любой пользователь системы может изменить или удалить файл. Для веб-файлов используйте 644, для скриптов — 755, для приватных ключей — 600.