最安全通用的做法是:用 sudo useradd -m -s /bin/bash username 创建用户,再用 sudo usermod -ag sudo username 赋予sudo权限;必须加 -m 创建家目录、-s /bin/bash 指定shell,且不可直接编辑 /etc/sudoers。

直接给结论:用 sudo useradd -m -s /bin/bash username 创建用户,再用 sudo usermod -aG sudo username 赋予 sudo 权限,是最安全、最通用的做法。别手写 /etc/sudoers,也别漏掉 -m 和 -s 参数。
useradd 创建用户时必须加的两个参数
很多人创建完用户发现无法登录图形界面、su - username 报错或家目录为空,问题基本出在没加关键参数:
-
-m:强制创建家目录(如/home/username),否则用户连自己的配置文件都存不了 -
-s /bin/bash:显式指定登录 shell,避免默认为/bin/sh或空值导致无法交互式登录 - 不加
-m时,getent passwd username能查到用户,但ls /home/看不到对应目录 - 不加
-s时,某些发行版(如 CentOS Stream)可能设为/sbin/nologin,用户能存在但根本登不进去
为什么不要直接编辑 /etc/sudoers
手动改 /etc/sudoers 是高危操作,哪怕只多一个空格也会让整个 sudo 失效:
- 错误示例:
echo "username ALL=(ALL) ALL" >> /etc/sudoers—— 没语法检查,出错后连sudo visudo都打不开 - 正确做法永远是
sudo visudo,它会在保存前自动校验语法;如果已损坏,只能用 root 登录后手动修复 - 更推荐的方式是走系统预置组:Ubuntu/Debian 用
sudo组,CentOS/RHEL 用wheel组,不用碰文件 - 执行
sudo usermod -aG sudo username后,需重新登录或运行newgrp sudo才能立即生效
验证 sudo 权限是否真正可用
光看 groups username 返回里有 sudo 不代表权限就起作用了,必须实测:
- 先切换过去:
su - username,输入密码登录 - 运行
sudo -l:显示(ALL : ALL) ALL才算完整授权;若提示 “not in sudoers file”,说明组权限没生效或用户没重登录 - 运行
sudo whoami:应输出root;若卡住或报错,检查/var/log/auth.log里的拒绝记录 - 注意:SSH 登录的用户,组变更后需断开重连,
su -切换不会自动加载新组
删除用户时容易忽略的残留问题
用 sudo userdel username 只删用户不删家目录,下次同名重建会混用旧配置,引发权限混乱:
- 务必加
-r:即sudo userdel -r username,同时删掉/home/username和邮件池 - 删完后检查三处:
id username(应报错)、ls /home/ | grep username(应无输出)、getent passwd username(应无返回) - 如果之前手动往
/etc/sudoers写过行,删用户后那行还得手动清理,否则sudo -l仍会显示残留权限 - 已登录的该用户 session 不会自动退出,需用
pkill -u username清理残留进程











