“Permissão negada” ao gravar em / dev / stdout

1

Por que não consigo gravar em /dev/stdout ? Estou logado como usuário root, que maior permissão eu poderia ter?

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

O comando acima com -w /dev/null funciona. Estou usando o Ubuntu Linux.

Agora, stdout redireciona para proc , que redireciona para /dev/pts , que é um char dev e tem w permission - o que mais há?

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
    
por steev 26.08.2013 / 19:17

1 resposta

2

Eu imagino que era apparmor negando essa operação aberta. Você recebe algo semelhante ao abaixo em seu 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

Por padrão, tcpdump (sem -w) passa a saída para stdout - você está tentando obter os dados de reprodução no stdout? Nesse caso, você pode usar -w - em vez de -w /dev/stdout ?

Se você quiser usar /dev/stdout e, especificamente, /dev/pts/* via apparmor , edite /etc/apparmor.d/usr.sbin.tcpdump e adicione uma entrada:

/dev/pts/* rw,

e depois recarregue o perfil:

apparmor_parser -r /etc/apparmor.d/usr.sbin.tcpdump
    
por 26.08.2013 / 19:26