为什么我不能写信给/dev/stdout
?我以 root 用户身份登录,我还能拥有什么更大的权限?
root@ubuntu:/# tcpdump -i 2 -w /dev/stdout
tcpdump: /dev/stdout: Permission denied
上面的命令-w /dev/null
有效。我正在使用 Ubuntu Linux。
现在,stdout
重定向到proc
which 重定向到/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