Ssh

停止將 SUDO 和 SSH 登錄過度記錄到特定使用者帳戶的 syslog 和 wtmp

  • March 4, 2022

我有一個監控伺服器(‘ClusterControl’),它使用正常使用者帳戶使用*“互動式外殼”*登錄並執行一些 sudo 維護命令。

該帳戶似乎每分鐘通過 SSH 密鑰(無密碼)登錄 4 次。

,/var/log/wtmp和填滿了數千個登錄和 sudo 條目/var/log/auth.log/var/log/syslog

出現三個問題:

  1. Syslog 審核失敗,因為/var/log/syslog如果不通過各種grep過濾器來屏蔽登錄條目,它就無法使用。
  2. 系統盤空間不足。這些文件很快就會變得非常大,並導致嚴重的儲存空間/var/log/wtmp問題/var/log/auth.log/var/log/syslog
  3. 帳戶審計命令有效地經歷了拒絕服務,因為它變得不可用,因為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 在登錄時執行互動式 shellssh -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.管理日誌文件

雖然我設法阻止每天記錄數千條日誌,syslogauth.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 身份驗證模組。它被兩個單獨的服務sshdsudo呼叫。

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行的文件中。

重要的
  1. 在*/etc/pam.d/ sshd中找到包含該文件的行,並在它之前*common-session添加您的自定義pam_succeed_if.so語句。
  2. 現在對*/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

即使是全域設置noupdatenowtmp指令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
}

引用自:https://unix.stackexchange.com/questions/637227