-
Linux权限设计
- 在Linux世界里,权限是写在文件或目录中的,针对不同的访问者,文件将对象分成了三类,
文件的所有者;owner:属主,u
文件的所属组;group:属组,g
其他访问者; other:其他,o
2. 每个文件针对每类访问者都定义了三种权限
(1 文件:
r:可使用文件查看类工具查看其内容 —————————模式表示法中代表4
w:可修改其内容 —————————模式表示法中代表2
x:可把文件提请内核启动为一个进程 —————————模式表示法中代表1
(2 目录:
r:可使用ls查看此目录中的文件列表。
w:可在此目录中创建文件,也可以删除此目录中的文件。
x:可以查看此目录的列表,也可以cd进入目录,是目录的基础权限。
3.权限rwx以所有者,所属组,其他,这样的顺序排列一排放置在文件属性排头,通过ll 命令可查看,如 下图
这一行最前面的6个字母分别是所有者和所属组还有other的权限了,可以很明显看出来f2文件的所有者和所属组都是root,这是权限的模式表示法,还有一种是数字法,就是对应把分组拥有的权限数字相加,
那么f2文件的权限设置就是777;现在知道了,我们把chmod权限设置成了000,代表对所所有的访问者剥夺了读写执行任何权限,包括root用户的。
-
问题成因
文件通过rwx给对应类别的访问者开放相应的权限,而root用户是超脱于权限之外的上帝,它掌握了权限修改的生杀大权,chmod 就是它的工具;但是root用户本身也是受限的,就是不能执行对自己不开放执行权限的文件!因为系统认为执行这项操作太过于危险,即使是超级管理员也不能随意执行,但是root用户拥有给自己授权的能力;
但是chmod本身也是一个存放于/bin下的一个二进制文件,它的权限如果被自己改成了对所有用户没有任何权限!也就是我们目前所碰到的问题,那么root用户也就无法执行这个文件,更加要命的是,它也没有办法通过chmod 这个工具来给自己开放权限了!root用户也就丧失了为文件改变权限的能力。这是不是一个死循环!
别以为你找到了Linux系统的一个bug,万能的Linux 系统在基本的三类普通权限基础上有设计了灵活的权限管理,为特定用户或者用户组开逾越基础权限的特权通道那就是ACL (Access Control List )
-
ACL权限
1.除了文件的所有者,所属组,其他人,之外,可以为更多的用户设置凌驾于基础权限之外的特殊权限,不受基础三大权限限制。
2.Centos7 默认创建的xfs和ext4文件系统具有ACL功能。
3.Centos7之前的版本默认手工创建的ext4文件系统无ACL功能,需手动添加
tune2fs -o acl/dev/sdb1
mount -o acl /dev/sdb1 /mnt/test
4.ACL设置密令:
给用户设置特权 用到的密令 setfacl -m u:user:rwx f1
给用户组设置特权用到的密令 setfacl -m g:group:rwx f1
给文件设置mask值的密令 setfacl -m mask::rwx f1
清空所有ACL权限密令 setfacl -b f1
这里的mask特别说明一下,mask的权限值为所有ACL权限设置了一个上限值,拥有ACL权限的用户的权限不得超过mask权限,如果拥有了mask未规定的权限,那么默认不生效。
-
解决方法
有了上面的知识储备,那么来解决题目中碰到的问题就太简单了。
两种办法,一种是直接把root用户设置ACL权限,另外一种是将root组设置ACL权限,但是无论哪种方法,最后修改 /bin/chmod 的用户必须是root用户,即使别的用户在root分组下,因为修改权限本就是系统管理员特有的权限,我们现在用第一种方法恢复故障。
1.首先我把/bin/chmod 的权限全部移除;
可以看到root用户限制都没有修改/bin/chmod 的权利了。
2.接下来我们给root用户设置rwx 的特权,然后通过getfacl 查看ACL权限设置情况;
可以看到root 用户现在有了rwx 的权限了;
3.那么我们现在可以用root用户把 /bin/chmod 的权限恢复回去了,问题解决perfect!
4.不过用完后记得把ACL权限给清理掉哦!
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95036
评论列表(2条)
办法呢?
@lhl123456:解决方法里写的很清楚啊