美文网首页
文件系统权限管理

文件系统权限管理

作者: ThinkerWalker | 来源:发表于2017-06-03 22:11 被阅读0次

    权限就是对文件或目录“加锁”,有不同权限的人才能进去不同的入口……

    一、正常权限

    1.1权限的查看


    其中rw-r--r--.就是这个文件的权限了,而后边的root root代表文件的属主和数组。

    我们先来看一下权限用什么代表:

    • r:读权限(read)
    • w:写权限(write)
    • x执行(execute)

    所属:

    • u:属主
    • g:属组
    • o:其他人

    rw-r--r--9个位,分为三段,每段三个位,依次为r,w,x权限,三段分别为属主,属组,其他人三种类别的权限。
    属主具有读写权限,属组有读权限,其他人有读权限,如果显示为-,则代表该类人没有此权限。那么root用户对此文件有读和写的权限,但是没有执行权限,什么是执行权限呢,比如说我们的Windows中的exe文件,能双击执行的就为可执行的,那么linux中,x则代表可执行,一般为脚本文件,或者是二进制文件(比如说ls命令)。
    root组的用户对这个文件有只读权限,也就是不能更改和执行了,。对于不是root用户,和不属于root组的用户,则也是只有只读权限。

    那么如何才能有自己想有的权限呢,就要所属用户或者root用户来设置了。

    1.2权限设置相关命令

    权限设置有两种方法:
    1.2.1模式法
    对象+-=权限
    对象:ugoa——a相当于ugo三种类别的人
    权限:rwx

    [root@centos7.3 app]#chmod a-x dir/ #去掉dir所有对象的执行权限
    [root@centos7.3 app]#ll
    drwxr-xr-x. 2 root root   6 May 29 19:48 di2
    drw-r--r--. 2 root root   6 May 29 19:48 dir  #dir的全部对象的执行权限已经去掉
    [root@centos7.3 app]#chmod u+x dir/ #给属主添加执行权限
    drwxr-xr-x. 2 root root   6 May 29 19:48 di2
    drwxr--r--. 2 root root   6 May 29 19:48 dir #已经有属主执行权限了
    
    

    还可以复制其他文件的权限

    [root@centos7 ~]#chmod --reference=dir dir2   #参考dir的权限,为dir2设置权限
    

    1.2.2数字法
    数字也可以代表权限,r使用4表示,w使用2表示,x使用1表示,1、2、4看着有规律啊,不错,的确rwx使用二进制表示的话,有权限使用1表示,没有使用0,那么如下图:


    具体只要在相应位上有权限,则二进制为1,则三个位组合起来,再从二进制转化为十进制则数字可计算出来权限。

    [root@centos7.3 app]#chmod 754 dir/  
    #用数字法给dir的属主赋予rwx权限,属组为rx权限,其他人为只读r权限
    [root@centos7.3 app]#ll
    drwxr-xr-x. 2 root root   6 May 29 19:48 di2
    drwxr-xr-. 2 root root   6 May 29 19:48 dir 
    

    1.3umask

    umask值用来消除创建文件时的相应位上的权限(从二进制方面理解);
    新建文件: 666 - umask值就是新建文件的默认权限,因为新建文件默认没有执行权限的(没有1权限,所以只要有奇数权限则代表有执行权限),所以得到的权限必定是偶数,如果umask为奇数,则用666减去将得到奇数权限,如果所得结果某位存在奇数权限,则将其权限+1(因为从二进制方面理解,如果相应位没有权限,则多减了1,故要加上1来弥补这个权限);

    [root@CentOS7 ~]# umask
    0022
    [root@CentOS7 ~]# umask 135     #将当前umask设为135,
    [root@CentOS7 ~]# umask
    0135       #修改成功
    [root@CentOS7 ~]# touch f2
    [root@CentOS7 ~]# ls -l f2
    -rw-r---w-. 1 root root 0 Jun  3 20:45 f2#按理说666-135=531,但是奇数权限加上1,则成为642
    

    新建目录: 777 - umask值就是新建目录的默认权限;
    管理员的umask 是 022
    普通用户的umask是 002

    [root@centos7.3 app]#umask  #查看当前用户的umask值
    0022 #root的umask值是002
    [root@centos7.3 app]#umask 002 #把当前用户的umask值改为002
    [root@centos7.3 app]#umask
    0002 #修改成功
    [root@centos7.3 app]#umask -S #模式方式显示
    u=rwx,g=rwx,o=rx
    [root@centos7.3 app]#umask -p #显示全部,输出可被程序调用
    umask 0002
    

    1.4X权限的理解

    X的作用(x权限特殊形式)
    针对目录增加x权限
    对文件
    1 无执行的文件,不会增加x权限
    2 任意三种人有执行权限,也会增加x权限
    目录

    [root@CentOS7 ~]# chmod 600 tmp/
    [root@CentOS7 ~]# ls -ld /root/tmp/
    drw-------. 2 root root 38 Jun  3 16:02 /root/tmp/
    [root@CentOS7 ~]# chmod u+X tmp/
    [root@CentOS7 ~]# ls -ld tmp/
    drwx------. 2 root root 38 Jun  3 16:02 tmp/
    

    文件:

    [root@CentOS7 ~]# chmod 000 f1 #去掉文件的所以权限,以便看的更清楚
    [root@CentOS7 ~]# ls -l f1
    ----------. 1 root root 1098 Jun  3 19:34 f1
    [root@CentOS7 ~]# chmod u+X f1 #赋予X权限
    [root@CentOS7 ~]# ls -l f1 #并没有权限x被赋予
    ----------. 1 root root 1098 Jun  3 19:34 f1
    [root@CentOS7 ~]# chmod 100 f1#一旦赋予任何一类人x权限
    [root@CentOS7 ~]# chmod a+X f1
    [root@CentOS7 ~]# ls -l f1
    ---x--x--x. 1 root root 1098 Jun  3 19:34 f1#则所以位都被赋予x权限
    
    

    1.5文件与目录的权限与注意

    对目录的权限意义:
    只有读:只能查看目录文件列表,不能访问文件,也不能cd目录(查看,删除)
    只有执行:可以cd进去,不能ls,可以访问目录中的文件。执行是基础权限
    写权取:配合x权限才生效

    二、特殊权限

    2.1SUID

    SUID权限代表不管是谁执行此程序,将继承此程序所有者的权限
    比如修改密码命令passwd,因此每个用户都可以用此命令修改自己的密码,由于其继承的是属主root用户的权限。

    [root@CentOS7 ~]# ll /usr/bin/passwd 
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    

    创建一个文件,赋予s权限

    [root@CentOS7 ~]# touch f3
    [root@CentOS7 ~]# ll f3
    -rw-r---w-. 1 root root 0 Jun  3 21:17 f3
    [root@CentOS7 ~]# chmod u+s f3
    [root@CentOS7 ~]# ll f3
    -rwSr---w-. 1 root root 0 Jun  3 21:17 f3  #此处为S权限
    #由于其没有x权限,S并不能代表SUID权限,必须赋予x权限使其成为可执行程序,此时将自动变为s
    [root@CentOS7 ~]# chmod u+x f3
    [root@CentOS7 ~]# ll f3
    -rwsr---w-. 1 root root 0 Jun  3 21:17 f3
    

    2.2SGID

    SGID作用于目录或可执行程序,作用于目录代表在此目录创建的文件或目录,默认的属组继承此目录的属组

    [root@CentOS7 ~]# ls -ld tmp/  查看权限
    drwx------. 2 root bin 58 Jun  3 21:32 tmp/
    [root@CentOS7 ~]# chmod g+s tmp #赋予此目录的g有s权限
    [root@CentOS7 ~]# ll -d tmp
    drwx--S---. 2 root bin 58 Jun  3 21:32 tmp
    [root@CentOS7 ~]# chmod g+wx tmp
    [root@CentOS7 ~]# ll -d tmp
    drwx-ws---. 2 root bin 58 Jun  3 21:32 tmp
    [root@CentOS7 ~]# touch tmp/  #验证权限
    f1         f2         functions  profile    
    [root@CentOS7 ~]# touch tmp/f3
    [root@CentOS7 ~]# ll tmp/f3
    -rw-r--r--. 1 root bin 0 Jun  3 21:40 tmp/f3  #发现属组为bin,成功
    
    

    2.3Sticky

    粘贴位权限,只能作用于目录上,只有自己才能删除自己创建的文件.使用t来表示,同样需要执行权限x,否则表现为T
    有这样的需求,如果多人合作,希望整个团队的人都能更改这个目录的文件,但是这个目录的文件 不能被其他人删除,比如说系统的/tmp目录,这个目录每个用户都可以在里面创建文件,但是不能删除其他用户创建的文件,除了root

     ll /tmp -d
    drwxrwxrwt. 27 root root 4096 Jun  3 21:40 /tmp
    
    
    [root@CentOS7 ~]# touch /tmp/f1
    [root@CentOS7 ~]# ls /tmp/f1 
    /tmp/f1
    [root@CentOS7 ~]# ls /tmp/f1  -l
    -rw-r--r--. 1 root root 0 Jun  3 21:48 /tmp/f1
    [root@CentOS7 ~]# chown xiaoming:xiaoming /tmp/f1
    [root@CentOS7 ~]# su - chenxuliang
    Last login: Sat Jun  3 21:35:11 CST 2017 on pts/0
    [chenxuliang@CentOS7 ~]$ echo "aaa" > /tmp/f1
    -bash: /tmp/f1: Permission denied   #当然此处需要赋予其他用户可w权限。
    
    [chenxuliang@CentOS7 ~]$ rm -f /tmp/f1
    rm: cannot remove ‘/tmp/f1’: Operation not permitted
    #此处tmp其他用户拥有rwx权限,却不能删除其中的文件,则就是因为加了粘贴位sticky权限的原因。(删除文件与文件本身的权限无关)
    

    2.4特殊权限除了可以用模式方法设置,还可以使用数字法

    特殊权限:
    SUID:4
    SGID:2
    Sticky:1

    [root@centos7.3 app]#ll #查看当前目录文件列表和文件属性
    drwxr-xr-x. 2 root root  24 May 30 19:46 dir  
    [root@centos7.3 app]#chmod 1755 dir/  # 为dir目录设置权限,1表示Sticky权限,755表示普通权限
    [root@centos7.3 app]#ll #查看当前目录文件列表和文件属性
    drwxr-xr-t. 2 root root  24 May 30 19:46 dir #在其他用户权限的x位上出现了t,表示Sticky权限添加成功
    

    2.5特殊权限总结与注意

    SUID只能作用于二进制可执行程序,不能作用于目录,因为其对应的是程序,程序需要能执行
    为什么对于一个文件有读写执行权限,依然不能删除呢,因为删除文件要看其父目录是否有权限。删除的是目录项中的文件名(详细请看我的inode博客)

    三、ACL权限

    3.1为什么要有ACL权限

    因为文件权限管理职能对三类人有效,在生产中远远不能满足要求,ACL则应运而生

    3.2ACL权限的查看

    [root@CentOS7 ~]# getfacl f1
    # file: f1
    # owner: root
    # group: root
    user::--x
    group::--x
    other::--x
    

    3.3ACL权限的设定

    1. setfacl的选项和常用参数
    2. getfacl 文件 或 目录 #查看文件或目录的acl权限
    3. setfacl - m u:用户名:权限 文件或目录 #可以使用模式方法也可以使用数字方法设置
    4. setfacl - R #R表示递归
    5. setfacl - M 配置文件 文件或目录 #M表示把配置文件里权限设置给后面的文件或者目录,你可以先写好一个权限保存在文件中来批量设置
    6. setfacl - m g:组名:权限 #g表示组
    7. setfacl - m d:u:用户:rx #d选项表示创建默认权限不影响其他acl权限,加了d之后在目录下创建的文件都会获得父目录的设置默认acl权限
    8. setfacl - k #删除默认权限
    9. setfacl - x u:用户 #删除单个权限
    10. setfacl - X #X和M选线功能相似只不过X是按照文件的内容删除acl权限
    11. setfacl -b #删除所有acl权限
    12. setfacl -- set #set选项会把原来的acl设置用新的代替,相当于覆盖

    举例:

    [root@centos7.3 app]#setfacl -m u:admin:rw dir/ #为admin设置权限
    [root@centos7.3 app]#getfacl dir/  #查看权限
    # file: dir/
    # owner: root
    # group: root
    user::rwx  
    user:admin:rw- #设置的admin的权限
    group::r-x  
    mask::rwx #mask值是acl权限的上线,mask是除了所有者和其他的之外的人和组的最大权限
    #在设置了acl权限之后文件的属组权限和mask值是绑定的
    other::r-x
    

    3.4复制其他文件ACL权限

    root@centos7.3 app]#getfacl dir |setfacl -set-file=- dir2
    

    3.5ACL权限的备份与还原

    [root@centos7.3 app]#getfacl -R dir > acl.txt #把dir目录和子文件的acl权限备份至acl.txt文件
    [root@centos7.3 app]#setfacl -R --set-file=acl.txt  dir #恢复acl权限
    [root@centos7.3 app]#setfacl --restore acl.txt #第二种方法
    

    终于写完啦,但是这还只是理论上的,还没有应用于实践,想要在应用中完美结合,还差的很远,毕竟文件权限管理是一门基础的大学问。

    相关文章

      网友评论

          本文标题:文件系统权限管理

          本文链接:https://www.haomeiwen.com/subject/lolmfxtx.html