При работе с сайтом на Linux-сервере иногда нужно изменить владельца файлов, группу или права доступа. Это бывает после переноса сайта, распаковки архива, восстановления резервной копии, работы скрипта от другого пользователя или некорректной настройки веб-сервера. Для этих задач обычно используются команды:
- chown — изменить владельца и группу;
- chmod — изменить права доступа;
- find — применить разные права отдельно к файлам и каталогам.
Команды можно выполнять через SSH или непосредственно в терминале сервера.
Как посмотреть текущего владельца и права
Перед изменениями полезно сначала посмотреть текущее состояние файла или каталога:
ls -la
drwxr-xr-x 5 user www-data 4096 site
-rw-r--r-- 1 user www-data 1250 index.php
Здесь:
- user — владелец;
- www-data — группа;
- drwxr-xr-x и -rw-r—r— — права доступа.
Для конкретного файла:
ls -l index.php
Как изменить владельца файла
Для изменения владельца используется chown. Синтаксис:
chown пользователь файл
sudo chown alex index.php
После этого владельцем index.php станет пользователь alex.
GNU chown позволяет изменять владельца, группу или оба значения одновременно
Как изменить владельца и группу
chown пользователь:группа файл
sudo chown alex:www-data index.php
sudo chown alex:www-data /var/www/example.com
sudo chown :www-data index.php
Как изменить владельца всех файлов и каталогов рекурсивно
sudo chown -R alex:www-data /var/www/example.com
Команда изменит владельца и группу самого каталога и всего содержимого внутри него.
Рекурсивное поведение chown -R предусмотрено как GNU Coreutils, так и POSIX. Перед выполнением такой команды особенно важно проверить путь. Ошибка вроде:
sudo chown -R alex:www-data /
Как изменить права доступа chmod
Для изменения прав используется команда chmod. Например:
chmod 644 index.php
chmod 755 public
Числа обозначают комбинации прав:
- 4 — чтение (read);
- 2 — запись (write);
- 1 — выполнение (execute).
Они складываются:
- 7 = 4 + 2 + 1 — чтение, запись и выполнение;
- 6 = 4 + 2 — чтение и запись;
- 5 = 4 + 1 — чтение и выполнение;
- 4 — только чтение.
Три цифры относятся соответственно к:
- владельцу;
- группе;
- остальным пользователям.
Поэтому:
- 755
владелец: читать + писать + выполнять
группа: читать + выполнять
остальные: читать + выполнять
А:
- 644
означает:
владелец: читать + писать
группа: читать
остальные: читать
Почему для каталогов часто используют 755, а для файлов 644
каталоги: 755
файлы: 644
Причина в том, что каталог должен иметь право execute, чтобы пользователь мог переходить внутрь него и обращаться к находящимся там объектам.
Обычному PHP-, HTML- или CSS-файлу право выполнения обычно не требуется.
Но это не универсальное правило для любого сервера. Нужные права зависят от:
- пользователя, под которым работает веб-сервер;
- PHP-FPM; групп;
- механизма деплоя;
- задач приложения.
Поэтому не стоит механически выставлять 755/644 на всё, не понимая конфигурацию.
Как установить 755 только для папок
find /var/www/example.com -type d -exec chmod 755 {} \;
Как установить 644 только для файлов
find /var/www/example.com -type f -exec chmod 644 {} \;
find /var/www/example.com -type d -exec chmod 755 {} \;
find /var/www/example.com -type f -exec chmod 644 {} \;
chmod -R 755 /var/www/example.com
Как изменить владельца только файлов
find /var/www/example.com -type f -exec chown alex:www-data {} \;
find /var/www/example.com -type d -exec chown alex:www-data {} \;
sudo chown -R alex:www-data /var/www/example.com
Символьная запись chmod
chmod u+x script.sh
chmod g-w file.txt
chmod o-r file.txt
уберёт право чтения у остальных пользователей. Обозначения:
- u — owner/user;
- g — group;
- o — others;
- a — all.
А действия:
- + — добавить;
- — — убрать;
- = — установить точно заданные права.
Когда появляется Permission denied
Permission denied
Operation not permitted
у текущего пользователя, скорее всего, недостаточно прав для изменения файла.
Попробуйте выполнить команду через sudo:
sudo chown alex:www-data index.php
sudo chmod 644 index.php
sudo chmod 644 index.php
Почему после загрузки или распаковки сайта меняется владелец
Такая ситуация часто возникает, когда файлы создаются разными процессами. Например:
- файлы загружены одним SSH-пользователем;
- PHP работает от другого пользователя;
- архив распаковывался через административную панель сайта;
- файл создал веб-сервер;
- резервная копия восстанавливалась от root.
В итоге внутри одного сайта могут появиться разные владельцы. Это способно привести к ситуациям, когда:
- CMS не может обновить файл;
- WordPress не устанавливает плагин;
- PHP не может записать кэш;
- пользователь по SFTP не может удалить файл;
- веб-сервер не может читать или изменять каталог.
Здесь правильное решение — не выдавать всему сайту 777, а разобраться, какой пользователь должен владеть файлами и какой группе действительно нужен доступ.
Почему chmod 777 — плохое решение
chmod -R 777 /var/www/example.com
Для рабочего сайта это почти всегда плохой подход. 777 разрешает чтение, запись и выполнение владельцу, группе и всем остальным пользователям системы.
Это не исправляет причину неправильного владельца или группы — только убирает ограничения доступа. Если сайт заработал только после 777, нужно выяснить:
- от какого пользователя работает PHP;
- кому принадлежат файлы; какая установлена группа;
- какой процесс пытается писать в каталог.
После этого выставить минимально необходимые права.
Практический пример для сайта
/var/www/example.com
и должен принадлежать пользователю deploy, а веб-сервер работает с группой www-data. Владелец и группа:
sudo chown -R deploy:www-data /var/www/example.com
find /var/www/example.com -type d -exec chmod 755 {} \;
find /var/www/example.com -type f -exec chmod 644 {} \;
Как проверить результат
ls -la /var/www/example.com
stat /var/www/example.com/index.php
Проверьте:
- владельца;
- группу;
- права;
- что сайт продолжает работать;
- что приложение может записывать только туда, куда ему действительно нужно.
Главное
sudo chown user:group file
sudo chown -R user:group /path/to/site
chmod 644 file
chmod 755 directory
find /path/to/site -type f -exec chmod 644 {} \;
find /path/to/site -type d -exec chmod 755 {} \;
И главное правило: не использовать chmod -R 777 как универсальное решение ошибок доступа. Сначала нужно определить правильного владельца, группу и требования конкретного приложения.

















