允许PHP脚本ssh使用sudo

问题描述:

我需要在我的本地Web服务器上允许PHP脚本,以SSH连接到另一台计算机,以便在某些文件上执行指定的任务。我的httpd以低权限运行为_www,因此设置直接无密码SSH很困难,不要说不明智。允许PHP脚本ssh使用sudo

现在我做的方法是让一个最小的PHP脚本,sudo-exec的(就像我)一个shell脚本在文档根之外。 shell脚本依次调用(和我一样)执行SSH实际工作的PHP代码,并打印它的输出。这是代码。

read_remote_files.php(我是从我的浏览器调用脚本):

exec('sudo -u me -n /home/me/run_php.sh /path/to/my_prog.php', $results); 
print $results; 

/home/me/run_php.sh(运行作为我,称不管它给):

php $1 2>&1 

sudoers

_www ALL = (me) NOPASSWD: /home/me/run_php.sh 

这一切都有效,因为my_prog.php被称为我并且可以和我一样SSH。看起来它不是太不安全,因为run_php.sh不能直接从浏览器(文档根外)调用。我遇到的问题是my_prog.php未被称为HTTP程序,因此无法访问HTTP环境变量(DOCUMENT_ROOT等)。

两个问题:

  1. 上午我做这个太复杂了?
  2. 是否有一个简单的方法让我的最终脚本获取HTTP变量?

谢谢! Andy

+0

如果你的服务器配置从不/很少改变,那么就硬编码所需的值到您的远程脚本,否则你会试图在脚本中重新创建一个Apache运行时环境。 – 2012-01-12 21:44:03

+1

使用php和ssh我这种方式非常不正统,请问你为什么试图以这种方式提供文件?为什么不使用网络文件系统而不使用SSH或Web代理/防火墙而不使用PHP? – 2012-01-12 21:46:20

+0

大卫,是的,这绝对是非正统的!我有很多服务器运行不同的任务,我需要ssh的灵活性来检查运行的进程。我通过ssh(直接或通过Windows机器上的Cygwin)管理所有内容。我正在使用php为一些日常任务提供Web界面。 – 2012-01-12 22:02:24

“我需要在我的本地Web服务器上允许PHP脚本,以SSH连接到另一台计算机,以便在某些文件上执行指定的任务。”

我认为你是在你已经在往返于工作,而不是要求难度解决方案方面措辞这一点。当然你应该说的是“我想从机器A上的Apache下运行的PHP脚本调用机器B上的任务。”然后研究解决这个问题的方法 - 有许多方法可以从简单的“自己动手”的RPC通过HTTP(S)隧道传输到使用XMLRPC或SOA框架。

两个注意事项:

  • 做一个phpinfo()函数;在两台机器上,以检查哪些扩展可用,
  • 另外,请检查您的php.ini的设置,以确保您的服务提供商没有禁用,您希望使用任何功能(或做问答& d脚本echo 'disable_functions = ' . ini_get('disable_functions') . "\n"; ...)

如果您浏览这里和更广泛的互联网,你会发现许多例子。Here是,我使用了类似的目的。

+0

是的,我很担心让我选择的解决方案实施,我忽视重新检查问题。我会进一步阅读。谢谢! – 2012-01-13 02:05:54

许多系统使用经常检查文件,数据库记录或某种其他资源的存在的(特权)cron作业来做类似的工作,然后执行操作(如果有)。

这样做的一个巨大优势就是PHP脚本和特权脚本之间没有直接的交互。 PHP脚本将指令留在资源中,特权脚本将其提取。只要指令不会导致系统受到损害或损坏,它肯定比sudoing更安全。

缺点是你无法随时随地推送更改;你必须等到cron作业再次运行。但也许这是一个选择吗?

+0

谢谢Pekka,这是断开的又一步骤,比我已经采取了。 PS:我阅读并享受您的流行CSS文章。 – 2012-01-13 02:08:36