2012-06-06 4 views
12

altında bash komut dosyasını çalıştırmak için?Nasıl Nasıl (bütün izinlerle) <strong>root</strong> değil <strong>kimse</strong> kullanıcı altında PHP bir bash komut dosyasını çalıştırmak için PHP den root

sudo visudo sonra benim çıkışını şu:

Defaults  env_keep += "LINES COLUMNS" 
Defaults  env_keep += "LSCOLORS" 
Defaults  env_keep += "SSH_AUTH_SOCK" 
Defaults  env_keep += "TZ" 
Defaults  env_keep += "DISPLAY XAUTHORIZATION XAUTHORITY" 
Defaults  env_keep += "EDITOR VISUAL" 
Defaults  env_keep += "HOME MAIL" 

#User privilege specification 
root ALL=(ALL) ALL 
%admin ALL=(ALL) ALL 


# Uncomment to allow people in group wheel to run all commands 
# %wheel  ALL=(ALL) ALL 

# Same thing without a password 
# %wheel  ALL=(ALL) NOPASSWD: ALL 

# Samples 
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom 
# %users localhost=/sbin/shutdown -h now 
+3

, çok açık soru: neden bunu yapmak gerekiyor? Belki bu daha iyi bir genel çözümdür. –

cevap

27

Sen sudo kullanabilirsiniz. konsolda sudo visudo çalıştırın ve sonuna aşağıdaki dizeyi ekleyin:

nobody ALL = NOPASSWD: /your/script 

Sen hiç kimse bu senaryoyu değiştirmek ve (kök konsolunda) içine tehlikeli içeriği koyabilirsiniz sağlamak için düzgün dosya modunu kurmak gerekir:

chown root:root /your/script 
chmod 755 /your/script 
+0

Tam olarak nereye eklemeliyim? – Oleg

+0

+1 İyi yanıt sorusundaki sudo visudo'dan sonra çıktımı yayınladım. –

+0

Sadece dosyanın sonuna yeni satır koy. –

1

Sen set-uid olan kök bir program yapabilirsiniz. Bu, programın her zaman root olarak çalışmasına neden olur. Bu kabuk betikleri ile çalışmaz, bu nedenle program which calls your script kullanmanız gerekir. Sen şifre istemi olmadan scriptinizi izin vermelidir

exec("sudo /your/script"); 

:

+0

Bağlantı bozuk görünüyor. – Droidzone

0

Linux altında, normal olarak bunu sudo kullanarak gerçekleştirirsiniz. Mümkün olduğunca spesifik olmaya çalışın, bu yüzden komut dosyasına çok fazla izin vermeyin. sudo nasıl kullanılacağına ilişkin örnekler için

: http://aplawrence.com/Basics/sudo.html

+0

Sorun şu ki terminalde çalıştırdığımda iyi çalışıyor, ama bu betik betiğini php'den çalıştırdığımda (cp' ile diğer basit bash, mv' komutları çalışıyor),% 90’ını düşünüyorum izinleri. – Oleg

0

Ben sudo kullanarak, bu yazı nobody kullanıcı tarafından çağrılacak izin belirli bir kural eklemek istiyorum.

+0

Nasıl yapabilirim? Birçok şey denedim ama işe yaramıyor – Oleg

+0

Riateche'nin cevabına bakın - 'nobody ALL = NOPASSWD:/sizin/betiğiniz' satırını 'visudo' dosyasına (sudoers yapılandırma dosyası) eklemeniz gerekiyor. Tabii ki, komut dosyanızın yolunu kullanarak///script'in yerine. –

+0

Bu dosyayı nasıl düzenleyebilirim? sudo visudo'yu kullandım ama sadece çıkışı gösteriyor. – Oleg

0

Kısa bir süre önce PHP'nin gerçek bir Bash kabuğunu (kullanıcı: apache/www-data veya gerekirse root) elde etmesine ve etkileşime girmesine izin veren bir proje yayınladım. burada alın: https://github.com/merlinthemagic/MTS

sadece şu kodu kullanırsınız indirdikten sonra: Bu tehlikeli geliyor

$shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true); 
$return1 = $shell->exeCmd('/full/path/to/script.sh');