如何在Linux中创建新的普通用户
Linux中创建普通用户需注意:useradd命令必须加-m参数创建家目录并指定-s/bin/bash;新用户默认无sudo权限,需手动加入sudo或wheel组;创建后必须用passwd设置密码,否则无法登录。adduser脚本可自动完成上述操作,但仅适用于Debian/Ubuntu系统。
创建Linux普通用户,听起来简单,但实际操作中翻车的可不少。直接用 useradd -m 或 adduser 确实能搞定,可一旦漏掉 -m、没设密码、没加组权限,那用户大概率登录失败,或者连基本的管理命令都跑不了。下面把这几个关键点拆开说清楚。

useradd 创建用户必须带 -m 参数
很多新手一上来就运行 sudo useradd username,结果切过去发现是个空壳环境,甚至 su - username 直接报错 “No directory, logging in with HOME=/”。问题就出在默认不创建家目录(/home/username),而且 shell 可能是 /bin/sh 或 /sbin/nologin,根本没法交互。
正确的写法是:
sudo useradd -m -s /bin/bash username
这里 -m 强制建家目录,-s /bin/bash 显式指定可交互的 shell。一些精简系统(比如 Alpine、某些容器镜像)连 -m 都不默认启用,必须手动加。
- 不加
-m:家目录不存在,su -失败,图形登录拒绝,~路径解析为/ - 不指定
-s:可能继承系统默认 shell(如/bin/sh),缺少历史记录、补全等交互功能 - UID/GID 一般不用手动设,系统自动分配即可;除非有集群 UID 对齐等特殊需求
adduser 更适合新手,但只在 Debian/Ubuntu 系统预装
adduser 是个 Perl 脚本封装,它自动调用 useradd 并复制 /etc/skel/ 下的配置文件(如 .bashrc)、设好权限、引导输入密码——全程交互提示,容错率高。
执行:
sudo adduser username
它会依次问密码、全名、房间号等,除密码外全可回车跳过。完成后家目录已就绪,su - username 可直接进入。
- CentOS/RHEL/Fedora 默认不带
adduser,装了也是符号链接到useradd,无交互功能 - 如果在 Ubuntu 上用
useradd却没加-m,再补mkdir /home/username && cp -r /etc/skel/. /home/username很容易漏掉权限修复 adduser不支持批量或脚本化,适合单次、人工操作
新用户没 sudo 权限?得手动加进 sudo 或 wheel 组
刚创建的用户默认没有任何管理员权限。运行 sudo ls 会提示 “username is not in the sudoers file”。这不是密码错了,是根本没被授权。
根据发行版选择对应命令:
- Debian/Ubuntu:
sudo usermod -aG sudo username - CentOS/RHEL/Fedora:
sudo usermod -aG wheel username
注意 -aG 中的 -a(append)不能省——漏掉就等于覆盖原有组,用户可能被踢出 users 或其他必要组。
验证是否生效:groups username 输出里应含 sudo 或 wheel;切换过去后 sudo -l 可查允许执行的命令。
密码设置和验证环节最容易被跳过
useradd 创建的用户密码字段在 /etc/shadow 里是 * 或 !,代表“锁定”或“无密码”,根本无法登录。必须显式运行:
sudo passwd username
输入两次密码即完成。此时密码哈希才写入 /etc/shadow。
adduser会在创建流程中自动引导设密码,所以这步不会漏- 如果用
sudo passwd -d username清空密码,该账户将无法密码登录(除非配了 SSH 密钥) - 验证登录最简单方式:
su - username→ 输入密码 → 成功进入即 OK;whoami应返回用户名
真正麻烦的是那些“看起来创建成功但登不进去”的情况——八成卡在没 -m、没 passwd、或 shell 被设成 /sbin/nologin 上。别急着重装系统,先看 getent passwd username 和 sudo cat /etc/shadow | grep username 这两行输出,问题往往一目了然。


































