是什么正确的是否可以使用单个命令或添加一个小的 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 登录时可能不是这样:-)。