2011-07-13 24 views
8

Bir kabuk komutunu çalıştırmak ve çıkışını döndürmek için bir php betiği oluşturmak istiyorum. Sunucu özel bir anahtar gerektirir. İlk önce bunu test etmeye karar verdiğimde şunu yarattım:Bir kabuk komutunu bir php komut dosyasından yürütme

<?php 
$command = "ls"; 
$output = shell_exec($command); 
echo "<pre>$output</pre>"; 
?> 

Bu işe yaradı. Ben komuta $command değiştiği Ama gerçekten çalıştırmak istedim:

You need root privileges to run this script 

Benim tahminim ben sudo kullanmak gerekir ise:

$command = "/etc/init.d/mycontrollerd status /etc/mycontrollerconfig"; 

bana bu çıktıyı verdi. Tabii ki bu pem dosyasını sunucuda bir yere koymayı gerektirir. Bunu yaptığımı farz edersem, $command tam olarak ne olmalı? shell_exec(), exec(), system() veya başka bir şey kullanmalı mıyım?

cevap

4

Bu senaryoyu başlatmak için hangi php fonksiyonu önemli değil - Ne yoksun kullanıcı hesabının yetkilendirme olduğunu.

Ya kullanımı sudo (visudo yoluyla şifre olmadan kesin komutu çalıştırmak için Web sunucusu, kullanıcıya preconfigure ve sudo ile komut öneki) ya da kendi üzerine komutu yürütür bir setuid senaryoyu kurdu.

+0

* Ayrıca * kullanıcı hesabının yetkilendirilmesi gereken bir husus olsa da bu, PHP işlevinin kullanılması için en iyi seçenek olmadığı anlamına gelmez. Hangisi en iyi? –

+0

@Kenneth Vogt 'exec', gereksiz yere kabuğu içermediğinden ve sonucu döndürmediğinden ya da sonucu doğrudan çıkaran" passthru ", ancak orijinal kodun bazı değişikliklerini gerektireceği için. – phihag

3

Gerçekten yapmanız gereken şey web sunucunuzu belirli bir kullanıcı olarak çalışacak şekilde ayarlamak (örneğin, 'hiç kimse' dışında) veya yürütmek istediğiniz kullanıcı izinlerini vermek.

Ayrıca bakınız: PHP shell_exec() and sudo: must be setuid root

+0

Bu, şu soruyu soruyor: "Web sunucunuzu" hiç kimse "dışında belirli bir kullanıcı olarak çalışacak şekilde nasıl ayarlıyorsunuz? –

+0

@Kenneth Vogt, nasıl kullanacağınızı, hangi sunucuyu kullandığınızı belirlemediniz. Apache kullanıyorsanız, "Kullanıcı" ve "Grup" yapılandırma yönergelerini kontrol edin. (http://httpd.apache.org/docs/1.3/mod/core.html#user) Eğer bu işe yaramazsanız, sorulması gereken yer ServerFault.com'dur. – Brad

İlgili konular