O que é incomum aqui é que o open
de /proc/pid/stack
é bem-sucedido, mas uma tentativa de read
dele retorna EPERM
.
O código-fonte do kernel para mostrar o conteúdo de /proc/pid/stack
, fs/proc/base.c:proc_pid_stack()
, chama lock_trace()
, que retornará um erro de permissão se o chamador não tiver acesso a ptrace o processo alvo.
Em muitas distribuições do Linux, existem módulos de segurança do Linux que podem restringir o uso de ptrace
. Um deles é Yama , que você encontrará se usar o Ubuntu. A permissão para usar ptrace
está restrita a raiz ou a um processo de ancestral (geralmente o pai) do destino. Você pode verificar isso com
root@ubuntu:~# cat /proc/sys/kernel/yama/ptrace_scope
1
E pode desativá-lo fazendo
root@ubuntu:~# echo 0 > /proc/sys/kernel/yama/ptrace_scope
A partir daí, você poderá cat /proc/pid/stack
.