當 root 登錄但不是從本地主機登錄時發送郵件
我遵循了這些說明
您必須將此程式碼添加到 .bashrc
`echo 'ALERT - Root Shell Access (ServerName) on:' `date` `who` | mail -s "Alert: Root Access from `who | cut -d'(' -f2 | cut -d')' -f1`" your@yourdomain.com`
我確實收到了通知,但我也收到了來自本地主機的通知(每隔幾分鐘) 我可以排除本地主機的通知,還是有更好的方法只在有人遠端登錄時才獲取郵件?
最好和唯一合適的方法是**Disable Root SSH Login。無需電子郵件警報。**如果發生了不好的事情,當您最終閱讀電子郵件通知時已經為時已晚。這已經在您關注的文章中進行了解釋:
因此,允許通過 SSH 會話直接 root 登錄並不是一個好習慣,並建議創建具有
sudo
訪問權限的非 root 帳戶。每當需要 root 訪問權限時,首先以普通使用者身份登錄,然後使用su
切換到 root 使用者。要禁用直接 SSH root 登錄,請遵循我們下面的 [禁用 SSH Root 登錄和限制 SSH 訪問] 文章,該文章展示瞭如何在 SSH 中禁用和限制 root 登錄。如果您仍然願意使用電子郵件提醒…
該
.bashrc
解決方案似乎很受歡迎,但存在一些問題。它在啟動時(始終且僅)執行bash
。如果被任何其他 shell 替換,或者 shell 未啟動(例如登錄僅用於 SFTP 上的隧道),它就會停止工作,即使不涉及 SSH,它也會執行。攻擊者可以修改.bashrc
呼叫之前bash
的內容以規避您的警報。由於您可能不會在內部使用 SSH,因此using
~/.ssh/rc
將滿足所需的條件,例如ip=`echo $SSH_CONNECTION | cut -d " " -f 1` echo "Root login from $ip" | mail -s "Alert: SSH root login from $ip" your@example.com
然後,對於全域 SSH 登錄警報,我不會在使用者家中使用任何東西,
~/
因為使用者可以輕鬆修改它。~/.ssh/rc
可以使用 將其設為全域預設值,/etc/ssh/sshrc
任何使用者都可以使用 own 覆蓋設置~/.ssh/rc
,並通過刪除文件輕鬆回退。如果您需要以使用者無法覆蓋的方式強制執行警報,您可以使用
/etc/pam.d/sshd
:添加腳本向您(或使用者)發送電子郵件的session optional pam_exec.so seteuid /path/to/login-notify.sh
行。.sh