教程 linux tutorial

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 系统的安全性和稳定性至关重要。在实际工作中,应遵循最小权限原则,合理规划用户和组结构,并定期进行安全审计和维护。