我在CentOS上運行Apache服務器,需要從PHP頁面運行一些bash腳本。運行不需要寫入或執行PHP文件許可的命令(例如shell_exec('ls/var/www/html/scripts /')),但是我在運行需要寫入或執行的命令時遇到問題允許。例如這個命令不執行任何操作:從PHP腳本運行bash腳本
<?php
$output = shell_exec('/var/www/html/scripts/test.sh');
echo $output;
?>
我做了apache用戶擁有者和授予必要的權限scripts目錄:
drwxr-xr-x. 2 apache apache 21 Jun 3 09:54 scripts
和test.sh文件可以看出,但沒有鎖。
-rwxr-xr-x. 1 apache apache 51 Jun 3 09:54 test.sh
我也嘗試在PHP文件中sudo命令,並將下面的行添加到Sudoers文件的末尾,但沒有任何更改。
apache ALL=NOPASSWD: /var/www/html/scripts/test.sh
而且我檢查PHP safe_mode設置是關閉並沒有在php.ini文件中沒有限制:
disable_functions =
你的幫助將高度讚賞。
注:
我編輯我的bash腳本,並添加須藤象下面這樣:
#!/bin/bash
echo "Hi from test.sh";
sudo touch /var/www/html/scripts/file.log;
現在,當我運行使用此命令將文件作爲apache用戶,它成功運行:
su -s /bin/sh apache -c "/var/www/html/scripts/test.sh"
但是通過php的網頁,它只會運行echo「Hi from test.sh」;線。當我檢查記錄,有上面運行的命令如下行:
su: pam_unix(su:session): session opened for user apache by root(uid=0)
sudo: apache : TTY=unknown ; PWD=/var/www/html ; USER=root ; COMMAND=/bin/touch fromweb.log
su: pam_unix(su:session): session closed for user apache
而且從PHP網頁中運行時生成的日誌:打開和關閉:
sudo: apache : TTY=unknown ; PWD=/var/www/html/scripts ; USER=root ; COMMAND=/bin/touch fromweb.log
缺少了pam_unix(會話SU)。
您會收到任何錯誤消息? – JazZ
請注意,Apache的默認用戶是'www-data'。 – JazZ
@JazZ沒有特別的錯誤消息,因爲錯誤報告是關閉的,但是當我從命令提示符運行bash文件時,會發生以下錯誤: su -s/bin/sh apache -c「scripts/test.sh」 Hi .sh touch:無法觸及'file.log':權限被拒絕 –