细化权限管理
环境说明:
博客使用的linux版本:CentOS Linux release 7.7.1908 (Core)
终端语言调整:调整成汉语是为了方便学习,点击这里查看
一、文件权限管理ACL简介
1. 文件权限介绍
- 第一档位:
- 标识文件的属性(读写执行,分别对应r、w、x、)
- 这里一共十个格子(10个比特位),第一个字母标识文件的类型
字母 | 表示文件类型 |
---|---|
- | 普通文件 |
d | 目录,dirtectory的缩写 |
l | 链接符号 |
b | 块设备文件 |
c | 字符设备文件 |
- 紧接着是三组字符,分别代表文件读写执行权限,第一组文件所属用户的权限买第二组文件所属组对文件的权限,其他用户对文件的权限
- 第二档位:标识文件的个数,如果是目录则是该目录中文件的个数
- 第三档位:文件的所属用户
- 第四档位:文件或者目录的所属组,每一个用户都可以拥有一个或者多个组
- 第五档位:表示文件或者目录的大小,文件的大小使用的单位是byte,一般空目录是1024byte
- 第六个栏位:表示最后一次修改时间。以“月,日,时间”的格式表示,如Feb 20 10:57表示2月20日早上10:57分。
- 第七档位:表示文件或者目录名,加-a参数可以查看隐藏文件名
… 表示上级目录
. 表示当前目录
2. linux文件权限计算办法:
- 从左至右,1-3位数字代表文件所有者的权限,4-6位数字代表同组用户的权限,7-9数字代表其他用户的权限。
- 权限是由数字来表示的,读取的权限等于4,用r表示;写入的权限等于2,用w表示;执行的权限等于1,用x表示;
- 通过4、2、1的组合,得到以下几种权限:0(没有权限);4(读取权限);5(4+1 | 读取+执行);6(4+2 | 读取+写入);7(4+2+1 | 读取+写入+执行)
- 444 r–r--r–
600 rw-------
644 rw-r–r--
666 rw-rw-rw-
700 rwx------
744 rwxr–r--
755 rwxr-xr-x
777 rwxrwxrwx - 创建文件默认权限 666 创建目录权限默认777
- 权限掩码即代表拿走的权限
3.ACL介绍
ACL可以对某个文件设置该文件具体的某些用户的权限,意思就是通过ACL可以对一个文件权限做扩展,可以不同的用户对某个文件有不同的权限。
二、chmod命令 – 改变文件或目录权限
- chmod简介:
- 语法格式: chmod [参数] [文件]、
- 常用参数:
参数 | 含义 |
---|---|
-c | 若该文件权限确实已经更改,才显示其更改动作 |
-f | 若该文件权限无法被更改也不显示错误讯息 |
-v | 显示权限变更的详细资料 |
-R | 对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更) |
- 应用实例
- 递归修改目录下面的所有文件和子目录设置为任何人可写
chmod -R a+w *
#这里同样可以使用数字进行操作
三、setfacl命令-设置文件ACL规则
- setfacl命令简介:
改命令可以更精确的控制权限的分配,比如让某一个用户对某一个文件具有某种权限。 - 语法格式:setfacl [参数] [文件]
- 常用参数:
参数 | 含义 |
---|---|
-m | –modify-acl 更改文件的访问控制列表 |
-M | –modify-file=file 从文件读取访问控制列表条目更改 |
-x | –remove=acl 根据文件中访问控制列表移除条目 |
-X | –remove-file=file 从文件读取访问控制列表条目并删除 |
-b | –remove-all 删除所有扩展访问控制列表条目 |
-k | –remove-default 移除默认访问控制列表 |
-d | –default 应用到默认访问控制列表的操作 |
-P | –physical 依照自然逻辑,不跟随符号链接 |
-v | –version 显示版本并退出 |
-R | –recursive 递归操作子目录 |
- 应用实例
-修改文件test权限,test组用户可以查看
groupadd test #创建test组
setfacl -Rm g:test:6 test #添加test组权限为读写
setfacl -Rm u:test:4 test #添加或者修改test用户权限为读
setfacl -x u:test test #删除test用户的权限
四、getfacl命令 – 显示文件或目录的ACL
- getfacl简介:
getfacl命令的作用是查看文件的ACL信息。对于要查看的每一个文件和目录,getfacl命令可以显示出文件的名称,用户所有者、组群所有者和访问控制列表(ACL)。
2.语法简介: getfacl [参数] [目录或文件] - 常用参数:
参数 | 含义 |
---|---|
-a | 显示文件的ACL |
-d | 显示默认的ACL |
-c | 不显示注释标题 |
-e | 显示所有的有效权限 |
-E | 显示没有的有效权限 |
-s | 跳过文件,只具有基本条目 |
-R | 递归到子目录 |
-t | 使用表格输出格式 |
-n | 显示用户的UID和组群的GID |
- 应用实例:
- 查看指定文件的ACL (显示注释信息、不显示注释信息)
getfacl test
getfacl -c test
- 使用表格形式查看指定文件的ACL
getfacl -t test
五、umask命令-查看修改文件权限掩码
- umask 命令:umask命令可用来设定权限掩码。权限掩码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
- 语法格式:umask [参数] [权限掩码]
- 常用参数:
参数 | 含义 |
---|---|
-S | 以文字的方式来表示权限掩码 |
-p | 输出的权限掩码可直接作为指令来执行 |
4.应用实例:
- 使用指令”umask”查看当前权限掩码:
umask
- 使组用户的写权限,其他用户的读、写和执行权限都被取消:
umask u=,g=w,o=rwx
#或者
umask 750
六、特殊权限
- 特殊权限:u+s
-
suid: 让进程不再属于它的发起者,而是属于程序文件本身。(suid只对二进制文件有效;调用者对该文件有执行权;在执行过程中,调用者会暂时获得该文件的所有者权限;该权限只在程序执行的过程中有效)
查找passwd的程序文件位置:which passwd
chmod u+s /usr/bin/passwd
查看进程信息:ps -ef
运行程序时,进程的属主是程序文件自身的权限,而不是进程发起者 u+s 4UID强制位
chmod u[+|-]s FILENAME 如果文件原来有执行权限就显示为s,反之显示S -
**sgid:g+s,**对于普通文件,以组的权限执行修改/usr/bin/touch的g+s,touch文件后文件所属组为root(作用于普通文件时,和suid类似);对于目录文件,目录的属组是谁,在目录下创建的文件的属组是目录的属组。
-
**sticky,o+t:**不能够删除其他用户在同目录里创建的文件,也无法修改其他用户创建的文件的内容,可删除修改自己创建的文件
-