Como rastrear um processo para o usuário original?

3

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?

    
por Srikanth 01.03.2011 / 14:40

2 respostas

1

existem comandos para gerar a árvore de processos. O 'ps' toma opções 'fu', e eu acho que o sol tem ptree.

    
por 02.03.2011 / 11:13
0

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.

    
por 01.03.2011 / 22:36