【Linux】Linux权限管理

时间:2022-12-26 08:00:32

一.Linux用户权限

1.权限的概念

权限 = 人 + 事物属性

人:一件事情是否允许被谁“做”,比如:我只能登录我自己的游戏账号,并对其进行操作,我没有权限去登录别人的游戏账号。我没有爱奇艺VIP,爱奇艺上的部分电影我就无法观看。

事物属性:访问的对象是否有这种“属性”权限,比如:爱奇艺只能用来看视频,无法用来打游戏。

2.用户分类

Linux下有两种用户,超级用户(root)、普通用户。

  • 超级用户:可以再Linux系统下做任何事情,不受约束,是Linux系统的“老天爷”,且一个Linux系统上只能有一个root用户
  • 普通用户:只能再Linux下做有限的事情,可以有多个普通用户
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。

【Linux】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
【Linux】Linux权限管理

  • 所在位置不变,用户身份发生改变

su -
【Linux】Linux权限管理

  • 切换用户后,超级用户来到root的家目录

  • 可以使用Ctrl + d退出当前用户

4.sudo提权

使用普通用户时很多事情因为权限不够,我们是无法执行的。

  • 如下操作,我们对test.c文件进行减权,使其在普通用户下无法查看

【Linux】Linux权限管理
我们上面讲了,Linux下root可以做任何事不受约束,这时我们可以使用sudo进行提权,使普通用户暂时有root用户的权力,可以查看该文件。

【Linux】Linux权限管理
由上图可以看出,使用sudo后输入的是当前普通用户的密码,那我是不是可以在普通用户上用sudo胡作非为呢?
所以sudo需要用户自己配置,否则无法在普通用户中使用。

  • sudo的存活期为5分钟,输入一次密码后,五分钟内不用再次输入。

sudo需要配置后方可使用,若是没有配置可以去搜索以下相关的文章,这个并不难。

二.Linux文件权限

1.文件属性

每当我们使用ls -l去查看目录下的文件时,给出的结果如下图:
【Linux】Linux权限管理
现在我们就来看看它们每一行所代表的意义:
【Linux】Linux权限管理
而我们也就是围绕着这一张图来探讨文件的权限:

2.文件类型

如上图,每一行的第一个字母为 文件类型
Linux下不用文件后缀区分文件类型,而是用文件属性中第一列的第一个字符来区分文件类型

一般被分为以下几类:

  • -:普通文件,文件,可执行,归档文件等
  • d:目录
  • b:块设备,block,磁盘
  • c:字符设备,键盘或者显示器
  • p:管道文件
  • s:网络socket文件
  • l:连接文件link

如下图证明,我们修改a.out的后缀,它依然可以运行,证明Linux下文件类型与后缀无关。
【Linux】Linux权限管理
但这里我们要注意一点,当我们修改test.c的后缀再运行时,就会报错。
【Linux】Linux权限管理
我们要清楚,Linux下确实不用后缀区分文件,但是gcc是一个软件,它需要用后缀来区分文件

Linux中文件后缀的理解:

  1. 文件后缀是给用户看到,让用户明白文件是什么类型。
  2. 将后缀看作文件名的一部分。

3.文件角色划分

【Linux】Linux权限管理
由这张图,我们清楚的看到,文件类型后,将文件的权限分为三份,对应着三种不同的访问者。

  • 文件拥有者:文件和目录的所有者,对应图片后边所属用户,u——user
  • 文件所属组:文件和文件目录的所有者所在组的用户,对应图片后面的所属用户组,g——group
  • 文件的other:其他用户,除了拥有者和所属组之外的用户,o——other

由图片中的所属用户和所属用户组可以看出,在Linux当中文件或目录一定有拥有者所属组

那什么是所属组?

如下图,一个公司要开发一个项目,而这个公司只有一台Linux电脑,现在要将给A组和B组分别完成。
【Linux】Linux权限管理

假如没有所属组,只有拥有者和other两种角色,当A组的一个成员完成了他的代码,他需要将代码给A组的其他人看,而没有所属组,只能放开other的权限,A组的其他人才能看到,但是other权限放开A组的其他人可以看到,那B组的人也可以看到,毕竟是在一个操作系统上,B组想要抄袭A组就很容易。

所以Linux需要使用所属组的概念,让文件的拥有者对其组内成员开发权限,使组内成员可以看到文件的内容,而其他人在拥有者不开放other权限的情况下无法查看。这就使得权限更加安全。

用户和角色的关系

用户:root和普通用户
角色:拥有者、所属组和other

用户可以扮演不同的角色,root或普通用户都可以成为拥有者、所属组和other中的一员,而角色无法成为用户。

4.基本权限

【Linux】Linux权限管理
依然是这张图,我们可以看到一个文件所对应的三个角色,使用4个字母将文件不同角色的权限划分。

这四个字母对应的意义如下:

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

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

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

  • —:表示不具有该项权限

  • 我们在来看图片中不同角色对应的权限:
  1. 拥有者:rwx,有读、写、执行权限
  2. 所属组:r-w,有读和执行权限,没有写权限
  3. other:r-w,有读和执行权限,没有写权限

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

1.chmod

功能: 设置文件的访问权限

格式: chmod [参数] 权限 文件名

常用选项:

  • R -> 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值的格式:

  1. 用户表示符 +/-/= 权限字符
  • +:向权限范围增加权限代号所表示得权限
  • -:向权限范围取消权限代号所代表得权限
  • =:向权限范围赋予权限代号所表示得权限
  • 用户符号:
  • 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
  1. 三位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.charp

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

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

常用选项: -R 递归修改文件或目录得所属组

实例:

  • 改变所属组和改变拥有者相同,都需要使用root用户权限完成

【Linux】Linux权限管理
将目录mydir的所属组改为root

4.file

功能: 辨识文件类型

语法: file [选项] 文件或目录…

常用选项:

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

实例:

查看目录

【Linux】Linux权限管理

查看文件

【Linux】Linux权限管理

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用户可以无视权限限制

四.默认权限

【Linux】Linux权限管理

  • 如上图,为什么我们创建的普通文件(不包括可执行),为什么默认权限是从664开始的,为什么目录的默认权限是775开始的

默认权限的诞生可以分为三部分:

默认权限——你看到的

起始权限——系统设定的 (普通文件起始权限:666开始的(没有x的),目录文件的起始权限是:777(rwx))

最终权限——起始权限 & (~umask),系统为了更好的控制文件权限,系统会有默认的权限掩码(umask)的概念!

  • 权限掩码的作用:在起始权限中去掉在umask中出现的权限(去掉即为取反),不能影响其他任何权限,最后得到最终权限

  • 权限掩码可以通过umask指令查看:
    【Linux】Linux权限管理
    权限掩码为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到目录
【Linux】Linux权限管理

目录没有可读权限r,无法用ls等命令查看目录中的文件内容
【Linux】Linux权限管理

目录没有可写权限w,则无法在目录中创建文件,也无法在目录中删除文件
【Linux】Linux权限管理

六.粘滞位

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,并添加以下文件

【Linux】Linux权限管理

public目录下添加如下文件:
【Linux】Linux权限管理

3.情况

在其他用户想要删除共享目录中别人的文件或目录时,是非常简单的,因为由上图知共享目录给other分配了写权限(w)。
注意:other的三个权限必须要给,

  • 可执行权限:如果目录没有可执行权限,则无法cd到目录中
  • 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容
  • 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件

【Linux】Linux权限管理
我在共享目录下更新了一个文件,让大家一起学习探讨,但有人不经过我同意就私自删除它,这明显是不合理的。

为了解决这个问题,Linux提出了粘滞位。

4.粘滞位

  • 粘滞位只能给目录(共享目录)添加

采用如下方法添加:

【Linux】Linux权限管理

  • 这是在root下添加,在普通用户添加需使用sudo提权

我们在进行删除操作

【Linux】Linux权限管理
注意:当一个目录被设置为“粘滞位”,则该目录下的文件只能由

  1. 超级管理员(root)删除
  2. 该目录的所属者删除
  3. 该文件的的所有者删除