Смена владельца файлов в Linux: исправление прав сайта через chown www-data
Почему сайт перестает работать после загрузки новых файлов?
Типичная ситуация: веб-мастер залил обновленный архив сайта через FTP/SFTP или распаковал его в консоли от имени пользователя root. В результате созданные файлы принадлежат суперпользователю root с правами доступа, запрещающими запись другим процессам. Возникают следующие проблемы:
- При открытии страниц сайта в браузере выдается ошибка 403 Forbidden.
- CMS (WordPress, 1С-Битрикс, Laravel) не может загружать картинки и плагины:
Permission denied: unable to write to upload directory. - В логах веб-сервера появляются записи:
open() "/var/www/site/index.php" failed (13: Permission denied).
Инструкция по восстановлению корректного владельца файлов
Веб-серверы Nginx, Apache и обработчик PHP-FPM в Ubuntu/Debian по умолчанию работают под системной учетной записью и группой www-data (в CentOS/RHEL/AlmaLinux — пользователь apache или nginx).
- Шаг 1. Проверяем текущего владельца папки:
ls -la /var/www/htmlЕсли в столбце владельца написано
root root, веб-сервер не имеет прав на изменение этих файлов. - Шаг 2. Рекурсивно меняем владельца и группу (команда chown):
Флаг
-R(recursive) применяет смену владельца абсолютно ко всем вложенным папкам и файлам:# Для Ubuntu / Debian: sudo chown -R www-data:www-data /var/www/html # Для CentOS / RHEL / AlmaLinux: sudo chown -R nginx:nginx /var/www/html - Шаг 3. Выставляем правильные стандартные права доступа (chmod):
В целях безопасности каталоги должны иметь права
755(rwxr-xr-x), а файлы —644(rw-r--r--):# Выставляем права 755 для всех директорий: sudo find /var/www/html -type d -exec chmod 755 {} \; # Выставляем права 644 для всех файлов: sudo find /var/www/html -type f -exec chmod 644 {} \;
Частые вопросы (FAQ)
Почему нельзя просто выставить права 777 на всю папку сайта?
Права 777 (chmod -R 777) разрешают запись, изменение и запуск файлов любому пользователю и скрипту в системе. Если злоумышленник найдет уязвимость в плагине, он сможет легко загрузить веб-шелл и полностью перехватить контроль над сервером.
Что означает первая и вторая часть в записи 'www-data:www-data'?
Первая часть до двоеточия указывает имя системного пользователя-владельца, а вторая часть после двоеточия — группу пользователей.
Как разрешить конкретному FTP-пользователю редактировать файлы сайта вместе с www-data?
Добавьте вашего FTP-пользователя (например, alex) в группу www-data: sudo usermod -aG www-data alex, и установите права группы на запись: sudo chmod -R 775 /var/www/html.
Что делать, если в CentOS после смены владельца все равно пишет 403 Forbidden?
В CentOS/RHEL причиной блокировки часто является система безопасности SELinux. Восстановите контекст безопасности командой: sudo restorecon -R /var/www/html.