背景介绍

在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. Redis各个数据类型的使用场景

    Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). Redis列表命令 参考:http://www.r ...

  2. 【ASP.NET Core】运行原理[3]:认证

    本节将分析Authentication 源代码参考.NET Core 2.0.0 HttpAbstractions Security 目录 认证 AddAuthentication IAuthenti ...

  3. webpack安装配置

    webpack安装 1.安装之前你必须要安装node.js,如果你没安装可以在node.js网去下载node.js 2.全局安装webpack,打开cmd输入npm install webpack - ...

  4. Python的变量及简单数据类型

    Python的变量及简单类型 1.  变量 在Python编程中,变量是用来存放值或对像的容器.变量的名称可以自定义,但需遵循一定的规范,否则可能会引发一些错误.Python的变量可以分为数字.字符和 ...

  5. 鼠标悬停,图片放大 CSS实现

    因为最近做的项目刚好用到了这个实现,分享出来   class=enlarge 为div标签的class div img 为标签 .enlarge div img:hover{ transform: s ...

  6. let 和 const

    let命令 1.let命令只在所在的代码快内有效 { let a = 'hello world' console.log(a) //hello world } console.log(a) //Unc ...

  7. PHP 使用Echarts生成数据统计报表

    echarts统计,心血来潮~~ 先看下效果图 看下代码 HTML页面  为ECharts准备一个Dom,宽高自定义 <div class="panel panel-info" ...

  8. centos 6.5 安装mongodb2.6

    前言: 系统版本号:Centos-6.5-x86_64 *** Centos编译安装mongodb 2.6 系统最好是64位的,才干更好发挥mongodb的性能 1.准备,下载源文件(二进制编译版) ...

  9. 改动hosts权限

    在屏蔽网页.訪问一些特定局域网的时候,都可能须要改动Hosts文件. 只是在改动Hosts文件后.会遇到无法保存的情况,提示"您没有权限在此位置中保存文件,请与管理员联系以获取对应权限&qu ...

  10. 基于ASP.MVC票据FormsAuthenticationTicket身份认证

    做一个最基础的业务需求用户登录,将此用户的身份发回到客户端的Cookie,之后此用户再访问这个web应用就会连同这个身份Cookie一起发送到服务端.服务端上的授权设置就可以根据不同目录对不同用户的访 ...