`
notfatboy
  • 浏览: 237503 次
  • 性别: 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位,那么如果任何一个用户对这个目录有写权限的话,他在这个目录所建立的文件的组都会自动转为这个目录的属主所在的组,而文件所有者不变,还是属于建立这个文件的用户。

分享到:
评论

相关推荐

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

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

    Linux文件特殊权限SGID-UID详解

    ### Linux 文件特殊权限 SGID/SUID/Sticky Bit 详析 #### 一、引言 在 Linux 操作系统中,为了实现更为灵活和安全的权限管理机制,除了基本的读(r)、写(w)、执行(x)权限外,还引入了一些特殊的权限控制方式,包括 ...

    linux常用命令详解.doc

    - `[rwxXstugo…]` 表示读 (r)、写 (w)、执行 (x)、SUID (S)、SGID (s)、sticky bit (t) 和特殊文件类型 (X)。 - **说明**: - 文件模式控制了与该文件相关的访问权限。 - 对于标准文件,读权限允许查看文件内容;...

    chmod命令使用详解

    - **SetGID (SGID)**:类似于 SUID,但应用于组。 - **Sticky Bit (T)**:当一个目录设置了 Sticky Bit 位时,只有文件的所有者或者 root 用户才能删除或重命名文件。 #### 实例 - **设置所有者和同组用户的读取和...

    shell script详解

    - `-u`, `-g`, `-k`:检测SUID、SGID和Stickybit属性。 - `-s`:检查文件非空。 ##### 2. 文件比较 - `-nt`, `-ot`:比较两个文件的新旧程度。 - `-ef`:判断两个文件是否指向同一个inode。 ##### 3. 数值比较 - `...

    从0开始学服务器运维第六章

    【Linux服务器运维:权限管理详解】 在Linux操作系统中,服务器运维是至关重要的,它涉及到系统的稳定性和安全性。学习Linux运维需要深入理解权限管理,这是确保系统资源得到有效控制的基础。本章将详细介绍Linux...

    linux与unix_shel编程经典教程(第二版).pdf

    - SGID: 类似于SUID,但作用于文件组权限,当执行者执行带有SGID标志的文件时,其组ID (GID) 将被替换为文件所属组的GID。 - SUID或SGID标志通常只会在文件的执行权限被设置的情况下才有效。 - 特殊情况下的SUID/...

    linux shell编程if语句内判断参数详解

    Linux Shell 编程 if 语句内判断参数详解 Linux Shell 编程中,if 语句是一种基本的控制结构,用于根据条件执行不同的操作。if 语句可以与各种参数结合使用,以判断文件、目录、字符串、数字等的状态,从而执行相应...

    linux系统644、755、777权限详解.docx

    在 Linux 系统中,还有许多其他的权限设置,例如 Sticky Bit、SUID 和 SGID 等。这些权限设置可以对文件和目录进行更加详细的访问控制,从而提高系统的安全性和稳定性。 权限设置是 Linux 系统中非常重要的一部分。...

    linux的chmod使用详解

    除了基本的rwx权限,Linux还提供了特殊权限位,如SUID(Set User ID)、SGID(Set Group ID)和Sticky Bit(粘滞位)。例如,使用`chmod 4755 filename`可以为程序设置SUID权限,这意味着当非root用户运行此程序时,...

    linux系统安全加固规范

    ### Linux系统安全加固规范知识点详解 #### 一、概述 - **目的**:制定一套Linux系统安全加固标准,旨在提高Linux系统的安全性,防止因系统漏洞而遭受攻击。 - **适用范围**:适用于所有Linux服务器系统管理员、...

    linux 编程

    ### Linux与Unix Shell编程基础知识详解 #### 一、文件安全与权限 在Linux与Unix操作系统中,文件的安全性和权限管理是非常重要的概念。了解这些基础知识对于进行有效的编程和系统管理至关重要。 ##### 1. 文件的...

    busybox配置

    - **Runtime SUID/SGID configuration via /etc/busybox.conf**:通过检查/etc/busybox.conf文件来动态配置SUID/SGID权限状态。 - **Suppress warnings**:抑制警告信息,可以避免一些不必要的警告输出。 通过上述...

    linux下的test命令详解

    - `-g file`:文件设置了SGID位。 - `-G file`:文件属于指定组。 - `-k file`:文件设置了粘滞位。 - `-O file`:文件属于当前用户。 - `-p file`:文件是命名管道。 - `-r file`:文件可读。 - `-s file`:...

    linux入门教程PPT

    - **特殊权限**:SUID、SGID、Sticky Bit等。 - **访问控制列表** (ACL):提供更精细的文件访问控制。 #### 七、Linux实战 - **环境搭建**:如构建开发环境、设置网络配置等。 - **自动化脚本编写**:利用Shell...

    linux创建用户与目录权限精讲.docx

    ### Linux 创建用户与目录权限详解 #### 一、用户账户管理 在Linux系统中,用户账户的管理和维护是一项重要的任务,涉及到系统的安全性和资源的有效利用。 ##### 1.1 创建用户账户 - **useradd 命令**:用于创建...

    深蓝linux培训教程

    - 特殊权限:SUID、SGID、SBIT。 - **文件查找**: - `which`:查找可执行文件位置。 - `whereis`:查找命令的手册页或源代码位置。 - `locate`:快速定位文件。 - `find`:根据多种条件查找文件。 - **压缩...

Global site tag (gtag.js) - Google Analytics