Se eu:
[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~]
Então eu 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 vê-lo nos logs:
[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log]
Minha pergunta: como ativar o logon dos comandos no "sudo su -"?
OS é um Ubuntu 12.04, mas a questão é em 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]
sudo su -
, ele também poderá remover todas as entradas de log que você pode fazer com suas ações. Se você deseja 100% de certeza no seu registro, precisará restringirsudo
bastante e proibirsudo su
totalmente.Respostas:
Como você está no Ubuntu 12.04, veja as habilidades de registro de E / S ativadas através das opções
log_input
elog_output
.IMPLEMENTAÇÃO: Versão Sudo pelo menos: 1.7.4p4 necessária.
/etc/sudoers
modificação: Tudo que você precisa fazer é adicionar duas tags a todas as entradas necessárias do sudoers (onde "su" foi especificado, com comando ou alias). LOG_INPUT e LOG_OUTPUT.Exemplo:
Adicione a seguinte estrutura de diretório de log padrão a
sudoers
:fonte
Seu
grep
ao fazersudo su -
falha porque você não está correndoecho 1234567zz
, você está executandosu -
, que inicia um shell. O shell está executando o seuecho
.Isso é intencional, e o registro de cada execução de comando inundaria seu syslog com informações inúteis (geralmente existem vários programas que são 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 desu
.sudo -i
faz a mesma coisa.fonte
grep 'COMMAND=/bin/su -' *
(ou sem curinga :)grep 'COMMAND=/bin/su -' /var/log/auth.log
?sudo -
) é registrado e sua saída atualizada mostra isso. É tudo o que estamos falando aqui. Os outros comandos, como oecho
após você alternar os usuáriossudo -
, não são comandos sudo e , portanto, (conforme minha resposta) não estão conectadosauth.log
. Somente comandos individuais explicitamente precedidos porsudo
serão registrados. Portanto,sudo echo
é registrado, mas simplesmenteecho
não é, independentemente do fato de você ter mudado para o superusuário.Para aumentar a complexidade, aqui estão três maneiras de registrar os comandos emitidos no "sudo su -":
Quanto ao que é adequado, realmente depende do que você está tentando realizar com o log.
1) Histórico de comandos Bash
Você deseja configurar a facilidade do histórico para garantir a manutenção de linhas suficientes, sem sobrescrever a partir de sessões diferentes, sem ignorar comandos e carimbos de data / hora apropriados. (Veja variáveis HIST * no manual do bash ). Subvertido facilmente editando o arquivo de histórico, manipulando o ambiente ou executando outro shell.
2) invólucro execve
snoopylogger é 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, se não estiver, definaLD_PRELOAD
e reinicie (comexec $SHELL --login "$@"
). Como alternativa, você pode adicionar uma entrada para /etc/ld.so.preload com$LIB/snoopy.so
ou caminho equivalente (s) para as versões de 32/64-bit de snoopy.so.Embora mais difícil, a
LD_PRELOAD
versão da variável de ambiente acima pode ainda ser subvertida manipulando o ambiente de execução para que o código snoopy não seja mais executado.O syslog deve ser enviado fora da caixa para que o conteúdo seja confiável.
3) auditoria
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á realmente perguntando: "Existe uma maneira de registrar qual efeito o usuário teve no sistema após a emissão
sudo su -
". O syslog deve ser enviado fora da caixa para que o conteúdo seja confiável.Esta resposta do Serverfault parece ser uma configuração bastante abrangente para uso com o auditd.
Existem outras sugestões para uma pergunta semelhante sobre a falha do servidor .
fonte
Porque é isso
sudo
que está fazendo o log; ele registra comandos do sudo. No primeiro caso,sudo echo
é registrado. No segundo caso,sudo su
é registrado (procure-o/var/log/auth.log
).su
é "alternar usuário", por padrão, para root. Tudo o que você faz depois disso não passasudo
. É o mesmo que se você tivesse feito login como root; o login em si é registrado, mas não todo comando.fonte
Como outros já disseram,
sudo
não posso fazer isso.Em vez disso, use
auditd
. Se você deseja registrar tudo o que é feito pelo root (incluindo, por exemplo, o feito pelo crontab), use o seguinte:ETA: Observe que o registro de tudo afetará o desempenho, portanto, você provavelmente desejará limitar um pouco. Veja
man auditctl
para exemplos.Se você deseja registrar apenas os syscalls nos quais o uid de login original não é root, use este:
Os logs geralmente terminam em /var/log/audit/audit.log. Você pode procurá-los com
ausearch
.Há mais informações nas páginas man para
auditctl
,audit.rules
eausearch
.fonte
sudo su -
então você está de volta à estaca zerosudo su -
estará dentro~/.bash_history
se o seu shell for bash.echo 1234567zz
estará dentro/root/.bash_history
se o shell do root for bash.A explicação disso já foi publicada por goldilocks.
fonte
Deseja que o su faça logon porque considera uma falha de segurança? Você já pensou nesse comando?
sudo bash
tão ruim imho.Se você está preocupado com o que as pessoas podem fazer com o sudo, precisará restringir seu uso. Você pode restringir os comandos que eles podem executar também. Restrinja o acesso ao / bin / su, se isso o preocupa.
fonte
Que tal isso:
ou
ou uma linha longa:
sudo -E preserva o ambiente PROMPT_COMMAND é executado antes de cada prompt
fonte
Se isso ajudar, você pode usar a opção "NOEXEC" de sudoers.
Você precisa defini-lo como
Isso impedirá que o shell escape e o usuário não poderá usar sudo -i ou sudo -s ou sudo su -
Isso vem com uma desvantagem, no entanto, qualquer escape de shell será desativado. por executar script de dentro de um script também será negado.
fonte
Não vamos complicar: sempre que
sudo
chamado, ele informa esse fato em algum arquivo/var/log
(no seu sistemaauth.log
, na caixa do OS Xsystem.log
).sudo
relata seus argumentos de linha de comando, mas não tem conhecimento do que pode acontecer dentro de um comando interativo comosu
.Isso não significa que não há registro do que acontece em um subshell raiz: os comandos do shell são salvos no histórico do shell. No meu sistema, o salvamento do histórico do root é ativado por padrão, então tudo o que preciso fazer é procurar
~root/.sh_history
um registro do que foi feito (a menos que alguém tenha mexido nele, é claro, mas eles também podem mexer/var/log
).Eu acho que essa é a melhor solução para você. Caso contrário, vá à cidade com
auditd
, como @Jenny sugeriu.PS. Se o histórico do root ainda não estiver ativado, a ativação dependerá de qual shell ele usar. Para
bash
, definaHISTORY
eHISTFILESIZE
com um número grande o suficiente (o padrão é 500, diz o meu manual). Se desejar, você pode especificar onde o histórico é salvo, definindoHISTFILE
um caminho (padrão$HOME/.sh_history
)fonte
Você pode criar um texto datilografado da sua sessão usando
script(1)
:Agora você pode
grep
(observe que os#
prompts estão realmente registrados/tmp/my_typescript
):Como alternativa, você pode assistir a toda a sessão novamente com
scriptreplay(1)
:O arquivo
/tmp/my_typescript.timing
contém informações quando cada comando foi chamado. Existem outras ferramentas comottyrec
oushelr
que têm ainda mais sinos e assobios.fonte