本文发布于Cylon的收藏册,转载请著名原文链接~


为什么去除polkit验证

在2021年询问过firewalld项目组,firewalld在dbus通讯时,会进行两部认证 policy kitUID 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:

  1. policy kit
  2. 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]:

  1. 首先需要完全移除修饰器 polkit.require_auth

  2. 完全移除修饰器 @slip.dbus.polkit.enable_proxy

  3. 由于对 slip.dbus 去除,那么需要注释掉 import slip.dbus*

  4. 此时修改firewall server,去除基于slip的mainloop,改为旧版本形式

    mainloop = GLib.MainLoop()
    		slip.dbus.service.set_mainloop(mainloop)
            mainloop.run()
    # 修改为
    mainloop = GLib.MainLoop()
            mainloop.run()
    
  5. 为了兼容命令 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")
    
  6. 最后一步,根据你的发行版本进行打包安装即可


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

[1] firewalld issue 851

[2] firewalld issue 793 drop dependency python-slip

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2023/04/firewalld-without-polkit/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。