Penyelesaian kepada PHP yang tidak mempunyai izin untuk melaksanakan perintah exec di Linux
Rujukan rasmi yang berkaitan
PHP exec Linux sudoers file Sudo CommandsPengubahsuaian semasa berjalan dalam mod fastcgi
Apabila PHP dijalankan dalam mod fastcgi, kebenarannya diwarisi dari program hosnya. Mari kita ambil apache sebagai contoh untuk menerangkan. Pertama, kita perlu mencari akaun di mana apache berjalan, dan kemudian menggunakan vi atau vim untuk mengedit fail / etc / sudoers, dan tambahkan contoh rujukan berikut ke fail. Dalam kandungan berikut, pertama-tama gunakan perintah ps untuk mencari proses apache httpd, lihat maklumat akaun di sebelah kiri hasil yang dikembalikan, dan kemudian edit fail sudoers untuk menambahkan keizinan ke akun apache.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Pengubahsuaian semasa berjalan dalam mod php-fpm
Semasa berjalan dalam mod php-fpm, ia berjalan sebagai proses yang terpisah. Oleh itu, pertama-tama kami menjumpai akaunnya yang berjalan, dan kemudian melakukan operasi kebenaran seperti di atas.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Sahkan bahawa perubahan tersebut berlaku
Selepas operasi di atas, kami mengubah kebenaran, tetapi belum berlaku. Kami perlu memulakan semula perkhidmatan agar pengubahsuaian kami dapat dilaksanakan. Mengikut keadaan sebenar kita, mulakan semula perkhidmatan apache atau php-fpm. Kemudian jalankan perintah exec untuk melihat hasil yang dikembalikan.Jika hasil yang dikembalikan diperolehi secara normal, ia berjaya.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);