как мога да стартирам perl скрипт, който се нуждае от root?

Трябва да изпълня perl скрипт, намиращ се в /root/scripts/ от php, използвайки ssh от друг компютър или от същия компютър. Работата е там, че просто не знам как да накарам php да влезе в root акаунт, за да изпълни само този файл.

Като потребител $ нямам достъп до /root/scripts/, така че не мога да го извикам с помощта на excec или system. Опитах да използвам ssh, за да вляза в sudo su, и когато дам паролата си, тя увисва.

Оставям кода тук:

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


$ssh = new Net_SSH2('IP');
if (!$ssh->login('user', 'password')) {
exit('Login Failed');
}else{
echo ("login suscess");
}
echo $ssh->read(']$');

echo $ssh->write("sudo su\n");

echo $ssh->read('user:');
//the code normally runs if I dont write the lines below

$ssh->write('password\n');//here I try to get ssh the root pass but php wont respond after this
echo $ssh->read('user]#');//normally this would work to show the root prompt  but I don't know what happens


?>

Надявам се, че можете да ми помогнете тук.


person Jose Andradez    schedule 23.04.2013    source източник
comment
когато вече използвате потребителско име за root, защо изпълнявате sudo su?   -  person bwoebi    schedule 23.04.2013
comment
съжалявам, че не забелязах, че бях оставил root там, където имам потребител, това беше просто тест, преди да напиша въпроса и забравих да върна отново потребителя.   -  person Jose Andradez    schedule 24.04.2013
comment
дистанционното rootване чрез ssh е огромна дупка в сигурността. ще бъде много по-добре да влезете като нормален потребител, след което да предоставите на този потребител sudo достъп до един конкретен скрипт.   -  person Marc B    schedule 24.04.2013


Отговори (2)


Обикновено ще кажете на sudo, че потребителят на уеб сървъра може да изпълни скрипта, без да е необходимо да се удостоверява с парола. Ще трябва да добавите ред като следния в /etc/sudoers:

www-data ALL=(ALL:ALL) NOPASSWD: /root/scripts/script.pl

Това ще позволи на потребителя на www-data да изпълни script.pl чрез sudo, без да се налага да въвежда парола.

След това изпълнете скрипта от PHP, като използвате

exec('sudo /root/scripts/script.pl');
person hek2mgl    schedule 23.04.2013
comment
Изпълних exec('whoami') и върна apache, предполагам, че трябва да заменя WWW-данни с apache, прав ли съм? - person Jose Andradez; 24.04.2013

  1. Ехото на извикванията $ssh->write() всъщност не прави много.

  2. sudo се нуждае от парола. Ето един пример на сайта на phpseclib как да се справите с това: http://phpseclib.sourceforge.net/ssh/examples.html#sudo

person neubert    schedule 27.04.2013