停止将特定用户帐户的 SUDO 和 SSH 登录过多记录到 syslog 和 wtmp

停止将特定用户帐户的 SUDO 和 SSH 登录过多记录到 syslog 和 wtmp

我有一个监控服务器(“ClusterControl”),它使用常规用户帐户来登录“交互式外壳”并运行一些 sudo 维护命令。

该帐户似乎每分钟通过 SSH 密钥(无密码)登录 4 次。

/var/log/wtmp和充满/var/log/auth.log/var/log/syslog数千个登录和 sudo 条目。

出现三个问题:

  1. 系统日志审核失败,因为如果不通过各种过滤器来屏蔽登录条目,则/var/log/syslog无法使用它。grep

  2. 系统盘空间不足。这些文件的/var/log/wtmp大小/var/log/auth.log很快/var/log/syslog就会变得非常大,并导致严重的存储空间问题。

  3. 帐户last审核命令有效地遇到拒绝服务,因为它变得不可用,因为服务帐户用户名被记录并显示数千次,并且其他帐户登录无法看到。

问题

如何排除该用户帐户被记录?

systemd [success=ok default=1] pam_succeed_if.so user in usernamePS 我已经尝试按照某些文章的指示在文件夹中的各种 pam 文件中添加 PAM 条目/etc/pam.d,但它没有起作用。

我不确定要使用哪个文件以及正确的语法应该是什么。

/var/log/syslog在日志行开头显示“systemd”记录的 ssh 用户名登录。

服务器是Ubuntu 18.04

编辑

ClusterControl 运行一个交互式外壳ssh -t正如该公司的一位系统支持工程师在博客文章中所述,在登录时使用这里。然而,他们的建议仅仅是启用更频繁的日志轮换。

答案1

有2个选择。

长话短说

1.系统日志过滤器

使用系统日志 过滤器是迄今为止最快的解决方案,但不如使用那么全面聚丙烯酰胺

在你的顶部系统日志默认conf文件,添加您想要过滤的关键字和过滤命令。在这种情况下,过滤器命令是删除(' ~')。

$ 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 登录从 clustercontrol 记录到/var/log/wtmp/var/log/lastlog文件。

为此,我们使用对数旋转(见下文)。

对数旋转

最后日志 + 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
}

使用PAM

调试

了解正在发生的情况的第一步是启用调试消息。问题是在我的 Ubuntu 18.04 上,pam 调试消息没有被记录 - 直到我明确地告诉系统日志使用哪个文件来记录调试消息:

$ 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):为用户 clustercontrol 打开的会话 (uid=0)

3 月 17 日 13:04:25 dev1 sudo: pam_unix(sudo:session): clustercontrol(uid=0) 为用户 root 打开会话

从上面的日志我们可以看出pam_unix.so是 pam 身份验证模块执行日志记录。它被两个单独的服务调用sshd须藤

帕姆类型标记告诉 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

从上面,我们可以看到':session'的模块在线pam_unix.so文件中common-session#29

重要的
  1. 找到该行/etc/pam.d/sshd包括该common-session文件并添加您的自定义pam_succeed_if.so语句它。

  2. 现在做几乎完全相同/etc/pam.d/须藤文件,但这里我们的自定义规则语法有点不同。

自定义 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

如果我们从后到前阅读规则会更容易:

我们检查用户是否名为集群控制( 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

会话 [成功 = 完成默认 = 忽略] pam_succeed_if.so 安静 uid = 0 ruser = clustercontrol

我们的语法在这里有点不同。 Sudo 通常运行命令用户(除非有特殊指令另有说明)。在类 Unix 系统上用户0

所以我们的自定义规则是说,如果须藤命令由远程用户在 uid 0 的用户上下文中运行(鲁瑟),在我们的例子中是集群控制,那么就是安静的通过日志记录,我们完毕因此,跳过此类型用户的任何进一步规则会议验证。

注意
不要忘记注释掉*。调试线路输入/etc/rsyslog.d/50-default.conf并使用 重新启动服务$ service rsyslog restart

相关内容