Linux 日志安全与权限管理

14次阅读

应收紧日志权限:将 auth.log 属组改为专用组、chmod 640、配置 rsyslog 的 $filecreatemode 和模板绑定、logrotate 中显式设 create 640,并避免将用户加入 adm 或 systemd-journal 组。

Linux 日志安全与权限管理

日志文件默认权限太松,/var/log 下的 auth.log 被普通用户读取怎么办

Linux 默认把很多日志(比如 auth.logsecure)设为 640644,只要用户在 syslogadm 组里就能读——而很多发行版会把普通用户自动加进 adm 组。这不是疏忽,是历史兼容性妥协,但对安全敏感环境就是隐患。

实操建议:

  • 检查当前权限:ls -l /var/log/auth.log,确认属组和权限位
  • 移出无关用户:用 sudo gpasswd -d $USER adm 把不需要查日志的用户踢出 adm
  • 收紧日志属组:把 auth.log 所属组改为专用组(如 logview),再只加授权人员进该组
  • 禁止全局可读:运行 sudo chmod 640 /var/log/auth.log,并确保 rsyslog 配置里有 $FileCreateMode 0640

rsyslog$FileCreateModeFileGroup 不生效?

改完配置重启 rsyslog,新日志权限还是不对,大概率是模板没绑定或规则顺序错了。rsyslog 按配置文件从上到下匹配,靠前的通用规则会覆盖后面精细设置。

实操建议:

  • 确认模板定义在 module(load="imfile") 之前,且用 template(name="SecureLogTemplate" ……) 显式声明
  • 在日志规则行末尾显式引用模板:*.* /var/log/auth.log;SecureLogTemplate
  • FileGroup 只对文件创建生效,已有文件需手动 chgrp$FileCreateMode 不影响 rotate 后的新文件,得同步配 logrotatecreate 指令
  • 测试是否加载成功:sudo rsyslogd -N1 检查语法,sudo rsyslogd -f /etc/rsyslog.conf -d 2>&1 | grep -i template 看模板是否被识别

logrotate 轮转后日志权限变回 644 怎么办

logrotate 默认用 create 644 root root,哪怕原文件是 640,轮转一搞就“回退”。更麻烦的是,它不继承 rsyslog 设置,也不管你之前手动 chmod 过什么。

实操建议:

  • 在对应配置段(如 /etc/logrotate.d/rsyslog)里显式写:create 640 syslog adm
  • 避免用 sharedscripts 时权限被脚本干扰——如果 postrotate 里调了 chmod,要确保它跑在 create 之后
  • 注意用户上下文:create 的 owner/group 是以 logrotate 进程身份(通常是 root)创建的,但若配置了 su 指令,权限行为会变化
  • 验证方式:sudo logrotate -f /etc/logrotate.d/rsyslog && ls -l /var/log/auth.log*,看新文件权限是否符合预期

journalctl 查日志时,普通用户看到 Access denied 却又无法 sudo,怎么安全放行

systemd-journald 默认只允许 root 和 systemd-journal 组成员读全部日志,但直接加用户进这个组等于给了完整日志读取权——包括内核、服务、甚至其他用户的命令行参数,风险远超 auth.log

实操建议:

  • 别加进 systemd-journal 组,改用 journalctl --user 查当前用户自己的服务日志(需服务启用 User=
  • 对必须共享的日志,用 StandardOutput=journal+console + StandardError=journal+console 让关键服务日志同时落盘,再单独控制落盘文件权限
  • 如真需有限制的 journalctl 访问,用 sudoers 限定命令参数:%auditteam ALL=(root) /usr/bin/journalctl -u sshd -n 100
  • 注意:journalctl --since "2 hours ago" 这类时间过滤不会降低权限要求,仍需完整 journal 访问权

日志权限不是单点开关,rsyslog、logrotate、journald、文件系统 ACL、用户组策略全在互相覆盖。最容易被忽略的是 logrotate 的 create 指令和 rsyslog 的模板绑定——这两处不动,其他地方调得再细也白搭。

text=ZqhQzanResources