我有一个监控服务器(“ClusterControl”),它使用常规用户帐户来登录“交互式外壳”并运行一些 sudo 维护命令。
该帐户似乎每分钟通过 SSH 密钥(无密码)登录 4 次。
、/var/log/wtmp
和充满/var/log/auth.log
了/var/log/syslog
数千个登录和 sudo 条目。
出现三个问题:
系统日志审核失败,因为如果不通过各种过滤器来屏蔽登录条目,则
/var/log/syslog
无法使用它。grep
系统盘空间不足。这些文件的
/var/log/wtmp
大小/var/log/auth.log
很快/var/log/syslog
就会变得非常大,并导致严重的存储空间问题。帐户
last
审核命令有效地遇到拒绝服务,因为它变得不可用,因为服务帐户用户名被记录并显示数千次,并且其他帐户登录无法看到。
问题
如何排除该用户帐户被记录?
systemd [success=ok default=1] pam_succeed_if.so user in username
PS 我已经尝试按照某些文章的指示在文件夹中的各种 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
即使是全局设置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
}
使用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。
重要的
找到该行/etc/pam.d/sshd包括该
common-session
文件并添加您的自定义pam_succeed_if.so
语句前它。现在做几乎完全相同/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
。