Embora essa pergunta tenha sido feita por um indivíduo que deseja gravar suas próprias sessões, um caso de uso alternativo pode ser um administrador de sistema que deseja acompanhar o que vários usuários estão fazendo.
Receio que rodar script
dentro do sistema bashrc
possa não ser adequado quando os usuários da máquina relutam em fazer gravações de suas sessões.
Os usuários que desejam permanecer no modo anônimo podem ignorar o registro solicitando ao sshd que abra um shell diferente (por exemplo zsh
) ou execute bash --rcfile ___
para impedir o /etc/bash.bashrc
carregamento.
Uma abordagem alternativa
Este guia de 2008 ( arquivado ) usa um método diferente para forçar script
a execução quando um usuário efetua login com ssh, o que exige que os usuários efetuem login com uma chave pública / privada.
Isso é feito adicionando um script ao .ssh/authorized_keys
arquivo do usuário , na frente da chave:
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
O script log-session
( arquivado ) decide se deve ou não ser executado /usr/bin/script
para registrar a sessão deste usuário.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
Para impedir que o usuário remova o comando adicionado, o administrador precisará assumir a propriedade do authorized_keys
arquivo do usuário .
chown root:root ~user/.ssh/authorized_keys
Infelizmente, isso significa que o usuário não poderá adicionar nenhuma chave adicional ou, mais importante, revogar a chave existente se ela estiver comprometida, o que está longe do ideal.
Ressalvas
É comum que a configuração padrão do sshd permita que os usuários executem o SFTP em seu login ssh. Isso oferece aos usuários uma maneira de editar arquivos sem que as alterações sejam registradas. Se o administrador não desejar que os usuários possam fazer isso, ele deverá ativar algum log para SFTP ou desativar o serviço. Embora, mesmo assim, os usuários ainda possam fazer alterações invisíveis nos arquivos executando algo parecido com isto em seus terminais:
curl "http://users.own.server/server/new_data" > existing_file
Pode ser possível monitorar alterações como essa usando um sistema de arquivos copiar na gravação que registra todo o histórico de arquivos.
Mas um truque semelhante permitiria ao usuário executar comandos sem que eles fossem registrados:
curl "http://users.own.server/server/secret_commands_824" | sh
Não conheço nenhuma solução fácil para isso. As possibilidades podem ser:
- Registrando todos os dados da rede (e desembaraçando-os posteriormente).
- Registrando todas as chamadas do sistema.
Esse tipo de coisa pode ser possível com o auditd .
Mas mesmo assim...
É improvável que o registro de sessões do usuário forneça segurança real aos administradores. Por padrão, um usuário pode manipular apenas seus próprios arquivos e não pode prejudicar o sistema. Se um usuário mal-intencionado conseguir escalar privilégios, ele poderá desativar o log e excluir os logs (a menos que o administrador tenha configurado os logs para serem armazenados em uma máquina separada, apenas de forma anexada).
Os administradores que registram automaticamente as sessões do usuário provavelmente devem informar aos usuários que isso está sendo feito . Em algumas jurisdições, essa forma de coleta de dados pode violar as leis de dados ou privacidade . E, no mínimo, seria respeitoso para os usuários conscientizá-los.
É mais provável que um administrador esteja interessado em registrar as sessões dos sudo
usuários. Talvez isso possa ser resolvido em uma resposta diferente, ou mesmo em uma pergunta diferente.
exec
no início da linha. deve iniciarscript -f
o mesmo PID do shell.