Linux服务器添加sudo用户步骤详解:安全授权与常见问题
引言:sudo命令与系统权限的核心概念
在Linux服务器管理中,sudo是一个非常特殊的命令,它使得系统管理员能够以受控的方式将管理员的权限下放给普通用户。当你管理服务器的时候,你时常需要执行前面带有sudo的命令,因为这样可以让当前用户临时处于系统管理员root的等级,从而完成诸如安装软件、修改网络配置、查看系统日志等高级操作。
原本系统管理员权限只有用户root拥有——root用户是Linux系统中的超级管理员,对系统拥有生杀大权,可以读取、修改、删除任何文件和目录,执行任何程序。但直接以root身份登录或长期使用root操作存在巨大的安全风险:一旦误操作(如rm -rf /)或密码泄露,整个系统可能瞬间崩溃或被攻破。sudo命令的出现,就是为了让普通用户也可以拥有系统管理员的权限,但受到严格的审计和控制——每次执行sudo都会记录日志,并且可以精细到限制用户只能运行某些特定命令。
本教程,将会手把手带你在Ubuntu操作系统下创建一个能拥有sudo权限的新用户,而且还不需要更改服务器的/etc/sudoers文件——这是官方推荐的安全做法,因为直接编辑/etc/sudoers一旦语法错误,可能导致所有用户都无法使用sudo,从而无法恢复系统。
适用环境:Ubuntu 18.04 / 20.04 / 22.04 / 24.04 LTS 以及大部分Debian系发行版。命令同样适用于CentOS/RHEL(但组名可能为wheel),本文以Ubuntu为例。
前置知识:sudo组与/etc/sudoers的关系
在Ubuntu系统中,sudo权限是通过用户组来统一管理的。默认情况下,系统会创建一个名为sudo的用户组(在某些旧版本中为admin组),凡是属于这个组的用户,都自动获得执行sudo命令的权限。这种设计免去了手动编辑/etc/sudoers文件的麻烦,也大大降低了配置出错的风险。
/etc/sudoers文件是sudo命令的核心配置文件,它定义了哪些用户或组可以在哪些主机上以哪些身份执行哪些命令。其语法非常严格,通常推荐使用visudo命令来编辑(该命令会进行语法检查)。但本教程中,我们不触碰这个文件,而是利用系统预设的%sudo ALL=(ALL:ALL) ALL这一行规则(即sudo组的成员拥有完整权限),将新用户添加到该组即可。
| 授权方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 编辑/etc/sudoers(visudo) | 权限粒度精细,可限制具体命令 | 易出错,风险高,需root谨慎操作 | 大型企业环境,需精细管控不同管理员职责 |
| 将用户加入sudo组 | 操作简单,安全可靠,不易出错 | 权限为全开放(所有命令均可执行) | 中小型团队、个人开发者、信任的管理员 |
| 使用sudoers.d目录 | 模块化,便于自动化管理 | 仍需了解sudoers语法 | 云原生环境或配置管理工具(如Ansible) |
本教程采用第二种方式,是Ubuntu官方推荐的最简单且最安全的做法。
整体操作流程概览
整个操作分为四个核心步骤,我们将在后续逐一详解:
- 访问服务器 —— 通过SSH或云厂商控制台登录到目标Ubuntu机器。
- 添加一个新的普通用户 —— 使用adduser命令创建账号并设置密码。
- 添加用户到sudo组 —— 使用usermod命令将新用户加入sudo组。
- 测试用户的sudo权限 —— 切换到新用户,执行需要高权限的命令验证是否成功。
步骤1 - 访问服务器
首先,你需要获得一台Ubuntu服务器的访问权限。如果还没有服务器,可以在这里免费领取(注:各大云厂商通常提供新用户试用套餐,例如阿里云、腾讯云、华为云等均有免费体验活动)。
登录方式通常有两种:
- SSH客户端(推荐):在本地终端(Mac/Linux)或使用PuTTY(Windows)通过ssh root@你的服务器IP方式登录。
- 云厂商提供的网页终端:例如阿里云WorkBench、腾讯云OrcaTerm等,可直接在浏览器中进行远程管理,无需额外配置。
使用阿里云提供的WorkBench直接登录(如下图),只需在控制台找到实例,点击“远程连接”即可进入命令行界面。如果你是首次登录,建议使用root用户或具有初始管理员权限的账户。

专家建议:生产环境中,强烈建议禁用root直接SSH登录,并改用普通用户+sudo的方式。这样可以有效防止暴力破解攻击,因为攻击者通常首先尝试root账号。本教程正是为此最佳实践做准备——先创建一个有sudo权限的普通用户,后续就可以关闭root远程登录了。
步骤2 - 添加一个新的普通用户
登录成功后,你会看到命令行提示符。现在我们需要创建一个新用户,假设你想创建的用户名为example(你可以替换为自己喜欢的名称,如admin、deploy或你的姓名拼音)。
使用adduser命令新增一个用户,用户名可以自定义。adduser是一个交互式工具,它会自动创建用户的家目录(/home/example)、复制默认配置文件(如.bashrc),并提示你设置密码和填写可选的用户信息。
执行以下命令(注意当前用户需要有root或sudo权限,如果你已用root登录,则无需加sudo;否则需在命令前加sudo):
sudo adduser example
系统会依次提示:
- 输入新用户的密码(需要输入两次以确认)。密码建议至少8位,包含大小写字母、数字和特殊字符,以提高安全性。
- 填写用户的“全名”、“房间号码”、“工作电话”等额外信息,这些是可选的,可以直接按回车跳过(留空)。
- 最后系统会显示你输入的信息摘要,询问“信息是否正确?”,输入Y(或y)并回车即可完成创建。

术语解释:adduser与useradd的区别 —— adduser是一个Perl脚本,它调用useradd底层工具,但提供友好的交互界面,自动创建家目录并设置默认shell。而useradd通常需要手动指定-m等参数。在Ubuntu中,推荐使用adduser,尤其适合新手。如果你想非交互式创建(例如在脚本中),则可以使用useradd并配合参数。
步骤3 - 将新用户加入sudo组
用户创建完成后,它还只是一个普通用户,无法执行任何sudo命令。现在我们需要把它加入到sudo组中,这样系统就会识别该用户具有管理员授权。
使用usermod命令把新用户添加到sudo组里面。usermod是修改用户属性的标准工具,-aG选项表示“追加(append)到附加组(group)”,这是必须同时使用的参数组合 —— 如果只写-G而没有-a,会覆盖用户原有的其他组,可能导致用户丢失必要的权限(如脱离cdrom、plugdev等组)。因此,务必使用-aG。
执行命令(仍需要sudo权限):
sudo usermod -aG sudo example
注意:这里的组名是sudo(Ubuntu默认)。在某些Linux发行版(如CentOS)中,对应的组是wheel。如果你不确定,可以运行groups命令查看已存在的组列表,或者查看/etc/sudoers文件中%sudo或%wheel的定义。
执行完毕后,该用户即获得了sudo权限,但在当前已打开的该用户会话中不会立即生效(如果该用户已经登录),需要重新登录或使用su -切换来刷新组信息。

步骤4 - 测试用户的sudo权限
为了验证我们刚才的配置是否成功,需要切换到新用户身份,然后尝试执行一条需要管理员权限的命令。
首先用su -命令来切换到新用户。这里的-(连字符)表示同时加载该用户的环境变量和登录shell,确保使用该用户的家目录和配置,而不是保留在原来用户的环境里。
su - example
此时命令行提示符会变为example@hostname:~$,表示你已经切换到了example用户。
接着就可以直接执行带有sudo的命令了,比如访问一般不能访问的/root目录 —— /root是root用户的家目录,普通用户默认无权读取。
sudo ls /root
第一次使用sudo的时候,系统会提示你输入当前用户的密码,而不是root用户的密码。这是sudo与su的一个重要区别:su需要目标用户的密码(通常是root),而sudo验证的是调用者自己的密码,这进一步增强了安全性,因为不需要共享root密码。
输入密码后,如果配置正确,你将看到/root目录下的文件列表(通常为空或包含一些系统配置文件)。如果出现类似“is not in the sudoers file”的错误,说明用户未能成功加入sudo组,请检查步骤3是否执行正确。

常见问题排查:
- 如果执行sudo后提示“密码错误”,请确认你输入的是example用户的密码,而不是root密码。
- 如果提示“用户不在sudo组”,可以重新以root执行id example查看该用户所属组列表,确认是否包含sudo。若没有,则重新执行usermod -aG sudo example。
- 如果已经加入sudo组但依然报错,尝试退出当前shell重新登录(exit然后重新su - example),因为组信息是在登录时加载的。
扩展知识:sudo的详细工作机制与安全建议
1. sudo与su的对比
| 特性 | sudo | su |
|---|---|---|
| 验证方式 | 验证当前用户自己的密码 | 验证目标用户(通常是root)的密码 |
| 权限粒度 | 可精细到单个命令、参数 | 切换后拥有目标用户的所有权限,无限制 |
| 日志记录 | 所有执行命令均记录到/var/log/auth.log | 仅记录切换动作,不记录后续命令 |
| 环境变量 | 默认保留当前用户环境(可配置) | 完全切换到目标用户环境 |
| 安全风险 | 低(无需共享root密码,可审计) | 高(需要知道root密码,且操作无痕) |
结论:现代Linux运维中,sudo已成为最佳实践,几乎取代了su的使用(除了极少数需要完全模拟root环境的场景)。
2. 如何进一步限制sudo权限(高级)
如果你希望新用户只能执行特定命令,而非所有命令,可以编辑/etc/sudoers(使用visudo)添加如下行:
example ALL=(ALL) /usr/bin/systemctl, /usr/bin/apt-get
这样example用户只能运行systemctl和apt-get,而不能执行其他sudo命令。但本教程不涉及此操作,因为大多数小型环境只需要全权限sudo即可。
3. sudo超时设置
默认情况下,sudo在输入密码后会有15分钟的超时有效期(在此期间再次执行sudo无需重复输入密码)。你可以通过visudo修改timestamp_timeout来调整时长,例如设置为0表示每次都要输密码,设置为-1表示永不过期(不推荐)。
4. 安全注意事项
- 密码强度:创建新用户时,务必设置强密码。可以使用openssl rand -base64 12生成随机密码。
- 双因素认证:对于生产环境,建议为sudo启用双因素认证(如Google Authenticator)。
- 审计日志:定期检查/var/log/auth.log,查看所有sudo使用记录,及时发现异常。
- 定期清理:不再使用的用户应及时从sudo组中移除(使用deluser example sudo或gpasswd -d example sudo)。
未来趋势:云原生环境下的权限管理
随着容器化(Docker/Kubernetes)和基础设施即代码(IaC)的普及,传统的sudo用户管理也在演变:
- 在容器环境中,通常不鼓励使用sudo,而是以非root用户运行容器,并通过Kubernetes的RBAC(基于角色的访问控制)来管理集群权限。
- 云服务器上,越来越多的团队采用堡垒机或身份即服务(IDaaS)(如阿里云RAM子账号、AWS IAM)来集中管理SSH访问和sudo权限,结合临时凭证(STS)进一步减少长期密码泄露风险。
- 自动化工具(如Ansible、Terraform)可以批量创建用户并加入sudo组,本教程的手工步骤可轻松转化为Playbook或脚本,实现大规模部署。
但无论如何,sudo作为Linux权限管理的基石,其基础用法和组策略仍将在很长时间内持续适用,掌握本教程的内容是每个运维人员必备的技能。
总结
通过以上步骤,你已经学会创建新用户,并且添加该用户到sudo组,使得用户拥有sudo权限了。回顾一下核心操作:
- 使用adduser创建用户并设置密码;
- 使用usermod -aG sudo将用户加入sudo组;
- 使用su -切换并执行sudo ls /root验证。
下一步建议:
- 配置SSH密钥登录,禁用密码登录,进一步提升安全性。
- 修改/etc/ssh/sshd_config中的PermitRootLogin no,禁止root直接SSH登录,仅使用sudo用户登录。
- 定期更新系统(sudo apt update && sudo apt upgrade)以修复安全漏洞。
现在,你已经能够安全地管理多用户服务器了。如果在操作中遇到任何问题,欢迎查阅Ubuntu官方文档或社区论坛,通常都能找到解决方案。
扩展阅读资源:
- Ubuntu官方Wiki关于sudo的说明:https://help.ubuntu.com/community/Sudoers
- man sudoers 和 man usermod 命令手册
- 阿里云最佳实践:使用RAM子账号管理ECS实例
版权声明:本教程为原创内容,转载请注明出处。所有命令均在Ubuntu 22.04 LTS上测试通过。
本文由主机测评网发布,不代表主机测评网立场,转载联系作者并注明出处:/yunwei/9640.html
