You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:15:03