2015-08-04 61 views
10

gelen Python komut çalıştır lib/cgi-bin" Ben terminalden bunu eğer çalışıyor/ butonuna düğmesi kapatma düğmesi/usr" In Off.php yönlendirir On.php yönlendirir I (açık veya kapalı) 2 düğmeli benim Ahududu pi üzerinde bir PHP web sayfam var Php

cd /usr/lib/cgi-bin 
sudo python script.py 

yazarak Gayet terminalden yürütebileceği ben yürütmek istiyorum bir python komut dosyası (script.py) var.

Sorun, "/ var/www" klasöründeki PHP dosyası (On.php) 'dir.

<?php 
exec('cd /usr/lib/cgi-bin'); 
exec('sudo python script.py'); 
?> 

Neden Senaryo bana PHP gelen terminalden yürütme, ama değildir: Bu yazdıklarımı mı?

+0

eklemek izin vermek için bu satırları eklenir? –

cevap

12

Sudo'yu bir PHP betiğinden kullanamazsınız. /etc/sudoers

O zaman bu satırı ekleyin: Apache bir kullanıcı (www-data genellikle pek) koşarak, bu nedenle bu dosyayı düzenlemek olduğunu

www-data ALL=(ALL) NOPASSWD:ALL 

Bakımı! Bu, bir PHP betiği tarafından çağrılacak tüm işlevleri yetkilendirecektir, senaryosunu veya Python komutunu kullanarak "ALL" değiştirmeye adapte olabilirsiniz. senin exec komutu

Ardından hassas kullanıcı:

<?php 
exec('sudo -u www-data python /usr/lib/cgi-bin/script.py') 
+0

Bu, şifreleri mi siliyor? Çünkü sunucu portu herkese açık olarak iletildi. Sadece sunucumu girmesini istemem. – ChubbyChocolate

+0

Bu kullanıcı www-data şifresini kaldıracaktır, bu yüzden NOPASSWD 'NOPASSWD: python' gibi bir komut isteyebilirsiniz. Diğer kullanıcılar için bir şey değiştirmeyecek. –

+0

Tamam, uzman değilim, sadece kimsenin ahudududa süper kullanıcı veya başka bir kullanıcı olarak hacklenmesini istemedim. – ChubbyChocolate

3

o çalışıyor olması gerekir, bu deneyin:

<?php 
system("cd /usr/lib/cgi-bin"); 
system("sudo python script.py"); 
?> 

Hatta bu:

<?php 
system("cd /usr/lib/cgi-bin && sudo python script.py"); 
?> 
2

eski On Raspbian dağılımı dosyanızı /var/www/file.py'a yerleştirmeniz gerekir. Yani file.php'den içinde Eklemek:

{ 
    exec("sudo python /var/www/file.py"); 
} 

daha yeni Raspbian Jessie On file.php'den içinde eklemek gerekir; böylece, /var/www/html/file.py dosyanızı yerleştirmek gerekir:

{ 
    exec("sudo python /var/www/html/file.py"); 
} 

Veya sadece ? herhangi file.py

<?php 
{ 
    exec("sudo python test.py"); 
} 

>

Not: Bu ilk önce bir dosyayı düzenlemek gerekir çalışması için süper kullanıcı bir şifre var mı şifresiz sudo

sudo nano /etc/sudoers

sonra dibe gidip bu

pi ALL=(ALL) NOPASSWD: ALL<br> 
www-data ALL=(ALL) NOPASSWD: ALL 
+0

Hiçbir zaman "NOPASSWD: ALL" ile sudoerlara www-data eklemeyin! Bu çok büyük bir güvenlik sorununa dönüşebilir. – Dartmouth

+0

'un yukarısında @ dotlash'in yorumuna bakın evet, eğer bu çevrimiçi ise bu pi sadece bir ev uzaktan kumandasıdır. Bunu okuyan insanlar için bunu internet üzerinden kontrol etmek için yapmayın – Code1

+0

Peki? Bir ağa bağlıysa, birileri yeterince uğraşırsa, güvenliği bozulabilir. Sadece yapma. Alberto Pagani'nin cevabı gibi daha iyi yollar var. – Dartmouth