【发布时间】:2013-08-16 00:21:29
【问题描述】:
我是一个相当新的 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 脚本,并使用它来访问文件。我想知道是否有更好的方法来做到这一点。
有什么建议吗?提前致谢!
【问题讨论】:
-
出于安全原因您不能这样做,但您可以与 perl 守护进程对话或使用 crontab,它可以作为所需用户运行 perl 脚本
-
不确定我是否理解这个建议。如果我创建一个 Perl 守护进程或 crontab,我可以将 PHP 身份验证用户的权限传递给它吗?
-
是的,您可以这样做。选择特定的方法取决于您的 perl 脚本的作用。
-
Perl 脚本处理 PHP 提供的数据。它在受保护的文件系统下的适当文件中查找数据以帮助进行此处理。然后将结果返回给 PHP,并显示在网页上。不确定如何使用守护程序/crontab 来实现这一点。