文件权限基础:
首先在linux中文件普通权限分为3种:
(1)r 权限,表示可以读该文件的内容==》二进制对应的是100,十进制对应的是4;
(2)w 权限,表示可以修改文件内的内容==》二进制对应的是010,十进制对应的是2;
(3)x 权限,表示可以执行文件==》二进制对应的是001,十进制对应的是1;
并且在linux中,文件的最大默认权限是666(默认去掉x权限),目录最大权限是777,那么如下图所示:
为什么创建的文件默认权限为 rw-r--r--(644),而目录默认权限为 rwxr-xr-x(755)呢?
***因为在linux中有默认权限掩码进行管理,也就是umask,在/etc/bashrc 文件中可以看出umask默认的设置;
#从系统脚本中不难看出,当UID大于199,并且用户的名字和组的名字相等,那么这个普通用户它的 umask权限掩码就为002,否则为022,也可通过umask命令直接查看当前用户的umask
#所以一个用户的默认权限=最大权限 - umask ==》root所创建的文件=666 - 022 = 644
设置文件的默认权限:
在用户目录下修改 .bashrc 文件即可
结果:
#注意:当最大权限减去你设置的umask值得到 x 执行权限时,会自动 +1,因为设置文件和目录的umask的值相同,所以当两者默认权限不一致时,需已目录默认权限为准
特殊权限:
suid:
#如果一个文件拥有SUID权限,则执行该文件时以文件拥有人的身份进行执行;
#SUID只能作用在二进制的文件上,不能使用在shell脚本上(脚本中所使用的命令实际未赋权,所以无意义);
#SUID对目录没有意义(目录无法执行)
设置 SUID:
chmod u+s filename
注:判断文件是否有SUID权限,可以通过ls -l 查看拥有人栏位的“x”栏位,如果 x 变成 s 说明同时有 x 和 s 权限,如果是 S 则相应栏位没有 x 执行权限仅有 suid 权限
sgid:
如果一个文件有 sgid 权限,则执行该文件以文件拥有组的身份执行
如果一个目录有 sgid 权限,则该目录下的文件自动继承该目录的拥有组
sgid 只能作用在二进制的程序和目录上,不能使用在脚本上
设置 SGID:
chmod g+s filename
#注:判断目录或文件是否有sgid权限
ls -l 如果拥有组栏位的s为小写,则说明有x和s权限,如果是大写仅有s权限
sbit:
拥有sbit权限的目录为公共目录,在该目录下任何人都可以创建文件,但是每个用户只能管理自己的文件
设置 SBIT:
chmod o+t filename
#注:判断目录或文件是否有sbit权限
ls -l 如果拥有组栏位的t为小写,则说明有x和t权限,如果T为大写,则仅仅只有t权限
umask:
#所以umask展示的权限掩码第一位就为特殊权限,所以设置权限可以按照以下方式来设置(需注意,并非每个文件都需要特殊权限,所以我们设置时默认安装 chmod 777 这类权限来设置)
chmod 7777 hello.txt
#注:(在 .bashrc 文件中设置 umask 为特殊权限是不生效的)
suid 数字表示==》4
sgid 数字表示==》2
sbit 数字表示==》1
ACL:
#ACL的出现主要是为了弥补权限的不足,通过 ACL,可以在不改变文件本身权限的场景下给你指定的用户或者指定的组来精确分配权限
查看文件的acl:
getfacl 1.txt
注意:如果一个文件或者目录设置完acl后,用getfacl所查看的详情中mask掩码将替代掉文件或目录拥有组的权限,并且权限掩码将决定acl的有效权限
设置文件的acl:
setfacl -m u:user1:rwx 1.txt
描述 |
功能 |
给指定用户设置acl权限 |
u:mary:rx file |
给文件拥有人设置acl权限 |
u::rwx file |
给指定组设置acl权限 |
g:it:rwx file |
给文件拥有组设置acl权限 |
g::rwx file |
给文件其他人设置acl权限 |
o::rx file |
设置掩码值 |
m:rw file |
注:设置acl权限时,使用-n选项将不改变文件的掩码
setfacl -m u:user1:r-- -n 1.txt
注:
setfacl -m d:u:user1:rwx test/
给目录设置一个默认的acl权限,让目录下的文件和子目录自动继承该目录的acl,但是文件不会继承x权限
描述 |
功能 |
删除指定用户的acl权限 |
u:mary file |
删除指定组的acl权限 |
g:it file |
setfacl -R #递归修改acl权限
setfacl -b #清空所有的acl权限
#删除默认的acl
setfacl -x d:u:user1:rwx test/ #删除该目录的指定用户acl
#清空默认的acl
setfacl -k test/ #删除该目录的所有默认
注:文件匹配的优先级
文件的UID 》文件acl的UID(mask允许)》文件的GID==》文件acl的GID(mask允许)==》文件的其他人