内核日志本身不记录密码、密钥等应用层敏感信息,真正风险在于SSH、Web、数据库等应用日志;应限制dmesg访问权限(kernel.dmesg_restrict=1),而非错误调低日志级别。

新手配置Linux内核日志级别,核心目标不是“降低敏感信息外泄”——因为内核日志(dmesg输出)本身不记录密码、密钥、用户输入等应用层敏感数据,它主要反映硬件检测、驱动加载、内存管理、中断处理等底层事件。真正可能泄露敏感信息的是应用日志(如SSH登录详情、Web服务错误堆栈、数据库查询日志),这些由rsyslog或systemd-journald管理,而非内核日志。
先明确:内核日志里一般没有你要防的“敏感信息”
内核日志(/proc/kmsg、dmesg输出)内容示例:
[ 1.234567] usb 1-1: new high-speed USB device number 2 using xhci_hcd[ 12.345678] ata1: SATA link up 6.0 Gbps (SStatus 133 SControl 300)[ 105.678901] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
这些是设备、协议、资源状态信息,不包含用户名、IP地址(除非你主动用printk打点)、口令或业务数据。所谓“敏感信息外泄”风险,基本不在内核日志层面。
但如果你担心内核日志被未授权查看,可限制其可见范围
默认情况下,普通用户也能执行dmesg查看内核消息。为减少非必要暴露,可关闭该权限:
- 编辑
/etc/sysctl.conf,添加一行:kernel.dmesg_restrict = 1 - 立即生效:
sudo sysctl -p - 效果:只有 root 用户能运行
dmesg;普通用户执行会提示Operation not permitted
这是最直接、安全、且不影响系统功能的防护方式。
别误调dmesg -n来“防泄露”
命令如dmesg -n 3(只显示err及以上)是控制“哪些级别消息输出到控制台”,不是过滤敏感内容。它反而可能掩盖重要警告(比如WARNING级的内存校验失败、磁盘重映射告警),不利于问题发现。新手不应为“防泄露”而随意降低日志级别。
- 内核日志级别共 0–7,数字越小越严重(0=紧急,7=调试)
-
dmesg -n 4(默认值)已屏蔽INFO和DEBUG,保留WARNING及以上 —— 这个平衡点对生产环境足够安全且实用 - 强行设为
dmesg -n 2(只留CRIT和更高级别)会丢失大量运维线索,得不偿失
真正要防敏感信息外泄?重点管好应用和服务日志
这才是风险主战场。例如:
-
/var/log/auth.log可能含SSH失败的用户名、PAM认证细节 -
/var/log/apache2/access.log含客户端真实IP、请求路径、User-Agent -
/var/log/journal/中systemd服务日志可能含命令行参数(含密码!)
应对建议:
- 禁用
systemd记录命令行:
编辑/etc/systemd/journald.conf,设RemoveFields=_CMDLINE,再sudo systemctl restart systemd-journald - 限制
auth.log访问权限:sudo chmod 640 /var/log/auth.log,确保仅root和syslog组可读 - 用
rsyslog过滤敏感字段(需写自定义模板+正则),或使用logrotate定期归档加密


















