有一个场景我很担心,我不确定是否可以实现。我有一台具有以下设置的机器:
- LUKS 加密的主系统分区。
- 具有 sudo 访问权限的用户(已添加到 sudoers 列表)。
- sudoer 无法以 root 身份登录(因为他不知道密码),也无法执行“sudo su”。
- 作为系统管理员,我获得了 root 访问权限。
问题是:我可以以某种方式阻止或拒绝 sudoer 用户更改 LUKS 主密钥吗?
我可以拒绝他执行 dm-setup 或 cryptsetup,但他总是可以移动和重命名文件,或者他可以下载一些库并自己编写一个应用程序来更改 MK。我不知道是否有什么东西可以阻止他从内核级别执行 dm-setup/cryptsetup 接口的 linux 操作。
那么,如果我向用户授予 sudoer 访问权限,有什么方法可以保持 LUKS 主密钥不变吗?
答案1
您在“以 root 身份登录”和“具有 sudo 访问权限”之间绘制了错误的二分法。这些不应该被认为是不同的事情。如果您不信任您的用户具有 root 访问权限,那么就不要让他们使用 sudo!无论如何,仅阻止命令sudo su
是无意义的,有一个sudo -s
获得 root shell 或者你可以sudo bash
。或者还有一百万种其他方法。
基本上你不能创建 sudo 用户不能做的事情的黑名单。你将会失败,因为它本来就不是这样工作的。一旦您能够访问 PID 1 等少数内容,系统就属于您了。
你什么能do 是将特定进程列入白名单。确保这些进程也不能被用户写入,并确保它们不会以允许执行任意命令的方式接受用户输入或参数。请注意,许多常见的 UNIX 工具允许以一种或另一种方式执行任意命令。如果他们只需要 sudo 访问权限来执行一项任务,一个好方法是创建一个包装器脚本,该脚本仅执行一项任务并且不接受任何参数,并允许用户以 root 身份执行该脚本。
答案2
如果通过主密钥您的意思是用于加密内容的密钥,如果不重写 LUKS 容器就无法更改该密钥:解锁以访问数据、备份数据、重新创建 LUKS 容器以及从备份恢复。
如果你的意思是主密钥只是用于解锁 LUKS 容器的密码之一,那么是的,这些可以更改,但您必须首先知道现有的密码。
简而言之,如果您不希望其他用户弄乱 LUKS 密钥,那么就不要告诉他/她密码。您不需要使用 sudo 执行任何操作。当然,请对 LUKS 标头进行异地备份,以便在它损坏或被篡改时可以将其恢复。