Я использую сайт wordpress на общем хостинге (CentOS). Загрузка через wordpress работает только в том случае, если я установил каталог загрузки на 777, что небезопасно.
Каталог загрузки принадлежит пользователю и группе psacln (мы используем plesk на сервере).
После того, как гуглил, все еще не могу понять, что мне делать, чтобы разрешить загрузку пользователей из wordpress без установки 777 в каталоге?
Спасибо
Каталог должен принадлежать тому же пользователю, что и запущенный процесс PHP. Если вы используете PHP под apache, этим пользователем обычно будет apache.
Вы можете проверить это, проверив пользователя httpd:
[user@host ~]$ ps aux | grep httpd
Вы получите результат, подобный этому:
[user@host ~]$ ps aux | grep nginx
root 4774 0.0 0.3 11204 3288 ? Ss 12:20 0:00 /usr/sbin/httpd
apache 4776 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4777 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4778 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4779 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4780 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4781 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4782 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
apache 4783 0.0 0.1 11204 2076 ? S 12:20 0:00 /usr/sbin/httpd
root 4787 0.0 0.0 5500 716 pts/1 S+ 12:20 0:00 grep httpd
Я запускаю apache с PHP, скомпилированным как модуль, поэтому изменение разрешений на 'apache' решит вашу проблему и позволит вам сбросить разрешения до 755 или 700, если вы действительно заботитесь о безопасности:
[user@host ~]$ chown apache /path/to/upload/dir
[user@host ~]$ chmod 755 /path/to/upload/dir
Согласно вашему комментарию, вы можете добавить apache
и psacln
в одну и ту же группу, измените владельца группы и измените его таким образом
[user@host ~]$ sudo groupadd web
[user@host ~]$ sudo usermod -G web apache
[user@host ~]$ sudo usermod -G web psacln
[user@host ~]$ chgrp web /path/to/upload/dir
[user@host ~]$ chmod 070 /path/to/upload/dir
Вы также можете использовать 575 для разрешения rwr (владелец, группа, другое)
Я использую этот простой скрипт для установки всех правильных разрешений в файловой системе, чтобы установка WordPress была максимально безопасной, но при этом разрешала загрузку с веб-сервера.
#!/bin/bash
PATH=/bin:/usr/bin
WEBROOT="/var/www/www.example.org"
UPLOADS="${WEBROOT}/wp-content/uploads"
chown -R nobody:nogroup ${WEBROOT}
find ${WEBROOT} -type d -exec chmod 0555 {} \;
find ${WEBROOT} -type f -exec chmod 0444 {} \;
chown nobody:www-data ${WEBROOT}/sitemap.xml ${WEBROOT}/sitemap.xml.gz
chmod 0464 ${WEBROOT}/sitemap.xml ${WEBROOT}/sitemap.xml.gz
chown -R nobody:www-data ${UPLOADS}
find ${UPLOADS} -type d -exec chmod 2575 {} \;
find ${UPLOADS} -type f -exec chmod 0464 {} \;
Если Я хочу обновить WordPress или любые плагины или темы, я просто запускаю
chmod -R 0777 /var/www/www.example.org
, а затем выполняю обновление. Когда я закончу с обновлениями, я немедленно запускаю первый сценарий, чтобы снова установить правильные разрешения.
Использование 777 или добавление прав apache / http / user и разрешение модификации файлов небезопасно.
Не разрешайте прямую загрузку и используйте доступ ftp или SFTP только для обновления. Таким образом, у веб-сайта есть доступ только для чтения / выполнения к файлам (если вы не сделали чертовски 777 раньше).
Для безопасного управления правами используйте плагин сканера безопасности WSD, чтобы проверить, безопасен ли ваш WP или нет.