Linux权限

人这一辈子很多时间都活在别人的记忆里,而爱人的记忆,就是我们来时的路。

                                                                                                                                   ------🧡

目录

🏆一、shell

🏆二、Linux用户

🖊1、su指令

🖊 2、su -指令

🖊3、root切换

👓①exit退出

👓 ②su

👓 ③Ctrl+d

🖊4、提权

👓①、赋予sudoer文件写的权限(需要在root账号下操作)

👓②、编辑sudoers文件,给对应的用户添加sudo权限

🏆三、文件访问者的分类

 🏆四、文件类型和访问权限

🖊1、文件类型

👓①c:字符设备文件

 👓②b:块设备

 👓③l:链接文件

 👓④p:管道文件

🖊2、访问权限

👓①基本权限

👓②三种角色的权限

🏆3、如何操作权限

 👓①chmod指令

👓②chmod a-/+ 权限 文件名

👓③没有权限

🏆4、设置文件所属角色

👓①、chown

👓 ②、chgrp

🏆5、改权限的数字方式

👓①Linux底层的权限设计 

👓 ②最终权限

👓 ③进入目录的权限

👓④file指令

🏆六、粘滞位

👓①公共目录

👓②粘滞位

🏆一、shell

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。 而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel

从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:

1、将使用者的命令翻译给核心(kernel)处理。

2、同时,将核心的处理结果翻译给使用者。

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的 操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

shell 对于Linux,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。反馈结果在通过内核运行出结果,通过shell解析给用户。

简单来说,我们程序员把命令(需求)交给shell,shell去和操作系统交互,当用户输入非法指令,shell直接拒绝掉。shell存在的意义:变相的保护操作系统。shell在执行命令时,它是通过派生子进程(bash)的方式执行用户的指令,而shell本身并不执行对应的指令。

🏆二、Linux用户

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

                                🐱超级用户:可以在Linux下做任何事情,不受限制;

                                🐱普通用户:在Linux下做有限的事情。

                                超级用户的命令提示符是“#”,普通用户的命令提示符是“$".

🖊1、su指令

su指令用于用户间的切换,使用su从普通用户切换到root用户,需要输入root密码,而从root用户切换到普通用户,不需要密码,很自由。

这里,强烈不建议root和普通用户密码一样,因为我们在切换用户会出现问题,比如:

🖊 2、su -指令

su -指令也可以切换到root用户,但是要注意和su之间的差异。

1、su路径不变,把自己变成root。

我们可以看到,当只使用su时,我们从普通用户切换到root用户下普通用户所在的路径。简单来说。

2、su -回到家目录

当我们使用su -时,就从普通用户切换到/root目录下。

🖊3、root切换

👓①exit退出

👓 ②su

👓 ③Ctrl+d

这种比较挫,不建议,因为就是退出登录,然后ssh重新登录。

🖊4、提权

在现实生活中我们有这种场景,我不是root用户,但是我想以root的权限去执行命令。这时候就要提到一个指令:sudo指令

sudo作用:只要加上sudo,与sudo最近的指令就会以root的身份执行指令。sudo指令一般是普通用户使用,root本身就是超级用户,不需要用sudo

 

 这里不知道大家注意到一个问题了没有,我想短暂提权,为什么要我输入普通用户的密码,如果仅仅输入普通用户的密码就能提权,那我普通用户不就可以恣意妄为了吗?不着急,如果你的普通用户没加入到系统的可信任名单,你提权还是会失败的。

比如这里:

 跳出这个,说明我们需要将当前用户,添加到可信任名单,也就是添加到/etc/sudoers中。

具体怎么添加呢?博主找个没被添加的用户给老铁演示一下:

👓①、赋予sudoer文件写的权限(需要在root账号下操作)

sudo chmod u+w /etc/sudoers

👓②、编辑sudoers文件,给对应的用户添加sudo权限

sudo vi /etc/sudoers

进去后应该看到这样的界面:别乱动,千万别乱动!!!

 这里不要用鼠标的滚轮上下翻动,那无效,用键盘的上下键进行翻阅,往下翻,大概在八十多行找到这样的文本:

 这是博主已经给Gyh用户添加到可信任名单了。

我们照猫画虎,按i/a键就可以编辑:

然后,按【ESC】键退出编辑。

再按:wq就可以保存退出,这时候我们就成功把用户Zed添加到可提权的可信任用户名单里面了。

🏆三、文件访问者的分类

文件和文件目录的所有者:u--user

文件和文件目录的所有者所在的组的用户:g --grouper

其他用户:o--other

 🏆四、文件类型和访问权限

🖊1、文件类型

我们常用的Windows系统通常通过文件的后缀来区分文件类型,比如图片就以.jpg .png等为后缀,文本通常以.txt为后缀,可执行程序以.exe后缀等等...但是在Linux下区分文件类型和文件后缀没有关系。

Linux以文件属性的第一个字符代表文件类型!!

Linux文件类型:(第一个字符)(常见的)

-:普通文件(源代码,库文件,可执行程序,文档压缩包);

d:目录文件

c:字符设备文件

b:块设备

l :链接文件

p:管道文件

可能光谈论文件类型比较抽象,博主就举几个例子来让老铁直观感受一下:

👓①c:字符设备文件

它通常指比如键盘,显示器等。可以看一下Linux下的字符设备文件。

 👓②b:块设备

最直观的块设备:磁盘。上篇博客提过,df - h指令就是具体查看磁盘。

 👓③l:链接文件

链接文件在Windows下最直观的就是软件的快捷方式,就是典型的链接文件。

 👓④p:管道文件

除了之前博客介绍的| 管道,管道还有很多形态。

 通过管道,我们可以实现用户间的交互。

那既然Linux不以后缀区分文件类型,是否就意味着我们就命名文件就随便写,不加后缀呢?

再举两个例子来感受一下:

 我这里成功编译了a.out文件,我们修改一下名字,看它是否还执行:

 仍旧执行,印证了后缀在Linux下就是文件名的一部分。但是毕竟这样很不舒服我们查看文件的类型。再来看一个例子:

 这里可能有的老铁要困惑了,既然Linux文件类型和后缀无关,为什么我用gcc编译器编译test.c文件可以成功,改成test.txt名字就会报错:无法识别文件类型呢?

这里有个误区需要提醒大家:

Linux系统对文件识别与后缀无关,但是不代表gcc等工具识别文件和文件后缀没有关系!!!gcc等工具可能要看文件后缀。

所以,😂,综上所述,为了我们看着舒服,方便识别文件类型,也方便各种工具使用,我们在命名时最好还要加上后缀!!

🖊2、访问权限

介绍完了文件属性中第一个字符代表文件类型,那么剩下的9个字符什么意思呢?

???

首先要说明一下‘r’、‘w’、‘x’、‘-’分别是什么含义。

👓①基本权限

r: Read对文件而言,具有读取文件内容的权限;对目录而言,具有浏览改目录信息的权限。

w: Write对文件而言,具有修改文件内容的权限;对目录而言具有删除移动目录内文件的权限

e:execute对文件而言,具有执行文件的权限;对目录而言具有进入目录的权限。

- :表示不具有该项权限。

👓②三种角色的权限

了解了基本权限,我们再把这九个字符分成三组。

 这三个位置是固定的,就是r-w-x的位置,有就有相应的字符,没有就是-.

🏆3、如何操作权限

操作权限涉及两方面:

                                1、设置文件属性    ----  chmod指令

                                2、设置文件所属角色  --chown、chgrp指令

 👓①chmod指令

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

格式:chmod 角色 +/-  权限 文件

常用选项:

                R ->递归修改目录文件的权限。

                注意:只有文件的拥有者和root才能改变文件的权限!!

🐂+:向权限范围增加权限代号所表示的权限。

🐂 -:向权限范围取消权限代号所表示的权限。

🐂=:向权限范围赋予权限代号所表示的权限。(基本不用)

🐂用户符号:

                      u:拥有者

                      g:所属组

                      o:其他用户

                      a:所有用户

示例:

 

 

 

 

 这里只显示了对单个角色的权限操作。如果我想同时操作多个角色的权限呢?

比如我想同时去掉拥有者和other的所有权限,怎么操作?

 只要在中间加上逗号就可以了。

👓②chmod a-/+ 权限 文件名

 a:表示all ,就是全体角色,对全体角色权限操作。

👓③没有权限

操作完权限,我们来演示一下没有权限会发生什么:

 但是不知道有老铁注意到没,好像有问题,上面虽然我不是拥有者,我把读和写的权限去掉了,但是我不仅是拥有者,我还是所属组啊,所属组有读和写的权限,为什么我不能读和写呢?

 这里要说到Linux匹配权限的规则:从左到右先匹配拥有者,再匹配所属组的。

 但是other有个例外,那就是root用户

 root账号非常重要!!!!!!!!!!!

🏆4、设置文件所属角色

除了文件属性权限的修改,我们还能修改拥有者和所属组。

👓①、chown

使用方式:chown 角色 文件名

比如我把test.txt 文件给了用户Zed

 但是给文件也要征得别的用户同一。这里我们用root权限,强制给。

强制给方式:root的话直接: chown 角色 文件名

                            普通用户: sudo chown 角色 文件名(先把自己加入可信任名单)

👓 ②、chgrp

chgrp 授予的所属组  文件名

 这里其实chown可以满足同时改拥有者和所属组。但是不能单独改所属组

🏆5、改权限的数字方式

如果用二进制的方式改文件,是否可行呢?

 我们将前一种通过指令改权限的方式称为 ugo + rwx方案。

而把数字方式称为八进制方案rwx相应位置给1或0,再转化为八进制就能实现给或收权限!!

👓①Linux底层的权限设计 

 那这里还有一个问题,为什么我们创建的目录或普通文件,默认权限是我们所看到的样子呢?也就是为什么目录和普通文件创建出来就是

我们还需要了解Linux的相关规定:

Linux规定:

创建目录的起始权限是:777

创建普通文件的起始权限是:666

但我们创建的也不是777 和666啊?

还要介绍一个东西:权限掩码:umask Linux规定,凡是在umask中出现的权限都必须在起始权限中去掉!

umask默认是 0002.

 

那要是我不想他的起始权限是这样子,我想让他的起始权限修改,怎么操作?

我们可以修改umask。 

 

 那么还有一个问题:去掉umask是做减法吗?

👓 ②最终权限

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

&:按位与

~:按位取反

那么是不是这样子的,我们可以验证一下:

 

👓 ③进入目录的权限

最后一个问题,我们如果要进入一个目录,需要什么权限?是r(读)吗?是x(执行)吗?

 这里也印证了为什么系统规定一个目录必须从777开始的。

👓④file指令

file指令用于辨识文件类型。

🏆六、粘滞位

👓①公共目录

Linux系统中有很多用户,有时我们为了工作交流的需要,可能需要消息共享和信息传递,所以我们需要在一个公共的目录下,进行临时文件的创建(增删查改)。

 在根目录下,tmp目录就是一个公共目录,它可以放置很多用户的临时文件。如果我想创建一个公共目录可以吗?显然是可以的,这个文件应该是由root用户创建的,如果是非root用户,需要sudo提权创建

 我们看到在公共目录下,Zed用户的文件是禁止其他用户看到的。

 那么,其他用户肯定不能查阅这个文件,那么我们可以删除这个文件吗?

 我们看到Gyh用户不可以访问这个文件,但是竟然可以删除这个文件,一个没有访问权限的人有权删除一个文件

看似不合理的删除,其实很合理,为什么呢?因为这是个公共目录,任何用户都可以对文件进行操作,所以这个删除是很合理的。因为删除文件的权限是目录的权限,和文件本身没有任何关系!!!

但是站在用户的角度,让我们很不舒服,我们想达到在公共目录中,大家可以各自进行rwx操作,但是禁止互删文件!!

所以就有了粘滞键

👓②粘滞位

#粘滞位 对文件有保护作用。

当一个目录被设置为”粘滞位“(用chmod+t),该目录下的文件只能由

1、超级管理员(root)删除

2、该目录下的所有者删除

3、该文件的所有者删除。 

粘滞位操作:chmod +t +公共目录

注意粘滞位是为了解决目录权限的问题,所以要给目录设置,而非文件。

最后奉上两幅图:

 

 

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值