防止特定用户关闭网络连接

防止特定用户关闭网络连接

有一个定制的 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-networkPolicyKit 权限。禁止该用户。

编辑:可以使用位于以下位置的 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

相关内容