как я могу запустить Perl-скрипт, которому нужен root?

Мне нужно выполнить perl-скрипт, расположенный в /root/scripts/ из php, используя ssh с другого компьютера или с того же компьютера. Дело в том, что я просто не знаю, как заставить php войти в учетную запись root, чтобы выполнить только этот файл.

Как user$ я не могу получить доступ к /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