Como faço para gravar todas as entradas e saídas de terminal em um arquivo local por padrão para cada sessão?

0

Estou ciente de que o comando script pode ser usado para gravar todas as entradas de teclado e saídas de tela em um arquivo, mas isso deve ser invocado toda vez que uma sessão de terminal for iniciada. Eu mantenho as versões com timestamp dos meus arquivos .bash_history para que os comandos antigos não sejam perdidos depois que $ HISTSIZE for atingido. Minha instrução $ HISTFILE em .bashrc é HISTFILE=~/.bash_history_$(date '+%Y%m%d_%H_%M_%S_%N').txt . Isso satisfaz minha necessidade de criar um log de comandos executados, mas não grava a saída em um arquivo. Existe algo que eu possa colocar em .bashrc ou .profile que irá gravar todas as entradas stdin, e stdout & stderr saída para um arquivo timestamped? Isso também seria útil para monitorar as atividades dos usuários, mas eu só preciso fazer referência no futuro.

EDITAR : Eu achei que se eu colocasse

script /ramdisk/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt ; exit

no final de ~ / .profile, para um usuário de teste, isso se comportou como eu queria.

O ;exit extra após o comando script sai do terminal. Digitar "exit" quando o usuário está logado sai da sessão script . Quando isso sai de ~ / .profile, a "saída" extra encerra a sessão SSH / terminal. Eu pretendo criar funcionalidades adicionais que serão chown do arquivo para root e chmod 600 para que apenas o root possa lê-lo. De lá, ele será movido para um local seguro.

Além disso, a coloração é visível com cat e more . Abrindo-o em um editor, mostra os caracteres de controle usados para gerar a cor. Estou bem com isso.

    
por user208145 29.06.2016 / 00:44

2 respostas

3

Se seu objetivo é monitorar o sistema, você deseja pam_tty_audit . Como o nome indica, pam_tty_audit é um módulo pam que, quando configurado corretamente, é invocado toda vez que um usuário abre uma sessão (e recebe um TTY). O módulo registra todas as entradas & saída e envia tudo o que grava para o daemon auditd . Você pode então executar consultas no daemon auditd para visualizar os logs.

O RedHat fornece um guia interessante sobre como começar a usar o pam_tty_audit : link
Para distros não baseados em RedHat ou Fedora, o guia ainda funciona, mas pode precisar de pequenos ajustes para os nomes dos arquivos em /etc/pam.d/ .

Note que não é completamente infalível. Existem maneiras de executar comandos sem um TTY. Por exemplo, ao conectar via ssh, você pode fazer ssh foo.example.com bash -i e, como um comando foi especificado, nenhum TTY é alocado. Embora existam coisas que você pode fazer para evitar isso.

Você também deseja garantir que o acesso ao log esteja protegido. pam_tty_audit registra a atividade ALL TTY, incluindo as senhas que você digita.

    
por 29.06.2016 / 05:08
2

Se você realmente quiser, pode criar um programa (ou shell script) que chame script escrevendo em um arquivo datilografado com timestamp (e, por sua vez, chamando seu shell real) e faça que programa seu shell padrão em /etc/passwd .

Existem algumas armadilhas:

  • talvez você tenha que adicionar este programa a /etc/shells
  • fazer isso define a variável de ambiente SHELL , que é usada de várias maneiras. Substituir isso para evitar loops (e outro mau comportamento):
    #!/bin/sh
    SHELL=/bin/bash
    export SHELL
    script -c "$SHELL" $HOME/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt
    
por 29.06.2016 / 00:52