文件特殊权限

一、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

 

 

posted @ 2016-05-12 21:41  被罚站的树  阅读(301)  评论(0编辑  收藏  举报