histórico de linha de comando abrangente do Linux

3

Eu tenho servidor Ubuntu. No servidor, vários usuários podem operar. Eles usam ssh.

Eu preciso ter um histórico de linha de comando para todos eles em um só lugar mostrando a hora, o usuário e o comando. Também gosto de impedir que os usuários editem o arquivo do histórico. De um modo geral eu preciso gravar o que eles fazem no servidor e impedi-los de modificar os registros.

Existe alguma solução para isso?

    
por darpet 16.03.2011 / 10:00

3 respostas

4

Eu acredito que isso seja possível. Eu começaria criando um arquivo de log por usuário (porque não tenho certeza dos efeitos colaterais do compartilhamento de um arquivo de histórico em pool). Então, por exemplo, vou

mkdir /var/log/history
touch /var/log/history/soneil
chown root:soneil /var/log/history/soneil
chmod 660 /var/log/history/soneil

Portanto, eu tenho um arquivo de histórico que pertence a root, mas 'soneil' pode gravar em.

Então, um pouco de mágica: chattr +a /var/log/history/soneil

Agora, 'soneil' só pode ser acrescentado à história, é de outra maneira imutável para todos, menos para o root.

Então eu tenho meu arquivo de log preparado, eu só preciso usá-lo.

em / etc / bashrc (no Ubuntu eu notei que isso é /etc/bash.bashrc):

export HISTFILE=/var/log/history/$USER
readonly HISTSIZE
readonly HISTFILE
readonly HISTIGNORE
readonly HISTCONTROL

O readonly builtin é bastante auto-explicativo, e acredito que poderia ser igualmente aplicável à função do SvenW também.

Testado, isso tem o mesmo problema que o arquivo de histórico normal; está escrito no logout e não tem registro de data e hora. então, ordenar eventos seria confuso. Eu acho que se eu tivesse que fazer isso sozinho, eu adicionaria

PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
readonly PROMPT_COMMAND

para forçar o histórico a ser liberado para o disco toda vez que um novo prompt for desenhado. Há também um HISTTIMEFORMAT envar que adicionará registros de data e hora ao arquivo de histórico, mas em um formato não muito bonito (configurar o var em um formato mais bonito afeta apenas a saída de 'history', não o conteúdo do próprio arquivo).

    
por 16.03.2011 / 14:14
3

Acho que o que você quer fazer não é realmente possível. Você se preocupa principalmente com quem alterou um arquivo ou deseja explicitamente ver que eles usaram pico para fazer isso? Se o primeiro for o caso, você pode usar um sistema de arquivos compartilhado com recursos de registro (ou seja, NFS, Samba) e montar os diretórios de usuários dessa maneira. Dependendo da configuração, isso registrará todas as ações de arquivo.

--- Editar

Pensando nisso um pouco mais, acho que você poderia usar traps para fazer o que quiser, mas essa é uma solução hack e evitará algumas funcionalidades bash:

Coloque o seguinte no seu /etc/bashrc (ou similar):

function commandlogger
{
   LASTENTRY=$(fc -ln -0)
   logger -p local1.info -t commandlogger -i -- "${USER} - ${LASTENTRY}"
}

trap commandlogger DEBUG

Isso gerará uma armadilha bash sempre que um usuário inserir um comando que registrará esse comando no syslog. Você pode então usar grep procurando pela tag commandlogger . Além disso, as entradas serão registradas somente após o próximo comando.

    
por 16.03.2011 / 11:10
2

Como Khaled disse, a melhor maneira de lidar com isso não é permitir que muitas pessoas façam login na mesma conta usando ssh, mas dar a cada usuário seu próprio login e obter privilégios através da sudoing de comandos individuais com privilégios da conta compartilhada.

Se você for dessa maneira, o sudo não apenas registrará os logs do sistema usando o syslog, mas se você precisar de um registro definitivo à prova de adulteração de quem fez o quê, você poderá ter esses syslogs também enviados para um servidor central de logs. Nenhum dos usuários tem acesso.

Editar : Eu tentei fazer isso ativando a contabilidade do processo e, embora isso forneça uma lista definitiva de cada comando executado por cada usuário, ele não parece registrar argumentos e sinalizadores, apenas o comando em si. Alguém sabe alguma maneira de obter lastcomm para relatar argumentos e sinalizadores?

    
por 16.03.2011 / 10:33