Root olarak PHP exec () nasıl çalıştırılır?

6 Cevap php

PHP bir güvenlik duvarı yöneticisi oluşturmak için çalışıyorum, ama ben çalıştırdığınızda, <?php exec('iptables -L'); ?>, sonuç dizi boştur.

(Apache kullanan kullanıcı) I <?php echo exec('whoami'); ?>, denedim, ve tepki www-data olduğunu. Ne root olarak exec fonksiyonunu çalıştırmak için ne yapabilirim? (Tercihen Apache kullanıcıyı değiştirmeden.)

6 Cevap

Bunu yapmayın! Sen kötü niyetli hackery her türlü geniş kendinizi açık bırakacaktır.

"Sudo" belgelerine bakabilirsiniz.

You should be able to set up all the commands you need as "sudo"able scripts. It is much better to write specific scripts with limited functions than to expose the underlying priviledged command.

Gibi:

exec ('sudo getIpTables.ksh')

Sen aracılığıyla sudo çalıştırabilirsiniz phpseclib, a pure PHP SSH implementation:

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
$ssh->login('username', 'password');

$ssh->read('[prompt]');
$ssh->write("sudo command\n");
$ssh->read('Password:');
$ssh->write("Password\n");
echo $ssh->read('[prompt]');
?>

Bu çok güvensiz ve kötü bir fikirdir. Tasarım Rethink. Eğer gerçekten tavsiye olarak bu kullanım sudo yapmak istiyorsanız. Alternatif bir çözüm go ahead ve root olarak çalıştırmak ancak (hala patlak edilebilir fakat her ikisi de) bir chroot veya vm görüntünün içinde bunu yapmak için olabilir.

Ya da en iyisi bir chroot içinde sudo gibi çalışacak!

Eğer suphp kullanmak ve root olarak çalıştırmak için yapılandırmak sürece alışkanlık PHP çalıştıran kim dışında herhangi başka bir sistem kullanıcı adına herhangi bir PHP komut dosyası çalıştırmak mümkün olacak.

Edit:

Sadece bir küçük fikir. Bir şekilde bir kuyruk işlem eklemek ve kökün crontab bir cron işlemini çalıştırın.

Bu konuda çok dikkatli olun lütfen. Herhangi bir enjeksiyon anlamıyla sistemini tahrip edebilir.

Sen, (sh, PHP, bir gerçek çalıştırılabilir, farketmez) ayrı bir komut / çalıştırılabilir dosyaya gerekli komutları koymak kök onun sahibini değiştirmek ve buna "setuid'dir" uygulayabilirsiniz.

Bu şey ve herkes root olarak bu komut dosyasını çalıştırmak için izin verir, o yüzden bu izin verilirse, görme için kendi güvenlik kuralları var ve hem çok ne yaptığını sınırlı olduğundan emin olmak gerekir.

Sadece bir varsayım - bu yapacak bir PHP web uygulaması mı? Bu çok güvenli gelmiyor. Kök ihtiyacı uygulaması - Sen ayrı olarak inşa etmek ve daha sonra PHP onu çağırmak olabilir? Değilse, belki de root olarak sudo süreci çalıştırabilirsiniz böylece.