背景介绍

在linux系统中,我们熟知有rwx三种权限,对应所有者,同组用户,其他用户三种用户的权限,一共9个位来指定一个文件的权限情况,通过chmod xxx 来更改权限属性,其中xxx是已八进制表示的三个数,正好对应9个权限位,比如,777代表所有用户可读写执行,755表示所有用户可读执行,但是只有所有用户才能写,等等。

一般而言,这三种权限已经能够满足需求,但是针对一些特殊情况,还需要有三种特殊权限来完善文件权限的管理。

1      SUID权限

SUID,全称为set UID,在高位起第三位上表现为s。

通过设置SUID这个属性,可以让可执行文件以当前用户为文件的所有者来执行(如果这个用户有执行权限的话)。举一个例子,如果一个文件的权限为-rwsr-xr-x,一个组外用户对该文件是具有执行权的,但是如果却无法享有该文件执行时,依赖内容继承的权利。

例如,linux下的/usr/bin/passwd文件,通过这个文件可以修改用户的密码,所属用户和组分别是root root,权限是-rwsr-xr-x,linux下,密码信息保存在/etc/shadow文件中,该文件权限----------,所有者为root root,只有root才能改变该文件。当一个普通用户(非root组)修改密码时,由于具有SUID权限,在该文件执行时,文件的执行者会变成该文件的所有者,即root,从而达到能够修改/etc/shadow文件的效果,而且该权限仅在执行时有效,即密码修改完成后,用户就会变为原来的用户。这样就能达到用户能够修改密码,但是无法查看shadow文件内容的效果。

简单来讲,就是一个没有root权的用户,代理root来执行该文件(/usr/bin/passwd)。

在实际应用中,如果一个可执行文件有后续依赖关系,而其他用户虽然有执行权利,但是由于后续权利不足而会导致无法继续执行的问题,通过添加SUID属性,可以解决该问题。

2      SGID权限

SGID和SUID类似,在高起第六位上表现为s。

SGID改变的是执行者的所属组,可以对可执行文件和目录设置。通过对目录设置SGID属性,可以使得访问在该目录下创建的所有文件的所有权,都继承原目录的所有者,而非创建者。因为一旦有用户进入到该目录下,由于具有SGID权限,进入目录后的用户就会变成该目录的所有者,在该目录下创建的所有文件,都以该目录的所有者的身份创建。

利用好这个权限位在很多团队合作的项目上更加方便管理。比如一个共同维护的数据文件夹,为了方便管理,只允许管理员对里面的数据具有改变和删除的权利,但是却有很多用户需要有在该目录下添加数据文件的权利,利用SGID可以很好的解决这一点。

3      SBID权限

SBID权限同样只对目录有效,在权限位的最低位表现为t。

通过对目录设置SBID权限,并且该目录的权限为777,则所有用户可以在该目录下都可以创建文件,并且文件所有者是自己。但是在SBID权限的目录下,只有root和文件的所有者才能删除该文件,即使文件的属性为777也不能被其他用户删除。

这个权限在共享过程中非常实用。共享的文件任何人都有读写的权利,但是只有文件的所有者才能删除该文件。

4      特殊权限的设置

1           数字位设置特殊权限:三个特殊权限虽然分别在原来9个位上表现,但是并不是通过这9个位来修改,而是有特殊的三位数据管理这三个特殊权限,从高位到地位的顺序依次为:SUID,SGID,SBID。这三个位同样组成一个八进制数,在使用chmod时,这个八进制数在原来的三个数之前设置。

需要注意的是,SUID,SGID,SBID权限都是在可执行权限的基础上添加的,如果原本的文件或者目录没有可执行权限,那么添加这三个特殊权限后,将会显示错误状态:大写标识(如-rwSr--r--,即原文件没有可执行权限,但是加上SUID,即显示大写S)。

具体使用:chmod 4777表示在-rwxrwxrwx的基础上设置SUID,即-rwsrwxrwx; chmod 2755表示在drwxr-xr-x的基础上设置SGID,即drwxrwsrwx等等。

利用数字位来设置特殊权限,但是不能用数字位取消特殊权限,例如,当一个文件的权限是-rwsr--r--时,不能通过chmod 0744来取消SUID权限。

2           利用符号设置特殊权限:三个特殊权限的符号表示分别为 u+s,g+s,o+t,u-s,g-s,o-t,其中,u+s,g+s,o+t用来设置特殊权限SUID,SGID,SBID;u-s,g-s,o-t用来取消特殊权限SUID,SGID,SBID。

具体使用:chmod u+s表示在原文件中添加SUID属性,chmod o-t表示取消原目录中的SBIT特殊属性。

参考资料:感谢百度贴吧linux吧小吧主fyyz_me的分享:http://tieba.baidu.com/p/3058046685

linux系统中,文件的三种特殊权限的更多相关文章

  1. linux系统中文件的几种类型

    Linux系统是以文件的形式来进行管理的.Linux文件类型常见的有:普通文件.目录.字符设备文件.块设备文件.符号链接文件等,如果想了解这方面知识的弟兄,就进来了解了解. Linux系统不同于win ...

  2. Linux系统中文件定位与查找

    Linux系统中文件查找 关键词 文件查找 | find | locate 本文主要介绍有关文件查找的两个命令——find和locate,以及压缩打包的命令——compress, gzip,bzip2 ...

  3. Xshell6远程访问linux及Xftp6远程针对linux系统中文件操作(附图文详解)

    1.首先我们需要先做好前期准备工作,需要到XManager6官网上将Xshell及Xftp下载并安装,安装过程一直下一步就好了.这里是其官网:http://www.xshellcn.com/.安装完成 ...

  4. git中文件的三种状态

    用xcode的时候,左侧栏文件的邮右边时不时会看到M,A这一类的字母.当然,这些以后再写上.先说一下git里文件的三种状态 已提交(committed)  已经提交的本地仓库(repository), ...

  5. Linux入门培训教程 linux系统中文件I/O教程

    linux 文件I/O教程 一,文件描述符 对内核而言,所以打开的文件都通过文件描述符引用.每个进程都有一些与之关联的文件描述符.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向 ...

  6. linux系统中文件的权限

    查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些:-rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是 ...

  7. linux中文件的三种time(atime,mtime,ctime)

    linux下文件有3个时间的,分别是atime,mtime,ctime.有些博友对这3个时间还是比较迷茫和困惑的,我整理了下,写下来希望对博友们有所帮助. 1 这三个time的含义 简名 全名 中文名 ...

  8. Linux系统重要文件(三)

    一系统运行级别文件 文件路径:/etc/inittab 文件作用说明:定义系统启动后,自动开启哪些软件程序系统 runlevel 查看当前运行级别 centos6系统运行级别: 7个级别      0 ...

  9. Linux系统中文件行末尾出现^M的原因及解决办法

    不同系统,有不同的换行符号: 在windows下的文本文件的每一行结尾,都有一个回车('\n')和换行('\r') 在linux下的文本文件的每一行结尾,只有一个回车('\n'); 在Mac下的文本文 ...

随机推荐

  1. MySQL 性能优化的最佳20多条经验分享(三)(转)

    16. 垂直分割 "垂直分割"是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的.(以前,在银行做过项目,见过一张表有100多个字段, ...

  2. C语言socket编程----实现UDP通信

    TCP/IP协议叫做传输控制/网际协议,又叫做网络通信协议.实际上,它包括上百个功能的协议. 套接字(socket):在网络中用来描述计算机中不同程序与其他计算程序的通信方式. 套接字分为三类; 流式 ...

  3. C# RichTextBox设置行间距

    之前从CSDN上下载了一个代码,参看之后,改了一些内容,感觉设置行间距更具体,不会因为字号的变化而受到影响,具体代码参看: CSDN:http://download.csdn.net/detail/n ...

  4. 调用WebService获取数据

    以下调用方法,以调用苏州天气接口为例. 一.后台请求服务 方法一.C#后台,通过构建Soap请求接口数据 //获取天气详细信息 public JsonResult GetWeatherDetails( ...

  5. window.setInterval与window.setTimeout使用实例

    <script type="text/javascript"> var arrived = false; var num = 0; var timer = window ...

  6. SpringBoot 整合Ehcache3

    SpringBootLean 是对springboot学习与研究项目,是依据实际项目的形式对进行配置与处理,欢迎star与fork. [oschina 地址] http://git.oschina.n ...

  7. 2016年7月微软MVP申请開始了!

    2016年7月微软MVP申请開始了! CSDN与微软合作,长期为用户提供申请"微软最有价值专家"的平台.希望有兴趣.资历的朋友以及正在朝这个方向努力的朋友能够积极參与. 2016年 ...

  8. SharePoint Framework 简介

    作者:陈希章 发表于 2017年12月25日 前言 通过前面几篇文章,我相信大家对于SharePoint Online的开发有了更加全面的认识,上一篇 介绍的SharePoint Add-in的开发, ...

  9. Lua的数学函数

    ua5.1中数学库的所有函数如下表: ​ math.pi 为圆周率常量 = 3.14159265358979323846 函数名 函数功能 示例 示例结果 abs 取绝对值 math.abs(-15) ...

  10. 《C++程序设计语言(十周年纪念版)》【PDF】下载

    <C++程序设计语言(十周年纪念版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382171 内容简介 <C++程序设计 ...