zoukankan      html  css  js  c++  java
  • 第7章 权限管理(2)_文件特殊权限(SUID、SGID、SBIT)

    2. 文件特殊权限(主要用来临时提升命令执行者或其组身份

    2.1 SetUID

    (1)SetUID的功能

      ①只有可以执行的二进制程序才能设定SUID权限用来临时提升执行程序(或某条命令)的用户身份

      ②命令执行者要对该程序拥有x(执行)权限,即用户必须拥有执行该程序的权限

      ③命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主

      ④SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。

    (2)以passwd命令为例分析SUID权限

     

      ①所有用户密码都是写入/etc/shadow文件中,但这个文件的权限是000(表示除root用户外的所有用户对该文件都没有任何权限。注意,连查看的权限也没有!)

      ②但当普通用户执行passwd修改自己的密码时最终这个密码又会被写入/etc/shadow文件!这就有点奇怪了。普通用户不是对文件没有任何权限吗?现在竟然可以将密码写入shadow文件!

      ③原来,passwd这个程序(命令)具有SUID权限(见图中的“rwsr-xr-x”,其中的s表示SUID权限),因此当普通用户执行了passwd命令后其权限会被暂时地提升为该命令所有者(root)的权限。所以就可以读取shadow文件了。命令执行完后,又恢复为原来权限。

    (3)设定SetUID的方法

      ①chmod 4755 文件名 (其中的4表示SetUID2表示setGID1表示Sticky BIT(其它人),755表示所有者、所属组和其它人的权限)

      ②chmod u+s 文件名

    (4)取消SetUID的方法

      ①chmod 755 文件名(重新设回原来的755)

      ②chmod u-s 文件名(直接取消SUID)

    (5)应用举例

      ①cat命令并不具有SUID权限(rwxr-xr-x),所有普通用户不能查看/etc/shadow文件但可以通过给cat设置SUID权限这样普通用户也就可以查看该文件了。(这里只是实验,注意这是很危险的!)。

     

    (6)危险的SetUID

      ①关键目录应严格控制写权限。比如“/”、“/usr”等。

      ②用户密码设置要严格遵守密码三原则。

      ③对系统中默认应用具有SetUID权限的文件作一列表,定时检查有没有这之外的文件被设置了SetUID权限。

    【实验分析】给vim命令设置SUID权限(危险!)

     

      ①设置vim的SUID权限。(注意,vim所有者为root)

      ②切换到普通用户testUser,同时可以看出该用户对shadow文件没有任何权限对password也只有只读权限

      ③但此时,当用testUser打开vim时,由于vim开启了SUID权限,所以testUser的身份被临时提升为vim所有者的身份,即具有root权限因此就可以编辑passwd文件这是很危险的。因为testUser用户可以修改passwd中自己UID为0,这样就摇身一变成为超级用户了。

      ④这里只是实验,可以将testUsedr的UID改回原来的值,并chmod u-s /usr/bin/vim

    2.2 SetGID

    2.2.1 SetGID的作用

    (1)SetGID针对目录的作用

      ①普通用户必须对此目录拥有r和x权限,才能进入此目录

      ②普通用户在此目录中的有效组会变成此目录的所属组

      ③若普通用户对此目录拥有w权限时新建的文件的默认属组是这个目录的属组

    (2) SetGID针对文件的作用

      ①只有可执行的二进制程序才能设置SGID权限

      ②命令执行者要对程序拥有x(执行)权限

      ③命令执行在执行程序的时候,组身份升级为该程序文件的属组

      ④SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效。

    2.2.2 设置和取消SGID

    (1)设置SGID:

      ①#chmod 2755 文件名(其中的2表示设置SGID)

      ②#chmod g+s 文件名

    (2)取消SGID

      ①#chmod 755 文件名(设置为原来的权限,注意755之前没有个2了)

      ②#chmod g-s 文件名

    2.2.3 应用举例

    (1)以locate命令为例分析SGID权限

     

      ①使用locate查询文件时其实是访问/vab/lib/mlocate/mlocate.db文件,但该文件对于普通用户来说没有任何权限

      ②但locate命令本身具有rwx--s--x权限,即所属组具有SGID权限。因此当普通用户执行locate命令时,该用户的组身份会被临时地提升为locate命令所属组(slocate)的权限,而slocate组对mlocate.db具有r权限,因此查询成功

      ③命令结束后,执行命令的用户组身份返回原来的组。

    (2)设置目录的SGID

     

      ①首先以root身份创建/tmp/test目录,并赋予这个目录SGID权限

      ②切换到普通用户testUser,然后在家目录下随便创建一个abc文件,可以看出该文件的所属组为testUser。

      ③同样以testUser身份在/tmp/test目录下创建一个abc文件,会发现该文件的所属组为root,而不是testUser。这就是因为test这个目录具有了SGID权限,所有在该目录下创建的文件,其所属组都会变成test目录的所属组,而不是创建者所属组的身份

    2.3 Sticky BIT

    (1)SBIT粘着位作用

      ①粘着位目前只对目录有效

      ②普通用户对该目录拥用w和x权限,即普通用户可在此目录拥有写入权限

      ③如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下的所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件

    (2)设置和取消SBIT

      ①设置粘着位:chmod 1755 目录名,或者chmod o+t 目录名

      ②取消粘着位:chmod 755  目录名,或者chmod o-t 目录名

    (3)应用举例

     

      ①lisi用户在/tmp/目录下创建list_test.txt文件zhangsan试图删除这个文件由于/tmp/目录的粘着位权限的限制,会导致删除失败

      ②从/tmp/目录的权限可以看出,默认这个设置了SBIT权限。(普通用户的执行权限(execute)用”t”表示

      ③从这个例子中可以看到zhangsan可以看到lishi在/tmp/目录下创建的文件,但是不能删除该文件。注意,能不能删除目录下的文件,要看这个用户对该目录是否有写权限,从/tmp/的权限(drwxrwxrwt)可以看出,任何用户都有写权限,但由于SBIT粘着位的存在,导致只有文件创建者可以删除自己创建的文件,但无法删除别人创建的文件。

  • 相关阅读:
    项目总结—jQuery EasyUI- DataGrid使用
    浅谈Dynamic 关键字系列之三(上):ExpandoObject, DynamicObject, DynamicMetaObject
    巧用section在cshtml写入layout中写入head信息 ASP.NET MVC
    ASP.NET MVC Web API 学习笔记---第一个Web API程序
    JSON详解
    【js】JSON.stringify 语法实例讲解
    Linux软件安装方法
    链接文件之硬链接和软链接
    Linux操作系统启动界面(字符or图形界面)的设置及切换方法
    Linux操作系统安装与VMTools的安装
  • 原文地址:https://www.cnblogs.com/5iedu/p/6185616.html
Copyright © 2011-2022 走看看