在PHP中以root身份運(yùn)行外部命令[轉(zhuǎn)自linuxaid]
Jun 21, 2016 am 09:12 AMHunte 2001年4月15日
在PHP中運(yùn)行只有root用戶才可以運(yùn)行的外部程序,一直是個(gè)老問(wèn)題,用常規(guī)的辦法很難實(shí)現(xiàn)。這是因?yàn)橐话闱闆r下,PHP是作為APACHE的一個(gè)模塊的,也就是說(shuō),PHP是APACHE的一部分,而APACHE除了suEXEC機(jī)制外,是不能以不同的用戶ID來(lái)執(zhí)行命令的,但suEXEC機(jī)制只能CGI有效。
網(wǎng)上曾經(jīng)有一篇文章,說(shuō)用調(diào)用"su - -c COMMAND"可以實(shí)現(xiàn),但經(jīng)過(guò)多次試驗(yàn),發(fā)現(xiàn)不行,因?yàn)閟u命令必須在STDIN上輸入root的密碼。
怎么辦?用常規(guī)的方法難以奏效,只能再想其它的方法了。成功的關(guān)鍵在于能有一個(gè)可以切換用戶ID但又可以在命令上輸入密碼(或不用輸入密碼)的工具。有這樣的工具嗎?有,它就是super。
下面就具體說(shuō)說(shuō)如何來(lái)做?
要注意的是,安裝和配置super,都要以root身份來(lái)進(jìn)行。
第一步,切換到root下
第二步,安裝super
先到ftp://ftp.mdtsoft.com/pub/super下載super-3.14.0-1.i386.rpm。這是一個(gè)RPM文件,其它包括了兩個(gè)工具:setuid和super,以及它們的文檔和man手冊(cè)。用下面的命令將它安裝到系統(tǒng)中:
% rpm -Uvh super-3.14.0-1.i386.rpm
你還可以用這個(gè)命令來(lái)查看這個(gè)RPM中的文件:
% rpm -qpl super-3.14.0-1.i386.rpm
從結(jié)果可以看到,兩個(gè)工具都將被安裝到/bin目錄下。
第三步,配置super
super的配置文件是/etc/super.tab。這是一個(gè)文本文件,格式也比較復(fù)雜。不過(guò),我們這里只要很簡(jiǎn)單的加上幾行就可以了。至于詳細(xì)的說(shuō)明,可以通過(guò)man super.tab來(lái)查看。
假設(shè)運(yùn)行Apache的用戶是nobody,我們欲通過(guò)super來(lái)增加系統(tǒng)用戶(調(diào)用useradd命令),那么我們只要在super.tab文件中加入以下這行:
auser /sbin/useradd nobody,hunte
第一段是super能夠識(shí)別的命令的別名;第二段是該別名所對(duì)應(yīng)的系統(tǒng)命令的全路徑;第三段是可以運(yùn)行該命令的用戶列表,用逗號(hào)分隔。這里除了nobody外,還一個(gè)叫hunte的普通用戶,是用于下面的測(cè)試。當(dāng)然,你應(yīng)該用你系統(tǒng)中有的任意一個(gè)普通用戶。
至此,super的配置就算好了。
第四步,測(cè)試
以第三步中指定的非nobody用戶登錄,運(yùn)行:
% /bin/super auser testuser
如果前面的配置沒(méi)什么錯(cuò)誤的話,用戶testuser應(yīng)該是成功地創(chuàng)建了??梢杂茫?br>% cat /etc/passwd | grep testuser
命令來(lái)驗(yàn)證一下。
第五步,在PHP中調(diào)用該命令
下面是PHP代碼:
if ($username)
{
//應(yīng)該檢查新用戶是否已經(jīng)存在
echo '正在創(chuàng)建用戶...';
system(escapeshellcmd("/bin/super auser $username"));
}
?>
使用super,使得在PHP中以root身份運(yùn)行外部命令不再是難事。試試看吧。
測(cè)試環(huán)境:RedHat Linux 7.0 (Kernel 2.4.3) + Apache 1.3.9 + PHP 4.0.4pl1
chpasswd.cgi是一個(gè)修改linux用戶密碼的cgi程序,彌補(bǔ)更改密碼需要兩次輸入密碼的缺陷

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

PHP?? ?? ?? ??? ???? ?? ??? ? ???? ?? ??? ???? ?? ??? ???? ???? ????. 1. ?? ?? ??? ?? ??? URL ? ?? ??? ????. 2. UrlenCode? ???? ?? ??? ???????. 3. ? ???? ????? ?? ?? ??? ? ?? ??? ?????. 4. ???? ???? ?? ? ? ??? ??? ??? ??? ?????. 5. ??? ?? ??? ????? ?? ????? OG ??? ???? ?????. 6. XSS ??? ???? ?? ??? ??? ?????. ? ???? ??? ??? ???? ??? ?? ?? ??? ??? ???? ??? ?? ??? ?????.

AI? ??? ??? ?? ?? ? ?? ???? ????? ?? ??? ??????. 1. Baidu, Tencent API ?? ?? ?? NLP ?????? ?? ??? AI ?? ?? API? ??????. 2. PHP? ? ?? guzzle? ?? API? ???? ?? ??? ??????. 3. ?? ????? ?? ?? ??? ???? ???? ???? ??? ??? ? ????. 4. ?? ?? ? ?? ???? ?? PHP-L ? PHP_CODESNIFFER? ??????. 5. ???? ????? ???? ?? ?? ??? ?????? ??? ??????. AIAPI? ??? ? ???, ?? ??, ?? ? PHP ?? ??? ??? ???. ?? ???? PSR ??? ???, ??? ????? ????, ?? ??? ???, ????? ??? ????, X? ???????.

PhpisstillRelevantinmodernenterpriseenvironments.1. Modernphp (7.xand8.x)? ??? ??, ??? ??, jitcompilation ? modernsyntax, mateitsuilableforlarge-scalepplications

N 1 ?? ??? ??? ?? ???? ?????? ?????? ?? ?? ????. 2. ???? ???? ???? ?? ??? ???????? ??? ??? ?? ? ??????. 3. ??? 2 ? ?? ?? Redis ?? ??? ?? ??? ?? ?? ??? ????? ??????. 4. ??? ????? ????? ????? Clear ()? ???? ???? ?????? ??? ????? ?????. 5. ?????? ??? ????? ???? ???? ? ??? ??? ?? ?? ? SQL ?? ??????. 6. ?? ??? ???? ?? ?????? ?? ?? ??? ?????? ?? ?? ?? ??? ???? ??? ??????. ORM? ???? ????? ?? ??? ????? ?? ???? ??? ???? ?? SQL ????, ??, ?? ?? ? ??? ???? ???????.

??? PHP ???? ???? ????? RabbitMQ? ???? ??? ??? ???? 1. ????? ??? ??? ?? ??? ???? ?? ???? ???????. 2. ???? ???? ?? ???? ???, ???? ???, ?? ? ?? ACK? ?????. 3. ?? ? ?? ? ??, TTL ? ?? ?? ? ?? ?? ??? ??????. 4. Supervisord? ?? ??? ???? ??? ????? ???? ??? ??? ???? ?? ?? ?? ????? ???????. ??? ????? ???? ??? ????? ???? ??? ?????.

Subprocess.run ()? ???? ? ??? ???? ???? ??? ??????. ?? ??? ??? ?? ??? ?? ??? ???? ?? ????. 2. ? ??? ??? ??, shell = true? ??? ? ??? ?? ??? ??????. 3. ?? ????? ???? ??? ?? ??? ??????. 4. SET Check = ??? ?? ? ? ??? ??? ?? true; 5. ??? ?????? ??? ?? ???? ??? ?? ? ????. OS.System () ?? ? ?? ???? ?? ??? ???? ???? ?? ???? Subprocess.run ()? ?? ??? ???????. ?? ??? ????? ? ??? ???? ?? ??? ?????.

??? PHP ?? ???? ???? ???? ?? ??? ? Docker ??? ???? ?? ?? ????? ?????. 1. PHP : 8.3-fpm-alpine? ?? ???? ???? ?? ??? ??? ??? ??????. 2. ??? ?? php.ini? ?? ??? ??? ??????, ?? ??? ??, Opcache ? JIT? ????? ?? ? ??? ??????. 3. Nginx? ??? ???? ???? ??? ??? ?? ???? ???? PHP ??? PHP-FPM?? ???? ?????. 4. ??? ??? ???? ???? ?? ???? ???? ????? ????? ??? ?? ???? ??????. 5. CRON? ?? ?? ????? ?????? ??? ?? ??; 6. ?? ?? ??? ?? ??? ??? ??????

settings.json ??? ??? ?? ?? ?? ?? ?? ??? ??? VSCODE ??? ??? ???? ? ?????. 1. ??? ?? ?? : Windows? C : \ Users \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS IS /users//library/applicationsupport/code/user/settings.json, linux? /home//.config/code/user/settings.json; 2. Workspace ?? ?? : .vscode/settings project root ????
