«Разрешение отклонено» при записи в / dev / stdout

Почему я не могу написать /dev/stdout ? Я зарегистрировался как пользователь root, какое большее разрешение я мог бы получить?

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

Указанная команда с -w /dev/null работает. Я использую запас Ubuntu Linux.

Теперь stdout перенаправляет на proc который перенаправляет на /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 

Я бы предположил, что это было призраком, отрицающим эту открытую операцию. Вы получаете что-то похожее ниже в вашем syslog?

 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