考虑这样一个场景:将为用户提供一个工具,并且应允许唯一的操作用户运行主脚本。现在工具使用一些文件来存储敏感信息。我想要的是脚本应该能够访问文件中的数据,但用户不应该。他应该拥有的唯一访问权限是运行脚本。
对于一个简单的情况,让我们考虑该工具包含 2 个文件 main.sh,因为脚本用户只能运行,甚至不能读取它,而 info_file 包含一些敏感信息,只有 main.sh 应该使用,而不是用户使用。
这个工具可能会传递给不同机器上的不同用户。在Linux中处理此类场景的不同方法是什么?
答案1
一种使用 SUID 的方法。
仅授予组和其他人对 shell 脚本和信息文件的执行权限。
编写一个包装 C 程序来调用 shell 脚本。
在 C 可执行文件上设置 SUID 位。(chmod u+s 文件)
最终用户将调用 C 可执行文件。
答案2
一个简单的选择是加密/解密辅助文件。这里探讨了这样做的方法 -https://serverfault.com/questions/489140/what-is-a-good-solution-to-encrypt-some-files-in-unix
请注意,通过阅读脚本,可以很容易地检索密钥并了解所使用的加密方法,除非脚本本身实际上是编译代码,即使这样它也不是无敌的,因为它可以被反编译。如果它是编译的语言代码,大多数语言都有一种调用加密/解密脚本的方法,您可以只存储存储的加密版本。
答案3
保护敏感信息的一种方法,可能是唯一的方法是不是让用户拥有任何直接访问它,无论是在他们自己的个人计算机上还是在中央服务器上。
例如:
- 编写一个只执行(即无读访问)包装脚本,该脚本提供在使用
sudo
.这不必以 root 身份运行,专用的非 root 用户就足够了。 - 不要将脚本的副本提供给用户以供他们在自己的计算机上运行。相反,要求他们在您的服务器上运行它(例如通过
ssh servername sudo myscript.sh
),因为这是您有机会维护访问控制的唯一位置。