Linux权限

目录

1.shell命令以及运行原理

1.shell的理解---感性理解

2.Linux权限

[命令:su 用户名](#命令:su [用户名])

3.Linux权限管理

[1. 文件访问者的分类(人)](#1. 文件访问者的分类(人))

[1' root、user1......对应的是具体的人](#1' root、user1……对应的是具体的人)

[2' 为什么不见other?](#2' 为什么不见other?)

[3' 什么是所属组?为什么要有所属组?](#3' 什么是所属组?为什么要有所属组?)

[2. 文件类型和访问权限(事物属性)](#2. 文件类型和访问权限(事物属性))

[4' eg. -rw-r--r--](#4' eg. -rw-r--r--)

怎么办?实操

权限检查的"顺位"逻辑

更改人

3.重谈修改文件属性:

文件权限值的表示方法


文件访问权限的相关设置方法

[1. chmod](#1. chmod)

[2. chown](#2. chown)

[3. chgrp](#3. chgrp)

4.三个问题---A目录权限

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

2.rw分别对目录意味着什么?

3.如何理解Linux多用户之间是怎么互相"隔离"的?

5.umask

5.三个问题---B缺省权限

1.为什么默认权限是我们看到的样子?

2.为什么跟这个不匹配

1.unmask目的是什么?

2.为什么要有umask?

6.三个问题---C粘滞位

有没有问题?

那如果两个文件之间要进行文件级别的协作呢?


1.shell命令以及运行原理

root@iZ5waahoxw3q2bZ \~# ls -a #后面为命令,#及前为命令行

用户名 主机名 当前用户所处的工作目录

提示符:#:root
$:普通用户

外壳程序{操作系统内核}
命令行#

我们将获取用户输入,将输入的内容交给操作系统,然后操作系统执行,执行完再翻译交给用户

我们称之为命令行解释器

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

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

主要包含:

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

• 同时,将核心的处理结果翻译给使用者。
对比windows GUI,我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。

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

1.shell的理解---感性理解

小张特别不擅长和女生打交道,通过王婆去说媒。如烟就是王婆要去说媒的对象

类比:操作系统---如烟,外壳:shell---王婆,用户----小张

小张跟王婆说我就喜欢如烟,王婆传递给如烟,如烟表示不感兴趣,王婆就回来告诉小张

相当于用户输入命令给外壳,外壳把这个信息传给操作系统,操作系统表示执行出错了,外壳返回错误信息给用户!

为什么不让用户去直接访问操作系统呢?因为用户不擅长直接与操作系统交互

用户如果输入一个非常不合理的请求,外壳可以直接拒绝,也变相保护了内核

小张之后再次请求,王婆采用实习生模式,让实习生帮忙做

王婆就是外壳程序,如果有新的命令到来,会创建子进程(实习生)去进行对应的命令

所以

为什么要存在外壳程序?
1.方便用户操作
2.外壳程序,保护内核
3.外壳程序->进程->新命令到来->创建子进程

shell vs bash

如果说shell是媒婆,那么bash就是王婆.shell是所有外壳程序的统称

linux中具体的shell叫做bash,还有其他的叫sh、xsh.....

2.Linux权限

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

权限高 权限低,受限

windows:管理员(admin)or普通用户

• 超级用户:可以在linux系统下做任何事情,不受限制

• 普通用户:在linux下做有限的事情。

• 超级用户的命令提示符是"#",普通用户的命令提示符是"$"。

接下来

vim myprocess.c

gcc myprocess.c -o myprocess

现在想把我们自己写的这个程序安装到系统中,不想以./的方式执行。

安装的本质就是把这个拷贝到/usr/bin 目录下

我们现在切换用户

命令:su 用户名

功能:切换用户。

例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的 口令。

su user1

然后用这个用户去执行

结果发现Permisson denied,权限不允许。usr/bin/ 不允许普通用户修改

然后切回超级用户,cp myprocess /usr/bin 之后myprocess就可以了

普通->超级:su/su -

su不做路径变化,su -做路径变化

权限级别高

超级->普通:su 用户名

不需要密码

本质:可以让用户进行身份变化,提高权限!

3.Linux权限管理

**sudo权限

管理员需要执行的命令

给权限 usermod -aG wheel user1
移除 gpasswd -d user1 wheel**
sudo:是用来进行指定的短暂提权的
比如:安装软件,安装到系统中,需要管理员root权限...其实只安装了一份,允许大家同时使用
人人都是root?
root不给权限就会:
whoami->普通用户->sudo ls->报错

类似于白名单的东西

在这里面改

切换为root用户,

把user1用户添加进去

切回user1用户,然后sudo ls

1. 文件访问者的分类(人)

• 文件和文件目录的所有者:u---User(中国平民 法律问题)

• 文件和文件目录的所有者所在的组的用户:g---Group(不多说)

• 其它用户:o---Others (外国人)

权限

是什么?
权限本质是:能或者不能做什么事情

为什么?
1.控制用户行为,防止错误的发生
2.理解:
权限首先限制的是角色"人"
权限要求目标必须具备对应的属性

权限=角色+目标权限属性 Linux下一切皆文件,面对的都是文件! ---读、写、执行

角色: eg
1.拥有者 root
2.所属组 user1
3.other

1' root、user1......对应的是具体的人

拥有者、所属组、other是角色 角色由对应的人来扮演
并不冲突,是互相补充的!

2' 为什么不见other?

other不需要记录
只要不是拥有者、所属组,那就是other

3' 什么是所属组?为什么要有所属组?

要精细化的权限管理,首选要有更精细化的的身份角色

2. 文件类型和访问权限(事物属性)

• 文件类型:

◦ d:文件夹

◦ -:普通文件

◦ l:软链接(类似Windows的快捷方式)

◦ b:块设备文件(例如硬盘、光驱等)

◦ p:管道文件

◦ c:字符设备文件(例如屏幕等串口设备)

◦ s:套接口文件 • 基本权限:

◦ 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息 的权限

◦ 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限

◦ 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权 限 ◦ "---"表示不具有该项权限
r读、w写、x可执行

4' eg. -rw-r--r--

第一个是文件类型
rw- 代表拥有者权限位
三个位置:rw-
代表:允许读、允许写、允许执行
第一个位置:可读就是r否则-
第二个位置:可写就是w否则-
第三个位置:可执行就是x否则-
r-- 代表所属组权限位
r-- 代表other权限位

描述一下,这个文件的权限信息是什么?

该文件的拥有者是user1可以进行读写但不能进行执行,所属者是user1可以进行读写但是不能进行可执行,other对于该文件只有读权限没有写没有可执行

怎么办?实操

文件访问权限的相关设置方法

首先让拥有者u去掉r权限,chmod u-r my.txt,从而就不具备这个权限了

还可以继续加回来

给所有去掉rwx权限

给所有加上r权限,加上w权限

重点部分:
1.能改任何人的所有权限吗? 用户只能更改自己的文件权限
2.没有权限会怎么办? 系统会拒绝让我们访问
3.实际在确定权限信息的时候,系统会先确定用户是谁?拥有者,所属组,还是other?
在Centos下,用户角色确定,只确定一次,顺序是:拥有者,所属组,other
4.root用户的权限
不受权限约束!

5.如何理解可执行?
可执行权限 != 文件可以执行
一个文件可不可以执行还是要看本身是不是可执行文件,并不是说有可执行权限x就可 执行
必须两个条件同时满足才可

下图就是想用user1给root的文件改权限,那么就会拒绝访问

此处my.txt的拥有者权限被改为root

现在cat一下

>>重定向一下

为什么现在又能读又能写了呢?

因为系统在确认当前用户对于指定文件的权限时,首先判断当前用户跟所有者比较

结果发现不是,不是就不看拥有者了,就看所属组,然后匹配成功了,于是就可以用所属组的权限了

相当于顺位

权限检查的"顺位"逻辑

当用户访问一个文件(或目录)时,系统按以下顺序判断权限:

  1. 第一顺位:用户(UID)

    如果当前用户的 UID 与文件所有者 UID 匹配,则应用所有者权限,检查结束。

  2. 第二顺位:组(GID)

    如果不匹配,则检查当前用户是否属于文件的所属组 (或文件的附加组列表)。

    如果属于,则应用组权限,检查结束。

  3. 第三顺位:其他(Other)

    如果前两者都不匹配,则应用其他用户权限

权限=角色+目标权限属性

更改人

那么怎么更改人呢?

chown拥有者 chgrp所属组

系统默认不允许我们把文件给别人---是合理的!

想给别人,必须高权限!-------sudo/su(切换为root)

sudo chown user1:user1 root.txt直接一次性把拥有者所属组都改了

3.重谈修改文件属性:

允许读、允许写、允许执行---两态的
r/- w/- x/-
1/0 1/0 1/0

所以说也可也采取八进制方案对文件进行修改

eg. -rw-rw-r--

110 110 100

6 6 4

chmod 000 hello.txt

文件权限值的表示方法


• 字符表示方法

• 8进制数值表示方法

文件访问权限的相关设置方法

1. chmod

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

格式:chmod 参数 权限 文件名

常用选项:

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

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

chmod命令权限值的格式:

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

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

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

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

◦ 用户符号: u:拥有者 g:拥有者同组用 o:其它用户 a:所有用户

◦ 实例:

▪ chmod u+w /home/abc.txt

▪ chmod o-x /home/abc.txt

▪ chmod a=x /home/abc.txt

• 三位8进制数字

◦ 实例:

▪ chmod 664 /home/abc.txt

▪ chmod 640 /home/abc.txt

2. chown

功能:修改文件的拥有者

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

实例:

• chown user1 f1

• chown -R user1 filegroup1

3. chgrp

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

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

常用选项:-R 递归修改文件或目录的所属组

实例: chgrp users /abc/f2

4.三个问题---A目录权限

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

必须具备x权限,才能进入

2.rw分别对目录意味着什么?

如果对目录没有r,就无法查看目录里面的文件
如果对目录没有w,就无法在指定目录内部新建文件

重申:超级用户不受权限约束

所以说,默认情况下,我们新建一个目录,rwx权限都要有!

3.如何理解Linux多用户之间是怎么互相"隔离"的?

任何用户,无法进入其他用户的家目录(除超级用户root)

5.umask

功能:

• 查看或修改文件掩码

• 新建文件夹默认权限=0666

• 新建目录默认权限=0777

• 但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的 时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

格式:umask 权限值

说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022,普通用户默认为0002。

5.三个问题---B缺省权限

1.为什么默认权限是我们看到的样子?

对于普通文件来说,起始权限666,默认不带可执行
对于目录文件来说,起始权限777,默认携带x

2.为什么跟这个不匹配

因为系统默认会存在一个叫做权限掩码的概念。
最终权限=起始权限 & (~umask) &(按位与)

1.unmask目的是什么?

希望凡是在umask中出现的权限,都不应该在最终权限中出现

2.为什么要有umask?

a.默认权限,由OS自主决定,无法在创建前进行修改---系统可配置,可以灵活满足需求的一种表现
b.特殊情况下,通过配置umask,可以控制文件的默认权限,让我们的代码都是可控的

6.三个问题---C粘滞位

看到一个现象:

一个文件是否能被删除,与文件本身无关,与文件所处的目录w权限有关!

有没有问题?

没有问题

那如果两个文件之间要进行文件级别的协作呢?

不能放在任何一个私人账户里

ls /tmp -d

ls -l /

tmp里面通常放一些临时文件

在非普通账号下建一个,一般放在根目录
这样全系统就能共享

共享类文件,不想让非文件的拥有者删对应的文件

**新需求:任何一个人都能在共享下新建,但是不想让非拥有者删除(**与文件所处的目录w权限有关! )
所以引入一个新的权限标志位:t,粘滞位

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

1. 超级管理员删除

2. 该目录的所有者删除

3. 该文件的所有者删除

chmod +t tmp/

此时对应的other权限位变为t eg.drwxrwxrwt

此时就删不掉了,权限位约束

让共享情况下,非拥有者不能删除

(当然了对于root来说还是可以删)

粘滞位特征:只能给需要共享的目录添加粘滞位

感谢你的阅读,期待我们下次再见!!!

相关推荐
武器大师728 小时前
从零开始在 Linux 上编译运行 lvgljs 图形界面项目
linux·运维·服务器
剑神一笑8 小时前
Linux free 命令深度解析:从内存监控到 OOM 排查的完整指南
linux·运维·服务器
東隅已逝,桑榆非晚8 小时前
新手入门指南:认识 C 语言文件操作(上)
c语言·开发语言·笔记
似水এ᭄往昔8 小时前
【Linux网络编程】--计算机网络基础
linux·网络·计算机网络
leaves falling8 小时前
深入理解Linux进程控制:从fork到exec,手写一个迷你Shell
linux·运维·服务器
社交怪人9 小时前
【A×B】信息学奥赛一本通C语言解法(题号1036)
c语言
思麟呀9 小时前
C++工业级日志项目(七)日志器核心
linux·开发语言·c++·windows
满天星83035779 小时前
【Git】原理及使用(二) (版本回退)
linux·git
Strugglingler9 小时前
【Linux Device Drivers-第九章 与硬件通讯 I/O端口,I/O内存】
linux·i/o端口·i/o内存
.YYY9 小时前
万字详解|Linux Chrony 时间服务完整学习手册
linux·运维