Zgjidhja për PHP që nuk ka leje për të ekzekutuar komandën exec në Linux

Referencat zyrtare përkatëse

PHP exec Linux sudoers file Sudo Commands

Modifikimet kur ekzekutoni në modalitetin fastcgi

Kur PHP po ekzekutohet në modalitetin fastcgi, lejet e tij trashëgohen nga programi i tij pritës. Ne marrim apache si një shembull për të shpjeguar. Para së gjithash, ne duhet të gjejmë llogarinë nën të cilën po ekzekutohet apache, pastaj përdorim vi ose vim për të redaktuar skedarin / etc / sudoers dhe të shtojmë shembullin e mëposhtëm të referencës në skedar. Në përmbajtjen vijuese, së pari përdorni komandën ps për të gjetur procesin apache httpd, shikoni informacionin e llogarisë në anën më të majtë të rezultatit të kthyer dhe më pas editoni skedarin sudoers për të shtuar autorizimin në llogarinë apache.

            ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
        

Modifikimet kur ekzekutoni në modalitetin php-fpm

Kur ekzekutohet në modalitetin php-fpm, ajo ekzekutohet si një proces i veçantë. Pra, së pari ne gjejmë llogarinë e saj të rrjedhshme, dhe pastaj kryejmë operacione autorizimi si më sipër.

            ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
        

Verifikoni që ndryshimet të hyjnë në fuqi

Pas operacioneve të mësipërme, ne kemi modifikuar autorizimin, por ai ende nuk ka marrë efekt. Duhet të rindezim shërbimin për të bërë që modifikimi ynë të hyjë në fuqi. Sipas situatës sonë aktuale, rinisni shërbimin apache ose php-fpm. Pastaj ekzekutoni komandën exec për të parë rezultatin e kthyer. Nëse rezultati i kthyer është marrë normalisht, ai është i suksesshëm.

            exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);