logwatch默认不发邮件,需配置mta或指定mailer;主配置应放/etc/logwatch/conf/logwatch.conf;定时任务须用绝对路径并设环境变量;其仅分析明文日志,无法覆盖journal、rootkit等安全盲区。

Logwatch 默认不发邮件,得配好 MTA 或指定 mailer
Logwatch 本身只是生成报告的脚本,不带邮件发送能力。它默认调用 /usr/bin/mail,如果系统没装 mail 命令(比如最小化安装的 CentOS/RHEL 或 Alpine),或者 sendmail、postfix 没跑起来,报告就卡在本地,根本不会发出去。
实操建议:
- 先确认
which mail是否有输出;没有就装mailx(RHEL/CentOS)或bsd-mailx(Debian/Ubuntu) - 检查
systemctl status postfix或systemctl status sendmail,确保至少一个 MTA 正在运行 - 如果不想装完整 MTA,可用
ssmtp或msmtp配 SMTP 中继,然后在 Logwatch 配置里显式指定:mailer = "/usr/bin/msmtp -t"
配置文件路径和关键参数必须改对位置
Logwatch 的主配置在 /usr/share/logwatch/default.conf/logwatch.conf,但直接改这里会被更新覆盖。正确做法是复制到 /etc/logwatch/conf/logwatch.conf(目录不存在就手动建),再修改。
真正控制邮件行为的是这几个参数:
-
MailTo = admin@example.com:必须设,否则报告只输出到终端 -
MailFrom = logwatch@localhost:建议设,避免被某些邮箱当垃圾邮件拒收 -
Output = mail:不能是stdout或file,否则不走邮件链路 -
Detail = High:安全审计建议设为High或Med,Low会漏掉 SSH 失败、sudo 异常等关键项
定时任务要绕过 shell 环境差异,用绝对路径 + 完整环境
很多人把 Logwatch 加进 crontab 后发现每天没收到邮件,但手动执行却正常——大概率是 cron 执行时没加载 /etc/profile 或用户环境,导致找不到 mail、PATH 错、甚至 LANG 导致中文日志解析异常。
解决办法很直接:
- crontab 里用绝对路径:
0 6 * * * /usr/sbin/logwatch --range 'yesterday' --output mail --format html --mailto admin@example.com - 加环境变量前缀:
0 6 * * * PATH=/usr/bin:/bin:/usr/sbin:/sbin LANG=C /usr/sbin/logwatch ... - 别依赖
~/.logwatch/conf/logwatch.conf,cron 不读用户家目录配置
安全审计报告内容容易漏掉 rootkit 或隐蔽登录
Logwatch 默认只分析 /var/log/ 下明文日志,像 auth.log、secure、messages,但它不监控进程、内核模块、隐藏文件或 journal 日志(systemd 环境下)。这意味着:
- 攻击者删了
/var/log/auth.log后新建空文件,Logwatch 就“看不见”任何登录记录 - 用
journalctl记录的日志(默认 Ubuntu 20.04+、CentOS 7+),Logwatch 默认不读,得额外配Service = systemd-journal并确保权限允许读/run/log/journal/ - SSH 密钥登录成功不会记在
auth.log里(除非开LogLevel VERBOSE),所以“无密码登录成功”这类行为 Logwatch 基本不报
真要搞安全审计,Logwatch 只能当第一道过滤器,别把它当唯一依据。日志完整性校验、实时监控(如 auditd)、以及定期比对 lastlog 和 wtmp 才是关键。











