停止將 SUDO 和 SSH 登錄過度記錄到特定使用者帳戶的 syslog 和 wtmp
我有一個監控伺服器(‘ClusterControl’),它使用正常使用者帳戶使用*“互動式外殼”*登錄並執行一些 sudo 維護命令。
該帳戶似乎每分鐘通過 SSH 密鑰(無密碼)登錄 4 次。
,
/var/log/wtmp
和填滿了數千個登錄和 sudo 條目/var/log/auth.log
。/var/log/syslog
出現三個問題:
- Syslog 審核失敗,因為
/var/log/syslog
如果不通過各種grep
過濾器來屏蔽登錄條目,它就無法使用。- 系統盤空間不足。這些文件很快就會變得非常大,並導致嚴重的儲存空間
/var/log/wtmp
問題/var/log/auth.log
。/var/log/syslog
- 帳戶審計命令有效地經歷了拒絕服務,因為它變得不可用,因為
last
服務帳戶使用者名被記錄和顯示數千次,而其他帳戶登錄是不可能看到的。問題
我怎樣才能排除這個使用者帳戶被記錄?
PS我已經嘗試在文件夾
systemd [success=ok default=1] pam_succeed_if.so user in username
中的各種pam文件中添加一個PAM條目,/etc/pam.d
正如一些文章所指示的那樣,但它沒有奏效。我不確定要使用哪個文件以及正確的語法應該是什麼。
/var/log/syslog
在日誌行的開頭顯示由“systemd”記錄的 ssh 使用者名登錄。伺服器是 Ubuntu 18.04
編輯
ClusterControl 在登錄時執行互動式 shell
ssh -t
,正如該公司的一位系統支持工程師在此處的部落格文章中所述。但是,他們的建議只是為了更頻繁地進行日誌輪換。
有2個選擇。
TL;博士
1. 系統日誌過濾器
使用rsyslog 過濾器是迄今為止最快的解決方案,但不如使用PAM全面。
在您的rsyslog預設配置文件的頂部,添加您希望過濾的關鍵字和過濾命令。在這種情況下,過濾命令是刪除(’
~
’)。$ vi /etc/rsyslog.d/50-default.conf :msg, contains, "clustercontrol" ~ :msg, contains, "pam_unix(sudo:session): session closed for user root" ~ :msg, contains, "Removed session" ~
2.管理日誌文件
雖然我設法阻止每天記錄數千條日誌,
syslog
但auth.log
似乎沒有辦法停止將服務帳戶 SSH 登錄從集群控制記錄到/var/log/wtmp
和/var/log/lastlog
文件。為此,我們使用logrotate(見下文)。
使用 PAM
PAM 調試
了解正在發生的事情的第一步是啟用調試消息。問題是在我的 Ubuntu 18.04 上,沒有記錄 pam 調試消息 - 直到我明確告訴rsyslog使用哪個文件來記錄調試消息:
$ vi /etc/rsyslog.d/50-default.conf *.debug /var/log/debug.log $ service rsyslog restart
pam_succeed_if.so
這是我們將使用 pam 編寫條件測試的 pam 模組。文件有點不完整,枯燥,關於規則如何工作以及所有指令的作用不是很冗長。在閱讀了十幾篇文章之後,這是我設法拼湊起來的:
了解誰在進行日誌記錄
在裡面
/var/log/auth.log
你會看到我們希望為這個使用者帳戶停止的日誌消息:3 月 17 日 13:05:27 dev1 sshd$$ 18833 $$: pam_unix(sshd:session): 由 (uid=0) 為使用者集群控制打開的會話
3 月 17 日 13:04:25 dev1 sudo: pam_unix(sudo:session): 會話由 clustercontrol(uid=0) 為使用者 root 打開
從上面的日誌中我們可以看出pam_unix.so是執行日誌記錄的 pam 身份驗證模組。它被兩個單獨的服務sshd和sudo呼叫。
pam類型令牌告訴 pam 將為此模組使用哪種類型的身份驗證。在這種情況下,會話是應該在使用者通過身份驗證之前和/或之後完成的事情。
負責的 PAM 配置
pam_unix.so
因此,讓我們在系統配置中找到負責這些日誌的 pam 模組。$ cd /etc/pam.d $ grep 'pam_unix.so' * -in common-account:17:account [success=1 new_authtok_reqd=done default=ignore] pam_unix.so common-auth:17:auth [success=1 default=ignore] pam_unix.so nullok_secure common-password:25:password [success=1 default=ignore] pam_unix.so obscure sha512 common-session:29:session required pam_unix.so common-session-noninteractive:30:session required pam_unix.so runuser:5:session required pam_unix.so
從上面,我們可以看到
pam_unix.so
’:session’ 的模組在第**#29**common-session
行的文件中。重要的
- 在*/etc/pam.d/ sshd中找到包含該文件的行,並在它之前*
common-session
添加您的自定義pam_succeed_if.so
語句。- 現在對*/etc/pam.d/* sudo文件執行幾乎完全相同的操作,但這裡我們的自定義規則語法略有不同。
自定義 PAM 規則
順序很重要
就在
pam_unix.so
從@include common-session
文件執行我們的規則之前,我們放置我們的pam_succeed.so
模組規則。sshd 規則
$ grep -in include /etc/pam.d/sshd 5:@include common-auth 15:@include common-account 29:@include common-session 32:# This includes a dynamically generated part from /run/motd.dynamic 56:@include common-password
在我們的例子中是第 29 行。
$ vi /etc/pam.d/sshd +29 session [success=done default=ignore] pam_succeed_if.so quiet service in sshd user = clustercontrol # Standard Un*x session setup and teardown. @include common-session
如果我們從後到前閱讀規則會更容易:
我們檢查一個名為clustercontrol (
user = clustercontrol
) 的使用者是否通過sshd (service in sshd
) 的身份驗證,然後該規則匹配,我們執行指令 (quiet
) 使日誌記錄安靜。這部分的
[success=done
意思是,如果你匹配到這個規則,我們就會done
跳過處理下一個規則,或者跳過 pam 堆棧中的下一個規則。這有效地停止了該使用者的 sshd 日誌記錄。
須藤規則
為此,我將第 6行添加到*/etc/pam.d/sudo*:
$ vi /etc/pam.d/sudo :set number 1 #%PAM-1.0 2 3 session required pam_env.so readenv=1 user_readenv=0 4 session required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0 5 6 session [success=done default=ignore] pam_succeed_if.so quiet uid = 0 ruser = clustercontrol 7 @include common-auth 8 @include common-account 9 @include common-session-noninteractive
會議
$$ success=done default=ignore $$pam_succeed_if.so quiet uid = 0 ruser = clustercontrol
我們的語法在這裡有點不同。Sudo 通常以root使用者身份執行命令(除非特殊指令另有說明)。在使用者 0的類 unix 系統上。
所以我們的自定義規則是說,如果sudo命令是由遠端使用者(ruser)在 uid 0 的使用者上下文中執行的,在我們的例子中是clustercontrol,那麼對日誌保持安靜,我們就完成了,所以跳過任何進一步此類型會話身份驗證的使用者的規則。
注意
不要忘記註釋掉*/etc/rsyslog.d/50-default.conf中的 ** .debug行並使用 .debug 重新啟動服務。
$ service rsyslog restart
對數旋轉
最後日誌 + wtmp
即使是全域設置
noupdate
或nowtmp
指令pam_lastlog.so
,對我的系統也沒有影響,所以我只是確保使用下面的 logrotate 配置定期壓縮和旋轉這些日誌。以下配置將每月或每 200Mb 輪換日誌,以先到者為準。日誌將被壓縮並保留最多 12 個月:
$ vi /etc/logrotate.conf # no packages own wtmp, or btmp -- we'll rotate them here /var/log/wtmp { missingok monthly create 0664 root utmp rotate 12 size 200M compress } /var/log/btmp { missingok monthly create 0660 root utmp rotate 12 size 200M compress }