zoukankan      html  css  js  c++  java
  • 第06章 Linux文件权限体系讲解

    6.1 改变权限属性的命令

    Chmod(change mode)

    Chmod 是用来改变文件或者目录权限的命令,但是只有文件的属性和超级用户root才有这种权限,chmod来改变文件或者目录的权限的两种方法:一种是通过权限字母和操作符的表达式的方法,一种是通过使用数字方法来设置权限。

    6.1.1 数字权限方法

    使用数字权限设置权限的命令格式如下:

    Chmod  [数字组合] 文件名

    Chmod 的数字语法很简单,在如下表中列出狮子表示的权限组合,该权限组合由3位八进制数来表示文件的3类用户的权限组合。

    Chmod的数字方法表示的说明:

    R

    4

    W

    2

    X

    1

    -

    0

    属组的数字权限表示法:
    数组的数字权限为三个权限位的数字加起来的总和,比如下面例子,属主的权限是rw-,数字权限就是4+2=6.属组的权限是r--,为4,用户的权限r—还是4,所以hanjiali.txt的权限就是644.

    例如:

    如果我们不仅仅想改变目录的权限,还想改变目录下的文件权限,所以我们需要加-R的参数。

    例如:

    6.1.2chmod字符式权限表示法

    Chmod [用户类型] [+|-|=] [权限字符] 文件名,用表格如下:

    例如:

    6.1.3改变文件所属关系命令-Chown

    Chown (change owner)

     当我们要改变一个文件的属组,我们所使用的用户必须是该文件的属组而且同时是目标属组成员,或超级用户,只有超级用户的才能改变文件的属性。

    Chown 语法

    Chown[选项]…  [所有者][:[组]]文件…

     

    6.1.4 默认权限分配的命令 umask

    创建一个目录,一个文件,默认的文件权限是755和644,为什么?

    755和644是相对于用户ROOT和用户组ROOT是安全的,没有办法写和改,默认的安全分水岭。

    普通用户umask位0002

     管理员umask为0022

     

     以下部分来源于https://blog.51cto.com/oldboy/1060032

    文件权限计算小结论:

    创建文件默认最大权限为666 (-rw-rw-rw-),默认创建的文件没有可执行权限x位。

    对于文件来说,umask的设置是在假定文件拥有八进制666的权限上进行的,文件的权限就是666减去umask(umask的各个位数字也不能大于6,如,077就不符合条件)的掩码数值;重点在接下来的内容,如果umask的部分位或全部位为奇数,那么,在对应为奇数的文件权限位计算结果分别再加1就是最终文件权限值。

    创建目录默认最大权限777(-rwx-rwx-rwx),默认创建的目录属主是有x权限,允许用户进入。
        对于目录来说,umask的设置是在假定文件拥有八进制777权限上进行,目录八进制权限777减去umask的掩码数值。

    文件权限的一般计算方法:

    默认文件权限计算方法

    1)假设umask值为:022(所有位为偶数)

    6 6 6     ==>文件的起始权限值

    0 2 2 -    ==>umask的值

    ---------

    6 4 4

    2)假设umask值为:045(其他用户组位为奇数)

    6 6 6     ==>文件的起始权限值

    0 4 5 -    ==>umask的值

    ---------

    6 2 1   ==>计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。

    0 0 1 +

    ---------

    622 ==>真实文件权限


    默认目录权限计算方法

     7 7 7     ==>目录的起始权限值

     0 2 2 -    ==>umask的值

    ---------

     7 5 5

    规范成图表如下:


    实例一:umask所有位全为偶数时,多数读者对这个例子无疑问

    [root@oldboy oldboy]# umask

    0022 #→umask当前数值

    [root@oldboy oldboy]# umask 044 #→更改为044

    [root@oldboy oldboy]# umask

    0044

    [root@oldboy oldboy]# mkdir umask_test #→建目录测试

    [root@oldboy oldboy]# ls -ld umask_test

    drwx-wx-wx 2 root root 4096 Nov 12 19:21 umask_test #→对应数字权限为733,是不是符合上面的计算方法?

    [root@oldboy oldboy]# touch umask_test.txt

    [root@oldboy oldboy]# ls -l umask_test.txt

    -rw--w--w- 1 root root 0 Nov 12 19:21 umask_test.txt #→对应数字权限为622,是不是符合上面的计算方法?

    实例二:umask值的部分或全部位为奇数时,这个是读者疑问最大的

    umask值的其他属组位为奇数时

    [root@oldboy oldboy]# umask 0023

    [root@oldboy oldboy]# mkdir dir

    [root@oldboy oldboy]# touch file

    [root@oldboy oldboy]# ls -l

    总计 4

    drwxr-xr-- 2 root root 4096 11-15 01:04 dir  #→对应数字权限为754

    -rw-r--r-- 1 root root    0 11-15 01:04 file #→对应数字权限为644

    提示:根据前面的计算方法,当umask为0023时,dir的权限应该是754,而file的权限应该为643,但是由于umask的其他组位为奇数,因此最终权限为其他组位加1,即643加001(对应实践结果644)。注意:umask为偶数的位不要加1。

    实例三:umask值的所有位为奇数时

     [root@oldboy oldboy]# umask 0551

    [root@oldboy oldboy]# umask

    0551

    umask 为0551 根据掩码方法计算:目录权限为226,文件权限115,而实际文件权限为226(umask的三个权限位都是奇数,所以,每个位分别加1就是正确的权限)

    [root@oldboy oldboy]# mkdir dir5

    [root@oldboy oldboy]# touch file5

    [root@oldboy oldboy]# ls -l

    总计 4

    d-w--w-rw- 2 root root 4096 11-15 01:27 dir5  #→目录对应数字权限为226

    --w--w-rw- 1 root root    0 11-15 01:27 file5 #→目录对应数字权限为226

    再来一例验证下:

    [root@oldboy oldboy]# umask 0333

    [root@oldboy oldboy]# umask

    0333

    umask 为0333 根据掩码方法计算:目录权限为444,文件权限333,而实际文件权限为444(umask的三个位都是奇数,所以,每个位分别加1就是正确的权限)

    [root@oldboy oldboy]# mkdir dir3

    [root@oldboy oldboy]# touch file3

    [root@oldboy oldboy]# ls -l|grep 3

    dr--r--r-- 2 root root 4096 11-15 01:30 dir3  #→目录对应数字权限为444

    -r--r--r-- 1 root root    0 11-15 01:30 file3 #→目录对应数字权限为444

    2)通过8进制字母符号计算(记忆此法也可)

    拿上面的实例3验证。

    [root@oldboy oldboy]# umask 551

    umask值为551,对应的权限为-r-xr-x--x,即所有的文件和目录都取消权限中的-r-xr-x--x权限。

    文件权限:【-rw-rw-rw-】-【-r-xr-x--x】=【--w--w--rw-】=226(文件的x位上没有x,就不用取消了)

    目录权限:【-rwxrwxrwx】-【-r-xr-x--x】=【--w--w--rw-】=226(目录的x位上有x,直接取消即可)

    继续拿前面的例子验证:

    [root@oldboy oldboy]# umask 333

    umask值为333,对应的权限为-wx-wx-wx,即所有的文件和目录都取消权限中的-wx-wx-wx权限。

    文件权限:【-rw-rw-rw-】-【-wx-wx-wx】=【-r--r--r--】=444(文件的x位上没有x,就不用取消了)

    目录权限:【-rwxrwxrwx】-【-wx-wx-wx】=【-r--r--r--】=444(目录的x位上有x,直接取消即可)

    3)通过二进制方法计算(不好记忆不推荐)

    通过进制之间转换,八进制转成二进制来计算。

    0022

    0    2   2      

    ----------    #→八进制转换二进制

    0    10   10

    说明:把umask值八进制转换成二进制

     

    6    6    6

    ------------  #→八进制转换二进制

    110 110  110

    说明:把文件默认最大权限值八进制转换成二进制

      0  10  10      #→umask二进制

    -------------      #→与运算

    110 110  110      #→文件最大权限二进制

    -------------

    000 010  010

    -------------      #→转换八进制

      0  2   2

    说明:最后得到的值是022,然后使用666减去022,那么文件的创建权限就是644

    [root@oldboy oldboy]# umask 551

    [root@oldboy oldboy]# umask

    0551

    5    5     1

    -------------      #→转换二进制

    101  101 001     #→umask二进制

    -------------      #→与运算

    110  110  110      #→文件最大权限二进制

    -------------     

    100  100  000

    -------------      #→转换八进制

    4    4    0

    说明:最后得到的值是440,然后使用666减去440,那么文件的创建权限就是226。

  • 相关阅读:
    美剧基本演绎法福尔莫斯的一句话
    HowToDoInJava 其它教程 1 · 翻译完成
    我们关于版权保护的意见与建议
    HowToDoInJava Spring 教程·翻译完成
    【转】21世纪律师办公自动化的一个调查
    iBooker AI+财务提升星球 2020.4 热门讨论
    布客·ApacheCN 翻译校对活动进度公告 2020.5
    数据可视化的基础知识·翻译完成
    Java 高效编程(Effective Java)中文第三版(补档)
    布客·ApacheCN 编程/大数据/数据科学/人工智能学习资源 2020.4
  • 原文地址:https://www.cnblogs.com/hanjiali/p/11572881.html
Copyright © 2011-2022 走看看