• linux权限的深刻理解



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

    超级用户可以在Linux系统中做任何的事情,命令提示符#

    普通用户只能做在自己权限之内的事情,命令提示符是$

    超级用户与普通用户的切换

    超级用户切换成普通用户,只需要su username即可;

    image-20221030171249574

    普通用户切换成超级用户,有两种方式:

    1. 直接su,然后输入root的密码,工作目录不变

      image-20221030172216497

    2. 直接su-,然后输入root的密码,工作目录变为root的家目录

      image-20221030172311602

    普通用户如何能做超级用户的事情?

    在Linux下超级用户可以做任何事情,而普通用户由于权限的约束只能做一部分事情,所以普通用户想要做超出自己权限的事情必须要进行提升权利,在普通用户下,任何需要进行提升权利的操作,只需在最前面添加sudo,然后输入普通用户的密码

    但是有小伙伴在用sudo的时候会出现如下提示:

    image-20221030173133855

    这是因为,root的权限不是普通用户想用就能用的,必须要得到root的信任,而想得到信任,就必须将普通用户的名字加入到/etc/sudoers这个文件夹下,看下面的解决方案

    vim /etc/sudoers
    
    • 1

    然后找到image-20221030173522592

    找到root这一行拷贝一份,将root改为自己的名字,就如同上面我拷贝了一份将名字改成了wyn,这时保存退出即可完成信任。

    注意退出的时候,可能有权限的限制,所以我们先w!强制保存,再q!强制退出即可。

    那么到这里有一个问题,就是,普通用户想用超级用户的时候输入的竟然是普通用户的密码,这不是很违背常理吗?

    其实并不是,因为上面的过程中也暗中提示了一些信息,就是我们在未信任的时候使用sudo,输入密码不成功,但是在信任之后sudo,输入密码就可以成功。所以这里输入普通用户的密码并不是为了获得root的权限,真正能够获得root的权限的操作是我们将普通用户的名字添加到了root的信任名单里。而输入密码这一操作仅仅只是为了给我们一个最低的执行障碍。毕竟自己的密码自己最清楚,总不能将root的密码告诉普通用户吧?

    Linux中权限的理解(人与文件)

    我们使用ll指令可以列出目录、文件的全部属性

    截屏2022-10-30 17.46.05

    这里我们只看红框里的内容

    权限并不能单单是对于人或者文件来说的,真正的权限应该是一件事情是否允许被谁做

    所以,文件属性才会出现上面两个方框的内容

    先来解释方框的内容:

    rwx分别表示,read、write、excute,-表示无属性,前面分别列了三列;但后面才列出了两列用户名。

    文件在Linux中会属于三种人,第一种是拥有者,第二种是所属组,第三种是其它人。很显然一个人既不是拥有者也不是所属组那么他就是其它人,所以这里文件属性才只列两列用户名。

    而三列rwx分别对应这三种人。

    所属组的出现解决了一个文件可以被一群人rwx,因为如果没有所属组的话,拥有者想让别人rwx那么就只能给其它人放开权限,但是给其它人放开权限的同时,这个文件就变得极其危险,所以出现了所属组,我们可以放开所属组的权限,然后给想看的人所属组的身份。

    如何给文件更改rwx的属性?

    使用chmod命令

    格式:

    chomd [角色][-/+][权限] [文件/目录名]
    
    • 1

    拥有者的符号为u,所属组的符号为g,其它人的符号为oa可以表示这三种角色

    这是默认创建的文件权限

    image-20221030180943718

    比如我们想给myfile的拥有者去掉r和w权限

    image-20221030181122323

    比如我们想给myfile的三种角色全加上x权限

    image-20221030181313160

    八进制法改变文件rwx属性

    是否给这个文件赋予这个属性,就好比给这个属性一个1,而不给这个属性,就给一个0

    所以rwx是否拥有权限就代表这三个位置是1还是0,比如rwx就是111,r-x就是101,这三个二进制数字加起来范围为0-7,假设这个文件的三种角色全具有rwx,则用数字表示就是111 111 111,而如果我们想给这个文件用八进制法加权限,则可以777

    image-20221030183003700

    假设我们想给拥有者去掉r,给所属组去掉w,给其它人去掉x,数字表示011 101 110,八进制表示为356

    image-20221030183105716

    当然了还可以用加减法,想给所有角色都去掉w的话,可以-222

    image-20221030183222164

    如何给文件更改所属人?

    chown改变文件的拥有者,chgrp改变文件的所属组

    格式:

    chown username filename
    chgrp username filename
    
    • 1
    • 2

    更改所属人的权限,只有root和拥有者才可以,其它人必须要添加root

    image-20221030183918805

    目录的权限

    一个文件的名字并不是存储在文件的内容里的,而是存储在文件所在目录里,所以即使拥有文件的w权限也不能改变文件的名字!

    所以说一个目录的权限就是对其文件列表的权限。

    当一个目录只有x权限时

    image-20221030210528141

    可以看到,可以进入目录,但是看不到目录里面的文件,也不能往目录里写入文件。

    当一个目录只有rx权限时

    image-20221030210747909

    此时,仅仅可以看到目录里的文件,但是还是不能删除文件和写入文件

    只有给目录加上rwx权限时

    image-20221030210958629

    这时才能够对目录里的文件进行任意的操作。

    而这时我们把x权限去掉

    image-20221030211154847

    这时rw的权限没有任何意义,根本操作不了。

    目录的r权限决定是否可以读取文件列表,w权限决定是否可以更改文件,x权限决定该目录是否可以成为工作目录。所以x权限是rw权限的基础。

    掩码是什么?为什么要存在?

    image-20221030184433437

    为什么我们目录创建的时候默认权限是775,文件默认权限是664呢?

    我们创建目录的一般目的就是为了能够进入目录然后对文件进行操作,所以作为目录的创建者,前两列的权限是rwx自然是应该的,而第三列则限制了别人不能够对目录里的内容做任何修改,但是可以访问目录。所以是775

    我们创建文件的一般目的就是为了能够对文件进行写入和阅读,至于x权限,一般文件即使有也没有任何意义,当然也不能让其它人拥有w权限。所以是664

    但其实Linux中规定了目录创建的默认权限为777,文件创建的默认权限为666,这时又出现了一个掩码umask,值为002。

    将默认权限“减去”掩码值,就得到了775和664。

    但这里其实并不是减去,而是777&(~umask)得到的775,664&(~umask)得到的664。

    umask的意义是:在umask中出现的权限要在文件的默认权限中去掉,这也意味着并不能是简单的做减法。

    举个例子:

    image-20221030223221055

    规定文件的默认权限为666,在umask002的作用下变为了664,这没问题。但是umask改为了111,文件的权限此时应该在umask的作用下变为555,也就是r-xr-xr-x,但此时文件的权限确是666,rw-rw-rw-,没有发生变化!!!

    如果用减法来解释的话,是完全说不过去的。因为实际的算法也不是减法,而是取反后的umask去&了666。

    来算一下过程:

    111->001 001 001
    ~111 ->110 110 110
    666->110 110 110
    ~111&666->110 110 110
    
    • 1
    • 2
    • 3
    • 4

    那么其实umask真正应该怎么解释呢?

    凡是在umask中出现的权限,是应该在默认权限中去掉的!!!

    来解释一下这句话:在umask中出现的权限也就是1,我们先取反得到0,然后去&,就能够在默认权限中去掉。

    粘滞位

    假设我们在同一目录下进行工作时,这时目录的权限一般都是全开的rwx,不然的话无法在同一目录下工作,但此时就会出现一个,由于该目录的权限全开,所以里面的文件就能够被任意人删除。这一点也不合理,所以为了防止别人删除不属于自己的代码,就给了目录一个额外的权限t,使得用户能够在目录中进行各种操作,但就是不能够删除不属于自己的文件。而这个权限就称为粘滞位

    image-20221030230115786

    目录dir此时的权限是全开的,zsw对于里面的文件是其它人,但是zsw竟然可以进行删除操作。所以为了防止该操作,现在给dir加上粘滞位

    image-20221030230357123

    当给dir加上粘滞位后,其它人就不能够删除不属于自己的文件了。

  • 相关阅读:
    01-Kafka之单机和集群安装
    计算机毕业设计Java京津冀地区产学研项目管理信息系统2021(源码+系统+mysql数据库+lw文档)
    AcWing_4262
    SD-WAN如何提升跨国企业网络性能?
    记录SpringCloud使用Zookeeper做服务中心遇到的问题
    导数基础整理
    贪吃蛇项目(简单)
    Aspose.Cells实现excel预览
    Java安全之动态加载字节码
    不同的子序列 -- 动规
  • 原文地址:https://blog.csdn.net/qq_67569905/article/details/127607050