Linux'ta exec komutunu yürütme iznine sahip olmayan PHP'nin çözümü
İlgili resmi referanslar
PHP exec Linux sudoers file Sudo CommandsFastcgi modunda çalışırken yapılan değişiklikler
PHP fastcgi modunda çalıştığında, izinleri ana bilgisayar programından miras alınır. Açıklamak için apache'yi örnek alıyoruz. Öncelikle, apache'nin altında çalıştığı hesabı bulmalıyız, ardından / etc / sudoers dosyasını düzenlemek için vi veya vim kullanmalı ve dosyaya aşağıdaki referans örneğini eklemeliyiz. Aşağıdaki içerikte, önce Apache süreci httpd'yi bulmak için ps komutunu kullanın, döndürülen sonucun en solundaki hesap bilgilerine bakın ve ardından apache hesabına yetkilendirme eklemek için sudoers dosyasını düzenleyin.
ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
Php-fpm modunda çalışırken değiştirme yöntemi
Php-fpm modunda çalışırken, ayrı bir işlem olarak çalışır. Bu yüzden önce çalışan hesabını bulup ardından yukarıdaki gibi yetkilendirme işlemlerini gerçekleştiriyoruz.
ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
Değişikliklerin geçerli olduğunu doğrulayın
Yukarıdaki işlemlerden sonra yetkiyi değiştirdik, ancak henüz yürürlüğe girmedi. Değişikliğimizin yürürlüğe girmesi için servisi yeniden başlatmamız gerekiyor. Gerçek durumumuza göre apache veya php-fpm servisini yeniden başlatın. Ardından, döndürülen sonucu görüntülemek için exec komutunu çalıştırın.Gönderilen sonuç normal olarak elde edilirse başarılıdır.
exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);