资源描述
起因:做《鸟哥的Linux私房菜》第七章“Linux文件与目录管理”情景模拟题。
实验内容:用root账号创建两个账号zhox01与zhox02,这两个账号除了自己的用户组还支持一个共同的用户组hxxy。假设这两个用户共同拥有/srv/ahome/目录的开发权,且该目录不允许其他人进入查阅。
1.添加用户与用户组
2.配置工作目录
3.可以看到rwx权限的/srv/ahome/下zhox01用户创建的文件所属用户组为zhox01,此时zhox02对于这个文件为others,权限为r--。
4.给工作目录加上SGID权限,zhox01在其中创建的文件用户组为hxxy,zhox02对该文件的权限为group的rw-。达到了实验要求。
上述为正常的实验流程。
在完成第四步后,我试着用VI编辑了对于zhox02权限为r--的test1,写入失败,VI提示可以试着加!强制写入(override)。再用”:wq!”强制写入,结果写入成功。写入之后的文件属性如下:
可以看到文件所有者变成了zhox02,用户组变成了hxxy。
思考片刻,发现我在/srv/ahome/目录上加了SGID权限了,此时zhox02的effective group应该是hxxy。但是test1是加SGID之前创建的,用户组标记为zhox01。如果说加了上层目录加了SGID后里面的文件属性也跟着变化,可以说通。那zhox02的权限是用户组的rw-而不是r--。zhox02是有权限去改变文件test1的状态的。
随即我想测试下如果取消了SGID会是什么样的情况。
如图,SGID已经取消,zhox01创建文件test4,所属用户组为zhox01,zhox02对于此文件为other,权限为r--。再次用VI强制写入,结果成功了。如图:
这次的测试结果让我觉得:这不科学。/srv/ahome/的SGID已经取消,zhox02在此目录下的effective group既不是hxxy更不是zhox01。对于文件test4,zhox02的身份确实是others,权限为r--。VI为什么可以强制写入?
首先想到的是昨天看过的SUID,有些二进制程序在文件所有者的x权限上加入s(SUID)权限,执行者运行时会暂时取得文件所有者的权限,如果VI的所有者是root,并且在文件所有者的x权限上加入了SUID,那么调用VI时,用户身份为root,是有权写入test4的。
which 查看vi未知,得到文件位置/bin/vi。接着查看vi的属性,如图:
可以看到没有SUID权限。反过来想,给VI加SUID权限也太不安全了,任何人在运行vi时都是root权限,那不是任何文件都能更改!
下一个想法是zhox02对/srv/ahome/目录具有rwx权限,有权改变目录结构。但是目录结构并没有改变,否定。
想了很久都没有思路,想到去看看鸟哥对VI的强制写入是怎么说的。翻阅后得知:当对文件权限为r--r--r--时,的确可以通过“:wq!”强制写入,但前提是有权限更改操作者对文件的权限。
马上测试,用zhox01创建一个test5,用zhox02尝试改变文件属性:
可以看到,操作不被允许。zhox02是没有权限改变自己对test5的权限的。
实在想不明白,vi是怎样实现强制写入的,这不是“越权”了吗?
回头翻书把,翻到权限对于文件和目录的意义。
在w权限对目录的意义中,看到一条:
可以删除该目录下的文件,不论文件的权限为何。
既然并不能改变操作者对于文件的权限,如果把它删了,创建一个同名的文件呢?就可以达到“写入”的目的了。重新创建的文件所有者和用户组都是自己,很符合VI强制写入之后文件属性的改变。看来这个猜想很有何能。
如何证实?想到文件的隐藏属性中,有个参数是可以给文件添加“只能添加数据,不能删除文件和修改数据”的属性。切回root身份,添加属性:
再切到zhox02,发现已经无法写入:
到这里我以为我已经证实了自己的想法,但是我太天真了,因为对test5有w权限的zhox01也无法写入了:
看来我对隐藏属性a的理解错误了。
换一种方式,chmod 750 /srv/ahome。让用户组hxxy对/srv/ahome不再有w权限,这样zhox01可以写入test5,zhox02不能写入并且也不能删除test5。验证结果:zhox01可以在test5中写入数据,zhox02不能写入数据,强制写入也失效。
总结:
1.一个用户对一个文件的权限,不能光看文件。看似不能写入的文件,并不一定就真的不能写入。
2. 权限对于文件和目录的意义一定要深刻理解。
3.目录的w权限很危险,应当慎重配置。
4.把握细节,刨根问底。
感谢:
@技不如人
@资深宅男
@Kevin2600
等热心人士帮助解答。
展开阅读全文