chown в Linux — смена владельца и группы

Что делает chown и когда он нужен
Команда chown (change owner) переводит файл или каталог на другого пользователя и/или в другую группу. Это полезно при переносе данных между пользователями, настройке сервисов, исправлении прав доступа после восстановления резервной копии или настройке совместного доступа.
Ключевые понятия в одну строку:
- Владелец — учётная запись пользователя, которой принадлежит файл.
- Группа — набор пользователей, которым можно дать общие права.
- UID/GID — числовые идентификаторы пользователя и группы.
Базовый синтаксис
Правильный формат команды:
sudo chown [опции] new_owner[:new_group] файл_или_каталогПримеры:
sudo chown maketech:maketechpublic docker-machine
sudo chown maketech docker-machine # изменить только владельца
sudo chown :maketechpublic docker-machine # изменить только группу
sudo chown 1002:1002 docker-machine # по UID:GID
sudo chown -R maketech:maketechpublic virtual-machine # рекурсивноВажно: для изменения владельца обычно требуются права суперпользователя — поэтому часто используется sudo.
Проверка текущих прав перед изменением
Перед изменением владельца проверьте текущие права и владельца:
ls -l имя_файла_или_каталогаПример вывода:
$ ls -l
total 1964
-rw-r--r-- 1 userkubetrain user_kubetrain 2148 Mar 18 2019 certnew.cer
-rw-r--r-- 1 maketech user_kubetrain 48 Jan 29 10:13 docker-machineВ третьей и четвертой колонках указаны владелец и группа соответственно.
Изменение только владельца
Чтобы изменить только владельца, укажите новое имя пользователя без двоеточия или с двоеточием и пустой группой:
sudo chown maketech docker-machine
sudo chown maketech: docker-machine # двоеточие означает: не менять группуЗатем повторно выполните ls -l, чтобы убедиться, что владелец сменился.
Изменение только группы
Для смены группы используйте двоеточие перед именем группы или команду chgrp:
sudo chown :maketechpublic docker-machine
# или эквивалентно
sudo chgrp maketechpublic docker-machineЕсли нужно применить к каталогу и всем вложенным файлам — добавьте -R.
sudo chown -R :maketechpublic docker-machineРекурсивное изменение
Флаг -R (или –recursive) применяет изменение ко всем файлам и подкаталогам внутри указанной директории.
sudo chown -R maketech:maketechpublic /srv/projectИспользуйте осторожно — рекурсивная операция может изменить права для больших деревьев и сервисов.
Работа с символьными ссылками и специальными опциями
chown по умолчанию не изменяет владельца у самого файла, на который указывает символьная ссылка; но поведение зависит от опций и реализации (GNU chown поддерживает -h):
sudo chown -h newowner symlink # изменить владельца самой ссылки, а не целевого файлаПолезные опции:
- -R, –recursive — рекурсивно
- -h, –no-dereference — изменить ссылку, а не объект под ней
- –reference=REF — установить владельца/группу по образцу REF
Использование UID/GID вместо имён
Иногда полезно указывать числовые идентификаторы:
sudo chown 1002:1002 файл # установить владельца и группу по числамЭто важно при миграции между системами, где имена пользователей могут не совпадать, но UID — сохраняются.
Типичные ошибки и почему chown может не сработать
- Нет прав суперпользователя: вы получите ошибку «Operation not permitted». Добавьте sudo или войдите как root.
- Файловая система доступна только для чтения (read-only): проверяйте mount и атрибуты.
- Неразрешённые пользователи/группы: убедитесь, что указанные имена существуют в /etc/passwd и /etc/group.
- Использование NFS с root_squash: root на клиенте может не иметь прав на изменение владельца на NFS-сервере.
Когда лучше не применять chown
- Если вы только хотите изменить права доступа — используйте chmod.
- Для управления доступом в сложных сценариях лучше ACL (setfacl/getfacl).
- Для совместного доступа временно лучше добавить пользователей в группу, а затем управлять правами через group permissions.
Альтернативы и дополнительные инструменты
- chgrp — изменить только группу.
- chmod — изменить разрешения (rwx).
- setfacl/getfacl — гибкие ACL для точного контроля доступа.
- rsync –numeric-ids при переносе файлов сохраняет UID/GID.
Пошаговый чеклист для операции смены владельца (SOP)
- Проверить владельца и права: ls -l /path
- Найти необходимые UID/GID, если нужно: id username; getent group groupname
- Выполнить команду сначала на одном тестовом файле/директории.
- Проверить результат: ls -l
- Если всё верно, применить -R к основной директории.
- Перезапустить сервисы, которые зависят от прав, если требуется.
- Протестировать доступ от имени целевых пользователей.
Ролевые подсказки (кратко)
- Для системного администратора: всегда делайте бэкап и тесты на непроизводственном хосте перед массовыми изменениями.
- Для разработчика: используйте chown для устранения проблем с правами при локальном развёртывании.
- Для оператора CI/CD: учитывайте UID/GID контейнеров и хост-системы при монтировании томов.
Критерии приёмки
- Владелец и/или группа изменены в соответствии с требованиями (ls -l показывает нужные значения).
- Сервисы работают корректно после изменения прав.
- Нет открытых проблем доступа у целевых пользователей.
Тестовые сценарии (acceptance)
- Изменение владельца для одного файла: выполнить chown и проверить ls -l.
- Рекурсивное изменение: для временной копии каталога выполнить chown -R и сверить владельцев всех файлов.
- Работа с символьными ссылками: проверить, изменяет ли -h владельца ссылки, а не целевого файла.
Примеры ошибок и способы их устранения
- Ошибка: Operation not permitted — проверьте sudo/root и root_squash на NFS.
- Ошибка: invalid user — проверьте /etc/passwd или используйте uid.
- После chown сервис перестал запускаться — проверьте права на файлы конфигурации и каталоги, верните прежние значения через резервную копию.
Краткая таблица-компакт (cheat sheet)
# изменить владельца
sudo chown alice file
# сменить владельца и группу
sudo chown alice:devgroup file
# изменить только группу
sudo chown :devgroup file
# рекурсивно
sudo chown -R alice:devgroup /path/to/dir
# по UID:GID
sudo chown 1001:1001 /path/to/file
# изменить владельца самой символьной ссылки
sudo chown -h alice symlinkБезопасность и соответствие (коротко)
Изменение владельца влияет на владение и потенциально на доступ к данным. После изменения проверьте, что доступ разрешён только тем, кому он нужен. При работе с персональными данными учитывайте политики хранения и доступности в вашей организации.
Часто задаваемые вопросы
Можно ли обычному пользователю изменить владельца файла?
Нет — только root (или через sudo) может менять владельца. Обычные пользователи могут менять группу файлов, если они являются владельцем и у них есть право на смену группы.
Как вернуть прежнего владельца, если я ошибся?
Если есть запись прежнего владельца (например, в логах или бэкапе), выполните sudo chown olduser:oldgroup путь. Без этой информации восстановление сложнее.
Отличие chown и chmod?
chown меняет владельца/группу, chmod меняет разрешения (rwx).
Краткое резюме:
- chown управляет владельцем и группой файла/каталога;
- для изменения требуется root; используйте sudo и тестируйте на примерах;
- применяйте -R осторожно и учитывайте особенности NFS и символьных ссылок.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента