Linux 用户和组权限详解
- [Linux 用户和组权限详解](#Linux 用户和组权限详解)
-
- [1. 基本概念](#1. 基本概念)
-
- [1.1 用户 (User)](#1.1 用户 (User))
- [1.2 用户组 (Group)](#1.2 用户组 (Group))
- [2. 文件权限模型](#2. 文件权限模型)
- [3. 用户和组的管理命令](#3. 用户和组的管理命令)
-
- [3.1 用户管理](#3.1 用户管理)
-
- [1. 添加用户](#1. 添加用户)
- [2. 设置用户密码](#2. 设置用户密码)
- [3. 删除用户](#3. 删除用户)
- [4. 修改用户信息](#4. 修改用户信息)
- [3.2 组管理](#3.2 组管理)
-
- [1. 添加组](#1. 添加组)
- [2. 删除组](#2. 删除组)
- [3. 添加用户到组](#3. 添加用户到组)
- [4. 权限管理命令](#4. 权限管理命令)
-
- [4.1 `chmod` 命令 - 修改文件权限](#4.1
chmod
命令 - 修改文件权限) -
- [1. 数字方式](#1. 数字方式)
- [2. 符号方式](#2. 符号方式)
- [4.2 `chown` 命令 - 更改文件所有者和组](#4.2
chown
命令 - 更改文件所有者和组) - [4.3 `chgrp` 命令 - 更改文件组](#4.3
chgrp
命令 - 更改文件组)
- [4.1 `chmod` 命令 - 修改文件权限](#4.1
- [5. 特殊权限](#5. 特殊权限)
-
- [5.1 SUID (Set User ID)](#5.1 SUID (Set User ID))
- [5.2 SGID (Set Group ID)](#5.2 SGID (Set Group ID))
- [5.3 Sticky Bit](#5.3 Sticky Bit)
- [6. 实例练习](#6. 实例练习)
- [7. 总结](#7. 总结)
Linux 用户和组权限详解
Linux 是多用户、多任务的操作系统,对用户和组的权限控制非常严格,以确保系统安全。本文将介绍 Linux 系统中的用户和组权限的概念和基本用法。
1. 基本概念
1.1 用户 (User)
Linux 系统中的每个用户都有一个唯一的标识,称为用户 ID(User ID,UID)。用户可以分为三种类型:
- 超级用户 :通常为
root
用户,拥有系统的最高权限,可以进行任何操作。 - 系统用户 :通常用于运行特定服务的用户,比如
nobody
,这些用户通常没有登录权限。 - 普通用户:普通用户拥有自己独立的工作环境和文件,但权限受限,不能进行系统级操作。
1.2 用户组 (Group)
用户组是 Linux 用于管理用户的另一种方式,将多个用户归入一个组中,以便管理其权限。每个组都有一个唯一的组 ID(Group ID,GID)。
在 Linux 系统中,每个用户可以属于一个主组(Primary Group)和多个附加组(Secondary Groups)。
2. 文件权限模型
Linux 使用三种权限来控制文件的访问和修改:
- 读取权限 ( r ):用户可以查看文件内容。
- 写入权限 (w):用户可以修改文件内容。
- 执行权限 (x):用户可以执行该文件(对于脚本和二进制文件)。
文件权限分为三种用户类别:
- 文件所有者 (User):通常是创建文件的用户。
- 文件所属组 (Group):文件可以分配给一个组。
- 其他用户 (Other):除文件所有者和组用户以外的所有用户。
文件权限的表示方式是 rwxrwxrwx,每三位分别表示用户、组和其他用户的权限。例如:
-rwxr-xr--
表示:
- 文件所有者有读取、写入、执行权限 (
rwx
)。 - 文件所属组有读取和执行权限 (
r-x
)。 - 其他用户仅有读取权限 (
r--
)。
权限数字表示法
每个权限值可以用数字表示:
r
= 4w
= 2x
= 1
例如:
rwx
=4 + 2 + 1 = 7
r-x
=4 + 0 + 1 = 5
r--
=4 + 0 + 0 = 4
因此,rwxr-xr--
可以用数字 754
表示。
3. 用户和组的管理命令
3.1 用户管理
1. 添加用户
使用 useradd
命令创建新用户。
bash
sudo useradd 用户名

2. 设置用户密码
使用 passwd
命令为用户设置密码。
bash
sudo passwd 用户名

3. 删除用户
使用 userdel
命令删除用户。
bash
sudo userdel 用户名

4. 修改用户信息
使用 usermod
命令修改用户的主组或附加组。
bash
# 将用户添加到附加组
sudo usermod -aG 组名 用户名
3.2 组管理
1. 添加组
使用 groupadd
命令创建新组。
bash
sudo groupadd 组名

2. 删除组
使用 groupdel
命令删除组。
bash
sudo groupdel 组名

3. 添加用户到组
使用 usermod -G
命令将用户添加到组。
bash
sudo usermod -G 组名 用户名
这里的a是为了追加添加,不覆盖原来的组:

4. 权限管理命令
4.1 chmod
命令 - 修改文件权限
chmod
命令用于修改文件或目录的权限,可以使用符号或数字方式设置权限。
1. 数字方式
bash
chmod 755 文件名

2. 符号方式
bash
chmod u+x 文件名 # 为文件所有者增加执行权限
chmod g-w 文件名 # 移除组的写入权限
chmod o=r 文件名 # 将其他用户权限设置为只读

4.2 chown
命令 - 更改文件所有者和组
chown
命令用于更改文件或目录的所有者和组。
bash
chown 用户名:组名 文件名

4.3 chgrp
命令 - 更改文件组
chgrp
命令用于更改文件的组所有权。
bash
chgrp 组名 文件名

5. 特殊权限
5.1 SUID (Set User ID)
当文件设置了 SUID 位后,执行该文件的用户将临时获得文件所有者的权限。例如,/usr/bin/passwd
命令设置了 SUID,以便普通用户也可以更改密码。
bash
chmod u+s 文件名
5.2 SGID (Set Group ID)
SGID 位设置在目录上时,所有在该目录下创建的文件将自动继承该目录的组。
bash
chmod g+s 文件名
5.3 Sticky Bit
当 Sticky Bit 设置在目录上时,只有文件的所有者或 root 用户可以删除文件。通常用于 /tmp
目录。
bash
chmod +t 文件名
6. 实例练习
bash
# 创建新用户 john 并设置密码
sudo useradd john
sudo passwd john
# 创建新组 developers,将用户 john 添加到 developers 组
sudo groupadd developers
sudo usermod -aG developers john
# 修改文件 test.txt 的权限,设置为所有者可读写,组可读,其他用户不可访问
chmod 640 test.txt
# 设置目录 /var/project 的 SGID,使新文件自动继承组
chmod g+s /var/project
# 设置 /tmp 目录的 Sticky Bit,一般默认就有
chmod +t /tmp
7. 总结
- 用户与组:帮助管理系统中用户权限。
- 权限模型:基于文件所有者、组用户和其他用户。
- 权限管理命令 :包括
chmod
、chown
、chgrp
等。 - 特殊权限:SUID、SGID 和 Sticky Bit 提供额外的权限控制。
Linux 权限系统虽然复杂,但灵活且安全,通过合理的权限配置,可以有效保护系统文件和资源的安全。