Como formatar o arquivo de histórico para conter também o nome de usuário?

1
tail -2 /root/.bashrc
export HISTTIMEFORMAT="%d/%m/%y %T "
export PROMPT_COMMAND='builtin history 1 >> /var/log/root.log' 

Com isso, todos os comandos podem ser registrados (mesmo os que estavam em " sudo su - ").

Minha pergunta : Como posso colocar informações de nome de usuário no arquivo de histórico, portanto não apenas o tempo será registrado, mas o usuário original, que "sudo su -" e nome de usuário está no arquivos de histórico também (ou PID de processo do seu shell, ou qualquer identificador exclusivo)?

    
por newuser999 21.01.2014 / 18:27

2 respostas

4

Quando você inicia um root bash shell como sudo -i ou sudo -s ou sudo su (desde que o shell de login de root seja bash ) ou sudo bash , o usuário original está disponível como $SUDO_USER .

Mas quando iniciado como sudo su - , o ambiente é limpo por su , então você terá que encontrar outra maneira de encontrar o usuário original.

Uma maneira, se você tiver o comando pstree , pode ser:

original_user=${SUDO_USER:-$(pstree -Alsu "$$" |
  sed -n "s/.*(\([^)]*\)).*($USER)[^(]*$//p")}
export HISTTIMEFORMAT="<%F %T> (${original_user:-$USER}) [$$] "
export PROMPT_COMMAND='builtin history 1 >> /var/log/root.log'

A ideia é analisar a saída de pstree -Alsu "$$" que se parece com:

init---xterm(user)---zsh---sudo(root)---su---bash---pstree

Para extrair o user .

    
por 21.01.2014 / 19:22
1

Você não pode Você pode hackear algo, veja a resposta do @StephaneChazelas abaixo.

O arquivo de histórico do shell é específico do usuário. Os comandos sudo serão listados no histórico do usuário real. Se você usa sudo su - , está abrindo um novo shell no qual está logado como root . Quaisquer comandos executados lá estarão no arquivo de histórico root , mas não há como saber quem era seu usuário antes, já que ele está em um shell completamente diferente.

A propósito, usar sudo su - é completamente inútil. Use su - ou sudo -i , ambos com o mesmo resultado.

    
por 21.01.2014 / 18:36

Tags