解决了
除了不注释 /etc/sudoers 中的 #includedir 行之外,使用 进行编辑
sudoers.d/myOverrides
,sudo visudo -f /etc/sudoers.d/myOverrides
并使用我第一次尝试的语法,就可以了。
而且,如果您不想像我一样成为白痴,请确保在保存 visudo 时通过删除 .tmp 来覆盖文件,并且您确定您的语法是正确的。虽然这不是这里的问题,但很容易就可以了 ;-)
我想编写一个 shell 脚本,它应该卸载并关闭一个运行sudo cryptsetup luksClose XYZ
.
它的特别之处cryptsetup
在于它使用内核模块
device-mapper
来管理 luks 容器。我可以从手册中得到的是:它依赖于这个内核模块,没有办法绕过它。
这意味着它必须以 sudo 运行,因此程序可以稍后以 root 身份调用 device-mapper。但是你也可以在没有错误的情况下运行它,直到设备映射器被调用。
我尝试使用visudo
停止 sudo 请求密码,只要sudo cryptsetup
被调用。
首先通过使用
user ALL=(ALL) NOPASSWD: /sbin/cryptsetup
但我意识到这并不意味着 cryptsetup 作为 sudo 运行,而只是不再需要调用 sudo。它首先不是。
然后我尝试使用 /sbin/cryptsetup 作为 /bin/sudo 的参数来欺骗它
user ALL=(ALL) NOPASSWD:/bin/sudo /sbin/cryptsetup
(始终将该行附加到 sudoers 文件的底部以使其成为最后解释的行)
是否有另一种方法可以让我的用户帐户在没有 PW 的情况下按原样运行“sudo cryptsetup luksClose XYZ”?(或者我在 cryptsetup 手册中缺少的东西)
编辑: 我通常使用 PCManFM 来管理容器,它不需要我输入 PW 来关闭容器(仅用于解密 ofc)这是什么巫术?
编辑 2:如果没有一个简单的答案,我将在启动时以 root 身份运行脚本并使其等待用户的键输入,而不是使用键盘快捷键来运行两个单独的打开/关闭脚本。我想这样我就不必做任何 NOPASSWD 了,这很好。
但无论如何我都想知道。
提前致谢
cryptsetup 的无密码使用的第一个语法是正确的。我将其用于为挂起系统创建的别名:
我仍然必须在我的别名中使用 sudo:
alias quit='sudo systemctl suspend'
我会亲自将您想要的确切命令与所有选项一起放入,以便您的 sudo 权限仅限于必要的权限。