Onde está o log de comandos usados no Linux?

5

No Linux, geralmente usamos muitos comandos e é difícil lembrar de todos eles.

 history
O comando

fornece a lista de comandos que usamos anteriormente, mas seu limite é menor. Novos comandos são sobrescritos em comandos antigos, então os comandos antigos estão faltando. Eu acho que em algum lugar o log dos comandos é armazenado no sistema.

Esse registro está disponível para abrir e ler? Se possível, podemos alterar o tamanho máximo do log que ele pode manipular?

A saída do comando history depende do login-user?

    
por Abdul Gafoor 08.10.2015 / 13:46

5 respostas

6

O arquivo ~/.bash_history salva a lista de comandos executados. Pelo menos no CentOS esse arquivo existe, não sei se existe em outras distros.

    
por 08.10.2015 / 14:24
14

Uma solução simples é aumentar o número de comandos salvos e retornados por history . Se você usar o bash, adicione esta linha ao seu ~/.profile :

export HISTSIZE=100000
export HISTFILESIZE=999999

De man bash :

   HISTFILESIZE
          The maximum number of lines contained in the history file.  When
          this  variable  is  assigned  a value, the history file is trun‐
          cated, if necessary, to contain no  more  than  that  number  of
          lines  by removing the oldest entries.  The history file is also
          truncated to this size after writing it when a shell exits.   If
          the  value  is  0,  the  history file is truncated to zero size.
          Non-numeric values and numeric values  less  than  zero  inhibit
          truncation.   The  shell  sets the default value to the value of
          HISTSIZE after reading any startup files.
   HISTSIZE
          The number of commands to remember in the command  history  (see
          HISTORY  below).   If  the value is 0, commands are not saved in
          the history list.  Numeric values less than zero result in every
          command  being  saved  on  the history list (there is no limit).
          The shell sets the  default  value  to  500  after  reading  any
          startup files.
    
por 08.10.2015 / 14:06
6

Não existe tal log, pelo menos não por padrão.

Existem ferramentas que você pode instalar, como acct ("Utilitários de Contabilidade GNU para contabilidade de processos e login") que podem rastrear todos os programas executados no sistema.

acct é empacotado para a maioria das distribuições de linux (provavelmente todas exceto minúsculas distros). A página inicial está no link

acct fornece os seguintes comandos, lastcomm provavelmente faz o que você está pedindo:

ac prints statistics about users' connect time. ac can tell you how long a particular user or group of users were connected to your system, printing totals by day or for all of the entries in the wtmp file.

accton turns accounting on or off.

lastcomm lists the commands executed on the system, most recent first, showing the run state of each command. With last, you can search the acct file for a particular user, terminal, or command.

sa summarizes the information in the acct file into the savacct and usracct file. It also generates reports about commands, giving the number of invocations, cpu time used, average core usage, etc.

dump-acct dump-utmp display acct and utmp files in a human-readable format.

    
por 08.10.2015 / 14:00
1

Vou adotar uma abordagem diferente para responder à sua pergunta. Enquanto o ~/.bash_history log faz comandos de log, scripts, one-liners, etc. o usuário tem controle total sobre seu histórico.

Do ponto de vista de um SA, você provavelmente não quer isso, em vez disso, você pode querer auditar o que é executado no sistema?

Como faço isso usando auditd ; Algumas regras de exemplo estão abaixo para /etc/auditd/auditd.rules : -w /sbin/mkfs -p x -k sbin_mkfs -w /sbin/mke2fs -p x -k sbin_mke2fs -w /sbin/mkswap -p x -k sbin_mkswap -w /sbin/mkinitrd -p x -k sbin_mkinitrd -w /sbin/modinfo -p x -k sbin_modinfo -w /sbin/modprobe -p x -k sbin_modprobe

auditd , então, registra em /var/log/audit/ quando qualquer um dos comandos acima é executado ( -p x ) e você pode visualizar todos os comandos que foram executados no sistema e por quem. Tem um buffer em que você especifica seu tamanho, pode configurar auditd para sobrescrever logs antigos, etc.

Isso parece ser o que você quer?

    
por 09.10.2015 / 02:33
0

Se você não usar bash , não estará em ~/.bash_history , mas ~/.<shell name>_history . Por exemplo, eu uso zsh , meu log está em ~/.zsh_history .

    
por 09.10.2015 / 02:16