一篇文章让你了解Linux中的用户和组权限

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 命令 - 更改文件组)
    • [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):用户可以执行该文件(对于脚本和二进制文件)。

文件权限分为三种用户类别:

  1. 文件所有者 (User):通常是创建文件的用户。
  2. 文件所属组 (Group):文件可以分配给一个组。
  3. 其他用户 (Other):除文件所有者和组用户以外的所有用户。

文件权限的表示方式是 rwxrwxrwx,每三位分别表示用户、组和其他用户的权限。例如:

-rwxr-xr--

表示:

  • 文件所有者有读取、写入、执行权限 (rwx)。
  • 文件所属组有读取和执行权限 (r-x)。
  • 其他用户仅有读取权限 (r--)。

权限数字表示法

每个权限值可以用数字表示:

  • r = 4
  • w = 2
  • x = 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. 总结

  • 用户与组:帮助管理系统中用户权限。
  • 权限模型:基于文件所有者、组用户和其他用户。
  • 权限管理命令 :包括 chmodchownchgrp 等。
  • 特殊权限:SUID、SGID 和 Sticky Bit 提供额外的权限控制。

Linux 权限系统虽然复杂,但灵活且安全,通过合理的权限配置,可以有效保护系统文件和资源的安全。

相关推荐
滴水之功8 分钟前
VMware OpenWrt怎么桥接模式联网
linux·openwrt
saynaihe12 分钟前
安全地使用 Docker 和 Systemctl 部署 Kafka 的综合指南
运维·安全·docker·容器·kafka
ldinvicible27 分钟前
How to run Flutter on an Embedded Device
linux
OopspoO36 分钟前
qcow2镜像大小压缩
学习·性能优化
机器之心1 小时前
图学习新突破:一个统一框架连接空域和频域
人工智能·后端
A懿轩A1 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
居居飒1 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
YRr YRr1 小时前
解决Ubuntu 20.04上编译OpenCV 3.2时遇到的stdlib.h缺失错误
linux·opencv·ubuntu
认真学习的小雅兰.1 小时前
如何在Ubuntu上利用Docker和Cpolar实现Excalidraw公网访问高效绘图——“cpolar内网穿透”
linux·ubuntu·docker
.生产的驴1 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven