Назад | Перейти на главную страницу

Как настроить безопасный PHP и SFTP

Моя текущая установка включает 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