Est-ce que quelqu'un a un script bash qui va envoyer un email ou informer quelqu'un dans le cas d'une connexion réussie à un serveur ssh? Je souhaite être averti si quelqu'un se connecte à ma boîte personnelle.
J'utilise Ubuntu 12.04 sous xfce
Attention: selon les commentaires, cela ne fonctionnera pas si l'utilisateur crée un fichier nommé
~/.ssh/rc
. *
Modifiez ou créez /etc/ssh/sshrc
avec le contenu suivant:
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 &
Cela vous avertira par courrier électronique chaque fois que quelqu'un se connectera via SSH, et le login sera enregistré dans le syslog.
Remarque: vous aurez besoin du sendemail
package ( sudo apt-get install sendemail
) pour que la notification par courrier électronique fonctionne.
Remarque: fonctionne avec la redirection de port, mais pas avec l'option -N.
ssh -N
avec uniquement un transfert de port.~/.ssh/rc
, il est donc très inutile comme mesure de sécurité. La réponse de @adosaiguas concernantpam_exec
est la bonne.~/.ssh/rc
fichier. L'utilisation d'une méthode basée sur l'ensemble du systèmepam
est simplement plus fiable et plus sûre, car elle seuleroot
peut la gâcher. La réponse est donc la suivante: lessshrd
méthodes fonctionnent correctement pour les systèmes mono-utilisateur, mais lapam
méthode fonctionne de manière fiable pour tous les systèmes.Puisque la
sshrc
méthode ne fonctionne pas si l'utilisateur a son propre~/.ssh/rc
fichier, j'expliquerai comment procéder,pam_exec
comme suggéré par @adosaiguas. La bonne chose est que cela peut également être facilement adapté à des types de connexion autres quessh
(tels que les connexions locales ou même toutes les connexions) en se connectant à un autre fichier dans/etc/pam.d/
.Vous devez d’abord pouvoir envoyer du courrier à partir de la ligne de commande. Il y a d'autres questions à ce sujet. Sur un serveur de messagerie, il est probablement plus facile à installer
mailx
(ce qui est probablement déjà fait).Ensuite, vous avez besoin d’un fichier de script exécutable
login-notify.sh
(je le mets/etc/ssh/
par exemple) avec le contenu suivant. Vous pouvez modifier les variables pour modifier l'objet et le contenu de la notification par courrier électronique. N'oubliez pas d'exécuterchmod +x login-notify.sh
pour le rendre exécutable.Une fois que vous avez cela, vous pouvez ajouter la ligne suivante à
/etc/pam.d/sshd
:À des fins de test, le module est inclus en tant que
optional
, afin que vous puissiez toujours vous connecter si l'exécution échoue. Après vous être assuré que cela fonctionne, vous pouvez le remplaceroptional
parrequired
. Dans ce cas, la connexion ne sera possible que si l'exécution de votre script de raccordement est réussie (si c'est ce que vous voulez).Pour ceux d'entre vous qui ont besoin d'une explication de ce qu'est PAM et de son fonctionnement, en voici une très bonne .
la source
/etc/ssh/login-notify.sh failed: exit code 13
juste après la connexion :(UsePAM
défini le paramètreyes
dans votre sshd_config.unconfined_u:object_r:bin_t:s0
. Alors moichmod +x /bin/login-notify.sh
et ça marche.Nous utilisons monit pour surveiller les processus sur nos boîtes Linux. monit peut également alerter par e-mail les connexions réussies via ssh. Notre configuration monit ressemble à ceci
Remarque: La configuration du serveur de courrier, le format de courrier électronique, etc. doivent être définis dans le
monitrc
fichier.Mise à jour: a écrit un article de blog plus détaillé à ce sujet.
la source
Mettez ce qui suit dans
/etc/profile
:Comment fonctionne le script
/etc/profile
est exécuté à chaque connexion (pour les utilisateurs du shell bash). L'instruction if ne renvoie true que si l'utilisateur s'est connecté via ssh, ce qui entraîne l'exécution du bloc de code en retrait.Ensuite, nous construisons le texte du message:
$(date)
sera remplacé par la sortie de ladate
commande${USER}
sera remplacé par le nom d'utilisateur de l'utilisateur$(hostname -f)
sera remplacé par le nom d'hôte complet du système en cours de connexionLa deuxième
TEXT
ligne s'ajoute à la première, donnant l'adresse IP du système à partir duquel cet utilisateur se connecte. Enfin, le texte généré est envoyé par courrier électronique à votre adresse.Résumé Linux enregistrera par défaut chaque connexion système, que ce soit par ssh ou non, dans les fichiers journaux du système, mais parfois - en particulier pour un système rarement utilisé via ssh - une notification rapide et incorrecte peut être utile.
la source
Dans cette autre question, vous avez probablement ce que vous recherchez. En gros, vous pouvez ajouter un appel à la commande mail dans le script exécuté lorsqu'un utilisateur se connecte via ssh: /etc/pam.d/sshd
la source
J'ai tiré quelques-unes des excellentes réponses de ce fil de discussion pour en faire quelque chose de plus ou moins copier-coller. Il utilise Mailgun pour envoyer les courriels, ce qui vous évite tout problème de configuration du protocole STMP. Vous avez juste besoin d'une clé API Mailgun et d'un domaine d'envoi.
Lors de la connexion SSH, le script envoie les détails de la connexion (utilisateur, nom d’hôte, adresse IP et toutes les variables d’environnement actuelles) à une adresse électronique. Il est facile d'ajouter d'autres paramètres à envoyer en personnalisant la
message
variable.la source
Mailgun adaptation de @Fritz answer
Après avoir posté, j'ai remarqué que @pacharanero parlait aussi de mailgun, mais je ne comprends pas ce qu'ils font avec dig, alors je vais aussi poster ma solution.
Si vous utilisez une machine virtuelle qui n’a pas le protocole SMTP, vous devrez peut-être utiliser quelque chose comme mailgun, sendgrid, etc. Cela a fonctionné pour moi sur Google Cloud.
L’un des risques de cette approche est qu’un attaquant peut obtenir votre identifiant d’envoi de courrier électronique sortant s’il le peut
sudo su
et trouver le script ou vous laisser le script pour envoyer le courrier en lecture. mailgun a une liste blanche d'ip que vous devriez configurer, mais c'est imparfait pour ce cas d'utilisation particulier, évidemment.Ce script devrait fonctionner avec mailgun une fois que vous avez changé
mydomain.com
de domaine. Vous pouvez enregistrer le script dans/root/login-alert.sh
un endroit plus obscur.Après cela, vous pouvez suivre @Fritz answer to change
/etc/pam.d/sshd
to include pour inclure:Je remarque que cela fonctionne sans autorisation de lecture pour les utilisateurs arrivés (
chmod 700 /root/login-alert.sh
); les utilisateurs qui arrivent n'ont donc pas besoin d'un accès en lecture au script.la source
Ce script
/etc/ssh/sshrc
envoie un courrier électronique et ajoute un journal à l'enregistreur système. Une différence est faite (vous pouvez donc la désactiver si vous le souhaitez) entre votre sous-réseau personnel et le World Wide Web (obligatoiresudo apt-get install mailutils
).la source
J'utilise swatchdog à partir du package swatch pour contrôler les lignes contenant la phrase " fail " (insensible à la casse) dans /var/log/auth.log . Je l'ai configuré pour l'exécuter comme un simple service systemd.
Créez un fichier de configuration /etc/swatch/swatch-auth-log.conf avec le propriétaire root, permission 644 -
Le "/ fail / i" est une expression rationnelle, le "i" indiquant qu'il est insensible à la casse. (Mon sendmail est un script qui envoie tout à une adresse fixe via mailgun , l'adresse n'a donc pas d'importance).
Créez un fichier de service systemd /etc/systemd/system/swatch-auth-log.service avec le propriétaire root, autorisation 644 -
Puis activez, démarrez et affichez l’état du service -
Un exemple de rapport de statut réussi -
Le service sera automatiquement lancé au démarrage et surveillé par systemd .
Discussion
A l’origine, j’utilisais une solution pam similaire à celle ci-dessus, mais dans /etc/pam.d/common-auth pas sshd . C'était pour attraper ssh, sudo et logins. Mais après une mise à jour, tous mes mots de passe ont cessé de fonctionner, même après modification des mots de passe en mode de secours. Finalement, j'ai remplacé le fichier /etc/pam.d/common-auth par son nom d'origine et les mots de passe ont à nouveau fonctionné. Voici une description de la carte Stack Exchange UNIX & Linux
J'ai décidé qu'il serait plus sûr de ne pas toucher aux paramètres de sécurité difficiles à comprendre. Et tout est dans les fichiers journaux de toute façon.
la source
Je viens de modifier @SirCharlo answer
Cela fonctionne sur les serveurs 14.04, 16.04 et Centos 6.5.x que j'ai configurés. Je suis presque certain que vous devez vous assurer que mta est configuré, mais une fois que cela est fait, cela fonctionne. Prochaine étape twilio alerts
la source