Solvo por PHP ne havanta permeson ekzekuti exec-komandon en Linukso

Rilataj oficialaj referencoj

PHP exec Linux sudoers file Sudo Commands

Modifoj dum kurado en fastcgi-reĝimo

Kiam PHP funkcias en fastcgi-reĝimo, ĝiaj permesoj estas hereditaj de ĝia gastiga programo. Ni prenas apache kiel ekzemplon por klarigi. Unue ni devas trovi la konton, sub kiu funkcias apache, tiam uzi vi aŭ vim por redakti la dosieron / etc / sudoers, kaj aldoni la sekvan referencan ekzemplon al la dosiero. En la sekva enhavo, unue uzu la komandon ps por trovi la apache-procezon httpd, rigardu la informojn pri la konto maldekstre de la resendita rezulto, kaj poste redaktu la sudoers-dosieron por aldoni rajtigon al la apache-konto.

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

Modifoj dum kurado en reĝimo php-fpm

Funkciante en reĝimo php-fpm, ĝi funkcias kiel aparta procezo. Do ni unue trovas ĝian kurantan konton, kaj poste plenumas rajtigajn operaciojn kiel supre.

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

Kontrolu, ke la ŝanĝoj efikas

Post la supraj operacioj, ni modifis la rajtigon, sed ĝi ankoraŭ ne ekvalidis. Ni devas rekomenci la servon por efektivigi nian modifon. Laŭ nia reala situacio, rekomencu la apache aŭ php-fpm-servon. Poste ekzekutu la ordonon exec por vidi la redonitan rezulton. Se la donita rezulto akiriĝas normale, ĝi sukcesas.

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