一、问题描述:
前端时间升级漏洞,升级了polkit,导致防火墙执行**firewall-cmd --list-all**卡住,
polkit(PolicyKit)权限问题 ,是因为 firewalld 服务在向 polkit 请求权限时被阻塞或拒绝,导致进程在后台"挂起"等待授权。
为什么 polkit 会导致 firewall-cmd 卡住?
-
firewall-cmd需要修改或读取防火墙状态时,会通过 D-Bus 向firewalld守护进程发送请求。 -
firewalld在响应前,会通过 polkit 检查当前用户(即使是 root)是否有权限执行该操作。 -
如果 polkit 服务异常、规则文件损坏或 D-Bus 通信阻塞 ,
firewall-cmd就会一直等待 polkit 的授权响应,表现为"命令卡死"。查看polkit报错 systemctl status polkit报错:
● polkit.service - Authorization Manager
Loaded: loaded (/usr/lib/systemd/system/polkit.service; static; vendor preset: enabled)
Active: inactive (dead) since Tue 2026-05-19 10:16:17 CST; 2s ago
Docs: man:polkit(8)
Process: 1268741 ExecStart=/usr/lib/polkit-1/polkitd --no-debug (code=exited, status=0/SUCCESS)
Main PID: 1268741 (code=exited, status=0/SUCCESS)
5月 19 10:16:17 syzl-api systemd[1]: Starting Authorization Manager...
5月 19 10:16:17 syzl-api polkitd[1268741]: Started polkitd version 0.116
5月 19 10:16:17 syzl-api polkitd[1268741]: Loading rules from directory /etc/polkit-1/rules.d
5月 19 10:16:17 syzl-api polkitd[1268741]: Error opening rules directory: Error opening directory "/etc/polkit-1/rules.d": Permission denied (g>
5月 19 10:16:17 syzl-api polkitd[1268741]: Loading rules from directory /usr/share/polkit-1/rules.d
5月 19 10:16:17 syzl-api polkitd[1268741]: Finished loading, compiling and executing 5 rules
5月 19 10:16:17 syzl-api polkitd[1268741]: Lost the name org.freedesktop.PolicyKit1 - exiting
5月 19 10:16:17 syzl-api systemd[1]: polkit.service: Succeeded.
5月 19 10:16:17 syzl-api systemd[1]: Started Authorization Manager

二、解决:
1. 检查 polkit 服务状态
systemctl status polkit
如果状态不是 active (running),这就是根本原因。
重启 polkit 与 D-Bus(最常用)
# 1. 重启 polkit 服务
systemctl restart polkit
# 2. 重启 D-Bus(注意:这会短暂中断桌面和系统服务)
systemctl restart dbus
# 3. 再次测试 firewall-cmd
firewall-cmd --list-all
如果还不行就重新安装
2.重新安装 polkit 相关包
查看 polkit 相关包
rpm -qa | grep polkit
重新安装(以 Kylin/RedHat 系为例)
yum reinstall polkit polkit-pkla-compat -y
重启服务
systemctl restart polkit dbus firewalld

只要polkit服务起来,在执行 firewall-cmd --list-all就没问题了。