history não é exibido como usuário sudo

4

Em algumas das minhas instalações do ubuntu, quando executo sudo su e me torno usuário sudo, posso digitar history e ver uma lista de comandos executados como usuário sudo. No entanto, na minha instalação do ubuntu, por alguma razão, quando eu executo sudo su e digite history , acabei de receber isso:

$ sudo su
# history
1  history 

Mas eu sei com certeza que muitos comandos foram executados como usuário sudo, mas quando eu saí e ssh de volta para o meu servidor Ubuntu, eles não são exibidos, como eles fazem nos outros servidores. Eu tenho algum interruptor ou algo desativado neste servidor? Como posso recuperar o acesso para ver o histórico de comandos executados como usuário sudo?

    
por JohnMerlino 03.12.2013 / 23:59

2 respostas

1

Algumas possibilidades porque você não mantém o histórico da shell:

  • Seu shell de root não é /bin/bash , mas /bin/sh (link simbólico para /bin/dash ). Altere isso com o comando chsh .
  • O sistema de arquivos em que /root reside é montado como somente leitura, portanto, o arquivo de histórico não pode ser gravado.
  • A variável HISTFILE está definida para um valor diferente de /root/.bash_history . Um arquivo vazio desativa o histórico, outros valores são usados como local para gravar o histórico.
por Lekensteyn 04.12.2013 / 00:13
5

history é o que é conhecido como interno. É essencialmente uma função bash que opera dentro de sua sessão (como o resto do registro que alimenta ~/.bash_history também).

Quando você executa sudo something , isso está acontecendo na sua sessão, não na raiz. Além disso, quando algo é executado com o sudo, ele não gera uma sessão bash separada e, em seguida, executa o comando. É apenas executado com os privilégios corretos (estou simplificando um pouco a verdade).

Isso suavemente reduz o ponto de casca diferente de Lekensteyn. É verdade, isso não importa. Nenhuma raiz bash ou dash é o shell que está executando o comando. Você pode provar isso executando algo como sudo -u $USER whoami e, em seguida, observando ~/.bash_history . Existe apenas um comando. Se isso fosse outro shell, eu esperaria ver sudo -u $USER whoami seguido por whoami .

Também sudo su -c 'echo $0' produz o shell pai ( bash no meu caso), embora eu não tenha certeza se isso é tão significativo.

De qualquer forma, quando você executa sudo something , ele entra no seu próprio ~/.bash_history . Se você quiser ver o comando que você executou com sudo , execute:

grep -E '^sudo' ~/.bash_history
    
por Oli 04.12.2013 / 13:12