2

当我使用以下 php 脚本时:

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

在我的本地主机上,结果是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。我怎样才能让它按我的意愿工作?


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

4

2 回答 2

1

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

于 2013-08-13T19:19:42.310 回答
0

一个直接的答案是您可能需要通过 shell 使用管道等

  • shell_exec..

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

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

  • pcntl_fork
  • posix_seteuid
  • posix_setegid
  • 执行
  • 可选的 proc_nice

sudo从技术上讲,调用是在root权限下运行的。所以这是一样的,以更明显的方式..

我相信您不需要我告诉您将这些密码放入您的源代码是一个坏主意。

于 2013-08-13T21:17:11.267 回答