在PHP中使用exec()作为特定的系统用户

时间:2013-08-13 19:12:58

标签: php bash

当我使用以下php脚本时:

<?php
    echo 'I am '.exec('whoami').' user';
?>

在我的localhost上,结果是I am nobody user,这正是我所期待的。

但是当我使用时:

<?php
    echo 'I am '.exec('echo <PASSWD> | sudo -S -u <USER> whoami').' user';
?>

其中<PASSWD>是我的密码,<USER>是我的用户名,结果是I am user,我希望是I am <USER> user。我怎样才能让它按照我的意愿工作?


作为一个注释,当我在php解释器(php -a)中使用echo 'I am '.exec('echo <PASSWD> | sudo -S -u <USER> whoami').' user';时,一切都很好。

2 个答案:

答案 0 :(得分:1)

正在使用的用户是在服务器上运行php / httpd进程的用户。根据您的服务器设置,这可能是Apache,root或FastCGI设置,它可以是任何用户或无用户。这是一个谬论,因为必须始终有用户。通常,共享托管服务器将试图规避允许用户以sudo用户身份执行功能。这可能正是您所经历的。

答案 1 :(得分:0)

直接的答案是你可能需要通过shell来使用管道等

  • 了shell_exec ..

对于大型应用程序,创建所有这些小型流程非常昂贵。

IMO,更好的解决方案是使用这些::

  • pcntl_fork
  • posix_seteuid
  • posix_setegid
  • EXEC
  • 可选proc_nice

sudo的调用在技术上使用 root 权限运行。所以这是相同的,以更加明显的方式..

我相信你不需要我告诉你把这些密码放在你的来源是个坏主意。