长久性检查服务器之上的全部用户crontab属于系统管理当中、安全审计之内的一项具有基础性且关键性质的工作,这不但对洞察系统整体的自动化任务情形有所帮助,还是排查异常任务、落实资源规划以及权限复核的必然步骤。明晰高效、周全的查看方式,能够有效提高维护工作的效率以及可靠性。
如何查看Linux系统所有用户的crontab
在Linux里头,每个用户能够运用crontab -l命令去查看自身的计划任务 不过要是要查看所有用户 那就得借助与系统级相关的那般任务目录或者某种特定的管理命令才行 最常见的那个办法是直接去检查/var/spool/cron/cronsetabs这样子的一个目录 此目录之下一般是以用户名来命名的文件便是各个用户的crontab文件 然而普通用户一般是没有直接读取这样子一种 那种这个那个相关目录的权限的 。
另一种通用方式是linux 查看所有用户crontab,编写一个简易脚本,去遍历/etc/passwd里的全部有效用户,接着尝试以该用户的身份,或者借助sudo去执行crontab -l命令。诸如这般,能够运用for user in $(cut -f1 -d: /etc/passwd); do echo “=== $user ===”; sudo crontab -u $user -l 2>/dev/null; done此类这样的循环指令。这般操作能够切实有效地将所有用户的任务给罗列出来,不过执行此操作是需要具备相对应的sudo权限的。

为什么需要检查所有用户的crontab
换成安全运维的视角来看,当攻击者成功侵入系统之后,往往会借助crontab来达成持久化掌控,也就是在某一个用户(甚至并非登录状态的用户)之下植入带有恶意性质的定时任务。所以,定期针对所有用户的crontab展开审计,是察觉后门以及异常行为的关键方式,绝不能仅仅聚焦于root或者常用账号。
在资源管理以及故障排查层面,部分用户或许设定了耗费大量资源的定时任务,像频繁的数据备份、复杂计算这类定时任务,这极有可能致使在特定的时间点,系统负载猛然增加。知晓所有用户的任务全局状况,对定位性能瓶颈的根源具备帮助作用,并且能够作合理的任务调度协调,以此避免任务之间相互产生干扰。
使用cat命令直接查看crontab文件

如同前面所讲述的那样,在其中,系统用户的crontab文件,一般情况下,是存放在/var/spool/cron/crontabs/这个目录之下的,这里所指的是Debian、Ubuntu等类型的系统,或者呢,它会存放在/var/spool/cron/这个目录里面,这是CentOS、RHEL等系统而言的。要是加以这样的操作,使用sudo cat /var/spool/cron/crontabs/<strong>,亦或者是使用sudo cat /var/spool/cron/</strong>,如此这般就能够直接将所有文件的内容输出出来,就会呈现出如此这般的结果。此类方式最为径直,然而输出成果并无明晰的用户名予以分隔,一旦文件数量较多之时,阅读起来兴许会有一些杂乱 。
存在一种经过改进的办法,那便是将ls以及cat命令予以结合,即执行这个操作:sudo ls /var/spool/cron/crontabs/ | xargs -I {} sh -c '这个步骤先把以下显示的那些所有用户相关的名字依次列出来红旗linux,然后再对每个用户的任务相关内容逐个进行显示,并且会以没有任何内容的空行做好各自单独的分隔,以此方式让整体输出的结构变得更加清晰明了linux安装,从而方便后续再去进行检查或者开展脚本程序的处理工作'; echo “User: {}”;那接下来执行这个行为,它会依据上述显示的名字去执行相应的路径浏览指令,即sudo cat /var/spool/cron/crontabs/{};最后再执行这个动作,即echo。
使用脚本批量获取用户crontab
若处于需要定期审计或者存在用户数量众多的环境状况下,去编写一个相关Shell脚本会是更为高效的一种抉择。该脚本的核心逻辑在于对系统用户列表展开遍历操作。我们能够从/etc/passwd里提取出所有用户的登录Shell并非/usr/sbin/nologin以及并非/bin/false的账号,原因在于,这些才是具备可能性拥有交互的并且具备可能性设置存轮任务调度配置文件的最为真实情况的用户。

可以于脚本里运用getent passwd | cut -d: -f1来获取全部用户名,接着经由循环予以处理,重点是在执行crontab -u $USER -l命令之际的错误处理,对于那些未设置crontab的用户而言,此命令会返回错误消息,通常借助2>/dev/null把错误输出重定向弃置,仅展示成功列出任务的用户信息,可以把脚本输出重定向至文件,以利于存档以及对比分析 。
检查系统级crontab目录/etc/cron.
除了用户个人的crontab之外,Linux系统存有多个系统级的cron目录,像是/etc/cron.hourly/、/etc/cron.daily/、/etc/cron.weekly/、/etc/cron.monthly/,还有配置文件/etc/crontab以及/etc/cron.d/目录里的文件。于这些地方所放置的计划任务,通常是由root用户进行管理,服务于系统整体。
整全的审计必然得涵盖这些地方,运用sudo ls -la /etc/cron.</strong>能够查看各个目录下的脚本,用sudo cat /etc/crontab查看系统主crontab文件,格外要留意/etc/cron.d/目录,该目录准许以单一文件的形式增添任意用户的任务,其格式跟/etc/crontab一样,是管理员以及某些软件包常用的位置,同样得认真核查。

如何分析和管理查看到的crontab
取得全部crontab列表之后,剖析是核心所在。首要得留意任务运行的指令以及脚本路径,核查是不是有未知或者可疑的URL、IP地址或者二进制文件;其次,留意任务的执行频次以及用户,评定其合理性与资源消耗;对于非特权用户执行的涉及系统关键路径的命令,需予以警惕 。
在管理范畴之内,针对所察觉到的无主的、被废弃掉的或者存有可疑之处的任务,应当及时地跟相关的用户去进行确认,亦或是直接予以清理。不妨考虑借助配置管理工具(像是Ansible)编撰playbook,按照固定的周期去收集全部服务器的crontab状态,进而开展集中化的版本管理以及差异对比。如此一来,任何未曾获得授权的变更均能够被快速地发现并且定位 。
crontab权限管理与安全最佳实践

可以借助/etc/cron.allow与/etc/cron.deny文件来操控权限,以此防止普通用户对cron进行滥用。要是cron.allow存在,那么唯有列于其中的用户能够运用crontab;要是不存在而cron.deny存在,那么列于其中的用户会被禁止使用。针对限制cron使用范围而言,合理配置这些文件是第一道防线。
在安全实践方面 ,要依照最小权限原则 ,防止于cron任务里以root身份去执行那些不必要的操作 。要是存在必须运行的任务 ,就得保证其调用的脚本或者程序路径不会被非授权用户写入路径 ,借此避免经由路径劫持来实施提权 。与此同时linux 查看所有用户crontab,要保证cron服务自身的日志 (一般处于/var/log/cron或者/var/log/syslog )能够被正确记录以及监控 ,进而达成事后审计以及实时告警 。
于日常运维期间,你是更偏好运用现成的脚本工具去审计crontab,还是惯于自行编写脚本来达成特定的审计需求呢?欢迎于评论区分享你的方法与经验,要是觉着本文对你具有帮助,请点赞并分享给更多有需要的朋友。
