ユーザ用ツール

サイト用ツール


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 21:37 by tosihisa@netfort.gr.jp