有一个定制的 Ubuntu 22.04 系统,其中有 4 个用户:user_a、user_b、user_c、user_d
我想阻止 2 个用户 (user_c、user_d) 更改 Ubuntu 设置。我已使用 锁定了这些用户的终端rbash
。
使用setfacl
,已为 user_c、user_d 禁用 GNOME 控制中心。这是通过运行此代码(在systemd
具有 sudo 权限的服务中)完成的:
sudo setfacl -m g:user_c:- -R /usr/bin/gnome-control-center
sudo setfacl -m g:user_d:- -R /usr/bin/gnome-control-center
这有效地限制了 user_c、user_d 的访问,以便他们甚至无法查看系统设置。user_c,user_d 无法更改网络连接设置。例如,在 user_c/user_d 中,单击任何连接的“有线设置”均不起作用。这没问题。查看图片Ubuntu 网络连接列表
现在的问题是:我们如何才能阻止这些用户(user_c、user_d)打开/关闭网络连接?(即我们如何隐藏连接下拉菜单中的‘关闭’按钮)。
其他用户(user_a、user_b)仍然应该能够打开/关闭网络连接并更改设置。
答案1
gnome-control-center 与 NetworkManager(通过 D-Bus)对话以配置网络。
即使用户无法运行 gnome-control-center 应用程序,他们仍然可以通过 D-Bus 直接与 NetworkManager 通信。例如,通过 nmcli 或 nm-connection-editor 或只是简单的 dbus-send。限制用户可以运行哪些程序是行不通的——除非您只关心阻止那些不太了解情况的用户。
限制对 NetworkManager 的访问的方式是通过 PolicyKit。请参阅nmcli general permissions
操作以及用户拥有的权限。配置 PolicyKit 以将其限制为某些用户。具体如何做到这一点,这是一个很长的故事。
但是,NetworkManager 中的大多数只读操作都不会被 PolicyKit 检查。每个可以与 D-Bus 通信的用户都可以看到它们。为了防止用户看到这些操作,请配置 dbus-daemon(它还具有可以防止用户看到 NetworkManager API 的策略)。这又是一个很长的故事。
最后,D-Bus 通过使用 unix 套接字(例如/var/run/dbus/system_bus_socket
)来工作。您还可以取消该用户的 unix 权限,以完全访问 D-Bus。但是,这可能会破坏很多东西,因为 D-Bus 只是一种 IPC 机制,而您基本上为用户禁用了这种进程间通信,这可能限制太多(取决于他们应该做什么)。
我们如何才能阻止这些用户(user_c、user_d)打开/关闭网络连接?
nmcli general permissions
列出org.freedesktop.NetworkManager.enable-disable-network
PolicyKit 权限。禁止该用户。
编辑:可以使用位于以下位置的 PolicyKit 文件编辑 org.freedesktop.NetworkManager.policy PolicyKit 文件中的权限:
/usr/share/polkit-1/actions/org.freedesktop.NetworkManager.policy
对于以下操作,设置为“是的' 默认情况下,应更改为 '管理员权限' :
org.freedesktop.NetworkManager.settings.modify.own
org.freedesktop.NetworkManager.network-control
org.freedesktop.NetworkManager.enable-disable-network
(“yes”表示允许任何用户执行该操作。“auth_admin”表示该操作需要由管理用户进行身份验证)
最初,我尝试仅修改操作权限org.freedesktop.NetworkManager.enable-disable-network
。但是,我注意到非管理员仍然可以打开/关闭网络连接。所以我也包括了这些其他操作(上面列出的)。这可能有点过头了。但效果很好。
现在它可以正常工作:对于非管理员用户,配置网络连接的选项被禁用。管理员用户可以在输入密码后打开/关闭网络连接。
不同的操作和权限记录在freedesktop.org/software/polkit/docs/latest/polkit.8.html