useradd 是 Linux 系统自带的命令,用来 创建新的用户账户。
- 它只是创建账户和相关信息(UID、组、home 目录、shell 等)
- 不会自动设置密码,密码需要用 passwd username 单独设置
- 创建的用户信息会存储在 /etc/passwd(账户信息)和 /etc/shadow(密码信息)里
基本语法
useradd [选项] 用户名
常用选项说明
| 选项 | 含义 | 示例 |
|---|---|---|
-r |
创建系统用户(UID < 1000),通常用于服务或守护进程,不用于登录 | useradd -r fastapi |
-m |
创建 home 目录(默认 /home/username) |
useradd -m gitea |
-d |
指定 home 目录 | useradd -d /var/www/lanpyuser user1 |
-s |
指定 shell(登录命令解释器) | useradd -s /bin/bash gitea |
-G |
指定附加组(额外的用户组) | useradd -G sudo,user2 |
-u |
指定用户 UID | useradd -u 2001 user2 |
-g |
指定主组 | useradd -g users user3 |
-c |
备注信息(通常用于描述用户) | useradd -c “FastAPI Service” fastapi |
常见组合示例
创建系统服务用户(禁止登录,最小权限)
sudo useradd -r -s /sbin/nologin fastapi
- -r → 系统用户
- -s /sbin/nologin → 禁止登录
- 没有 -m → 不创建 home 目录
创建普通用户并创建 home
sudo useradd -m -s /bin/bash alice
- -m → 创建 /home/alice
- -s /bin/bash → 可以登录 shell
需要设置密码:
sudo passwd alice
创建用户并指定 home 目录、附加组
sudo useradd -m -d /var/www/project -s /bin/bash -G www-data projectuser
- home 目录在 /var/www/project
- shell 可以登录
- 附加组 www-data → 有权限访问 www 目录
登录验证机制
新创建的系统用户密码为空(在 /etc/shadow 中会有 ! 或 *)
- SSH 登录:默认无法通过密码登录
- su 切换:su – alice 也会报错要求密码,不设置密码无法登录
示例 /etc/shadow(空密码或锁定):
alice:!:1002:1002::/home/alice:/bin/bash
! 或 * 表示账户没有有效密码
这种账户无法直接用 SSH 或本地登录,因为无法通过密码验证
登录方式总结
| 登录方式 | 是否可行 |
|---|---|
| SSH(密码登录) | ❌ 需要密码,没设置无法登录 |
| SSH(key 登录) | ✅ 如果你手动放了公钥在 /home/alice/.ssh/authorized_keys |
| su – alice | ❌ 需要密码,没设置无法登录 |
| systemd / cron 启动服务 | ✅ 可以启动,因为不需要交互登录 |
用户信息存储位置
/etc/passwd → 用户账户信息
gitea:x:1001:1001::/home/gitea:/bin/bash
字段解释:
-
用户名
-
x → 密码在
/etc/shadow -
UID
-
GID(主组)
-
备注信息
-
home 目录
-
shell
/etc/shadow → 用户密码信息
/etc/group → 用户所属组
小结
useradd 只是创建用户账号,不自动设置密码
-r → 系统用户,通常服务账号使用
-m → 创建 home 目录
-s → 指定 shell,决定是否能登录
安全实践:服务账号用 -r + -s /sbin/nologin,普通用户用 -m + /bin/bash