Como o ps obtém o executável dos processos de outros usuários?

4

Ao executar como não-raiz, se eu tentar usar readlink(2) em um /proc/<pid>/exe para um processo que não é de minha propriedade, recebo um erro de permissão. Então, como o ps com a opção -f , que não é root setuid, determina os executáveis para processos de um usuário diferente?

    
por Matthew Cline 26.12.2014 / 22:12

1 resposta

2

A opção -f não exibe o caminho completo para o executável, ele exibe a linha de comando usada para chamar o executável. Esta informação é legível por todo o mundo, de /proc/PID/cmdline , ao contrário do caminho para o executável de /proc/PID/exe , que só pode ser lido pelo usuário que executou o processo.

Você pode verificar quais dados ps está lendo, observando suas chamadas de sistema - executar strace ps -ef -p 1 | less :

…
stat("/proc/1", {st_mode=S_IFDIR|0555, st_size=0, ...}) = 0
open("/proc/1/stat", O_RDONLY)          = 6
read(6, "1 (init) S 0 1 1 0 -1 4202752 78"..., 1024) = 191
read(6, "", 833)                        = 0
close(6)                                = 0
open("/proc/1/status", O_RDONLY)        = 6
read(6, "Name:\tinit\nState:\tS (sleeping)\nT"..., 1024) = 752
read(6, "", 272)                        = 0
close(6)                                = 0
…
open("/proc/1/cmdline", O_RDONLY)       = 6
read(6, "/sbin/init", 2047)             = 10
close(6)                                = 0
…

Se você passar a opção c , ps informará o nome do comando de /proc/PID/stat , que também é legível por todos. Este é o nome de base do executável (sem informações de caminho) truncado para 16 caracteres.

Eu não acho que ps tenha uma opção para relatar o caminho para o executável encontrado em /proc/PID/exe . Você pode listá-lo com lsof (o txt descritor de arquivo) - e, como era de se esperar, reclama /proc/1/exe (readlink: Permission denied) quando solicitado a imprimir as informações sobre o processo de outro usuário.

N.B. Minha resposta é sobre o Linux. Os detalhes de quais informações podem ser relatadas sobre os processos de outros usuários e como elas funcionam são muito diferentes nas variantes do Unix.

    
por 26.12.2014 / 23:58