使用 polkit 在 cockpit 中设置具有特定权限的用户

问题描述

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

我现在想设置此服务器的方式有所不同。我希望我们团队有一个普通的全访问用户 4 来做维护,但我也希望有一个“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]

然后我添加了一个 .rules 文件,我允许在其中访问 c​​ustomeradmin 组:

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...