在上篇博客中叙述linux系统中文件的基本属性,见http://vinsent.blog.51cto.com/13116656/1951574,这篇给大家带来linux系统文件的特殊权限,包括SUID、SGID、Sticky(粘滞位)。一、安全上下文

安全上下文指的是一类定义某个进程允许做什么的许可和权限的集合。安全上下文的概念范围很广范,权限、特权、访问令牌、完整性等级等等都包含在其中。这里只简要说说linux系统对文件的安全控制:

(1)进程有属主和属组,文件有属主和属组      (2)任何一个可执行程序文件能不能启动为进程;取决于发起者对程序文件是否有执行权限

(3)启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属得组

(4)进程访问文件时的权限 ,取决于进程的发起者

进程的发起者,同文件的属主:则使用文件属性权限

进程的发起者,属于文件的属组;则使用文件属组权限

使用的文件"其他"权限

二、文件的特殊权限

1、SUID

SUID的权限其实的相关性非常大,对普通文件和目录几乎没有什么用。SUID主要作用在二进制可执行文件上,且作用在文件的属主位,表现为小 S ,例如我们所熟悉的可执行程序 passwd:[root@centos7 ~]# ll `which passwd`

-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd #我们发现在属主位有s存在,这就代表具有SUID权限

SUID-特点SUID权限仅对二进制程序有效

执行者对于该程序需要具有 x 可执行权限

本权限仅在执行该程序的过程中有效

执行者具有该程序的所有者的权限

浅析:当其他用户在执行二进制可执行程序时,一旦该程序加了SUID权限,那么在执行该程序时将继承原二进制可执行程序属主的权限,上例中可执行程序/usr/bin/passwd的属主和属组均是root,如果没有SUID权限,那么普通用户在执行pswwd命令时将无法修改无法修改自己的账户密码,但实际生活中,每个普通用登录后都可以使用passwd并修改自己的密码,这就是因为有SUID权限在,普通用户暂时使用了root的权限。

整个SUID的权限会生效是由于具有该权限的程序被触发,二我们知道一个程序被触发会变成进程,所以,执行者可以具有程序所有者的权限就是在该程序变成进程的那个时候,进程的概念在后续的篇章中会详细说明。这就是为何执行了passwd后就具有root的权限,用户在触发passwd后,会取得一个新的得进程与PID。该PID产生是通过SUID给予该PID特殊的权限设置,例如我们使用vincent登录系统并且执行passwd后,查看进程树来理解一下![vincent@vincent ~]$

[vincent@vincent ~]$passwd

Changing password for user vincent.

Changing password for vincent.

(current) UNIX password:     # 使用ctrl+z+enter,可以让passwd后台执行

[1]+  Stopped                 passwd

[vincent@vincent ~]$pstree -u   #查看进程树

init─┬─NetworkManager─┬─dhclient

│                └─{NetworkManager}

...................# 省略中间部分

├─sshd─┬─sshd───bash

│      └─sshd───bash───su───bash(vincent)─┬─passwd(root)

│                                         └─pstree        |

├─trashapplet                                     #我们发现passwd的执行者是root

├─udevd───2*[udevd]

├─udisks-daemon─┬─udisks-daemon

│               └─{udisks-daemon}

├─wnck-applet

└─wpa_supplicant

[vincent@vincent ~]$

从上面的结果可以发现,执行pstree的权限是vincent这个一般用户的权限,而passwd的权限是root的权限,而且的的确确,passwd是由vincent这个普通用户所在bash衍生出来的,但权限不一样罢了,这样浅析你对对SUID权限应该有所领悟了。---------------------------------------------------------------------------------------------2、SGID

和SUID相比,SGID不止能作用在二进制可执行程序上,还能作用在目录上。和SUID不同的是:SUID作用位是文件的属主位,而SGID作用在文件的属组上,也表现为s。用户对文件是否能删除,取决于该用户对文件所在的目录是否有写权限;默认情况下,用户创建文件时,文件的属组是用户属组的基本组[root@vincent ~]#mkdir vincent   # 创建vincent目录

[root@vincent ~]#ll -d vincent/

drwxr-xr-x. 2 root root 4096 Jul 31 10:16 vincent/ # 目录基本权限文755,没有SGID权限

[root@vincent ~]#chmod 2755 vincent/   # 给vincent目录加上SGID权限

[root@vincent ~]#ll -d vincent/

drwxr-sr-x. 2 root root 4096 Jul 31 10:16 vincent/  # 权限添加成功,表现为s

[root@vincent ~]#

SGID-特点作用在二进制文件上,继承二进制程序所属组的权限

作用在目录上,目录内新建文件的所属组自动继承目录所属组# .*.-----------SGID作用在目录上------------.*.#

[root@vincent app]#mkdir vincent   # 创建vincent目录

[root@vincent app]#chmod 2757 vincent/ # 赋予SGID权限,并给其他人赋予rwx权限

[root@vincent app]#useradd t1    # 创建两个用户t1,t2 用于后续试验

[root@vincent app]#useradd t2

[root@vincent app]#groupmems -a t1 -g root # 添加用户t1,t2的附加组为vincent目录所在的组

[root@vincent app]#groupmems -a t2 -g root

[root@vincent app]#su t1         # 切换到t1用户

[t1@vincent app]$cd vincent/     # 进入到vincent目录下

[t1@vincent vincent]$ls          # 查看目录内容,保证这是个空文件夹,防止干扰

[t1@vincent vincent]$touch t1.{1,2} # 创建两个文件

[t1@vincent vincent]$exit        # 退出登录

exit

[root@vincent app]#su t2         # 切换到t2 用户

[t2@vincent app]$cd vincent/

[t2@vincent vincent]$touch t2.{1,2}

[t2@vincent vincent]$ll          # 查看目录下的文件

total 0

-rw-rw-r--. 1 t1 root 0 Jul 31 11:15 t1.1    # t1用户的两个文件属主是t1 ,属组是root继承自父文件夹

-rw-rw-r--. 1 t1 root 0 Jul 31 11:15 t1.2

-rw-rw-r--. 1 t2 root 0 Jul 31 11:16 t2.1    # t2用户的两个文件,继承了其父目录的组

-rw-rw-r--. 1 t2 root 0 Jul 31 11:16 t2.2

[t2@vincent vincent]$\rm -rf t1.1    # t2用户试着删除t1的文件,因为定义了别名所以使用的\调用原始命令

[t2@vincent vincent]$ll        # 查看文件下的目录发现,真的删掉了t1用户的文件,

total 0

-rw-rw-r--. 1 t1 root 0 Jul 31 11:15 t1.2

-rw-rw-r--. 1 t2 root 0 Jul 31 11:16 t2.1

-rw-rw-r--. 1 t2 root 0 Jul 31 11:16 t2.2

[t2@vincent vincent]$

说明:给目录赋予了SGID权限,那么同组用户能够对改组内不同用户创建的文件进行读写删除操作,不过这依赖于目录属组的权限。

# .*.-----------SGID作用在二进制文件上------------.*.#

[root@centos7 ~]# ll /bin/cat   #查看/bin/cat的文件,其属主属组都是root并且无SGID权限

-rwxr-xr-x. 1 root root 54048 Jul 23 22:14 /bin/cat

[root@centos7 ~]# su - test3    # 切换到用户test3

Last login: Mon Jul 24 02:13:27 HKT 2017 on pts/1

[test3@centos7 ~]$ cat /tmp/1.txt #使用cat来查看文件,发现权限受限

cat: /tmp/1.txt: Permission denied

[test3@centos7 ~]$ ll /tmp/1.txt

-rwxrwx---. 1 root root 15 Jul 24 01:57 /tmp/1.txt

[test3@centos7 ~]$ exit    # 退出

logout

[root@centos7 ~]# chmod 2755 /bin/cat # 给二进制文件/bin/cat附加SGID权限

[root@centos7 ~]# su - test3

Last login: Mon Jul 24 02:14:36 HKT 2017 on pts/2

[test3@centos7 ~]$ cat /tmp/1.txt  # 发现能查看了

shishihishihih        # 1.txt文件的内容为shishihishihih

说明:给二进制附加SGID权限,如果没有SUID存在,其他用户在使用该二进制可执行程序时将继承其组的权限,上例中,cat程序就是如此,继承了其组root的权限,所以普通用户能够使用。如果上例还不能让你明白,那么你用普通用户查看/etc/shadow文件,发现不能查看(这是密码文件,普通用户当然不让你看),但当你给cat命令加上SGID权限之后,你会发现普通用户竟然能查看了,这就是在执行程序时使用了cat所在组(root)的权限,root用户几乎不受权限的控制。---------------------------------------------------------------------------------------------3、Sticky(粘滞位)

我们都知道如果一个目录的权限是777那么所有用户都能对该目录下的文件进行查看,删除等操作,那么这样就存在一个隐患,张三用户一生气将李四用户写的程序文件全删除了,这样子李四几个月的辛苦就白费了。基于这种考量,linux系统中加入了Sticky这种权限。

Sticky-特点只对目录有效

对于一个多人可写的目录,如果设置了sticky位。则每个用户仅能删除自己的文件,不能删除别人的文件除了root(root人家可是天神)[root@vincent ~]#cd /app  # 进入到/app目录

[root@vincent app]#chmod 777 vincent/  #设置vincent目录的权限为777,便于后续试验环境,生产中不建议给777权限

[root@vincent app]#touch vincent/1  # root用户创建2个文件1,2

[root@vincent app]#touch vincent/2

[root@vincent app]#su t1        #切换到t1用户并创建2个文件3,4

[t1@vincent app]$touch vincent/3

[t1@vincent app]$touch vincent/4

[t1@vincent app]$exit

exit

[root@vincent app]#su t2    # 切换到t2用户并创建两个文件5,6

[t2@vincent app]$touch vincent/5

[t2@vincent app]$touch vincent/6

[t2@vincent app]$ll vincent/ # 查看vincent下的文件,有6个文件

total 0

-rw-r--r--. 1 root root 0 Jul 31 12:46 1

-rw-r--r--. 1 root root 0 Jul 31 12:46 2

-rw-rw-r--. 1 t1   t1   0 Jul 31 12:46 3

-rw-rw-r--. 1 t1   t1   0 Jul 31 12:47 4

-rw-rw-r--. 1 t2   t2   0 Jul 31 12:47 5

-rw-rw-r--. 1 t2   t2   0 Jul 31 12:47 6

[t2@vincent app]$\rm -rf 1    # 让t2用户删除root创建的文件1,发现尽然没报错,估计是删了

[t2@vincent app]$exit

exit

[root@vincent app]#su t1

[t1@vincent app]$cd vincent/

[t1@vincent vincent]$\rm -rf 5 #切换到t1用户,并删除t2用户创建的文件5,也没报错

[t1@vincent vincent]$ll  # 查看vincent目录下的文件,果然1,5都被删除了,太可怕了,普通用户能删root创建的文件

total 0

-rw-r--r--. 1 root root 0 Jul 31 12:46 2

-rw-rw-r--. 1 t1   t1   0 Jul 31 12:46 3

-rw-rw-r--. 1 t1   t1   0 Jul 31 12:47 4

-rw-rw-r--. 1 t2   t2   0 Jul 31 12:47 6

[t1@vincent vincent]$

通过上例我们发现只要目录的其他人有读写执行权限,那么其他用户都能对该目录下的文件执行删除操作。这太可怕了,一个匿名用户尽然能随意删除别人的文件。那么我们给vincent目录加上Sticky位,再来看看还能如此"横行"么?[root@vincent app]#

[root@vincent app]#chmod o+t vincent/  # 给vincent目录加上Sticky权限,表现为t

[root@vincent app]#ll -d vincent/

drwxrwxrwt. 2 root root 4096 Jul 31 12:49 vincent/

[root@vincent app]#ll vincent/  # 查看vincent目录下还有那些文件

-rw-r--r--. 1 root root 8 Jul 31 12:46 2

-rw-rw-r--. 1 t1   t1   0 Jul 31 12:46 3

-rw-rw-r--. 1 t1   t1   0 Jul 31 12:47 4

-rw-rw-r--. 1 t2   t2   0 Jul 31 12:47 6

[root@vincent app]#su t1     #    且换到t1用户

[t1@vincent app]$cd vincent/

[t1@vincent vincent]$\rm -rf 2  # 试着删除root用户创建的文件

rm: cannot remove `2': Operation not permitted  # 提示错误:操作受限

[t1@vincent vincent]$exit

exit

[root@vincent app]#su t2    # 切换到t2用户

[t2@vincent app]$\rm -rf 6 # 删除自己创建的文件6 ,结果不报错,说明删掉了

[t2@vincent app]$ ll vincent/  # 再次查看文件,发现文件6被删除了

-rw-r--r--. 1 root root 8 Jul 31 12:46 2

-rw-rw-r--. 1 t1   t1   0 Jul 31 12:46 3

-rw-rw-r--. 1 t1   t1   0 Jul 31 12:47 4

[t2@vincent vincent]$cat 2  # 试着查看root创建的文件2,发现可以,这是因为2的其他者位有r权限

wwwwwww

[t2@vincent vincent]$echo eeee >> 2 # 试着给文件2追加信息,发现操作受限,因为2的其他者位没有w权限

bash: 2: Permission denied

[t2@vincent vincent]$

说明:通过上面的实例我们发现,当一个文件被赋予Sticky权限时,不同的用户只能对该目录下自己的文件其有权限,不能删除其他用户创建的文件;至于是否能对其他用户的文件进行读写,这要看创建的文件对其他人是否有读写权限,注意通常写操作需要配合执行权限来工作。

关于linux系统中文件的权限,基本读写执行权限在加上特殊权限SUID、SGID、Sticky也给大家聊了,还有一个扩展权限ACL(访问控制列表),过两天将带给大家,敬请期待!

谢谢您的阅读!!若有疑问可留言

Linux系统文件夹权限475,linux系统中文件的特殊权限相关推荐

  1. Linux系统中文件的访问权限

    在Linux操作系统中,为了保证文件信息的安全,Linux给文件都设定了一定的访问权限. Linux中的每一个文件都归某一个特定的用户所有,而且一个用户一般总是与某个用户组相关. Linux对文件的访 ...

  2. 移动硬盘里的linux系统文件夹加密,在Deepin系统中加密移动存储设备的方法

    本文介绍简单可行的方法让你在Deepin系统中加密你的移动存储设备,包括U盘及移动硬盘.同时要指出的是虽然可以采用下面方法保护数据不让他人随意观看,但是不能阻止他人破坏数据,例如,格式化U盘或移动硬盘 ...

  3. linux中600是什么权限,linux系统中文件的权限

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

  4. Linux系统下文件与目录权限管理

    Linux文件目录权限管理 一.Linux文件属性及权限 1.Linux文件及目录权限及属性说明 (1)权限及属性说明 (2)文件权限说明 三种权限说明:r 读  read w 写  write x ...

  5. suse LINUX系统中的,用户权限的问题。

    关于suse LINUX系统中的,用户权限的问题. 当我们大家用LL或LA命令来查看一下当前目录的相关信息时, 在最前面我们总能看到这样的信息提示: -drrr--o--- 这些就是相关的用户服务对本 ...

  6. linux搜索关键字并定位,Linux系统中文件定位与查找(示例代码)

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

  7. linux的超级管理用户目录是,Linux系统中的root超级权限的控制

    Linux系统中的root超级权限的控制 超级用户是系统最高权限的拥有者,是系统管理唯一的胜任者:由于权限的超级并且达到无所不能的地步,如果管理不擅,必会对系统安全造成威胁. 除了尽可能的避免用直接用 ...

  8. linux 默认文件属性,linux系统下文件的默认权限以及隐藏属性的作用

    [摘要] 操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序.操作系统需要处理如管理与配置内存.决定系统资源供需的优先次序.控制输入设备与输出设备.操作网络与 ...

  9. linux下上传系统中文件到gitHub

    linux下上传系统中文件到gitHub 一: 1系统下生成公钥 #ssh-keygen 一路回车即可 2对公钥进行复制 #cat .shh/id_rsa.pub 3将公钥复制到github中 首先要 ...

最新文章

  1. 谁说女生不适合当程序员?
  2. .net 简单实现MD5
  3. Linux-鸟菜-1-Linux简介
  4. tensorflow学习(6.Alexnet实现及猫狗分类)
  5. oracle-bone,Oracle Bone Inscriptions / 甲骨文
  6. 星光计划计算机,上海星光计划第七届职业院校技能大赛.PDF
  7. ue4模型导出_MAYA动画导出以及导入UE4的方式、方法
  8. 《scikit-learn》xgboost
  9. 一个简单的mysql服务检测启动脚本
  10. 国人项目上了Github全球热榜,之后都发生了什么?
  11. w ndows平板,Win8.1千元芯平板 昂达V975w四核评测
  12. 烟台大学举办首届ACM程序设计大赛
  13. 点扩散函数3D曲面绘图方法
  14. php运算符包括,php运算符有哪些 - php完全自学手册 - php中文网手册
  15. 谷歌浏览器:快速切换搜索引擎
  16. delete与垃圾回收机制
  17. 电源接头DC002的PCB封装
  18. WIN10运行软件,窗口不显示 解决办法
  19. 电脑USB口输出的是什么电平
  20. QQ快捷登录提示:禁止开发商强制用户重新注册或绑定其他帐号

热门文章

  1. mybatis基于注解(三)
  2. mysql中示例库安装_MySQL 官方示例数据库安装
  3. Hadoop(六)搭建分布式HBase集群
  4. OpenShift 4 - 利用 File Integrity Operator 实现对集群节点进行入侵检测
  5. OpenShift 4 之 高可靠运行MS SQL Server 2019数据库
  6. 在LINQPad中征服ASP.NET Boilerplate查询性能
  7. 完整的 .NET Core 目标框架的预处理器符号列表
  8. 应用程序部署策略——虚拟机与容器
  9. spring boot注解_Spring-boot(二)注解
  10. python pandas 日期格式_pandas 快速处理 date_time 日期格式方法