一個控制慾很強稱職的管理者可能會想要 SSH 用戶登入時能有郵件通知,網路上有些 Linux 的文件可以參考,這邊紀錄一下 FreeBSD 的作法。
比較簡單的方式,是利用 PAM 模組來發送這個訊息。PAM 有一個 pam_exec.so 可以用來執行指令,所以運作原理就是當用戶登入時,去執行發送郵件的 script。
首先你要有個 script 用來發郵件,PAM 會將各種資訊以環境變數的方式傳入 scirpt 中,所以我們可以利用這些變數來做判斷,達成不同的目的。
就我所知不同平台可能有不同的變數名稱,若是想知道有哪些變數可用,可以在 script 內,將 env
輸出的內容寄給自己。
完成後大概長這樣:
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/sh [ "$PAM_SM_FUNC" = "pam_sm_open_session" ] || exit 0 host="`hostname`" timestr=`date "+%Y-%m-%d %H:%M:%S"` if [ "$PAM_TYPE" != "close_session" ]; then subject="SSH Login: $PAM_USER on $host" message="$timestr $PAM_USER from $PAM_RHOST" echo "$message" | mailx -u root -s "$subject" root & fi |
將上面的 script 存放在 /root/notify.sh,並使用 chmod 加上可執行的權限。
再來修改 /etc/pam.d/sshd,加上這一行:
1 |
session optional pam_exec.so /root/notify.sh |
其中的 optional 表示不管 script 執行是否成功,都不影響用戶的登入。若是將 optional 改為 required,則 script 若執行失敗也會阻擋用戶登入。
接著就可以嘗試登入看看,並檢查是否有收到郵件了。