Execute o comando em ssh login e logout quando o comando terminar

2

Gostaríamos de acompanhar a atividade do usuário em uma de nossas máquinas Centos7. Façam Assim, o gerenciamento decidiu usar script e scriptreplay para basicamente registrar a atividade do usuário e repeti-la. Fiz algumas pesquisas do meu lado sobre como devemos projetá-lo, mas as soluções que dependem de auditd são rejeitadas aqui pelo gerenciamento, e colocar o script no perfil do usuário leva a alguns problemas, conforme explicado abaixo.

O comportamento esperado é o seguinte:

  1. Quando um usuário faz login no servidor via SSH, o comando de script é gerado e começa a registrar a atividade do usuário em um arquivo.
  2. Quando o usuário termina no servidor, ele faz logoff (geralmente digita exit ou CTRLD).
  3. O processo de script
  4. para e fecha o arquivo.

Agora, os problemas:

  1. Minhas pesquisas mostraram que esse script realmente cria outro shell. Então, se eu colocar - digamos - script script.log no .bash_profile de todos os usuários (ou no skel), ele emitirá um novo shell para o usuário após o login, e o usuário poderá facilmente abortar o processo e começar a digitar comandos em sua sessão SSH usual. Como posso forçar meu script a expulsar o usuário quando ele sai do shell gerado pelo comando de script?

  2. A saída do script (ou seja, os comandos dos usuários) deve ser armazenada em um local privado onde os não-sudoers não podem fazer nada (sem permissões R / W / E). Como podemos executar scripts com privilégios elevados no login do usuário quando o usuário não é privilegiado?

por nxr_jivra 09.08.2016 / 05:14

1 resposta

2

Quanto ao forçar um comando, sshd tem uma opção ForceCommand :

Forces the execution of the command specified by ForceCommand, ignoring any command supplied by the client and ~/.ssh/rc if present. The command is invoked by using the user's login shell with the -c option.
This applies to shell, command, or subsystem execution. It is most useful inside a Match block. The command originally supplied by the client is available in the SSH_ORIGINAL_COMMAND environment variable.

Então, ao ler isso, se você definir ForceCommand para script , isso deve fazer aproximadamente o que você deseja.

Para manter a trilha de auditoria segura, uma solução em um sistema com vários servidores seria aprender com o syslog e enviar as entradas pela rede para um host físico diferente. Isso praticamente evita que os usuários acessem os registros depois de gerados. Na falta de qualquer outra coisa, você provavelmente poderia improvisar algo apenas para enviar os logs para uma porta diferente no host local, onde um daemon os coleta e armazena. (Tendo tentado o óbvio, você não pode script -f /dev/tcp/localhost/8888 , pois /dev/tcp/... precisaria ser tratado pelo bash, então eu acho que você precisaria de mkfifo um caminho de comunicação como no exemplo de manual para script -f )

    
por 09.08.2016 / 07:15