通过 nmcli 对 NetworkManager 进行更改时需要 root 的“正确”方法

通过 nmcli 对 NetworkManager 进行更改时需要 root 的“正确”方法

是什么正确的是否可以使用单个命令或添加一个小的 polkit 来限制所有非特权用户只读使用 nmcli?

编辑:除了root 之外,只允许特权unix 组(例如“netadmins”)也很好。然而,主要问题是阻止一般非特权用户进行的所有非只读更改。

背景

像我认识的大多数系统管理员一样,对于服务器部署,我通常禁用 NetworkManager 并运行“网络”服务,而不是使用配置文件和网络脚本来配置接口、网桥、绑定等,这很简单、可重复、可靠且非常不方便。 -即使是高级配置也是黑盒子。

在 EL 8 中,旧网络配置已被弃用,取而代之的是 NetworkManager。与此同时,EL 发行版(当前为 EL 7.5)现在允许非 root 用户创建、修改和删除接口,并对现有配置进行几乎无限的更改。对于充当计算头节点的服务器来说,这允许一个用户干扰整个机器的有效运行。对于提供边界服务的服务器来说,这增加了非特权攻击的潜在严重性和安全影响。

我已经阅读了一些有关更改 NetworkManager 的 polkit 配置的文档,但其中大部分都是为了解决笔记本电脑上的一些无线问题。

答案1

显然我们要写Javascript。这不是很有趣吗?

我认为这会起作用:

# /etc/polkit-1/rules.d/10-disable-networkmanager.rules

polkit.addRule(function(action, subject) {
    if (action.id.indexOf("org.freedesktop.NetworkManager.") == 0)
    {
        return polkit.Result.NO;
    }
});

https://doc.opensuse.org/documentation/leap/security/html/book.security/cha.security.policykit.html

https://wiki.archlinux.org/index.php/Polkit#Examples

https://blog.christophersmart.com/2014/01/06/policykit-javascript-rules-with-catchall/

快速rpm -q --dump NetworkManager | grep -i pol显示策略文件是/usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy.搜索它<allow_inactive>yes会指出已知允许的操作偏僻的登录用户。例如,在 Fedora Workstation 29 上,这些似乎是

  • org.freedesktop.NetworkManager.网络控制
  • org.freedesktop.NetworkManager.settings.modify.own
  • org.freedesktop.NetworkManager.settings.modify.system

<allow_active>大致对应于本地登录的用户。 <allow_any>对应于未登录的用户。“已登录”的意思是pam_systemd。基本上“登录”意味着 GUI 或 shell 登录,但当您为 Apache 之类的其他东西配置 PAM 登录时可能不是这样:-)。

相关内容