由於以前在ecs中每次都是以root使用者身份登入和進行操作,所以基本都沒有用到sudo,但是最近專案需要要進行這麼個事:通過瀏覽器訪問php網頁,php網頁裡會呼叫執行linux下的乙個指令碼。本來這個事很簡單的,但是我在實際操作的時候,發現每次通過瀏覽器訪問時,指令碼都沒有被執行,而我在終端裡面通過命令列執行php網頁確又是沒有任何問題的,當時就覺得很差異,後來仔細想了想,通過瀏覽器訪問和直接在終端裡執行其發起者不一樣,想想應該是使用者許可權的問題,於是就上網查了查,結果就有了sudo這麼回事。
1. sudo介紹
sudo允許root分配給普通使用者一些不具備的權利,讓普通使用者也可以具有root使用者的相關許可權(比如說sudo可以分配給某一使用者某些特定的命令執行許可權)。
其中sudo乙個重要的檔案就是/etc/sudoers,哪些使用者具有什麼樣的命令可以執行都是靠這個檔案的,主要只有裡面分配了的使用者才能使用sudo。
sudo -l 列出該使用者能執行的命令
sudo -u user 以指定使用者來執行命令
sudo -k 清楚入場券上的時間,下次使用sudo還要輸入密碼
sudo -b 在後台執行命令
在終端裡面輸入 vim 即可開啟/etc/sudoers檔案。
找到如圖所示的地方:
圖中紅色方框的內容是我自己後來加的,其中www是php執行的使用者,不同的環境下預設名字會不一樣,我在 centos 下的為www。
檢視php執行的使用者可以通過下面這個php網頁獲取。
<?php
echo shell_exec("id -a");
?>
看圖中每行都有三個all,第乙個all代表網路中的主機,第二個括號裡面的all代表目標使用者,表示以誰的身份去執行命令,最後乙個all代表的是可執行的命令名(可以指定你想要該使用者能夠執行的命令)。
其中nopasswd表示不用輸入密碼。(為了方便嘛,不然我通過瀏覽器訪問難道程式裡面多了道填寫密碼,還要等反饋,真是麻煩,這樣就省事多了)
若是ubuntu則不用再修改了,若是fedora 等則還需要進行一些修改,
defaults env_reset開啟就可以了(即前面的#號去掉);
檢查php.ini配置檔案中是否開啟了安全模式
safe_mode = off 這樣就可以了
php執行linux指令碼的函式有多個,shell_exec()、system()等,這裡也不多做介紹了,用就行了,我採用system()函式。
route.php
<?php
$ip=(string)$_post["ip"];
system("su ./route.sh $ip",$status);
if($status == 'true')
else
?>
前面設定妥當後,執行後,瀏覽器會顯示設定成功,說明指令碼成功執行。
1.php執行shell實際是用的apache或nginx的使用者去執行的,php本身不建立使用者。
2.由**
php利用root許可權執行shell指令碼 二
今天晚上 19 30分,這個困擾了我好久的問題終於解決,其中的原理也終於弄清楚了,總之是利用sudo來賦予apache的使用者root的執行許可權,下面記錄一下 利用php利用root許可權執行shell指令碼必須進行以下幾個步驟 所有步驟都是我親自實驗,若有不妥可指出,謝謝!1.確定一下你的apa...
php 利用root 許可權執行shell指令碼
也可以指定某個shell檔案不需要密碼 www data all all nopasswd var www html filesystem build.sh 1 新增使用者 adduser admin 新增使用者到root使用者組 adduser admin root 2 授予admin的sudo ...
php執行shell指令碼
原文 php作為一門伺服器端指令碼語言,也是可以呼叫系統命令的,這其中就包括了執行shell指令碼 編寫test.sh指令碼如下 bin sh mkdir www a 很簡單的乙個shell指令碼 建立乙個資料夾 php指令碼如下 system usr bin test.sh 在執行前 首先需要驗證...