`
isiqi
  • 浏览: 16352868 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Linux文件特殊权限 SUID/SGID/Sticky Bit

阅读更多
 前面一直提到文件的重要权限,就是rwx这3个读、写、执行的权限。但是,怎么 /tmp权限有些奇怪?还有, /usr/bin/passwd也有些奇怪,怎么回事呢?
[root@linux~]#ls-ld/tmp;ls-l/usr/bin/passwd
drwxrwxrwt5rootroot4096Jul2010:00/tmp
-r-s--x--x1rootroot18840Mar718:06/usr/bin/passwd

 不是只有rwx吗?为什么还有其他的特殊权限呢?不要担心,我们这里先不谈这两个权限,只是先介绍一下而已。因为必须要有账号的ID概念,以及程序的进程(process)概念后,才能够进一步了解这些特殊权限所表示的意义。
 
  Set UID
 
  会创建s与t权限,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有者的权限。举例来说,我们知道,账号与密码的存放文件其实是 /etc/passwd与 /etc/shadow.而 /etc/shadow文件的权限是“-r——”。它的拥有者是root.在这个权限中,仅有root可以“强制”存储,其他人是连看都不行的。
 
  但是,偏偏笔者使用dmtsai这个一般身份用户去更新自己的密码时,使用的就是 /usr/bin/passwd程序,却可以更新自己的密码。也就是说,dmtsai这个一般身份用户可以存取 /etc/shadow密码文件。这怎么可能?明明 /etc/shadow就是没有dmtsai可存取的权限。这就是因为有s权限的帮助。当s权限在user的x时,也就是类似 -r-s——x——x,称为Set UID,简称为SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有者(root)。那么,我们就可以知道,当dmtsai用户执行 /usr/bin/passwd时,它就会“暂时”得到文件拥有者root的权限。
 
  SUID仅可用在“二进制文件(binary file)”,SUID因为是程序在执行过程中拥有文件拥有者的权限,因此,它仅可用于二进制文件,不能用在批处理文件(shell脚本)上。这是因为shell脚本只是将很多二进制执行文件调进来执行而已。所以SUID的权限部分,还是要看shell脚本调用进来的程序设置,而不是shell脚本本身。当然,SUID对目录是无效的。这点要特别注意。
 
  Set GID
 
  进一步而言,如果s的权限是在用户组,那么就是Set GID,简称为SGID.SGID可以用在两个方面。
 
  文件:如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有效用户组(effective group)将会变成该程序的用户组所有者(group id)。
 
  目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将会是此A目录的用户组。
 
  一般来说,SGID多用在特定的多人团队的项目开发上,在系统中用得较少。
 
  Sticky Bit
 
  这个Sticky Bit当前只针对目录有效,对文件没有效果。SBit对目录的作用是:“在具有SBit的目录下,用户若在该目录下具有w及x权限,则当用户在该目录下建立文件或目录时,只有文件拥有者与root才有权力删除”。换句话说:当甲用户在A目录下拥有group或other的项目,且拥有w权限,这表示甲用户对该目录内任何人建立的目录或文件均可进行“删除/重命名/移动”等操作。不过,如果将A目录加上了Sticky bit的权限,则甲只能够针对自己建立的文件或目录进行删除/重命名/移动等操作。
 
  举例来说,/tmp本身的权限是“drwxrwxrwt”,在这样的权限内容下,任何人都可以在 /tmp内新增、修改文件,但仅有该文件/目录的建立者与root能够删除自己的目录或文件。这个特性也很重要。可以这样做个简单测试:
 
  1. 以root登入系统,并且进入 /tmp中。
 
  2. touch test,并且更改test权限成为777.
 
  3. 以一般用户登入,并进入 /tmp.
 
  4. 尝试删除test文件。
 
  更多关于SUID/SGID/Sticky Bit的介绍,我们会在第11章中再次提及,当前,先有简单的概念即可。
 
  SUID/SGID/SBIT权限设置
 
  前面介绍过SUID与SGID的功能,那么,如何打开文件使其成为具有SUID与SGID的权限呢?这就需要使用数字更改权限了。现在应该知道,使用数字更改权限的方式为“3个数字”的组合,那么,如果在这3个数字之前再加上一个数字,最前面的数字就表示这几个属性了(注:通常我们使用chmod xyz filename的方式来设置filename的属性时,则是假设没有SUID、SGID及Sticky bit)。
 
  4为SUID
 
  2为SGID
 
  1为Sticky bit
 
  假设要将一个文件属性改为“-rwsr-xr-x”,由于s在用户权限中,所以是SUID,因此,在原先的755之前还要加上4,也就是使用“chmod 4755 filename”来设置。此外,还有大S与大T的产生。参考下面的范例(注意:下面的范例只是练习而已,所以笔者使用同一个文件来设置,必须知道,SUID不是用在目录上,SBIT不是用在文件上)。

[root@linux~]#cd/tmp
[root@linuxtmp]#touchtest
[root@linuxtmp]#chmod4755test;ls-ltest
-rwsr-xr-x1rootroot0Jul2011:27test
[root
@linuxtmp]#chmod6755test;ls-ltest
-rwsr-sr-x1rootroot0Jul2011:27test
[root
@linuxtmp]#chmod1755test;ls-ltest
-rwxr-xr-t1rootroot0Jul2011:27test
[root
@linuxtmp]#chmod7666test;ls-ltest
-rwSrwSrwT1rootroot0Jul2011:27test
 # 这个例子要特别小心。怎么会出现大写的S与T呢?不都是小写的吗?
 
  # 因为s与t都是取代x参数的,但是,我们是使用
 
  # 7666.也就是说,user、group以及others都没有x这个可执行的标志
 
  # (因为666)。所以,S、T表示“空的”。
 
  # SUID是表示“该文件在执行时,具有文件拥有者的权限”,但文件
 
  # 拥有者都无法执行了,哪里来的权限给其他人使用呢?当然就是空的
 
  文件隐藏属性
 
  文件有隐藏属性,隐藏属性对系统有很大的帮助。尤其是在系统安全(Security)方面,非常重要。下面我们就来谈一谈如何设置与检查这些隐藏的属性。
 
  chattr(设置文件隐藏属性)
 
  [root@linux ~]# chattr [+-=][ASacdistu] 文件或目录名
 
  参数:
 
  + : 增加某个特殊参数,其他原本存在的参数不动。
 
  - : 删除某个特殊参数,其他原本存在的参数不动。
 
  = : 设置一定,且仅有后面接的参数
 
  A : 当设置了A属性时,这个文件(或目录)的存取时间atime(access)将不可被修改,可避免例如手提电脑有磁盘I/O错误的情况发生。
 
  S : 这个功能有点类似sync.就是将数据同步写入磁盘中。可以有效地避免数据流失。
 
  a : 设置a之后,这个文件将只能增加数据,而不能删除,只有root才能设置这个属性。
 
  c : 这个属性设置之后,将会自动将此文件“压缩”,在读取的时候将会自动解压缩,但在存储的时候,将会先进行压缩后再存储(对于大文件有用)。
 
  d : 当执行dump(备份)程序的时候,设置d属性将可使该文件(或目录)具有转储功效。
 
  i : i的作用很大。它可以让一个文件“不能被删除、改名、设置连接,也无法写入或新增数据”。对于系统安全性有相当大的帮助。
 
  j : 当使用ext3文件系统格式时,设置j属性将会使文件在写入时先记录在journal中。但是,当文件系统设置参数为data=journalled时,由于已经设置日志了,所以这个属性无效。
 
  s : 当文件设置了s参数时,它将会从这个硬盘空间完全删除。
 
  u : 与s相反,当使用u来设置文件时,则数据内容其实还存在磁盘中,可以用来还原删除。
 
  注意:这个属性设置上,比较常见的是a与i的设置值,而且很多设置值必须要root才能设置。
 
  范例:
[root@linux~]#cd/tmp
[root@linuxtmp]#touchattrtest
[root@linuxtmp]#chattr
+iattrtest
[root@linuxtmp]#rmattrtest
rm:removewrite
-protectedregularemptyfile`attrtest'?y
rm:cannotremove`attrtest':Operationnotpermitted
 # 看到了吗?连root也没有办法删除这个文件。赶紧解除设置。
 
  [root@linux tmp]# chattr -i attrtest
 
  这个命令很重要,尤其是在系统的安全性方面。由于这些属性是隐藏的,所以需要用lsattr才能看到。笔者认为,最重要的是 +i属性,因为它可以让一个文件无法被更改,对于需要很高系统安全性的人来说,相当重要。还有相当多的属性是需要root才能设置的。此外,如果是登录文件,就更需要 +a参数,使之可以增加但不能修改与删除原有的数据。将来提到登录文件时,我们再来介绍如何设置它。
 
  lsattr(显示文件的隐藏属性)
 
  [root@linux ~]# lsattr [-aR] 文件或目录
 
  参数:
 
  -a : 将隐藏文件的属性也显示出来。
 
  -R : 连同子目录的数据也一并列出来。
 
  范例:
 
  [root@linux tmp]# chattr +aij attrtest
 
  [root@linux tmp]# lsattr
 
 ----ia---j--- ./attrtest
 
  使用chattr设置后,可以利用lsattr来查看隐藏属性。不过,这两个命令在使用上必须要特别小心,否则会造成很大的困扰。例如,某天你心情好,突然将 /etc/shadow这个重要的密码记录文件设置为具有i属性,那么,过了若干天之后,突然要新增用户,却一直无法新增。怎么办?将i的属性去掉即可。
分享到:
评论

相关推荐

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

    通过本文详细介绍的 SUID、SGID 和 Sticky Bit 这三种特殊的文件权限,我们可以更加深入地理解 Linux 文件系统的权限控制机制。这些特殊的权限不仅增强了系统的安全性,同时也为用户提供了更多的灵活性。掌握这些...

    特殊权限SUID SGID SBIT.doc

    例如,要将一个文件权限修改为 -rwsr-xr-x 时,因为 s 在用户权限中,所以是 SUID,因此在原先的 755 之前还要加上 4,也就是 chmod 4755 filename 来设置和设置普通的权限一样。如果要设置 SUID 又要设置 SGID,则...

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

    普通用户和管理员通常了解基础的读(r)、写(w)和执行(x)权限,但Linux还提供了三种特殊的权限:SUID (Set User ID)、SGID (Set Group ID) 和SBIT (Sticky Bit)。这些特殊权限在特定情况下能赋予用户超出他们原本权限...

    Linux基础课件特殊权限设置SGID权限共9页.pdf

    - 这种机制允许团队成员在保持个人隐私的同时,方便地共享和协作,避免了频繁更改文件权限的问题。 3. **设置SGID权限**: - 使用`chmod`命令可以为文件或目录添加SGID权限。对于文件,可以输入`chmod g+s 文件名...

    linux中特殊权限问题

    本文将深入探讨Linux中的特殊权限SUID、SGID和SBIT,以及与进程相关的ID。 首先,我们来看Linux中的用户和权限。用户分为两种类型:超级用户(root)和普通用户。超级用户拥有系统的所有权限,而普通用户则受到一定...

    linux-文件权限

    本文将深入解析Linux文件权限的核心知识点,包括基本的权限类型、特殊权限(如SUID、SGID和sticky bit)以及如何使用`chmod`命令来修改这些权限。 ### 基本权限类型 在Linux中,每个文件或目录都有三种基本的权限...

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

    SUID、SGID和SBIT是Linux文件权限中三个特殊的位,它们提供了超出常规权限的特定功能,使得非所有者用户能够在某些情况下以拥有者或特定组的权限执行文件。 **SUID(Set-User-ID)** 是Linux权限系统中的一个重要...

    linux文件权限设置.docx

    在 Linux 中,还有三种特殊权限:SUID、SGID 和 Sticky Bit。 * SUID(Set User ID):如果设置了 SUID 的可执行文件被执行,文件将以所有者的身份来运行。 * SGID(Set Group ID):意思同 SUID,设置了 SGID 的可...

    Linux基础课件特殊权限设置SBIT权限共9页.pdf

    本次课件主要聚焦于一个特殊的权限设置——Set-User-ID(SUID)和Set-Group-ID(SGID),以及一个不那么常见的Sticky Bit(SBIT)。这三种权限在特定场景下能提供额外的安全性和功能,下面我们将深入探讨这些概念。 ...

    Linux中目录与文件的特殊权限位教学分析.pdf

    例如,创建一个具有SUID、SGID和Sticky Bit的文件或目录,然后模拟不同用户的行为,观察权限如何影响他们的操作。 3. **特殊情况** - **文件所有者即使没有写权限,也可能通过覆盖写入强制完成写操作。** - **...

    4-6文件的特殊权限.pdf

    在Linux操作系统中,文件权限是安全管理的核心组成部分。为了满足不同场景下的需求,除了基础的读(r)、写(w)和执行(x)权限之外,还存在三种特殊的权限:Set User ID (SUID)、Set Group ID (SGID) 和 Sticky Bit ...

    Linux服务器配置与管理:linux权限基础.pptx

    在表示上,SUID和SGID在权限字符串中用"s"表示,而Sticky Bit用"t"表示。当执行权限存在时,"s"代表SUID或SGID,没有执行权限时,显示为"S"。Sticky Bit则占据"其他"用户的执行权限位置,用"t"表示,如果没有执行...

    linux基础权限介绍

    ### Linux基础权限详解 #### 一、文件与目录权限概览 在Linux系统中,文件和目录的权限管理是至关重要的。...此外,掌握特殊权限如SUID、SGID和Sticky Bit的使用场景,有助于进一步提升系统的安全性。

    11-RHEL7-Linux文件权限管理

    特殊权限位有SUID(Set User ID)、SGID(Set Group ID)和SBIT(Sticky Bit)。SUID当应用于可执行文件时,使得任何用户在执行该文件时获得文件所有者的权限;SGID使得执行该文件的用户获得文件所属用户组的权限;...

    Linux系统中文件权限说明

    ### Linux系统中文件权限说明 在Linux系统中,文件权限管理是极其重要的组成部分之一,它不仅关乎系统的安全性,还直接影响到用户对文件的操作权限。本文将深入探讨Linux系统中的文件权限概念及其设置方法。 #### ...

    管理文件权限和所有权

    除了常规的权限位之外,Linux还提供了一些特殊的权限位,包括suid、sgid和粘贴位(sticky bit)。 - **suid (Set User ID)**: 当文件被以suid权限运行时,进程会获得文件所有者的权限。这常用于需要提升权限执行的...

    03-Linux文件和目录1

    **2.2 文件权限** 在 Linux 中,文件和目录都有各自的权限设置,这些权限决定了用户对它们的操作权限。权限可以分为三类: - **所有者权限 (User)**:文件的所有者的权限。 - **组权限 (Group)**:文件所属组的...

    shell编程经典书籍

    - **perm**:r (read), w (write), x (execute), s (SUID/SGID), t (sticky bit)。 - **绝对模式**: - `chmod mode file_name` - **mode**:4位八进制数,前两位代表SUID/SGID权限,后三位分别代表属主、同组...

    Linux系统权限讲义

    除了基本的用户权限,还有特殊权限位,如Set-User-ID(SUID)、Set-Group-ID(SGID)和 Sticky Bit。SUID允许非所有者以所有者的权限运行程序,这在执行如`passwd`这样的系统命令时非常有用。SGID则允许非组成员以组...

Global site tag (gtag.js) - Google Analytics