Executar programa toda vez que alguém efetua login via SSH em uma caixa do Linux

10

Eu tenho um pequeno servidor SSH e gostaria de escrever um script para ser executado toda vez que alguém fizer login via SSH.

Agora, como eu faria isso?

Eu gostaria que o script fosse executado toda vez que alguém fizesse login, e eu preciso ter acesso a pelo menos o nome de usuário da pessoa que fez o login e o endereço IP do qual a pessoa fez login.

Eu pensei em usar /etc/bash.bashrc , mas essa é uma boa solução? Por exemplo, existe uma maneira de um usuário desativar seu uso e, assim, desativar meu script? Se sim, quais são minhas outras opções?

Obrigado.

    
por houbysoft 13.06.2011 / 03:12

4 respostas

12

O mecanismo a ser usado depende dos seus objetivos.

Se você deseja fornecer algo conveniente ou amigável para seus usuários, o /etc/profile é razoável o suficiente se todos os usuários usarem o mesmo shell. Se você quiser que os comandos executem somente ao efetuar login via ssh , coloque os comandos em /etc/ssh/sshrc . (Se você não se importa em substituir os comandos pelo seu próprio arquivo ~/.ssh/rc .)

Se você quiser forçar um usuário a executar um programa, e apenas um programa , a opção ForceCommand , conforme descrito pela DigitalRoss, é uma boa abordagem. (Eu, pessoalmente, limitaria ainda mais o usuário a um sistema de controle de acesso obrigatório como AppArmor , SELinux , TOMOYO , ou SMACK , para garantir que o programa possa Não permitimos que um usuário escape. Eu trabalhei no AppArmor por dez anos, então essa é a ferramenta que eu escolhi primeiro, mas os outros são ótimas ferramentas escritas por excelentes programadores.)

Se você quer apenas um programa para executar e não incomodar o usuário de alguma forma , a melhor abordagem é usar o módulo pam_exec(8) , que não pode ser ignorado, funciona independentemente do shell, e fornece uma capacidade fácil de executar como o usuário ou como a conta do usuário do programa que executa a autorização. A manpage dá o seguinte exemplo:

   Add the following line to /etc/pam.d/passwd to rebuild the
   NIS database after each local password change:

               passwd optional pam_exec.so seteuid make -C /var/yp

   This will execute the command

       make -C /var/yp

   with effective user ID.

Isso pode ser estendido para execução nas ações auth , account , password e session ; provavelmente session seria melhor para executar no login. Basta adicionar uma linha como:

session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd

ao seu arquivo de controle /etc/pam.d/sshd .

    
por 13.06.2011 / 04:03
4

Novas versões do OpenSSH têm um recurso de servidor chamado ForceCommand que dá controle a um script em vez da operação (scp, ssh, ...) que o usuário pretendia. O script é passado o comando original, então você provavelmente poderia encadear a ele depois de fazer o que você precisa fazer.

De sshd_config (5):

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 vari- able. Specifying a command of ''internal-sftp'' will force the use of an in-process sftp server that requires no support files when used with ChrootDirectory.

Eu usei isso uma vez para substituir o scp e fornecer o envio seguro de gem sem dar a todos os usuários autorizados a fazer upload de gemas de acesso interativo que eles não precisavam ou queriam.

    
por 13.06.2011 / 03:30
3

Uma maneira seria usar o syslog-ng como um daemon syslog e configure-o para executar um plano de fundo de script toda vez que uma determinada entrada de log (como um login ssh bem-sucedido) corresponder.

    
por 13.06.2011 / 08:48
0

Verifique isso:

http://ubuntuforums.org/showthread.php?p=9383927

Não acredito que haja uma maneira de impedir que isso seja executado. Alguém mais pode verificar isso?

    
por 13.06.2011 / 03:21

Tags