本文发布于Cylon的收藏册,转载请著名原文链接~
为什么去除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仓库进行拉去修改就可以
git fetch v0.9.3
git checkout v0.9.3
对于 python-firewall-0.6.3 来说。直接注释掉 slip.dbus.polkit.require_auth
就可以了
@slip.dbus.polkit.require_auth(config.dbus.PK_ACTION_POLICIES_INFO)
@dbus_service_method(config.dbus.DBUS_INTERFACE_POLICIES, in_signature='',
out_signature='as')
而对于新一些版本的场景下,可以在github上看到,他们移除了对 python-slip 的依赖,这将对去除polkit认证的步骤则有些许调整 [2]:
-
首先需要完全移除修饰器
polkit.require_auth
-
完全移除修饰器
@slip.dbus.polkit.enable_proxy
-
由于对
slip.dbus
去除,那么需要注释掉import slip.dbus*
-
此时修改firewall server,去除基于slip的mainloop,改为旧版本形式
mainloop = GLib.MainLoop() slip.dbus.service.set_mainloop(mainloop) mainloop.run() # 修改为 mainloop = GLib.MainLoop() mainloop.run()
-
为了兼容命令
firewall-cmd
,还需要将 FirewallClient 中使用slip.dbus.xxx
的内容修改为dbus.xxx
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主机
Reference
[2] firewalld issue 793 drop dependency python-slip
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2023/04/firewalld-without-polkit/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。