Tengo un pequeño servidor SSH y me gustaría escribir un script para que se ejecute cada vez que alguien inicie sesión a través de SSH.
Ahora, ¿cómo voy a hacer eso?
Me gustaría que el script se ejecute cada vez que CUALQUIERA inicie sesión, y necesito tener acceso al menos al nombre de usuario de la persona que inició sesión y a la dirección IP desde la que inició sesión.
Pensé en usar /etc/bash.bashrc
, pero ¿es una buena solución? Por ejemplo, ¿hay alguna forma en que un usuario pueda desactivar su uso y, por lo tanto, desactivar mi script? En caso afirmativo, ¿cuáles son mis otras opciones?
Gracias.
Respuestas:
El mecanismo a utilizar depende de tus objetivos.
Si desea proporcionar algo conveniente o amigable para sus usuarios, entonces
/etc/profile
es lo suficientemente razonable si todos sus usuarios usan el mismo shell. Si desea que los comandos se ejecuten solo cuando inicie sesión a través dessh
, coloque los comandos en/etc/ssh/sshrc
. (Si no le importa que los usuarios anulen los comandos con su propio~/.ssh/rc
archivo).Si desea obligar a un usuario a ejecutar un programa, y solo un programa , entonces la
ForceCommand
opción descrita por DigitalRoss es un buen enfoque. (Personalmente, limitaría aún más al usuario con un sistema de control de acceso obligatorio como AppArmor , SELinux , TOMOYO o SMACK , para garantizar que el programa no permita que un usuario escape. He trabajado en AppArmor durante diez años, así que ese es el herramienta que elegiría primero, pero las otras son buenas herramientas escritas por excelentes programadores).Si solo desea que un programa se ejecute y no moleste al usuario de ninguna manera , entonces el mejor enfoque es usar el
pam_exec(8)
módulo, que no se puede omitir, funciona independientemente del shell y proporciona una capacidad fácil de ejecutar como usuario o como usuario cuenta del programa que realiza la autorización. La página de manual da el siguiente ejemplo:Esto podría extenderse a ejecutar en
auth
,account
,password
, ysession
acciones; probablementesession
sería mejor para ejecutar al iniciar sesión. Simplemente agregue una línea como:a su
/etc/pam.d/sshd
archivo de control.fuente
pam_exec
módulo es exactamente lo que estoy buscando. ¡Gracias!Las versiones más recientes de OpenSSH tienen una función de servidor llamada ForceCommand que le da control a un script en lugar de la operación (scp, ssh, ...) que el usuario pretendía. El script recibe el comando original, por lo que probablemente podría encadenarlo después de hacer lo que sea necesario.
Desde sshd_config (5):
Utilicé esto una vez para anular scp y proporcionar una carga segura de gemas sin dar a cada usuario autorizado para cargar gemas acceso interactivo que no necesitaban ni deseaban.
fuente
Una forma sería usar syslog-ng como un demonio syslog y configurarlo para ejecutar un fondo de script cada vez que coincida una determinada entrada de registro (como un inicio de sesión ssh exitoso).
fuente
Mira esto:
No creo que haya una manera de deshabilitar esta ejecución. ¿Alguien más puede verificar esto?
fuente
/etc/profile
O~/.profile
) depende del shell del usuario, solo un poco menos quebashrc
. Si sus usuarios están usando un bash o similar, está bien.