20160110_notify_login_use_pam
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
メール送信スクリプト
- /usr/local/bin/notify-login
#!/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行を追加します.
- /etc/pam.d/common-session
... 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 経由でスマホに通知しています.
20160110_notify_login_use_pam.txt · 最終更新: 2018-02-05 12:37 by tosihisa@netfort.gr.jp