zoukankan      html  css  js  c++  java
  • 【Linux】Linux下文件的权限管理和所属用户所属组

    摘要:一个文件和用户之间的关系有三种,这个用户是文件的所有者、这个用户是文件所属组中的一员,这个用户对文件来说是其他人。
    同样,用户对文件的权限分为了读、写、执行三种,其中文件和文件夹对于这三种理解不同,重点的是所谓权限,其实是对内容操作的权限,而不是文件自身。
    文件夹嵌套的情况下,权限如何发挥作用?

    1. 用户和文件有什么关系

    1.1 用户和文件之间的关系

    张三创建了某个文件,如 touch 111.txt,那么张三就是这个文件的所有者,对这个文件来说,马云就是其他人。

    用ll命令列出某目录下的文件如下

    -rw-r--r-- 1 root root    0 Aug 17 10:19 111.txt
    -rw-r--r-- 1 root root    0 Aug 17 10:19 222.txt
    drwxr-xr-x 2 root root 4096 Aug 17 10:19 test

     可见,root是文件111.txt和222.txt的所有者,对它的权限rw-就是读写权限。如果是马云,那就是r--,就是只读,不能写和执行。

    1.2.读、写、执行对文件和文件夹分别意味着什么?

    初学的时候,望文生义,很容易搞不清楚读、写、执行是对什么起作用。

    比如,文件夹test里面有文件111.txt,在文件夹test上权限给满,111.txt设置为只读,那普通用户还能删掉这个文件吗?

    一实验,发现可以删掉,怎么111.txt设置为只读文件,普通用户也可以删掉它?一头雾水。

    首先要清楚的是,用户root是超级管理员,不受这些限制。

    其次要理解,这些权限是对其内容而言的设置。

    用户马云,在111.txt身上算是其他人,如果没有读权限,则打不开111.txt,就是cat 111.txt会出现权限拒绝。如果没有写权限,则不能编辑111.txt(但是用vi有点问题,系统bug,111.txt有内容,马云没权限写,结果一样可以打开,但是打开的是无内容的显示,然后马云可以键入新的文本,强制保存,原来111.txt内容会被覆盖了),如果没有执行权限,则不能执行。

    用户马云,在文件夹test上算是其他人,如果没有读权限,则用ls列出目录中有哪些文件时会被禁止,没有写权限,则不能在文件夹中创建和删除文件,只能改一改现有的文件,没有执行权限,则不能进入该目录。

    111.txt算是文件夹test的内容,可以删掉是因为文件夹test的权限给满了,而不看111.txt自身的权限。111.txt自身的权限设置,管理的是它里面的内容的权限。

          文件 文件夹
    r 4 查看文件内容
    cat/more/head/tail/less
    列出目录中的内容
    ls/
    w 2 修改文件内容
    vim
    在目录中创建、删除文件
    touch/mkdir/rmdir/rm
    x 1 执行 执行文件
    (脚本或命令)
    可以进入目录
    cd

    父目录权限和子目录权限的影响是怎么样的?

    假设某文件夹路径是这样的:

    / study / english / 111.txt

     用户马云对于这些文件都是其他人的身份。

    问,当文件夹 study 对马云的权限只读,文件夹 english 对马云的权限是读写执行,文件 111.txt 对马云的权限是读写执行,那么马云可以查看111.txt的内容吗?

    答:不可以,权限要从最外层的文件夹开始进入,因为study不具备执行权限,进入不了,虽然english和111.txt有权限,也查看不了。

     如果把study改为只有执行权限,没有读权限呢?

    可以看到,进入study可以,列出study下内容就不行

    但是查看文件夹english和文件111.txt都是正常的。

     在文件夹study下新建文件不行,但是在english下新建文件可以。

     也就是说,文件夹的权限并不具有继承性,当我在文件夹english下新建文件时,没有因为父级文件夹没有权限而不能操作。

    父级文件夹只要有x权限,那么子级文件夹就不受父级文件夹的影响了。父级文件夹没有x权限,其下的文件和文件夹在操作时会受到影响。

    有点类似大院子嵌套小院子,大院子没有x权限(没有钥匙),就进入不了大院子,那你们的小院子,你有钥匙也没有用。

     这时study没有了执行权限,进不了study目录,则执行新建文件如下:

     可以看出,没有执行权限的文件夹,其下的文件夹和文件在操作时受到了影响。

    1.3.怎么更改文件和文件夹的权限

    1.首先要问哪些用户能更改文件权限?

    答:超级管理员和文件所有者可以修改,其他人修改不了。

    2.怎么修改?

    答:

    命令名称:chmod

    命令英文原意:change the permissions mode of a file

    命令所在路径:/bin/chmod

    执行权限:所有用户

    选项:-R递归修改

    功能描述:改变文件或目录权限

    方法1 方法2
    chmod [{ugoa}{+-=}{rwx}][文件或目录]  chmod [mode=421][文件或目录]

     这种方法是直接修改文件的某些用户的权限位,不用管其他用户的情况。

    u代表所有者、g代表所属组,o代表其他人,a代表全部。
    +r代表加上读权限,-r代表去掉读权限,=r代表不管以前是什么权限,现在设置为读权限

    读权限是4

    写权限是2

    执行权限是1

    其实就是二进制位置不同。

    rwx,r是二进制100,w是二进制10,x是二进制1。

     chmod u+x English.zip

    把文件English.zip的所有者权限中加上执行权限。

    chmod g+r,o-r English.zip
    把文件的所属组加上读权限,把其他人的去掉读权限,g+r和o-r用逗号分隔。

    chmod g=rx English.zip

    不管文件所属组以前是什么权限,现在就是设置为rx

    chmod 755  English.zip

    7就是111,就是rwx都有了,同样,5就是读和执行的权限,这句话就是设置文件English.zip所有者是读写执行权限,所属组和其他人是读和执行的权限。

    选项:-R递归修改

    新建文件夹时,-p是递归依次创建,而修改文件或文件夹权限时,如果要修改目录下的子目录和文件权限同时修改,要用-R

    chmod -R 777 /tmp/a/

    把/tmp/a/及其所有子目录和文件的权限都改为777

    1.4.怎么更改文件的所有者和所属组,chown和chgrp

    命令名称:chown
    命令英文原意:change file ownership
    命令所在路径:/bin/chown
    执行权限:root
    语法:chown 【选项】【新主人的用户名】【文件或目录】
    功能描述:改变文件或目录的所有者,选项 -R 可以递归修改文件夹下所有子目录和文件
    范例:$ chown mayun 111.txt  (把文件111.txt的所有者改为mayun)

     首先,改变文件的读写执行权限的时候,root和文件所有者都可以操作。但是改变文件所有者的时候,只有root可以操作,如下图。

     当然,把文件换新主人,那新主人的用户名不能输入错。

     改变文件所有者后,所属组还是root哦!

    那怎么改变所属组呢?和改变文件所有者类似,只是把chown换成chgrp

    命令名称:chgrp

    命令英文原意:change file group ownership

    命令所在路径:/bin/chgrp

    执行权限:所有用户

    语法:chgrp【新的用户组】【文件或目录】

    功能描述:改变文件或目录的所属组

    范例:$ chgrp  mayun 111.txt  改变文件111.txt的所属组为mayun

     

    现在又有个问题,没设置之前文件的所有者和所属组是谁?

    答:文件的所有者很简单,谁创建了这个文件,文件的所有者就是谁!

    那文件的所属组是谁?就是文件所有者的主要组。

    1.5.新建的文件夹和文件默认什么权限?(不常用)

    我们新建一个文件222.txt,新建一个文件夹dir2,看看系统给他们的默认权限是什么?

    从哪里知道新建文件夹的权限是rwxr-xr-x呢?

    答曰:umask命令就是干这事的,它就是查看新建文件夹和新建文件的默认权限。

      看到了文件夹默认权限情况,文件的默认权限比文件夹少个x ,防止被攻击。

    命令名称:umask

    命令英文原意:the user file-creation mask

    命令所在路径:Shell内置命令

    执行权限:所有用户

    语法:umask  [-S]

    -S 以rwx形式显示新建文件默认权限

    功能描述:显示、设置文件的默认权限

    范例:$ umask  -S

     

     如上图,root和普通用户得到的默认权限还不一样。

     用root用户,新建文件夹时默认权限为755,文件权限默认644,能否更改为默认新建文件夹为700,默认新建文件权限600呢?

    答曰:可以,与rwxrwxrwx异或算法得出权限码,然后umask 权限码即可。

    rwx rwx rwx 为777

    与什么异或能得到700 (rwx------)?

    得到结果---rwxrwx,也就是077

    因此,只要umask 077即可得到想要的结果。

    umask 077后,新建的文件夹dir3权限就是rwx------,新建的文件就是去掉可执行权限后的效果。

     也就是说,umask的参数和得到的结果都是补码,不是直接的权限码

  • 相关阅读:
    使用事件驱动代替定时任务
    MySql中的有条件插入 insert where
    Mac上“您没有权限来打开应用程序”(Big Sur)
    Java反编译反混淆神器
    Java实现开根号运算(不使用数组和String)
    使用vs code搭建Q#开发环境 (Mac)
    离散傅里叶变换DFT入门
    Java的nanoTime()方法
    Eslint提示const关键字被保留
    myBatis分页插件PageHelper的使用及源码详解
  • 原文地址:https://www.cnblogs.com/html55/p/13516659.html
Copyright © 2011-2022 走看看