/dev/stdout に書き込むと、「権限が拒否されました」

/dev/stdout に書き込むと、「権限が拒否されました」

なぜ手紙を書くことができないのです/dev/stdoutか?ルートとしてログインしました。どのような大きな権限を持つことができますか?

root@ubuntu:/# tcpdump -i 2 -w /dev/stdout
tcpdump: /dev/stdout: Permission denied

上記のコマンドが-w /dev/null機能します。私はUbuntu Linuxを使用しています。

これでchar devで、特権でリダイレクトされたパスにリダイレクトstdoutします。また何がありますか?proc/dev/ptsw

crw-rw-rw- 1 root root 1, 3 2013-08-26 00:29 /dev/null
lrwxrwxrwx 1 root root   15 2013-08-26 00:29 /dev/stdout -> /proc/self/fd/1
lrwx------ 1 root root   64 2013-08-26 10:10 /proc/self/fd/1 -> /dev/pts/0
crw--w---- 1 xxx  tty  136, 0 2013-08-26 10:11 /dev/pts/0
root@ubuntu:/# tcpdump -i 2 -w /dev/pts/0
tcpdump: /dev/pts/0: Permission denied

答え1

私の考えではそうだと思います。アパモアオープン操作を拒否します。システムログに次のような内容が表示されますか?

kernel: [14124112.152452] type=1400 audit(1377537799.840:40): apparmor="DENIED" operation="open" parent=111 profile="/usr/sbin/tcpdump" name="/dev/pts/0" pid=222 comm="tcpdump" requested_mask="wc" denied_mask="wc" fsuid=0 ouid=0

デフォルトでは、tcpdump(-wを除く)は出力をstdoutにパイプします。 stdoutから再生データを取得しようとしていますか?どのような状況で-w -使用できますか-w /dev/stdout

を使用するには/dev/stdout、特に/dev/pts/*を介して項目をapparmor編集して追加します。/etc/apparmor.d/usr.sbin.tcpdump

/dev/pts/* rw,

その後、構成ファイルを再ロードします。

apparmor_parser -r /etc/apparmor.d/usr.sbin.tcpdump

関連情報