需先定位敏感日志再脱敏:确认auditd状态,用grep筛查含password/IP等关键词的行;用sed原地替换指定行或批量脱敏;audit.log须导出清洗后清空;最后禁用pam_faillock和调整sudo日志。

您在麒麟OS中发现安全日志(如auth.log、secure、audit.log等)里存在包含用户名、IP地址、命令参数甚至密码明文的敏感信息条目,需要精准擦除特定内容而非清空整个文件,避免中断系统认证服务或审计功能。
定位并过滤敏感日志条目
安全日志分散在多个路径,需先确认当前系统启用的审计机制:运行 sudo auditctl -s | grep enabled,若返回 enabled 1,说明auditd服务正在运行,主日志为 /var/log/audit/audit.log;否则重点检查 /var/log/auth.log 和 /var/log/secure。
用grep快速筛查含敏感关键词的行:sudo grep -nE "(password|passwd|secret|192\.168\.|10\.0\.|root.*ssh|sudo.*-S)" /var/log/auth.log。注意IP段要加反斜杠转义,否则正则会误匹配任意数字。
这一步必须做,【不先定位就直接编辑会导致误删关键认证失败记录,影响问题回溯】。
用sed对指定行进行原地脱敏替换
方法一:单行精确替换(适用于已知行号)
假设上一步查得第127行含明文密码,执行:sudo sed -i '127s/password=[^[:space:]]*/password=*** /' /var/log/auth.log。该命令仅替换该行中第一个 password=xxx 为 password=*** ,保留前后日志结构。
方法二:按模式批量脱敏(推荐)
清除所有形如 user=admin password=123456 的组合:sudo sed -i -E 's/(user=[^[:space:]]+)[[:space:]]+(password=[^[:space:]]+)/\1 password=*** /g' /var/log/auth.log。正则中的 [^[:space:]]+ 确保只匹配单词边界内的值,不会误伤URL或路径。
注意:sed -i 直接修改原文件,【操作前务必用 sudo cp /var/log/auth.log /var/log/auth.log.bak 备份】。
清理audit.log中的敏感字段(auditd专用)
audit.log 是二进制兼容格式,不能直接用文本工具编辑。必须通过 auditctl 过滤规则控制后续写入,并用 ausearch + aureport 工具提取清洗后的内容。
第一步:停止审计服务防止写入冲突:sudo systemctl stop auditd。
第二步:将原始日志导出为可读文本并脱敏:sudo ausearch --input /var/log/audit/audit.log --raw | aureport -f --key login_fail --summary | sed 's/192\.168\.[0-9]\+\.[0-9]\+/192.168.xxx.xxx/g' > /tmp/audit_cleaned.txt。
第三步:清空原始审计日志(不可编辑,只能清空):sudo truncate -s 0 /var/log/audit/audit.log。这一步保留文件节点和权限,rsyslog 或 auditd 重启后可继续写入。
第四步:重启服务:sudo systemctl start auditd。
禁用高风险日志记录行为
1、禁止 pam_faillock 记录失败密码尝试:
编辑 sudo nano /etc/pam.d/common-auth,注释掉含 pam_faillock.so 的行(在行首加 #),保存退出。
2、限制 sudo 日志详细程度:
编辑 sudo nano /etc/sudoers,找到 Defaults logfile 行,在其后添加 ,!syslog,变为 Defaults logfile=/var/log/sudo.log,!syslog,避免敏感命令同时写入 auth.log。
3、重启 rsyslog 生效配置:sudo systemctl restart rsyslog。

















