shell_exec で root としてコマンドを実行したい。これが危険であることはわかっていますが、信じてください。このページにアクセスするには、MOD_AUTH でログインし、適切な特権を持っている必要があります。安全です。どうすればこれを行うことができますか?
6 に答える
問題は、あなたのページが安全かどうかではなく、php ページに sudo コマンドを実行する機能を与えると、サーバー上の任意のサイトの安全でないページに挿入されたコードを含むすべてのページにそれが与えられることです。 .
とはいえ、必要なジョブを 1 つだけ実行するラッパー スクリプトを作成し、http ユーザーに sudo としてその 1 つのコマンドのみへのアクセスを許可するのが最善の方法かもしれません。
http ALL=(ALL) NOPASSWD:/user/local/bin/your_wrapper_script.sh
これを行うには、純粋な 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]');
?>
Definitley はお勧めしません。ただし、ファイルの編集を調べて、実行する必要があるコマンドsudoers
の php が実行されているユーザーを追加する必要があります。NOPASSWD
これによりsudo
、パスワードを入力せずにその 1 つのコマンドのみを実行できるようになります。
さらにコマンドが必要な場合は、さらに追加します。Sudoers の構成フォーラム/投稿が debian ベースであることは知っていますが、sudo は厳密には debian ではないため、必要な sudo 構成値を理解するのに役立ちます。
私はグーグルで検索したところ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');
それを行う最良の方法:
$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 を前に付けて、同じコマンドを再度実行します。
$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;