• Linux权限的认识



    前言

    权限是我们学习Linux非常重要的一环,因此要学好Linux,首先要认识什么是权限。权限在我们生活中无处不在,而Linux中的权限也是基于现实演变而来的。下面让我们一起来认识一下权限吧。


    一、用户的认识

    在学习Linux权限之前,首先我们要对Linux中的用户有一个基本的认识。
    Linux中的用户分为两种:

    1. root用户—超级管理员
    2. 普通用户—受权限约束的用户

    普通用户相信大家都能理解,我们在Linux系统中自己创建的用户就是普通用户,那什么是root用户呢?
    root用户是Linux自带的一个用户,是Linux操作系统的超级管理员,如何体现root用户是Linux系统中的超级管理员呢?那就是root用户不受权限限制

    什么是不受权限限制?
    我来打一个简单的比方:
    比如我们QQ中的会员功能,在QQ中会员和非会员就拥有不同权限。但是QQ中的会员这种权限,限制的只是我们这些使用者。那你们说老马受会员的限制吗?当然是不受限制。root用户也是如此。因此root用户在Linux系统中可以干任何事,包括可以干掉Linux系统本身。

    Linux操作系统有一个重要的特性—一切皆文件
    在Linux系统中,系统本身也是一个或者多个文件,要干掉Linux系统很简单,删除那些文件就可以。

    到这里我们会发现,root用户无比强大,连系统都可以干掉,还有什么事是root用户不能干的。但是root用户能干所有事,就以为着root用户也十分危险。因此如果大家有一个Linux操作系统,一定要保管好root用户的密码,并且千万注意root用户的密码不要设置成和普通用户的密码一样。建议在平常使用Linux操作系统时,使用普通用户就好。那这里就有人提问了,如果有些操作是普通用户不能执行的怎么办?(因为普通用户受权限约束)
    这里我们有两种解决方案:

    1. 更改普通用户为root用户(不建议使用)
      普通用户->root用户 — su / su -(需要输入root用户的密码)
      su : 切换时不更改所处路径
      su - : 切换时更改到根目录,也就是root用户的家目录
      root用户->普通用户 — su + 用户名(不需要输入密码)

    2. 使用sudo命令提权(建议使用)
      使用sudo命令提权不是简单使用就可以,因为sudo这个命令提权可以执行所有命令,也就是说普通用户执行命令时使用sudo提权,就相当于使用root用户。因此sudo这个命令也十分危险,那么我们要使用sudo这个命令就需要让系统相信我们是可以信任的,这里要进行的操作是配置/etc/sudoers 这个文件,将我们的普通用户添加到/etc/sudoers 这个文件里,配置文件需要我们使用vim这个工具,目前我们还没有学习,之后学习了vim这个工具后统一进行讲解。

    注:第一次使用sudo命令提权的使用需要输入密码,这个密码是普通用户的密码。很多人会觉得奇怪,为什么要使用普通用户的密码呢?我们不是将我们的命令提权为root执行吗?为什么不是root用户的密码?这里是因为我们所使用的普通用户已经是被系统所信任的了,既然是受信任的人,那就要提供一定程度的方便,因此输入自己的密码就可以。

    二、权限的概念

    1.什么是权限

    字面上理解,权限就是对权力的限制。简单来说,权限就是限制人的一种方式,也就是说,权限是对人的一种约束。
    权限还可以理解为,你可以干某事,不可以干某事。
    这里就有两个主体。

    1. 你,也就是人
    2. 某事

    那这里就有一个问题,首先我们来看一下这句话:我在腾讯视频上玩游戏,又或者我在QQ音乐上P图。我们会发现这两句话读起来很怪,很别扭,这是为什么呢?因为腾讯视频上不能玩游戏,QQ音乐上不能P图,这就有一个问题,当我们所处的环境,或者所面向的对象不存在或不拥有某项属性时,我们就不能做对应的事。换言之,也就不存在权限这一概念。本来就没有,从何来谈权限。

    下面我们正式来认识一下Linux操作系统中的权限。前面我说过一句话:Linux中一切皆文件,所以Linux中的权限就是指文件权限。这里我给大家一个概念就是 文件权限=人+文件属性。文件属性很好理解,就是可读(r)、可写(w)和可执行(x)。那如何来理解这个“人”呢?
    这里的人其实说的不是人本身,而是人所处的角色。我们每个人在不同的地方都有不同的角色
    当你在家里是,你是父母的孩子,当你在学校是,你是学校的学生等等,这都是我们的角色。而在Linux中,人也有不同的角色。Linux中不同的用户就是不同的人。

    Linux中人的角色分为三种:

    1. 拥有者(owner)
    2. 所属组(grouper)
    3. 其他人(other)

    当我们创建一个文件时,我们就是这个文件的拥有者。那所属组是什么呢?其他人又是什么呢?
    这里首先要提出一个问题,为什么要有所属组这个角色,只有拥有者和其他人不行吗?答案是不行的。

    我们来看下面的一个场景。
    以公司中开发一个软件举例。假如我们在腾讯中,现在腾讯要开发微信这个软件,公司中有两个团队,团队A和团队B要竞争开发。但是公司又只有一台Linux机器。假如Linux只有拥有者和其他人这两种角色。张三是团队A的一员,李四是团队B中的一员。张三写了一段代码放到一个文件里。李四不可以看这个文件,团队A的其他成员可以看这个文件。在只有两种角色的前提下,我们发现是不能做到的。因为张三是文件的拥有者,而除了拥有者以外的人都是其他人。因此就有了所属组这个角色。张三属于团队A,我们只需要让拥有者和所属组的权限都是可读可写,让其他人的权限是不可读不可写就可以了。

    了解了以上内容,我们就可以来看看文件权限了。

    [root@VM-8-7-centos 2022_9_28]# ll
    total 0
    -rw-r--r-- 1 root root 0 Sep 30 22:03 fail.txt
    
    • 1
    • 2
    • 3

    当我们用查看文件的详细信息时,我们看到文件名前面有一大堆内容。其中有些我们是能认识的,比如时间,有些我们不认识。文件=内容+属性,文件名前面的都是文件属性。在这里我们重点看第一部分的内容,也就是那十个字符。

    我们把十个字符单独拿出来

                                  -            rw-r--r-- 
    这十个字符分为两个部分,第一部分是第一个字符,第二部分是后九个字符
    每一部分分别表示什么意思呢?
    第一部分也就是第一个字符表示文件类型,Linux下一切皆文件,因此文件也有许多不同的类型,Linux和windows区分文件类型有很大差别。
    Linux系统不按照后缀名区分文件,而是以那十个字符中的第一个字符进行区分
    - :普通文件(源代码、库文件、可执行程序、压缩包等等)
    d :目录文件
    c :字符设备文件(键盘、显示器)
    b :块文件(磁盘)
    l :链接文件(快捷方式) 
    p :管道文件
    s :socket文件 ps:认识就好
    第二部分以三个字符为一组可分为三组,前三个字符表示拥有者的权限,中间三个字符表示所属组的权限,最后三个字符表示其他人的权限。
    以前三个字符为例
    r/- :可读/不可读
    w/- :可写/不可写
    x/- :可执行/不可执行
    每一个字符都有两种状态 r 表示有 - 表示没有
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述
    现在我们单独来看拥有者的权限
    权限的表示方法有两种:

    1. 字符表示
      在这里插入图片描述

    2. 八进制表示
      在这里插入图片描述
      以上就是权限的所有表示方法。认识了权限后,接下来我们来看看如何修改权限

    1.chmod

    功能: 设置文件的访问权限
    格式: chmod [参数] 权限 文件名
    常用选项:

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

    chmod命令使用的格式
    ① 用户表示符+/-=权限字符

    +:向权限范围增加权限代号所表示的权限
    -:向权限范围取消权限代号所表示的权限
    =:向权限范围赋予权限代号所表示的权限
    用户符号:
    u:拥有者
    g:所属组
    o:其他人
    a:所有用户
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # chmod u+w fali.txt
    # chmod o-x fail.txt
    
    • 1
    • 2

    ②三位8进制数字

    # chmod 664 fail.txt
    # chmod 640 fail.txt
    
    • 1
    • 2

    前面我们说过文件权限=人+文件属性,既然文件属性可以修改,那人可不可以修改呢?可以!

    2.chown

    功能:修改文件的拥有者
    格式: chown [参数] 用户名 文件名

    # chown user1 fail.txt  //修改fail.txt文件的拥有者为user1
    
    • 1

    3.chgrp

    功能:修改文件或目录的所属组
    格式: chgrp [参数] 用户组名 文件名
    常用选项: -R 递归修改文件或目录的所属组

    # chgrp user1 fail.txt //修改fail.txt文件的所属组为user1 
    
    • 1

    这里有一个问题,修改文件的拥有者或者所属组,就相当于将一个东西送给了其他人。张三是一个文件的拥有者,现在要将文件的拥有者改为李四,就相当于将文件送给了李四,那么送东西给别人需不需要别人同意呢?答案是需要的。在Linux中,我们不能随便将一个文件送给别人,而不经过别人的同意。我们要修改文件的拥有者或者所属组,只有一种方式,使用root用户,强制将文件给别人。因此修改文件的拥有者或者所属组时,需要使用sudo提权

    最后还有一个知识需要大家了解。我们创建一个文件时,为什么文件的权限就是那个样子的?我们可以修改文件的默认权限吗?

    在Linux系统中,新建的文件都有默认权限,这个默认权限我们不可以直接修改,但在Linux中有一个文件掩码,实际上显示出来的文件是由默认权限和文件掩码共同决定的。

    4. umask

    功能:
    查看或修改文件掩码

    新建文件夹默认权限=0666
    新建目录默认权限=0777
    但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask

    格式: umask 权限值
    说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用户默认为0002。
    注:这里的数字是以八进制划分的,只需要关注后三位即可
    实例:

    # umask 755
    # umask //查看
    # umask 044//设置
    
    • 1
    • 2
    • 3

    总结

    以上就是关于Linux权限的基本内容,希望对大家有所帮助。谢谢!

  • 相关阅读:
    使用springboot每日推送早安问候语到用户微信【部署篇】
    OpenGL 图像绿幕抠图
    java毕业设计室内游戏俱乐部系统源码+lw文档+mybatis+系统+mysql数据库+调试
    MongoDB 小结
    pg 字符相关操作
    Docker安装MongoDB
    Python笔记 · Python语言的“动态性”
    获取医疗器械板块的个股列表
    千峰课程网安笔记(1)
    深入理解TCP:序列号、确认号和自动ACK的艺术
  • 原文地址:https://blog.csdn.net/qq_40005416/article/details/127117897