跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

Linux 用户管理:adduser 与 addgroup 完全指南

在 Linux 系统管理中,adduser 和 addgroup 是 Debian 系列发行版(包括 Ubuntu)中两个非常友好的工具。它们的设计初衷是让系统管理员能够以最简单、最规范的方式完成用户和组的创建。本文将深入探讨这两个工具的使用方法、工作原理、配置文件,并简要说明它们与底层工具 useradd、groupadd 的区别。

一、adduser:智能的用户创建工具

1.1 什么是 adduser?

adduser 是一个用 Perl 编写的交互式前端工具,它的作用是简化 useradd 命令的使用。当你执行 adduser 时,它会自动完成一系列相关联的操作,而不需要你记住各种复杂的参数。

1.2 核心功能

创建普通用户(最常用的场景):

sudo adduser alice

执行这条命令后,adduser 会自动完成以下操作:

  • 创建一个与用户名同名的组(如 alice 组)
  • 将这个新组设置为用户的主组
  • 在 /home 目录下创建用户的家目录(/home/alice)
  • 从 /etc/skel 目录复制默认配置文件(如 .bashrc、.profile)
  • 交互式地提示你设置用户密码
  • 询问用户的完整姓名、电话等附加信息(GECOS 字段)

创建系统用户:

sudo adduser --system --group myservice

系统用户通常用于运行守护进程或服务,它们的特点是无法交互式登录,家目录默认为 /nonexistent。

将用户添加到组:

sudo adduser alice sudo

这是 adduser 的第五种工作模式,简单直接地将已有用户添加到已有组。

1.3 常用选项

选项说明
--system创建系统用户(UID 在系统范围内)
--group创建用户时同时创建同名组
--home DIR指定家目录路径
--shell SHELL指定登录 Shell
--disabled-password创建用户但不设置密码
--disabled-login创建用户并禁用密码登录
--gecos GECOS直接设置用户信息,避免交互
--quiet静默模式,减少输出信息

二、addgroup:便捷的组管理工具

2.1 什么是 addgroup?

addgroup 是 adduser 软件包中专门用于管理用户组的工具。它与 adduser 保持一致的风格,自动处理组 ID 分配等细节。

2.2 核心功能

创建普通用户组:

sudo addgroup developers

系统会自动为 developers 组分配一个合适的 GID(通常从 1000 开始)。

创建系统组:

sudo addgroup --system systemd-journal

系统组用于服务进程,GID 在系统保留范围内(通常是 100-999)。

创建组并指定 GID:

sudo addgroup --gid 3000 docker

2.3 常用选项

选项说明
--system创建系统组
--gid GID指定组 ID
--quiet静默模式

三、配套工具:删除操作

3.1 deluser:删除用户

# 删除用户但保留家目录
sudo deluser alice

# 删除用户及其家目录和邮件池
sudo deluser --remove-home alice

# 删除用户及其所有文件
sudo deluser --remove-all-files alice

# 备份后删除
sudo deluser --backup --backup-to /backup alice

3.2 delgroup:删除组

# 删除普通组
sudo delgroup developers

# 删除系统组
sudo delgroup --system systemd-journal

# 强制删除(即使用户的主组是该组)
sudo delgroup --force developers

四、配置文件:/etc/adduser.conf

adduser 和 addgroup 的所有默认行为都定义在 /etc/adduser.conf 配置文件中。理解这个文件是掌握这两个工具的关键。

4.1 配置文件位置与作用

文件路径:/etc/adduser.conf

作用:控制 adduser 和 addgroup 命令的默认行为。当你执行这些命令而不指定某些参数时,系统就会从这个配置文件中读取默认值。

适用范围:仅影响 adduser 和 addgroup 命令,不影响 useradd、groupadd 等底层工具。

4.2 完整配置项解析

用户 ID 范围配置

# 普通用户的 UID 范围
FIRST_UID=1000
LAST_UID=59999

# 系统用户的 UID 范围
FIRST_SYSTEM_UID=100
LAST_SYSTEM_UID=999

说明:

  • 使用 adduser(不带 --system)时,UID 在 1000-59999 之间自动分配
  • 使用 adduser --system 时,UID 在 100-999 之间分配
  • 这种分离确保了普通用户和系统用户不会冲突

组 ID 范围配置

# 普通组的 GID 范围
FIRST_GID=1000
LAST_GID=59999

# 系统组的 GID 范围
FIRST_SYSTEM_GID=100
LAST_SYSTEM_GID=999

说明:与 UID 类似,普通组和系统组也有各自独立的 ID 范围。

用户组策略配置

# 是否为每个新用户创建一个同名的私有组
USERGROUPS=yes

说明:

  • yes(默认):为每个新用户创建同名组作为主组
  • no:所有新用户使用同一个默认组(由 USERS_GID 指定)
# 当 USERGROUPS=no 时,新用户的默认主组
USERS_GID=100

说明:GID 100 通常是 users 组。

家目录配置

# 用户家目录的父目录
DHOME=/home

# 新用户家目录的权限模式
DIR_MODE=0750

# 是否创建家目录
CREATE_HOME=yes

骨架目录配置

# 骨架目录:新用户家目录的模板
SKEL=/etc/skel

说明:创建新用户时,/etc/skel 目录下的所有文件(如 .bashrc、.profile、.bash_logout)会被复制到用户的新家目录中。

Shell 配置

# 新用户的默认登录 Shell
DSHELL=/bin/bash

附加组配置

# 新用户默认加入的附加组列表(逗号分隔)
EXTRA_GROUPS=

# 当 EXTRA_GROUPS 非空时,用户加入这些组
ADD_EXTRA_GROUPS=0

说明:

  • EXTRA_GROUPS:指定用户默认加入的附加组
  • ADD_EXTRA_GROUPS:设为 1 时启用附加组功能

其他配置

# 是否创建邮件池文件
CREATE_MAIL_SPOOL=no

# 邮件池文件路径
MAIL_SPOOL_NAME=/var/mail/username

# 活动目录支持(LDAP)
# USE_DSK=0

# 用户信息提示的默认值(GECOS 字段)
DEFAULT_GECOS=

# 是否根据用户名生成默认的 GECOS 信息
USERNAME_GECOS=yes

4.3 配置示例

示例一:使用 Zsh 作为默认 Shell

# 修改 /etc/adduser.conf
DSHELL=/bin/zsh

之后使用 adduser 创建的新用户都将默认使用 Zsh。

示例二:为新用户自动加入附加组

# 修改 /etc/adduser.conf
EXTRA_GROUPS=sudo,docker,developers
ADD_EXTRA_GROUPS=1

新创建的用户会自动加入 sudo、docker 和 developers 组。

示例三:禁用私有组策略

# 修改 /etc/adduser.conf
USERGROUPS=no
USERS_GID=100

所有新用户将使用 users 组作为主组,而不是创建同名私有组。

4.4 配置文件的优先级

配置文件的设置可以被命令行参数覆盖:

配置项配置文件命令行覆盖参数
默认 ShellDSHELL--shell
家目录DHOME--home
系统用户无--system
禁用密码无--disabled-password

示例:

# 配置文件 DSHELL=/bin/bash
# 但命令行指定了 --shell /bin/zsh,则会使用 Zsh
sudo adduser --shell /bin/zsh alice

五、与底层工具的区别

5.1 adduser vs useradd

useradd 是几乎所有 Linux 发行版都包含的底层工具,它与 adduser 的核心区别在于:

对比维度adduser(前端)useradd(底层)
家目录默认自动创建并复制配置文件默认不创建,需加 -m 参数
密码设置交互式引导设置不设置,账户锁定
默认 Shell读取 /etc/adduser.conf 中的 DSHELL读取 /etc/default/useradd 中的 SHELL
用户组策略遵循 USERGROUPS 配置使用系统默认组
UID 范围遵循配置文件中的范围遵循 /etc/login.defs
交互性强,会询问用户信息无,纯命令行
配置文件/etc/adduser.conf/etc/default/useradd、/etc/login.defs
适用场景手动添加人类用户自动化脚本、精细控制

示例对比:

使用 adduser 创建用户:

$ sudo adduser john
# 自动创建家目录、设置密码、询问信息...一条命令完成所有

使用 useradd 达到相同效果:

$ sudo useradd -m -s /bin/bash john
$ sudo passwd john
$ # 还需要手动处理家目录配置文件的复制

5.2 addgroup vs groupadd

类似地,groupadd 是通用的底层组管理工具:

对比维度addgroup(前端)groupadd(底层)
GID 分配自动选择合适的 GID系统默认分配或需手动指定
系统组创建--system 参数-r 参数
配置文件读取 /etc/adduser.conf读取 /etc/login.defs
跨平台仅 Debian/Ubuntu所有 Linux 发行版

示例对比:

使用 addgroup:

sudo addgroup developers
# 自动分配 GID,如 1001

使用 groupadd:

sudo groupadd developers
# 或指定 GID
sudo groupadd -g 3000 developers

六、实战场景

场景一:为团队创建新成员账号

# 1. 创建用户(使用配置文件中的默认值)
sudo adduser alice

# 2. 将用户添加到项目组
sudo addgroup project-alpha
sudo adduser alice project-alpha

# 3. 验证
id alice

场景二:部署 Web 应用

# 创建系统用户运行服务
sudo adduser --system --group --home /var/www/myapp webapp

# 创建部署用户
sudo adduser deploy
sudo adduser deploy webapp  # 将部署用户加入服务组

场景三:自定义默认行为(修改配置文件)

假设我们希望所有新用户:

  • 使用 Zsh 作为默认 Shell
  • 自动加入 sudo 和 docker 组
  • 使用更严格的家目录权限

修改 /etc/adduser.conf:

DSHELL=/bin/zsh
EXTRA_GROUPS=sudo,docker
ADD_EXTRA_GROUPS=1
DIR_MODE=0750

之后创建的用户将自动应用这些设置:

sudo adduser bob
# bob 自动拥有 Zsh、属于 sudo 和 docker 组、家目录权限 750

场景四:脚本中静默创建用户

# 使用 --gecos 跳过交互,使用 --disabled-password 暂不设置密码
sudo adduser --gecos "Application User" --disabled-password appuser

七、总结

核心要点

  1. adduser 和 addgroup 是 Debian 系发行版的前端工具,设计目标是简化操作、自动遵循系统规范。
  2. 配置文件 /etc/adduser.conf 是理解这两个工具的关键:
  • 定义了 UID/GID 范围
  • 控制用户组策略(私有组 vs 通用组)
  • 设置默认 Shell、家目录、权限等
  • 命令行参数可以覆盖配置文件设置
  1. 与底层工具的核心区别:
  • adduser vs useradd:前者自动创建家目录、设置密码、创建私有组;后者需要手动完成这些操作
  • addgroup vs groupadd:前者自动处理 GID 分配细节;后者需要更多手动干预
  1. 使用建议:
  • 手动管理用户:优先使用 adduser 和 addgroup,并根据需要调整 /etc/adduser.conf
  • 编写自动化脚本:使用 useradd 和 groupadd 以确保跨平台兼容性
  • 修改用户属性:使用 usermod(无前端替代品)
  • 批量创建用户:可预先配置好 /etc/adduser.conf,然后使用 adduser 的非交互模式

一句话总结

adduser 和 addgroup 是 Debian 系系统上的人性化前端,它们的所有默认行为都由 /etc/adduser.conf 配置文件控制;而 useradd 和 groupadd 是通用的底层工具,提供了更精细的控制,适合在脚本中使用。

作者

老丹

关注我
其他文章
上一个

shadow-utils 完全指南:Linux 用户账户管理的基石

下一个

ICO文件格式完全解析

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

搜索

近期文章

  • Bash命令行参数完全指南 2026年6月17日
  • Bash 数组完全指南:从设计思想到实战应用 2026年6月16日
  • Bash 变量内容操作完全指南 2026年6月16日
  • usbutils:Linux下USB设备查看与调试的完整指南 2026年6月16日
  • MQTT协议完全指南:从核心概念到实践应用 2026年6月16日
  • ICO文件格式完全解析 2026年6月15日

文章分类

  • C/C++开发 (10)
  • Linux工具包 (6)
  • Linux服务配置 (7)
  • Shell脚本 (3)
  • 计算机理论 (9)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号