2013-03-07 142 views
0

我有一套linux系统命令需要首先登录到shell。 我该怎么做,在PHP?php系统命令linux

例如:

$output2 = shell_exec('ls -lrt /opt/test 2>&1'); 

由于/选择/测试可以由用户/所有者XXX被访问而已,我需要与该用户名登录。 runuser命令可能会有帮助,但我需要指示。

其实我需要通过系统命令运行一个应用程序,但在该用户必须先登录才能访问该应用程序。

+0

尝试使用http://phpshell.sourceforge.net/ – user1929959 2013-03-07 14:38:18

回答

1

一种方法是创建一个shell脚本,其中包含所有需要以特权登录用户身份运行的命令,然后使用sudo运行该shell脚本。

您将需要更改sudoers文件,以便脚本的运行可以由运行该脚本的用户运行。

如:

Cmnd_Alias HTTP_COMMANDS = /usr/local/my_ls_script 
XXXX ALL=(ALL) NOPASSWD: HTTP_COMMANDS 

这样做虽然时一定要小心!确保sudoers行只能运行你指定的命令。

另外,请确保您至少切换到用户一次,然后运行sudo,否则web服务器将无法为用户运行sudo。

此外,您可能需要在sudoers文件中禁用NO_TTY。

你将你的命令更改为:

$output2 = shell_exec('sudo -u XXXX /usr/local/my_ls_script 2>&1'); 
+0

谢谢you.This是一个不错的主意。 但我坚持另一种方法。 我正在考虑使用SSH2模块,让用户通过SSh2登录。 通过SSH2执行系统命令,然后解析输出。 你认为这是一个更好的方法吗? 通过这种方式,用户可以访问他所允许的内容。 – django 2013-03-07 11:15:04

+0

该方法更好。但请记住,这样,您仍然需要用户密码或私钥。 – timgws 2013-03-07 23:51:58

+0

并注意您将需要存储该密码或ssh密钥,以便您能够确保其安全。你并不是真的希望人们能够为你的Unix账户下载公钥和/或密码! – timgws 2014-02-09 07:41:09