`
notfatboy
  • 浏览: 235263 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转: SUID、SGID 详解

 
阅读更多

转自:http://blog.csdn.net/lonelycloud/article/details/469545

 

一、Linux下关于文件权限的表示方法和解析 

    SUID 是 Set User ID, SGID 是 Set Group ID的意思。 

    Linux下可以用ls -l 命令来看到文件的权限。用ls命令所得到的表示法的格式是类似这样的:-rwxr-xr-x 。下面解析一下格式所表示的意思。 
    这种表示方法一共有十位: 
    9 8 7 6 5 4 3 2 1 0 
    - r w x r - x r - x 
    第9位表示文件类型,可以为p、d、l、s、c、b和-: 
        p表示命名管道文件 
        d表示目录文件 
        l表示符号连接文件 
        -表示普通文件 
        s表示socket文件 
        c表示字符设备文件 
        b表示块设备文件 
    第8-6位、5-3位、2-0位分别表示文件所有者的权限,同组用户的权限,其 

    他用户的权限,其形式为rwx: 
        r表示可读,可以读出文件的内容 
        w表示可写,可以修改文件的内容 
        x表示可执行,可运行这个程序 
        没有权限的位置用-表示 
    例子: 
        ls -l myfile显示为: 
        -rwxr-x---   1 foo   staff  7734 Apr 05 17:07 myfile 
    表示文件myfile是普通文件,文件的所有者是foo用户,而foo用户属于staff 
    组,文件只有1个硬连接,长度是7734个字节,最后修改时间4月5日17:07。

    所有者foo对文件有读写执行权限,staff组的成员对文件有读和执行权限,其他的用户对这个文件没有权限。 如果一个文件被设置了SUID或SGID位,会分别表现在所有者或同组用户的权限的可执行位上。例如: 
        1、-rwsr-xr-x 表示SUID和所有者权限中可执行位被设置 
        2、-rwSr--r-- 表示SUID被设置,但所有者权限中可执行位没有被设置

        3、-rwxr-sr-x 表示SGID和同组用户权限中可执行位被设置 
        4、-rw-r-Sr-- 表示SGID被设置,但同组用户权限中可执行位没有被社

    其实在Linux的实现中,文件权限用12个二进制位表示,如果该位置上的值是

    1,表示有相应的权限: 
    11 10 9 8 7 6 5 4 3 2 1 0 
     S  G T r w x r w x r w x 
    第11位为SUID位,第10位为SGID位,第9位为sticky位,第8-0位对应于上面

    的三组rwx位。 
                            11 10 9 8 7 6 5 4 3 2 1 0 
    上面的-rwsr-xr-x的值为: 1  0 0 1 1 1 1 0 1 1 0 1 
          -rw-r-Sr--的值为: 0  1 0 1 1 0 1 0 0 1 0 0  

    给文件加SUID和SUID的命令如下: 
    chmod u+s filename   设置SUID位 
    chmod u-s filename   去掉SUID设置 
    chmod g+s filename   设置SGID位 
    chmod g-s filename   去掉SGID设置 
    另外一种方法是chmod命令用八进制表示方法的设置。如果明白了前面的12位
权限表示法也很简单。 

二、SUID和SGID的详细解析 

    由于SUID和SGID是在执行程序(程序的可执行位被设置)时起作用,而可执行位只对普通文件和目录文件有意义,所以设置其他种类文件的SUID和SGID位是没有多大意义的。 
    首先讲普通文件的SUID和SGID的作用。例子: 
    如果普通文件myfile是属于foo用户的,是可执行的,现在没设SUID位,ls命令显示如下: 
    -rwxr-xr-x   1 foo   staff  7734 Apr 05 17:07 myfile 
    任何用户都可以执行这个程序。UNIX的内核是根据什么来确定一个进程对资源的访问权限的呢?是这个进程的运行用户的(有效)ID,包括user id和group id。用户可以用id命令来查到自己的或其他用户的user id和group id。 
    除了一般的user id 和group id外,还有两个称之为effective 的id,就是有效id,上面的四个id表示为:uid,gid,euid,egid。内核主要是根据euid和egid来确定进程对资源的访问权限。 
    一个进程如果没有SUID或SGID位,则euid=uid egid=gid,分别是运行这个程序的用户的uid和gid。例如kevin用户的uid和gid分别为204和202,foo用户的uid 和gid为200,201,kevin运行myfile程序形成的进程的euid=uid=204,egid=gid= 202,内核根据这些值来判断进程对资源访问的限制,其实就是kevin用户对资源访问的权限,和foo没关系。 
    如果一个程序设置了SUID,则euid和egid变成被运行的程序的所有者的uid和gid,例如kevin用户运行myfile,euid=200,egid=201,uid=204,gid=202,则这个进程具有它的属主foo的资源访问权限。 
    SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子。 
    SUID的优先级比SGID高,当一个可执行程序设置了SUID,则SGID会自动变成相应的egid。 
    下面讨论一个例子: 
    Linux系统有一个/dev/kmem的设备文件,是一个字符设备文件,里面存储了核心程序要访问的数据,包括用户的口令。所以这个文件不能给一般的用户读写,权限设为:cr--r-----   1 root     system     2,  1 May 25 1998  kmem 
但ps等程序要读这个文件,而ps的权限设置如下: 
-r-xr-sr-x   1 bin      system     59346 Apr 05 1998  ps 
这是一个设置了SGID的程序,而ps的用户是bin,不是root,所以不能设置SUID来访问kmem,但大家注意了,bin和root都属于system组,而且ps设置了SGID,一般用户执行ps,就会获得system组用户的权限,而文件kmem的同组用户的权限是可读,所以一般用户执行ps就没问题了。但有些人说,为什么不把ps程序设置为root用户的程序,然后设置SUID位,不也行吗?这的确可以解决问题,但实际中为什么不这样做呢?因为SGID的风险比SUID小得多,所以出于系统安全的考虑,应该尽量用SGID代替SUID的程序,如果可能的话。 
    下面来说明一下SGID对目录的影响。SUID对目录没有影响。 
    如果一个目录设置了SGID位,那么如果任何一个用户对这个目录有写权限的话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而文件所有者不变,还是属于建立这个文件的用户。

分享到:
评论

相关推荐

    特殊权限SUID SGID SBIT.doc

    特殊权限SUID SGID SBIT.doc

    linux中SUID,SGID与SBIT的奇妙用途详解

    linux对文件的权限管理简直是让人叹为观止,又回顾了一下SUID,SGID和SBIT的作用,总结一下。 其实SUID和SGID的作用跟sudo是相似的。当用户A想执行一个原本属于用户B的可执行文件时,若B的文件设置了suid位,则A在...

    第7章-文件系统基本权限和高级权限管理1

    第七章 Centos7-文件权限管理本节所讲内容:7.1文件的基本权限:r w x (UGO)7.2文件的特殊权限:suid sgid sticky和文件扩展权

    Linux中特殊权限SUID、SGID与SBIT的深入讲解

    linux对文件的权限管理简直是让人叹为观止,所以这篇文章主要给大家介绍了关于Linux中特殊权限SUID、SGID与SBIT的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

    suid-locate:在Linux系统中轻松找到带有SUID或SGID位的文件

    SUID定位 正确使用带有SUID / SGID的文件可能非常方便,但是,它会使您的系统面临许多安全风险。 SUID-Locate可以在Linux系统中轻松找到带有SUID或SGID位的文件。 作者 Kfir Shtober(Kfiros)2015

    linux基础教程之特殊权限SUID、SGID和SBIT

    主要给大家介绍了关于linux基础教程之特殊权限SUID、SGID和SBIT的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    13671648877#MyNote#07_04_特殊权限suid等详解1

    否则显示为S.用户权限不够查看:修改cat 命令,增加suid权限:现在用cat命令访问使用的是root属主则chloroplast用户可以查看:运行某程序时,

    linux之特殊权限

    SUID: 默认情况下:用户发起的进程,进程的属主是其发起者:因此其以发起者的身份在运行 SUID的功用:用户运行某程序时,如果此程序拥有SUID权限,那程序运行为进程时,其属主不是发起者,而程序文

    linux suid权限维持速查表1

    linux suid权限维持速查表linux suid 权限维持速查表赋权姿势:linux suid权限维持速查表linux suid权限维持速查表linux

    Linux内核溢出测试

    sh a 364 suid.c: In function 'main': suid.c:3: warning: incompatible implicit declaration of built-in function 'execl' sh-3.1# id uid=0(root) gid=0(root)

    ACAD-开源

    自动计算机审核守护程序-跟踪系统的状况:suid,sgid,世界可写,隐藏和不拥有文件的监视以及定期发送到您邮箱的重要文件的md5sums管理审核。

    Linux操作系统实验二.doc

    文件的特殊权限: SUID、 SGID 和Sticky 4、文件的链接: (文件和目录名自拟、自行设计实验步骤) (1)硬链接:不带选项,ln命令创建硬链接。在另外的目录或本目录中增加目标文件的一个目录项,一个文件就登记在多个...

    perl-suid_5.8.8-12ubuntu0.5_i386(1).deb

    Perl是流行的跨平台编程语言。 部分Perl脚本在处理PERLIO_DEBUG变量时存在问题,本地攻击者可以利用这个漏洞破坏系统文件或进行缓冲区溢出攻击。

    postenum:Linux枚举和特权升级工具

    用法: ./postenum.sh [option]./postenum.sh -s./postenum.sh s./postenum.sh -c./postenum.sh c选项: -a : All (not recommended)-s : Filesystem [SUID, SGID, Config/DB files, etc.]-l : Shell escape, ...

    linux提取辅助脚本

    linux提取辅助脚本-自动扫描suid,sgid,特权用户等

    GTFONow:错误配置功能,sudo和suid二进制文件的自动特权升级

    错误配置的功能,sudo和suid二进制文件的自动特权升级。 特征 使用错误配置的sudo权限自动升级特权。 使用错误配置的suid权限自动升级特权。 使用错误配置的功能自动升级特权。 支持Python 2和3。 无需第三方库...

Global site tag (gtag.js) - Google Analytics