目录
一.Linux用户权限
1.权限的概念
权限 = 人 + 事物属性
人:一件事情是否允许被谁“做”,比如:我只能登录我自己的游戏账号,并对其进行操作,我没有权限去登录别人的游戏账号。我没有爱奇艺VIP,爱奇艺上的部分电影我就无法观看。
事物属性:访问的对象是否有这种“属性”权限,比如:爱奇艺只能用来看视频,无法用来打游戏。
2.用户分类
Linux下有两种用户,超级用户(root)、普通用户。
- 超级用户:可以再Linux系统下做任何事情,不受约束,是Linux系统的“老天爷”,且一个Linux系统上只能有一个root用户
- 普通用户:只能再Linux下做有限的事情,可以有多个普通用户
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
3.切换用户
语法: su [用户名]
功能: 切换用户
- 从root用户切换到普通用户user,直接切换
[root@VM-16-5-centos ~]# su YX
[YX@VM-16-5-centos root]$
- 从普通用户切换到root用户,需要输入root的密码
[root@VM-16-5-centos ~]# su YX
[YX@VM-16-5-centos root]$ su //或su root,root可以省略
Password: //输入root的密码
[root@VM-16-5-centos ~]#
与超级用户切换到普通用户不同,普通用户切换到超级用户共有两种方式:
- su : 所处工作目录不发生变换,用户身份发生变化
- su - :相当于重新登录超级用户,切换后来到root用户的家目录下
su
- 所在位置不变,用户身份发生改变
su -
-
切换用户后,超级用户来到root的家目录
-
可以使用Ctrl + d退出当前用户
4.sudo提权
使用普通用户时很多事情因为权限不够,我们是无法执行的。
- 如下操作,我们对test.c文件进行减权,使其在普通用户下无法查看
我们上面讲了,Linux下root可以做任何事不受约束,这时我们可以使用sudo进行提权,使普通用户暂时有root用户的权力,可以查看该文件。
由上图可以看出,使用sudo后输入的是当前普通用户的密码,那我是不是可以在普通用户上用sudo胡作非为呢?
所以sudo需要用户自己配置,否则无法在普通用户中使用。
- sudo的存活期为5分钟,输入一次密码后,五分钟内不用再次输入。
sudo需要配置后方可使用,若是没有配置可以去搜索以下相关的文章,这个并不难。
二.Linux文件权限
1.文件属性
每当我们使用ls -l去查看目录下的文件时,给出的结果如下图:
现在我们就来看看它们每一行所代表的意义:
而我们也就是围绕着这一张图来探讨文件的权限:
2.文件类型
如上图,每一行的第一个字母为 文件类型。
Linux下不用文件后缀区分文件类型,而是用文件属性中第一列的第一个字符来区分文件类型
一般被分为以下几类:
- -:普通文件,文件,可执行,归档文件等
- d:目录
- b:块设备,block,磁盘
- c:字符设备,键盘或者显示器
- p:管道文件
- s:网络socket文件
- l:连接文件link
如下图证明,我们修改a.out的后缀,它依然可以运行,证明Linux下文件类型与后缀无关。
但这里我们要注意一点,当我们修改test.c的后缀再运行时,就会报错。
我们要清楚,Linux下确实不用后缀区分文件,但是gcc是一个软件,它需要用后缀来区分文件。
Linux中文件后缀的理解:
- 文件后缀是给用户看到,让用户明白文件是什么类型。
- 将后缀看作文件名的一部分。
3.文件角色划分
由这张图,我们清楚的看到,文件类型后,将文件的权限分为三份,对应着三种不同的访问者。
- 文件拥有者:文件和目录的所有者,对应图片后边所属用户,u——user
- 文件所属组:文件和文件目录的所有者所在组的用户,对应图片后面的所属用户组,g——group
- 文件的other:其他用户,除了拥有者和所属组之外的用户,o——other
由图片中的所属用户和所属用户组可以看出,在Linux当中文件或目录一定有拥有者和所属组。
那什么是所属组?
如下图,一个公司要开发一个项目,而这个公司只有一台Linux电脑,现在要将给A组和B组分别完成。
假如没有所属组,只有拥有者和other两种角色,当A组的一个成员完成了他的代码,他需要将代码给A组的其他人看,而没有所属组,只能放开other的权限,A组的其他人才能看到,但是other权限放开A组的其他人可以看到,那B组的人也可以看到,毕竟是在一个操作系统上,B组想要抄袭A组就很容易。
所以Linux需要使用所属组的概念,让文件的拥有者对其组内成员开发权限,使组内成员可以看到文件的内容,而其他人在拥有者不开放other权限的情况下无法查看。这就使得权限更加安全。
用户和角色的关系
用户:root和普通用户
角色:拥有者、所属组和other
用户可以扮演不同的角色,root或普通用户都可以成为拥有者、所属组和other中的一员,而角色无法成为用户。
4.基本权限
依然是这张图,我们可以看到一个文件所对应的三个角色,使用4个字母将文件不同角色的权限划分。
这四个字母对应的意义如下:
读(r):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录的权限
写(w):write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行(x):excute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
—:表示不具有该项权限
- 我们在来看图片中不同角色对应的权限:
- 拥有者:rwx,有读、写、执行权限
- 所属组:r-w,有读和执行权限,没有写权限
- other:r-w,有读和执行权限,没有写权限
三.文件访问权限的相关设置方法
1.chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
- R -> 递归修改目录文件的权限
- 说明:只有文件的拥有者和root才可以改变文件的权限
chmod命令权限值的格式:
- 用户表示符 +/-/= 权限字符
- +:向权限范围增加权限代号所表示得权限
- -:向权限范围取消权限代号所代表得权限
- =:向权限范围赋予权限代号所表示得权限
- 用户符号:
- u:拥有者
- g:拥有者同组用户
- o:其他用户
- a:所有用户
实例:
三种权限分开测试
[YX@VM-16-5-centos lesson3]$ ll
total 4
drwxrwxr-x 2 YX YX 4096 Nov 22 15:15 mydir //拥有者权限读、写、执行都有
-rw-rw-r-- 1 YX YX 0 Nov 22 15:14 myfile.c
[YX@VM-16-5-centos lesson3]$ chmod u-x mydir //将mydir目录的拥有者减去执行权限
[YX@VM-16-5-centos lesson3]$ ll
total 4
drw-rwxr-x 2 YX YX 4096 Nov 22 15:15 mydir
-rw-rw-r-- 1 YX YX 0 Nov 22 15:14 myfile.c //拥有者只有读和写权限
[YX@VM-16-5-centos lesson3]$ chmod u=x mydir //使拥有者只有执行权限
[YX@VM-16-5-centos lesson3]$ ll
total 4
d--xrwxr-x 2 YX YX 4096 Nov 22 15:15 mydir //拥有者只有执行权限
-rw-rw-r-- 1 YX YX 0 Nov 22 15:14 myfile.c
[YX@VM-16-5-centos lesson3]$ chmod u+w mydir //给拥有者增加写权限
[YX@VM-16-5-centos lesson3]$ ll
total 4
d-wxrwxr-x 2 YX YX 4096 Nov 22 15:15 mydir //拥有者有写和执行权限
-rw-rw-r-- 1 YX YX 0 Nov 22 15:14 myfile.c
- 所属组和other操作和拥有者相同,但注意必须在文件所对应的拥有者所在的用户或root用户下执行
三种权限合并测试
[YX@VM-16-5-centos lesson3]$ ll
total 12
drwxrw-rw- 2 YX YX 4096 Nov 22 15:15 mydir
-rw-rw-rw- 1 YX YX 13 Dec 9 14:40 myfile.c
-rw-rw-r-- 1 YX YX 27 Dec 9 14:46 test.txt
[YX@VM-16-5-centos lesson3]$ chmod u-x,g+x,o+x mydir //使mydir目录中拥有者无执行权限,所属组增加执行权限,other增加执行权限
[YX@VM-16-5-centos lesson3]$ ll
total 12
drw-rwxrwx 2 YX YX 4096 Nov 22 15:15 mydir
-rw-rw-rw- 1 YX YX 13 Dec 9 14:40 myfile.c
-rw-rw-r-- 1 YX YX 27 Dec 9 14:46 test.txt
- 三位8进制数字
如下表,
r权限值为:4
w权限值为:2
x权限值为:1
权限符号(读写执行) | 八进制 | 二进制 |
---|---|---|
r | 4 | 100 |
w | 2 | 010 |
x | 1 | 001 |
rw | 6 | 110 |
rx | 5 | 101 |
wx | 3 | 011 |
rwx | 7 | 111 |
— | 0 | 000 |
拥有者、所属组、other:按此顺序分别对应一个八进制数字,由三个八进制数组成三个角色的权限。
举例:
三个数字为:734
拥有者:7 = 4 + 2 + 1,拥有者有读、写权限和执行权限
所属组:3 = 0 + 2 + 1,所属者有写和执行权限,无读权限
other:4 = 4 + 0 + 0,other只有读权限
实例:
[YX@VM-16-5-centos lesson3]$ ll
total 4
d-wxrwxr-x 2 YX YX 4096 Nov 22 15:15 mydir
-rw-rw-r-- 1 YX YX 0 Nov 22 15:14 myfile.c
[YX@VM-16-5-centos lesson3]$ chmod 666 mydir //使该文件三个角色都有读和写,无执行权限
[YX@VM-16-5-centos lesson3]$ ll
total 4
drw-rw-rw- 2 YX YX 4096 Nov 22 15:15 mydir //该文件三个角色都有读和写,无执行权限
-rw-rw-r-- 1 YX YX 0 Nov 22 15:14 myfile.c
[YX@VM-16-5-centos lesson3]$ chmod 766 mydir //使该文件拥有者有读、写、执行权限,所属组有读写权限,other有读写权限
[YX@VM-16-5-centos lesson3]$ ll
total 4
drwxrw-rw- 2 YX YX 4096 Nov 22 15:15 mydir //该文件拥有者有读、写、执行权限,所属组有读写权限,other有读写权限
-rw-rw-r-- 1 YX YX 0 Nov 22 15:14 myfile.c
2.chown
功能: 修改文件的拥有者
格式: chown [参数] 用户名 文件名
实例:
[YX@VM-16-5-centos lesson3]$ ll
total 12
drwxrw-rw- 2 YX YX 4096 Nov 22 15:15 mydir
-rw-rw-rw- 1 YX YX 13 Dec 9 14:40 myfile.c
-rw-rw-r-- 1 YX YX 27 Dec 9 14:46 test.txt //test.txt拥有者原为YX
[YX@VM-16-5-centos lesson3]$ chown root test.txt //将test.txt文件拥有者改为root
chown: changing ownership of ‘test.txt’: Operation not permitted
-
由最后一行可知,修改文件拥有者这个操作不被允许
-
我们想将一个东西给别人,一定要别人同意后,我们才能给,要不给别人的是好处还好,要是口黑锅就说不过去了。
-
将文件的拥有者改为别人,需要有别人的允许——但现有条件不允许这样做,普通用户也没有这个权限,我们只能强制执行,而LInux中可以这样做的只有root
sudo chown root test.txt //使用sudo提权后操作
- 即改变拥有者又改变所属组(扩展)
//sudo chown 用户:所属组 文件名
sudo chown root:root test.txt
3.chgrp
功能: 修改文件或目录得所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录得所属组
实例:
- 改变所属组和改变拥有者相同,都需要使用root用户权限完成
将目录mydir的所属组改为root
4.file
功能: 辨识文件类型
语法: file [选项] 文件或目录…
常用选项:
- -c :详细显示指令执行过程,便于排错或分析程序执行的情形
- -z :尝试去解读压缩文件的内容
实例:
查看目录
查看文件
5.权限拒绝
如下,将myfile.c中三个角色的所有权限都关闭
[YX@VM-16-5-centos lesson3]$ chmod 000 myfile.c
[YX@VM-16-5-centos lesson3]$ ll
total 4
drwxrw-rw- 2 YX YX 4096 Nov 22 15:15 mydir
---------- 1 YX YX 0 Nov 22 15:14 myfile.c
[YX@VM-16-5-centos lesson3]$ cat myfile.c
cat: myfile.c: Permission denied
看最后一行,myfile.c的所有权限都是关闭的,无法对其进行读、写、执行操作
[root@VM-16-5-centos lesson3]# ll
total 8
drwxrw-rw- 2 YX YX 4096 Nov 22 15:15 mydir
---------- 1 YX YX 13 Dec 9 14:40 myfile.c
[root@VM-16-5-centos lesson3]# cat myfile.c
hello world!
而root用户可以无视权限限制
四.默认权限
- 如上图,为什么我们创建的普通文件(不包括可执行),为什么默认权限是从664开始的,为什么目录的默认权限是775开始的
默认权限的诞生可以分为三部分:
默认权限——你看到的
起始权限——系统设定的 (普通文件起始权限:666开始的(没有x的),目录文件的起始权限是:777(rwx))
最终权限——起始权限 & (~umask),系统为了更好的控制文件权限,系统会有默认的权限掩码(umask)的概念!
-
权限掩码的作用:在起始权限中去掉在umask中出现的权限(去掉即为取反),不能影响其他任何权限,最后得到最终权限
-
权限掩码可以通过umask指令查看:
权限掩码为002,最高位的0忽略不计。
普通文件的起始权限为 666 ,权限掩码为002,最终权限的计算公式为:起始权限 & (~umask)
最终权限的计算过程为:
普通文件起始权限:666
普通文件起始权限:110110110
权限掩码:002
权限掩码:000000010
普通文件最终权限:110110110 &(~(000000010))
110110110 & 111111101
110110100 = 664
umask
功能: 查看或修改文件掩码
格式: umask 权限值
说明: 将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
超级用户默认掩码值为:022,
普通用户默认为:002.
实例:
[YX@VM-16-5-centos lesson5]$ umask
0002
[YX@VM-16-5-centos lesson5]$ umask 007
[YX@VM-16-5-centos lesson5]$ umask
0007
- 权限掩码改变,新创建的文件和目录对应三个角色的权限也会相应跟着改变。
五.目录的权限
- 可执行权限(x):如果目录没有可执行权限,则无法cd到目录中
- 可读权限®:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容
- 可写权限(w):如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件
实例:
目录没有可执行权限x,无法cd到目录
目录没有可读权限r,无法用ls等命令查看目录中的文件内容
目录没有可写权限w,则无法在目录中创建文件,也无法在目录中删除文件
六.粘滞位
1.背景
在使用Linux的时候,未来可能会有一些共享目录,被所有的普通用户共享,用来保存普通用户产生的临时数据。
每个用户的文件都是私有的,其他人无法访问,为了让多个人之间可以交互他们的东西,产生了共享目录。
共享目录对所有Linux的普通用户共享。
如下面的home目录就是一个共享目录,用来存放普通用户的家目录
[YX@VM-16-5-centos home]$ ll
total 12
drwx------ 3 lighthouse lighthouse 4096 Nov 2 23:04 lighthouse
drwx------ 4 pangyilin pangyilin 4096 Nov 9 19:38 pangyilin
drwx------ 5 YX YX 4096 Nov 11 22:11 YX
每个用户都是私有的,其他人没有权限访问。
2.准备
共享的目录通常都是root提供的,
在根目录下创建共享目录public,开放所有权限,chmod 777 public,并添加以下文件
public目录下添加如下文件:
3.情况
在其他用户想要删除共享目录中别人的文件或目录时,是非常简单的,因为由上图知共享目录给other分配了写权限(w)。
注意:other的三个权限必须要给,
- 可执行权限:如果目录没有可执行权限,则无法cd到目录中
- 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容
- 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件
我在共享目录下更新了一个文件,让大家一起学习探讨,但有人不经过我同意就私自删除它,这明显是不合理的。
为了解决这个问题,Linux提出了粘滞位。
4.粘滞位
- 粘滞位只能给目录(共享目录)添加
采用如下方法添加:
- 这是在root下添加,在普通用户添加需使用sudo提权
我们在进行删除操作
注意:当一个目录被设置为“粘滞位”,则该目录下的文件只能由
- 超级管理员(root)删除
- 该目录的所属者删除
- 该文件的的所有者删除