linux系统中,文件的三种特殊权限
背景介绍
在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系统中,文件的三种特殊权限的更多相关文章
- linux系统中文件的几种类型
Linux系统是以文件的形式来进行管理的.Linux文件类型常见的有:普通文件.目录.字符设备文件.块设备文件.符号链接文件等,如果想了解这方面知识的弟兄,就进来了解了解. Linux系统不同于win ...
- Linux系统中文件定位与查找
Linux系统中文件查找 关键词 文件查找 | find | locate 本文主要介绍有关文件查找的两个命令——find和locate,以及压缩打包的命令——compress, gzip,bzip2 ...
- Xshell6远程访问linux及Xftp6远程针对linux系统中文件操作(附图文详解)
1.首先我们需要先做好前期准备工作,需要到XManager6官网上将Xshell及Xftp下载并安装,安装过程一直下一步就好了.这里是其官网:http://www.xshellcn.com/.安装完成 ...
- git中文件的三种状态
用xcode的时候,左侧栏文件的邮右边时不时会看到M,A这一类的字母.当然,这些以后再写上.先说一下git里文件的三种状态 已提交(committed) 已经提交的本地仓库(repository), ...
- Linux入门培训教程 linux系统中文件I/O教程
linux 文件I/O教程 一,文件描述符 对内核而言,所以打开的文件都通过文件描述符引用.每个进程都有一些与之关联的文件描述符.文件描述符是一个非负整数.当打开一个现有文件或创建一个新文件时,内核向 ...
- linux系统中文件的权限
查看文件权限的语句: 在终端输入:ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些:-rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表的是 ...
- linux中文件的三种time(atime,mtime,ctime)
linux下文件有3个时间的,分别是atime,mtime,ctime.有些博友对这3个时间还是比较迷茫和困惑的,我整理了下,写下来希望对博友们有所帮助. 1 这三个time的含义 简名 全名 中文名 ...
- Linux系统重要文件(三)
一系统运行级别文件 文件路径:/etc/inittab 文件作用说明:定义系统启动后,自动开启哪些软件程序系统 runlevel 查看当前运行级别 centos6系统运行级别: 7个级别 0 ...
- Linux系统中文件行末尾出现^M的原因及解决办法
不同系统,有不同的换行符号: 在windows下的文本文件的每一行结尾,都有一个回车('\n')和换行('\r') 在linux下的文本文件的每一行结尾,只有一个回车('\n'); 在Mac下的文本文 ...
随机推荐
- 整理下git常用命令
Git工作示意图 一.新建代码库 ::在当前目录新建一个Git代码库git init::新建一个目录,将其初始化为Git代码库git init [project-name]::下载一个项目和它的整个代 ...
- php面向对象(OOP)编程完全教程(转载笔记,有兴趣可以看看))
http://www.cnblogs.com/xiaochaohuashengmi/archive/2010/09/10/1823042.html
- [PHP基础]有关isset empty 函数的面试题
用isset()和empty()判断下面的变量. $str = ''; $int = 0 ; $arr = array(); isset($str) 返回的是 true 还是 false empty( ...
- 匈牙利标记法定义ECMAScript变量前缀
匈牙利标记法定义ECMAScript变量前缀 类型 前缀 示例 数组 a aArray 布尔型 b bMale 浮点型(数字) f fTax 函数 fn fnSwap 整型(数字) i iAge ...
- javascript设计模式——享元模式
前面的话 享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级.享元模式的核心是运用共享技术来有效支持大量细粒度的对象.如果系统中因为创建了大量类似的对象而 ...
- 编写高质量代码—javascript的分层—base层
base层的功能是为common层和page层提供接口.封装不同浏览器下javaScript的差异,提供统一的接口 1.用getNextNode 函数封装IE和Firefox的差异: 2.透明度:封装 ...
- 分享Sql Server 2008 r2 数据备份,同步服务器数据(一.本地备份)
最近在部署一个系统,处于数据安全的考虑,因此对相应的数据库服务器定时备份,以及数据同步到备份服务上.之前在另外的一个项目中也做过相应的操作,但是操作都是按照查找到的文章一步一步的操作,碰到一些细节问题 ...
- webrtc视频数据render流程
- SQL运行时间
打开SQL运行时间统计 set timing on; 查询是否有运行时间较长的SQL存在 select a.sid, b.sql_text from v$session a, v$sqlare ...
- 基于lucene.net 和ICTCLAS2014的站内搜索的实现1
Lucene.net是一个搜索引擎的框架,它自身并不能实现搜索.须要我们自己在当中实现索引的建立,索引的查找.全部这些都是依据它自身提供的API来实现.Lucene.net本身是基于java的,可是经 ...