2012-06-06 33 views
12

bash腳本如何從PHP下root用戶(所有權限),而不是用戶運行bash腳本 - PHP的默認用戶?如何從PHP運行在root用戶

這就是我的輸出須藤visudo命令後:

Defaults  env_keep += "LINES COLUMNS" 
Defaults  env_keep += "LSCOLORS" 
Defaults  env_keep += "SSH_AUTH_SOCK" 
Defaults  env_keep += "TZ" 
Defaults  env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" 
Defaults  env_keep += "EDITOR VISUAL" 
Defaults  env_keep += "HOME MAIL" 

#User privilege specification 
root ALL=(ALL) ALL 
%admin ALL=(ALL) ALL 


# Uncomment to allow people in group wheel to run all commands 
# %wheel  ALL=(ALL) ALL 

# Same thing without a password 
# %wheel  ALL=(ALL) NOPASSWD: ALL 

# Samples 
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom 
# %users localhost=/sbin/shutdown -h now 
+3

這聽起來很危險,所以提出了一個明顯的問題:你爲什麼要這麼做?也許這是一個更好的整體解決方案。 –

回答

27

您可以使用sudo:

exec("sudo /your/script"); 

您應該允許無密碼提示執行你的腳本。在控制檯運行sudo visudo及以下字符串添加到末尾:

nobody ALL = NOPASSWD: /your/script 

必須正確設置文件模式,以確保沒有人可以修改此腳本,並把危險的內容進去(根控制檯):

chown root:root /your/script 
chmod 755 /your/script 
+0

我應該在哪裏添加它?我在'sudo visudo'之後發佈輸出 – Oleg

+0

+1好答案。 –

+0

只需將新行寫入文件的末尾。 –

0

在Linux下,您通常使用sudo來執行此操作。儘量做到儘可能具體,所以不要給腳本太多的權限。

有關如何使用sudo例子:http://aplawrence.com/Basics/sudo.html

+0

問題是,當我在終端上運行它的工作很好,但是當我從php運行這個bash腳本時,它並沒有執行(其他簡單的bash與'cp','mv'命令工作),我認爲它的90%權限。 – Oleg

0

我想補充一個特定的規則,讓這個腳本由nobody用戶調用,使用sudo

+0

我該怎麼做?我嘗試了很多東西,但它不起作用 – Oleg

+0

請參閱Riateche的答案 - 您需要將「nobody ALL = NOPASSWD:/ your/script」行添加到「visudo」文件(sudoers配置文件)。當然,用腳本的路徑替換'/ your/script'。 –

+0

我該如何編輯這個文件?我用'sudo visudo',但它只顯示輸出。 – Oleg

0

我最近發佈了一個項目,該項目允許PHP獲取真實的Bash shell並與之交互(如果需要,用戶名爲apache/www-data或root)。在這裏獲得:https://github.com/merlinthemagic/MTS

下載您只需使用下面的代碼後:

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 
$return1 = $shell->exeCmd('/full/path/to/script.sh'); 
相關問題