• Linux文件权限与属性详解 之 SUID、SGID&SBIT


    一、SetUID

    1.Linux普通用户可以修改自己的密码,这个是一个合情合理的设置;

    修改密码其实修改的是/etc/shadow这个文件,这个文件的属性:

    ----------. 1 root root 1476 7月  30 16:15 /etc/shadow

    很明显普通用户对/etc/shadow文件没有任何权限,这里就牵扯到了 SetUID 权限:

    修改密码的流程其实就是通过/usr/bin/passwd命令对/etc/shadow进行修改:

    $ ll /usr/bin/passwd

    -rwsr-xr-x. 1 root root 27832 6月  10 2014 /usr/bin/passwd

    此文件的第三位是s权限,也就是咱们即将要讲解的的setUID权限.

    2.SetUID(或者s权限):

    当一个具有执行权限的文件设置SetUID权限后,
    用户执行这个文件时将以文件所有者的身份执行.
    passwd命令具有SetUID权限,所有者为root(Linux中的命令默认所有者都是root),
    也就是说当普通用户使用passwd更改自己密码的时候,
    那一瞬间突然"灵魂附体"了,实际上是以passwd命令所有者root的身份在执行,
    root当然可以将密码写入/etc/shadow文件.
    命令执行完成后该身份也随之消失.
    

    3.必须具备以下几个条件才能设置SetUID权限:

    a.只有可执行的二进制程序才可以设置SetUID;
    b.所有者必须对欲设置SetUID的文件具备可执行(x)权限;
    c.命令执行过程中,其它用户获取所有者的身份;
    d.SetUID具有时间限制,即完成该程序执行后就消失.
    

    4.设置SetUID:

    chmod 4xxx < file-name >
    chmod u+s < file-name >
    取消SetUID
    chmod xxx < file-name >
    chmod u-s < file-name >
    

    5.例子

    $ touch hehe
    $ ll hehe
    -rw-rw-r-- 1 xiaozuanfeng xiaozuanfeng 0 10月 27 11:36 hehe
    $ sudo chmod u+s /usr/bin/touch
    用普通用户再新建一个文件:
    $ touch hehe2
    -rw-rw-r-- 1 xiaozuanfeng xiaozuanfeng 0 10月 27 11:36 hehe
    -rw-rw-r-- 1 root         xiaozuanfeng 0 10月 27 11:38 hehe2
    在设置了SetUID之后,新建文件的所有者为root了,说明在执行touch的时候,
    用户自动升级为了所有者,灵魂附体了!
    

    6.设置SetUID是具备很大危险性的,例如赋予 vim 这个权限:

    # ll /usr/bin/vim
    -rwxr-xr-x. 1 root root 1967072 2月  17 2012 /usr/bin/vim
    # chmod u+s /usr/bin/vim
    此时普通用户可以用vim打开任何文件了,很危险!所以,我们需要
    定时查看系统中有哪些设置了SetUID权限,对不明物体进行实时打击!
    

    二、SetGID

    1.设置和取消SetGID

    chmod 2xxx

    chmod xxx

    2.以locate命令进行讨论:

    locate查询比find要快很多,为什么?因为其实搜索的数据库而非整个硬盘:
    # ll /usr/bin/locate
    -rwx--s--x. 1 root slocate 40496 6月  10 2014 /usr/bin/locate
    用普通用户进行locate查看:
    $ locate mlocate.db
    /usr/share/man/man5/mlocate.db.5.gz
    去掉locate的s权限
    # chmod g-s /usr/bin/locate
    再次用普通用户查看时,就会权限不够
    即:当执行locate命令时,普通用户**自动升级为slocate的组成员
    

    三、SBIT粘滞位

    1.设置和取消SBIT

    chmod 1xxx < dir-name > 
    chmod o+t < dir-name >
    取消SBIT
    chmod xxx < dir-name >
    chmod o-t < dir-name >
    a.只对目录有效
    b.普通用户对该目录有w和x权限
    c.若没有粘滞位,则普通用户可以对目录下的文件/子目录进行删除操作,
    因为普通用户对目录具有w权限,包括其它用户建立的目录/文件;但若赋了SBIT,
    则普通用户只能删除自己创建的文件/目录,而不能删除不属于自己的文件/目录!
    

    2.以/tmp为例:

    $ ll -d /tmp/
    drwxrwxrwt. 8 root root 4096 7月 30 19:40 /tmp/
    /tmp目录的权限other部分为rwt,这个t就是我们设置的粘滞位
    $ touch test-file
    $ mkdir test-dir
    切换到另外一个用户-oldboy
    $ rm -rf test-dir/ test-file
    rm: 无法删除"test-dir/": 不允许的操作
    切换到root,去掉/tmp的粘滞位
    再切换到oldboy,再次删除/tmp下的文件,发现可以删除.
    

    参考博客:http://www.cnblogs.com/Jimmy1988/p/7260215.html

  • 相关阅读:
    135 01 Android 零基础入门 02 Java面向对象 07 Java多态 03 多态的实现(难点) 02 向上转型
    leetcode-----169. 多数元素
    leetcode-----167. 两数之和 II
    leetcode-----136. 只出现一次的数字
    leetcode-----125. 验证回文串
    leetcode-----122. 买卖股票的最佳时机 II
    java实体类和json串字段名称不一致或者与map中字段名称不一致使用注解转化
    如何优雅的将Object转换成List
    java中远程调用接口springboot
    返回前端页面的属性名称和实体类的名称不一致用@JsonProperty
  • 原文地址:https://www.cnblogs.com/fawaikuangtu123/p/9868666.html
Copyright © 2020-2023  润新知