8

shell_exec で root としてコマンドを実行したい。これが危険であることはわかっていますが、信じてください。このページにアクセスするには、MOD_AUTH でログインし、適切な特権を持っている必要があります。安全です。どうすればこれを行うことができますか?

4

6 に答える 6

14

問題は、あなたのページが安全かどうかではなく、php ページに sudo コマンドを実行する機能を与えると、サーバー上の任意のサイトの安全でないページに挿入されたコードを含むすべてのページにそれが与えられることです。 .

とはいえ、必要なジョブを 1 つだけ実行するラッパー スクリプトを作成し、http ユーザーに sudo としてその 1 つのコマンドのみへのアクセスを許可するのが最善の方法かもしれません。

http  ALL=(ALL) NOPASSWD:/user/local/bin/your_wrapper_script.sh
于 2011-04-13T17:17:02.950 に答える
13

これを行うには、純粋な PHP SSH 実装である phpseclibの最新の SVN バージョンを使用できます。例えば。

<?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]');
?>
于 2011-04-19T04:43:02.330 に答える
4

Definitley はお勧めしません。ただし、ファイルの編集を調べて、実行する必要があるコマンドsudoersの php が実行されているユーザーを追加する必要があります。NOPASSWDこれによりsudo、パスワードを入力せずにその 1 つのコマンドのみを実行できるようになります。

さらにコマンドが必要な場合は、さらに追加します。Sudoers の構成フォーラム/投稿が debian ベースであることは知っていますが、sudo は厳密には debian ではないため、必要な sudo 構成値を理解するのに役立ちます。

于 2011-04-13T17:16:14.427 に答える
2

私はグーグルで検索したところphp sudo shell_exec、これが一番の一致として出てきました:

http://www.php.net/manual/en/function.shell-exec.php#101440

ilya at linemedia dot ru 2010 年 12 月 16 日 04:36
sudo は、パスをファイルに保存せずに実行できます。

system('echo "PASS" | sudo -u root -S COMMAND');
于 2011-04-13T17:17:04.473 に答える
0

それを行う最良の方法:

$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 を前に付けて、同じコマンドを再度実行します。

于 2016-07-07T14:59:36.997 に答える
0
$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;
于 2015-01-12T15:55:26.787 に答える