2016-10-13 55 views
1

关于此主题有许多问题,但是我的情况很奇怪。PHP - exec sudo命令不会返回任何内容

我想在php中打印出exec("sudo -u root whoami")。但它什么都没有返回。

我通过sudo visudo添加了%www-data ALL=(ALL:ALL) ALL,但没发生什么事情,没有错误,只是没有打印出任何东西。

有什么建议吗?

在此先感谢

+4

我要把它放在那里,这是一个可怕的想法。您的网络服务器/ PHP不应该拥有对整个系统的root权限。 –

+0

除了您即将创建的可怕安全漏洞:您的sudoers条目并不意味着在更改的用户标识下实际执行命令时不需要密码。您无法以交互方式提供的密码。你想阅读sudoers文件提供的'NOPASSWD'选项,你想在文档中阅读这个选项。但再一次:出于安全原因,这是一个坏主意。 – arkascha

+1

此外,只需在现有的超级用户下使用PHP CLI进行测试,并且'echo exec(“sudo -u root whoami”)'可以正常工作,但需要输入密码。 –

回答

1

如何您的Web服务器会为sudo输入密码?

您的配置允许webserver-user在服务器上运行所有命令。但是那需要用户输入他们的密码。而网络服务器

  1. 不能做交互
  2. 甚至没有一个apassword

所以如果你想要做你试着做(给进程中运行PHP什么根访问机器是非常糟糕的主意),你应该将它添加到你的sudo-配置:

%www-data  ALL = NOPASSWD: /usr/bin/whoami 

这允许组www数据运行whoami作为根没有一个interctive密码提示

+0

我添加了'%www-data ALL =(ALL:ALL)ALL',我认为这包括您提到的内容?我知道这是一个坏主意,但它不起作用 –

+0

其实你所说的建议完美无缺。但有没有一种更安全的方法来做到这一点,还是我违背所有安全规则? –

+0

虽然它不需要密码,但实际上并没有创建任何东西。我尝试了一个简单的mkdir命令并且没有创建文件夹。在此先感谢 –