【问题标题】:Passing user privileges from PHP/Apache to a Perl script将用户权限从 PHP/Apache 传递给 Perl 脚本
【发布时间】: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 来实现这一点。

标签: php perl apache unix


【解决方案1】:

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

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

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

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

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

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

(我不明白通过 crontab 调用它是如何提供权限分离的)。

【讨论】:

  • 我能够使用经过身份验证的用户凭据通过 SSH 连接到本地主机。我使用了 Expect 库 - php.net/manual/en/book.expect.php。并将命令作为“ssh -l localhost ”运行。可能有一种更有效的方法,但这就像一种魅力。谢谢大家!
  • 哇。这真的是在房子周围。使用 ssh PHP 扩展不是更简单吗? (我或许应该提到,(2)是最有效的方法,然后是 1、3、4。
猜你喜欢
  • 2013-09-01
  • 1970-01-01
  • 2012-10-15
  • 1970-01-01
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
相关资源
最近更新 更多