我是一个相当新的PHP编码器。我有一个运行PHP 4.3.9的Apache服务器,我试图为我们的内部用户提供一个小工具。该工具的结构如下: PHP代码---调用---> Perl脚本---访问--->受保护文件系统上的文件
在浏览器中打开.php页面时,身份验证是自动进行的。我相信,它在后台得到了照顾。 $ _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脚本作为参数并使用它来访问该文件。我想知道是否有更好的方法来做到这一点。
有什么建议吗?提前谢谢!
答案 0 :(得分: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调用它来提供权限分离)。