大家晚上好。正如标题所示,我想知道是否有可能保护包含敏感数据的 bash 脚本不被使用该系统的其他用户读取和篡改。
让我解释一下:这些脚本是在办公室的 Debian 计算机上运行的。我的用户“jack”是 sudoers 用户,它使用“sudo”命令时无需输入 root 密码(这是我的工作所必需的)。
我的问题是,其他用户通过 sudoers 用户登录时无需在 ssh 中输入 root 密码,就可以读取或操纵脚本,从而破坏我的工作。我意识到仅修复权限是没用的。
解决我的问题的最佳方案是什么?提前致谢。
答案1
任何 root 用户都能够访问本地文件系统内的文件。没有例外。
您的选择是:
- 加密。
- 使用严格手动输入的密码进行解密并执行。
- 将密码存储在本地以自动化操作将使您回到现在的状态。
- 外部文件系统。
- NFS 挂载可以壁球root 权限,从而阻止远程 root 访问本地文件。然后,您可以通过将脚本从 root 无法访问的区域复制出来作为非压缩用户帐户来自动化,以 root 身份在本地执行它并立即删除它。sudoer 可以
sudo su jack
通过伪装成您的用户来访问它。 - 从受密码保护且无法访问的 ssh 服务器中检索它并在本地执行它。
- NFS 挂载可以壁球root 权限,从而阻止远程 root 访问本地文件。然后,您可以通过将脚本从 root 无法访问的区域复制出来作为非压缩用户帐户来自动化,以 root 身份在本地执行它并立即删除它。sudoer 可以
- 混淆。
- 将其存储在看起来像另一个系统/配置文件的地方,并将其命名为一个普通的名称。
- 任何主动寻找的人都可以找到它。
- 讨论。
- 为什么这么多人认为他们需要共享设备上的 root 访问权限?
- 为什么你要在共享的工作机器上运行个人的东西?
答案2
你无法保护脚本不被篡改根即使有了像 SELinux 这样的 LSM,最终“root”的整个概念仍然是它是系统上权限最高的帐户,因此只应向受信任的人提供 root 访问权限。
唯一的选择是将脚本完全放在另一个系统上,并让用户通过网络调用它(例如通过受限的 SSH shell 或通过某些基于 HTTP 的 API)。一台服务器上的 root 权限并不意味着所有服务器上的 root 权限。
答案3
前面的答案没有提到的另一个选项是在 sudoers 文件中创建限制。不要允许任意数量的用户访问直接 root shell,而是创建脚本来解决用户需要完成的某些任务,并允许每个用户仅运行该用户需要的脚本。这大概可以防止用户检查或篡改他们无权访问的脚本。
你可能还需要研究一个名为网页管理工具其设计目的是安全地委派需要 root 权限的任务,但不泄露完整的 root shell 访问权限。
答案4
尝试shc
加密shell脚本并将其转换为二进制文件。
https://www.thegeekstuff.com/2012/05/encrypt-bash-shell-script/