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位以后,普通用户将只能删除自己的文件,而不能删除其他用户的文件。