Linux之权限

简介: Linux有关权限的内容

文章目录

写在前面

在介绍权限之前,我要首先介绍一下shell命令以及运行原理。Linux是一个操作系统这是我们都知道是事情,但是其实我们平时并没有直接使用Linux操作系统,而是通过一个Linux核心的外壳程序也就是所谓的shell来与之沟通。那么我们为什么不直接使用kernel(核心)呢?下面将通过一个比喻来表示:

假设你是一个闷骚且害羞的程序员,你的工作稳定了也到了该找对象的年纪了,你看上了你家隔壁的小花,但是你闷骚且害羞不擅长与人打交道,于是你找到你们村的媒婆,你就拜托媒婆去隔壁小花家给你说媒。所有的事情都由你先和媒婆说再由媒婆转达给小花,而你找到的媒婆姓王,也就叫她王婆。

王婆对应的就是我们常使用的bash,而媒婆对应的是shell。我们需要通过shell外壳程序与kernel打交道就是因为我们每个人都是“闷骚且害羞”的程序员(因为我们不擅长与操作系统打交道)。因此shell外壳程序将我们指令解析给Linux内核,并将Linux内核处理的结果反馈给我们。

媒婆去了小花家转达了你的心意,但是小花对王婆说虽然你是个好人但是她并不喜欢你,而且她已经和隔壁的李四在交往了。王婆一看就知道你俩之间说不成了,但是你专一啊,你又拜托王婆去给你说情,王婆心想别人都有对象了而且明确表明了不喜欢你,你还要去搞事情,这不得行,于是王婆就拒绝了你的请求。

也就是说shell外壳程序其实也是起到一种保护kernel的作用,当你写入一个指令并向操作系统发出请求,shell外壳会对该请求进行合法性分析,如果不合法就直接拒绝请求,让操作系统能全心全意的处理正确的指令和请求,从而提高效率。


权限介绍

“权限”这个词我们应该并不陌生,在外面日常生活中经常能看到权限的设定。比如当我们使用影视或者音乐app是,可以看到有免费电影和vip电影,vip电影只对vip开放而普通用户就没有观看权限。而“尊贵的vip”就什么电影都能看,这里“尊贵的vip”也就是我们Linux中的root用户。root是Linux中的超级用户,几乎不受权限的约束可以对任意文件进行任意操作。

Linux中中的两种用户:超级用户(root),普通用户

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

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

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

为什么说root用户是超级用户呢?在切换用户时也能看到root的权限之高,从root用户切换到任意普通用户时,只要输入“su +普通用户名”即可,甚至不需要输入你要切换的用户的密码,而从普通用户切换到root用户时,在输入“su root”后还要输入root的密码。

image.png

这里有一点需要注意的是:普通用户与root用户的密码一定不要一样,否则会在切换用户输入密码时出现混乱。这边建议每个用户的密码都要不一样哦亲。

当我们进入公司以后肯定是拿不到root账户的,不然岂不是让你胡作非为了,公司为了降低新人误操作以及有心之人的有心操作给公司带来的损失一定会将root账户握在手中。也就意味着我们以后进入公司只能使用普通用户,那如果我们(普通用户)在使用过程中需要root的权限,可以通过“sudo”短暂提权。

命令: sudo [操作]

功能: 不用切换用户,在短暂的时间内让你这个普通用户以root的身份执行对应的命令

image.png

可以看到这里报错了,原因是系统并不相信这个用户,需要将该用户添加到/etc/sudoers的目录中 ,这个目录相当于一个白名单,存在于这个目录中的用户系统都选择相信你,但是要知道系统选择相信你并不代表系统失去了不相信你的权力。

同时可以看到,当我使用“sudo”后,系统要我输入我的密码这是为什么呢?

是为了给相信的用户提供一个最少执行障碍的环境。

Linux权限管理

首先要知道:文件权限=人+文件属性

文件访问者的分类(人)

文件和文件目录的所有者:u—User

文件和文件目录的所有者所在的组的用户: g—Group

其它用户: o—Others (除去拥有者和所属组成员的所有人)

如何理解人?

这里说的人其实更像人的一个角色。比如说我能在某个学校上学是因为我是张三或者李四吗?并不是,而是因为你这个人拥有一个角色是这个学校的学生,所以才能在这个学校上学。就比如说当你以root身份登入系统时拥有root权限的原因是因为你是张三或者李四吗?并不是,是因为你是以root这个角色登入的Linux系统,如果王五掌握了root账号,同样可以拥有root权限。

为什么要有所属组

如果在一家公司中两个不同的团队在同一台机器中开发相同的权限,为了防止非我团队的成员对我的文件进行操作同时为了方便我团队的成员对我的文件操作,所以存在了所属组的概念。再举个简单的例子:比如你妈给你买了台电脑,这个电脑的拥有者是你,但它同时是你家的,也就是说你家所有的成员都在该所属组中。而其他人就是other,权限又不同。

文件类型和访问权限

当我们使用“ ll ”查看文件信息时,可以看到前面有一大串信息,那么这些信息代表的是什么意思呢?

image.png

image.png

在Windows下我们通常是用文件的后缀来区分文件类型,而在Linux下文件类型和文件的后缀无关,Linux区分文件类型是通过文件属性的第一个字符来区分。最前方的十个字符中的第一位字符就是代表的是文件类型:

-:是普通文件(文本文件,源代码,可执行程序)

d:目录文件

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

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

p:管道文件

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

s:套接口文件

我们在Windows系统下删除了桌面上的快捷方式并不会影响到这个程序,那为什么点击这个快捷方式能够调用起这个应用程序呢?因为这个快捷方式链接到了这个程序中。这里带大家看一下字符文件:

image.png

可以看到前面的一串字符一共有十个,其中第一个代表文件的类型,那么还剩下九个字符又代表什么意思呢?我们已经知道文件访问者有三类人:所有者,所属组,其他人,九个字符三类人,是不是很巧?其实剩下的九个字符三个为一组,代表访问文件的三类人的文件权限。

文件权限

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

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

执行(x/1): execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限

要注意的是,如果不具备某项权限则用:“—”表示不具有该项权限

以这个文件为例讲解一下相关信息:

image.png

文件名为test.txt的普通文件的拥有者是root,所属组是root,对于root用户来说具有读写权限,对于root所属组来说具有读权限,对其他人来说具有读权限。

文件权限值的表示方法

1、字符表示法

image.png

2、八进制数值表示法

image.png

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

如果要给所属组或者other增加或者删除权限应该怎么办呢?在Linux中有一个专属的更改权限的命令。

chmod

功能: 添加或者删除权限

常用选项:

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

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

chmod命令权限值的格式:

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

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

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

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

用户符号:

u:拥有者

g:拥有者同组用

o:其它用户

a:所有用户

更改权限:

image.png

当然可以一次更改多个权限:

image.png

更改所属组和other的权限和更改拥有者的方法一样。此外也可以一次更改三类人的权限:

image.png

可以看到test.txt所有人都不能对它执行读写和可执行权限,因为拥有者没有赋予任何人权限。但是真的是这样吗?其实并不是,前面提到root是超级用户,为什么说是超级用户,正是因为它不受约束:image.png

明明没有读写权限,但是我root照样对文件读写。这就是为什么我说以后我们出去工作是不可能拿到root用户的,当一个人凌驾于权限之上,没有东西可以约束的时候,那么他将是不可控的。

2.通过三位八进制更改

其实chmod更改权限不止是有这种方式,对于权限有就表示为1,没有就表示为0,一共三种权限,也就是说刚好是一个八进制。因此更改权限还可以通过三位八进制数字来更改:

image.png

image.png

chown

功能: 修改文件的拥有者

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

常用选项:

-R: 递归处理指定目录以及其子目录下的所有文件

这里有一点要注意的是:当你要给一个文件是是否要获得别人的同意呢?在我们的观念中白嫖是一件美好的事情,有人给我们好东西我们当然乐意,但是别人给你垃圾的时候你也会乐意吗?肯定不会吧,同样的道理在Linux中要将本属于我的文件给别人时需要获得别人的同意 ,这样可以防止有人将垃圾文件塞进来。当然了root用户除外,因为root用户是不受约束的。

image.png

image.png

chgrp

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

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

常用选项

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

注意:和修改文件的拥有者一样,我们也不能直接修改文件的所属组,需要征得别人的同意,而 root 不受权限约束。

image.png

image.png

umask

Linux中普通文件的默认权限为0666,目录文件的默认权限是0777。 第一位零代表该这是三位八进制数。也就是说,所有人都拥有对普通文件的读写权限,所有人都对目录文件拥有读写和可执行权限,但是当我们创建一个全新的文件时发现,操作系统上面显示的好像并不是这样的:

image.png

这是为什么呢?这就是因为创建文件时除了受默认权限的约束以外还要受到 umask (文件掩码) 的影响;假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask。

权限掩码的作用是将在其中出现的权限在起始权限中全部去掉 ,如果一个权限在 umask 中为1,那么其按位取反后再与默认权限按位与得到的结果一定为0;如果 umask 中为0,则其按位取反后与默认权限按位与后不影响默认权限的值;

格式: umask 权限值;

功能: 查看或修改文件掩码;

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

image.png

当我把权限掩码更改到0000时,再创建普通文件或目录时,权限就是默认权限:

image.png

file

格式:file [选项] 文件或目录;

功能:辨识文件类型;

常用选项

  • -c 详细显示指令执行过程,便于排错或分析程序执行的情形;
  • -z 尝试去解读压缩文件的内容;

image.png

目录权限

1.可执行权限:这个权限决定了是否能进入该目录—如果没有该权限则无法cd到这个目录中

image.png

因为目录创建出来是要往里面放文件的,所以目录必须要有x权限,因此目录的默认权限是0777.

2.可读权限:决定能否查看目录中的文件—如果没有该权限就不能使用ls等命令查看目录中的文件内容

image.png

3.写入权限:能否在目录中创建与删除文件 – 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件

image.png

权限存在的意义

我们已经知道了如何更改权限,那么为什么要有权限这个东西呢?答案是为了方便系统做安全管理 。我们已经知道如何更改权限,那么如果没有权限会有什么结果?答案似乎很明显,没有相应的权限就无法执行相关的操作。当然这并不包括root用户,已经反复提到root是凌驾于权限之上的,所有的权限都是用来约束普通用户的。

image.png

image.png


粘滞位

Linux是一个多用户的系统,有很多的人,有时候我们需要在一个公共的目录下进行临时文件的操作。

就像我们在家里时,大家都有自己的房间,但是我们仍让需要客厅这样的公共区域来进行集体活动。

image.png

除此之外root也可以创建公共目录,但是普通用户不能。 细心的人已经发现在other权限那一块出现了一个“t”权限,那么这个“t”代表的时什么意思呢?其实这个“t”就是粘滞位,那么为什么会存在粘滞位,它又有什么用呢?

我首先用root用户在根目录下创建一个属于我的临时目录,在切换到wwj和wbm两个普通用户,用这两个普通用户分别在这个临时目录中创建两个文件:

image.png

现在我是wbm,我在公共目录下看到wwj的文件,我很好奇这小子在这里面写了什么,于是我去查看,但是因为wwj的文件没有放开对其他人的权限,所以我查看失败。但是后来我越想越气,我心一横决定得不到那就毁掉,于是我准备删除wwj的文件。我可以成功吗?

image.png

wwj1文件明明没有向other放开任何权限,为什么wbm对wwj1的删除操作成功了?这里我想玩一个三体的梗:我毁灭你与你何干。要知道虽然wwj1没有向other放开任何权限,但是这个公共目录在创建时对other是放开了权限的,因此wbm对wwj1文件的删除操作成功了。但是别人看不到我的文件内容就毁掉我的文件,这很不合理,为了解决这种情况就有了粘滞位的存在。而通过前面的操作我们发现,就算文件没有放开权限,如果目录放开了权限,我还是可以删除该目录下的文件,所以粘滞位是针对目录设计的。


image.png

image.png

当我给目录加上粘滞位以后,得不到就毁掉这样的操作行不通了。

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

一、超级管理员删除

二、该目录的所有者删除

三、该文件的所有者删除

以上就是该文章的全部内容了,希望对大家有所帮助。

目录
相关文章
|
21天前
|
Linux Shell 开发工具
Shell的运行原理以及Linux当中的权限问题
Shell的运行原理以及Linux当中的权限问题
31 0
|
26天前
|
安全 Linux 数据安全/隐私保护
Linux权限详解
Linux权限详解
|
2月前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
30 0
|
2月前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
14天前
|
存储 安全 前端开发
《Linux 简易速速上手小册》第3章: 文件系统与权限(2024 最新版)
《Linux 简易速速上手小册》第3章: 文件系统与权限(2024 最新版)
39 1
|
26天前
|
Linux
【Linux】3. 基本权限与文件指令
【Linux】3. 基本权限与文件指令
25 2
|
24天前
|
Linux
linux 权限和Acl权限
linux 权限和Acl权限
16 0
|
4天前
|
存储 关系型数据库 MySQL
linux安装MySQL8.0,密码修改权限配置等常规操作详解
linux安装MySQL8.0,密码修改权限配置等常规操作详解
|
4天前
|
Web App开发 监控 Unix
Linux 常用命令汇总(七):进程管理 & 系统权限 & 用户授权
Linux 常用命令汇总(七):进程管理 & 系统权限 & 用户授权
|
10天前
|
安全 Linux Shell
【linux基础(四)】对Linux权限的理解
【linux基础(四)】对Linux权限的理解