权限之高级权限
一、ACL权限简介与开启
1、是解决权限不足的问题。
2、[root@localhost~]# dumpe2fs -h /dev/sda5
#dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项:
-h 仅显示超级块中信息,而不显示磁盘块组的详细信息
挂载acl权限方法:
#mount -o remount,acl / //临时的
#重新挂载根分区,并挂载加入acl权限
#vi /etc/fstab
UUid=c2ca6f57-b15c-43ea-bca0-f239083dbd2 / ext4 defaults,acl 1 1 //加入acl,默认一般都有acl
#mount -o remount /
#重新挂载文件系统或重启系统,使修改生效
注意:UUid是分区唯一识别符 ;defaults是挂载时候默认的权限;1 1 表示是否需要检测、是否需要备份;
2、查看与设定ACL权限
1、 #getfacl [选项] 文件名 //查看acl权限
-m 设定ACL权限
-x 删除指定的ACL权限
-
b 删除所有的ACL权限
-d 设定默认的ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
#uesradd tony
#groupadd stu
#cd /home
#mkdir av
#chown tony:stu /av
#chmod 770 /av
#useradd lw
#getfacl -m u:lw:rx av
#getfacl -m g:lw:rx av
#ll //会发现av的权限后边有个+号,标明是有acl权限的
#getfacl //查看acl权限具体是什么,可以有rx权限了,里边还有个mask命令,后边章节会讲解
3、最大有效权限与删除ACL权限
1、最大有效权限
mask是用来指定最大有效权限的,如果我给用户赋予ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限
#getfacl -m m:rx av //给mask赋予权限 rx
2、删除ACL权限
#setfacl -x u:用户名 文件名 //删除指定用户ACL权限
#setfacl -x g:组名 文件名 //删除指定用户组的ACL权限
#setfacl -b 文件名 //删除这个目录下的所有权限
3、默认权限和递归权限
递归式父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限
#setfacl -m u:用户名:权限 -R /文件名
权限溢出:
用递归权限很难避免权限溢出的情况,一般目录有执行权限,递归到文件时文件也有了执行权限,但文件不一定就需要执行权限,递归仅能针对目录操作的
默认权限:
默认ACL权限的作用是如果给父目录设定了默认ACL权限,那么父目录中所有新建的子文件
都会继承父目录的ACL权限
#setfacl -m d:u:用户名:权限 文件名
默认权限对文件不会报错,递归会报错;但都直接对文件不起作用,对象是目录
4、sudo权限:
root 把本来只能超级用户执行的命令赋予普通用户执行
sudo的操作对象是系统命令
# visudo
#实际修改的是/etc/sudoers文件
root ALL=(ALL) ALL
#用户名 被管理主机的地址=(可用的身份)授权的命令(绝对路径)
#%wheel ALL=(ALL) ALL
#%组名 被管理主机的地址=(可使用的身份)授权的命令(绝对路径)
#man -5 sodoers 查看帮助
例子1
普通用户不能执行shutdown命令,接下来让普通用户能够执行这个命令
#suroot
#visudo 进入后再最后一行添加:
user1 ALL= /sbin/shutdown -r now
#sudo -l 输入user1的密码,就能看到刚才添加的 命令
#sudo /sbin/shutdown -r now //user1用户要这样执行命令,输入密码后执行
linux递归删除目录命令
也可以给用户组赋予ACL权限,在组名之前加%
#visudo 之后
##Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
例子2
授权普通用户可以添加其他用户
#visudo
user1 ALL=/usr/sbin/useradd
user1 ALL=/usr/sbin/passwd
#sudo /usr/sbin/useradd
#sudo /usr/sbin/passwd
#授予用户设定密码的权限,这样写身份是root,可以直接修改root密码
解决方案:将#sudo /usr/sbin/passwd 删掉,换成以下不能修改root密码:
user1 ALL=/usr/bin/passwd[A-Za-z]*, !/usr/bin/passwd””, !/user/bin/passwd root
user1 ALL=/usr/bin/passwd[A-Za-z]*, !/usr/bin/passwd””, !/user/bin/passwd root
例子3:给所有用户赋予 vi命令
#visudo 后添加一行user1 ALL=/bin/vi
#sodo -l //已经获得root权限,查看一下
#sudo /bin/vi etc/shadow //user用户可直接修改shadow,很可怕;
5、权限之文件特殊权限
Linux里边也称为:SetUID SetGID Sticky BIT 命令
SetUID :
只有可以执行的二进制程序才能设定SetUID 权限
只有可以执行的二进制程序才能设定SetUID 权限
命令执行者要对该程序拥有x(执行权限)
命令执行者在执行改程序时获得改程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
SetUID 权限只在改程序执行过程中有效,也就是说身份改变只在程序执行过程中有效
umask 输出的0022中的第一位 是设置特殊权限
例子:验证只有二进制才能设置SetUID权限
#chomd 4755
-rwsrwxr-x //赋予了SetUID权限,在拥有者执行权限x 变为 s
#chomd 4644
-rwSrwxr-x //赋予了SetUID权限,在拥有者执行权限x 变为 S
注意:S是不能被执行的权限, s=S+x
例子:验证执行者要对程序有执行权限
#ll //查看属组 和其他人有 有无执行权限
例子:验证属主的身份
-rwsrwxr-x 任何用户执行passwd 时候,自动赋予root权限修改自己的密码
cat等命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
6、设定SetUID的方法
4 代表SetUID
chmod 4755 文件名 或 chmod u + s 文件名
取消SetUID的方法
chmod 0755 文件名 或 chmod u - s 文件名
危险的SetUID
关键目录应严格控制写权限。比如”/”、”/usr”等
用户密码设置要严格遵守密码三原则(复杂性、易记忆性、实效性)
对系统中默认应该具有SetUID权限的文件一列表,定时检查有没有这之外的文件设置了SetUID权限
例子:验证vi 改为SetUID权限
#ll /bin/vi
-rwsr-xr-x //普通用户可以以root身份修改重要文件,很可怕的。
怎么去检测 存在的 SetUID?
#!/bin/bash
find / -perm -4000 -0 -perm -2000 > /tmp/setuid.check
#搜索系统中所有拥有SUID和SGID的文件,并保存在临时目录中
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论