百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Linux文件权限工作原理(linux文件的权限管理的原理是什么)

sinye56 2024-11-12 12:46 3 浏览 0 评论

理解用户权限的工作原理是掌握 Linux 的最重要部分之一。从这里开始学习基础知识。

译自 Linux: How File Permissions Work,作者 Damon M Garn。

Linux:Linux 技能模块库的配套实验室文章。在本系列文章中,我们还介绍了如何选择发行版、Linux 内核如何与硬件交互以及如何Linux 管理系统服务、存储和用户和组权限。

权限控制用户对文件和目录的访问。例如,权限决定用户是否可以读取文件 sales.txt。它们还决定用户是否可以编辑或更改该文件的内容。权限还指定用户是否可以运行程序或脚本。

如果您已经熟悉 Windows 权限,您会发现 Linux 权限要简单得多。

本文介绍了标准 Linux 权限可用的身份和访问级别,解释了绝对模式与符号模式,并展示了 chmod 和 chown 命令的语法。

我将从一个简短的命令参考部分开始,演示如何创建一些用户、组、文件和目录,您可以在设置权限时使用它们。

查看我之前的帖子,“了解 Linux 命令行”,以更好地使用这些命令。

设置用户和资源

创建一些用户帐户,以便您可以使用以下示例为不同的人设置不同的权限:

图 1:创建用户 fsmith 的命令。

使用相同的方法创建 slee 和 mgarcia。

注意:以 root(管理员)用户身份登录 Linux 系统是一种糟糕的 安全实践。大多数系统强制您以普通用户身份登录,然后使用 sudo(超级用户执行)命令提升您的权限。使用 sudo 时,系统可能会提示您输入密码。

查看用户管理命令:

命令

描述

useradd username

创建新用户

usermod username

修改现有用户

userdel username

删除现有用户

也创建一些组。以下是一个示例:

创建 HR 和 PR 组,使用相同的语法。

查看组管理命令:

命令

描述

groupadd groupname

创建新群组

groupmod groupname

修改现有群组

groupdel groupname

删除现有群组

您可以在我最近的 Linux 用户和组文章 中找到更多详细信息。

现在您已经拥有了一些用户和组,请创建一些资源,以便您可以使用权限控制对它们的访问。

切换到 /home/fsmith 主目录。使用 mkdir 命令创建以下目录:

  • departments
  • departments/it_dept
  • departments/hr_dept
  • departments/pr_dept

图 2:确认部门目录已存在。

这些代表您管理 Linux 服务器的模拟公司中的三个部门。

使用 touch 命令在指定目录中创建这些文件:

  • 在 it_dept 目录中,创建 password-reset.txt
  • 在 hr_dept 目录中,创建 policies.txt
  • 在 pr_dept 目录中,创建 press-releases.txt

在 此处 找到有关 管理 Linux 文件和目录的更多信息。

用户、文件和权限都是单个较大主题的一部分:访问控制。用户帐户是身份,文件是资源。权限根据身份控制对资源的访问。例如,权限控制 fsmith 是否可以读取 fileA.txt 和 slee 是否可以更改 fileB.txt 的内容。

您可能会认为用户和组管理、文件管理和文件权限教程的内容是一个相关的主题集合——控制对文件的访问。

了解权限和身份

设置权限需要您了解可用的访问级别并管理这些访问级别适用于谁。本节介绍管理 Linux 权限所需的权限和身份。

了解访问级别

Linux 权限提供三种访问级别:读、写和执行。它们的行为在应用于文件或目录时略有不同。

下表解释了读、写和执行权限在应用于文件时的含义。

权限

字符

描述

r

查看文件内容

w

修改文件内容

执行

x

如果文件是程序或脚本,则运行它

此表显示了读、写和执行权限如何应用于目录。

权限

字符

描述

r

列出和复制目录内容

w

在目录中添加或删除文件(也需要 x)

执行

x

使用 cd 进入目录

一个重要的区别是,需要在目录上拥有执行权限才能使用 cd 命令进入该目录。需要在文件上拥有执行权限才能将其作为程序或脚本运行。

了解身份

Linux 识别三种用于访问控制的身份:

  • 拥有文件或目录的一个用户。
  • 与文件或目录关联的一个组。
  • 所有不是该用户或组成员的其他人。

身份

字符

描述

用户(所有者)

u

文件或目录的创建者或关联身份。

g

与文件或目录关联的一个组。

其他

o

所有不是用户或组的帐户。

三种访问级别(rwx)可以应用于三种身份(ugo)。

显示和解释权限

显示目录内容的命令是 ls(“list”的缩写)。添加 -l 选项以显示文件和目录权限。在这些示例中使用 ls -l 来显示对权限的更改。

图 3:使用 ls -l 命令显示现有权限。

图 4:识别哪些权限块适用于哪些身份。

上图用颜色编码来解释哪些权限适用于哪些身份。黄色框(rwx)中的权限适用于用户 fsmith。绿色框显示 IT 组的权限(rw-)。其他身份只有读权限(r--),如红色框所示。破折号表示未授予权限。

了解权限模式

Linux 管理员有两种不同的设置权限的方法:绝对模式和符号模式。您的系统识别这两种模式,因此使用对您最简单的模式。您可能会发现自己在不同的时间点使用这两种模式。

了解绝对模式

绝对模式使用数字八进制值来表示权限级别。

权限

八进制值

r(读)

4

w(写)

2

x(执行)

1

绝对模式将数字权限值相加以表示整体访问级别。值的总和按特定顺序排列:用户、然后是组、然后是其他人。

示例 1: 读、写和执行访问 = r (4) + w (2) + x (1) = 7

  • 所有访问级别的绝对模式值为 7 (4+2+1)

示例 2: 读和写(但不能执行) = r (4) + w (2) = 6

  • 对文件的读写但不能执行访问的绝对模式值为 6。

示例 3: 仅读(无写和无执行) = r (4)

  • 仅读访问的绝对模式值为 4。

绝对模式还按特定顺序使用三个身份,始终是用户、组、其他人(ugo)。

示例 1: 用户拥有 rwx,组拥有 r-x,其他人没有访问权限 = 750

  • 用户拥有 7(读+写+执行的值),组拥有 5(读+执行),其他人拥有 0(没有值)。

示例 2: 用户拥有 rw-,组拥有 r–,其他人拥有 r– = 644

  • 用户拥有 6 (r+w),组和其他人拥有 4 (读)。

绝对模式听起来非常复杂,但一旦您习惯了这些值,它比符号模式更简单、更快。我几乎总是使用绝对模式在 Linux 上工作。

了解符号模式

符号模式将身份字母(ugo)、权限字母(rwx)和数学运算符(+,-,=)组合起来以配置权限。

以下是一些示例:

  • 授予用户对文件的读权限如下所示:u+r(为用户添加读权限)。
  • 为组授予读写权限为 g+rw(为组添加读写权限)。
  • 从其他人那里删除读写权限为 o-rw(从其他人那里减去读写权限)。

符号模式的优点是能够逻辑地推断出您想要什么,而不是仅仅应用数学结果。您可能会对自己说,“我想为用户和组添加读写权限。” 这看起来很合乎逻辑:ug+rw。

使用chmod命令

现在您已经可以解释标准的 Linux 权限,是时候使用 chmod(“更改模式”)命令来设置权限。您将在这里使用绝对模式或符号模式。

无论您喜欢哪种模式,chmod 语法如下所示:

$ chmod PERMISSION filename

文件名值是命令的参数(它所作用的对象)。在以下示例中,我将对 fileA.txt 应用各种权限。

绝对模式示例:

示例 1:将用户权限设置为 u = rwx、group = r-x 和 others = —。

示例 2:将 user = rw-、group = r–、others = r–

此方法要求您使用三个身份的总和来声明所需的实际权限级别。

注意:本教程末尾有一个关于这些概念的练习。

符号模式示例

符号模式不同,因为它从现有值中添加或减去所需的权限。如果用户已经对文件具有读取权限,但您还想授予写入权限,那么您只需将写入权限添加到现有值中:

图 6:使用 chmod 命令设定使用符号模式的权限。

此示例保留了用户现有的读取权限,并且根本没有修改组或其他权限。

授予组读取和写入权限如下所示:

同样,这会保留现有的用户和其他人权限。

本教程末尾有一个关于这些概念的练习。

语法回顾:

  • 绝对模式使用表示 rwx 权限的值之和。这些值按表示用户、组和其他的顺序列出。
  • 符号模式将三个身份的首字母缩写(ugo)与三个访问级别的首字母缩写(rwx)结合使用 + 和 - 来添加或删除权限。

应该使用哪种模式?

那么,在日常 Linux 任务中应该使用哪种模式?您应该了解并识别这两种模式,原因如下:

  • 认证考试会测试您对这两种方法的掌握程度。
  • 文档可能使用任一方法编写,因此您必须能够理解每种方法。

但是,您可以随意使用对您最有意义的模式。我更喜欢绝对模式,因为它需要更少的输入并且更直接。其他人则乐于使用符号模式。只要确保您理解这两种方法即可。

管理文件和目录所有权

chmod 命令允许您设置权限,但 chown 命令会更改权限适用的对象。您可以更改用户(所有者)和组关联,将各种目录和文件重新分配给系统中的任何人。

使用chown命令

您可能希望进行三种所有权更改:更改所有者(用户)、更改关联的组或同时更改两者。

要更改文件或目录的所有者,请键入:

要更改分配给文件或目录的组,请键入:

要同时更改这两个值,请键入:

考虑以下示例,您需要将 fsmith 帐户设置为 password-reset.txt 文本文件的所有者,您是在本教程开始时创建的:

$ chown fsmith password-reset.txt

接下来,将 HR 组与 hr_dept 目录关联。

也许您需要将 mgarcia 设置为所有者,并将 PR 组与 pr_dept 目录同时关联:

$ chown mgarcia:PR pr_dept

使用 -R 选项更改目录及其所有内容的所有权。-R 选项代表“递归”。要将 IT 组与 it_dept 目录中的任何目录和文件关联,请键入:

实践机会

我编写了一些基本练习,以帮助您练习使用 chmod 和 chown。

如果您没有在文章开头创建用户、组、目录和文件,请现在返回并创建它们。您可以根据需要修改用户名、组、目录和文件。通过匹配以下要求,练习使用本教程中的命令。

实践设置所有权

使用 chown 命令设置部门目录的所有权和组关联:

  • 将 fsmith 设置为 it_dept 目录的所有者(使其递归)。
  • 将 mgarcia 设置为 pr_dept 目录的所有者(使其递归)。
  • 将 slee 设置为 hr_dept 目录的所有者(使其递归)。
  • 将 IT、HR 和 PR 组递归地与匹配的部门目录关联。

图 7:根据说明中指定的设置所有者和组的结果。

实践目录权限

使用绝对模式设置以下访问级别:

  • 将 mgarcia 的递归权限设置为 rwx,PR 组的权限设置为 rwx,其他人的权限设置为 r-x,应用于 pr_dept 目录。
  • 将 slee 的递归权限设置为 rwx,HR 组的权限设置为 rwx,其他人的权限设置为 r-x,应用于 hr_dept 目录。
  • 将 fsmith 的递归权限设置为 rwx,IT 组的权限设置为 rwx,其他人的权限设置为 rwx,应用于 it_dept 目录。

图8:如说明中所述设置权限的结果。

实践文件权限

使用 chown 命令设置所有权,以及使用具有 symbolic 模式的 chmod 命令来添加和取消权限,直到它们满足以下要求:

  • 将 password-reset.txt 文件的访问权限授予 fsmith(rw-)、当前用户组(rw-)和其他人(rw-)。
  • 将 press-releases.txt 文件的访问权限授予 mgarcia(rwx)、当前用户组(r--)和其他人(无访问权限)。
  • 将 policies.txt 文件的访问权限授予 slee(rw-)、当前用户组(rw-)和其他人(r--)。

图 9:按照本说明设置权限后的结果。

可以自由创建其他用户、组、目录和文件以练习权限。

总结

控制对资源的访问是管理员的一项关键技能。它始于创建正确的用户和组帐户来代表用户。接下来,创建和组织文件和目录,并牢记安全性。最后,为所有者 (u)、组 (g) 和所有其他人 (o) 设置适当的权限。这种身份、资源和权限的组合是控制数据访问的基本组成部分。

本教程介绍了标准的 Linux 权限,但还有一些额外的特殊权限可以修改它们的工作方式。额外的 Linux 访问控制列表提供了更强大的控制文件安全性的方法。

花时间练习管理对文件和目录的访问非常值得,方法是创建一些示例资源和用户,然后设置各种权限和所有权。

相关推荐

RHEL8和CentOS8怎么重启网络

本文主要讲解如何重启RHEL8或者CentOS8网络以及如何解决RHEL8和CentOS8系统的网络管理服务报错,当我们安装好RHEL8或者CentOS8,重启启动网络时,会出现以下报错:...

Linux 内、外网双网卡路由配置

1.路由信息的影响Linux系统中如果有多张网卡的情况下,如果路由信息配置不正确,...

Linux——centos7修改网卡名

修改网卡名这个操作可能平时用不太上,可作为了解。修改网卡默认名从ens33改成eth01.首先修改网卡配置文件名(建议将原配置文件进行备份)...

CentOS7下修改网卡名称为ethX的操作方法

?Linux操作系统的网卡设备的传统命名方式是eth0、eth1、eth2等,而CentOS7提供了不同的命名规则,默认是基于固件、拓扑、位置信息来分配。这样做的优点是命名全自动的、可预知的...

Linux 网卡名称enss33修改为eth0

一、CentOS修改/etc/sysconfig/grub文件(修改前先备份)为GRUB_CMDLINE_LINUX变量增加2个参数(net.ifnames=0biosdevname=0),修改完成...

CentOS下双网卡绑定,实现带宽飞速

方式一1.新建/etc/sysconfig/network-scripts/ifcfg-bond0文件DEVICE=bond0IPADDR=191.3.60.1NETMASK=255.255.2...

linux 双网卡双网段设置路由转发

背景网络情况linux双网卡:网卡A(ens3)和网卡B(...

Linux-VMware设置网卡保持激活

Linux系统只有在激活网卡的状态下才能去连接网络,进行网络通讯。修改配置文件(永久激活网卡)...

VMware虚拟机三种网络模式

01.VMware虚拟机三种网络模式由于linux目前很热门,越来越多的人在学习linux,但是买一台服务放家里来学习,实在是很浪费。那么如何解决这个问题?虚拟机软件是很好的选择,常用的虚拟机软件有v...

Rocky Linux 9/CentOS Stream 9修改网卡配置/自动修改主机名(实操)

推荐...

2023年最新版 linux克隆虚拟机 解决网卡uuid重复问题

问题描述1、克隆了虚拟机,两台虚拟机里面的ip以及网卡的uuid都是一样的2、ip好改,但是uuid如何改呢?解决问题1、每台主机应该保证网卡的UUID是唯一的,避免后面网络通信有问题...

Linux网卡的Vlan配置,你可能不了解的玩法

如果服务器上连的交换机端口已经预先设置了TRUNK,并允许特定的VLAN可以通过,那么服务器的网卡在配置时就必须指定所属的VLAN,否则就不通了,这种情形在虚拟化部署时较常见。例如在一个办公环境中,办...

Centos7 网卡绑定

1、切换到指定目录#备份网卡数据cd/etc/sysconfig/network-scriptscpifcfg-enp5s0f0ifcfg-enp5s0f0.bak...

Linux搭建nginx+keepalived 高可用(主备+双主模式)

一:keepalived简介反向代理及负载均衡参考:...

Linux下Route 路由指令使用详解

linuxroute命令用于显示和操作IP路由表。要实现两个不同子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。在Linux系统中,设置路由通常是为了解决以下问题:该...

取消回复欢迎 发表评论: