В Linux каждый файл имеет владельца (user) и группу (group). Права доступа (read/write/execute) применяются отдельно для трёх категорий: владелец, группа, остальные (other). Команда chown меняет владельца и/или группу файла или директории.
Синтаксис и примеры
# Изменить только владельца
chown www-data file.php
# Изменить владельца и группу
chown www-data:www-data /var/www/html
# Рекурсивно для директории
chown -R www-data:www-data /var/www/html
# Изменить только группу
chown :www-data file.php # или chgrp www-data file.php
# Посмотреть текущего владельца
ls -la file.php
# Output: -rw-r--r-- 1 www-data www-data 1234 Jan 1 /var/www/file.php
Типичные сценарии в хостинге
- PHP-приложение под Nginx + PHP-FPM:
chown -R www-data:www-data /var/www/site/— PHP-FPM работает от www-data, должен читать и писать файлы. - WordPress uploads:
/wp-content/uploadsдолжна принадлежать www-data для загрузки медиафайлов. - Деплой через CI/CD: пользователь deploy копирует файлы, процесс Nginx запускается под www-data — файлы должны принадлежать www-data или иметь нужные права группы.
- Бэкапы: файлы бэкапа должны принадлежать пользователю, выполняющему cron-задачу.
chmod vs chown
| Команда | Что меняет | Пример |
|---|---|---|
| chown | Кому принадлежит файл | chown www-data:www-data /var/www |
| chmod | Что можно делать с файлом | chmod 755 /var/www |
| chgrp | Только группу (часть chown) | chgrp www-data /var/www |
Стандартная настройка для веб-директории:
chown -R www-data:www-data /var/www/html # владелец = веб-сервер
chmod -R 755 /var/www/html # директории: rwxr-xr-x
find /var/www/html -type f -exec chmod 644 {} \; # файлы: rw-r--r--
История
chown входит в стандарт POSIX и присутствует во всех Unix/Linux-системах с первых версий Unix (ранние 1970-е). В Linux реализован как часть GNU Coreutils. Модель владения файлами — UID/GID — унаследована от Unix и остаётся неизменной с 1970-х.
На что обращать внимание
Рекурсивный chown -R на системных директориях (/etc, /usr) может полностью сломать систему — выполнять с осторожностью. sudo обязателен для смены владельца файлов, принадлежащих другим пользователям. В контексте Docker: UID внутри контейнера может не совпадать с UID на хосте — при монтировании volumes проверяйте права доступа.
Рекурсивная смена владельца
Флаг -R рекурсивно меняет владельца всех файлов и поддиректорий:
chown -R www-data:www-data /var/www/site
Это стандартная команда после загрузки файлов сайта на сервер — Nginx и Apache работают от пользователя www-data и не смогут читать файлы с другим владельцем.
Числовые UID/GID
chown принимает как имена, так и числовые идентификаторы: chown 1000:1000 file.txt. Числовые UID используются в контейнерах Docker, где имена пользователей могут отличаться от хост-системы. Проверить текущих владельцев: ls -la или stat file.txt.
Одновременная смена владельца и группы: chown user:group file. Только группы: chown :group file или команда chgrp group file. Только владельца: chown user file. Связка chown + chmod — базовый инструмент настройки прав на любом Linux-сервере.