菜鸟科技网

Linux useradd命令参数如何正确使用?

useradd 命令用于在 Linux 系统中创建新的用户账户,它会更新系统文件(如 /etc/passwd, /etc/shadow, /etc/group 等)以反映新用户的创建。

Linux useradd命令参数如何正确使用?-图1
(图片来源网络,侵删)

基本语法

useradd [选项] 用户名
  • [选项]:用于控制新用户账户的创建方式,如设置主目录、登录 Shell、用户组等。
  • 用户名:你想要创建的新用户的名称。

常用选项及详解

useradd 的功能非常强大,主要通过不同的选项来定制用户。

a. -m--create-home (创建家目录)

这是最常用、最重要的选项之一,默认情况下,useradd 不会为新用户创建家目录。

  • 作用:在 /home/ 目录下为新用户创建一个与用户名同名的家目录,并将默认的配置文件(如 .bashrc, .profile 等)复制到该目录中。
  • 强烈建议:每次创建用户时都带上此选项。
# 创建用户 testuser,并同时创建其家目录 /home/testuser
sudo useradd -m testuser

b. -d--home-dir (指定家目录)

  • 作用:指定用户的家目录路径,如果使用 -d 但没有使用 -m,目录不会被自动创建。
  • 用法:通常与 -m 结合使用,以创建一个非默认位置的家目录。
# 创建用户 devuser,家目录指定为 /data/devusers/devuser
# -m 会确保该目录被创建
sudo useradd -m -d /data/devusers/devuser devuser

c. -s--shell (指定登录 Shell)

  • 作用:指定用户登录后使用的 Shell。
  • 常用 Shell
    • /bin/bash:最常用的 Bourne-Again Shell,功能强大。
    • /bin/sh:Bourne Shell,一个更轻量级的 Shell。
    • /sbin/nologin/usr/sbin/nologin禁止用户登录,这对于创建只用来运行服务的账户非常有用。
    • /bin/false:与 nologin 类似,也用于禁止登录。
# 创建一个名为 gituser 的用户,禁止其通过 SSH 或控制台登录
sudo useradd -m -s /sbin/nologin gituser

d. -g--gid (指定主 GID)

  • 作用:指定用户所属的主组(Primary Group)的 GID(Group ID)。
  • 注意:组必须已经存在。
# 假设组 developers (GID 为 1001) 已存在
# 创建用户 dev1,并将其主组设置为 developers
sudo useradd -m -g developers dev1

e. -G--groups (指定附加组)

  • 作用:指定用户所属的附加组(Supplementary Groups),用户可以同时属于多个附加组。
  • 注意:组必须已经存在,如果要指定多个附加组,用逗号 分隔。
# 假设组 sudo, docker, developers 已存在
# 创建用户 dev2,主组为 users,同时附加到 sudo, docker, developers 组
sudo useradd -m -g users -G sudo,docker,developers dev2

f. -c--comment (添加注释)

  • 作用:添加用户的注释信息,通常用于填写用户的真实姓名或描述,这个信息会保存在 /etc/passwd 文件的第五个字段。
# 创建用户 zhangsan,并添加注释 "Zhang San - Developer"
sudo useradd -m -c "Zhang San - Developer" zhangsan

g. -u--uid (指定 UID)

  • 作用:指定用户的 UID(User ID),系统通常会自动分配一个唯一的 UID(从 1000 开始),但有时你可能需要为特定用户指定一个固定的 UID,尤其是在迁移系统或需要统一 ID 环境时。
  • 注意:UID 必须是系统中唯一的。
# 创建用户 lisi,并指定其 UID 为 2000
sudo useradd -m -u 2000 lisi

实践示例

示例1:创建一个标准开发用户

这是一个非常常见的场景,创建一个可以登录系统、使用 sudo 提权的开发者。

# 1. 首先创建一个开发者组(如果不存在)
sudo groupadd developers
# 2. 创建用户 alice,设置其主组为 developers,附加到 sudo 组,并设置注释
sudo useradd -m -g developers -G sudo -c "Alice Wang - Full Stack Developer" alice

示例2:创建一个只运行服务的系统账户

这个账户不需要登录,只用来运行某个特定服务(如 Nginx、MySQL)。

Linux useradd命令参数如何正确使用?-图2
(图片来源网络,侵删)
# 创建用户 nginx,禁止登录,家目录设为 /var/www/nginx
sudo useradd -r -d /var/www/nginx -s /sbin/nologin nginx

注意:这里的 -r 选项是创建系统用户的专用选项,它会创建一个 UID 小于 1000 的系统账户,并且没有家目录和过期时间。

示例3:创建一个没有家目录的用户

某些情况下,你可能只需要一个用户来运行脚本,不需要家目录。

# 创建用户 runner,不创建家目录,并禁止登录
sudo useradd -s /sbin/nologin runner

useradd 相关的重要文件

当你执行 useradd 后,系统会修改以下几个核心文件:

  • /etc/passwd:用户账户信息文件,每一行代表一个用户,格式为 用户名:密码占位符:UID:GID:注释:家目录:登录Shell
    • testuser:x:1001:1001::/home/testuser:/bin/bash
  • /etc/shadow:用户密码和账户过期信息文件,包含加密后的密码、密码过期策略等,只有 root 可读。
  • /etc/group:组信息文件,定义了系统中的所有组。
  • /etc/gshadow:组密码信息文件,用于管理组的成员和组管理员。
  • /etc/default/useradd/etc/login.defsuseradd 命令的默认配置文件,你可以在这里修改 useradd 的默认行为,比如默认的 Shell、家目录前缀、UID 范围等。

useradd vs. adduser

在 Linux 世界中,你可能会遇到另一个命令 adduser,它们有本质区别:

Linux useradd命令参数如何正确使用?-图3
(图片来源网络,侵删)
特性 useradd adduser
类型 一个命令行工具,来自 shadow 软件包。 一个交互式脚本,来自 debconf (Debian/Ubuntu) 或 util-linux (其他发行版)。
行为 非交互式,所有配置必须通过命令行选项提供,没有选项时,行为非常基础(不创建家目录等)。 交互式,会像安装向导一样,一步步提示你输入用户名、密码、全名等信息,并自动处理家目录创建等细节。
使用场景 脚本自动化、批量创建用户。 手动创建单个用户,更友好、更安全。
推荐 在服务器、脚本、自动化任务中使用。 在桌面环境或手动管理少量用户时使用。

简单总结useradd 是功能强大的“瑞士军刀”,适合自动化;adduser 是贴心的“新手向导”,适合手动操作。


创建用户后的必要操作

创建用户后,通常还需要执行以下步骤:

  1. 设置密码:新创建的用户没有密码,无法登录。

    # 为用户 testuser 设置密码
    sudo passwd testuser
    # 系统会提示你输入并确认新密码
  2. 验证用户

    # 切换到新用户
    su - testuser
    # 查看用户信息
    id testuser
    # 输出示例:uid=1001(testuser) gid=1001(testuser) groups=1001(testuser),27(sudo)

useradd 是 Linux 系统管理员必须精通的命令,理解其核心选项(特别是 -m, -s, -g, -G)以及它与 adduser 的区别,对于高效、安全地管理系统用户至关重要。

分享:
扫描分享到社交APP
上一篇
下一篇