我已经使用 pure-ftpd 创建了 ftp-server,如下所示这很棒的教程。除了文件访问之外,一切都很好。这就是问题所在。
Joe 的主文件夹是 /var/www/joe,Steve 的主文件夹是 /var/www/steve。当他们登录 ftp 服务器时,他们进入的是自己的主文件夹,无法访问其他用户的文件夹。但是,当 Joe 用 PHP 编写脚本来访问 Steve 的文件时,他可以访问它。例如,这个脚本对 Joe 来说运行良好:
$filename = "/var/www/steve/somefile";
$handle = fopen($filename, "r");
$contents = fread($handle, filesize($filename));
echo $contents;
是ftp服务器的问题还是apache的virtual-host文件的问题?
请问我该如何解决这个问题?这个问题非常紧急,因为它涉及到用户的安全问题。
提前谢谢您!
答案1
问题在于 HTTP 服务器,因为(默认情况下)脚本以用户身份运行www-data
。
继续类比,Steve 可能将文件权限/var/www/steve/somefile
设置为 755 - 即向任何用户授予读取和执行权限。由于 Apache 以用户身份执行 PHP 脚本www-data
,因此 PHP 脚本在访问文件时不会遇到任何问题。
Steve 可以通过运行以下命令来阻止其他人查看他的文件:
chmod 700 /var/www/steve/somefile
这将阻止其他用户(当然,除了root
)访问该文件。请注意,同样的问题也适用于目录,因此,其他用户可能能够看到该文件存在(尽管他们无法读取其内容)。
一些 FTP 客户端提供了更改文件权限的方法,因此我建议您查阅 FTP 客户端的手册。
诸如此类的工具Apache suEXEC将导致 PHP 脚本在用户的实际帐户下执行 - 但当然它无法防止您所指的漏洞。