Linux下用户的分类
root: 超级用户
root基本不受权限约束,普通用户受权限约束
普通用户:我们新建的用户,adduser
从上面的图片中,我们可以看到有两种由普通用户转换为root用户的方式,分别是 : su / su - 。
命令 : su [用户名]
功能 :切换用户
在上面的图片中演示了从普通用户切换到root用户的操作。在由普通用户切换到root用户的时候,命令是su root,但是root可以省略,这也解释了上图为什么su命令就可以切换为root了。
这两种方式的区别在pwd中我们也看到了,就是:
1. su之后所在的目录是/home/zyy,代表我们只是转换了用户名,并没有转换路径。退出的命令是exit。
2. su - 之后我们的目录是/root,表明我们的用户名和所在路径都转换了。退出的命令是logout。退出都可以用Ctrl + d 来完成。
如果我们想暂时的对 一条命令进行提权 sudo command
目前我们用adduser新建的用户,没有办法执行sudo,系统默认不信任你。除非未来将普通用户,添加到系统的新人白名单里面。
Linux权限管理
文件访问者的分类:
1.文件的拥有者 : own
2.文件的拥有者所在组的成员:group
3.其他用户:other
第一个字母:
在了解了文件访问者的分类之后,我们就可以明白在Linux下的文件为什么这么显示了。
从这两张图片上,我们都能看到这是Linux下文件的显示形式。
我们可以看到,在第二张图中,第一个文件和第二个文件的第一个字母是不同的。
在第一个文件中,是d,这代表dirctory,是文件,在Linux下我们叫做目录。
在第二个文件中,是-,这代表是一个普通文件。
我整理了一些常见的文件的类型,在下图。
中间9个字母
在了解完第一个字母之后,我们来看接下来的9个字母,分别代表什么意思。
分组
这9个字母三个三个一组,可以分为3组,正好对应了之前的文件访问者的分类。
前三个 : 拥有者 own
中间三个 : 组内人员 group
最后三个 : 其他人 other
现在,我们要学习,每个字母代表什么意思。
我们首先来了解每个字母的意思:
每个位置上只能表示两种意思: 是/否。
举个例子,比如说在第一组中,代表是own的权限,即这个位置上的三个字母决定了文件的拥有者拥有什么样的权限。如果你想要own可读可写可修改,那这三个字母就是rwx。可是如果你想own可读可写不可修改,那就是rw-。
含义
通过这个例子我们明白了一个规则,那就是:
可读是r,不可读是-
可写是w,不可写是-
可修改是x,不可修改是-
固定的字母
既然是三个为一组,就代表,每个位置上有一个字母。现在固定的是,每组的第一个是r/-,第二个是w/-,第三个是x/-
文件权限值的表示方式
a)字符表示法
字符表示法,就是我上述所讲的rwx,下面的表格将详述字符表示法的内容
Linux表示 | 说明 | Linux表示 | 说明 |
r-- | 可读不可改不可执行 | -w- | 不可读可改不可执行 |
--x | 不可读不可改可执行 | rw- | 可读可改不可执行 |
r-x | 可读不可改可执行 | -wx | 不可读可改可执行 |
rwx | 可读可改可执行 | --- | 不可读不可改不可执行 |
如何修改权限
命令 :chmod [参数] 权限 文件名
功能 : 设置文件的访问权限
例子 :
我们可以看到,在上面的图片中,test.c文件对于拥有者的权限本来是rw-,在chmod u-x和chmod u-rw之后,变成了---,证明,我们的操作的内容就是让拥有者失去读写执行的权限。
再看一个例子:
在上面的图片中,我们做了g-rw,u+rwx,o-r的操作。在这里,g表示gourp -- 所属组,u表示user -- 拥有者,o表示other -- 其他人。最后我们的权限由 ---rw-r-- 变成了 rwx------。
上面的例子都是对各个分组进行的修改权限操作,如果我们想一个指令直接对全部的组做相同的权限修改呢?
我们可以使用如下命令:
a表示all -- 所有人
这里的chmod a+rwx表示,给所有的人都加上读写执行的权限。
b)八进制表示法
关于八进制表示法,可以看下面的图片解释。
在明确了这些基本的权限知识之后,我们可以来解决几个问题。
问题一 : 起始权限问题
上述是我刚刚创建的一个目录和两个普通文件。
现在有一个问题,为什么刚创建的目录和普通文件的默认权限是这样的?为什么目录是775,文件是664?
在解决这个问题之前,我们需要知道一个预备知识:
1、默认给普通文件的起始权限是666
2、默认给目录文件的起始权限是777
3、权限掩码 : 凡是在umask中出现的权限,不会出现在最终的文件权限中!
可以输入umask查看自己的权限掩码,如图,我的权限掩码是0002,用八进制表示。
根据权限掩码的作用,我们可以得出这样一个公式 : 最终权限 = 起始权限 &(~umask)
知道公式之后,我们可以进行计算,为什么我们看到的权限是这样的。
问题二: 目录权限
对于普通文件,我们能很容易理解普通文件的读写和执行权限,但是对于目录文件呢?怎么写目录,读目录,和执行目录?
下面给出目录的权限作用:
问题三 : 粘滞位
在讲粘滞位之前,我们要先知道几个情况:
1、在家目录下的文件的权限都是700,意思是 :我在我的家目录创建的文件,其他人都看不到!
2、有时候,我们多个用户想进行文件数据的共享。
基于这两点,我们就可以得到一个结论: 我们所建立的共享文件,不能放在任何一个人的家目录下!
既然这样,我们只能创建在其他路径下,根据之前的目录的权限的知识,这样的文件的起始权限是775,也就是drwxrwxr-x。并且,当一个用户拥有对目录的写权限的时候,就可以删除这个目录。
这样就会引起一个非常尴尬的问题,我创建的共享文件,因为你具有写的权限,所以你也可以删除我的文件。我的文件凭什么能被你删掉?
为了解决这个问题,我们有两个方案 :
1、去掉用户的写权限
2、使用粘滞位
我们首先来说第一个方案,根据之前目录的权限的知识,如果去掉了目录的w权限,就同时无法创建文件了,那么共享目录的共享体现在哪里呢?所以这个方案被pass了,只剩第二个方案。
再说第二个方案,首先明确我们的需求是什么?
需求 : 在共享目录下,任何人可以创建、查看文件,但是不能删除不属于自己的文件。
解决方案 : 使用粘滞位。命令 :chmod [参数]+t [文件名]
举例 : chmod o+t shared
粘滞位 : 给目录设置,一般是共享目录,大家可以自行在目录进行文件的增删查改,只允许文件的拥有者和root删除文件,其他人一概不允许!