以下文章基于AI生成初稿,进修改调整后发布,供自我学习。
Linux 的用户和用户组管理是系统安全和权限控制的核心机制。它确保了不同用户只能访问其被授权的资源,防止误操作或恶意行为。
下面将从基本概念、工作机制、常用命令和实际应用等方面解释。
一、用户(User)
Linux 的每个进程和文件都归属于某个用户,系统通过“用户”识别谁在运行程序、谁创建了文件。
1. 用户类型
类型 | UID 范围 | 说明 |
超级用户(root) | UID 0 | 拥有系统最高权限,可以访问和修改所有文件和设置。默认用户名为 root。 |
系统用户(系统账户) | UID 1–999(Debian/Ubuntu 可能到 1000) | 用于运行系统服务(如 www-data 运行 Web 服务,mysql 运行数据库),通常不用于登录。 |
普通用户 | UID ≥ 1000 | 由管理员创建,供真实用户使用,权限受限,不能随意修改系统核心文件。 |
UID(User ID):系统内部用数字标识用户,而不是用户名。
二、用户组(Group)
组是用户的集合,用于简化权限管理。一个用户可以属于多个组。
组类型有主组(Primary Group,类似角色的概念)和附加组(Supplementary Groups)。主组:每个用户必须有一个主组,新建文件时,默认归属该组。附加组:用户可以属于多个附加组,获得这些组的权限。
为什么需要组?一是权限共享:例如,多个开发者需要访问同一个项目目录,可以把他们加入 developers 组,并设置目录权限为 g+rwx。二是简化管理:不用逐个设置权限,只需对组授权。
三、关联的核心文件(用户/组信息存储)
Linux 使用几个关键文件来存储用户和组信息:
文件 | 作用 |
/etc/passwd | 存储所有用户的基本信息(用户名/UID/主组/家目录/默认 shell); 不保存密码(密在 /etc/shadow) |
/etc/shadow | 加密存储用户密码(仅 root 可读) |
/etc/group | 存储组信息(组名、GID、成员) |
/etc/gshadow | 组密码和管理员(较少使用) |
示例 /etc/passwd 一行:
$ alice:x:1001:1001:Alice Smith:/home/alice:/bin/bash
- alice:用户名
- x:密码占位符(真实密码在 /etc/shadow)
- 1001:UID
- 1001:主组 GID
- Alice Smith:用户全名(GECOS 字段)
- /home/alice:家目录
- /bin/bash:默认 shell
四、用户/组与权限的关系
Linux 文件权限分为三类:
$ -rw-r–r– 1 alice developers 1024 Apr 5 10:00 file.txt
- rw-:所有者(alice) 的权限(读写)
- r–:所属组(developers) 的权限(只读)
- r–:其他人(others) 的权限(只读)
所以:用户 alice 是file.txt文件所有者,拥有读写权限;developers 组的成员可以读取该文件;其他人只能读。
五、常用用户和组管理命令
命令 | 功能 | 示例 |
adduser / useradd | 创建用户 | sudo adduser alice |
deluser / userdel | 删除用户 | sudo deluser –remove-home alice |
passwd | 修改密码 | sudo passwd alice |
usermod | 修改用户属性 | sudo usermod -aG sudo alice(加附加组) |
groups | 查看用户所属组 | groups alice |
id | 显示用户和组 ID | id alice |
groupadd | 创建组 | sudo groupadd developers |
groupdel | 删除组 | sudo groupdel developers |
gpasswd | 管理组成员或密码 | sudo gpasswd -a alice developers |
六、实际应用场景(个人用户场景)
场景 1:让普通用户能执行管理员命令
将用户加入 sudo 组
$ sudo usermod -aG sudo alice
之后用户可以用 sudo 执行需要 root 权限的命令;sudo组不同于root组,root组只有1个用户,就是root;
场景 2:多个用户共享一个目录
# 创建组
$ sudo groupadd project-x
# 将用户加入组
$ sudo usermod -aG project-x alice
$ sudo usermod -aG project-x bob
# 创建共享目录并设置组所有权
$ sudo mkdir /shared/project-x
$ sudo chgrp project-x /shared/project-x
$ sudo chmod 775 /shared/project-x # 组内可读写执行
场景 3:禁止用户登录(仅用于服务,不提供给真实客户登录)
创建一个无法登录的系统用户: sudo adduser –system –no-create-home –shell /usr/sbin/nologin appuser