Discord持续填充syslog且存在ptrace读取请求被拦截问题,求无隐私泄露的解决方案及相关配置疑问
我之前也碰到过这个烦人的问题——Discord哪怕关掉了游戏状态推送功能,还是会不停地发起ptrace读取请求,被AppArmor/Snap拦截后疯狂往syslog里写日志,既占磁盘空间又看着闹心。下面针对你的几个疑问逐一解答:
一、旧AppArmor规则修改失效的原因
你提到的手动修改/var/lib/snapd/apparmor/profiles/snap.discord.discord添加deny capability sys_ptrace,的方法现在失效,主要是因为Snap的AppArmor配置是动态生成并维护的,每次Discord Snap更新或者Snapd升级时,这个文件都会被自动覆盖,手动修改的内容会丢失。而且从2023年中开始,Snap的权限机制做了调整,这类直接修改生成文件的方式已经不再生效了。
二、无隐私泄露的解决方案(不授予system-observe权限)
1. 临时全局屏蔽AppArmor拒绝日志(谨慎使用)
你看到的echo -n quiet_denied > /sys/module/apparmor/parameters/audit命令确实能临时生效,它会让AppArmor停止记录所有程序的权限拒绝日志,直到系统重启。但要注意:这是全局设置,会屏蔽所有程序的拒绝日志,如果你之后需要排查其他权限问题,可能会找不到关键日志信息,所以只适合临时应急。
2. 针对Discord单独屏蔽ptrace拒绝日志(推荐)
如果不想全局屏蔽,只想解决Discord的日志填充问题,可以通过auditd来过滤特定的日志事件,只忽略Discord的ptrace相关拒绝记录:
- 临时生效:执行以下命令(64位系统):
32位系统把sudo auditctl -a never,exit -F comm=Discord -F arch=b64 -S ptracearch=b64改成arch=b32即可。 - 永久生效:创建一个audit规则文件,让设置在开机后自动加载:
- 创建规则文件:
sudo nano /etc/audit/rules.d/discord-ptrace.rules - 在文件中添加以下内容(对应你的系统架构):
-a never,exit -F comm=Discord -F arch=b64 -S ptrace - 保存后重启auditd服务:
sudo systemctl restart auditd
- 创建规则文件:
三、关于开机保留设置的疑问
你问把echo -n quiet_denied > /sys/module/apparmor/parameters/audit加到.bashrc里行不行?答案是不行。因为.bashrc只有在你打开终端会话时才会执行,系统开机时没有终端会话,这个命令不会被触发,所以开机后设置会失效。
如果一定要全局开启quiet_denied并永久生效,正确的做法是用systemd服务来实现:
- 创建systemd服务文件:
sudo nano /etc/systemd/system/apparmor-quiet-denied.service - 写入以下内容:
[Unit] Description=Set AppArmor quiet_denied parameter After=sysinit.target [Service] Type=oneshot ExecStart=/bin/sh -c 'echo -n quiet_denied > /sys/module/apparmor/parameters/audit' [Install] WantedBy=multi-user.target - 启用并启动服务:
这样系统开机时就会自动设置sudo systemctl enable --now apparmor-quiet-denied.servicequiet_denied参数了。
四、关于quiet_denied是否为官方计划功能的疑问
之前社区确实讨论过给Snap或AppArmor添加针对单个程序屏蔽权限拒绝日志的细粒度功能,但截至目前(2024年),这个功能还没有正式落地。你提到的quiet_denied是AppArmor的全局参数,并非针对单个程序的开关,所以它并不是当时讨论的针对性解决方案。如果想要针对Discord单独处理,还是推荐上面提到的auditd过滤方法。
备注:内容来源于stack exchange,提问作者Ender

