最安全做法是用adduser创建用户再加入sudo组(Ubuntu/Debian)或wheel组(RHEL/CentOS);adduser自动建家目录、设bash shell、提示设密码,而useradd需手动补全多项配置,漏任一导致登录失败。

直接用 adduser 创建用户,再加进 sudo 组(Ubuntu/Debian)或 wheel 组(RHEL/CentOS),是最安全、最不容易漏步骤的做法。别图省事只跑 useradd 就完事——不建家目录、不设密码、不配 shell,用户连登录都做不到。
用 adduser 还是 useradd?选哪个更少出错
adduser 是交互式封装脚本,useradd 是底层命令。生产环境无脑选 adduser,它默认做对三件事:-m(建家目录)、/bin/bash(设默认 shell)、自动调用 passwd(提示设密码)。而 useradd 默认什么也不干,账户被锁死,得手动补全:
sudo useradd -m -s /bin/bash alicesudo passwd alice- 还得确认
/etc/passwd里alice那行 shell 字段不是/usr/sbin/nologin或空
漏掉任意一步,su - alice 就会失败,或者登录后直接退出。
为什么加了 sudo 组还是执行不了 sudo 命令
加组只是第一步,生效要满足三个条件:
- 系统发行版决定该信哪个组:
%sudo行必须在/etc/sudoers里且未被注释(Ubuntu/Debian);RHEL 系则认%wheel - 用户必须用
-aG加入,不是-G(后者会清空其他附加组) - 组权限不会热加载:要么重新登录终端,要么运行
newgrp sudo(仅对当前 shell 有效)
常见错误现象:sudo: sorry, you must have a tty to run sudo —— 多半是 SSH 连接没分配伪终端,或 requiretty 在 sudoers 里被启用;usermod -aG sudo alice 后立刻 su - alice 测试却报 Sorry, user alice is not allowed to execute...,就是没重登录。
如何验证 sudo 权限是否真正可用
别只信 groups alice 输出里有 sudo,得实测:
- 切换过去:
su - alice - 查授权范围:
sudo -l—— 正常应列出(ALL : ALL) ALL或具体命令白名单 - 跑个带输出的命令:
sudo whoami,返回root才算通 - 如果配置了 NOPASSWD,但
sudo -l显示需要密码,说明那条规则没生效(比如路径写错、没加%符号、visudo 保存时语法报错没注意到)
注意:sudo -l 不校验密码,但能暴露规则是否被读取;而 sudo whoami 会触发真实认证流程,两者缺一不可。
visudo 编辑时最容易踩的坑
直接 vim /etc/sudoers 是高危操作,文件语法错一个字符,整个 sudo 就瘫痪。必须用 visudo:
- 它会在写入前自动运行
sudo visudo -c检查语法,报错就拦住你 - 新增规则务必写在
# User privilege specification下方,别插到 Defaults 区块里 - 给组授权写
%sudo,给用户写alice,开头多一个%就全错 - 命令路径必须绝对:
/usr/bin/systemctl≠systemctl;多个命令用英文逗号+空格分隔:/bin/ls, /usr/bin/df
改完保存退出后,立刻执行 sudo visudo -c 再确认一次——这步很多人跳过,结果第二天发现 sudo 不能用了才想起昨晚改过配置。


















