De fato, w
exibe apenas os shells de login. Se um usuário usar su
em outro programa (shell), ele não será exibido porque não é um shell de login.
O principal problema aqui é que você está tentando correlacionar a data que não foi projetada para ser correlacionada. Você precisa obter informações de várias fontes e fazer referência cruzada.
Para obter uma lista de todas as pessoas que usaram su
, você pode verificar /var/log/auth
(dependendo da sua distribuição). Você verá a seguinte mensagem:
May 1 09:47:32 frisbee su[7000]: Successful su for root by mtak
May 1 09:47:32 frisbee su[7000]: + /dev/pts/5 mtak:root
Você pode verificar quais pts'es ainda estão ativos verificando se os pseudo-terminais ainda estão ativos com ls /dev/pts
(você teria que fazer isso rapidamente, porque os pts são reutilizados). Você também pode usar o tempo de modificação do pseudo-terminal e fazer referência cruzada com a hora no arquivo auth.log
. Você pode encontrar o tempo de modificação dos pts com stat /dev/pts/
.
Evidentemente, não é perfeito, mas acho que com alguns scripts você seria capaz de obter uma lista de usuários sued.