为什么去除polkit验证
在2021年询问过firewalld项目组,firewalld在dbus通讯时,会进行两部认证 policy kit
和 UID checking
,正是因为这种情况,使得firewalld不能够通过TCP/IP连接,如果你需要连接,因为存在 UID checking
,这时会因为没有UID会报错。
firewalld needs to do some authorization on the dbus request. It currently tries two ways, in order of preference:
- policy kit
- UID checking
Neither of these are available over a TCP/IP dbus connection. [1]
如何去除polkit
首选需要确定你的firewalld版本,例如Centos7系列,那么你的 firewalld 版本为 0.6.3,那么你需要修改的包为 python-firewall-0.6.3
, 在 debian11 上 firewalld版本默认为 0.9.3,那么需要关注的版本为:python3-firewall_0.9.3
在确定版本后直接从github仓库进行拉去修改就可以
|
|
对于 python-firewall-0.6.3 来说。直接注释掉 slip.dbus.polkit.require_auth
就可以了
|
|
而对于新一些版本的场景下,可以在github上看到,他们移除了对 python-slip 的依赖,这将对去除polkit认证的步骤则有些许调整 [2]:
首先需要完全移除修饰器
polkit.require_auth
完全移除修饰器
@slip.dbus.polkit.enable_proxy
由于对
slip.dbus
去除,那么需要注释掉import slip.dbus*
此时修改firewall server,去除基于slip的mainloop,改为旧版本形式
python1 2 3 4 5 6
mainloop = GLib.MainLoop() slip.dbus.service.set_mainloop(mainloop) mainloop.run() # 修改为 mainloop = GLib.MainLoop() mainloop.run()
为了兼容命令
firewall-cmd
,还需要将 FirewallClient 中使用slip.dbus.xxx
的内容修改为dbus.xxx
python1 2 3 4 5 6 7 8 9
try: self.bus = slip.dbus.SystemBus() # 修改为 self.bus = dbus.SystemBus() except dbus.exceptions.DBusException as e: raise FirewallError(errors.DBUS_ERROR, e.get_dbus_message()) else: print("Not using slip.dbus")
最后一步,根据你的发行版本进行打包安装即可
Tips:Redhat系列官方提供了rpm打包文件直接用就可以
debian control文件为:
Package: python3-firewall
Version: 0.9.3
Architecture: amd64
Description: python3-firewall
Maintainer: Cylon Chau <cylonchau@outlook.com>
Section: comm
Homepage: https://github.com/cylonchau/firewalld
debian构建目录为根据原生包目录格式进行后见即可
dbus配置
debian 系列 dbus 配置与 redhat 系列有略微差别,配置文件目录为
- 主配置文件需要自行控制权限,必须为:
/etc/dbus-1/system.d/org.freedesktop.PackageKit.conf
- 其他配置可以根据redhat 系列进行调整即可
最后感谢firewalld团队,issue回复超级快,如果你需要像使用阿里云安全组使用firewalld管理你公司的大量linux 防火墙,可以试试我的项目 github.com/cylonchau/firewalld-gateway,这是一个firewlld控制器,可以管理大量的firewalld主机