Soluzione a PHP che non dispone dell'autorizzazione per eseguire il comando exec su Linux
Riferimenti ufficiali correlati
PHP exec Linux sudoers file Sudo CommandsModifiche durante l'esecuzione in modalità fastcgi
Quando PHP è in esecuzione in modalità fastcgi, i suoi permessi vengono ereditati dal suo programma host. Prendiamo apache come esempio per spiegare. Prima di tutto, dobbiamo trovare l'account con cui è in esecuzione apache, quindi utilizzare vi o vim per modificare il file / etc / sudoers e aggiungere il seguente esempio di riferimento al file. Nel seguente contenuto, usa prima il comando ps per trovare il processo apache httpd, guarda le informazioni sull'account sul lato più a sinistra del risultato restituito, quindi modifica il file sudoers per aggiungere l'autorizzazione all'account apache.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Modifiche durante l'esecuzione in modalità php-fpm
Quando viene eseguito in modalità php-fpm, viene eseguito come un processo separato. Quindi troviamo prima il suo account in esecuzione, quindi eseguiamo le operazioni di autorizzazione come sopra.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Verificare che le modifiche abbiano effetto
Dopo l'operazione sopra, abbiamo modificato l'autorizzazione, ma non ha ancora avuto effetto, dobbiamo riavviare il servizio per rendere effettiva la nostra modifica. In base alla nostra situazione attuale, riavvia il servizio apache o php-fpm. Quindi eseguire il comando exec per visualizzare il risultato restituito.Se il risultato restituito viene ottenuto normalmente, ha successo.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);