Geliştirdiğimiz bir proje için C#, C++, Java dillerinden birini kullanmamız yerine PHP kullanmak zorunda kaldık. Dolayısıyla bazen PHP mantığına çok ters şeyler yapmamız gerekiyor, PHP dosyasının çalıştığı bilgisayara bağlı olan medya aygıtlarından dosya çekmek gibi. Şöyle düşünün bir web sunucusu var, bu sunucu üzerinde çalışan PHP sistem, sunucuda takılı olan CD den veri çekiyor. Sanırım dünyada tekiz! 😀

Apache2 üzerinde çalıştığımız için www-data kullanıcısının /media/ dizinine erişimi olması gerekiyordu. Dosyaları başka yere kopyalayacağız, daha sonra tekrar sildireceğiz. Durumu genelleştirerek kod satırlarını aşağıya yazacağım:

1. PHP içinde doğrudan komut çağırma,
shell_exec('<<command>>');

2. Bash script yazıp, bu scripti çağırma,
shell_exec('./script.sh');

Kullandığınız komut root yetkisi isteyecektir, yani komutun başına “sudo” ekleyeceksiniz, ancak root parolası girilmediği sonuç döndürmeyecektir. Dosya izinlerini ayarlayarak aşabildiğiniz durumlar olabilir elbette. Ama bazen dosya izinlerini ayarlayamadığınız olabilir. Mesela biz /media/ dizinindeki dosya sahibini değiştiremedik veya izinlerini ayarlayamadık.

Root olmamız gerekiyor ama parolasız…

sudo visudo

komutuyla /etc/sudoers açılır. Belgenin sonuna veya “#Member of the admin group may gain root privileges” kısmının altına,

www-data ALL=NOPASSWD:ALL
veya
www-data ALL=NOPASSWD:/../.../.../script.sh

ekleyerek. www-data üzerinden root olmak için gerekli parola şartını kaldırmış oluruz. Artık php içinde “sudo” ile başlayan shell yazabilirsiniz.