it-swarm.com.ru

PHP Судо в Shell_exec

Я хочу выполнить команду как root с Shell_exec. Теперь я знаю, что это опасно, но, поверьте мне, вам нужно войти в систему с MOD_AUTH и иметь права доступа, чтобы зайти на эту страницу. Это безопасно. Как я могу это сделать?

8
www.data-blogger.com

Вы можете использовать последнюю версию SVN phpseclib, чистая реализация PHP SSH , чтобы сделать это. например.

<?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]');
?>
12
user580858

Проблема не в том, что ваша страница является или не является безопасной, проблема в том, что предоставление php-странице возможности запуска какой-либо команды Sudo дало бы ее всем страницам. включая любой внедренный код на любой незащищенной странице любого сайта на сервере.

Тем не менее, может быть лучше создать скрипт-обертку, который выполняет только одну работу, которую нужно выполнить, а затем предоставить пользователю http доступ только к той ОДНОЙ команде, как Sudo.

http  ALL=(ALL) NOPASSWD:/user/local/bin/your_wrapper_script.sh
13
Caleb

Определить не рекомендуется. Тем не менее, вы захотите посмотреть на редактирование файла sudoers и добавить, что пользователь php работает как NOPASSWD для команды, которую вам нужно запустить. Это позволит ему только Sudo этой одной команды без ввода пароля.

Если вам нужно больше команд, добавьте больше к нему. Конфигурация Sudoers Я знаю, что форум/сообщение основано на Debian, но Sudo не является строго Debian, и это должно помочь вам со значениями конфигурации Sudo, которые вам нужно указать.

3
Brad F Jacobs

Я просто использовал Google для php Sudo Shell_exec, и это было первое совпадение:

http://www.php.net/manual/en/function.Shell-exec.php#10144

илья в Linemedia Dot Ru 16 декабря 2010 04:36
Судо может быть выполнено без сохранения пропуска в файле

system('echo "PASS" | Sudo -u root -S COMMAND');
2
drudge
$aux=echo "admin-pass" | your command;
echo $aux;

/******************************* ************Пример***** ******** ******************************* /

Запустите сценарий Perl с именем my_Perl_script.pl:

$aux=echo "admin-pass" | Sudo -u root -S Perl /path-to-the-script/my-Perl-script.pl;
echo $aux;
0
SamyOteroGlez

Лучший способ сделать это:

$descriptorSpec = array(
    0 => STDIN,
    1 => STDOUT,
    2 => STDERR,
);

if (posix_getuid() === 0) {
    echo "Root\n";
} else {
    echo "No root\n";
    $command = 'Sudo ' . PHP_BINARY . ' ' . implode(' ', $_SERVER['argv']);

    $pipes = [];
    $process = proc_open($command, $descriptorSpec, $pipes);
    if (is_resource($process)) {
        proc_close($process);
    }
}

Он запускает ту же команду снова с префиксом Sudo.

0
Timon de Groot