走进Linux——权限的相关概念与操作

“权限”这个概念在我们的生活中随处可见,它可以约束某个人是否能做某件事。在操作系统中,这个概念同样重要,本文将介绍Linux下权限的概念以及相关操作。

目录

Linux下的两种用户

Linux权限管理

一、Linux下的三类文件访问者

二、文件类型和访问权限

三、权限管理指令

四、目录的权限

五、粘滞位

 六、文件的默认权限


ed5910c34e054667b8424945d8da7a71.png

Linux下的两种用户

一、root用户:超级管理员,具有非常高的权限,可以在Linux系统下做任何事情,不受限制。

二、普通用户:只具有一般权限,需要受到权限的约束。

注:root用户与普通用户的密码尽量不要设置成一样的,防止权限界限模糊。

下面介绍一下Linux下关于用户切换的指令。

su - [用户名]:若需要从root用户切换到普通用户,则使用su - user。若要从普通用户user切换到root用户则需要使用su - root(root可以省略),此时系统会提示输入root用户的密码。

         如下,首先输入指令whoami得知此时的用户为普通用户。

1b4316fc65184591a7cfbab51e5554c8.png

         接着就可以使用指令切换为root用户。

5a61b78d3e3f41c9906bbe71d7e7b311.png

         此时切换已经完成,如果想进行用户回退,推荐使用exit指令或ctrl+d快捷键,而不要出现类似su - hyh类的指令(即不要连续使用用户切换指令),原因如下:

        首先在root用户下使用指令ps axj | grep bash查看服务进程

6deeac73358e46bfa6ca11b411314e72.png

         可以看到此时存在两个bash,此时继续使用su - 指令切换用户

8522fac69e50405495bbe6152199ba6c.png

 继续使用使用指令ps axj | grep bash查看服务进程

55f1b8f2820e4ce48abc99c10eed248b.png

        此时又多出了一个bash进程,因此我们可以得知每次切换用户,系统都会为我们创建一个bash,这是不合理的(想想看如果出现上百个bash回出现什么样的情况)。

        而使用exit或ctrl + d则可以避免该情况。在刚刚已经具有三个bash的情况下,使用exit指令进行回退,接着调用指令ps axj | grep bash

86e7eef466f14e4bb49f266edd6c2847.png

 可以看到此时又只剩下了两个bash,即回退之前那个用户所对应的bash也被终止了。

另外还有一个常用指令sudo:

sudo的作用是临时的权限提升,如果执行某条指令的权限不够,可以使用sudo+该指令的形式临时提升权限,执行该指令。使用sudo后需要输入本次登入的普通用户的密码。

如下:如果想以root用户的身份创建一个test文件,则可以在命令前面加上sudo

ddf94697a4024186bf4980820eafd90e.png

 注意:该指令无法直接使用,需要提前添加好信任关系才可以使用。

Linux权限管理

        什么是权限,权限就是特定的人是否能做特定的事情,即权限 = 人 + 事物属性。下面将分别从人和事物属性两个角度来介绍一下Linux下的权限。

一、Linux下的三类文件访问者

1、拥有者

        顾名思义,一个文件归谁所有,这个用户就是该文件的拥有者。

2、所属组

        对于这个概念,有人可能会问,既然已经有拥有者的存在了,所属组又是怎么一回事呢?下面举一个场景来描述一下它的作用:

        在某个公司的某个部门,存在两个小组,分别称为A组和B组,但是它们只有一台服务器。A组的张三在服务器上上传了代码,他不希望自己的代码被B组的李四所看到,这很简单,只要拥有者之外的人对这段代码没有读的权限不就可以了吗。但问题是张三的代码还需要给A组的同事审查,这就犯难了。此时所属组的作用就出现了,可以设置一个所属组,对组内所有成员设置读的权限即可。

43b10717ac7044738514067b5c0215ca.png

 3、其他

        拥有者和所属组之外的用户就归为其他了。

        下面使用ll指令查看文件夹下文件的属性:

11a7e1dc0ec94431ac09a2d21c3e1ee6.png

        红框的那栏就是拥有者,蓝框那栏为所属组,自然,它两之外的用户就是其它用户了。但是为什么一个文件的拥有者和所属组是一样的呢?这种情况当然允许,因为一个小组的成员可能就只有一个。

二、文件类型和访问权限

        我们使用ll查看文件属性,第一栏是由十个字符所组成的,它们分别都表示什么呢?

5ed236b986ed407ca3e70fa4caebe9b7.png

607b28ff62954440a65fa4ba8a9c9bc8.png

        权限的第1位表示文件类型,Linux下文件类型如下:

文件类型
d文件夹
-普通文件
l软链接
b块设备文件
p管道文件
c字符设备文件
s套接口文件

        注:Linux不以文件后缀作为文件类型的标识,Linux系统下一切皆文件

        后9位中每3为约束一类操作者的权限,约束的操作者从左向右依次为拥有者、所属组、其他。

        每3位约束字符从左到右分别表示读、写、执行权限。r(可读)、w(可写)、x(可执行)。

三、权限管理指令

(1)chmod:

        功能:设置文件的访问权限

        使用方法:

        ①chmod 用户表示符+/-权限字符 文件名

        用户表示符:u(拥有者)、g(所有组)、o(其他)、a(所有用户)

        权限字符:即r、w、x

        使用时首先如下图test2,对于拥有者没有可执行权限

fbc7646dd6bd4043bedf4ae88765b4b9.png

         使用指令chmod u+x test2.txt

118bfcbc5f6740d79032f621fc0b68cb.png

         此时test2.txt就已经具备了可执行权限x

        ②chmod 三位8进制数 文件名

        在谈具体的使用方法前,先来解释一下为什么可以用三位8进制数来设置权限。如上test2.txt的权限:rwxrw-r--,每三位表示对于一类用户的权限,而对于的权限只有具备/不具备两种可能,因此我们可以将其每位换成二进制表示,即111110100,每三位又可以换算成一个八进制数,即764。因此,我们就可以用764来表示权限rwxrw-r--了。

        若想再将test2.txt的权限设置为rw-rw-rw-,只需要使用指令chmod 666 test2.txt

4eb6ab0d12454f039f30f8fdd4cba28d.png

         注:1.只有文件所有者能改变改文件的权限(root用户除外)

                2.可以一次对多个文件的权限进行修改,只需要用‘,’隔开即可

(2)chown:

        功能:修改文件的拥有者

        使用方法:chown 用户名 文件名

        原本文件test2.txt属于普通用户

9803a7ec584e4ad8b495eaad652429c0.png

         现在希望把test2.txt丢给root用户,只需要输入指令chown root test2.txt

bcc64fcc79594f29824fa7e4fe7a294d.png

         但此时却出乎意料的禁止这样做。其实原因也很简单,你想把一样东西给别人,是想给就能给的吗?需要征得对方的同意。这里也是类似,文件的拥有者不是想改就能改的。一般需要root用户来使用chown操作,也可以配合sudo来使用。这里重新输入指令sudo chown root test2.txt

873465c4ff304e6a97d455565d9c3c8d.png

         此时test2.txt的拥有者就被修改成了root

(2)chgrp:

        功能:修改文件的拥有者

        使用方法:chgrp 所属组名 文件名

        使用时与chown类似,test3.txt文件的所属组原本为hyh

5c7f3781b99f48ae9e1039e5ea1cfca1.png

        使用指令sudo chgrp root test3.txt

d8e6288dc8b941b38058576461fdd437.png

        此时test3.txt的所属组就被修改成了root

        其实chown也可以同时改变文件的拥有者和所属组,对于test1文件,使用如下指令sudo hyh:hyh test1.txt

ae64ed39506743c4b384f2863a47f28f.png

        test1.txt的拥有者和所属组被同时改为了普通用户

四、目录的权限

c834686f55d74b618cbc8e0ce19778bb.png

         对于目录RootDir,我们可以进入这个目录,也可以查看目录中的文件,还可以在目录中增加或删除文件。那么这些操作分别需要什么权限呢?

        进入目录需要的权限为x,查看目录中的文件需要权限r,而在文件中增加和删除文件则需要权限w。

五、粘滞位

        在实际使用中,我们可能会遇到这样的问题:张三创建了一个目录dir,张三希望李四能够在dir中添加文件,因此dir对李四设置了写权限。但问题也来了,dir下如果也有张三的文件,李四是否能将此删除呢?这是不合理的,下面来测试一下。

        other对于目录RootDir具有写权限,使用普通用户进行操作

4aae6e4405d14ca9940cdfed7dd1de0b.png

        目录中有root创建的文件test

5f54f368b0d04ba790e5a21e4f55e61b.png

         作为普通用户直接使用rm -r test.txt

e3f16738368f43c7b3c08cd317c2247d.png

         结果test.txt真的被删除了。由此可见,即便不是文件的拥有者,只要用户对于该层文件具有写权限,就可以删除目录中的任何文件。

        如果我们希望其他用户只能在文件夹下创建文件和删除自己文件,而不能删除别人的文件,这应该这么办呢?为了解决这个问题,粘滞位蕴育而出。

        但一个目录被设置为粘滞位,则该目录下的文件只能由超级管理员root、该目录的所有者、该文件的所有者删除。

        使用方法:chmod o+t 文件夹名

991d19603e374bb0ad48ee429ec3a972.png

         接着进入目录,再试着删除root所创建的文件

c421bcb95498469793849a4cf5075fc3.png

         可以看到我们此时已经不具备了删除的权限。而增加文件不会受到影响。

3bd84274cebc41248130df9029f823fd.png

 六、文件的默认权限

        我们创建一个文件,对于普通文件,默认权限为666;对于目录文件,默认权限为777。但实际并非如此,这是怎么回事呢?我们以普通用户创建一个普通文件的权限通常为664,而非666。产生这种现象的原因是由于权限掩码,我们可以使用umask来查看权限掩码:

5c52d05eafd8434b9430928fe2f892d2.png

        可以看到这里的权限掩码为002,第一位的0不需要关注。转为9位二进制即为000000010,即把umask对于位为1的默认设置为0。如666的9位二进制位110110110,此时就变成了110110100,即我们看到的664。最终的权限可以通过将umask按位取反再和默认权限按位与获得。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树獭想吃饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值