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') { echo "設置成功"; } else { echo "設置失敗"; } ?>
前面設置妥當后,執行后,瀏覽器會顯示設置成功,說明腳本成功執行。
1.php執行shell實際是用的Apache或Nginx的用戶去執行的,php本身不創建用戶。
2.由轉載
由于以前在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') { echo "設置成功"; } else { echo "設置失敗"; } ?>
前面設置妥當后,執行后,瀏覽器會顯示設置成功,說明腳本成功執行。
php執行shell實際是用的Apache或Nginx的用戶去執行的,php本身不創建用戶。
相關推薦:
PHP如何解決執行shell腳本不產生core文件
shell腳本一鍵安裝php7的實例
shell腳本命令示例
以上就是php關于shell腳本權限問題分析的詳細內容,更多請關注php中文網其它相關文章!