基本上,我有一个预置的 Debian 安装,它在第一次登录时以 root 身份运行安装后 bash 脚本。当 sudo 组中的任何用户使用 sudo 时,此脚本应编辑 sudoers 以使密码可选:
sed -i.bak 's/%sudo ALL=(ALL:ALL) ALL/%sudo ALL=(ALL) NOPASSWD:ALL/' /etc/sudoers
然而,似乎出了问题,用户仍然需要密码才能使用 sudo - 长话短说,这实际上意味着没有人拥有 sudo,因为所有用户都是使用 --disabled-password 创建的。是的,我意识到这可能不是理想/正确/智能/安全的方式,但事实就是如此。
我需要弄清楚的是,哪里出了问题?为什么?该脚本在我每次使用它时都有效,并且它显然运行了其他命令,例如更新某些包,那么为什么它没有正确编辑 /etc/sudoers 呢?如何在没有 root 的情况下检查 sudoers 或找出编辑失败的原因?
答案1
好吧,我们无法真正猜测,因为这取决于您的环境。我的钱将在您试图替换的线路上,而不是存在于 /etc/sudoers 中。 (至少,不确切地正如它所出现的那样)。这意味着它永远不会被替换,因此它永远不会被设置为“NOPASSWD”。
我的意思是,您依赖于其中的特定数量的空间和特定的行格式,如果它一开始与您的正则表达式不匹配......它永远不会被修改。
我建议答案是使用您想要的值将文件添加到 /etc/sudoers.d/ - 然后(也许?)作为用户应该能够'sudo',用来sed
删除目标行。 (如果他们无法这样做,则会失败 - 您可以测试返回代码)。