Моя текущая установка включает nginx и php5-fpm. Этот вопрос касается хоста, который содержит сайт Wordpress. У хоста есть собственный пул fpm с user: group, назовем его wordpress:wordpress
. Nginx работает по умолчанию www-data:www-data
.
Это означает, что: файлы PHP выполняются wordpress:wordpress
, статические файлы обслуживаются www-data:www-data
. Следовательно, все файлы должны быть доступны для чтения обоими этими пользователями. Файлы, в которые пишет WordPress, также должны быть доступны для записи wordpress:wordpress
.
Но здесь возникает проблема: я хочу разрешить изменять все файлы через SFTP. В настоящее время это делается с помощью wordpress:wordpress
user, что означает, что этому пользователю нужен полный доступ ко всем файлам.
Таким образом, загруженный на сервер вредоносный PHP-скрипт может изменять все файлы этой установки Wordpress и обслуживать вредоносное ПО и т. Д. Для конечных пользователей. Я хочу снизить этот риск, сделав доступными для записи PHP только те файлы, которые Wordpress должен записывать.
Я подумал о создании другой учетной записи пользователя, скажем wordpress-sftp:wordpress
исключительно для SFTP. Домашняя папка этого пользователя будет корнем хоста wordpress, как и wordpress:wordpress
с. wordpress-sftp:wordpress
будет иметь полный доступ к файлам этого хоста. Файлы установки wordpress я бы сделал доступными для чтения wordpress
группа. Файлы, которые должны быть доступны для записи с помощью wordpress, я бы сделал доступными для записи wordpress
группа. Дополнительно я бы добавил www-data
пользователь к wordpress
group, чтобы он мог читать статические файлы.
Чтобы все файлы могли получить разрешения 644
или 640
, файлы, которые должны быть доступны для записи Wordpress, получат разрешения 664
или 660
.
Эта установка звучит разумно и безопасно? Или как бы вы решили проблему?
Эта установка безопасна только для файлов в папке вашего сайта wordpress, но не мешает злоумышленнику проникнуть в вашу систему и получить доступ / прочитать / записать другие файлы на вашем сервере.
Поскольку вы используете php5-fpm, я предлагаю вам установить open_basedir, чтобы ограничить пользователя php5 каталогом пула php5, например:
php_admin_value[open_basedir] = /home/www/wordpress/httpdocs:/home/www/wordpress/tmp
Измените каталог tmp для сайта, чтобы избежать доступа в общую папку tmp.
Отключите все функции php, не используемые вашей CMS, чтобы предотвратить использование опасных функций злоумышленником, например:
php_admin_value[disable_functions] = apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, system, xmlrpc_entity_decode
Ограничьте память (если вы можете рассчитать максимальный объем оперативной памяти, необходимый для вашей установки WordPress), таким образом вредоносный сценарий не может исчерпать ресурсы вашего сервера.
php_admin_value[memory_limit] = 124M
Ограничьте размер upload_max_file и post_max_size, чтобы предотвратить загрузку большого программного обеспечения (если вам это не нужно)
php_admin_value[upload_max_filesize] = 12M
php_admin_value[post_max_size] = 12M