0x01 ACL权限
概述: ACL是用于解决用户对文件身份不足的问题。
0x012 ACL权限是否开启
# dumpe2fs -h /dev/sda3 #dumpe2fs 是查询指定分区详细文件系统信息的命令
选项:
-h 仅显示超级块中的信息,而不显示磁盘块组的详细信息
没有开启ACL要手动开启有两种方法
- 重新挂载根目录分区
mount -o remount,acl /
这种是临时的办法 - 通过修改
/etc/fastab
文件永久开启ACL权限
0x013 ACL基本命令
# getfacl 文件名 #查询文件的ACL权限
setfacl 选项 文件名 #设定ACL权限
选项:
-m 设定ACL权限
-b 删除所有ACL权限
-x 删除指定用户ACL权限
模板:
setfacl -m u:用户名:权限 文件名
setfacl -m g:组名:权限 文件名
例子
setfacl -m u:user1:7 /test1
setfacl -m g:group1:rx -R /tset #-R递归
注意:
setfacl -m d:u:user1:rwx -R /test d是设置默认的ACL权限 而且只能对目录有效
0x014 ACL权限溢出
这也是为什么不能使用ACL代替普通的rwx权限的原因
ACL权限一旦递归之后,不可避免的出现权限溢出。
权限溢出的原因: 对目录来说 最低权限就是X这样才能打开目录进去访问,但是对文件来说最高权限也是X,这样在ACL递归的时候就会把目录和文件统一递归成X这样文件也有了执行权限。
0x015 最大有效权限mask
mask代表了acl能够赋予的最大权限,如果mask没有读权限 acl就不能赋予读权限
# setfacl -m m:rx /test1 #修改最大权限 m=mask
0x02 sudo授权
sudo 是给普通用户赋予部分管理员权限
赋予的权限越详细,普通用户得到的权限越少。赋予的权限越简单,普通用户得到的权限越大
visudo
指令打开文件(/etc/sudoers
)一般只有下面要修改的命令。
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
模块 | 含义 |
---|---|
用户名或群组名 | 表示系统中的那个用户或群组,可以使用 sudo 这个命令。 |
被管理主机的地址 | 用户可以管理指定 IP 地址的服务器。这里如果写 ALL,则代表用户可以管理任何主机;如果写固定 IP,则代表用户可以管理指定的服务器。如果我们在这里写本机的 IP 地址,不代表只允许本机的用户使用指定命令,而是代表指定的用户可以从任何 IP 地址来管理当前服务器。 |
可使用的身份 | 就是把来源用户切换成什么身份使用,(ALL)代表可以切换成任意身份。这个字段可以省略。省略就是root权限 |
授权命令 | 表示 root 把什么命令命令授权给用户,换句话说,可以用切换的身份执行什么命令。需要注意的是,此命令必须使用绝对路径写。默认值是 ALL,表示可以执行任何命令。 |
# sudo -l 可以执行哪些命令权限
0x021 授权某用户可以添加其他用户
先上面添加 /usr/sbin/useradd
/usr/bin/passwd
这样会授权用户可以任意修改所有的密码包括root
所以要使他禁止修改某一些用户
![234](C:\Users\Qusi\Desktop\234.jpg)user1 ALL=/usr/sbin/useradd, /usr/bin/passwd [A-Za-z0-9], !/usr/bin/passwd root, !/usr/bin/passwd "", #这个是给user1添加用户和更改密码的权限,但不允许更改自己和root的密码。
0x03 文件特殊权限
-rwsr-xr-x. 1 root root 32K Aug 8 23:10 su
---s--x--x. 1 root root 144K Oct 24 11:27 sudo
在·/usr/bin中
0x031 SetUID
- 只有可以执行的二进制程序才能设定SUID权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令执行者在执行该程序时获得文件所属主的身份(在执行程序的过程中灵魂附体为文件的属主)
- SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
0X0311 危险的SetUID
SUID更改身份是不需要密码的,例如给Vim赋予SetUID比赋予Sudo更加危险,它并不需要输入密码且没有任何限制,相当于一个root用户执行vim。
管理的时候SetUID建议:
- 尽量别手工赋予SetUID权限
- 关键目录及工具应严格控制写权限,例如“/”,“/sur”等
- 用户的密码要遵守密码三原则
- 对系统中默认应该具有SetUID权限的文件做一列表,定时检查有没有这之外的文件被设置了SetUID权限
0x032 SetGID
SGID即可对文件生效,也可以对目录生效,这和SUID有明显把不同,如果针对文件,SGID的含义如下。
- 只有可执行的二进制程序才能设置SGID权限
- 命令执行者要对该程序拥有x(执行)权限
- 命令执行在执行程序的时候,组身份升级为该程序文件的属组
- SetGID权限同样只在执行过程中有效。
针对目录的含义如下
- 普通用户必须对此目录拥有r和x权限,才能进入此目录
- 普通用户在此目录中的有效组会变成此目录的属组
- 若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组。
SGID本身没什么大的风险,它的风险是必须给其他人7权限才可以使用。
0x033 SBIT
SBIT=sticky bit 粘着位,也称SBIT ,仅对目录有效
- 仅对目录有效
- 普通用户对该用户拥有w和x权限,即普通用户可以在此目录拥有写权限。
- 如果没有SBIT,因为普通用户拥有w权限,可以在目录删除和增加任意文件包括其他成员的。一旦赋予了SBIT,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
这个风险和SGID相同。
0x034 设定文件的特殊权限
- SUID 4
- SGID 2
- SBIT 1
#chmod 4755 test 其他类似
0x04 文件系统属性chattr权限
chattr 能够限制root用户(可以保护文件)
charre [+-=] [选项] 文件或目录名
选项:
+ : 增加权限
- : 删除权限
= : 等于某权限
i : 如果对文件设置i属性,那不允许对文件进行删除,改名,也不能增加或修改数据。如果对目录操作,那么只能修改目录下的数据,但不允许建立和删除文件。
a : 如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除和修改数据。如果对目录设置a权限,那么只允许在目录中建立和修改文件,不能删除。
e : Linux中绝大多数文件都是默认e属性。表示该文件是使用ext文件系统进行存储的,而且不能使用"chattr -e "删除e属性
查看chattr权限
#lsattr 选项 文件名
选项
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的。
0x05 总结
六种常规权限
- rwx
- umask
- acl
- sudo
- suid/sgid/sbit
- chattr