首頁 >後端開發 >php教程 >php關於shell腳本權限問題分析

php關於shell腳本權限問題分析

小云云
小云云原創
2018-03-01 11:40:231613瀏覽

1. sudo介紹

sudo允許root分配給一般使用者一些不具備的權利,讓一般使用者也可以有root使用者的相關權限(比如說sudo可以指派給某一使用者某些特定的命令執行權限)。
 其中sudo一個重要的文件就是/etc/sudoers,哪些使用者有什麼樣的指令可以執行都是靠這個檔案的,主要只有裡面分配了的使用者才能使用sudo。

sudo -l 列出该用户能执行的命令  
sudo -u user 以指定用户来执行命令  
sudo -k 清楚入场券上的时间,下次使用sudo还要输入密码  
sudo -b 在后台执行命令

在終端機裡面輸入 vim 即可開啟/etc/sudoers檔案。
找到如圖所示的地方:
php關於shell腳本權限問題分析

圖中紅色方框的內容是我自己後來加的,其中www是php運行的用戶,不同的環境下默認名字會不一樣,我在centos 下的為www。

查看php運行的使用者可以透過下面這個php網頁取得。

<?php    
    echo shell_exec("id -a");  
?>

看圖中每行都有三個ALL,第一個ALL代表網路中的主機,第二個括號裡面的ALL代表目標用戶,表示以誰的身分去執行指令,最後一個ALL代表的是可執行的命令名稱(可以指定你想要該使用者能夠執行的命令)。

其中NOPASSWD表示不用輸入密碼。 (為了方便嘛,不然我透過瀏覽器訪問難道程式裡面多了道填寫密碼,還要等回饋,真是麻煩,這樣就省事多了)

若是Ubuntu則不用再修改了,若是fedora等等還需要進行一些修改,

Defaults    env_reset打開就可以了(即前面的#號去掉);

  1. ##檢查php.ini設定檔中是否開啟了安全模式

  2. safe_mode =  off 这样就可以了
php執行linux腳本的函式有多個,shell_exec()、system()等,這裡也不多做介紹了,用就行了,我採用system ()函數。

route.php

<?php   $ip=(string)$_POST["ip"];  
system("su ./route.sh $ip",$status);  
if($status == &#39;true&#39;)  
{  
    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檔案。

找到如圖所示的地方:

php關於shell腳本權限問題分析

圖中紅色方框的內容是我自己後來加的,其中www是php運行的用戶,不同的環境下默認名字會不一樣,我在centos 下的為www。

查看php運行的使用者可以透過下面這個php網頁取得。

<?php    
    echo shell_exec("id -a");  
?>
看圖中每行都有三個ALL,第一個ALL代表網路中的主機,第二個括號裡面的ALL代表目標用戶,表示以誰的身分去執行指令,最後一個ALL代表的是可執行的命令名稱(可以指定你想要該使用者能夠執行的命令)。

其中NOPASSWD表示不用輸入密碼。 (為了方便嘛,不然我透過瀏覽器訪問難道程式裡面多了道填寫密碼,還要等回饋,真是麻煩,這樣就省事多了)

若是Ubuntu則不用再修改了,若是fedora等等還需要進行一些修改,

Defaults    env_reset打開就可以了(即前面的#號去掉);

    ##檢查php.ini設定檔中是否開啟了安全模式
  1. safe_mode =  off 这样就可以了
  2. php執行linux腳本的函式有多個,shell_exec()、system()等,這裡也不多做介紹了,用就行了,我採用system ()函數。
route.php

<?php   $ip=(string)$_POST["ip"];  
system("su ./route.sh $ip",$status);  
if($status == &#39;true&#39;)  
{  
    echo "设置成功";  
}  
else  {  
    echo "设置失败";  
}  
?>

前面設定妥當後,執行後,瀏覽器會顯示設定成功,說明腳本成功執行。

    php執行shell實際上是用的Apache或Nginx的使用者去執行的,php本身不會建立使用者。
  1. 相關推薦:

PHP如何解決執行shell腳本不產生core檔案

shell腳本一鍵安裝php7的實例

shell腳本命令範例

以上是php關於shell腳本權限問題分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn