解决了
除了不注释掉 /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 权限仅限于必要的权限。