É política da empresa que os administradores façam login nos servidores por meio de um nome de usuário pessoal e depois executem sudo -i
para se tornarem root. Ao executar sudo -i
, o sudo criará uma variável ambiental chamada SUDO_USER
, que contém o nome de usuário do usuário original.
Existe uma maneira de registrar TODOS os comandos no syslog com algo semelhante à seguinte sintaxe:
${TIME/DATE STAMP}: [${REAL_USER}|${SUDO_USER}]: ${CMD}
Uma entrada de exemplo seria:
Sat Jan 19 22:28:46 CST 2013: [root|ksoviero]: yum install random-pkg
Obviamente, não precisa ser exatamente a sintaxe acima, apenas deve incluir um mínimo do usuário real (por exemplo, root), o usuário sudo (por exemplo: ksoviero) e o comando completo que foi executado (por exemplo, yum instale o random-pkg).
Eu já tentei snoopy
, mas não incluiu a SUDO_USER
variável.
auditd
.auditd
, embora tenha conseguido registrar todos os comandos em execução, ele não inclui aSUDO_USER
variável (ou informação equivalente) e não consigo encontrar uma maneira de incluí-lo. Qualquer ajuda seria muito apreciada!Respostas:
Atualização : mais duas coisas que apareceram nos comentários e nas perguntas seguintes:
auditd
dessa maneira aumentará drasticamente seu volume de log, especialmente se o sistema estiver em uso intenso via linha de comando. Ajuste sua política de retenção de log.Auditd
os logs no host em que são criados são tão seguros quanto outros arquivos na mesma caixa. Encaminhe seus logs para um servidor remoto de coleta de logs, como ELK ou Graylog, para preservar a integridade dos logs. Além disso, acrescentando ao ponto acima, ele permite excluir mais agressivamente os logs antigos.Como foi sugerido por Michael Hampton,
auditd
é a ferramenta correta para o trabalho aqui.Eu testei isso em uma instalação do Ubuntu 12.10, então sua milhagem pode variar em outros sistemas.
Instalar
auditd
:apt-get install auditd
Adicione estas 2 linhas a
/etc/audit/audit.rules
:Eles rastrearão todos os comandos executados por root (
euid=0
). Por que duas regras? Oexecve
syscall deve ser rastreado no código de 32 e 64 bits.Para se livrar das
auid=4294967295
mensagens nos logs, adicioneaudit=1
ao cmdline do kernel (editando/etc/default/grub
)Coloque a linha
session required pam_loginuid.so
em todos os arquivos de configuração do PAM relevantes para o login (
/etc/pam.d/{login,kdm,sshd}
), mas não nos arquivos relevantes parasu
ousudo
. Isso permitiráauditd
obter o usuário que estáuid
chamando corretamente ao ligarsudo
ousu
.Reinicie seu sistema agora.
Vamos entrar e executar alguns comandos:
Isso produzirá algo como isto em
/var/log/audit/auditd.log
:A
auid
coluna contém o usuário que está chamandouid
, o que permite filtrar os comandos executados por esse usuário comIsso lista os comandos que o usuário executou como root.
Fontes:
fonte
Lembre-se de que o próprio sudo registra todos os comandos sudo no syslog; portanto, todos os usuários privados devem ser instruídos a não apenas sudo para obter um shell raiz, mas para:
O problema com esta ou qualquer outra abordagem em que pensei é que, como
root
usuário, é bastante difícil impedir que um usuário evite qualquer tipo específico de log. Portanto, qualquer coisa que você tentar será <100%, lamento dizer.Educação, documentação, fiscalização e, acima de tudo, confiança é o que é necessário.
fonte
Uma vez fui confrontado com o mesmo problema e tive que encontrar uma solução rápida e suja - cada usuário sudo terá seu próprio arquivo de histórico assim que executar o comando
sudo -i
Em
/root/.bashrc
eu adicionei a seguinte linha -Portanto, todo usuário que deseja fazer o root terá um arquivo de histórico .bash_history-username.
Outro método -
Adicione o código a seguir
/root/.bashrc
e ele acrescentará o nome de usuário, sudo-user e o comando ao arquivo de log, sempre que o nível de aviso estiver definido, provavelmente / var / log / messages.Crédito para - http://backdrift.org/logging-bash-history-to-syslog-using-traps
fonte
/bin/sh
,unset HISTFILE
ou/bin/bash --norc
.Na verdade, vários estabelecimentos proíbem o uso do auditd, pois consome muitos recursos e pode resultar em uma oportunidade para ataques de negação de serviço.
Uma solução é configurar o shell Korn mais recente (ksh-93, consulte http://kornshell.com/ para obter detalhes) para registrar todos os comandos executados como raiz em um servidor syslog remoto e, em seguida, exigir pela política que, exceto em situações de emergência situações, os administradores de sistema efetuam logon com contas pessoais e executam o shell Korn aprimorado via sudo. O exame dos logs pode detectar quando um administrador lança outro shell do shell aprovado para cobrir seus rastros, e a SA pode ser instruída conforme necessário.
fonte
O Sudo tem algo chamado sudoreplay quando as sessões ativadas são registradas e podem ser reproduzidas mais tarde, funciona de forma semelhante ao
script
comando que cria um texto datilografado da sessão do terminal que posteriormente pode ser reproduzido com oscriptreplay
comando.fonte
Não que exista algo errado com qualquer uma das outras respostas até agora, mas se você decidir que
sudo
o registro viasyslog
é satisfatório, posso sugerir uma ruga: registre-o pela rede em um host de auditoria remota.Isso contorna o problema de "agora que me tornei root, posso remover qualquer vestígio de minha violação" dos logs ". Agora você pode ser root na caixa local, mas não pode chamar esse pacote de log da rede e você (presumivelmente) não possui privilégios de root no host de auditoria remota.
Venho fazendo isso com algumas das redes que gerencio há anos, e há outras duas vantagens de sinal:
Em primeiro lugar, há um lugar na rede para verificar todos os syslogs, o que permite uma correlação muito mais fácil de incidentes, assim como um balcão único para investigações como "Quando
juno
estava reclamando que o servidor NFShera
não estava respondendo, havia mais alguém reclamando sobre a mesma coisa ao mesmo tempo? Se sim,hera
é provável que seja o problema, vamos ver o que ela registrou; caso contrário,juno
a conexão de rede é mais suspeita, vamos ver o que maisjuno
registrou naquele momento. ".Em segundo lugar, a rotação de logs do syslog se torna mais fácil: você não mantém cópias dos logs nos hosts locais por mais de alguns dias, mas garante que o servidor de auditoria tenha grandes quantidades de espaço em disco e mantenha todos os syslogs por vários anos. Além disso, se, digamos, você desejar gravá-los na mídia WORM para, por exemplo, fins de auditoria forense, você precisará comprar apenas uma unidade WORM.
fonte
Desde a versão 2.0.0, o snoopy pode registrar variáveis de ambiente arbitrárias.
No entanto, uma contribuição recente apontou que o proprietário do log do tty é uma resposta bastante eficaz e elegante à pergunta "Quem executou esse comando como root?".
Divulgação: Eu sou mantenedor do Snoopy.
fonte