Linux中的权限

简介: Linux中的权限



一、shell命令以及运行原理

首先,我们先来看看这个问题:我们使用命令是直接操作Linux吗?答案就是当然不是直接访问操作系统。这是为什么呢?

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

为什么我们人一般不能直接使用kernel?(直接访问linux)

操作系统过于复杂,操作成本高,一般的人不擅长直接使用,毫不夸张地说,这个世界上很少有人能够直接使用。

所有就有了各种“外壳”程序。举个例子:司机不一定懂得汽车的构造和运行原理,所有汽车的设计者就将这些东西用一个外壳包装起来,用普通人容易掌握的方向盘和挡位来和汽车的发动机等设备进行“交互”,这样普通人也可以驾驶结构和运行原理复杂的汽车了。

而Linux的外壳程序就相当于汽车中的方向盘和挡位的作用。人们可以通过外壳程序使用一些简单易懂的指令来间接操作Linux。人们将指令输给外壳,外壳将指令翻译传输给操作系统,然后将操作系统的反馈翻译传输给人。这样操作成本就大大地降低了。

再比如windows系统,我们也不是直接使用操作系统,而是微软将操作系统用图形化的界面进行了包装,使得普通人能够间接访问操作系统。而这个图形化界面程序也是一种shell外壳。

我们可以看一看我们使用的外壳程序是什么:

bash和windows的图形化界面都属于sell外壳。


二、Linux权限的概念

1、对人操作

Linux下有两种用户:超级用户(root)、普通用户。(Linux下可以存在多个用户)

root用户:只有一个,具有Linux下的最高权限,一般不受权限约束。

普通用户:可以有多个,要受权限约束。

当我们在用户之间进行身份切换时,就相当于我们在切换当前的权限。那么用户的身份怎么切换呢?使用 su - 命令就可以由普通用户切换为root用户(要输入root用户的密码)。在root下,su 用户名  命令可以直接切换用户身份,不需要输入密码。普通用户切换成另一个普通用户要输入密码。

2、对角色和文件操作

简单来说,就是什么样的人(不同的访问者)对同一个文件是否具有读、写、执行的权限。

文件类型和访问权限:

在ll命令下,红色方框里面的内容就是和权限相关的了。

第一列中的 - 和 d:表明该文件的文件类型。d目录,- 普通文件,p 管道文件,b 块设备,c 字符设备。Linux下,不以文件后缀来区分文件的类型(但是用户可以给文件添加后缀来自己区分)。

后面9个字符和下面的文件访问者就有关系了:

u—User:拥有者,即文件属于谁。

g—Group:文件和文件目录的所有者所在的组的用户,即文件属于哪个组。

o—Others:其它用户。不属于上面两个的任何一种,就是others。

每三个字符,就分别代表u,g,o对该文件的读、写、执行的权限。比如:第一个文件,前三个字符 rw- 是u对该文件的权限,接着三个字符 r--  是g对第一个文件的权限,最后三个字符 r-- 是o对该文件的权限(是r,w,x表示有权限,-表示无权限)。

如:u对该文件有读、写的权限,没有执行的权限。g对该文件只有读的权限,没有写和执行的权限。(第一个root是 u,第二个root是 g)。

注:r,w,x 三个权限的位置固定,顺序固定。

3、权限的操作

还是上面的文件,我们执行下面的操作:

通过上面的操作,我们可以自己修改文件的权限。


三、权限的八进制表示

上面所讲的修改权限的方法是通过 ugo+-的方式进行文件权限修改。而在Linux中还有一种文件权限的修改方法。

我们知道,一个权限,一共有9列字母,3个为一组,每一组的相对位置是确定的。r一定在第一个,w一定在第二个,x一定在第三个。而每一个位置要么有,要么没有。那它就是一个两态的。那么我们就可以用1表示有,0则表示没有。比如:rwx就可以表示成111(八进制为7),rw-(八进制为6)就可以表示成110。

因此,我们可以像下面这样修改权限:

上面这种方法也叫做(八进制修改权限的方法)。


四、修改文件的拥有者和所属组

1、修改文件的拥有者

chown  功能:修改文件的拥有者    语法: chown  用户名 文件名

2、修改文件的所属组

chgrp  功能:修改文件或目录的所属组     语法: chgrp  用户组名 文件名

3、sudo

在一个命令前加上sudo,在执行该命令时,要以root权限级别来执行。(如果用户想要使用它来提升权限,那么它必须要被root用户添加到信任列表里)。

注:更改文件的拥有者和所属组需要提升权限。


五、权限常见的问题

1、目录的权限

如果我们要进入一个目录,需要什么权限呢?这个答案就是 x 权限。

演示:

从上图中我们可以看到,如果去掉了 x 权限,我们就不能进入目录了。

可执行权限: 如果目录没有可执行权限, 则无法进入到目录中。

可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容。

可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。

2、umask

Linux默认:

一个目录被创建,起始权限是:777。

一个普通文件被创建,起始权限是:666。

但是看下图,为什么显示出来的文件权限不是上面默认的那样呢?

下图中,dir的权限是775,zdl.txt的权限是664。

我们发现文件或目录的起始权限和最终权限并不一样。其实这就和linux中的umask有关了。

umask:叫做权限掩码。规定:凡是在umask中出现的权限,都不应该在最终权限中出现。(一般来说,umask默认为002)。

最终权限的算法:最终权限 = 起始权限 & (~umask)

举个例子:~umask二进制为 111  111  101。目录的起始权限为777,其二进制为 111  111  111。两者按位与为 111  111  101。转换成八进制775。

注:umask是可以人为改变的。

3、粘滞位

假如有如下场景:当有多个用户在同一路径下,并共享同一个目录,共同维护多个文件。

问题:一个用户能够删除属于另一个用户的文件吗?

可以。因为从上面目录的权限中我们知道:如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件。

所以,在目录中创建和删除里面文件的权限不是文件本身的权限,而是目录的权限。

既然有多个用户在同一个目录下能够创建文件,那就说明这些用户对该目录有写的权限,而有了对该目录的写的权限后,我们自然而然就有了对该目录下的所以文件进行删除的权限。那么一个用户能够删除属于另一个用户的文件。

但是,这合理吗?这当然不合理。我辛辛苦苦写好的文件,别人只要动一动键盘,就可以在不经过我的同意下删除它,这当然是不被允许的。所以,为了解决这个问题,就有了粘滞位。

在一个公共目录中,大家各自可以进行rwx操作,但是禁止大家互删对方的文件,因此我们需要给这个公共目录设置粘滞位(权限的一种特殊情况)。

用法:在根用户下,chmod  +t  目录

去掉粘滞位:chmod  -t  目录

注:1、粘滞位只能给目录设置。2、一般是谁设置,谁才能取消(root除外)。

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

1、超级管理员删除

2、该目录的所有者删除

3、该文件的所有者删除

目录
相关文章
|
1月前
|
Linux Shell 开发工具
Shell的运行原理以及Linux当中的权限问题
Shell的运行原理以及Linux当中的权限问题
35 0
|
1月前
|
安全 Linux 数据安全/隐私保护
Linux权限详解
Linux权限详解
|
24天前
|
存储 安全 前端开发
《Linux 简易速速上手小册》第3章: 文件系统与权限(2024 最新版)
《Linux 简易速速上手小册》第3章: 文件系统与权限(2024 最新版)
41 1
|
1月前
|
Linux
【Linux】3. 基本权限与文件指令
【Linux】3. 基本权限与文件指令
25 2
|
1月前
|
Linux
linux 权限和Acl权限
linux 权限和Acl权限
17 0
|
2天前
|
Linux
如何在 Linux 中递归更改文件的权限?
【5月更文挑战第10天】
13 3
|
3天前
|
算法 Linux 数据安全/隐私保护
Linux:权限
Linux:权限
12 0
|
4天前
|
Linux 数据安全/隐私保护 Windows
【Linux】权限 !
关于Linux的权限问题,可以理解为不同级别的工作者,分别拥有不同的能力来管理文件。
19 5
|
4天前
|
Linux 开发工具 数据安全/隐私保护
深入探索Linux:ACL权限、特殊位与隐藏属性的奥秘
深入探索Linux:ACL权限、特殊位与隐藏属性的奥秘
|
4天前
|
存储 安全 Linux
从基础到高级:Linux用户与用户组权限设置详解
从基础到高级:Linux用户与用户组权限设置详解