0

我是一个相当新的 PHP 编码器。我有一个运行 PHP 4.3.9 的 Apache 服务器,我正在尝试为我们的内部用户开发一个小工具。该工具的结构如下: PHP 代码 --- 调用 ---> Perl 脚本 --- 访问 ---> 受保护文件系统上的文件

当您在浏览器中打开 .php 页面时,身份验证是自动的。我相信它是由 LDAP 在后台处理的。$_SERVER["PHP_AUTH_USER"] & $_SERVER["PHP_AUTH_PW"] 会自动且正确地填充。

如果我在我的 PHP 代码中运行 whoami,那么我会将用户视为“apache”。因此 Perl 脚本是在上下文中调用的,并且具有用户 'apache' 的权限。这些权限用于访问受保护文件系统上的文件。'apache' 没有访问此文件所需的权限,并且 Perl 脚本失败。如果我通过 SSH 连接到该服务器并直接在 shell 上运行 Perl 脚本,它可以正常工作,因为它在我的用户权限下运行。

我想要做的是使用已经过身份验证的用户的权限运行 Perl 脚本。我可能会想出一种方法,将 $_SERVER["PHP_AUTH_USER"] & $_SERVER["PHP_AUTH_PW"] 作为参数传递给 Perl 脚本,并使用它来访问文件。我想知道是否有更好的方法来做到这一点。

有什么建议吗?提前致谢!

4

1 回答 1

0

有很多方法可以做到这一点 - 诀窍是安全地做到这一点。

最终,Perl 脚本必须使用与 web 服务器不同的 uid 运行。您还没有说更改 perl 脚本的代码是否可行。可能的解决方案是:

1) 修改 Perl 脚本以作为守护进程运行,允许从您的 PHP 代码调用套接字连接 - 因为您可能希望以多个用户身份运行它,所以它需要以 root 身份运行并知道如何验证发送给它的凭据.

2) 在系统上配置 sudo 以允许 webserver uid 以不同的用户身份运行 Perl 脚本并提示进行身份验证

3) 配置 [x]inetd 以在特定端口上侦听并在 PHP 代码连接时以所需的 uid 运行脚本 - 这需要以 root 身份启动,验证凭据和 setuid() 但不需要以一个守护进程。

4) 使用 PHP 中的 ssh 扩展以所需用户的身份创建到 localhost 的 ssh 连接并运行脚本

(我看不到通过 crontab 调用它是如何提供特权分离的)。

于 2013-08-14T08:23:41.560 回答