【Linux修行路】权限管理

简介: 【Linux修行路】权限管理

4b1e80ff66105237b6f35096d0ffc797.jpg

前言

权限决定了一个人可以干什么和不可以干什么,它是一种限制,在日生活中大家也许或多或少都受到过权限的约束。

同样,在Linux上也有权限的概念,Linux并不允许我们在上面为所欲为。为了限制我们的一些行为,Linux上对用户进行了分类。

一、用户分类

1. Linux中用户分为两类:

  • 超级用户:也叫root,只有一个,可以在Linux系统下做任何事情,不受限制。
  • 普通用户:可以有多个,在Linux下做有限的事情。

超级用户和普通用之间可以进行切换,普通用户在执行某些操作时如果受限了,可以切换成超级用户,再去执行前面的操作,说不定就成功了。

2. 用户切换:

  • 命令:su [用户名]

根据用户分类,用户切换可分为:普通用户切换成超级用户、超级用户切换成普通用户、普通用户A切换成普通用户B。接下来就让我们看看它们之间的切换细节。

2.1 普通用户切换成超级用户

如上图,当前我是一个普通用户,用户名是wcy,此时我希望切换成超级用户,直接输入su指令然后点击回车,提示我们要输入密码,注意,这里应该输入root用户的密码(输密码时没有回显),输入正确的密码后就成功地切换成root用户啦!

注意:上述操作仅仅只是对用户身份进行了切换,不改变当前所处路径,如上图,身份切换前后都处在wcy用户的家目录。此时如果想再切换成wcy用户,只需要输入exit指令或者Ctrl+d

小Tips:不知道大家有没有注意到,root用户的命令行提示符#,普通用户的命令行提示符是$

 从一个普通用户切换成超级用户,除了上面的su指令外,还可以用su -指令。它们的区别是:前者仅是对身份的切换,不改变当前所处路径,而后者则是以重新登录的方式切换成超级用户,此时不仅完成了身份切换,并且当前所处的路径也变成了root用户的家目录。

🎊超级用户切换成普通用户

在root身份下,直接输入su 普通用户名指令,就可以随意切换成任意一个普通用户,无需输入任何密码。切换后路径不变。

2.2 普通用户A切换成普通用户B

从普通用户A切换的普通用户B需要输入B用户的密码。

2.3 对一条指令进行短暂提权

除了上述的三种身份切换,普通用户还可以通过sudo 要提权的指令对sudo后面跟的指令进行提权,目的是以超级用户的身份去执行该条指令。

惊!只要输入了我自己的密码,我就能短暂的变成超级用户?哈哈哈确实是这样,不过前提是系统信任你,我们用adduser新建的用户,没有颁发执行sudo,系统默认不信任,所以sudo是没用的。我们可以把普通用户添加到系统的信任白名单里,然后再去执行sudou就可以啦。

如上图,wcy用户当前就不在系统的信任白名单里,所以就无法执行sudo

二、什么叫做权限

一件事情是否允许被你做,这就叫做权限。比如:有一个叫张三的人,他是一位校长,因此他可以随意的进出校长办公室。这里他能随意进出校长办公室,是因为他叫张三,还是因为他是校长?当然因为他是校长,才可以随意进出校长办公室。因此我们可以得出下面的结论:

  • 人+身份(角色),可以具体决定一个人可以干什么
  • 权限认证的是身份

上面说到,权限是一件事情是否允许被你做,这句话说的其实不够严谨,应该再给这句话加上一个前提,事情必须具备这样做的属性,比如:你想吃掉硬盘里面存储的文件来充饥,这显然是不可能的,因为文件本身就不具备填饱我们肚子的属性。因此可以得到下面的结论:

  • 权限也和事物的“属性”有关

在Linux环境中,我们所有的操作都是针对文件进行的,因此我们要先知道文件具备哪些属性,我们可以对文件干些什么。

1. 文件属性

我们可以通过ls -l指令,查看当前目录下所有文件的属性。

如上图,其中蓝色框框起来的每一行的第一个字符表示文件类型,后面绿色框中的九个字符,三三一组,依次为:文件拥有者的权限、文件所属组的权限、其他人的权限。其中rwx都代表文件属性

1.1 文件类型

Linux系统中,文件名后缀没有直接意义,系统不通过后缀来区分文件类型,而是通过字符来区分文件类型。但是在Linux系统上运行的软件会通过后缀来区分文件类型。Linux系统中主要有以下几种文件类型:

  • -:普通文件(文本文件、源代码、可执行程序、库)。
  • d:目录文件
  • b:块设备文件(磁盘文件)
  • c:字符设备文件(键盘、显示器文件)
  • p:管道文件(用来进行通信)
  • ……
1.2 文件属性

Linux系统中主要有以下几种文件属性:

  • r:读权限,对于普通文件而言,具有读取文件内容的权限;对目录文件来说,具有浏览目录信息的权限。
  • w:写权限,对于普通文件而言,具有修改文件内容的权限;对目录文件来说,具有删除、移动目录文件的权限。
  • x:可执行权限,都普通文件而言,具有执行文件的权限;对目录文件来说,具有进入目录的权限。
  • -:表示不具备该权限。

2. Linux下的角色

前面提到,权限和身份(角色)有关,Linux中分以下三种角色:

  • 拥有者(文件的创建人)
  • 所属组(为了实现组内协同)
  • 其他人
2.1 用户与角色之间的关系

每一种用户可以同时扮演不同的角色。以现实生活为例,Linux中的用户就相当于先现实世界中的你、我、他,是一个具体的人,张三作为一个人,在学校扮演者校长这个角色,回到家里,他又扮演着父亲和儿子的角色。

上图,蓝色框起来的就表示当前文件的拥有者,绿色框起来的就表示当前文件的所属组其他人并没有直接出现在上图所展现的信息中,当一个用户操作一个文件的时候,该文件会先看该用户是不是我的拥有者,若不是,再看该用户是不是我的所属组,若都不是,那他就是其他人。

如上图,以test.txt文件为例,它的拥有者是wcy用户,具有读、写权限,不具有可执行权限;它的所属组是wcy,具有读、写权限,不具有可执行权限;它的other具有读权限,不具有写和可执行权限。

注意:每组权限都是由三个字符组成,这三个位置所表示的含义是确定的,即第一个位置只能表示是否有读权限,有用r,没有用-;第二个位置表示是否有写权限,有用w,没有用-;第三个位置表示是否有可执行权限,有用x,没有用-

总结:以后在Linux中说到权限,首先要看当前用户是谁,其次要看文件的拥有者、所属组,判断出当前用户的身份,最后看当前身份下所具有的权限。这就叫做:权限既和身份有关,又和文件属性有关

小Tips:超级用户不受任何权限约束。

3. 一次只能匹配一个角色

通过修改权限(下面会提到),给test.txt文件的拥有者只设置读权限,给所属组设置读和写权限,给其他人设置任何权限。问:此时的文件拥有者可以往文件中写入嘛

从上图的结果可以看出,写入操作被拒绝了。因为:一次只能匹配一个角色,当wcy用户执行echo 'Hello Linux!' > test.txt命令时,系统匹配到wcy是test,txt文件的拥有者,而拥有者不具备写权限,所以wcy用户无法写入。

三、权限的修改

只有文件的拥有者和超级用户才可以修改权限。

1. chmod

功能:设置文件的访问权限。
格式:chmod [参数] 权限 文件名
常用选项

  • R:递归修改文件目录的权限
1.1 用法一: 用户表示符、+ - =、权限字符
  • u:拥有者
  • g:所属组
  • o:其他人
  • a:所有用户(拥有者、所属组、其他人)
  • +:增加权限
  • -:取消权限
  • =:赋予权限

示例

  • chmod u+r test.txt:表示给拥有者添加test.txt文件的读权限。
  • chmod a-rwx test.txt:表示取消所有用户对test.txt文件的读、写、可执行权限。
  • chmod u+rw,g+r,o+r test.txt:表示给拥有者加上对test.txtx文件的读权限和写权限,给所属组和其他人加上读权限。
1.2 用法二:三位8进制数字

对于一组权限中的三个权限位,可以用1表示具备该权限,用0表示不具备该权限。例如:111表示当前角色拥有读、写、可执行权限;010表示当前角色没有读权限和可执行权限,只有写权限。这三个2进制数字又可以用一个8进制数字来表示,111对应的8进制是7010对应的8进制是2。这样一来每种角色的权限可以用一个8进制数字表示,那三个角色的权限就可以用三个8进制数字来表示。

示例

  • chmod 000 test.txt:表示移除所有用户对test.txt文件的所有权限
  • chmod 764 test.txt:表示给test.txt文件设置拥有者的读、写、可执行权限;给所属组设置读、写权限,没有可执行权限;给其他人设置读权限,没有写和可执行权限。
  • chmod 777 test.txt:表示给所有用户设置对于test.txt文件的所有权限。

2. chown

功能:修改文件的拥有者

格式:chown [参数] 用户名 文件名

把一个东西给别人,需要得到别人的同意,同理,A要把自己文件给B,需要得到B的同意。感觉好麻烦呀,那有没有一种方法,可以强制让A把他自己文件给B呢?答案是肯定的,可以把这个活交给大佬root来完成。

示例

  • chown wanghua test.txt:表示把test.txt文件的拥有者改成wanghua
  • chown wcy:wanghua test.txt:表示把test.txt文件的拥有者改成wcy,把所属组改成wanghua

3. chgrp

功能:修改文件或目录的所属组

格式:chgrp [参数] 用户组名 文件名

常用选项

  • -R:递归修改文件或目录的所属组

示例

  • chgrp wanghua test.txt:表示把test.txt文件的所属组改成wanghua

四、权限掩码

创建一个普通文件,它的权限是664,即:拥有者和所属组都具有读和写权限,而其他人只具有读权限。创建一个目录,它的权限是775,即:拥有者和所属组具备所有权限,其他人只具备读权限和可执行权限,为什么会这样呢?先给结论:

  • 默认给普通文件的起始权限是666
  • 默认给目录的起始权限是777

但是上面的结论和我们观察到的现象不同。别急,起始还有一个叫做权限掩码的东西,它还会影响到我们所创建文件的初始权限,可以通过umask指令去查看权限掩码。

其中第一个0表示后面的数字都是8进制,因此当前的权限掩码就是002

🎊权限掩码如何影响初始权限?

凡是在权限掩码中出现的权限,不会出现在最终文件权限中出现。权限掩码就像一个漏斗,对默认权限进行“过滤”,得到的才是最终权限。

  • 最终权限 = 起始权限 & (~umask)

🎊如何修改权限掩码?

  • umask 0555:表示创建的文件初始情况下对所有角色都只有读权限、没有写和可执行权限。

1. 目录的权限

  • 可读权限:是否允许用户查看目录下的文件内容
  • 可写权限:是否允许用户在当前目录下进行创建、更改、删除
  • 可执行:是否允许用户进入对应的目录

2. 粘滞位

当我们新建一个用户时,系统会自动在/home路径下创建一个用户的家目录,通过观察可以发现,所有家目录的权限都是700,这意味着,其他普通用户无法进入我的家目录,也不能查看我的家目录下的所有文件,更不能对我的家目录中的文件进行修改、删除,也不能在我的家目录中创建文件。

但有的时候,我们多个用户想进行文件数据的共享。家目录的特性,导致我们所建立的共享目录不能在任何一个用户的家目录下。那建立在哪里合适呢?答案是,通过超级用户在根目录下建立一个共享文件(根目录的拥有者和所属组都是root,普通用户作为other没有写权限,所以无法在根目录下创建文件),其他普通用户都以其他人的身份去操作这个共享文件。因此,这里还需要把共享文件针对其他人的权限设置为7,以保证普通用户可以进入到这个目录,并且查看该目录下的所有文件、在该目录下创建文件等。

🎊存在的问题

上面的做法确实实现了文件数据的共享,但也存在着问题,回想一下上面提到的目录权限,一个目录如果有写权限w,就意味着可以在该目录下创建、删除、修改文件。停!注意删除文件一个文件能否能够被删除是由它所在的目录决定的,并不由该文件本身所决定,如果文件所在的目录对当前角色有写权限,那么这个文件就可以被当前角色删除。

 回到共享目录,上面说了,把共享目录对其他人的权限都设置为7,这意味着所有其他普通用户都可以删除共享目录下的任何文件。换句话说就是:用户A在共享目录下创建了一个文件,而用户B则可以随意的删除A用户所创建的文件。这显然是不合理的。如何解决这个问题呢?可能会有朋友想着,那就删除共享目录针对other的写权限w,但是这样我们同时也无法在共享目录下创建文件,就是失去了共享的意义。

🎊粘滞位的引出

为了解决上面的问题,引出了一个新的权限位:粘滞位。粘滞位的出现,避免了前面提到的互删这种不合理的操作。可以给共享目录针对other角色加上粘滞位权限。

  • chmod o+t shared:给共享目录的other加上粘滞位权限

🎊粘滞位总结:

  • 给目录设置,一般是共享目录
  • 只允许文件的拥有者或者root能删除这个文件,其他用户一概不允许
  • t是一种特殊的x权限

小Tips:其实,系统已经帮我们在根目录下建立了一个共享目录。

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,您的支持就是我前进的动力!


相关文章
|
5月前
|
算法 Linux 数据安全/隐私保护
【linux】root大王如何制约普通用户——权限管理
【linux】root大王如何制约普通用户——权限管理
|
7月前
|
Ubuntu Linux Shell
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
【Linux操作系统】探秘Linux奥秘:用户、组、密码及权限管理的解密与实战
149 0
|
7月前
|
算法 Linux 数据安全/隐私保护
Linux权限管理:深入理解setuid、setgid、seteuid和setegid
Linux权限管理:深入理解setuid、setgid、seteuid和setegid
581 0
|
17天前
|
安全 Linux 数据安全/隐私保护
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
|
1月前
|
Linux 数据安全/隐私保护
linux权限管理
本文介绍了Linux系统中的权限管理,包括权限的概念、用户和用户组与权限的关系、文件权限位的说明以及rwx权限的具体含义。同时,详细讲解了如何使用`chmod`和`chown`命令更改文件和目录的权限,并通过多个实验演示了不同权限组合对文件和目录的实际影响。最后,总结了文件和目录权限的一些重要知识点,帮助读者更好地理解和应用Linux权限管理。
71 1
linux权限管理
|
2月前
|
Linux 数据安全/隐私保护
探索Linux操作系统下的权限管理
【8月更文挑战第66天】在数字世界中,操作系统的权限管理就如同现实世界中的钥匙和锁,保护着我们的数据安全。本文将带你深入理解Linux系统中的权限设置,通过实际代码示例,让你掌握文件和目录权限的分配与管理技巧。准备好了吗?让我们开始这场关于权限管理的探险之旅吧!
97 14
|
6月前
|
网络协议 Linux 数据安全/隐私保护
【Linux操作系统】权限管理和粘滞位
【Linux操作系统】权限管理和粘滞位
【Linux操作系统】权限管理和粘滞位
|
6月前
|
安全 Linux Shell
【Linux】权限管理
【Linux】权限管理
54 5
|
7月前
|
运维 安全 Linux
深入理解 Linux 文件系统的权限管理
【5月更文挑战第30天】 在 Linux 操作系统中,文件系统权限管理是维护系统安全与数据完整性的基石。本文旨在深入探讨 Linux 权限模型的核心概念、实现机制及其对系统安全性的影响。通过对用户身份、文件权限和访问控制列表(ACL)等关键元素的剖析,揭示权限管理在实际操作中的应用细节。文章还将讨论如何有效配置权限来优化系统性能和提升安全性,以及解决常见的权限问题的策略。
|
7月前
|
Linux PHP 数据安全/隐私保护
深入理解PHP7的返回值类型声明深入理解 Linux 文件系统的权限管理
【5月更文挑战第30天】在PHP7中,引入了返回值类型声明的特性。这一特性使得开发者可以在函数定义时指定函数应返回的值的类型。本文将详细解析返回值类型声明的用法,以及它在实际开发中的应用,帮助读者更好地理解和使用这一特性。
下一篇
DataWorks