Advertencia: según los comentarios, esto no funciona si el usuario crea un archivo llamado ~/.ssh/rc
. *
Modifique o cree /etc/ssh/sshrc
con los siguientes contenidos:
ip=`echo $SSH_CONNECTION | cut -d " " -f 1`
logger -t ssh-wrapper $USER login from $ip
echo "User $USER just logged in from $ip" | sendemail -q -u "SSH Login" -f "Originator <[email protected]>" -t "Your Name <[email protected]>" -s smtp.server.com &
Esto lo notificará de manera efectiva por correo electrónico cada vez que alguien inicie sesión a través de SSH, y el inicio de sesión se registrará en el syslog.
Nota: Necesitará el sendemail
paquete ( sudo apt-get install sendemail
) para que funcione la notificación por correo electrónico.
Nota: funciona con el reenvío de puertos, pero con la opción -N no.
ssh -N
con solo reenvío de puertos.~/.ssh/rc
por lo que es bastante inútil como medida de seguridad. La respuesta de @adosaiguas con respectopam_exec
es la correcta.~/.ssh/rc
archivo. El uso de un método basado en todo el sistemapam
es más confiable y seguro, ya que soloroot
puede meterse con él. Entonces la respuesta es: lossshrd
métodos funcionan bien para sistemas de un solo usuario, pero elpam
método funciona de manera confiable para todos los sistemas.Dado que el
sshrc
método no funciona si el usuario tiene su propio~/.ssh/rc
archivo, explicaré cómo hacerlo conpam_exec
@adosaiguas sugirió. Lo bueno es que esto también se puede adaptar fácilmente a tipos de inicio de sesión que no seanssh
(como inicios de sesión locales o incluso todos los inicios de sesión) al engancharse a un archivo diferente/etc/pam.d/
.Primero debe poder enviar correo desde la línea de comandos. Hay otras preguntas sobre esto. En un servidor de correo probablemente sea más fácil de instalar
mailx
(que probablemente ya esté instalado de todos modos).Luego necesita un archivo de script ejecutable
login-notify.sh
(lo puse/etc/ssh/
por ejemplo) con el siguiente contenido. Puede cambiar las variables para cambiar el asunto y el contenido de la notificación por correo electrónico. No olvide ejecutarchmod +x login-notify.sh
para que sea ejecutable.Una vez que tenga eso, puede agregar la siguiente línea a
/etc/pam.d/sshd
:Para fines de prueba, el módulo se incluye como
optional
, de modo que aún puede iniciar sesión si falla la ejecución. Después de asegurarte de que funciona, puedes cambiaroptional
arequired
. Entonces el inicio de sesión no será posible a menos que la ejecución de su script de enlace sea exitosa (si eso es lo que desea).Para aquellos de ustedes que necesitan una explicación de qué es PAM y cómo funciona, aquí hay una muy buena .
fuente
/etc/ssh/login-notify.sh failed: exit code 13
justo después de iniciar sesión :(UsePAM
configuradoyes
en su sshd_config.unconfined_u:object_r:bin_t:s0
. Entonces yochmod +x /bin/login-notify.sh
y funciona.Hemos estado usando monit para monitorear procesos en nuestras cajas de linux. Monit también puede alertar por correo electrónico sobre inicios de sesión exitosos a través de ssh. Nuestra configuración de monit se ve así
Nota: La configuración del servidor de correo, el formato de correo electrónico, etc., deben establecerse en el
monitrc
archivoActualización: escribí una publicación de blog más detallada sobre esto
fuente
Ponga lo siguiente en
/etc/profile
:Cómo funciona el guión
/etc/profile
se ejecuta en cada inicio de sesión (para usuarios de bash shell). La instrucción if solo devolverá true si el usuario ha iniciado sesión a través de ssh, lo que a su vez hará que se ejecute el bloque de código sangrado.Luego, construimos el texto del mensaje:
$(date)
será reemplazado por la salida deldate
comando${USER}
será reemplazado por el nombre de usuario de inicio de sesión$(hostname -f)
será reemplazado por el nombre de host completo del sistema que está iniciando sesiónLa segunda
TEXT
línea se agrega a la primera, dando la dirección IP del sistema desde el cual este usuario inicia sesión. Finalmente, el texto generado se envía en un correo electrónico a su dirección.Resumen Linux, de manera predeterminada, registrará cada inicio de sesión del sistema, ya sea mediante ssh o no, en los archivos de registro del sistema, pero a veces, particularmente para un sistema al que rara vez se accede a través de ssh, puede ser útil una notificación rápida y sucia.
fuente
En esta otra pregunta , probablemente tenga lo que está buscando. Básicamente, puede agregar una llamada al comando de correo en el script que se ejecuta cuando un usuario inicia sesión a través de ssh: /etc/pam.d/sshd
fuente
Tomé algunas de las excelentes respuestas de este hilo e hice algo que es más o menos copiar y pegar. Utiliza Mailgun para enviar los correos electrónicos para evitar cualquier problema con la configuración de STMP. Solo necesita una clave API de Mailgun y un dominio de envío.
Al iniciar sesión en SSH, el script enviará los detalles del inicio de sesión (usuario, nombre de host, dirección IP y todas las variables de entorno actuales) a una dirección de correo electrónico. Es fácil agregar otros parámetros que desea enviar al personalizar la
message
variable.fuente
Adaptación de Mailgun de la respuesta de @Fritz
Después de publicar, noté que @pacharanero también escribe sobre mailgun, pero no entiendo lo que están haciendo con dig, así que publicaré mi solución también.
Si está en una máquina virtual que no tiene SMTP, es posible que deba usar algo como mailgun, sendgrid o similares. Esto funcionó para mí en Google Cloud.
Un riesgo de este enfoque es que un atacante puede obtener sus credenciales de envío de correo electrónico saliente si puede
sudo su
y encontrar el guión o usted deja el guión para enviar el correo electrónico legible. mailgun tiene una lista blanca de ip que debe configurar, pero eso es imperfecto para este caso de uso en particular, obviamente.Este script debería funcionar con mailgun después de cambiar
mydomain.com
a su dominio real. Podrías guardar el script en/root/login-alert.sh
o en una ubicación más oscura.Después de eso, puede seguir la respuesta de @Fritz para cambiar e
/etc/pam.d/sshd
incluir:Observo que esto funciona sin permisos de lectura para los usuarios que llegan (
chmod 700 /root/login-alert.sh
), por lo que los usuarios que llegan no necesitan tener acceso de lectura al script.fuente
Este script
/etc/ssh/sshrc
envía un correo electrónico y agrega un registro al registrador del sistema. Se hace una diferencia (para que pueda deshabilitarla si lo desea) entre su subred personal y la red mundial (requieresudo apt-get install mailutils
).fuente
Estoy usando swatchdog del paquete de muestras para monitorear cualquier línea que contenga la frase " fail " (no distingue entre mayúsculas y minúsculas) en /var/log/auth.log . Lo configuré para ejecutarlo como un simple servicio systemd.
Cree un archivo de configuración /etc/swatch/swatch-auth-log.conf con el propietario root, permiso 644 -
El "/ Falla / i" es una expresión regular, con la "i" que indica que es sensible a mayúsculas. (Mi sendmail es un script que envía todo a una dirección fija a través de mailgun , por lo que la dirección realmente no importa).
Cree un archivo de servicio systemd /etc/systemd/system/swatch-auth-log.service con la raíz del propietario, permiso 644 -
Luego habilite, inicie y vea el estado del servicio:
Un ejemplo de informe de estado exitoso:
El servicio se iniciará automáticamente en el arranque y será supervisado por systemd .
Discusión
Originalmente utilicé una solución pam similar a la anterior, pero en /etc/pam.d/common-auth no sshd . Eso fue para atrapar ssh, sudo e inicios de sesión. Pero luego de una actualización, todas mis contraseñas dejaron de funcionar, incluso después de cambiar las contraseñas en modo de rescate. Finalmente cambié el /etc/pam.d/common-auth al original y las contraseñas volvieron a funcionar. Aquí hay una descripción en la placa Stack Exchange UNIX y Linux
Decidí que sería más seguro no tocar la configuración de seguridad difícil de entender. Y todo está en los archivos de registro de todos modos.
fuente
De hecho, acabo de modificar la respuesta de @SirCharlo
Esto funciona en los servidores 14.04, 16.04 y Centos 6.5.x que configuré, estoy bastante seguro de que necesita asegurarse de que mta esté configurado, pero una vez hecho esto, funciona de maravilla. Siguiente paso alertas de twilio
fuente