Linux 文件权限工作原理

Linux 权限对于确保系统安全性和完整性至关重要,可以控制谁可以访问和修改文件、目录及其他系统资源。为用户分配适当权限对于保护敏感数据和防止未经授权的访问至关重要,正确设置文件权限也有助于防止可能危及安全数据、系统稳定性或功能的意外修改或恶意篡改。

本文将探讨 Linux 的权限结构以及设置权限的方法。

了解 Linux 权限

Linux 权限决定了谁可以访问和修改文件、目录及其他系统资源,这些权限会分配给每个文件或目录,并基于所有者、组和其他用户类别划分,分配给文件或目录的权限被称为文件模式。

当用户尝试访问某个资源时,Linux 会检查其有效权限是否允许该操作。有效权限由用户的主组和所有附加组决定。若用户具备必要权限,则授予访问权;否则,拒绝访问。该系统提供了对资源访问的灵活控制,可根据文件和目录的敏感性及用途,为其设置不同权限。

Linux 的三种主要权限类型如下:

  • 读取(Read):用户仅可查看文件内容;对于目录,仅能查看其中存储的文件和子目录名称。
  • 写入(Write):启用写入权限后,用户可修改和删除文件内容,也能创建、修改、删除和重命名文件及子目录。但与文件不同,目录需启用执行权限,写入权限才能生效。
  • 执行(Execute):对于文件,执行权限允许用户将文件作为脚本运行;对于目录,用户可访问该目录并查看其中文件的详细信息。

上述权限会分配给以下三类用户:

  • 所有者(Owner):创建文件的用户将获得全部权限。
  • 组(Group):一组用户共享对某个文件的访问权,并具有一组特定的权限。
  • 其他用户(All users):系统中既不是文件或目录的所有者,也不属于与文件或目录关联的组的用户。默认情况下,这些用户被授予最少的访问权限,除非启用提升的权限。

文件或目录的权限可对上述每类用户分别授予或拒绝,并可用下表中的数值表示:

数值 符号 文件权限
0 --- 无权限
1 --x 仅执行
2 -w- 仅写入
3 -wx 写入和执行
4 r-- 仅读取
5 r-x 读取和执行
6 rw- 读取和写入
7 rwx 读取、写入和执行

文件模式通常使用一个三字符序列表示,其中每个字符对应一个权限。例如,权限代码 764 表示所有者拥有读取、写入和执行权限,组用户拥有读取和写入权限,其他用户仅拥有读取权限。

什么是文件模式?

在 Linux 中,文件模式指的是与文件或目录相关的权限和访问控制级别,它决定了谁可以读取、写入或执行文件,以及是否设置了特殊权限。

文件模式由十个字符组成,第一个字符表示文件类型,后续九个字符分别对应文件所有者、组用户和其他用户的读取(r)、写入(w)和执行(x)权限。

以字符串 drwxr-xr-x 为例,解读文件模式的含义:

  • d 表示文件类型为目录。
  • rwx 表示所有者拥有读取、写入和执行权限。
  • r-x 表示组用户拥有读取和执行权限。
  • r-x 表示其他用户拥有读取和执行权限。

Linux 中文件模式权限示例:

文件模式 描述
-rw-rw-rw- 系统中所有用户均可修改的文件
-rw------- 仅所有者可访问的文件
drwxrwx--- 所有者和组用户可修改的目录
-rw-rw-r-- 所有者和组用户可修改、其他用户不可修改的文件

由此可见,所有者通常拥有最多权限,通过将组用户和其他用户的权限限制为子集,Linux 确保文件仅对需要访问的用户开放,同时保护信息免受未授权访问。

如何在 Linux 中查看文件权限?

在 Linux 中查看文件权限有多种方法:

  • 使用 ls 命令
  • 使用 stat 命令

使用 ls 命令

查看文件权限最常用的方法是使用 ls 命令搭配长列表选项(-l)。

语法:ls -l 文件名

若要查看目录中所有文件的权限,可运行以下命令:
ls -l

解读长列表输出

输出内容包含以下组件:

  • 文件模式
  • 文件所有者
  • 组用户和其他用户对应的权限类别
  • 文件大小(以字节为单位)
  • 文件最后修改日期
  • 文件名

查看长列表时,需重点关注这些细节。

什么是特殊权限?

Linux 还具有特殊权限,可更精细地控制谁能管理文件和目录,从而确保用户拥有合适的访问权限,同时保护敏感数据免受不必要的修改。三种主要的特殊权限类型是设置用户 ID(setuid)、设置组 ID(setgid)和粘滞位(sticky bit)。

setuid 权限

当在可执行文件上设置 setuid 权限时,用户执行该文件时将使用文件所有者的权限,而非自身权限。这对于需要提升权限的任务特别有用。因此,当用户执行设置了 setuid 位的文件时,进程以文件所有者的用户 ID(UID)运行。例如,如果一个由 root 用户拥有的文件设置了 setuid 位,任何执行该文件的用户都将以 root 权限运行它。

使用 chmod 命令为文件设置 setuid 权限

可通过 chmod 命令通过执行以下命令将 setuid 权限分配给文件:
chmod 4755 文件名

其中,4 是 setuid 权限的八进制表示,755 是文件的基础权限位。

setgid 权限

setgid 权限允许用户使用文件组的权限来执行文件。当 setgid 应用于目录时,在该目录中创建的文件将继承目录的组所有权,而不是用户的默认组。这有助于允许组内用户执行需要组级权限的任务。

使用 chmod 命令为目录设置 setgid 权限

可通过 chmod 命令为目录分配 setgid 权限,执行以下命令:
chmod 2755 目录名

其中,2 是 setgid 权限的八进制表示,755 是目录的基础权限位。

粘滞位(Sticky bit)

Linux 粘滞位权限适用于需要限制组用户和其他用户操作的场景。当目录设置了粘滞位后,其中的文件仅能由所有者删除或重命名,即使用户拥有删除权限也无法删除该文件。

理解并合理使用 setuid、setgid 和粘滞位等特殊权限,对提升 Linux 环境的安全性和访问控制非常重要。

在目录上设置粘滞位权限与 setuid 和 setgid 类似,粘滞位的八进制表示为 1。

如何在 Linux 中修改权限?

Linux 中可使用更改模式命令(chmod)修改文件和目录的权限。

使用符号模式

通过 chmod 命令修改文件权限的语法如下:
chmod [权限] [文件]

权限可根据需要设置为符号模式或数值模式。符号模式使用单个字符表示用户类别,以下是用于更改用户文件访问权限的完整字母和运算符列表:

符号 含义
u 文件所有者
g 拥有指定访问权限的其他组用户
o 其他用户
a 所有用户类别
+ 添加权限
- 移除权限
= 将权限设置为指定值

通过示例理解 chmod 命令的使用:

  • chmod u+x 文件名:为所有者授予执行权限。
  • chmod g-w 文件名:移除组用户的写入权限。
  • chmod o+rw 文件名:为其他用户设置读取和写入权限。

也可通过逗号分隔多个模式,一次性修改所有用户类别的权限,例如:
chmod u+x, g-w, o+rw 文件名

该命令为文件所有者授予执行权限,移除组用户的写入权限,并为其他用户启用读取和写入权限。

若要让所有用户类别共享同一文件权限,可执行以下命令:
chmod a+rw 文件名

此示例中,文件所有者、组用户和其他用户均可读取和写入该文件。

使用绝对模式修改文件权限

绝对模式中,用户类别的权限用三位数字表示,各数字对应的权限如下:

数值 对应的权限
4 读取(r)权限
2 写入(w)权限
1 执行(x)权限
0 无任何权限

示例 :为所有者设置读取、写入和执行权限,为组用户设置读取和执行权限,为其他用户设置仅读取权限:
chmod 754 文件名

可使用 -R 选项将权限应用于所有文件和子目录,例如:
chmod -R 754 目录名

该命令为目录中的所有文件授予对应用户类别的指定权限。

此外,可使用 chown 命令修改 Linux 中文件或目录的所有权,语法如下:
chown [新所有者或组] [文件或目录]

示例:

  • 更改文件所有者: chown luffy file.txt,将 file.txt 的所有者改为 luffy。
  • 同时更改所有者和组: chown luffy:crossguild file.txt,将 file.txt 的所有者改为 luffy,组改为 crossguild。

该示例中,组名(crossguild)前加冒号(:),以便命令区分用户账户(luffy)和组名。

如何增强 Linux 文件和目录权限安全性

EventLog Analyzer 日志管理工具,旨在收集、分析和报告网络中的各类日志,包括与文件操作相关的日志。其文件完整性监控功能可提供文件创建、修改、删除、权限变更及系统文件修改等操作的可见性和详细报告。能深入洞察谁在何时、从何地对 Linux 文件和目录进行了何种修改。此外,系统管理员还可通过预定义的告警配置文件,接收异常文件权限变更的通知,例如批量权限变更、非工作时间的权限变更、来自异常位置的权限变更等。这有助于确保文件系统中存储数据的完整性,同时该解决方案还能提供文件权限变更及其他文件操作的详细审计跟踪。

相关推荐
a123560mh4 小时前
国产信创操作系统银河麒麟常见软件适配(MongoDB、 Redis、Nginx、Tomcat)
linux·redis·nginx·mongodb·tomcat·kylin
赖small强4 小时前
【Linux驱动开发】Linux MMC子系统技术分析报告 - 第二部分:协议实现与性能优化
linux·驱动开发·mmc
guygg884 小时前
Linux服务器上安装配置GitLab
linux·运维·gitlab
百***35514 小时前
Linux(CentOS)安装 Nginx
linux·nginx·centos
tzhou644525 小时前
Linux文本处理工具:cut、sort、uniq、tr
linux·运维·服务器
顾安r5 小时前
11.19 脚本 最小web控制linux/termux
linux·服务器·css·flask
程序媛_MISS_zhang_01106 小时前
vant-ui中List 组件可以与 PullRefresh 组件结合使用,实现下拉刷新的效果
java·linux·ui
dragoooon346 小时前
[Linux网络——Lesson2.socket套接字 && 简易UDP网络程序]
linux·网络·udp
大聪明-PLUS6 小时前
编程语言保证是安全软件开发的基础
linux·嵌入式·arm·smarc
清风一徐7 小时前
K8S环境中通过prometheus实现flink服务监控并给flink设置服务监测自动重启
linux·运维·云原生·容器·flink·kubernetes·prometheus