linux中擷取root許可權 php執行shell

來源:互聯網
上載者:User


有的時候,通過php做很多系統操作的時候,並不如直接利用bash來的快。php-fpm預設是apache使用者,直接改成root賬戶,是啟動不了的。這樣的話,apache使用者無法執行root才能執行的命令。所以我們要先使php-fpm的啟動使用者,擁有執行shell的許可權,以及shell內部執行命令的許可權。

一,擷取root許可權

1,給具體進程指定無密碼訪問

# visudo       //添加以下內容,檔案最下面有例子,照著寫 
apache ALL=(ALL) NOPASSWD:/etc/init.d/srs 
調用的時候

$result = shell_exec("/usr/bin/sudo /etc/init.d/srs start"); 
2,批定使用者無需密碼,切換root帳號
# visudo 
apache ALL=(ALL) NOPASSWD: ALL 
直接可以用sudo su切換成root使用者,許可權遠大於上面的方法,許可權越大,安全性越低。
3,針對某個shell指令碼,開放許可權
如果說第一方法,滿足不了要求,第二方法許可權過大,不安全,那麼第三種方法可以試試

# visudo 
apache ALL=(ALL) NOPASSWD: UPLOADVIDEO 
Cmnd_Alias UPLOADVIDEO = /var/www/srs/upload.sh 
調用方法根一般調用方法一樣。
還有一點很重要就是visudo時注釋掉,#Default requiretty,因為php調用shell時,用不到終端
二,php調用shell怎麼調試
不好調試,無log可查,只能看輸出,nginx,php的log沒有調用shell的相關資訊,我有一些以經驗,屢試不爽
1,檢查php啟動使用者權限,檔案本身能被執行,php啟動使用者也要能執行該檔案的許可權。以前遇到過一個情況是,php執行一個shell怎麼都執行不了,後來才發麵,沒有chmod +x操作。
2,php是可以捕擷取shell的輸出的,但是要知道,不是所有命令執行都是有輸出的,也就是說,成功,失敗,或者沒執行沒辦法區別,搞不清。這個時候,我們可以shell指令碼中輸出,用echo就可以。這樣我們可以知道,執行到什麼地方,可以知道,在什麼地方出錯了。
3,直接通過su切換到php的啟動使用者,然後在linux命令列下執行,有人問了,nologin使用者無法su,那就直接useradd一個,改一下php的啟動使用者。如果用php的啟動使用者測試成功,通過php指令碼去執行,基本也是能通過的。
4,在這裡要注意一點,路徑問題,相對路徑和絕對路徑,盡量用絕對路徑。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.