zoukankan      html  css  js  c++  java
  • 文件特殊权限:SUID,SGID,SBIT

    我们之前认识的文件的权限仅局限于r,w,x,但如果我们执行命令“ll /tmp; ll /usr/bin/passwd”,会出现除了r,w,x之外的其他字母:

    即出现了特殊权限(s跟t)。

    【SetUID】

    当s这个标志出现在文件所有者的x权限上时,此时就被称为Set UID,简称为SUID的特殊权限。

    我们认识一下SUID的权限对于文件的功能:

    1. SUID权限仅对二进制程序(binary program)有效;
    2. 执行者对于该程序需要具有x的可执行权限;
    3. 本权限仅在执行该程序的过程中(run-time)有效;
    4. 执行者将具有该程序所有者(owner)的权限。

    举个例子,我们的Linux系统中,所有账号的密码都记录在/etc/shadow这个文件里面,这个文件的权限为“-r-------- 1 root root”,意思是这个文件仅有root可读且仅有root可以强制写入而已。既然这个文件仅有root可以修改,那为什么liuyu这个一般账号用户却能自行修改自己的密码呢?

    明明/etc/shadow的权限就不能让liuyu这个一般账号去访问的,为什么liuyu还能够修改这个文件内的密码呢?

    这就是SUID的功能了!!

    由上述介绍的功能,我们可以知道:

    1. liuyu对于/usr/bin/passwd这个程序来说是具有x权限的,表示liuyu能执行passwd;
    2. passwd的拥有者是root这个账户;
    3. liuyu执行passwd的过程中,会“暂时”获得root的权限;
    4. /etc/shadow可以被liuyu所执行的passwd所修改。

    但如果liuyu使用cat却不能读取/etc/shadow!!这是因为cat不具有SUID的权限,所以liuyu执行“cat /etc/shadow”是不能读取/etc/shadow的。

    此外,SUID仅可用在二进制程序上,不能够用在shell script上面。这是因为shell script只是将很多的二进制执行文件调进来执行而已。所以SUID的权限部分,还是得要看shell script调用进来的程序的设置,而不是shell script本身。当然,SUID对于目录也是无效的!!

    【Set GID】

    当s这个标志出现在用户组的x权限上时,此时就被称为Set UID, SUID。

    与SUID不同的是,SGID既可以针对文件,也可以针对目录来设置。

    对文件来说,SGID具有如下功能:

    SGID对二进制程序有用;

    程序执行者对于该程序来说,需具备x的权限;

    执行者在执行的过程中将会获得该程序用户组的支持。

    当一个目录设置了SGID的权限后,它将具有如下的功能:

    用户若对于此目录具有r与x的权限时,该用户能够进入此目录;

    用户在此目录下的有效用户组将会变成该目录的用户组;

    若用户在此目录下具有w的权限(可以创建文件),则用户所创建的新文件的用户组与此目录的用户组相同。

    SGID对于项目开发来说是非常重要的,因为这涉及用户组权限的问题。

    【Sticky Bit】

    这个SBIT目前只针对目录有效,对于文件已经没有效果了。

    SBIT对于目录的作用是:

    当用户

  • 相关阅读:
    error C2054: 在“inline”之后应输入“(”
    SendInput模拟键盘操作
    获取广电高清直播源
    Lua使用luasocket http请求例子
    枚举所有继承特定接口的类
    Stream Byte[] 转换
    async await
    C# ServiceStack.Redis 操作对象List
    resharper安装后,一不小心点错了(选择了object browser)
    fiddler 挂载 JS文件
  • 原文地址:https://www.cnblogs.com/xzxl/p/7518468.html
Copyright © 2011-2022 走看看