首页 > 解决方案 > 使用 polkit 在 cockpit 中设置具有特定权限的用户

问题描述

我正在创建一个运行 Azure SDK 的基于 Ubuntu 的服务器。我们客户所需的主要功能之一是服务器的 IP 地址配置。我以前曾使用 Cockpit 来完成此类任务,但我总是将它与我​​自己的特权(阅读:在 sudo 组中)用户结合使用。像这样运行驾驶舱允许所有我不想要的管理任务。

我现在想设置这个服务器的方式是不同的。我希望有一个普通的全访问用户四个我们的团队进行维护,但我也希望有一个只能更改服务器网络配置的“customeradmin”用户。

我已经阅读了很多关于 PolKit 和对权限的细粒度控制的文章,但我就是无法理解它。这是我到目前为止所尝试的:

  1. 将“customeradmin”用户添加到 sudo 组:当然可以,但用户也可以访问 cockpit 的其他部分,这是不行的
  2. 在 /usr/share/polkit-1/rules 中添加我自己的 .rules 文件:
polkit.addRule(function(action, subject) {
  if ((action.id == "org.freedesktop.NetworkManager.settings.modify.system" || 
       action.id == "org.freedesktop.NetworkManager.network-control") &&
    (subject.isInGroup ("sudo") || subject.isInGroup ("customeradmin"))) {
    return polkit.Result.YES;
  }
});

当我从终端运行 nmcli 命令时,这基本上没有改变,甚至权限都没有改变:

customeradmin@osboxes:/usr/share/polkit-1$ nmcli g permissions
PERMISSION                                                        VALUE   
org.freedesktop.NetworkManager.enable-disable-network             yes     
org.freedesktop.NetworkManager.enable-disable-wifi                yes     
org.freedesktop.NetworkManager.enable-disable-wwan                yes     
org.freedesktop.NetworkManager.enable-disable-wimax               yes     
org.freedesktop.NetworkManager.sleep-wake                         no      
org.freedesktop.NetworkManager.network-control                    yes     
org.freedesktop.NetworkManager.wifi.share.protected               yes     
org.freedesktop.NetworkManager.wifi.share.open                    yes     
org.freedesktop.NetworkManager.settings.modify.system             auth    
org.freedesktop.NetworkManager.settings.modify.own                yes     
org.freedesktop.NetworkManager.settings.modify.hostname           auth    
org.freedesktop.NetworkManager.settings.modify.global-dns         auth    
org.freedesktop.NetworkManager.reload                             auth    
org.freedesktop.NetworkManager.checkpoint-rollback                auth    
org.freedesktop.NetworkManager.enable-disable-statistics          yes     
org.freedesktop.NetworkManager.enable-disable-connectivity-check  yes     
org.freedesktop.NetworkManager.wifi.scan                          unknown 

运行pkexec nmcli g permissions要求输入 admin 或 sudo 组中用户的密码(如中配置/etc/polkit-1/localauthority.conf.d/51-ubuntu-admin.conf

  1. 的输出journalctl -b给了我一个关于无法以特权用户身份启动 cockpit-bridge 的错误:
Apr 29 11:08:43 osboxes pkexec[161495]: customeradmin: Error executing command as another user: Not authorized [USER=root] [TTY=unknown] [CWD=/run/user/1002] [COMMAND=/usr/bin/cockpit-bridge --privileged]

然后我添加了一个允许访问 customeradmin 组的 .rules 文件:

polkit.addRule(function(action, subject) {
  if ((action.id == "org.cockpit-project.cockpit.root-bridge") &&
    (subject.isInGroup ("sudo") || subject.isInGroup ("customeradmin"))) {
    return polkit.Result.YES;
  }
});

也无济于事。非常感谢所有帮助!

标签: ubuntu-20.04networkmanagercockpitnmclipolkit

解决方案


推荐阅读