使用 php 脚本的 pure-ftpd 文件权限漏洞

使用 php 脚本的 pure-ftpd 文件权限漏洞

我已经使用 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 脚本在用户的实际帐户下执行 - 但当然它无法防止您所指的漏洞。

相关内容