Linux——文件权限属性和权限管理

文件权限属性和权限管理

本章思维导图:

注:本章思维导图对应的Xmid文件和.png文件都以传到"资源"

文章目录

  • 文件权限属性和权限管理
  • [1. sudo提权和sudoers文件](#1. sudo提权和sudoers文件)
    • [1.1 sudo提权和成为root的区别](#1.1 sudo提权和成为root的区别)
  • [2. 权限](#2. 权限)
    • [2.1 Linux群体](#2.1 Linux群体)
      • [2.1.1 为什么要有所属组](#2.1.1 为什么要有所属组)
      • [2.1.2 修改文件的所属组、拥有者](#2.1.2 修改文件的所属组、拥有者)
        • [2.1.2.1更改拥有者 chown](#2.1.2.1更改拥有者 chown)
        • [2.1.2.2 更改所属组 chgrp](#2.1.2.2 更改所属组 chgrp)
    • [2.2 文件权限属性](#2.2 文件权限属性)
      • [2.2.1 认识文件权限属性](#2.2.1 认识文件权限属性)
      • [2.2.2 修改文件权限属性 chmod](#2.2.2 修改文件权限属性 chmod)
      • [2.2.3 目录的权限](#2.2.3 目录的权限)
        • [2.2.3.1 目录/tmp和粘滞位](#2.2.3.1 目录/tmp和粘滞位)
      • [2.2.4 权限掩码umask](#2.2.4 权限掩码umask)
      • [2.2.5 文件类型](#2.2.5 文件类型)

1. sudo提权和sudoers文件

在上一篇Linux新建用户、删除用户以及用户之间的切换说到,新建用户adduser、删除用户userdel需要在root账户下 进行操作,或者说需要root的权限 。我们也说到,如果普通用户想要以root的权限进行操作,那就需要提权命令sudo

下面我们就来讲讲sudo提权命令

命令:

sudo 命令

功能:

sudo 允许允许的用户以超级用户 身份执行命令。总的来说,就是允许普通用户以root的权限执行各种操作

现在,有小伙伴就有疑惑了:

既然每个普通用户都可以进行sudo提权操作,那每个人都可以有root的权限,那还需要root这个超级管理员干嘛呢?

我们可以现在就来试一下:

可以看到,尽管通用户Test_1使用了提权命令,但是并没有得到想要的结果,这是为什么呢?

我们发现,系统提示我们用户Test_1并不处于sudoers文件
那么sudoers文件又是什么呢?

  • sudoers文件是属于root账户的一个Linux配置文件

    我们可以用命令ll打开看一下:

    可以看到里面只有root账户

  • 可以通俗地将sudoers文件比作是一个白名单只有位于白名单里面的账户才可以使用sudo命令提权,以root的权限执行操作

  • 而要将用户写入sudoers文件,需要root账户执行操作

到了现在,应该就可以解决之前的那个疑惑了------不是所有的普通用户可以使用sudo提权,只有得到root账户的信任,将这个用户添加到sudoers文件中,这个普通用户才可以进行sudo提权。因此我们也就不需要担心普通用户会在系统中捣乱了。

1.1 sudo提权和成为root的区别

可不要天真的以为sudo提权和成为,root用root账户操作都是以root的身份执行命令就没有什么区别。

这二者其实有着本质的区别

  • 给你root密码,让你成为root------直接让你成员超级管理员
  • 将你添加到sudoers------ 相信你,给你root权限 ,但是这个root权限可以被回收

2. 权限

然我们先举几个生活中的例子来对权限有一个更加清楚的认识:

  • 在腾讯视频、爱奇艺等软件看VIP电影,那我们就需要VIP的权限,需成为VIP会员,否则我们就只是普通用户只能看免费电影。
  • 尽管我们有爱奇艺视频的VIP会员,但是无论如何,我们都不可能在爱奇艺视频里面刷C++的编程题

因此,我们可以得出以下两个结论:

  1. 权限一定是用来限制人的
  2. 对应的操作对象一定要有对应的满足人的需求的属性------就像你不能在腾讯视频里面刷C语言,因为腾讯视频并没有刷题这一属性。

而将这两个结论和Linux系统的文件权限联系在一起,同样也可以推出两个结论:

  1. Linux群体(也就是"被限制的人")更多的是一种身份,在Linux中有:拥有者u、所属组g、other这三种身份o,具体的人一定会在未来承担某个文件的某个身份。
  2. Linux的操作对象也就是Linux系统中的文件,其属性一般叫做文件权限属性,有三种:可读r,可写w,可执行x

下面,我们就对Linux群体文件权限属性展开具体的讨论:

2.1 Linux群体

前面说过,Linux群体更多的是一种身份------拥有者u、所属组g、othero这三种身份

  • 拥有者user一般就是该文件的创建者
  • 所属组group------可以在Linux系统中创建一个组群,并将特定的用户拉入,这样这些组里面的用户就构成了一个所属组。他们享有这个所属组被赋予的权限
  • other------不属于拥有者和所属组的用户统称为other

2.1.1 为什么要有所属组

有些小伙伴又会有疑惑了:

拥有者和other就可以确定一个文件的所属关系了,为什么还要一个所属组group呢?

我们可以来举一个生活中的例子:

两个开发组A、B在竞争同一个项目,一天项目的领导想要看开发组A成员张三写的代码,但是代码是张三所写,张三是这个文件的拥有者,而领导是other ,如果想要让领导(other)看到张三所拥有的文件 ,那么张三就需要将这个文件的权限开放给other ,但这就导致了一个问题------同为other的项目组B也可以看到项目组A的代码 ,这显然不是我们想要的,所以,就需要Linux有所属组这一个概念,张三可以通过过创建一个所属组,将领导拉到组里,同时将拥有者的权限开放给所属组,这样就可以了

所以,Linux所属组的存在,方便了Linux系统文件权限的管理,是很重要的。

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

注意:

只能在root的权限下更改一个文件的拥有者、所属组、other,无论你是不是这个文件的拥有者。

2.1.2.1更改拥有者 chown

命令:

chown new_username filename

  • new_username就是新的拥有者的用户名,filename就是被更改的文件名

例如:

2.1.2.2 更改所属组 chgrp

命令:

ch chgrp new_groupname filename

  • new_groupname就是新的拥有者的用户名,filename就是被更改的文件名

例如:


更改拥有者、所属组的同时也就在更改other ,因此并没有更改other的命令

2.2 文件权限属性

例如,我们用命令ll来查看一个文件的具体属性:

现在,就以文件code为例,讲一下ll所展示的这一串信息都表示了什么:

  • 文件的拥有者、所属组前面已经介绍完毕,这里便不再赘述
  • 接下来,我们来深入探讨一下文件权限属性和文件类型

2.2.1 认识文件权限属性

例如上面的 code1文件,代表这个文件的权限属性的就是下面的九个字符:

那么具体的,这九个字符又都表示什么含义呢?

Linux规定:

  • 将九个字符分成三组,每组三个字符 。例如上面的就是rw-r--r--这三组
  • 每组字符的每个位置代表着固定的含义:第一个位置表示可写r,第二个位置表示可读w,第三个位置表示可执行x
  • 第一组表示拥有者的权限,第二组表示所属组权限,第三组表示other权限

例如,对于上面的权限属性,我们可以做出如下解释:

Linux的文件权限值的表示方法:

字符表示法:

Linux表示 意义 Linux表示 意义
- - - 无任何权限 r - - 只读
- - x 仅可执行 r - x 可读可执行
- w - 只写 r w - 可读可写
- w x 可写可执行 r w x 可读可写可执行

八进制表示法:

权限符号 二进制 八进制
- - - 0 0 0 0
- - x 0 0 1 1
- w - 0 1 0 2
- w x 0 1 1 3
r - - 1 0 0 4
r - x 1 0 1 5
r w - 1 1 0 6
r w x 1 1 1 7

那么可读、可写、可执行都表示什么呢?我们一起来看看:

可以得出结论:

  • 可读r:即可以打开文件,查看文件内容 ,执行catnano等操作

  • 可写w:即可向文件写入内容 ,执行echonano等操作

  • 可执行x:对一个可执行文件进行执行操作

    • 注:可以执行一个文件的条件为
    1. 拥有该文件的可执行权限x
    2. 该文件必须要有可执行的功能(必须是一个可执行的文件 )------这也就是我们前面所说的"对应的操作对象一定要有对应的满足人的需求的属性"

再来看一个例子:

要解决这个问题,就需要知道Linux的一个特性:

  • 要判断一个用户的权限,首先要判断这个用户是哪个身份,到底是拥有者还是所属组还是other。
  • 而匹配身份的顺序为 ------ 拥有者 → 所属组 → other
  • 只要匹配成功,就不会再继续匹配

因此,上面的例子中,用户匹配到拥有者就停止匹配了,而code文件的拥有者没有任何权限,所以上面的读写操作自然就不能成功了。

最后再来看一个例子:

可见,尽管root是code的other,但是仍可以对code文件执行各项操作而不受限制。

我们可以说:

权限在root账户下,形同虚设。权限只限制普通用户。这也在另一方面说明了root的强大和重要性

2.2.2 修改文件权限属性 chmod

  • 既然文件的权限值有字符表示法和八进制表示法,那么修改权限的属性也有这两种方法。

  • 只有root账户 或者文件的拥有者才可以修改文件的权限属性

字符表示法修改文件权限属性:

命令:

chmod u/g/o/a +/- rwx filename

其中:

  • u------拥有者user
  • g------所属组group
  • o------other
  • a------所有人
  • +/-------添加或删除权限
  • rwx------需要添加的权限

例如:

八进制表示法修改文件权限属性:

命令:

chmod num1num2num3 filename

  • num1num2num33个八进制数,分别代表拥有者、所属组、other的权限

例如:

2.2.3 目录的权限

我们前面提到,在Linux系统中,一切皆文件。所以我们可以说:一个目录也是一个文件

我们先来看一个目录的详细属性:

可以发现,目录文件和普通文件一样,也具有rwx可读可写可执行权限,也有拥有者、所属组和other身份。

因此,修改目录的权限属性也和修改文件的操作一样,这里不再过多赘述。

那么,目录文件的rwx文件又分别代表着什么呢?

可执行x

可以进行总结:

  • 目录的可执行x权限限制的是普通用户进入目录和在该目录底下执行命令的能力
  • 如果没有x权限,用户就不能cd进入目录,就算已经在目录里面,也不能执行ll等操作
  • 权限在root账户面前形同虚设。

可读r

可以进行总结:

  • 目录的可读r权限限制的是用户在该目录底下查看目录内容的能力
  • 如果没有可读r权限,用户就不能用ls命令查看文件内容

有小伙伴可能会对上面的例子有疑惑:

我连这个目录里的内容都不能查看了,为什么我还可以cat查看目录里code文件的内容呢?

我们必须清楚,限制文件的读写权限是文件的权限属性 ,限制目录的读写权限是目录的权限属性 ,这二者是互不影响的,因此,只要对这个文件有读权限,那么不管对这个目录有没有读权限,我们都可以查看该文件的内容。

可写w

可以进行总结:

  • 目录的可写权限w限制的是用户在该目录底下新建和删除文件的能力
  • 如果用户没有写权限w,那么用户就不能在该目录底下执行touchmkdirrm等命令
2.2.3.1 目录/tmp和粘滞位

我们先来看一下普通用户的家目录属性:

我们发现,只有家目录的拥有者,即这个账户本身拥有对这个目录的所有权限,而其他任何人对这个目录都没有任何权限

那么如果要在Linux中实现多个用户之间的数据传递和资源共享,该怎么做呢?

为了满足这一需求,Linux有一个专门的目录/tmp提供给所有用户,进行数据传递和共享。

我们可以看到:

  • /tmp目录为所有用户都开放了可读、可写、可执行权限
  • 所有用户都可以进入该目录,查看该目录的内容,同时在该目录底下新建文件

到了这里,有的小伙伴又有疑惑了:

既然/tmp目录为所有用户都开放了写权限,那我岂不是可以在这个目录里随便删除文件,搞破坏?

我们可以尝试一下:、

在这里插入图片描述

可以看到,Linux系统的设计者考虑到了我们的问题,通过实验可以发现:

在/tmp目录中,如果涉及到删除、剪切操作,只能对自己所拥有的文件生效,如果拥有者不是自己,那么就没有权限执行操作。

那么,Linux系统又是通过什么来实现这一功能的呢?

靠的就是我们所说的粘滞位

命令:

chmod +/-t d_name

  • 粘滞位就是目录可执行权限x的升级版
  • 粘滞位一般体现在other权限的可执行权限x
  • 如果该目录本来拥有可执行x权限 ,那被赋予粘滞位后**,x就会变成t;如果 原来没有可执行x权限**,那被赋予粘滞位后,x就会变成T
  • 如果对一个目录的某个身份设置了粘滞位t,那么该目录下的文件只能由:
    • 超级管理员删除
    • 该目录的所有者删除
    • 该文件的所有者删除

2.2.4 权限掩码umask

有必要清楚,在Linux系统中,文件的初始权限为666,目录的初始权限为777

但是,为什么我们新创建的目录和文件,查看时,他们的权限一般都不是初始值呢?

这是因为Linux系统有权限掩码这一概念。我们可以用下面的命令查看当前的权限掩码:

umask

  • 规定:
  • 超级用户默认掩码值为0022,普通用户默认为0002。

我们只看后三位数字002这是三个八进制数,也就是用八进制表示法表示的权限值

实际创建出来的文件权限就是由umask权限掩码和权限初始值共同决定的:

  • 文字描述:权限 = 从初始权限中去掉在umask中出现的权限
  • 数学描述:权限 = 初始权限 & ~umaks

同时,我们也可以用命令来修改权限掩码:

umask 0num1num2num3

  • num1, num2, num3是三个八进制数

2.2.5 文件类型

在Windows系统中,我们通常用一个文件的后缀来区分文件的类型。但是在Linux系统中,我们靠命令ll展示的文件属性的第一个字符来区分文件的类型。

不同的字符代表着不同的类型,下面给出常见的Linux文件类型:

  • -:普通文件、文本、源代码、图片、视频、库、可执行程序等
  • d:目录文件
  • b:block,块设备文件
  • c:char,字符设备文件
  • l:链接文件
  • p:普通文件
  • s:socket文件

我们也可以用命令来查看文件到具体类型:

file filename

虽然在Linux中,文件后缀通常不像在Windows中那样具有特定的意义,但是文件后缀在 Linux 中仍然具有一些用途:

  1. 提示文件类型 :文件后缀可以为用户提供一些关于文件类型的提示。例如,一个以 .jpg 结尾的文件通常是 JPEG 图像文件,尽管这并不是强制性的。用户和应用程序可以使用这些提示来决定如何处理文件。
  2. 与应用程序关联 :文件后缀可以与特定的应用程序相关联,以指示默认的打开方式。例如,以 .txt 结尾的文件通常会在文本编辑器中打开。
  3. 便于组织文件 :文件后缀有助于用户在文件系统中组织和识别文件。例如,将所有图片文件命名为 .jpg.png 结尾可以使用户更容易找到它们。
相关推荐
登山人在路上7 分钟前
Nginx负载均衡策略
服务器·nginx·负载均衡
zzhclc11 分钟前
pyrosm windows 如何搭建环境 使用conda
linux·运维·服务器
沐浴露z22 分钟前
详细解析 SYN泛洪
服务器·网络
QT 小鲜肉25 分钟前
【Linux命令大全】001.文件管理之slocate命令(实操篇)
linux·运维·服务器·数据库·笔记
绿白尼26 分钟前
USB的NRZI编码机制和位填充机制
linux
peterhunter032033 分钟前
CONFIG_CPU_SW_DOMAIN_PAN
linux
zfj32133 分钟前
Linux 系统 I/O 监控命令大全
linux·服务器·数据库·io·监控
___波子 Pro Max.41 分钟前
Linux下的posix_spawn接口使用场景及与fork区别
linux
oMcLin42 分钟前
Linux 系统服务器的 KVM 虚拟化实战:搭建、配置与管理
linux·运维·服务器
Jtti42 分钟前
服务器拒绝执行用户请求怎么办?
运维·服务器