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的参数和得到的结果都是补码,不是直接的权限码

  • 相关阅读:
    LeetCode 252. Meeting Rooms
    LeetCode 161. One Edit Distance
    LeetCode 156. Binary Tree Upside Down
    LeetCode 173. Binary Search Tree Iterator
    LeetCode 285. Inorder Successor in BST
    LeetCode 305. Number of Islands II
    LeetCode 272. Closest Binary Search Tree Value II
    LeetCode 270. Closest Binary Search Tree Value
    LeetCode 329. Longest Increasing Path in a Matrix
    LintCode Subtree
  • 原文地址:https://www.cnblogs.com/html55/p/13516659.html
Copyright © 2011-2022 走看看