2011-05-08 47 views
3

我需要改变一个PHP脚本的用户在运行时。我看过posix_setuid,但它看起来不安全,需要root私有权限。最好是用用户密码(如posix_setuid($username, $password))更改脚本的用户标识,并避免以root用户身份运行脚本。更改用户PHP

我打开其他方法,和脚本并不一定需要PHP。但是,它将从apache中调用。

一个好的anology的情况是苏的cPanel如何对用户在其上的文件管理器当前登录。

我需要,因为我创建一个文件管理器为多用户设置更改用户。目前,我设置了文件管理器,以便Apache以root用户身份为我的PHP文件管理器提供服务。但是,这是不合理的,因为在代码中存在安全错误的情况下,一个用户可以编辑整个服务器上的文件。

我正在寻找一种方式来SU脚本登录的用户,这样的安全漏洞的情况下,用户只限于自己的文件。

+2

为什么你需要在运行时改变用户?也许问题可以用另一种方式解决? – Crozin 2011-05-08 16:10:43

+0

我很乐意以另一种方式解决问题。如果您认为自己有其他选择,那么请随时继续发布。 – xaav 2011-05-08 16:21:09

+0

暗示的替代将取决于你的感受,你需要改变的用户,但你不能在你的问题解释了这个 – 2011-05-08 16:27:42

回答

6

我需要做的这一段时间以前。我基本上创建了一个bash脚本,它访问只有root可以访问的资源。下面是我所做的:

使用visudo命令更改/etc/sudoers

## Allow root to run any commands anywhere 
root ALL=(ALL)  ALL 
apache ALL= NOPASSWD: /sbin/myscript.sh 

我已经添加允许apache用户无需输入密码运行/sbin/myscript.sh用sudo命令行。

之后,你可以把你的PHP文件如下得到的输出:

$output = shell_exec("sudo /sbin/myscript.sh"); 
+0

这听起来像是一个可能的解决方案。我会进一步调查,并将其标记为正确的答案,如果它产生理想的结果。 – xaav 2011-05-08 16:41:59

+0

仅供参考我在我的服务器上使用CentOS 5.5,它工作正常。 – DarthJDG 2011-05-08 16:45:07

+0

好的,这看起来不错。我将其标记为正确的答案。 – xaav 2011-05-08 16:47:49

1

This recent question讨论使用PHP这样做两种选择:

  • PHP + FastCGI的与suexec的
  • suPHP
+0

此答案的问题是,我需要根据登录的用户更改用户。如果以这种方式执行操作,我只能对一个用户进行硬编码。 – xaav 2011-05-08 16:42:54

+0

**以用户身份运行**是指系统上整个进程的权限。为了在具有不同权限的PHP应用程序中为每个经过验证的用户实现一些业务功能,您不需要更改正在运行的进程的权限。如果你可以让你的需求(原始问题)更清楚你想要完成什么(例如“在我的应用程序中,我只希望用户能够管理属于他们的小部件”),我们可以帮助你更好地。 – 2011-05-08 16:48:50