仅为某些主机启用shell_exec

时间:2014-03-04 13:25:09

标签: nginx php shell-exec

我使用nginx和php-fpm作为默认的webserver而没有apache。 因此,为了获得最佳安全性,每个主机都有自己的php-fpm池。

我再次遇到shell_exec的问题 - 我不想为所有用户启用,但我需要将此功能用于某些主机(1或3台主机,不再需要)。

在php.ini中关闭shell_exec。 我尝试在站点php-fpm池中启用shell_exec,但它不起作用:

php_admin_value[shell_exec] = on

3 个答案:

答案 0 :(得分:1)

要考虑的其他因素是禁用主disable_function文件中的php.ini

然后为每个FPM池设置disable_function :(例如)

php_admin_value[disable_functions] = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

如果您有一个特定的FPM池需要使用其中一个或多个功能,只需将其从该池配置中删除即可。

答案 1 :(得分:0)

您可以创建白名单IP主机:

$whitelist = array('127.0.0.1', '192.168.0.1', 'whateverIPyouAuth');
if(in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
    //shell_exec call here
}

答案 2 :(得分:0)

您可以suhosin.executor.func.blacklist

执行此操作

1)在php.ini中评论disable_function
2)在下面添加此行(列出所有要列入黑名单的函数。名为disable_function)

suhosin.executor.func.blacklist = exec, passthru, shell_exec, system, proc_open, popen, apache_child_terminate, apache_setenv, define_syslog_variables, pcntl_exec, openlog, posix_getpwuid, posix_kill, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_open, proc_terminate, syslog, curl_exec, curl_multi_exec, php_uname, phpinfo

3)在虚拟主机部分中使用以下行:

php_admin_value suhosin.executor.func.blacklist ".." 

因此,您可以重新定义该特定虚拟主机的黑名单功能。

在您的情况下,除shell_exec以外的所有功能。

这将是php_admin_value suhosin.executor.func.blacklist "passthru, shell_exec, system, proc_open, popen, apache_child_terminate, apache_setenv, define_syslog_variables, pcntl_exec, openlog, posix_getpwuid, posix_kill, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_open, proc_terminate, syslog, curl_exec, curl_multi_exec, php_uname, phpinfo"

Reference