权限及其操作与周边概念

权限及其操作

01.命令行解释器(Command interpreter)

Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。

而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?

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

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

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

对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的

操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

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

image-20221005233256450

1.理解:shell外壳程序

2.表现:我们所看到的命令行提示符,以及可以输入的指令,并且可以执行

3.感性认识:如果说你是一个闷骚且害羞的程序员,那shell就像媒婆,操作系统内核就是你们村头漂亮的

且有让你心动的MM小花。你看上了小花,但是有不好意思直接表白,那就让你你家人找媒婆帮你提

亲,所有的事情你都直接跟媒婆沟通,由媒婆转达你的意思给小花,而我们找到媒婆姓王,所以我们叫

它王婆,它对应我们常使用的bash。

这个故事里,程序员就是用户,小花就是操作系统,媒婆婆就是shell(命令行解释器),因为用户不善于和操作系统打交道,所以我们每次的命令行都会交给shell然后由shell交给操作系统。

4.shell存在的意义:如果用户使用非法指令,shell不会将他交给操作系统,会拒绝。

​ 变相保护操作系统。

​ 协助用户沟通操作系统。

当程序员强行让王婆去给他说媒,但是这件事情是不会成功的,但是要强制王婆说媒,王婆会派实习生去进行说媒,一来可以保护自己的口碑,二来给程序员也有个交代,至于结果怎么样不重要。

派发实习生这种行为:执行命令,通过派生子进程的方式执行用户的指令,而shell本身并不执行对应的命令

(一般而言!)

Windows的图形界面,本质也是一种外壳程序

Linux shell命令行外壳和 win 图形界面,兄弟关系

bash 是在centos 7下的具体外核名字

image-20221005233344724


02.基本的用户认识

用户被分为两类:

root 用户 超级管理员(不受权限的约束)礼不下庶人,刑不上大夫

普通用户 受权限约束的用户

root的密码 和 普通用户密码不要设置成一样的。

普通用户切换成root用户

su指令

作用:让普通用户变成root用户,且所在的路径不变,还是在普通用户切换前的路径

​ exit即可推出

su -指令

作用:让普通用户切换成root用户,所在路径要变成root路径,就是会重新登陆root用户

​ ctrl + d即可推出

演示如下:

image-20221005234917110

root用户切换成普通用户

su + 用户名 不需要输入密码即可切换

image-20221005235652883

我是普通人 ,我想用root身份执行一条命令,但是不想变成root,怎么办?

sudo:不切换用户,就想以root用户执行一条指令

sudo command:短暂的提权 -----让我自己输入自己的密码是为什么?

因为给受信任的用户,提供最少的执行障碍。

image-20221006151626488

出现这种情况,是因为系统不相信我这个用户,需要将当前用户添加到/etc/sudoers中(相当于一个白名单)


03.权限的概念

1.含义

**1.**权限是用来约束缚角色(身份)的(一个或者某些群体)例子:qq音乐vip约束没有vip的角色

**2.**目标对象(电影网站,音乐app等),本来就没有对应的属性。(业务) 例子:用电影网站做oj题)

权限:一件事情是否允许被谁(约束角色(身份))做(目标对象)。

2.文件权限 = 人 + 文件属性

人:应该是角色,被分为拥有者,所属组,其他人

image-20221006154144968

-rw-rw-r-- 1 zjn zjn 0 Oct  6 15:46 file.txt//第一个zjn是拥有者的位置 第二个zjn是所属组的位置,因为现在所属组只有我一个人,所以只会显示我。
问题:所属组

为什么会存在所属组的概念?

一个小故事理解所属组:张三和李四分别所在的团队在同一台Linux机器下开发一个软件,同台竞争,张三的领导想要看张三的代码,帮忙修正一下,张三现在是属于这份代码的拥有者(owner)的身份,如果没有所属组的概念,除了owner,就是other,如果把other这份权限打开,而另一个团队的李四,也能看见张三的代码,显然是不行的,所以有了所属组概念,将张三的领导拉入所属组,然后放开对所属组的权限就可以,这就是所属组存在的意义。

image-20221006155944575


文件属性:

分为三种 r(读) w(写) x(执行)

image-20221006161116595

上面显示的所有都属于文件的属性。

image-20221006164948217

文件类型:

​ Linux 和 Windows(文件的后缀)差别很大

​ Linux系统认识文件与文件后缀无关 但是gcc软件还是要认文件后缀

1.是不是意味着我们不可以使用文件后缀区分文件类型呢?

如果要使用,仅仅是给用户起到一个提示作用,后缀本质其实就是文件名的一部分。

2.如何查看文件Linxu下的文件类型???

通过ll显示的众多属性中的第一列第一个字母符区分文件类型!!

Linux文件类型:

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

  • d :目录文件

  • c :字符设备文件 (诸如键盘,显示器等文件)

  • b :块设备 (磁盘)

  • I : 链接文件 (快捷方式)

  • p :管道文件


文件权限属性

image-20221006225607073

描述一个文件的权限,要描述到角色+所拥有的权限属性。


04.操作权限

1.设为文件所属角色。

2.设置文件属性。

chmod

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

**格式:**chmod [参数] 权限 文件名

常用选项:

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

说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值的格式

① 用户表示符+/-=权限字符

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

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

=:向权限范围赋予权限代号所表示的权限

用户符号:

u:拥有者

g:拥有者同组用

o:其它用户

a:所有用户

②三位8进制数字

1.操作权限

[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
-rw-rw-r-- 1 zjn zjn    0 Oct  6 15:46 file.txt
[zjn@VM-8-17-centos ~]$ chmod u-r file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
--w-rw-r-- 1 zjn zjn    0 Oct  6 15:46 file.txt
[zjn@VM-8-17-centos ~]$ chmod u+x file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
--wxrw-r-- 1 zjn zjn    0 Oct  6 15:46 file.txt
[zjn@VM-8-17-centos ~]$ chmod u-rwx file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
----rw-r-- 1 zjn zjn    0 Oct  6 15:46 file.txt
[zjn@VM-8-17-centos ~]$ chmod u+rw file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
-rw-rw-r-- 1 zjn zjn    0 Oct  6 15:46 file.txt
[zjn@VM-8-17-centos ~]$ chmod g-rw file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
-rw----r-- 1 zjn zjn    0 Oct  6 15:46 file.txt
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
-rw-rwxr-- 1 zjn zjn    0 Oct  6 15:46 file.txt
[zjn@VM-8-17-centos ~]$ chmod o-r file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
-rw-rwx--- 1 zjn zjn    0 Oct  6 15:46 file.txt
//同时操作两个角色的权限设置,中间加逗号。
[zjn@VM-8-17-centos ~]$ chmod u-rwx,g-rwx file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
---------- 1 zjn zjn    0 Oct  6 15:46 file.txt

//a代表all所有人,可同时操作拥有者,所属组,其他人
[zjn@VM-8-17-centos ~]$ chmod a-rwx file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
---------- 1 zjn zjn    0 Oct  6 15:46 file.txt
[zjn@VM-8-17-centos ~]$ chmod a+rw file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
-rw-rw-rw- 1 zjn zjn    0 Oct  6 15:46 file.txt

用八进制方法,原理如下图。

[zjn@VM-8-17-centos ~]$ chmod 000 file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
---------- 1 zjn zjn    0 Oct  6 15:46 file.txt
-rw-rw-r-- 1 zjn zjn    0 Oct  7 00:04 test.txt
[zjn@VM-8-17-centos ~]$ chmod 777 file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
-rwxrwxrwx 1 zjn zjn    0 Oct  6 15:46 file.txt
-rw-rw-r-- 1 zjn zjn    0 Oct  7 00:04 test.txt
[zjn@VM-8-17-centos ~]$ chmod 660 file.txt
[zjn@VM-8-17-centos ~]$ ll
total 4
drwxrwxr-x 2 zjn zjn 4096 Oct  6 16:09 dir
-rw-rw---- 1 zjn zjn    0 Oct  6 15:46 file.txt
-rw-rw-r-- 1 zjn zjn    0 Oct  7 00:04 test.txt

image-20221007001654233

2.操作用户

我们把东西给别人是需要得到别人的同意的,但是两个人又不可能在Linux机器上同意,只能线下征求意见,那在Linux怎么操作呢,只有用sudo 提权,用root的身份给。

sudo chown zjn2 file.txt//改变拥有者
sudo chgrp zjn3 file.txt//改变所属组
sudo chown zjn2:zjn2 file.txt//同时改变这个文件的拥有者和所属组

我们不需要改变其他人的权限,因为拥有者和所属组是两个具体的人,而其他人是不具体的,且拥有者和所属组的改变,其他人也就对应的改变了。

3.一个问题

若拥有者没有对应的权限,而所属组还有权限,为什么我们仍然不能对所属组所拥的有的权限去进行操作?

​ 因为Linxu系统是先匹配角色,匹配角色的机制是类似于if eles if结构,匹配到我们是拥有者之后,只会使用拥有者的权限,而不是if if 的结构,拥有者的权限没了而去匹配所属组的权限。

注意:root不管属于什么身份,可以对权限进行操作,不受权限约束。

4.权限存在原因

便于我们系统进行安全管理的。


05.权限掩码

引入:为什么我们创建的目录或者普通文件,默认权限是我们所看到的样子。

1.Linux目录起始权限是从777开始的

2.Linux文件起始权限是从666开始的

3.**umask:**系统会默认配置好权限掩码,凡是在umask出现的权限,都必须在起始权限中去掉!!

​ umask能被修改!!!

​ 这个去掉是做减法吗?不是的,通过把umask修改成0111可以证明。

最终权限=起始权限 & (umask)【是对权限掩码按位取反】

[zjn@VM-8-17-centos ~]$ umask
0002

image-20221007005458749

修改权限掩码后:

image-20221007010144769

最终权限例子:

[zjn@VM-8-17-centos ~]$ umask 0032
[zjn@VM-8-17-centos ~]$ touch file.txt
[zjn@VM-8-17-centos ~]$ ll
total 0
-rw-r--r-- 1 zjn zjn 0 Oct  7 01:11 file.txt //可以看出权限编码是644

image-20221007012508771

umask默认去掉的权限是1,保留位是0

~umask默认去掉的权限是0,按位与就能保证,能够去掉权限。

如果我们要进入一个目录,需要什么权限?

必须需要x权限

为什么系统需要规定一个目录必须是从777开始的?

所有的目录被创建出来,一般都要进入x。

为什么系统需要规定一个文件必须是从666开始的?

jn zjn 4096 Oct 6 16:09 dir
-rw-rw---- 1 zjn zjn 0 Oct 6 15:46 file.txt
-rw-rw-r-- 1 zjn zjn 0 Oct 7 00:04 test.txt


[外链图片转存中...(img-2gaMtFCJ-1665110356751)]

### `2.`操作用户

我们把东西给别人是需要得到别人的同意的,但是两个人又不可能在Linux机器上同意,只能线下征求意见,那在Linux怎么操作呢,只有用sudo 提权,用root的身份给。

sudo chown zjn2 file.txt//改变拥有者
sudo chgrp zjn3 file.txt//改变所属组
sudo chown zjn2:zjn2 file.txt//同时改变这个文件的拥有者和所属组


我们不需要改变其他人的权限,因为拥有者和所属组是两个具体的人,而其他人是不具体的,且拥有者和所属组的改变,其他人也就对应的改变了。

### `3.`一个问题

若拥有者没有对应的权限,而所属组还有权限,为什么我们仍然不能对所属组所拥的有的权限去进行操作?

​        因为Linxu系统是先匹配角色,匹配角色的机制是类似于if eles if结构,匹配到我们是拥有者之后,只会使用拥有者的权限,而不是if if 的结构,拥有者的权限没了而去匹配所属组的权限。

注意:root**不管**属于什么**身份**,可以对权限进行操作,不受权限约束。

### `4.`权限存在原因

便于我们系统进行安全管理的。

****

## 05.权限掩码

引入:为什么我们创建的目录或者普通文件,默认权限是我们所看到的样子。

`1.`Linux目录起始权限是从777开始的

`2.`Linux文件起始权限是从666开始的

`3.`**umask:**系统会默认配置好权限掩码,凡是在umask出现的权限,都必须在起始权限中去掉!!

​                       umask能被修改!!!

​                       这个去掉是做减法吗?不是的,通过把umask修改成0111可以证明。

***最终权限=起始权限 & (~umask)【~是对权限掩码按位取反】***

[zjn@VM-8-17-centos ~]$ umask
0002


[外链图片转存中...(img-dErW8Jzh-1665110356751)]

修改权限掩码后:

[外链图片转存中...(img-bw1ckq5B-1665110356752)]

最终权限例子:

[zjn@VM-8-17-centos ~]$ umask 0032
[zjn@VM-8-17-centos ~]$ touch file.txt
[zjn@VM-8-17-centos ~]$ ll
total 0
-rw-r–r-- 1 zjn zjn 0 Oct 7 01:11 file.txt //可以看出权限编码是644


[外链图片转存中...(img-yWOnj76K-1665110356752)]

**umask默认去掉的权限是1,保留位是0**

**~umask默认去掉的权限是0,按位与就能保证,能够去掉权限。**

如果我们要进入一个目录,需要什么权限?

必须需要x权限

为什么系统需要规定一个目录必须是从777开始的?

所有的目录被创建出来,一般都要进入x。

为什么系统需要规定一个文件必须是从666开始的?

大多数一般的文件都不需要可执行,如果要可执行后面加上即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值