如何使用命令行将用户添加为新的sudoer?

我使用adduser添加用户后,除非我退出登录再重新登录,否则无法在系统 > 管理 > 用户和组中看到该用户。这是正常的吗?

另外,我可以将新添加的用户设置为sudo用户吗?还是必须在添加后才能更改?我如何通过Shell来实现这个操作?

最后,我可以删除在Ubuntu初始安装时创建的原始用户吗?还是这个用户有特殊性质?

7个回答

只需将用户添加到“sudo”组即可:
sudo adduser <username> sudo

下次用户登录时,更改将生效。
这样做是因为`/etc/sudoers`已经预先配置为授予该组的所有成员权限(您不需要对此进行任何更改):
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

只要您可以访问与您的“原始”用户在同一组中的用户,您就可以删除旧用户。
实际上,您的新用户还应该是其他组的成员。如果在用户设置中将用户的帐户类型设置为管理员,它将至少加入以下所有组:
adm sudo lpadmin sambashare

因为您的系统配置可能会有所不同,我建议查看groups <username>的输出结果,以了解通常使用的组。

谢谢,但是如果我将我的用户添加到“admin”中,我以后也可以将自己添加到任何其他组中,对吗? - David B
任何拥有 root 权限的人都可以将自己添加到任何组中。如果你给予某人完全的 sudo 权限,那就是你得到的结果,无论是作为用户还是作为 admin 的成员。如果你想给予更少的权限,你需要在 sudoer 文件中明确指定。 - txwikinger
1@Dziamid 我不确定 sudo 组是用来做什么的。我们一起来找出答案吧。 - ændrük
9请注意,在12.04 LTS版本中不存在admin用户组。 - rxgx
在Ubuntu 12.04.02 LTS中存在一个管理员组。将用户添加到/etc/group文件中的adm组中可以帮助解决问题。 - Shyamkkhadka
16这对我没用。还是无法使用sudo。 - chovy
如果由于sudoer的问题无法运行sudo命令,您应该在恢复模式下启动并运行此命令。 - user702846
14不得不再次登录才能正常运行。 - PeterM
1用户名是你正在创建的新用户还是已经存在于某个地方的现有用户? - PositiveGuy
1FYI在CentOS 6上不能直接使用。 - jheriko
在Ubuntu 16上,我需要执行sudo adduser myuser && sudo adduser myuser root - Kris
1@Kris,也许你的意思是 sudo adduser myuser && sudo adduser myuser sudo - H2ONaCl
@H2ONaCl 我相信你是正确的,因为在我的本地机器(Ubuntu 16)上看到,我有一个sudo组,但没有root组,这是合理的。 - Kris
嗯...重要的注意事项:如果是要将用户添加到sudo的用户,您需要首先执行su命令进入sudo模式(使用root密码)。然后您可以使用sudo adduser命令。 - Jay Marm
哈哈,我得到了“xy不在sudoers文件中。此事件将被报告。”为什么它不要求我输入sudo密码来验证我是否是管理员呢? - Black
我还要groupadd sudo - Nicolai Weitkemper

我做了。
sudo usermod -a -G sudo <username>

根据建议,在这里

40组sudo不存在 - Aaron Esau
这里唯一可行的解决方案是Ubuntu 16。 - Makan
7对于现有用户来说,这是正确的解决方案。应该将其标记为答案。 - Yokai
3不要忘记使用-a标志,否则将会将用户从除了sudo之外的所有组中移除。 - alexandre-rousseau
@RousseauAlexandre 当然!这非常重要,尤其是当你试图将自己添加到一个非sudo组,并且你是唯一一个拥有sudo权限的用户时... 如果没有使用-a选项,你只是将自己从sudo组中移除了! - Timothy L.J. Stewart
1这不是答案,答案是通过使用visudo命令将行<username> ALL=(ALL) ALL添加到sudoers文件中。 - Owl

打开sudoers文件:使用sudo visudo命令将会在编辑器中打开/etc/sudoers文件(编辑器由$EDITOR定义,可能是GNU nano - 如果不是你想要的,请设置这个变量,例如export EDITOR="nano",然后再次尝试sudo visudo)。
在文件末尾添加以下行。
username ALL=(ALL) ALL   # Change the user name before you issue the commands

然后使用Ctrl + O执行WriteOut。编辑器会要求您输入要写入的文件名。默认情况下,将使用一个临时文件来检查语法错误,然后保存到实际的sudoers文件中。按Enter键接受它。使用Ctrl + X退出nano编辑器。
完成!

11将一个用户直接添加到sudoers文件而不是将该用户添加到适当的组“sudo”中,这是不明智的。 - Kzqai
3使用sudo visudo命令,你可以将输出保存到/etc/sudoers.tmp文件中。当你离开编辑器时,它会自动覆盖/etc/sudoers文件。 - Climbatize
1并且visudo将验证语法以确保没有错误。 - mchid
如果使用这个,会出现语法错误。 - jheriko
2其他解决方案适用于具有内置“sudo”组的操作系统,但对于偶尔没有专用“sudo”组的系统,此解决方案有效。我唯一的建议是您可能希望避免将“sudo”本身放在过程中,因为它可能尚未设置!通过执行“su -”,然后简单地执行“visudio”来轻松解决。这在Gentoo上有效。 - tresf
1我是否还应该添加 <username> ALL=(ALL) NOPASSWD: ALL - alper
此外,如果您想直接编辑/etc/sudoers文件,建议您考虑将文件添加到/etc/sudoers.d/目录中 - 请参考https://superuser.com/questions/869144/why-does-the-system-have-etc-sudoers-d-how-should-i-edit-it - Minkus

有一件事我必须补充,我确信很多人不明白:
一旦你已经执行了`adduser "username"`这个命令,你仍然可以回来再执行`adduser "username" sudo`,然后它将正确地将该用户添加到组中。
实际上,第一次执行`sudo adduser username sudo`是行不通的。它会给你一个错误。总结起来就是在将用户添加到组之前,你必须先创建用户帐户。

在CentOS上,我以root身份操作。

echo ' username ALL=(ALL)   ALL' >> /etc/sudoers

以下代码片段授予用户名对root的访问权限,而无需显式作为root登录。
请确保用户首先已添加到sudo组。在Ubuntu 16.04.1 LTS上测试通过。
sudo adduser username sudo
sudo sh -c "echo 'username ALL=NOPASSWD: ALL' >> /etc/sudoers"

这个在Ubuntu上可以运行吗? - jowan sebastian
1是的,在Ubuntu 16.04上进行了检查。 - Sandeep
4为什么不在一行中使用以下命令进行用户添加:useradd -m username --groups sudo - aidanmelen

所有组中的成员“admin”在Ubuntu中默认允许使用sudo,所以最简单的方法是将用户帐户添加到“admin”组中。
如果您不想给予用户帐户完全的root访问权限,您需要使用visudo编辑/etc/sudoer文件(它确保您在文件中没有任何语法错误,并且完全失去sudo功能)以指定此用户(或新组)可以作为root执行哪些命令。 sudoer手册将为您提供更多关于此的信息。您可以指定特定用户/组被允许以root身份执行哪些命令。

1我原以为这就是“wheel”组的用途了? - Marco Ceppi
@Marco 我不太熟悉那个。你能再解释一下吗? - ændrük
@MarcoCeppi,wheel组在某些系统上用于限制用户可以使用su命令的范围。Ubuntu使用sudo和admin组。 - psusi