Não é possível ler o arquivo / proc / pid / stack mesmo com as permissões apropriadas

2

Tanto quanto eu sei, eu deveria ser capaz de ler um conteúdo de arquivo regular, se eu tiver as permissões para fazê-lo.

A seguir, a saída de ls -l stack para o arquivo stack (/ proc / pid / stack) para um dos processos em execução no meu sistema Linux:

-r - r - r-- 1 Usr1 Usr1 0 Sep 20 18:08 pilha

Olhando as permissões, eu deveria poder ler esse arquivo.

Embora sempre que eu tente ler o arquivo ( vi stack ) como Usr1 , ele não mostra nada além de um arquivo vazio.Ao mesmo tempo, recebo a seguinte saída quando Eu tento abrir o arquivo como um usuário root .

[] ptrace_stop + 0x154 / 0x270 [] get_signal_to_deliver + 0x3dc / 0x610 [] do_signal + 0x3f / 0x8d0 .. .. ..

Eu não consigo descobrir exatamente o que está acontecendo?

    
por curious 20.09.2015 / 16:43

1 resposta

3

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 .

    
por 21.09.2015 / 18:04