Ubuntu Kinetic下cupsd的AppArmor Unix套接字创建权限问题求助
在Ubuntu kinetic系统中,我在/var/log/syslog里看到很多AppArmor拒绝cupsd操作的日志,比如:
operation="create" class="net" info="failed type and protocol match" error=-13 profile="/usr/sbin/cupsd" comm="cupsd" family="unix" sock_type="dgram" protocol=0 requested_mask="create" denied_mask="create" addr=none
operation="create" class="net" info="failed type and protocol match" error=-13 profile="/usr/sbin/cupsd" comm="cupsd" family="unix" sock_type="stream" protocol=0 requested_mask="create" denied_mask="create" addr=none
我尝试在/etc/apparmor.d/local/usr.sbin.cupsd里添加规则来允许创建这类套接字:
unix (create) type=dgram, unix (create) type=stream,但重启apparmor和cups服务后问题还是没解决,有没有什么建议?
我之前处理过类似的AppArmor规则不生效的问题,给你几个实用的排查和解决方向:
手动重新加载AppArmor配置:有时候仅重启systemd服务不会重新解析单个profile,建议手动强制加载cupsd的规则文件,执行以下命令:
sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.cupsd sudo systemctl restart cups这个操作会确保新添加的规则被正确解析并应用。
使用
aa-logprof自动生成规则:手动写规则容易出现语法或匹配逻辑的问题,AppArmor自带的aa-logprof工具可以自动扫描系统日志中的拒绝事件,引导你添加正确的规则。执行:sudo aa-logprof工具会识别到cupsd的套接字创建拒绝请求,按照提示选择允许(allow),它会自动把正确的规则添加到
/etc/apparmor.d/local/usr.sbin.cupsd中,避免手动编写的错误。检查规则的语法和完整性:确认你添加的规则末尾的逗号是否正确,另外有些场景下可能需要指定套接字的地址范围,比如如果cupsd是创建抽象套接字,可能需要补充
addr=abstract,比如:unix (create) type=dgram addr=abstract, unix (create) type=stream addr=abstract,不过先试试前两种方法,
aa-logprof会帮你自动匹配正确的参数。确认profile的生效状态:用以下命令查看cupsd的AppArmor profile是否处于强制(enforce)模式:
sudo aa-status如果显示为
complain模式,规则只会记录日志不会阻止操作,但你的日志是DENIED,所以应该是enforce模式,不过确认一下更稳妥。
备注:内容来源于stack exchange,提问作者jean-christophe manciot

