
Se eu:
[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~]
Então posso ver isso nos logs:
[root@notebook /var/log] grep 123456uu *
auth.log:Jan 9 17:01:51 notebook sudo: user : TTY=pts/3 ; PWD=/home/user ; USER=root ; COMMAND=/bin/echo 123456uu
[root@notebook /var/log]
mas se eu:
[user@notebook ~] sudo su -
[root@notebook ~] echo 1234567zz
1234567zz
[root@notebook ~]
Não consigo ver isso nos logs:
[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log]
Minha pergunta: Como posso ativar o log dos comandos dentro do "sudo su -"?
O sistema operacional é um Ubuntu 12.04, mas a questão é geral.
ATUALIZAÇÃO#1:
[user@notebook ~] sudo su -
[sudo] password for user:
[root@notebook ~] echo zizizi
zizizi
[root@notebook ~] cd /var/log
[root@notebook /var/log] grep -iIR 'zizizi' *
[root@notebook /var/log] grep 'COMMAND=/bin/su -' *
auth.log:Jan 10 15:42:42 notebook sudo: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/su -
[root@notebook /var/log]
Responder1
Como você está no Ubuntu 12.04, dê uma olhada nas habilidades de registro de E/S ativadas por meio das opções log_input
e log_output
.
log_input
Se definido,
sudo
executará o comando em um pseudo tty e registrará todas as entradas do usuário. Se a entrada padrão não estiver conectada ao tty do usuário, devido ao redirecionamento de E/S ou porque o comando faz parte de um pipeline, essa entrada também será capturada e armazenada em um arquivo de log separado.A entrada é registrada no diretório especificado pela
iolog_dir
opção (/var/log/sudo-io
por padrão) usando um ID de sessão exclusivo incluído na linha de log normal do sudo, prefixado comTSID=
. Aiolog_file
opção pode ser usada para controlar o formato do ID da sessão.Observe que a entrada do usuário pode conter informações confidenciais, como senhas (mesmo que não sejam exibidas na tela), que serão armazenadas no arquivo de log sem criptografia. Na maioria dos casos, registrar a saída do comando via log_output é tudo o que é necessário.
log_output
Se definido,
sudo
executará o comando em um pseudo tty e registrará todas as saídas enviadas para a tela, semelhante ao comando script(1). Se a saída padrão ou erro padrão não estiver conectado ao tty do usuário, devido ao redirecionamento de E/S ou porque o comando faz parte de um pipeline, essa saída também será capturada e armazenada em arquivos de log separados.A saída é registrada no diretório especificado pela
iolog_dir
opção (/var/log/sudo-io
por padrão) usando um ID de sessão exclusivo incluído na linha de log normal do sudo, prefixado comTSID=
. Aiolog_file
opção pode ser usada para controlar o formato do ID da sessão.Os logs de saída podem ser visualizados com o utilitário sudoreplay(8), que também pode ser usado para listar ou pesquisar os logs disponíveis.
IMPLEMENTAÇÃO: Versão Sudo pelo menos: 1.7.4p4 necessária.
/etc/sudoers
modificação: tudo o que você precisa fazer é adicionar duas tags a todas as entradas necessárias do sudoers (onde "su" é especificado, com comando ou alias). LOG_INPUT e LOG_OUTPUT.
Exemplo:
%admins ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: ALL
Adicione a seguinte estrutura de diretório de log padrão a sudoers
:
Defaults iolog_dir=/var/log/sudo-io/%{user}
Responder2
Seu grep
ao fazer sudo su -
falha porque você não está executando echo 1234567zz
, você está executando su -
, o que inicia um shell. O shell está executando o seu arquivo echo
.
Isso é deliberado, e registrar cada comando executado inundaria seu syslog com informações inúteis (geralmente há muitos programas executados nos bastidores que você normalmente não vê).
Se você mudar seu grep para grep 'COMMAND=/bin/su -' *
você verá.
sudo su -
também é um uso inútil de su
. sudo -i
faz a mesma coisa.
Responder3
Aumentando a complexidade, aqui estão três maneiras de registrar os comandos emitidos dentro do "sudo su -":
- Confie no histórico de comandos bash
- Instale um wrapper de registro executivo
- Use o auditd do SELinux
Quanto ao que é adequado, realmente depende do que você está tentando realizar com o registro.
1) Histórico de comandos Bash
Você gostaria de configurar o recurso de histórico para garantir a manutenção de linhas suficientes, não sobrescrever sessões diferentes, não ignorar comandos e carimbos de data/hora apropriados. (Veja variáveis HIST* nomanual do bash). Facilmente subvertido editando o arquivo de histórico, manipulando o ambiente ou executando outro shell.
2) wrapper executivo
Registrador Snoopyé um. Adicione uma verificação de /etc/profile
que a biblioteca do logger está no mapa de memória do processo ( /proc/<pid>/maps
) e, caso contrário, defina LD_PRELOAD
e reinicie (com exec $SHELL --login "$@"
). Alternativamente, você pode adicionar uma entrada em /etc/ld.so.preload com $LIB/snoopy.so
oucaminho(s) equivalente(s)às suas versões de 32/64 bits do snoopy.so.
Embora mais difícil, a LD_PRELOAD
versão da variável de ambiente acima ainda pode ser subvertida pela manipulação do ambiente de execução para que o código snoopy não seja mais executado.
O Syslog deve ser enviado off-box para que o conteúdo seja confiável.
3) auditado
Um pouco mais simples de configurar do que o wrapper execve, mas mais difícil de extrair as informações. Esta é a resposta à pergunta que você provavelmente está fazendo: "Existe uma maneira de registrar o efeito que o usuário teve em um sistema após a emissão sudo su -
". O Syslog deve ser enviado off-box para que o conteúdo seja confiável.
EsseResposta de falha no servidorparece ser uma configuração bastante abrangente para uso com auditd.
Existem algumas outras sugestões para umpergunta semelhante sobre serverfault.
Responder4
Como outros já disseram, sudo
não posso fazer isso.
Em vez disso, use auditd
. Se você quiser fazer logontudofeito pelo root (incluindo, por exemplo, coisas feitas pelo crontab), use isto:
sudo auditctl -a exit,always -F euid=0
ETA: Observe que registrar tudo afetará o desempenho, então você provavelmente desejará limitá-lo um pouco. Veja man auditctl
exemplos.
Se você deseja apenas registrar syscalls onde o uid de login original não é root, use isto:
sudo auditctl -a exit,always -F euid=0 -F auid!=0
Os logs geralmente terminarão em /var/log/audit/audit.log. Você pode pesquisá-los com ausearch
.
Há mais informações nas páginas de manual de auditctl
, audit.rules
e ausearch
.