目录
一.Linux用户权限
1.权限的概念
人:一件事情是否允许被谁“做”,比如:我只能登录我自己的游戏账号,并对其进行操作,我没有权限去登录别人的游戏账号。我没有爱奇艺VIP,爱奇艺上的部分电影我就无法观看。
事物属性:访问的对象是否有这种“属性”权限,比如:爱奇艺只能用来看视频,无法用来打游戏。
2.用户分类
Linux下有两种用户,超级用户(root)、普通用户。
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的家目录
-
可以使用Ctrl + d退出当前用户
4.sudo提权
使用普通用户时很多事情因为权限不够,我们是无法执行的。
- 如下操作,我们对test.c文件进行减权,使其在普通用户下无法查看
我们上面讲了,Linux下root可以做任何事不受约束,这时我们可以使用sudo进行提权,使普通用户暂时有root用户的权力,可以查看该文件。
由上图可以看出,使用sudo后输入的是当前普通用户的密码,那我是不是可以在普通用户上用sudo胡作非为呢?
所以sudo需要用户自己配置,否则无法在普通用户中使用。
- sudo的存活期为5分钟,输入一次密码后,五分钟内不用再次输入。
sudo需要配置后方可使用,若是没有配置可以去搜索以下相关的文章,这个并不难。
二.Linux文件权限
1.文件属性
每当我们使用ls -l去查看目录下的文件时,给出的结果如下图:
现在我们就来看看它们每一行所代表的意义:
而我们也就是围绕着这一张图来探讨文件的权限:
2.文件类型
如上图,每一行的第一个字母为 文件类型。
Linux下不用文件后缀区分文件类型,而是用文件属性中第一列的第一个字符来区分文件类型
一般被分为以下几类:
如下图证明,我们修改a.out的后缀,它依然可以运行,证明Linux下文件类型与后缀无关。
但这里我们要注意一点,当我们修改test.c的后缀再运行时,就会报错。
我们要清楚,Linux下确实不用后缀区分文件,但是gcc是一个软件,它需要用后缀来区分文件。
Linux中文件后缀的理解:
- 文件后缀是给用户看到,让用户明白文件是什么类型。
- 将后缀看作文件名的一部分。
3.文件角色划分
由这张图,我们清楚的看到,文件类型后,将文件的权限分为三份,对应着三种不同的访问者。
由图片中的所属用户和所属用户组可以看出,在Linux当中文件或目录一定有拥有者和所属组。
如下图,一个公司要开发一个项目,而这个公司只有一台Linux电脑,现在要将给A组和B组分别完成。
所以Linux需要使用所属组的概念,让文件的拥有者对其组内成员开发权限,使组内成员可以看到文件的内容,而其他人在拥有者不开放other权限的情况下无法查看。这就使得权限更加安全。
用户:root和普通用户
角色:拥有者、所属组和other
4.基本权限
依然是这张图,我们可以看到一个文件所对应的三个角色,使用4个字母将文件不同角色的权限划分。
这四个字母对应的意义如下:
- 我们在来看图片中不同角色对应的权限:
- 拥有者:rwx,有读、写、执行权限
- 所属组:r-w,有读和执行权限,没有写权限
- other:r-w,有读和执行权限,没有写权限
三.文件访问权限的相关设置方法
1.chmod
功能: 设置文件的访问权限
格式: chmod [参数] 权限 文件名
常用选项:
chmod命令权限值的格式:
- 用户表示符 +/-/= 权限字符
实例:
[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:按此顺序分别对应一个八进制数字,由三个八进制数组成三个角色的权限。
举例:
实例:
[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.charp
功能: 修改文件或目录得所属组
格式: chgrp [参数] 用户组名 文件名
常用选项: -R 递归修改文件或目录得所属组
实例:
- 改变所属组和改变拥有者相同,都需要使用root用户权限完成
将目录mydir的所属组改为root
4.file
功能: 辨识文件类型
语法: file [选项] 文件或目录…
常用选项:
实例:
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开始的
默认权限的诞生可以分为三部分:
-
权限掩码的作用:在起始权限中去掉在umask中出现的权限(去掉即为取反),不能影响其他任何权限,最后得到最终权限
-
权限掩码可以通过umask指令查看:
权限掩码为002,最高位的0忽略不计。
普通文件的起始权限为 666 ,权限掩码为002,最终权限的计算公式为:起始权限 & (~umask)
最终权限的计算过程为:
普通文件起始权限:666
普通文件起始权限:110110110
权限掩码:002
权限掩码:000000010
普通文件最终权限:110110110 &(~(000000010))
110110110 & 111111101
110110100 = 664
umask
功能: 查看或修改文件掩码
格式: umask 权限值
**说明:**将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
实例:
[YX@VM-16-5-centos lesson5]$ umask
0002
[YX@VM-16-5-centos lesson5]$ umask 007
[YX@VM-16-5-centos lesson5]$ umask
0007
- 权限掩码改变,新创建的文件和目录对应三个角色的权限也会相应跟着改变。
五.目录的权限
实例:
六.粘滞位
1.背景
如下面的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的三个权限必须要给,
我在共享目录下更新了一个文件,让大家一起学习探讨,但有人不经过我同意就私自删除它,这明显是不合理的。
为了解决这个问题,Linux提出了粘滞位。
4.粘滞位
- 粘滞位只能给目录(共享目录)添加
采用如下方法添加:
- 这是在root下添加,在普通用户添加需使用sudo提权
注意:当一个目录被设置为“粘滞位”,则该目录下的文件只能由
- 超级管理员(root)删除
- 该目录的所属者删除
- 该文件的的所有者删除