Solusyon sa PHP na walang permiso upang magpatupad ng exec command sa Linux
Mga kaugnay na opisyal na sanggunian
PHP exec Linux sudoers file Sudo CommandsMga pagbabago kapag tumatakbo sa fastcgi mode
Kapag ang PHP ay tumatakbo sa fastcgi mode, ang mga pahintulot nito ay minana mula sa host program nito. Kinukuha namin ang apache bilang isang halimbawa upang ipaliwanag. Una, kailangan naming hanapin ang account kung saan tumatakbo ang apache, at pagkatapos ay gamitin ang vi o vim upang mai-edit ang / etc / sudoers file, at idagdag ang sumusunod na halimbawa ng sanggunian sa file. Sa sumusunod na nilalaman, gamitin muna ang utos ng ps upang hanapin ang proseso ng apache na httpd, tingnan ang impormasyon ng account sa kaliwang bahagi ng naibalik na resulta, at pagkatapos ay i-edit ang file ng sudoers upang magdagdag ng pahintulot sa apache account.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Mga pagbabago kapag tumatakbo sa php-fpm mode
Kapag tumatakbo sa php-fpm mode, tumatakbo ito bilang isang hiwalay na proseso. Kaya nakita muna namin ang pagpapatakbo ng account nito, at pagkatapos ay nagsasagawa ng mga pagpapatakbo ng pagpapahintulot tulad ng nasa itaas.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
I-verify na magkakabisa ang mga pagbabago
Matapos ang mga pagpapatakbo sa itaas, binago namin ang pahintulot, ngunit hindi pa ito epektibo. Kailangan naming i-restart ang serbisyo upang magkabisa ang aming pagbabago. Ayon sa aming aktwal na sitwasyon, i-restart ang serbisyo ng apache o php-fpm. Pagkatapos ay isagawa ang utos ng exec upang tingnan ang naibalik na resulta. Kung ang naibalik na resulta ay nakuha nang normal, ito ay matagumpay.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);