添加 NOPASSWD vagrant 用户的最佳方法?

添加 NOPASSWD vagrant 用户的最佳方法?

使用 vagrant 用户添加 NOPASSWD 的更好方法是什么?

方法一:

groupadd -r admin
usermod -a -G admin vagrant
cp /etc/sudoers /etc/sudoers.orig
sed -i -e '/Defaults\s\+env_reset/a Defaults\texempt_group=admin' /etc/sudoers
sed -i -e 's/%admin ALL=(ALL) ALL/%admin ALL=NOPASSWD:ALL/g' /etc/sudoers 

方法二:

# Set up sudo
echo %vagrant ALL=NOPASSWD:ALL > /etc/sudoers.d/vagrant
chmod 0440 /etc/sudoers.d/vagrant
# Setup sudo to allow no-password sudo for "sudo"
usermod -a -G sudo vagrant

或者也许还有更好的?

答案1

编辑sudoers文件的注意事项

有时,手动编辑您正在创建或修改的任何文件比使用echo ... >或编辑更好sed——尤其sed是除非您非常熟练。这是因为它可以更清楚地显示更改的影响,并且对于您实际上没有创建的文件(例如sudoers在“方法 1”中),在文本编辑器中打开文件会显示文件中可能相关的其他内容。在更改当前配置之前,您通常应该了解它,阅读您正在编辑的任何配置文件有时会有所帮助。

然而,更重要的是,编辑中的小错误/etc/sudoers任何在问题解决之前,文件完全/etc/sudoers.d拒绝工作。sudo

对于桌面版 Ubuntu 系统(但不是大多数服务器系统),有一个相对容易的解决办法;否则,您可能必须启动到恢复模式或从实时 CD/DVD/USB 启动,以解决无法执行任何管理操作的问题。

无论哪种方式,你应该使用visudo编辑/etc/sudoers以及 中的任何文件/etc/sudoers.d

为了/etc/sudoerssudo visudo

/etc/sudoers.d对于名为的文件vagrantsudo visudo /etc/sudoers.d/vagrant

visudo让您编辑一个临时文件,一旦退出,就检查您的语法以确保它正确,然后再将临时文件复制到真实配置文件。

由于这种机制,如果你想使用终端单行命令而不是文本编辑器,您应该能够使用visudosed或类似于管道的某种机制(如)以与“方法 1”和“方法 2”中所使用的方式相当的方式安全地tee编辑文件。sudoers

也许其他人会发布一个答案详细说明如何做到这一点;如果没有,那么下次我有机会使用适合进行此类测试的机器时,我可能会尝试弄清楚并用一个例子来扩展这个答案。或者,使用sedecho安全地创建/修改sudoerssudoers.d配置可能被视为单独问题。如果你的主要兴趣这里是直接授予 NOPASSWD sudo-to-root 权限还是通过组成员身份授予。

按组成员身份授予 sudo 到 root 的权限,而不是按用户授予权限

“方式一”和“方式二”的主要区别在于:

  • “方法 1”使用户成为管理员,并赋予管理员以 root 身份运行命令的能力sudo 没有提示输入密码。
  • “方法 2”赋予了这种能力具体来说对一个用户来说。

除非你想全部管理员能够使用 sudo 来 root没有密码(默认情况下需要输入密码),最好采用“方式二”。

但是,任何你希望能够以 root 身份运行任意命令的用户可能都应该成为管理员!(这将允许他们使用pkexec,并且如果您或您的同事试图弄清楚所有具有执行系统管理任务能力的用户是谁,这将避免混淆。)

因此,最好的办法是很可能添加vagrant为管理员并分别赋予特定NOPASSWD能力vagrant(和不是对于一般管理员来说)。

答案2

请从方法 2 中删除“%”,它不起作用,因为“vagrant”是一个用户而不是一个组,要替换的行是 -

echo vagrant ALL=NOPASSWD:ALL > /etc/sudoers.d/vagrant

相关内容