写入 /dev/stdout 时出现“权限被拒绝”

写入 /dev/stdout 时出现“权限被拒绝”

为什么我不能写信给/dev/stdout?我以 root 用户身份登录,我还能拥有什么更大的权限?

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

上面的命令-w /dev/null有效。我正在使用 Ubuntu Linux。

现在,stdout重定向到procwhich 重定向到/dev/pts,这是一个 char dev 并且拥有w权限 - 还有什么?

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

相关内容