Como configurar PHP e SFTP seguros

2

Minha configuração atual inclui nginx e php5-fpm. Esta questão é sobre um host que contém um site Wordpress. O host tem seu próprio pool fpm com user: group, vamos chamá-lo de wordpress:wordpress . O Nginx é executado usando o padrão www-data:www-data .

Isso significa que: Os arquivos PHP são executados por wordpress:wordpress , os arquivos estáticos são atendidos por www-data:www-data . Portanto, todos os arquivos precisam ser legíveis por ambos os usuários. Os arquivos que o wordpress escreve também devem ser graváveis por wordpress:wordpress .

Mas aí vem o problema: eu quero permitir a modificação de todos os arquivos via SFTP. Atualmente isso é feito usando o usuário wordpress:wordpress , o que significa que este usuário precisa de acesso total a todos os arquivos.

Portanto, um script PHP mal-intencionado enviado ao servidor pode modificar todos os arquivos dessa instalação do Wordpress e fornecer malware, etc., para os usuários finais. Eu quero reduzir esse risco fazendo apenas os arquivos que o Wordpress precisa gravar em PHP.

Pensei em configurar outra conta de usuário, digamos wordpress-sftp:wordpress exclusivamente para SFTP. A pasta base deste usuário seria a raiz do host wordpress, assim como wordpress:wordpress 's. wordpress-sftp:wordpress teria acesso total aos arquivos deste host. Os arquivos da instalação do wordpress seriam legíveis pelo grupo wordpress . Os arquivos que precisam ser graváveis pelo wordpress eu tornaria gravável pelo grupo wordpress . Além disso, adicionaria o usuário www-data ao grupo wordpress para que ele possa ler os arquivos estáticos.

Assim, todos os arquivos poderiam obter as permissões 644 ou 640 , os arquivos que precisam ser graváveis pelo Wordpress receberão as permissões 664 ou 660 .

Esta configuração parece razoável e segura? Ou como você resolveria o problema?

    
por sumbodyyy 23.09.2015 / 13:10

1 resposta

0

Esta configuração é segura apenas para arquivos em sua pasta do site wordpress, mas não impede que um invasor invada seu sistema e acesse / leia / grave outros arquivos em seu servidor.

Como você está usando php5-fpm eu sugiro que você defina open_basedir para limitar o usuário php5 ao diretório php5 pool, assim:

php_admin_value[open_basedir] = /home/www/wordpress/httpdocs:/home/www/wordpress/tmp

Altere o diretório tmp do site para evitar o acesso na pasta compartilhada tmp.

Desative todas as funções do php não usadas pelo seu CMS para impedir o uso de funções perigosas para um usuário mal-intencionado, por exemplo:

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

Limite a memória (se você puder calcular a quantidade máxima de RAM necessária para a instalação do seu wordpress), desta forma o script mal-intencionado não pode exaurir os recursos do seu servidor.

php_admin_value[memory_limit] = 124M

Limite de upload_max_file size e post_max_size para evitar o upload de software grande (se você não precisar)

php_admin_value[upload_max_filesize] = 12M
php_admin_value[post_max_size] = 12M
    
por 01.10.2015 / 00:13