首页 > 代码库 > Linux权限管理总结(2)--特殊权限

Linux权限管理总结(2)--特殊权限

1.特殊权限facl(访问控制列表支持)

    标准Linux文件系统(ext2/3/4)支持使用POSIX ACL设置多个复杂文件权限,   前提是文件系统是使用acl选项挂载的。

     在Red Hat Enterprise Linux中,如果通过ls -l显示的权限字符串的最后一个字符是+,则文件或目录设置了ACL。

 getfacl file用于显示文件的ACL

  u:willis:rw--#适用于用户willis

  u:500:---#适用于UID为500的用户

  u::rwx#适用于file文件的拥有者


   g:willis:rwx#适用于组willis

   g:l0:r-x#适用于GID为10的组

   g::rw-#适用于file所属组

   o::rwx#适用于其他所有人

 setfacl用于设置或修改文件的ACL

  # setfacl -m u:willis:rw filename# 授予用户willis读写权限

  # setfacl -m g:westos:rw filename# 授予组westos读写权限

  # setfacl -m g:redhat:r filename# 授予组redhat读的权限


 # setfacl -x u:bob filename# 删除用户bob的ACL权限

 # setfacl -m o::- filename# 修改其他所有人的权限为空

    权限优先级

在确定某个进程(亦即某个运行程序)是否能够访问某一文件时,可按照以下方式应用文件权限和ACL:

1. 如果是以拥有该文件的用户身份运行该进程,那么可应用该文件的用户权限

2. 另外,如果是作为列于用户ACL条目中的用户运行进程,那么应用用户ACL(只要受mask允许)

3. 另外,如果是以与拥有该文件的组相匹配的组身份或以具有明确组ACL条目的组身份运行该进程,如果权限是由任意匹配组授予的,则应用该权限(只要mask许可)

4. 否则,应用文件的其他权限


ACL掩码

     具有ACL的文件拥有一个“mask”(掩码),这个掩码既能够限制拥有该文件的组的最大权限,有能够限制ACL中的补充用户和组所拥有的最大权限。

     getfacl file将当前掩码显示为mask::permissions。

     由ls -ld file显示的组权限也反映了当前掩码(并非所拥有组的权限!)

默认ACL(继承

     目录可以有“默认ACL”条目,系统自动针对在该目录中创建的新文件设置这些条目setfacl -m d:u:bob:rw directory 将设置默认ACL条目,授予用户bob对在directory中创建的所有新文件的读写访问权限。

     这类似setgid权限的方法(针对目录时),使得在该目录中创建的新文件归拥有该目录的组所有。

ACL挂载选项

     挂载文件系统之后,必须启用对POSIX ACL条目的支持。

     安装程序会配置它创建的所有ext4文件系统,以自动启用ACL支持。

      # tune2fs -l /dev/sda1 |grep "Default mount"

      Default mount options:    user_xattr acl

     如果手动格式化文件系统,则需要使用acl挂载选项挂载该系统。

     您可以将手动格式化的ext4文件系统设置为在挂载时自动启用支持,方法是使用tune2fs设置默认

      挂载选项:  # tune2fs -o user_xattr,acl /dev/sda1


2.其他特殊权限

    安全上下文:

     进程运行时能够访问哪些资源或文件,不取决于进程文件的属主属组,而是取决于运行该命令的用户身份的uid/gid,以该身份获取各种系统资源。

  

   suid        ###冒险位

    u+s        ###针对文件,文件记录动作在执行时是文件所有人身份执行的,与是谁发起的无关     

    chmod u+s file chmod 4777 file

   

  sgid        ###粘制位

    g+s        ##针对目录,在目录中创建的文件都自动归属到目录所在组。针对二进制文件,文件内记录的程序在执行时和执行者的组身份没有关系,而是以二进制文件的所有组的身份执行的

    chmod g+s file|directory

    chmod 2777 file|directory   

    1.touch命令用户组为root   

    2.新建目录改用户组为student   

    3.给目录g+s权限   

    4.在目录中新建文件。文件的组与touch命令组无关,与目录的组相同          

    stickyid    ###强制位

    o+t    ###一般只用在目录上,可以理解为防删除位,当一个目录被设置了sticky位,则该目录下的文件只能由:

    一、超级管理员删除;

    二、该目录的所有者删 除;

    三、该文件的所有者删除。

    也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。要 删除一个文件,你不一定要有这个文件的写权限,但你一定要有这个文件的上级目录的写权限。也就是说,你即使没有一个文件的写权限,但你有这个文件的上级目 录的写权限,你也可以把这个文件给删除,而如果没有一个目录的写权限,也就不能在这个目录下创建文件。 如何才能使一个目录既可以让任何用户写入文件,又不让用户删除这个目录下他人的文件,sticky就是能起到这个作用。

    stciky一般只用在目录上,用 在文件上起不到什么作用 

    chmod o+t directroy chmod 1777 directory     

    

     由于SUID和SGID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID和 SGID位是没有多大意义的。   

    对一个属主为root的可执行文件,如果设置了SUID位,则其他所有普通用户都将可以以root身份运行该文件,获取相应的系统资源。当然这在某些场合 时需要的,但是滥用会造成系统的安全隐患。  

    对一个全局可写目录,若其从属于mygrp组,一个属于mygrp组的用户建立文件后属组为自己的私有组,但是加上给该文件夹加上SGID位后,可以让用 户创建的文件从属于该目录所属的组,因为是以文件夹属组的身份来创建的。   

     对于一个全局可写目录,加上sticky位以后,普通用户将只能删除自己的文件,而不能删除其他用户的文件。




本文出自 “技术人生,简单不简单” 博客,请务必保留此出处http://willis.blog.51cto.com/11907152/1845984

Linux权限管理总结(2)--特殊权限