问题描述
我正在创建一个运行 Azure SDK 的基于 Ubuntu 的服务器。我们客户所需的主要功能之一是服务器的 IP 地址配置。我以前有一些使用 Cockpit 执行此类任务的经验,但我总是将它与我自己的特权用户(阅读:在 sudo 组中)结合使用。像这样运行 cockpit 允许所有我不想要的管理任务。
我现在想设置此服务器的方式有所不同。我希望我们团队有一个普通的全访问用户 4 来做维护,但我也希望有一个“customeradmin”用户,它只能更改服务器的网络配置。
我已经阅读了很多关于 PolKit 和对权限的细粒度控制的文章,但我就是无法理解它。这是我到目前为止尝试过的:
- 将 'customeradmin' 用户添加到 sudo 组:这当然有效,但该用户还可以访问 cockpit 的其他部分,这是不行的
- 在 /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
中的配置)
-
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 文件,我允许在其中访问 customeradmin 组:
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 (将#修改为@)