С чего начать Первые шаги трек · 15 ступеней
Linux Labs

chmod / chown — права и владелец файлов

6 мин Linux

Смена прав (chmod) и владельца/группы (chown) — числовой и символьный синтаксис, umask, chgrp.

Шпаргалка

8 команд Версия для печати
  • 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 меняет права (rwx).
  • chown меняет владельца и группу; chgrp — только группу.
  • umask не меняет права существующих файлов — она задаёт, какие права получат новые файлы и каталоги по умолчанию.

Основы модели прав — в статье «Права доступа» (см. «См. также»).

Ключи

10

Ниже — основные ключи 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

Ничего не найдено. Попробуй запрос короче.

Рецепты

4

chmod

Два синтаксиса:

bash
# числовой (r=4 w=2 x=1)
chmod 644 file                    # rw-r--r--
chmod 755 script                  # rwxr-xr-x
chmod 600 ~/.ssh/id_ed25519       # приватный ключ — только владельцу

# символьный
chmod u+x script.sh               # +x владельцу
chmod go-w file                   # убрать запись группе и остальным
chmod a+r file                    # всем чтение
chmod -R u+rwX dir                # рекурсивно; X = x только каталогам/уже-исполняемым

X (заглавная) удобна рекурсивно: ставит x каталогам, но не каждому файлу.

chown

bash
chown alice file                  # сменить владельца
chown alice:devs file             # владельца и группу
chown :devs file                  # только группу
chown -R www-data:www-data /var/www/site   # рекурсивно (типично для веба)
chown --reference=good.txt bad.txt # скопировать владельца с другого файла

chgrp

chgrp — то же самое, что chown :group, но короче и явнее по смыслу:

bash
chgrp devs file                   # сменить группу файла
chgrp -R devs dir                 # рекурсивно
chgrp --reference=good.txt bad.txt # скопировать группу с другого файла

umask

umask — маска: её биты ядро снимает с прав по умолчанию при создании файла (обычно 666) или каталога (777). Подробно, с тем, откуда берётся маска, — в статье umask. Она не трогает уже существующие файлы — только то, что будет создано после её установки.

bash
umask                             # показать текущую маску (обычно 0022)
umask 022                         # файлы 644, каталоги 755 — типично для пользователя
umask 002                         # файлы 664, каталоги 775 — для общей группы
echo "umask 027" >> ~/.bashrc     # сохранить постоянно (для интерактивных сессий)

022 убирает право записи группе и остальным; 002 убирает его только остальным (удобно, когда несколько человек делят группу). Для системных служб маску задают в юните (UMask= в systemd), а не в ~/.bashrc, который они не читают.

Неполадки

4

chmod 777 «на всякий случай»

Почти всегда неправильно и опасно (особенно на каталоги/веб). 777 открывает запись всем, включая посторонних пользователей системы. Подбирай минимально нужное: файлы 644, скрипты 755, секреты 600.

Общий каталог для команды — не 1777

1777 (sticky bit, world-writable) — это режим для публичных каталогов вроде /tmp: писать может кто угодно, но удалить чужой файл — только его владелец (sticky bit). Это не защита для командного каталога: сторонний пользователь системы всё равно может создавать в нём файлы. Для каталога, которым владеет одна группа, используй 2770 + владение группой:

bash
chown :devs team-dir
chmod 2770 team-dir               # rwxrws--- : только devs, setgid

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). Владелец файлов должен совпадать с пользователем службы.

Опасно

2

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 файлам ключей.

См. также

  • permissions — Модель прав Unix — чтение/запись/исполнение, владелец/группа/другие, спецбиты.
  • umask — с какими правами создаются новые файлы и откуда берётся маска.
  • special-bits — setuid, setgid и sticky: общий каталог команды.
  • users-groups — Учётные записи, группы, членство; useradd/usermod, /etc/passwd и /etc/group.
Загрузка…