我目前正在设置托管服务,目前,我非常担心安全问题。这是我的情况:
我已经设置了多个 apache 的虚拟主机,出于明显的安全原因,我不想让用户通过 php 的系统功能四处移动来访问其他人的数据。
这就是我在每个虚拟主机中设置 open_basedir 的原因。尽管如此,我仍然担心一个主要的安全漏洞:exec 函数。
所以经过一些研究,我发现你可以在 php.ini 中使用 disable_functions 来禁用某些功能,就像他的名字告诉我们的那样。我已经找到了这个函数列表来禁用 who seams 非常完整:
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, openlog, 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, syslog, system, xmlrpc_entity_decode"
但是,我觉得为我的用户限制php 是不对的。所以,两个问题:
- 你认为对于大多数 CMS 和其他网络应用程序来说,这是一个夸张的情况吗?
- 如果是这样,是否有其他方法来隔离每个虚拟主机数据?
PS:我已经在寻找 suexec 和其他的,但我认为它们不适合因为我在我的服务器上有 100 到 200 个用户,我不想为每个用户创建和管理系统帐户。
在虚拟主机行业,尤其是在共享主机环境中,出于安全原因禁用某些 php 功能是很常见的。以下是最常见的被阻止的 php 函数:
此外,最好为每个网站单独管理用户,因为如果服务器出现任何问题,您可以轻松识别谁做错了。
为此,您可以使用 SuPHP: http ://www.techtrunch.com/installations/compile-apache-suphp-ubuntu http://www.inmotionhosting.com/support/website/general-server-setup/what-is- suphp
您还可以在 php.ini 中考虑以下值,以使您的服务器更安全:
allow_url_fopen
- 禁用通过 URL 打开文件的能力session.save_path
- 设置 php 存储其会话文件的路径open_basedir
- 设置允许 php 脚本打开文件的路径Exec 仅通过用户执行 php 来执行函数。而 apache 提供了一种以不同用户身份执行每个 vhost 的方法 ( https://askubuntu.com/a/899192/862510 ),因此您可以为每个 vhost 创建一个用户并控制他们各自的权限,包括文件夹权限。