# Linux 用户管理概述 - 系统用户与权限管理基础

URL: https://caijiao.org/linux/user-management/overview
Source: docs/linux/user-management/overview.md
Description: 全面介绍 Linux 系统中用户和组的基本概念、管理原则和安全考虑，帮助您理解 Linux 多用户环境的核心机制。

## 1. Linux 用户系统概述

Linux 是一个多用户操作系统，允许多个用户同时使用系统资源，并通过用户和组的概念来管理不同用户的权限和资源访问。这种设计使得 Linux 系统能够安全地支持多用户环境，同时保证系统资源的合理分配和访问控制。

### 1.1 用户和组的基本概念

- **用户（User）**：在 Linux 系统中，每个能够登录系统的实体都被称为用户。每个用户都有一个唯一的用户标识号（UID）。
- **组（Group）**：用户组是用户的集合，用于简化权限管理。每个组都有一个唯一的组标识号（GID）。
- **主组（Primary Group）**：用户的默认组，创建文件时文件的组所有权默认为用户的主组。
- **附加组（Secondary Group）**：用户所属的其他组，可以有多个。

### 1.2 Linux 用户类型

Linux 系统中的用户主要分为三类：

#### 1.2.1 超级用户（root）

- UID 为 0 的用户
- 拥有系统的最高权限，可以执行任何操作
- 可以访问和修改系统的所有文件和命令
- 出于安全考虑，应尽量避免使用 root 用户进行日常操作

#### 1.2.2 系统用户

- 用于系统服务和进程的用户
- UID 通常在 1-999 之间（在某些发行版中可能有所不同）
- 不允许登录系统，但用于运行特定的系统服务
- 例如：nobody、daemon、apache、mysql 等

#### 1.2.3 普通用户

- 由管理员创建的用户
- UID 通常从 1000 开始
- 拥有有限的权限，只能在自己的目录和管理员授权的区域操作
- 可以通过 sudo 命令临时获取管理员权限

## 2. 用户和组的配置文件

Linux 系统中存储用户和组信息的主要文件包括：

### 2.1 /etc/passwd

该文件存储用户账户信息，格式为：

```
username:x:UID:GID:GECOS:home_directory:shell
```

各字段说明：
- `username`：用户名
- `x`：密码占位符，实际密码存储在 /etc/shadow 文件中
- `UID`：用户标识号
- `GID`：用户的主组标识号
- `GECOS`：用户的详细信息（如全名、办公电话等）
- `home_directory`：用户的主目录路径
- `shell`：用户登录后使用的默认 shell

### 2.2 /etc/shadow

该文件存储用户密码信息，只有 root 用户可以读取：

```
username:password_hash:last_change:minimum_age:maximum_age:warn_period:inactive_period:expiration_date:reserved
```

各字段说明：
- `username`：用户名（与 /etc/passwd 中的用户名对应）
- `password_hash`：加密后的密码
- `last_change`：密码最后修改日期（从 1970-01-01 开始的天数）
- `minimum_age`：密码最小修改间隔天数
- `maximum_age`：密码最长有效期天数
- `warn_period`：密码过期前的警告天数
- `inactive_period`：密码过期后的账户宽限天数
- `expiration_date`：账户过期日期（从 1970-01-01 开始的天数）
- `reserved`：保留字段

### 2.3 /etc/group

该文件存储组信息：

```
groupname:x:GID:user_list
```

各字段说明：
- `groupname`：组名
- `x`：组密码占位符（很少使用）
- `GID`：组标识号
- `user_list`：属于该组的用户列表（附加组成员，主组成员不在此列出）

### 2.4 /etc/gshadow

该文件存储组密码信息（如果设置），只有 root 用户可以读取：

```
groupname:password_hash:group_administrator:member_list
```

## 3. 用户和组管理原则

### 3.1 最小权限原则

- 给用户分配完成任务所需的最小权限
- 避免将普通用户添加到特权组
- 限制 sudo 的使用范围，仅授权必要的命令

### 3.2 用户生命周期管理

- **创建**：用户入职时创建账户，分配适当的权限
- **修改**：根据用户角色变化及时调整权限
- **禁用**：用户离职或长期不使用时禁用账户
- **删除**：确认不再需要时删除账户及相关数据

### 3.3 密码策略

- 密码复杂性要求：长度、字符类型组合
- 定期更换密码
- 密码历史记录，避免重复使用旧密码
- 账户锁定策略：连续登录失败次数限制

## 4. 用户管理命令基础

### 4.1 用户创建和删除

**创建用户**

```bash
# 创建新用户
useradd username

# 创建用户并设置主目录
useradd -m username

# 创建用户并设置登录 shell
useradd -s /bin/bash username

# 创建用户并设置 UID
useradd -u 1001 username

# 创建用户并指定主组
useradd -g groupname username

# 创建用户并添加到附加组
useradd -G group1,group2 username
```

**设置用户密码**

```bash
# 设置用户密码
passwd username
```

**删除用户**

```bash
# 删除用户，但保留用户的主目录
userdel username

# 删除用户及其主目录和邮件
userdel -r username
```

### 4.2 用户属性修改

```bash
# 修改用户信息
usermod -c "User Full Name" username

# 修改用户的主目录
usermod -d /new/home/directory username

# 修改用户的登录 shell
usermod -s /bin/zsh username

# 修改用户的 UID
usermod -u 1002 username

# 修改用户的主组
usermod -g groupname username

# 添加用户到附加组
usermod -a -G groupname username

# 锁定用户账户
usermod -L username

# 解锁用户账户
usermod -U username
```

### 4.3 组创建和管理

**创建组**

```bash
# 创建新组
groupadd groupname

# 创建组并指定 GID
groupadd -g 1001 groupname
```

**修改组**

```bash
# 修改组名
groupmod -n new_groupname old_groupname

# 修改组的 GID
groupmod -g 1002 groupname
```

**删除组**

```bash
# 删除组
groupdel groupname
```

### 4.4 用户和组信息查询

**查询用户信息**

```bash
# 查看当前登录用户
whoami

# 查看用户账户信息
id username

# 查看用户登录信息
last username

# 查看用户的密码状态
chage -l username
```

**查询组信息**

```bash
# 查看当前用户所属的组
groups

# 查看特定用户所属的组
groups username

# 查看所有组
grep "" /etc/group | sort
```

## 5. 用户环境和配置

### 5.1 用户主目录

- 用户主目录通常位于 `/home/username`
- root 用户的主目录是 `/root`
- 主目录包含用户的个人文件和配置
- 创建用户时使用 `-m` 选项可以自动创建主目录

### 5.2 用户配置文件

用户的配置文件主要包括：

- `.bashrc`：bash shell 的配置文件，每次打开新终端时加载
- `.bash_profile`：用户登录时加载的配置文件（在某些系统中是 `.profile`）
- `.bash_history`：命令历史记录文件
- `.bash_logout`：用户退出登录时执行的脚本
- `.vimrc`：vim 编辑器的配置文件
- `.ssh/`：SSH 相关配置文件目录

### 5.3 全局配置文件

系统级别的全局配置文件：

- `/etc/bashrc` 或 `/etc/bash.bashrc`：全局 bash 配置
- `/etc/profile`：全局登录配置
- `/etc/skel/`：新用户创建时复制到主目录的模板文件目录

## 6. sudo 权限管理

### 6.1 sudo 简介

sudo（superuser do）允许授权用户以其他用户（通常是 root）的身份执行命令，提供了一种安全的方式来授予管理权限。

### 6.2 sudo 配置文件

- 主配置文件：`/etc/sudoers`
- 推荐使用 `visudo` 命令编辑，它会进行语法检查
- 配置文件包含用户或组的 sudo 权限定义

### 6.3 sudo 配置示例

```bash
# 编辑 sudo 配置文件
visudo
```

常见配置示例：

```
# 允许 wheel 组的用户以 root 身份执行任何命令
%wheel ALL=(ALL) ALL

# 允许特定用户以 root 身份执行任何命令
username ALL=(ALL) ALL

# 允许用户在不需要密码的情况下执行特定命令
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart httpd, /usr/bin/tail /var/log/httpd/error_log

# 允许用户以特定用户身份执行命令
username ALL=(www-data) /usr/bin/php
```

### 6.4 sudo 使用方法

```bash
# 以 root 身份执行单个命令
sudo command

# 以特定用户身份执行命令
sudo -u username command

# 切换到 root 用户的 shell
sudo -i
# 或
sudo su -
```

## 7. 用户管理的安全考虑

### 7.1 密码安全

- 使用强密码，包含大小写字母、数字和特殊字符
- 定期更改密码
- 避免在多个系统使用相同的密码
- 考虑使用密钥认证替代密码登录（SSH）

### 7.2 账户安全

- 禁用不必要的账户
- 删除或锁定长期不使用的账户
- 限制 root 用户的远程登录
- 设置账户自动锁定策略
- 使用 PAM（Pluggable Authentication Modules）增强认证安全

### 7.3 审计和监控

- 监控用户登录活动
- 审计 sudo 命令的使用
- 定期检查用户账户和权限设置
- 关注异常的用户活动

## 8. 图形界面用户管理

除了命令行工具外，许多 Linux 发行版还提供了图形界面的用户管理工具：

### 8.1 GNOME 用户管理

在基于 GNOME 的系统（如 Ubuntu）中：

- 系统设置 > 用户账户
- 或使用 `gnome-control-center user-accounts` 命令启动

### 8.2 KDE 用户管理

在基于 KDE 的系统（如 Kubuntu）中：

- 系统设置 > 用户和组
- 或使用 `system-config-users` 命令（在某些系统上）

### 8.3 其他图形界面工具

- **Webmin**：基于 Web 的系统管理工具
- **YaST**：SUSE Linux 的系统管理工具

## 9. 总结

Linux 用户管理是系统管理的重要组成部分，通过用户和组的概念，Linux 系统实现了多用户环境下的资源分配和权限控制。本文介绍了 Linux 用户系统的基本概念、配置文件、管理原则和常用命令。

通过本文的学习，您应该能够：

- 理解 Linux 用户和组的基本概念
- 了解用户和组的配置文件结构
- 掌握创建和管理用户及组的基本命令
- 理解用户环境和配置文件
- 使用 sudo 进行权限管理
- 了解用户管理的安全考虑

有效的用户管理对于维护 Linux 系统的安全性和稳定性至关重要。在实际工作中，应遵循最小权限原则，合理规划用户和组结构，并定期进行安全审计和维护。
