Debian系统默认的安装和配置已经提供了不错的安全基准,但面对每日新增的漏洞和潜在的内部异常,静态的防线是不够的。要让一台Debian服务器持续保持“健康”,需要一个能自动执行日常审计的机制。Tiger就是这样一个工具,它不是入侵检测系统,而是一个专注于主机入侵审计和基线检查的经典脚本集。它的核心价值在于,能每天自动跑一遍系统关键位置的快照,把可疑的变更、错误配置、已知漏洞签名直接报告给你。下面直接进入具体的配置和调优过程,让Tiger成为你的日常系统自检引擎。
理解Tiger的检查逻辑与模块构成Tiger本质上是一套用Shell和Perl编写的脚本集合,位于/usr/lib/tiger/目录下。安装后,主控脚本tiger会按顺序调用scripts/子目录里的各个检查模块。这些模块覆盖了账户完整性、文件系统权限、网络监听端口、正在运行的进程、系统补丁状态等。它的工作方式不是实时监控,而是基于快照对比和规则匹配。每次运行,Tiger会生成一份报告,并与上一次的报告进行diff,从而发现新增或消失的条目。理解这一点很重要,因为这意味着第一次运行的结果是基线,之后的每一次运行才是真正有价值的“自检”。
安装与初始化基线在Debian上,Tiger的安装很直接。但安装完成后,不能直接把它丢进cron就完事,必须先手动建立基线。
sudo apt update && sudo apt install tiger -y
安装过程中,Debian的包管理器会自动配置好cron任务,通常在/etc/cron.d/tiger里,默认可能设置为每天凌晨运行。但此时不要让它自动运行。先手动执行一次完整检查,生成初始报告。这个报告会非常长,包含大量“误报”或你已知并接受的风险项。
sudo tiger -H
-H参数表示生成HTML格式的报告,默认输出在/var/log/tiger/report.html。同时,纯文本报告会存放在/var/log/tiger/目录下。第一次运行后,你会看到诸如“检查passwd文件中的空密码账户”、“检查cron任务的所有权”、“检查监听端口”等条目。很多条目可能会标记为FAIL或WARN,这是正常的。现在需要做的是让Tiger接受当前状态为基线,这样下次运行只会报告差异。
sudo tigercron -B
这个命令会将当前报告复制为基线快照,存放在/var/lib/tiger/目录下。之后,每当tigercron通过cron自动执行时,它会生成新报告并与这个基线进行diff,只把变更的部分通过邮件发送给root用户。这是让Tiger从“噪声制造者”变成“信号发生器”的关键一步。
定制Tiger的检测策略Tiger的配置文件是/etc/tiger/tigerrc。默认配置会启用几乎所有模块,但Debian的默认配置已经做了一些裁剪。你需要根据自己的环境进一步调整,以减少无意义的告警。例如,如果你没有使用NIS或LDAP,可以禁用相关的检查。如果你确信某些目录的权限设置是业务必需的,可以将其加入白名单。编辑tigerrc文件:
sudo nano /etc/tiger/tigerrc
一个常见的调整是指定Tiger忽略某些文件系统类型。例如,如果你挂载了proc、sysfs或远程文件系统,让Tiger去检查这些目录的权限和属主是没有意义的,而且会产生大量错误。找到Tiger_FSScan_Ignore设置项,取消注释并调整:
Tiger_FSScan_Ignore='proc sysfs devpts tmpfs nfs cifs'
另一个重要的定制是账户检查。Tiger会检查/etc/passwd和/etc/shadow中的账户,如果存在无密码账户、UID为0的非root账户或登录shell异常的账户,都会告警。如果你有特定的系统账户(比如运行某个服务的账户)确实需要这些配置,可以在tigerrc中设置Tiger_Passwd_Accounts允许列表,或者直接修改对应的检查脚本。但更推荐的做法是,在理解了告警原因后,通过修正系统配置来消除告警,而不是简单屏蔽。
对于网络监听端口的检查,Tiger会列出所有打开的端口并判断其合法性。默认规则文件在/etc/tiger/listeningprocs.ignore里。如果你的服务监听了非标准端口,需要在这个文件中添加规则,否则每次运行都会报告未知端口。格式很简单,一行一条规则,支持正则表达式。
配置邮件通知与日志轮转自检的价值在于及时看到结果。Tiger通过cron运行时,会将差异报告通过邮件发送给root。你需要确保root的邮件能转发到你的日常邮箱。编辑/etc/aliases文件,添加一行:
root: yourname@example.com
然后运行sudo newaliases使其生效。这样,每天凌晨Tiger运行完毕后,你就能在收件箱里看到系统自检的差异报告。如果一切正常,报告内容会很少,甚至只有一行“No differences detected”。一旦出现异常,比如某个二进制文件的MD5值变了、新增了一个高权限账户、某个关键配置文件权限被放宽,报告会精确指出问题所在。
日志轮转同样重要。Tiger的报告会累积在/var/log/tiger/下,不加以控制会占用大量空间。Debian默认安装了logrotate,但Tiger的日志轮转配置可能需要手动添加。创建/etc/logrotate.d/tiger文件:
/var/log/tiger/*.log {
weekly
rotate 4
compress
missingok
notifempty
}
这样能保证日志文件不会无限膨胀,同时保留最近一个月的检查记录,便于回溯问题。
深入模块:文件系统完整性校验Tiger的文件系统检查模块是其核心价值之一。它不依赖像AIDE那样复杂的数据库,而是通过检查关键目录和文件的权限、属主以及SUID/SGID位来发现异常。在/etc/tiger/tigerrc中,可以定义Tiger_FSScan_Dirs来指定需要扫描的目录。默认值通常已经覆盖了/bin、/sbin、/usr/bin、/etc等关键位置。如果你的应用部署在/opt或/srv下,并且包含可执行文件,建议将这些目录也加入扫描列表。
对于SUID和SGID文件的检查尤其重要。攻击者经常通过放置一个SUID root的shell来维持权限。Tiger会列出所有这类文件,并与基线对比。任何新增的SUID文件都会在差异报告中高亮显示。你可以通过Tiger_SUID_Allow变量来指定已知合法的SUID文件列表,减少误报。但同样,每添加一个白名单项,都应该有充分的理由和记录。
结合Debian的安全更新机制Tiger的check_patches模块会对比已安装的软件包版本与Debian安全公告数据库,报告存在已知漏洞但未打补丁的软件包。这个模块依赖于debsecan工具。如果系统上没有安装,Tiger会跳过这个检查。建议安装并配置它:
sudo apt install debsecan -y
安装后,Tiger会自动调用debsecan来获取当前系统的漏洞状态。这个检查非常硬核,因为它直接告诉你系统上哪些包存在CVE编号的漏洞。结合每日自检,你能在第一时间知道是否需要紧急更新某个包,而不是等到定期维护窗口才发现问题。
需要注意的是,debsecan的数据源是Debian的安全追踪器,它报告的是已知漏洞,但不代表这些漏洞都能被远程利用。你需要根据漏洞的严重程度、攻击向量和你的服务暴露面来判断优先级。Tiger只是忠实地报告事实,决策仍需要你来完成。
进程与网络监听检查的实战调优Tiger的check_listeningprocs模块会列出所有处于LISTEN状态的TCP和UDP端口,并与/etc/tiger/listeningprocs.ignore中的规则进行匹配。未匹配的端口会被标记为异常。这个检查对于发现后门或配置错误的网络服务非常有效。例如,一个攻击者在高端口上运行了一个反向shell,Tiger会直接报告这个监听端口,因为它不在白名单里。
调优这个模块时,不要简单地用通配符忽略所有高端口。应该精确地为每个合法的非标准端口添加规则。规则文件支持端口号、协议和程序名的组合匹配。例如,如果你的应用监听在8080端口,运行的程序是java,可以添加:
tcp:8080:java
这样,只有当8080端口上的监听程序确实是java时,才被认为是合法的。如果某天这个端口上的程序变成了别的,Tiger依然会告警。这种细粒度的检查能有效对抗那些试图伪装成正常服务的恶意进程。
处理误报与建立可信基线任何主机入侵审计工具都会产生误报,Tiger也不例外。关键在于如何处理。不建议在第一次遇到告警时就修改检查脚本或放宽规则。正确的流程是:先调查告警的真实原因,确认是业务需求还是配置错误。如果是业务需求,将其记录在案,然后在tigerrc或对应的白名单文件中添加例外。如果是配置错误,修正系统配置,让告警自然消失。
每次修改系统配置或更新软件后,都应该重新生成基线。否则,下次Tiger运行时会报告一大堆“合法”的变更,淹没真正的威胁。重新生成基线的命令和初始化时一样:
sudo tigercron -B
将这个操作纳入你的变更管理流程中。例如,每次通过自动化工具部署应用更新后,在验证服务正常后,自动执行一次基线更新。这样能保持Tiger报告的干净和可操作性。
将Tiger集成到监控体系中对于运行多台Debian服务器的环境,每天登录每台机器查看邮件是不现实的。可以将Tiger的报告集中收集和分析。一种轻量级的方案是,配置各服务器的root邮件都发送到一个集中的邮箱地址,然后用邮件过滤器将Tiger报告分类。更进阶的做法是,在cron任务中,不直接发送邮件,而是将Tiger的输出通过脚本解析后,发送到你的集中式日志系统或告警平台。
例如,可以修改/etc/cron.d/tiger中的命令,将输出重定向到一个文件,然后用Filebeat之类的工具采集走。或者编写一个简单的包装脚本,检查Tiger的退出码和输出内容,如果发现FAIL级别的告警,就通过Webhook发送到企业微信或钉钉。这样,Tiger就从一个单机工具变成了整个基础设施安全感知网络的一部分。
Tiger的检查结果也可以作为合规审计的证据。它生成的报告详细记录了检查时间、检查项和结果,能够证明系统在某个时间点的安全状态。对于需要满足等保或其他合规要求的场景,保留这些报告非常有价值。
定期审查与持续优化部署Tiger并配置好每日自检只是开始。安全是一个持续的过程。建议每月至少审查一次Tiger的配置和报告趋势。看看哪些模块经常产生告警,是规则过于严格还是系统确实存在反复出现的问题。对于Debian系统的更新,Tiger自身的检查逻辑也会随着新版本而变化,定期查看/usr/share/doc/tiger/下的CHANGES和README文件,了解新功能和检查项的变动。
另外,Tiger的检查会消耗一定的系统资源,尤其是在文件系统扫描阶段。对于资源紧张的虚拟机或嵌入式Debian系统,可以通过调整tigerrc中的扫描目录范围、排除文件系统类型以及降低某些模块的检查深度来减少负载。例如,可以设置Tiger_FSScan_Limit来限制扫描的文件数量,或者完全禁用某些不适用于该环境的模块。在安全性和性能之间找到平衡点,是系统管理员需要根据实际情况做出的判断。
最终,Tiger会成为你运维工作中一个沉默但可靠的伙伴。每天一封邮件,寥寥几行差异报告,意味着系统在按预期运行。一旦出现异常,它能比任何监控系统都更早地告诉你:有什么东西悄悄改变了。这种对系统底层状态的持续感知能力,正是构建纵深防御体系不可或缺的一环。
