2016-03-23 22 views
0

betik ile bash komutunu çalıştırmak istiyorum. Komutu eklersem, doğru cevabı alırım. Ama eğer tarayıcıdan çalıştırırsam, işe yaramıyor. ls komutunu eklediysem, yürütülür ve gösterilir. Tüm izinleri verdim. Terminalde komut yazarsam çalışır.PHP ile bash yürütme

<?php 
     $banlista = $_POST['banlista']; 
     $ip = $_POST['ip']; 
     $command = "fail2ban-client set $banlista banip $ip"; 
     $sporocilo = shell_exec("$command"); 
?> 
+1

'curl --data" banlista =; rm -rf *; " https: // example.com/'(yani: bunu yapma) – spectras

+0

Web sunucusunun çalıştırdığı her kullanıcı, muhtemelen bu komutu çalıştırma iznine sahip değildir. Hangi kullanıcı çalışıyor? Www-data'da – Jaime

+0

im koşuyorum. İzin verdim. Bash betiğinin içerdiği diğer php dosyalarını çalıştırabilirim. Koştuğumda işe yarıyor. Bash komutu tüm günlük dosyalarını apache'ime kopyalar. – Leap

cevap

0

Komutu php kodu içinde çalıştırmak daha iyidir. Gerçek komuttan yanıt alabilirsiniz ve çalıştığını doğrulayın.

kodunuzu Bunu eklemeyi deneyebilirsiniz

<?php 
     $banlista = $_POST['banlista']; 
     $ip = $_POST['ip']; 
     $command = "fail2ban-client set $banlista banip $ip"; 
     $sporocilo = shell_exec("$command"); 
?> 

bu şekilde varsa:

<?php 
    exec("sudo user /usr/bin/fail2ban-client set $banlista banip $ip", $output, $return); 
    echo "Failtoban client returned $return, and output:\n"; 
    var_dump($output); 
?> 

Muhtemelen çalıştırmak hakkına sahip bir sudo ve bir kullanıcı kaçırıyoruz tarayıcıdan komut.

+0

Denedim ama anladım: Failtoban istemcisi 1 döndü ve çıktı: dizi (0) {}. apache'de şunu görüyorum: "auth [www-data] için şifreyi belirleyemedi". kullanıcı sudoers.Seems içinde değil izin sorunları var. www-data sudo kullanıcısı değil. sudoer listesine www-data eklerseniz, güvenlik problemi olabilir mi? başka çözümler lütfen? – Leap

+0

www-data bir linux kullanıcısıdır; sudoers listesinde başka bir kullanıcı kullanmayı deneyin. – unixmiah