本文基于:Ubuntu 22
一、现象
偶然在看 /var/log/auth.log 文件内容时,发现里面出现了大量这类日志。
Apr 1 22:30:01 xxx CRON[3624554]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Apr 1 22:30:22 xxx CRON[3624554]: pam_unix(cron:session): session closed for user root
Apr 1 22:35:01 xxx CRON[3624767]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Apr 1 22:35:11 xxx CRON[3624767]: pam_unix(cron:session): session closed for user root
Apr 1 22:40:01 xxx CRON[3624956]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Apr 1 22:40:11 xxx CRON[3624956]: pam_unix(cron:session): session closed for user root
Apr 1 22:45:01 xxx CRON[3625117]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Apr 1 22:45:11 xxx CRON[3625117]: pam_unix(cron:session): session closed for user root
Apr 1 22:50:01 xxx CRON[3625280]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Apr 1 22:50:51 xxx CRON[3625280]: pam_unix(cron:session): session closed for user root
Apr 1 22:55:01 xxx CRON[3625522]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0)
Apr 1 22:55:51 xxx CRON[3625522]: pam_unix(cron:session): session closed for user root
我们可以看到,这个日志来源是 cron。
注:auth.log 专门记录登录认证的信息。(可以多开一个会话,然后就能在这个文件里看到新会话的登录和退出时的记录)
二、原因
因为 cron 可以按配置每分钟、每 10 分钟、每小时运行一次。当 cron 执行此操作时,它通常以 root 身份运行,这样做会为所述用户创建一个会话。由于大多数 Linux 的默认设置,这将在 auth.log 中记录(如果不是那么烦人的话,这似乎是谨慎的)。
—— Cron: pam_unix (cron:session): session opened/closed for user root by (uid=0)
但是我们用 crontab -l 检查就会发现,我们可能实际并未设置有定义定时任务。
但是,我们可以直接去看 cron 的几个目录内容,从而发现这些“隐藏的任务”。
即以下目录:
/etc/cron.d/
/etc/cron.daily/
/etc/cron.hourly/
/etc/cron.weekly/
/etc/cron.monthly/
事实上,不同机子上因为各种缘故,会导致看到的定时任务可能不太一样,不同云服务商提供的云服务器上也是如此。
不过,我大体看了看,基本都是正常的一些任务。
这列举几个了几个,有兴趣可以一一去细细研究。
e2scrub_all
位置:/etc/cron.d
信息:里面有两个定时任务:
30 3 * * 0 root test -e /run/systemd/system || SERVICE_MODE=1 /usr/lib/x86_64-linux-gnu/e2fsprogs/e2scrub_all_cron
10 3 * * * root test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_all -A -r
介绍:e2scrub_all 命令的作用在系统中搜索所有包含 ext2、ext3 或 ext4 文件系统,并检查它们是否存在问题。检查是通过调用 e2scrub 工具来执行,该工具将查找损坏的文件系统,将其标记为有错误,以便 FSCK 将在下一次挂载之前调用。如果没有遇到错误,则在挂载文件系统时,将在文件系统上调用 fstrim。
资料来源:e2scrub_all
sysstat
位置:/etc/cron.d
介绍:Linux 上常用的一个工具包,主要是用于监控服务器的性能信息。详细可看 Features。
logrotate
位置:/etc/cron.daily/
介绍:多数主流的 Linux 系统都会自带,常用于日志的管理,比如分割。logrotate 的执行,依靠的就是 cron。具体可看 Linux日志文件总管——logrotate
三、解决
编辑文件,执行命令: vi /etc/pam.d/common-session-noninteractive
找到这一行:
session required pam_unix.so
在上方任意位置加一行(即保证先执行新增的内容):
session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid
保存后退出。
重启 cron 服务,执行命令:systemctl restart cron
参考文章: