长期用 root 账号操作服务器是一种危险习惯——任何误操作都会以最高权限执行,后果往往不可挽回。最佳实践是创建一个普通用户,日常以该账号登录,需要高权限时用 sudo 提权,做到最小权限原则。本文教你完整完成这一配置。
本文要点
- 用 adduser 创建新用户
- 将用户加入 sudo/wheel 组
- 用 visudo 安全编辑权限配置
- 切换用户与测试 sudo 权限
创建新用户
Debian/Ubuntu:adduser
adduser 是 Debian 系的高级封装命令,会自动创建主目录并引导设置密码:
adduser deploy按提示设置密码,其余信息(Full Name 等)可直接回车跳过。
CentOS/AlmaLinux:useradd
useradd -m -s /bin/bash deploy
passwd deploy其中 -m 创建主目录,-s /bin/bash 指定默认 Shell。
用户名建议
用户名推荐使用小写字母,如 deploy、admin、ubuntu 等,避免与系统保留用户名冲突。不要用 test、temp 等容易遗忘的名字。
将用户加入 sudo/wheel 组
| 发行版 | sudo 组名 | 命令 |
|---|---|---|
| Debian/Ubuntu | sudo | usermod -aG sudo deploy |
| CentOS/AlmaLinux | wheel | usermod -aG wheel deploy |
# Debian/Ubuntu
usermod -aG sudo deploy
# CentOS/AlmaLinux
usermod -aG wheel deploy执行后用 id deploy 确认组信息:
id deploy
# 输出示例:uid=1001(deploy) gid=1001(deploy) groups=1001(deploy),27(sudo)用 visudo 配置权限
如果需要给用户更细粒度的权限(如无密码 sudo 或只允许特定命令),应通过 visudo 编辑配置,它会在保存时校验语法,避免写错导致 sudo 失效:
visudo常见配置示例:
# 允许 deploy 用户无密码使用 sudo
deploy ALL=(ALL) NOPASSWD:ALL
# 只允许 deploy 执行 systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx不要直接编辑 sudoers 文件
始终用 visudo 而非 nano/vim 直接编辑 /etc/sudoers。visudo 提供语法检查;直接编辑写错会导致所有用户都无法使用 sudo,须从紧急控制台修复。
切换用户与测试
以 root 身份切换到新用户:
su - deploy测试 sudo 权限:
sudo whoami
# 若返回 root,说明配置正确为新用户配置 SSH 密钥登录
新用户也应使用密钥登录。以 root 身份为 deploy 创建 .ssh 目录并写入公钥:
mkdir -p /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
echo '你的公钥内容' > /home/deploy/.ssh/authorized_keys
chmod 600 /home/deploy/.ssh/authorized_keys
chown -R deploy:deploy /home/deploy/.ssh小结
- adduser(Debian)或 useradd(CentOS)创建普通用户
- usermod -aG sudo/wheel 加入提权组
- visudo 配置细粒度权限,不要直接编辑 sudoers
- 日常用普通用户登录,避免长期以 root 操作
常见问题
普通用户执行 sudo 需要输密码吗?
默认需要输入该用户自己的密码来确认。如想免密,可在 visudo 中为该用户添加 NOPASSWD:ALL 配置。
加入 sudo 组后需要重新登录吗?
是的,组变更需要重新登录(或 su - 用户名)后才会生效,当前会话不会立即刷新。
如何删除不再需要的用户?
使用 userdel -r 用户名 命令,-r 参数同时删除主目录和邮件目录。操作前确认该用户没有正在运行的进程。