一、ACL 权限控制
1.ACL 概述
ACL (Access Control List),主要作用可以提供除属主、属组、其他人的 rwx 权限之外的细节权限设定
2.ACL 的权限控制
(1)使用者(User)
(2)群组(group)
(3)默认权限掩码(mask)
3.启动 ACL
Centos7系统中默认对ext4,xfs类型的文件系统启用ACL
4.ACL 的设置 setfacl 命令
(1)格式:setfacl [选项] [acl参数] 目标文件或目录
(2)常见选项:
-m:设置后续的 acl 参数,不可与 -x 一起使用
-x:删除后续的 acl 参数,不可与 -m 一起使用
-b:删除所有的 acl 参数
-k:删除默认的 acl 参数
-R:递归设置 acl 参数
-d:设置默认 acl 参数,只对目录有效
(3)ACL 参数格式:
u:用户名:权限 【给某个用户设定权限,若不添加用户名,默认修改属主权限】
g:组名:权限 【给某个组设定权限,若不添加组名,默认修改属组权限】
m:权限 【更改权限掩码】
(4)示例:增加用户 test1 与 gtest 组具有读写权限
发现权限发生变化,并且结尾增加了一个 “+”
5.ACL 的查询 getfacl 命令
(1)格式:getfacl 文件或目录
(2)示例:查看 /aaa/123/txt 的 ACL 设置
6.权限掩码
类似于 umask,需要注意的是使用者的 ACL 权限设置必须要在 mask 的权限范围内才会生效。
修改示例:
7.递归修改目录下现有文件的 ACL 设置
示例:递归修改 /aaa/ 目录及其目录下的 ACL 设置,并新建文件查看是否具有相同 acl 权限
递归式修改目录及目录下的 ACL 设置,仅对当前存在的文件生效,但新建文件并不具有相同的 ACL 设置。
8.预设 ACL 权限
示例:设置 /aaa/ 目录下,test1 用户一直具有读写执行权限
测试之前设置:
9.删除 ACL 设置
(1)删除某文件或目录单个用户或组的权限
(2)删除某文件或目录全部 ACL 设置
递归删除 /aaa/ 目录及其目录下所有文件的 ACL 设置
二、特殊权限 SUID、SGID、SBIT
1.SUID(Set UID)
(1)SUID概述
当 s 标志出现在文件属主权限的 x 权限上时,例如 /usr/bin/passwd 这个文件,权限为 “-rwsr-x-r-x”,这个文件就具有 SUID 特殊权限,在执行此命令的时候,执行者在执行的瞬间将拥有文件属主 root 的身份权限,即 /etc/shadow 文件,普通文件并没有写入权限,但是普通用户可以执行 passwd 命令并对自己的账号密码进行修改,同时写入 /etc/shadow 文件,正是因为 /usr/bin/passwd 这个文件具有 SUID 这种特殊权限。
(2)SUID 特殊权限的特点:
- SUID 权限仅对二进制程序(binary program)有效
- 执行者对于该程序需要具有可执行权限
- SUID 权限仅在执行该程序的过程中有效
- 执行者将具有该程序拥有者的权限
2.SGID(Set GID)
(1)SGID 概述
当 s 标志出现在文件属组权限的 x 权限上时,例如 /usr/bin/write 文件的权限为“-rwxr-sr-x” 属组为 tty,当执行者执行 locate 命令时,将具有 tty 组成员的权限。
与 SUID 不同的是,SGID 可以针对文件或目录来设定,对于文件来讲,SGID 对二进制程序有用,若程序执行者对于该程序来说具备 x 的权限,则执行者在执行的过程中将会获得该程序群组的支持。
除了与 SUID 相同的对二进制程序有效以外,SGID 还能够用在目录上,当一个目录设定了 SGID 的权限后,用户若对比此目录具有 r 与 x 权限,该用户能进入此目录后,在此目录下的有效群组将变为目录的群组,若该用户具有 w 权限,新建文件或目录后我们会发现,该用户所建立的文件或目录的属组为上层(具有 SGID 设置)的目录的属组。
实验发现,当以 root 身份建立 /aaa/ 目录时并加以 SGID 权限设置,su 到普通用户 huyouba1 身份后,在 /aaa/ 目录下创建文件与目录其属组均为 root,且新建目录也具有 SGID 的特殊权限。可见 SGID 权限对于目录而言,具有递归式的影响,但对新建文件并没有 SGID 权限。且即使是 huyouba1 身份复制到 /aaa/ 目录下一个二进制程序,该文件属组会变为 root,但二进制程序仍不具有 SGID 权限。
3.SBIT(Sticky Bit)粘滞位
(1)SBIT 粘滞位概述
当目录权限 x 的位置变为 t 时,即该目录设有 SBIT 粘滞位权限,主要作用是该目录下的文件即目录仅其属主与 root 用户具有删除该文件或目录的权限,增强安全性。
(2)示例:
创建 /test/ 目录,权限 777,root 用户创建一测试文件,su 到普通用户 huyouba1 身份尝试删除该文件。再将 /test/ 增加 SBIT 粘滞位权限后,再以 huyouba1 身份尝试删除该文件。
实验发现,虽然普通用户 huyouba1 对于 123.txt文件并没有 w 权限,但因上层目录 /test/ 具有 777 的权限,huyouba1 可以删除该目录下的所有文件,这对于系统来讲是十分不安全的。可以通过增加 SBIT 粘滞位权限进行控制。
增加 SBIT 粘滞位后,/test/ 目录下的文件仅其属主和 root 可以删除修改,其他用户无法修改,增加了系统的安全性。需要注意的是,SBIT 粘滞位仅对目录生效,对文件无效。
4.SUID、SGID、SBIT 权限的设定
(1)八进制数设置方法
方法:在属主、属组、其他人的权限前增加特殊权限的八进制数字表示
- 4 为 SUID
- 2 为 SGID
- 1 为 SBIT
示例:
1> 设置 SUID 权限
2> 设置 SGID 权限
3> 设置 SBIT 权限
(2)字母设置方法
示例:
1> 设置 SUID 权限
2> 设置 SGID 权限
3> 设置 SBIT 权限