文件特殊权限
一、SUID
案例
psswd的所有者(root)权限不是所谓的rwx,而是rws,这有什么特殊含义没,我们再来看看下一个文件
这个文件就是我们前面说的过的存放用户密码的文件,但是我们发现这个文件的所有权限是关闭的(当然这对root用户无效)
这时会出现一个问题,passwd命令对于普通用户是可执行的。当普通用户执行passwd来修改密码时,那么passwd的执行者将是普通用户。而passwd操作对象应该是shadow文件,它需要将用户的密码保存进shadow文件。从上面的图中可知shadow文件是被禁止修改的。那么可以简单的来说普通用户是如何修改shadow文件的。
要求
- 这有可执行程序设定SUID才有意义
- 命令的执行者拥有该文件的执行该权限
- 当命令执行者执行该文件时,将会临时获得该文件所有者身份(简单的理解就是变身)
- 当程序执行完,又恢复本尊
解决案例
当普通用户执行passwd命令时,会“变身”为root用户,而root用户是无视规则的,可以直接修改shadow文件,那么passwd程序也就有了可以修改该文件的权限。我们可以对比cat命令来看。
当我用普通用户来执行cat命令
直接被拒绝,这是因为cat并没有让普通用户变身的能力
setuid的使用
增加S权限
-
chmod 4755 文件名
- chmod u+s 文件名
取消权限
- chmod 755 文件名
- chmod u-s 文件名
实践
让普通用户可以查看shadow,注意这很危险
二、SGID
SetGID与SetUID有类似地方,也有不同的地方。SetUID主要是对可执行程序而言,而SetGID不仅对文件有作用,而且对目录也有作用。作用对象为文件时,用户的所属组会变身为文件所属组,我们来看一个典型的例子。
案例
locate命令的组权限是开启SGID的,我们知道locate是查看数据库来进行文件定位的,我们来看下数据库。
我们看到普通用户是没有读权限,但是普通用户是可以执行locate命令来查看文件的。这是因为普通用户在执行locate命令时,它的所属组变为了slocate,而mlocate.db的组权限是开启读的。所以普通用户也可以查看数据库了。
对目录的作用
命令使用
-
设定SGIG
chmod 2755 文件名
chmod g+s 文件名
-
取消SGID
chmod 755 文件名
chmod g-s 文件名
三、SBIT权限
- SBIT(黏着位)只对目录有效
- 普通用户对该目录拥有w和x权限,即普通用户在此目录拥有写入权限
- 如果没有黏着位,由于普通用户对该目录用户写权限,那么它可以删除该目录下的所有文件,但是一旦有了黏着位,那么它只能删除自己建立的文件。
案例
我们看到在其它权限中有了个t字符,则说明tmp开启了SBIT权限
命令使用
-
设定SBIT
chmod 1755 目录名
chmod o+s 目录名
-
取消SBTI
chmod 755 目录名
chmod o-s 目录名
四、文件属性
前面介绍的几种权限管理对ROOT用户是无效的,但是如果更改文件属性,则会对ROOT用户产生影响
- chattr 选项 参数 文件/目录
- 选项 + - =
- 参数 i a
当参数为i 时,如果是文件那么所有用户只能查看该文件内容,不能做任何其它操作。如果是目录,那么能且只能修改该目录下的文件中的数据。
当参数为a时,如果是文件只能增加数据。如果是目录,只允许在目录中创建文件和修改文件的权限和内容
abc是个文件
test是个目录,在查看属性时需要加-d