You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用journalctl过滤系统信息中的个人敏感信息?

如何使用journalctl过滤系统信息中的个人敏感信息?

当然可以!用journalctl配合一些常用工具,完全能把MAC/IP地址、证书、固件密钥这类敏感信息给过滤掉,我给你分享几个实用的方案:

一、实时查看/导出日志时临时脱敏

这是最直接的方法,用管道结合sed这类文本处理工具,把敏感内容替换成掩码:

  1. 屏蔽IP和MAC地址
    用正则表达式匹配常见的IPv4和MAC格式,直接替换成占位符:

    journalctl | sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}/XXX.XXX.XXX.XXX/g; s/([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}/XX:XX:XX:XX:XX:XX/g'
    

    如果需要处理IPv6地址,只要调整正则就行,比如把匹配IPv6的规则加进去:

    sed -E 's/([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}/XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/g'
    
  2. 隐藏证书和密钥块
    证书、固件密钥这类通常有固定的开头结尾标识(比如-----BEGIN CERTIFICATE-----),直接把整个块替换成提示文本:

    journalctl | sed -E '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/c [REDACTED CERTIFICATE]'
    

    同理,密钥的话只要把匹配的开头结尾换成对应的就行,比如-----BEGIN PRIVATE KEY-----

  3. 导出脱敏后的日志文件
    如果要把清理后的日志保存下来,直接把输出重定向到文件就行:

    journalctl --since "2024-05-01" --until "2024-05-02" | sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}/XXX.XXX.XXX.XXX/g' > cleaned_system_logs.txt
    

二、配置系统,让日志从根源上不记录敏感信息

如果不想事后再处理,还可以让systemd-journald在记录日志时就过滤掉敏感内容,更彻底:

  1. 通过journald配置过滤特定服务日志
    编辑/etc/systemd/journald.conf(或者在/etc/systemd/journald.conf.d/下新建自定义配置文件,比如redact.conf),添加类似规则来限制某些服务的日志级别,或者直接屏蔽:

    [Journal]
    # 禁止记录某个服务的日志
    # FilterSystemd=some-sensitive-service.service:~*
    # 或者只记录该服务的警告及以上级别日志,减少敏感信息概率
    # MaxLevelStore=warning
    

    修改后记得重启journald服务:systemctl restart systemd-journald

  2. 配合rsyslog做深度脱敏
    如果需要更复杂的过滤规则,可以让journald把日志转发给rsyslog,在rsyslog里配置模板替换敏感内容。比如在rsyslog的配置文件里添加:

    template(name="RedactedLog" type="string" string="%timestamp:::date-rfc3339% %hostname% %syslogtag% %msg:s/([0-9]{1,3}\.){3}[0-9]{1,3}/XXX.XXX.XXX.XXX/g%\n")
    *.* action(type="omfile" file="/var/log/redacted.log" template="RedactedLog")
    

    这样存储的日志就是提前脱敏好的。

三、额外小技巧

  • 如果知道某些特定日志条目包含敏感信息,可以用journalctl的字段过滤直接排除,比如:
    journalctl -u !some-sensitive-service.service  # 排除某个服务的日志
    journalctl MESSAGE_ID=!some-message-id          # 排除特定类型的日志条目
    
  • 正则表达式可以根据你实际遇到的敏感信息格式调整,比如有些系统里MAC地址可能用-分隔,就把正则里的:换成[-:]

备注:内容来源于stack exchange,提问作者Glenn G.

火山引擎 最新活动