Ubuntu 上 Syslog 与 SELinux 的兼容性与实践
一 兼容性与默认策略
- 在 Ubuntu 上,常用的系统日志守护进程是 rsyslog;而 SELinux 属于可选的安全模块,默认并不随系统启用。若未启用 SELinux,rsyslog 以传统的文件权限与访问控制运行,不会受到 SELinux 策略限制。若后续在 Ubuntu 上手动启用 SELinux,需要为 rsyslog 配置相应的 SELinux 策略与布尔值,才能确保日志读写、网络端口监听与模块加载等正常运作。总体结论是:两者可以良好兼容,但需要按需启用与配置 SELinux 策略。
二 启用 SELinux 后的必要配置
- 确认与切换 SELinux 状态
- 查看状态:
getenforce(返回 Enforcing/Permissive/Disabled)
- 临时切换:
sudo setenforce 0|1(仅在当前会话生效)
- 永久生效:编辑 /etc/selinux/config 的 SELINUX= 项(重启后生效)
- 端口与布尔值
- 允许 rsyslog 使用网络端口(示例为 514):
sudo semanage port -a -t syslogd_port_t -p tcp 514
- 允许进程向 syslog 发送日志:
sudo setsebool -P syslogd_can_send_syslog 1
- 文件上下文
- 确保日志文件具有正确的 SELinux 类型(如 syslog_log_t):
sudo chcon system_u:object_r:syslog_log_t:s0 /var/log/syslog
- 重启服务
- 使策略与配置生效:
sudo systemctl restart rsyslog
- 说明
- 以上命令需系统已安装 policycoreutils-python-utils(提供 semanage)与 selinux-basics 等工具;若未安装,请先
sudo apt-get install policycoreutils-python-utils selinux-basics。在 Permissive 模式下可以先验证策略是否影响功能,再切回 Enforcing。
三 常见故障排查清单
- 权限与类型
- 检查日志文件权限与属主(如 /var/log/syslog 常见为 640 root adm),必要时修正:
ls -l /var/log/syslog;sudo chmod 640 /var/log/syslog;sudo chown root:adm /var/log/syslog
- 校验 SELinux 类型:
ls -Z /var/log/syslog,必要时恢复:sudo chcon system_u:object_r:syslog_log_t:s0 /var/log/syslog
- 服务与配置
- 确认 rsyslog 运行:
sudo systemctl status rsyslog;语法检查:sudo rsyslogd -N1
- 远程发送示例:在 /etc/rsyslog.d/50-default.conf 添加
*.* @@remote_ip:514(TCP),保存后 sudo systemctl restart rsyslog
- 网络与访问控制
- 防火墙放行:UFW 示例
sudo ufw allow 514/tcp 或 sudo ufw allow 514/udp
- 若启用 SELinux,确认已放行端口与布尔值(见第二节)
- 日志完整性
- 排查 磁盘空间不足、日志级别过高、日志轮转配置不当、应用未正确配置 syslog 等常见原因。
四 安全与运维建议
- 最小权限与文件权限
- 关键配置与日志文件建议 640,属主 root:adm;仅授予必要主体访问
- 日志轮转
- 使用 logrotate 管理大小与保留期,示例(/etc/logrotate.d/syslog):
/var/log/syslog { daily; missingok; rotate 7; compress; notifempty; create 640 root adm }
- 传输安全
- 远程传输优先 TCP/TLS,在 rsyslog/syslog-ng 中启用 TLS 加密,避免明文泄露
- 访问控制
- 通过 UFW/iptables 限制来源 IP 对 514 端口的访问,仅允许受信网络
- 审计与监控
- 结合 auditd 对日志文件与关键操作进行审计;定期巡检异常日志与策略告警。