ansible.posix.firewalld配置防火墙规则触发Polkit错误问题求助
问题根因
报错信息中的PolKit.NotAuthorizedException明确指向PolKit权限校验失败,和你排查排除的SELinux无关,你判断的权限相关方向是正确的,本质是远程提权后的用户没有访问firewalld的DBus接口权限,Fedora 34默认的PolKit规则会拦截非本地会话的firewalld管理请求,再叠加部分默认sudo配置限制,最终触发该报错。
解决方案
按优先级从高到低尝试:
- 升级ansible.posix集合
旧版本的ansible.posix.firewalld模块存在Fedora系列系统下的DBus调用兼容bug,先在控制节点执行以下命令升级集合:
ansible-galaxy collection install ansible.posix --upgrade
升级完成后重新执行原有playbook验证即可。
- 修复sudo配置限制
如果升级集合无效,检查目标节点的sudo配置是否开启了requiretty,该配置会导致Ansible非交互执行时的sudo提权不完整。在所有目标IPA节点上创建/etc/sudoers.d/ansible文件,替换其中的<你的SSH登录用户名>为实际登录账号:
<你的SSH登录用户名> ALL=(ALL) NOPASSWD: ALL Defaults:<你的SSH登录用户名> !requiretty
- 添加PolKit放行规则
如果以上两步都无效,添加Polkit规则放行指定用户组操作firewalld的权限,在所有目标IPA节点上创建/etc/polkit-1/rules.d/50-allow-firewalld.rules,内容如下:
polkit.addRule(function(action, subject) { if (action.id.indexOf("org.fedoraproject.FirewallD1") == 0 && subject.isInGroup("wheel")) { return polkit.Result.YES; } });
创建完成后重启PolKit服务生效:
systemctl restart polkit
注意需要提前将你的SSH登录用户加入wheel用户组。
- 临时验证方案
如果需要快速验证功能,可暂时将firewalld模块替换为直接调用firewall-cmd命令,修改playbook对应任务即可:
- name: 放行HTTP服务 command: firewall-cmd --add-service=http --permanent --immediate become: yes - name: 重载firewalld规则 command: firewall-cmd --reload become: yes
内容的提问来源于stack exchange,提问作者Brandon Young
相关产品推荐
相关产品推荐

