~~socialite~~ ====== pam_execを使ってログイン時にメール通知 ====== ssh でリモートログインした時にメール通知出来るようにします. メール通知は,2016年の今では古典的な方法なのかも知れませんが, pam_exec 自身は実行できれば何でも良いので,ここでは古典的にログイン時に mail コマンドでメール通知するようにします. Debian (Wheezy,Jessie)で動きますが,Linux PAM で pam_exec が使えたら基本的に使えると思います. 参考サイト:\\ http://blog.stalkr.net/2010/11/login-notifications-pamexec-scripting.html ===== メール送信スクリプト ===== #!/bin/sh export LANG=C EMAILDOMAIN=localhost if [ -f /etc/mailname ]; then EMAILDOMAIN=`cat /etc/mailname` fi EMAILFROM=root@$EMAILDOMAIN EMAILTO=$PAM_RUSER if [ "x$EMAILTO" = "x" ]; then EMAILTO=$PAM_USER fi [ "$PAM_TYPE" = "open_session" ] || exit 0 { echo "User: $PAM_USER" echo "Ruser: $PAM_RUSER" echo "Rhost: $PAM_RHOST" echo "Service: $PAM_SERVICE" echo "TTY: $PAM_TTY" echo "Date: `date`" echo "Server: `uname -a`" } | mail -s "`hostname -s` $PAM_SERVICE login alert: $PAM_USER" -a "From: $EMAILFROM" \ $EMAILTO@送信先ドメイン 作成したら,chmod +x /usr/local/bin/notify-login で実行可能にします ===== /etc/pam.d/common-session の修正 ===== /etc/pam.d/common-session の最後に下記の1行を追加します. ... session optional pam_exec.so /usr/local/bin/notify-login これで,ssh によるリモートログイン時に /usr/local/bin/notify-login が実行され,メール通知されます. ===== 通知されるもの ===== 要は,PAM による認証で,common-session を通るものは通知されます. 私が使っている Debian の場合,以下の様な感じで,chfn/chsh/su を実行した場合も pam_exec によって通知されるようになります. $ grep -w common-session /etc/pam.d/* | grep include /etc/pam.d/chfn:@include common-session /etc/pam.d/chsh:@include common-session /etc/pam.d/cron:@include common-session-noninteractive /etc/pam.d/login:@include common-session /etc/pam.d/other:@include common-session /etc/pam.d/samba:@include common-session-noninteractive /etc/pam.d/sshd:@include common-session /etc/pam.d/su:@include common-session /etc/pam.d/systemd-user:@include common-session-noninteractive ===== まとめ ===== 要は pam_exec はコマンドを実行することが基本なので,メール通知でなくても使えます. 私はメール通知にしていますが,それは procmail でメールを振り分けて,この様な通知メールが飛んできたら pushover 経由でスマホに通知しています.