Linux权限详解


引言 :欢迎来到海盗猫鸥的博客~~~本篇将讲解Linux中重要的概念之一------文件权限,本篇将结合示例讲解包括Linux操作系统在权限视角下对用户的分类,以及对于权限的管理方式等内容。

本篇专栏:Linux专栏

作者主页:海盗猫鸥-CSDN

Linux权限详解

LInux中的用户

用户分类

Linux下有两种用户:超级用户(root)、普通用户

超级用户可以在Linux系统下做任何事情而不受限制,而普通用户则限制某些能力。

超级用户的命令提示符为#

普通用户的命令提示符为$

用户身份切换:

  1. 普通用户->超级用户(root)

    su只是切换用户,不改变路径,需要输入密码

    su -重新登录,所以会变为用户的家目录

  2. 超级用户(root)->普通用户

    su 用户名不需要输入密码,直接切换用户

    su - 用户名不需要输入密码,重新登录到指定用户

  3. sudo指令提权(暂时性)

    可以让其他用户能够暂时 使用root权限,运用场景:你不是root,但现在需要安装软件,就需要root权限来执行。

    但需要注意的是,一个普通用户在想要使用sudo时,必须将该用户加入/etc/sudoers文件中,即类似于加入白名单一样,但该文件在没有root权限时,其他用户不可查看,打开也看不到任何东西,需要root来操作和管理(具体修改方法会在学习到工具的使用后给出,安装等操作初学者可以直接使用root来操作)。

    Linux权限管理

权限的概念

现实世界中权限的本质就是说:我们能对于某一种事物,是否具有操控其某方面的能力;

权限是用来限制人的行为的,而对于Linux,我们又知道Linux中将一切都视为文件,所以我们想要理解清楚Linux中权限的意义,就需要将其分出两个方面:

权限 = 角色 + 文件权限属性;

通俗易懂的来说,就是某一种类型的用户(即角色)对于一个文件来说,拥有对于该文件的某种权限属性的操作能力(文件权限属性)。

  1. 角色:用户的种类

    Linux中将用户分为三类角色:

    拥有者u(User)、所属组g(Group)、其他用户o(Other)

  2. 文件权限属性:

    是否拥有文件的权限属性 即 某种角色对于目标文件的某种权限属性拥有或没有操控这个属性的权限,而对于一个文件,该文件必须具有某种权限属性,才会说谁拥有对于这个属性的权限。

    (就像你无法在视频软件里敲代码,无法在leetcode上看视频,此时即便权限再高也没用)目标文件具有该种权限属性,是用户拥有目标文件这种属性的权限的前提。

    通常对于一个文件来说,能够拥有的权限无非三种:

    r(Read)、写w(Write)、执行x(Execute)

权限实践理解

我们使用ll来分别查看超级用户 (root)和普通用户 创建的文件属性:

绿框中首位字母为文件类型

对比观察红框中的信息,我们可以发现不同用户创建的文件属性中,都有对应的自己的用户名。那么很明显的,这肯定就和上文中提到的权限中的角色部分有关,这里不卖关子的说,上文中两个相同的用户名中:

第一个对应文件的拥有者u

第二个对应文件的所属组g

为什么文件属性中没有记录other 呢?因为没必要,除开拥有者和所属组,其他用户都是other。

那么剩下的就是文件的权限属性,毫无疑问就是在角色信息前的红框中的内容,我们仔细观察可以发现,正好有九位字符,而上文中提到过:角色有三种,文件的权限属性也是三种。

这就正好三三对应于三种角色分别对于文件的三种权限:

权限表述:以root1.txt文件为例,以角色+文件权限属性的方式解释

1.对于root1.txt文件,其拥有者u为用户root,拥有者对该文件拥有的权限为rw-(可读可写不可执行)

2.对于root1.txt文件,其所属组g为以用户root为组长,所属组对该文件拥有的权限为r--(可读不可写不可执行)

3.对于root1.txt文件,其他用户other,对该文件拥有的权限为r--(可读不可写不可执行)

也就是说,对于文件的权限属性,拥有此权限时使用对应字母rwx表示,没有则用-表示
所属组补充

情景理解 :当我们需要将自己的一些文件,开放给一部分人使用时。如果文件角色只有拥有者other ,那将导致我们开放other 的权限后,所有人都可对我们的文件进行任意操作。而为了满足只对一部分人开放权限 的场景,Linux中设置了所属组的概念。

目的就是为了更加精细化的管理权限,而这个的前提就是有更精细化的角色分类,所属组由此而来。

所属组的用户名代表的是所属组的"组长",所属组可以不止一个用户。但由于现在很少使用所属组的概念,所以不再过多解释。

权限的改变

我们初步理解权限的意义和实际表述后,下一步当然就是权限的改变:而由于root账号不受任何权限的限制,所以我们将使用普通用户账号来演示。

chmod修改角色的权限属性

chmod 角色+/-文件的属性权限 目标文件:改变角色对目标文件所拥有的权限属性(拥有权限属性即拥有权限)

角色:拥有者u所属组gothero

文件的权限属性:r/-(可读/不可读)w/-(可写/不可写)x/-(可执行/不可执行)

+代表为指定角色添加对于该文件的某种权限;

-代表删除指定角色对于该文件的某种权限;

演示:

去掉拥有者对文件的读写权限,导致读写被拒绝:

此时我们再添加回权限rw要修改其他角色的权限时,就使用对应的角色字符,我们还可以使用角色字符a,来代表所有的角色身份,

chown修改文件角色属性

chown改变文件的拥有者 或者 同时改变拥有者和所属组

  1. chown 拥有者 目标文件修改目标文件的拥有者
  2. chown 拥有者:所属组 目标文件修改目标文件的拥有者所属组

此时我们直接使用该指令来修改文件的角色时,操作会被拒绝

这是因为Linux系统默认是不允许将文件给别的用户 的(这是合理的,万一有人给你一串含有恶意代码的文件呢?),所以此时就需要管理员root权限来操作,或者使用sudo来进行。

chgrp

改变所属组

x权限(可执行)

对于一个普通文件而言,x权限将失效,因为普通文件根本就无法被执行
有可执行的权限 != 文件可执行

权限的角色匹配问题:

角色于权限的匹配是从按u、g、o的顺序从前往后的,且只匹配一次

示例:

当一个用户同时为文件的拥有者所属组 时,若此时修改拥有者的权限

此时我们对hdmo1.txt文件进行读写操作:

会发现我们的操作都被拒绝了,此时用户hdmo虽然作为拥有者urw权限被去除,但用户hdmo不也同时是所属组g吗?g拥有rw权限,可为什么操作被拒绝了呢

这就是因为Linux中文件角色与权限的匹配是按拥有者u、所属组g、其他用户o的顺序从前往后的 ,用户hdmo先匹配到了拥有者角色身份,所以其权限就是拥有者的权限。即便后续hdmo也是所属组,其权限也是拥有者权限。

root用户权限不受限制

在Linux系统中,root账户不受任何文件的任何角色权限限制,不论这个文件属于谁,对谁有何种权限,root都可以进行随意操作。

目录权限

目录文件与普通文件的权限所指不同:

  1. r代表可查看,即可使用ls等指令来查看目录里的内容,
  2. w代表可修改,可以新建或者删除目录中的文件
  3. x代表可以进入,没有x权限的角色,连进入目录都做不到

缺省权限

权限八进制表示:

我们知道文件权限通过rwx三个字母分别表示三种权限属性,而文件的权限属性只有r/-w/-x/-每种权限只有两种状态。

所以我们也就可以将权限属性状态看作1/0来代表每种权限的两种状态

我们又知道,每种角色有三个权限,那么结合上面的1/0表示方法,每种角色的权限就可以表示为一个3位的二进制数,即一位八进制数。

由此我们得出了文件权限的八进制表示方法,用一个3位的八进制表示一个文件的所有角色权限

例如:

所以上图中hdmo2.txt文件的权限信息就可以直接表示为664

文件掩码

在Linux中:

  1. 普通文件 的默认起始权限通常是666(rw-rw-rw-),即默认没有执行权限;
  2. 目录文件 的默认起始权限通常是777(rwxrwxrwx),因为目录需要执行权限x才能进入和访问。
  3. 实际创建时的权限 = 起始权限 & (~umask值)

umask可以查看或修改当前用户的文件掩码,每个用户都有属于自己的umask值 (umask的首位0是一个特殊权限位的占位符,这里不做解释)

上图中所示,root超级用户的umask就默认为022;而普通文件起始权限为666,按照上述第三点计算:

所以root用户的普通文件创建时的实际权限为644,即rw- r-- r--

其他用户计算同理。

umask存在目的:

让一个用户在创建文件时,自动将对应于umask的权限位屏蔽掉,这样文件的安全性就可以得到保障。

比如 :上文中root用户,由于root权限过高,为了预防其他用户的随意操作root的文件,rootumask就设置为了022,可以让所属组和other的用户从一开始就没有w权限 ,保证文件默认就只能root自己修改,这就是一种安全策略。

而以后我们也可以根据需要,来手动配置umask,来使不同的用户各自拥有不同的安全级别,满足不同的需求场景

删除权限

文件的删除权限和文件本身无关,和其所在的目录有关

若一个用户对本目录有可修改w的权限,那么该用户就可以对本目录下的所有文件进行删除。

想象一个场景:别人在你自己的目录下随便创建文件,还不让你访问;所以此时你能删除别人的文件是理所应当的,不然这不就相当于别人随便放东西在你家里,不让你使用还不让你丢出去吗?

粘滞位t

但在另一个场景下,上述的删除权限就会导致一些问题:

当一个目录被很多人共享,大家都可以在这面共同创作,随意添加内容,此时肯定就需要对所有人开放修改w权限;但w也同时意味着所有人都可以随意删除别人的文件了啊?万一有人进来搞破坏随意删除怎么办?

所以Linux中添加一个额外的权限位,粘滞位t

为目录加上t权限,就可以保证该目录中所有人都可添加文件的同时,让所有人只能删除自己的文件。从而满足类似上述的需求场景

操作演示

我们先在root场景下创建一个tmpdir目录来模拟一个共同工作的目录

我们正常将所有权限放开

此时由于没有粘滞位t的限制,tmpdir即便是root的文件,在这里面不论创建还是删除,所有用户都没有任何的限制;普通用户也可以随意删除:

此时我们重新创建文件,并添加粘滞位权限:

我们再使用普通用户删除文件:

此时就可以看到,对不属于本用户的文件的删除操作将被拒绝

关于此部分的讲解就到这里,感谢大家阅读本博客,我们下一篇再见~

相关推荐
乔碧萝成都分萝1 小时前
二十六、IIO子系统 + SPI子系统 + ICM20608
linux·驱动开发·嵌入式
cuijiecheng20181 小时前
Linux下modbuspp库的使用
linux·运维·服务器
专注VB编程开发20年1 小时前
vb.net,c#线程池 Dim tasks As New List(Of Task) 线程多了,后面几个可能要等一二秒后再启动
java·linux·jvm
wengqidaifeng2 小时前
数据结构与算法经典OJ题目详解(C语言):从数组到链表的进阶之路(上)
c语言·数据结构·链表
2023自学中2 小时前
Linux 内核中的 start_kernel() 函数内部:流程图与总结
linux·嵌入式硬件·uboot
爱编码的小八嘎2 小时前
第3章 Windows运行机理-3.1 内核分析(10)
c语言
祈安_2 小时前
深入理解指针(七)
c语言·后端
qq_479875432 小时前
netlink(1)
linux·服务器·网络
hzulwy3 小时前
Linux网络配置与测试
linux·运维·网络