PHP使用命令函數(shù)執(zhí)行shell腳本
- CentOS 7.6 64位
- 寶塔Linux面板
運(yùn)行環(huán)境
- Nginx 1.17.1
- PHP-7.1
步驟
01 解除禁用的命令函數(shù)
出于安全考慮,命令函數(shù)是被禁用,我安裝寶塔是被禁用的
#修改php.ini文件
disable_functions = #被禁用函數(shù)都在這一行 把需要解除的函數(shù)刪除就行了
system exec passthru shell_exec #PHP常用命令函數(shù)
02 PHP調(diào)用Linux命令權(quán)限不足的解決方法
關(guān)于這個(gè)問題我踩的太多坑了,這也是我要寫這篇文章的原因,我本人記性不好,所以記錄一下
- 01 查看啟動(dòng)你PHP的進(jìn)程的用戶是誰
ps -ef | grep php #通過終端命令行執(zhí)行查詢
echo exec('whoami'); #通過PHP命令函數(shù)查詢 總來說默認(rèn)沒有任何權(quán)限
- 02 添加一個(gè)用戶和組 終端命令↓↓↓
/usr/sbin/groupadd wroot # wroot 用戶可以自定義的
/usr/sbin/useradd -g wroot -s /bin/bash wroot
vim /etc/passwd #查看你剛剛添加的用戶 是否添加成功

wroot 是剛剛添加的
- 03 修改PHP啟動(dòng)用戶為您剛添加的用戶
php-fpm.conf 修改這個(gè)配置文件
編輯成 user = wroot; group = wroot; (wroot為您剛才添加的用戶)
service php-fpm restart #命令重啟php-fpm
ps -ef | grep php #命令查看PHP啟動(dòng)進(jìn)程的用戶、是否已經(jīng)變了
- 04 添加剛才的用戶wroot到sudoers里面
visudo #命令修改 /etc/sudoers的內(nèi)容
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
wroot ALL=(ALL) ALL //新添加這一行
%wroot ALL=(ALL) NOPASSWD: ALL
#NOPASSWD為設(shè)置用戶組下面的用戶使用sudo不需要輸入密碼
以上操作完成,但是我發(fā)現(xiàn)依然不能解決PHP命令shell腳本問題
- 05 關(guān)于linux 用vi命令使用vi編輯(外話)
s #vi界面出現(xiàn) INSERT后,開始進(jìn)行編輯操作 編輯完畢后,按ESC鍵,跳到命令模式
:w #保存,不退出vi
:w! #強(qiáng)制保存,不退出vi
:w file #將修改另外保存到file中,但不退出vi
:wq 或 :x #保存,并退出vi
:wq! #強(qiáng)制保存,并退出vi
:q #不保存,并退出vi
:q! #不保存,并強(qiáng)制退出vi
:e! #放棄所有修改,從上次保存文件開始再編輯
03 但第二部操作還是無法解決PHP命令shell腳本問題
還是權(quán)限問題,最后添加www-data ALL=(ALL) NOPASSWD: ALL解決了
www-data ALL=(ALL) NOPASSWD: ALL #編輯visudo

編輯visudo添加www-data
編寫test.sh腳本,簡單的一個(gè)shell腳本 創(chuàng)建一個(gè)文件夾
#! /bin/sh
mkdir /www/a #注意.sh文件需要給執(zhí)行權(quán)限
#PHP
system('sudo /usr/bin/test.sh') #注意絕對路徑
system('sudo /www/wwwroot/wert/prt.sh') #例如路徑
內(nèi)容部分來源網(wǎng)絡(luò),我只是執(zhí)行操作整理