如何防止 sudo 用户查看其他 sudo 用户的数据?

如何防止 sudo 用户查看其他 sudo 用户的数据?

我是 Linux 新手(如果重要的话,是 Ubuntu)。我公司的一台机器上有多个 sudo 用户。情况如下:

  1. 每个人都想要 sudo 用户权限,因为他们声称在工作期间需要安装 python 包(他们是 AI 工程师)

  2. 每个用户都将私人 rsa 密钥保存在他们的主文件夹中,以便快速拉取/推送到 github。

因此,从理论上讲,如果 sudo 用户不法,他可以获取所有人的私钥,并强加给他们,然后提取他无权获得的源代码。我该如何防止这种情况发生?

谢谢

答案1

我没有直接回答你的问题,因为你描述的是一个XY问题. 这是你的根本,实际的问题:

每个人都想要 sudo 用户权限,因为他们声称在工作期间需要安装 python 包

问题是这样的:没有人需要使用sudo来安装 Python 包。事实上,我们极力不建议这样做。特别是如果有多个用户使用同一个系统,您无法阻止任何人干扰其他人可能需要的系统级软件包。如果存在版本冲突、某些软件包发生重大更改等情况怎么办?

解决方案 1 — 用户级安装

真正的解决方案是使用 Python 包的用户级安装。也就是说,不要这样做,而是这样sudo pip install …做:

pip install --user pandas

这会将包安装到相应用户的主目录中,并且保留系统包库。

sudo我再怎么强调也不为过:使用with不会带来任何好处pip

解决方案 2——Pipenv 或 Poetry

更好的解决方案是使用pipenv或者poetry,它为包创建一个虚拟环境。

不同项目的软件包和版本甚至可以有所不同——如果您需要一个软件包在一段时间内保持在给定的版本,这一点尤其重要(例如,pandas因更改其 API 而臭名昭著;scipy不久前发生了一些重大变化,...)。

我本来会推荐 Pipenv,但截至 2020 年,维护已经相当缺乏,而且很长时间没有发布任何版本了。

要使用 Poetry,只需在每个用户级别安装它:

pip install --user poetry

然后为当前项目初始化一个新环境:

cd /path/to/project
poetry install pandas

这将创建一个新的 Poetry 配置文件,指定当前项目的要求。运行poetry以了解更多信息或阅读文档。

解决方案 3 —pyenv

最好的办法是让用户安装自己的 Python 版本。你可以使用pyenv创建整个 Python 发行版的用户级安装。这样,用户可以使用其 Pipenv 项目初始化时使用的任何 Python 版本,例如,暂时停留在 3.7 版本,直到他们想要升级到 3.8 版本。

如果您不想通过执行系统级的 Python 小升级(必要时)来破坏每个人的软件包,那么这个功能就特别有用。


底线:如果不需要,不要给普通用户 sudo 访问权限。让他们使用自己的用户空间来安装 Python 和/或 Python 包。

警告:某些 Python 包可能需要特定的库才能成功构建。您无法真正避免在系统级别安装这些库,但在这种罕见情况下,管理员可能愿意安装sudo apt install …所需的任何库。

答案2

推测 Python 开发人员是使用远程方式连接到这台机器,ssh而不是直接在控制台上登录。

在这种情况下,他们的私钥不应该正是出于这个原因,他们根本不需要在共享计算机上。相反,他们应该ssh-agent在本地计算机上运行并使用ssh -A(或ForwardAgent yes在中为该主机设置~/.ssh/config)连接到共享计算机,并仅在本地计算机上保留私钥。使用ssh-agent和代理转发将导致远程(共享)计算机安全地将身份验证请求(例如来自 github 的请求)转发回ssh-agent用户本地计算机上的,在那里将执行 RSA 身份验证,而无需将用户的私钥泄露给除本地计算机之外的任何主机。

(如果本地计算机运行的是 Windows 而不是 linux/unix 版本,那么 Windows ssh 客户端仍应以某种方式提供 ssh 代理转发,但我不知道如何访问它。请查看您的文档以了解详细信息。)

答案3

解决方案是授予 Python 开发人员仅 sudo 实际需要的命令的权限。允许的命令完全指定,包括参数,并且可以使用通配符。

以下是 Unix Stackexchange 帖子中的回答
如何远程执行 ssh 命令,无需密码即可执行 sudo 命令

您可以告诉 sudo 跳过某些命令的密码。

例如/etc/sudoers

archemar  ALL = (www-data) NOPASSWD: /bin/rm -rf /var/www/log/upload.*

这让我可以使用

sudo -u www-data /bin/rm -rf /var/www/log/upload.*

如同 archemar 一样,无需密码。

注意

sudo -u www-data rm -rf /var/www/log/upload.*

不起作用(会要求输入密码),因为rm与 不同/bin/rm

确保/etc/sudoers使用visudo命令进行编辑。

一旦您达到高级水平,您可能希望拥有自己的 sudo文件/etc/sudoers.d

相关内容