1

コマンドを実行するのはrootである必要があることはわかっていますが、phpのpopen()がそれを実行するのに役立つかもしれません。しかし、私のコードは機能しません、理由はわかりません......

私のコードは次のとおりです。

    $sucommand = "su --login root -c tcpdump -c 20000 -s 0 -w $filename &";
    $rootpasswd = "password";
    $fp = @popen($sucommand,"w");
    @fputs($fp,$rootpasswd);
    @pclose($fp);

入力したものが間違っていますか?

私のphpファイルはLinuxサーバーにあり、ディレクトリ内のすべてのファイル所有者をapache(およびモード0777)に変更します。

追加:sudoを使用する必要がある場合、何を心配する必要がありますか?私はphpコーディングを使用しています。

どんな提案もありがたいです!

4

2 に答える 2

2

オプションを使用sudoして-S、コマンドライン自体からパスワードを渡すことができます。

[suku@suku-ld ~]$ echo 'YOURSUDOPASSWORD' | sudo -S tcpdump -c 20000 -i eth1 -s 0 -w tmp
tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes

[追加] : sudores リストにユーザーを追加する方法は?

suku@ubuntu-vm:~$ which tcpdump 
/usr/sbin/tcpdump

コマンドvisudoを実行し、次のいずれかを入力します。

apache  ALL=/usr/sbin/tcpdump
apache  ALL=NOPASSWD:/usr/sbin/tcpdump

最初のものを使用する場合、sudo コマンドでスクリプトを実行すると、apache ユーザーのパスワードを求めるプロンプトが表示されます。しかし、2 番目のものでは、sudo パスワードの入力さえ求められません。

注: 最初に使用するものをお勧めします。

注 : ユーザー apache で Web サーバーを実行していると仮定しています。そうでない場合は、それに応じてユーザー名を変更します。

于 2013-01-04T04:20:33.807 に答える
1

私は最近、PHP が実際の Bash シェルを取得して対話できるようにするプロジェクトを公開しました (必要に応じて root として)。これにより、exec() と shell_exec() の制限が解決されます。ここから入手してください: https://github.com/merlinthemagic/MTS

ダウンロードしたら、次のコードを使用するだけです。

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$timeout = 3600000; // how many miliseconds will it take to capture 20000 packets?
$return1  = $shell->exeCmd('tcpdump -c 20000 -i eth1 -s 0 -w /tmp/tmp.pcap', false, $timeout);
//the return will be a string containing the return of the command
echo $return1;

次に、処理のために /tmp/tmp.pcap を取得します。

于 2016-05-20T10:18:16.047 に答える