如何在没有密码的情况下以 sudo (!) 身份运行 sudo 命令?(需要以 sudo 身份运行 cryptsetup 才能使用内核模块“device-mapper”)

如何在没有密码的情况下以 sudo (!) 身份运行 sudo 命令?(需要以 sudo 身份运行 cryptsetup 才能使用内核模块“device-mapper”)

解决了

除了不注释掉 /etc/sudoers 中的 #includedir 行之外, sudoers.d/myOverrides使用进行编辑sudo visudo -f /etc/sudoers.d/myOverrides,并使用我首先尝试的语法,就可以达到目的。

如果你不想像我一样傻,请确保在保存 visudo 时删除 .tmp 来覆盖文件,并确保你的语法正确。虽然这不是这里的问题,但很容易出现 ;-)


我想编写一个 shell 脚本来卸载并关闭正在运行的 LUKS 容器sudo cryptsetup luksClose XYZ

的特别之处在于cryptsetup,它使用内核模块 device-mapper来管理 luks 容器。我从手册中了解到:它依赖于这个内核模块,没有办法绕过它。

这意味着它必须以 sudo 身份运行,这样程序稍后才能以 root 身份调用 device-mapper。但您也可以不使用 sudo 运行它而不会出现错误,直到调用 device-mapper。

我尝试使用它visudo来停止 sudo 询问 pw,只要sudo cryptsetup调用即可。

首先使用

user ALL=(ALL) NOPASSWD: /sbin/cryptsetup

但我意识到这并不意味着 cryptsetup 以 sudo 身份运行,而只是不再需要 sudo 来调用。事实上它一开始就不需要 sudo。

然后我尝试使用 /sbin/cryptsetup 作为 /bin/sudo 的参数来欺骗它

user ALL=(ALL) NOPASSWD:/bin/sudo /sbin/cryptsetup

(始终将该行附加在 sudoers 文件的底部,以使其成为最后解释的行)

有没有其他方法可以授予我的用户帐户运行“sudo cryptsetup luksClose XYZ”的权限,而无需密码?(或者是我在 cryptsetup 手册中遗漏的内容)

编辑: 我通常使用 PCManFM 来管理容器,它不需要我输入 PW 来关闭容器(仅仅是为了解密)这是个什么魔法?

编辑2:如果没有简单的答案,我将在启动时以 root 身份运行脚本并让它等待用户的键盘输入,而不是使用键盘快捷键运行两个单独的打开/关闭脚本。我想这样我就不必将任何东西设为 NOPASSWD,这很好。

但无论如何我还是想知道。

提前致谢

答案1

您第一个不使用密码使用 cryptsetup 的语法是正确的。我将其用作我为暂停系统创建的别名:

me        ALL=(ALL:ALL) NOPASSWD: /bin/systemctl suspend

我仍然必须在我的别名中使用 sudo:alias quit='sudo systemctl suspend'

我个人会放置您想要的精确命令以及所有选项,以便您的 sudo 权限仅限于必要的权限。

相关内容