chmod
Два синтаксиса:
X (заглавная) удобна рекурсивно: ставит x каталогам, но не каждому файлу.
Смена прав (chmod) и владельца/группы (chown) — числовой и символьный синтаксис, umask, chgrp.
chmod 644 file
rw-r--r--
chmod 755 script
rwxr-xr-x
chmod 600 secret
только владелец
chmod 2770 team-dir
setgid: новые файлы наследуют группу каталога
chown user:group file
владелец и группа
chown -R www-data:www-data /var/www/site
рекурсивно (типично для веба)
chgrp devs file
сменить только группу
umask
текущая маска новых файлов
Основы модели прав — в статье «Права доступа» (см. «См. также»).
Ниже — основные ключи chmod и chown; полный список — в man chmod/man chown.
| Ключ | Что делает | Пример |
|---|---|---|
-R --recursive |
Применить рекурсивно ко всему дереву каталога. опасно | chmod -R 755 dir |
-R --recursive |
Применить рекурсивно ко всему дереву каталога. опасно | chown -R www-data:www-data /var/www/site |
-v --verbose |
Печатать, что сделано, для каждого файла. | chmod -v 644 file |
-c --changes |
Как -v, но только для файлов, чьи права реально изменились. | chmod -c 644 file |
--reference RFILE |
Взять права не из режима, а с другого файла. | chmod --reference=good.txt bad.txt |
-v --verbose |
Печатать, что сделано, для каждого файла. | chown -v alice file |
--reference RFILE |
Взять владельца и группу с другого файла. | chown --reference=good.txt bad.txt |
-f --silent |
Не выводить большинство ошибок. | chmod -f 644 *.txt |
--from CURRENT_OWNER:CURRENT_GROUP |
Сменить владельца, только если текущий совпадает с указанным. | chown --from=root:root alice file |
-h --no-dereference |
Менять владельца самой символической ссылки, не цели. | chown -h alice link |
Ничего не найдено. Попробуй запрос короче.
Два синтаксиса:
X (заглавная) удобна рекурсивно: ставит x каталогам, но не каждому файлу.
chgrp — то же самое, что chown :group, но короче и явнее по смыслу:
umask — маска: её биты ядро снимает с прав по умолчанию при создании файла
(обычно 666) или каталога (777). Подробно, с тем, откуда берётся маска, — в
статье umask. Она не трогает уже существующие файлы —
только то, что будет создано после её установки.
022 убирает право записи группе и остальным; 002 убирает его только остальным
(удобно, когда несколько человек делят группу). Для системных служб маску задают
в юните (UMask= в systemd), а не в ~/.bashrc, который они не читают.
Почти всегда неправильно и опасно (особенно на каталоги/веб). 777 открывает
запись всем, включая посторонних пользователей системы. Подбирай минимально
нужное: файлы 644, скрипты 755, секреты 600.
1777 (sticky bit, world-writable) — это режим для публичных каталогов вроде
/tmp: писать может кто угодно, но удалить чужой файл — только его владелец
(sticky bit). Это не защита для командного каталога: сторонний пользователь
системы всё равно может создавать в нём файлы. Для каталога, которым владеет одна
группа, используй 2770 + владение группой:
Setgid (2) заставляет новые файлы в каталоге наследовать его группу, а не
основную группу создавшего их пользователя — команда не теряет доступ к тому, что
создали коллеги. Чтобы коллеги не удаляли файлы друг друга, добавь sticky:
chmod 3770. Подробно — в статье Особые биты прав.
chmod -R 644 dir снимет x с каталогов → в них не зайти. Используй u+rwX или
раздельно: find dir -type d -exec chmod 755 {} + и -type f -exec chmod 644 {} +.
Многие демоны работают от своего пользователя (www-data, postgres). Владелец
файлов должен совпадать с пользователем службы.
chmod -R / chown -R на системных каталогахРекурсивная правка /, /etc или /usr (например, попыткой «починить права
одной командой») меняет права тысяч файлов сразу, включая те, чьи права критичны
для запуска: sshd откажется читать приватный ключ хоста с неверными правами,
sudo перестанет работать при неверных правах на свой бинарь. Восстановление —
переустановка пакетов (dpkg --verify, apt install --reinstall) или откат из
бэкапа; быстрого способа «вернуть как было» нет. Ограничивай область явно
(chmod -R … /var/www/site, не chmod -R … /).
chmod 600 ~/.ssh/id_ed25519, но не наоборотПриватный ключ с правами доступными группе или остальным SSH откажется
использовать. А вот chmod -R 600 на весь ~/.ssh снимет x с самого каталога
.ssh (если применить и к нему) — тогда в него не зайти вообще. Права каталога и
файла в нём различаются: 700 каталогу, 600 файлам ключей.
Есть неточность? Сообщить об ошибке в статье