我有一个非常小的托管网站,托管一种聊天软件。我为每个用户提供了一个 /home/ 受限 ftp,但他们有自己的 www 文件夹,可以上传内容。
我的一个用户上传了这个php文件:http://pastebin.com/YAJW8weh- 似乎能够保存 php 文件并允许他下载它们。
利用这个,我认为他能够访问我的一些文件,并且我的一个 php 文件中有我的 MySQL 密码,然后他获得了包含我所有客户密码的数据库的访问权限。
我怎样才能阻止这种情况再次发生?当为用户提供他们自己的 /home/ 目录时,我应该采取哪些预防措施。
答案1
您想禁用主文件夹的 php。
当使用 PHP 作为 Apache 模块(Ubuntu 10.04 上的默认模块)时,将以下内容添加到 Apache 配置中
<Directory /home>
php_admin_value engine Off
</Directory>
为了安全起见,你也许应该使用Options -ExecCGI
和AllowOverride None
。请参阅官方 Apache安全提示。如果您的网络服务器启用了其他类型的脚本(如mod_perl
),请确保也为主文件夹禁用它们。
答案2
您必须保护您的网站,Linux / Unix 在这方面做得很好,为您网站根目录中的群组和其他人设置最小权限:
chmod 0711 /var/virtualhosts/example.com
# ls -ald /var/virtualhosts/example.com
drwx--x--x 4 example example 4096 Oct 9 08:43 example.com
使用以下方法限制 PHP 中的文件访问open_basedir:
# virtual host config
php_admin_value open_basedir "/var/virtualhosts/example.com:/tmp"
# directory config
<Directory /home/bad_user>
php_admin_value open_basedir "/home/bad_user:/tmp"
</Directory>
禁用 PHP 的危险功能:
# /etc/php.ini
disable_functions = "dl,shell_exec,passthru,exec,
popen,system,proc_terminate,proc_close,stream_socket_server"
使用su — 用户测试他们在您的网站上拥有的权限。
su - apache -s /bin/bash
cd /var/virtualhosts/example.com
ls -al
cat /var/virtualhosts/example.com/db.config.php
答案3
suPHP 确实是您最好的选择。您可以设置每个用户以自己的用户身份运行脚本,然后 chmod 他们的目录,以便其他用户无法读取它们。请执行不是依赖 open_basedir,它不会 100% 起作用。
由于您允许上传,因此您总是需要担心有人上传不该上传的内容。我建议运行 Linux Malware Detect 之类的程序。当 shell 和 DoS 脚本之类的内容上传到您的服务器时,它会向您发出警报。