PHPでファイアウォールマネージャーを構築しようとしていますが、<?php exec('iptables -L'); ?>
を実行すると、結果の配列が空になります。
<?php echo exec('whoami'); ?>
を試しましたが、応答はwww-data
(Apacheが使用しているユーザー)。ルートとしてexec機能を実行するにはどうすればよいですか? (できればApacheユーザーを変更しないでください。)
しないでください!あなたは、あらゆる種類の悪意のあるハッカーに対して自分自身を広く開いたままにします。
「Sudo」ドキュメントをご覧ください。
必要なすべてのコマンドを「Sudo」可能なスクリプトとして設定できるはずです。基礎となる特権コマンドを公開するよりも、機能が制限された特定のスクリプトを記述する方がはるかに優れています。
次のように:
exec ('Sudo getIpTables.ksh')
phpseclib、純粋なPHP SSH実装 を使用してSudoを実行できます。
<?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]');
?>
これは古い質問です
phpがまだ割り当てられていない場合、phpが実行されるユーザーを追加します。
sudo -Sを使用して、エコー経由でパスワードを渡すことができます
$exec = "echo your_passwd | /usr/bin/Sudo -S your command";
exec($exec,$out,$rcode);
パスに問題がある場合-を使用
"bash -lc 'echo your_passwd | /usr/bin/Sudo -S your command'"
ログインシェルのように機能し、パスが設定された新しいbashを取得します
sudoのmanページを確認してください
これは非常に安全ではなく、悪い考えです。デザインを再考してください。本当にこれを行いたい場合は、推奨どおりSudoを使用してください。別の解決策として、先に進んでrootとして実行することもできますが、chrootまたはvmイメージ内で実行します(どちらも分割できますが、まだ実行できます)。
または何よりも、chroot内でSudoとして実行されます!
必要なコマンドを別のスクリプト/実行可能ファイル(sh、PHP、実際の実行可能ファイル、重要ではありません)に入れ、所有者をrootに変更し、「setuid」を適用できます。
これにより、すべてのユーザーがこのスクリプトをrootとして実行できるようになるため、これが許可されているかどうかを確認するための独自のセキュリティルールがあり、その動作が非常に制限されていることを確認する必要があります。
私は最近、PHPが実際のBashシェルを取得して対話できるようにするプロジェクトを公開しました。ここから入手できます。 https://github.com/merlinthemagic/MTS
ダウンロード後、次のコードを使用するだけです。
$Shell = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1 = $Shell->exeCmd('iptables -L');
//the return will be a string containing the return of the command
echo $return1;
単なる仮定-これはPHPこれを行うWebアプリですか?これはあまり安全ではないように思えます。そうでない場合は、ルートとして実行できるようにプロセスをSudoすることができます。