`
binyan17
  • 浏览: 203612 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

Linux权限位)(S位)

阅读更多

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

UNIX下关于文件权限的表示方法和解析

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

  UNIX下可以用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表示可执行,可运行这个程序

  没有权限的位置用-表示


  其实在UNIX的实现中,文件权限用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的详细解析

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@linux tmp]# touch test
[root@linux tmp]# chmod 4755 test; ls -l test
-rwsr-xr-x 1 root root 0 Jul 20 11:27 test
[root@linux tmp]# chmod 6755 test; ls -l test
-rwsr-sr-x 1 root root 0 Jul 20 11:27 test
[root@linux tmp]# chmod 1755 test; ls -l test
-rwxr-xr-t 1 root root 0 Jul 20 11:27 test
[root@linux tmp]# chmod 7666 test; ls -l test
-rwSrwSrwT 1 root root 0 Jul 20 11:27 test

 

# 这个例子要特别小心。怎么会出现大写的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@linux tmp]# touch attrtest
[root@linux tmp]# chattr +i attrtest
[root@linux tmp]# rm attrtest
rm: remove write-protected regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted

 

# 看到了吗?连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 文件权限设置技巧

    有两种方法来操作:一种是使用符号方式,例如 `chmod u+s temp` 可以为 temp 文件加上 setuid 权限位;另一种是使用八进制方式,例如 `chmod 4666 temp` 可以为 temp 文件加上 setuid 权限位。使用八进制方式时,...

    linux基础权限介绍

    - 在权限列表中,如果属主的执行权限位为`s`,则表示该文件具有SUID权限。 - **SGID**(Set Group ID on execution): - 运行具有SGID权限的程序时,该程序将以文件的属组身份运行,而不是以启动者的属组身份...

    Linux修改文件及文件夹权限

    - **模式** (`mode`):`r`读权限,`w`写权限,`x`执行权限,`s`设置UID或GID,`t`粘滞位,`u`、`g`、`o`分别表示与所有者、同组用户、其他用户相同的权限。 例如,`chmod g+r,o+r example`会为同组用户和其他用户...

    LINUX 权限机制实例

    在Linux系统中,权限机制是其安全模型的核心组成部分。它允许系统管理员精细控制用户和组对文件和目录的访问权限,以确保数据的安全性和隐私。本实例将介绍如何利用Linux...这充分体现了Linux权限机制的强大和灵活性。

    linux系统权限总结

    在深入探讨Linux系统权限之前,我们首先应当理解其基本架构与设计原则。Linux作为一种开源的类Unix操作系统,其权限管理机制是确保系统安全与稳定的关键因素之一。在Linux环境中,每个文件或目录都有对应的权限设置...

    恢复LINUX权限

    在 Linux 中还存在一些特殊的权限位,例如 SetUID (SUID) 和 SetGID (SGID)。这些特殊权限位允许一个普通用户以文件所有者的身份执行文件。例如,要使 `/usr/bin/passwd` 和 `/usr/bin/su` 命令具有 SUID 权限,可以...

    08-Linux权限设置

    "Linux权限设置详解" Linux权限设置是Linux系统中的一项重要功能,用于控制用户对文件和目录的访问权限。在Linux系统中,文件和目录的权限是通过Access Control List(ACL)来实现的。ACL是一个表,记录着文件或...

    linux有效用户和实际用户的区别以及权限中的S借鉴.pdf

    "Linux 有效用户和实际用户的区别以及权限中的S借鉴" Linux 操作系统中,存在着有效用户和实际用户的概念,这两者之间的区别在于权限的继承和执行。有效用户是指当前进程的所有者,而实际用户是指启动该进程的用户...

    linux 权限 c,Linux下获取root权限的c程序

    Linux下获取root权限的c程序 传递euid和egid给脚本,使脚本具有特殊用户的权限 使脚本实现类于设置了stick位的效果 shell, python, perl等脚本、程序不能取得suid,因为这些脚本程序需要解释器-/bin/bash, /usr/bin/...

    关于linux权限s权限和t权限详解

    本文主要关注两个特殊的权限:s权限(Set-User-ID,简称SUID)和t权限(Sticky位),它们为用户提供了一种特殊的访问控制机制。 首先,让我们详细解释s权限。s权限通常与可执行文件关联,当一个文件具有s权限时,它...

    linux权限体系介绍

    "Linux权限体系介绍" Linux操作系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。文件或目录的访问权限分为只读、只写和可执行三种。以文件为例,只读权限表示只...

    linux操作用户及权限分配

    Linux 操作用户及权限分配 本资源将详细介绍 Linux 操作系统中的用户及权限分配,包括查看用户、用户管理、权限分配等内容。 一、查看用户 Linux 系统中有多种方式来查看当前用户的信息,常用的命令包括 whoami...

    基于Linux操作系统文件权限的设置

    ### 基于Linux操作系统文件权限的设置 #### 摘要 随着Linux操作系统的快速发展与广泛应用,系统管理员与软件开发者越来越重视Linux的安全性。本文着重从文件权限配置的角度探讨了Linux操作系统中文件安全的问题,...

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

    在这个主题中,我们将深入探讨Linux权限的基础,包括一般权限、特殊权限以及如何分析权限功能。 首先,我们关注一般权限,它们包括读取(r)、写入(w)和执行(x)。对于文件,这三个权限分别对应查看文件内容、...

    基于Linux的s位程序最小授权的研究与实现.pdf

    《基于Linux的s位程序最小授权的研究与实现》这篇论文主要探讨了Linux操作系统中的权限管理问题,特别是关于超级用户和s位...这对于理解Linux权限管理,尤其是如何在保障功能的同时增强系统安全性具有很高的参考价值。

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

    【Linux中的特殊权限位教学分析】 在Linux操作系统中,文件和目录的权限管理是一个至关重要的概念,特别是对于多用户环境,不同的用户可能需要不同的访问权限。Linux提供了细致的权限控制机制,包括基本权限位和...

    Linux如何查找权限位为S的文件.docx

    1. **理解Linux权限系统**: 在Linux中,每个文件都有三个权限集:用户(owner)、组(group)和其他(others)。每个权限集有读(r)、写(w)和执行(x)这三个基本权限。SUID(Set-User-ID)和SGID(Set-Group-...

    linux下修改文件的权限【转】

    Linux采用了一种基于三位数字的权限表示法,每个文件或目录都有读(r)、写(w)和执行(x)三种权限。对于所有者、所属组和其他用户,每种权限都有一个相应的位。例如,一个文件的权限可以是`755`,这表示所有者有...

    Linux基础课件特殊权限设置SUID权限共10页.pdf

    SUID权限是Linux权限系统中的一个独特特性,允许用户临时获得执行文件所属者的权限。这种权限通常用于提供某些需要高权限操作但又不能给予所有用户完全root权限的场景。例如,`passwd`命令就是利用SUID权限来让普通...

    linux账号权限管理

    Linux系统中的权限管理是确保系统安全的重要组成部分。它基于用户身份对资源访问进行严格的控制,主要包括用户账号管理和文件权限管理两个方面。 #### 二、用户账号类型 1. **超级用户(root)**:具有最高权限的...

Global site tag (gtag.js) - Google Analytics