2016-10-13 53 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命令並且沒有創建文件夾。在此先感謝 –