将 www-data 添加到 /etc/sudoers 以作为不同用户运行 php-cgi 的安全隐患

将 www-data 添加到 /etc/sudoers 以作为不同用户运行 php-cgi 的安全隐患

我真正想要做的是允许“www-data”用户能够以其他用户身份启动 php-cgi。我只是想确保我完全理解安全隐患。

服务器应支持共享托管环境,其中各种(可能不受信任的)用户都可以通过 chroot FTP 访问服务器来存储其 HTML 和 PHP 文件。然后,由于 PHP 脚本可能是恶意的并读取/写入其他人的文件,因此我想确保每个用户的 PHP 脚本都以该用户的相同用户权限运行(而不是以 www-data 的身份运行)。

长话短说,我在我的/etc/sudoers文件中添加了以下行,并且我想让社区来运行它以进行健全性检查:

www-data ALL = (%www-data) NOPASSWD: /usr/bin/php-cgi

这行应该仅有的允许 www-data 运行如下命令(无需密码提示):

sudo -u some_user /usr/bin/php-cgi

... some_userwww-data 组中的用户在哪里。这会带来哪些安全隐患?

然后我应该可以像这样修改我的 Lighttpd 配置:

fastcgi.server += ( ".php" =>
    ((
        "bin-path" => "sudo -u some_user /usr/bin/php-cgi",
        "socket" => "/tmp/php.socket",
        "max-procs" => 1,
        "bin-environment" => (
            "PHP_FCGI_CHILDREN" => "4",
            "PHP_FCGI_MAX_REQUESTS" => "10000"
        ),
        "bin-copy-environment" => (
            "PATH", "SHELL", "USER"
        ),
        "broken-scriptfilename" => "enable"
    ))
)

...允许我为每个用户生成新的 FastCGI 服务器实例。

答案1

我建议使用php-fpm(使用一台服务器管理所有用户,但如果使用操作码缓存,通常不安全),或者使用运行spawn-fcgi

然后从 lighttpd 配置中删除生成选项 (bin-path、max-procs、bin*-environment)

答案2

Apache 有一个扩展,安全允许服务器在执行 CGI 进程之前更改用户。这称为SuEXEC

需要进行大量的检查、平衡和清理,否则包装器将无法执行或更改用户。这是因为有很多事情可能出错,进而危及系统的安全。我强烈建议不要做你正在做的事情。

我之前从未运行过 Lighttpd,只是因为经过适当的调整、配置、测试和基准测试,它可以表现得非常好。

然而,我发现这个:它似乎是 SuEXEC 的一个实现,但是适用于 Lighttpd。

以下是一些附加文件关于如何使用它。

祝你好运。

答案3

你似乎在重新发明轮子(却没有意识到有缺陷的轮子的危险)

SuPHP 可以解决您的问题,而且据我所知,它可以与 lighttpd 一起工作。

相关内容