在Linux中理解用户管理并实现有效的访问控制

本文最后更新于 2023年12月15日 下午

前言

Linux提供了强大而灵活的权限管理机制,为用户和管理员提供了极大的控制能力。无论是在个人计算机、服务器还是嵌入式设备中,Linux的权限控制系统都是确保数据安全和系统稳定性的重要组成部分。

在Linux中,每个文件和目录都有一组权限,这些权限定义了对它们的访问和操作权限。这种基于权限的访问控制是Linux安全模型的核心,它确保只有经过授权的用户可以访问敏感数据或执行关键操作。同时,Linux提供了多层次的权限控制,使管理员可以对不同用户和用户组进行细粒度的权限分配,从而实现了安全的多用户环境。

文件权限

权限类型解析

在Linux中,每个文件和目录都有三组权限:所有者(Owner)、所属组(Group)和其他用户(Others),每组权限包括读取(Read)、写入(Write)和执行(Execute)权限

  • 读取权限(r)允许查看文件的内容和属性
  • 写入权限(w)允许修改文件的内容和属性
  • 执行权限(x)允许以可执行文件或目录的形式运行文件或访问目录

除了用 r w x 这三个字母表示外,权限也可以用数字表示:r=4,w=2,x=1。将三个权限相加可以得到一个三位数的数字表示权限组的值,例如rwx(读、写、执行)为7,rw-(读、写)为6,r–(只读)为4。每个权限位有两种可能的状态,有3个权限位,所以总共有 $2^3 = 8$ 种不同的权限搭配。这些不同的权限搭配提供了灵活的权限控制选项,使管理员可以根据需要精确地控制每个文件和目录的访问和操作权限。

使用ls -l命令可以查看文件的权限。例如:

drwx-w-r-x 16 hk hk 4096 Dec 8 22:56 hk

第一个字符 “d” 表示这是一个目录。如果是一个普通文件,该位置将显示 “-”。后续的九个字符 “rwx-w-r-x” 表示文件的权限。由左到右,前三个字符 “rwx” 表示所有者(hk)的权限,中间三个字符 “w-” 表示所属组(hk)的权限,最后三个字符 “r-x” 表示其他用户的权限。

设置文件权限

在Linux中,可以使用命令 chmod 来设置文件或目录的权限。chmod 命令可以通过两种方式来设置权限:符号模式(Symbolic Mode)和数字模式(Numeric Mode),通常情况下,只有文件的所有者或超级用户才有权限更改文件的权限。

符号模式

使用符号模式可以直观地指定权限的增加或取消。下面是符号模式中使用的符号及其含义:

  • +:添加权限
  • -:取消权限
  • =:设置权限为指定值

结合这些符号,可以使用如下格式设置权限:

  • chmod [who] [symbol] [permissions] file
其中:
- [who] 表示要设置权限的对象,可以是以下之一:
  - u:所有者(user)。
  - g:所属组(group)。
  - o:其他用户(others)。
  - a:所有用户(all),等同于 ugo。
- [permissions] 表示要设置的权限,可以是以下之一:
  - r:读权限。
  - w:写权限。
  - x:执行权限。
  - s:设置用户或组的权限为 SUID 或 SGID(特殊权限)。
  - t:设置目录的粘滞位(Sticky Bit)权限。
- file 表示要设置权限的文件或目录。

例如,要将文件 example.txt 的所有者权限设置为可读、可写,可以使用以下命令:

  • chmod u+rw example.txt

数字模式

使用数字模式可以直接使用数字来表示权限。每个权限对应一个数字值,通过将这些数字相加来表示多个权限的组合。结合这些数字,可以使用如下格式设置权限:

  • chmod [permissions] file

例如,要将文件 example.txt 的权限设置为所有者可读、可写,所属组可读,其他用户可执行,可以使用以下命令:

  • chmod 764 example.txt

在数字模式下,可以使用特殊的权限位来设置一些特殊权限。这些特殊权限位称为粘滞位(数字1)、SUID(数字4) 位和 SGID(数字2) 位。

  1. SUID(Set User ID)权限:
    • 当 SUID 权限应用于可执行文件时,它指定该文件在执行时将使用文件所有者的权限而不是执行者自身的权限。这意味着,当普通用户执行具有 SUID 权限的可执行文件时,该文件将以文件所有者的权限运行。
    • SUID 权限的示例用法是 /bin/passwd 可执行文件,该文件允许普通用户更改自己的密码,但是只有管理员才能更改其他用户的密码。这是通过将 /bin/passwd 设置为具有 SUID 权限来实现的,这样普通用户在执行该文件时将以管理员的权限执行。
  2. SGID(Set Group ID)权限:
    • 当 SGID 权限应用于可执行文件或目录时,它指定该文件或目录在执行时将使用文件所属组的权限而不是执行者自身的权限。这意味着,当普通用户执行具有 SGID 权限的可执行文件或访问具有 SGID 权限的目录时,将以文件所属组的权限运行。
    • SGID 权限的示例用法是 /usr/bin/newgrp 可执行文件,该文件允许用户切换到其他组。当用户执行 /usr/bin/newgrp 时,它将以该组的权限运行。
  3. 粘滞位(Sticky Bit):
    • 当目录设置了粘滞位后,只有目录的所有者、文件的所有者或超级用户才能删除或重命名该目录中的文件。其他用户无法删除或重命名不属于自己的文件,即使对于该目录具有写权限也不行。
    • 粘滞位的主要用途是在多个用户共享同一个目录时,确保用户只能删除或修改自己创建的文件,而无法删除或修改其他用户创建的文件。

用户和用户组

在Linux系统中,用户可以划分为不同的组,这样可以更好地管理用户的访问权限和资源,每个用户可以属于一个或多个用户组。通过正确设置文件权限和用户组,可以实现对文件和目录的细粒度访问控制,确保系统的安全性和可管理性。

常见用户组

  1. root(超级用户组):
    • GID: 0
    • 说明:root是系统中最高权限的用户组,拥有对系统的完全控制权限。root用户可以访问系统上的所有文件,进行系统配置和管理任务。通常情况下,只有root用户才能修改一些关键系统文件和目录。
  2. adm(系统日志组):
    • GID: 4
    • 说明:adm组拥有对系统日志文件的访问权限。系统日志记录在/var/log目录中,该组允许一些系统工具和日志管理程序访问日志文件。

在Linux中理解用户管理并实现有效的访问控制
https://exusiai.top/article/1098f68dd938.html
作者
HauKuen
发布于
2023年12月7日
许可协议