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

字段解释:

  1. 用户名

  2. x → 密码在 /etc/shadow

  3. UID

  4. GID(主组)

  5. 备注信息

  6. home 目录

  7. shell

/etc/shadow → 用户密码信息

/etc/group → 用户所属组

小结

useradd 只是创建用户账号,不自动设置密码

-r → 系统用户,通常服务账号使用

-m → 创建 home 目录

-s → 指定 shell,决定是否能登录

安全实践:服务账号用 -r + -s /sbin/nologin,普通用户用 -m + /bin/bash

作者 admin

百度广告效果展示