将用户权限从PHP/Apache传递给Perl脚本


Passing user privileges from PHP/Apache to a Perl script

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

当您在浏览器中打开.php页面时,身份验证是自动的。我相信,它是由LDAP在后台处理的$_服务器["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脚本作为参数,并使用它来访问文件。我想知道是否有更好的方法。

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

有很多方法可以做到这一点,关键是要安全地完成。

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

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

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

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

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

(我看不出通过crontab调用它是如何实现特权分离的)。