existem comandos para gerar a árvore de processos. O 'ps' toma opções 'fu', e eu acho que o sol tem ptree.
Digamos, em um servidor Solaris, user1
efetua login, alterna para outro usuário, digamos sruser
, usando su -
e, em seguida, inicia um processo de id X
. E então outro usuário user2
efetua login, alterna para sruser
da mesma maneira e inicia um processo de id Y
. (Múltiplos usuários podem efetuar login e swith em sruser
simultaneamente).
No cenário acima, existe alguma maneira de rastrear os processos de ids X
e Y
para os usuários reais user1
e user2
?
Como podemos rastrear um processo para o usuário original?
existem comandos para gerar a árvore de processos. O 'ps' toma opções 'fu', e eu acho que o sol tem ptree.
Não há um caminho padrão e, até onde eu sei, não há nenhuma maneira do Solaris também. Se houvesse uma maneira confiável de descobrir o usuário “ancestral”, o modelo usual de segurança unix em que o root pode fazer tudo não seria válido.
Você pode verificar os pais de cada processo recursivamente. (Aviso, script não testado.)
pid=$1 pids=$pid user=
while pid=$(ps -o ppid= $pid); do
user=$(ps -o ruser= $pid)
case $user in
0|root) :;;
*) break;;
esac
done
echo $user
Isso não é garantido para dar qualquer resultado, no entanto. Talvez o processo pai dos pais tenha saído.
Você pode verificar em qual terminal um processo está sendo executado ( ps -o tty= $pid
) e verificar quem foi o último logado nesse terminal ( who
, last
). Isso é apenas indicativo, no entanto: o root pode iniciar processos em qualquer terminal.
O que você espera ver se o usuário1 executar su user2 -c 'su user1 -c …'
? É concebível que o SO rastreie as sucessivas cadeias de autenticação nas estruturas de dados do kernel associadas ao processo, mas isso está muito longe do modelo usual de segurança do Unix.