Linux文件系统上的特殊权限

news2024/11/16 11:30:50

Linux 的文件权限,远不止 rwx 那么简单,还有一些特殊权限是用来打破限制和默认的安全上下文规则的,除了之前介绍过的隐藏属性,还有几个显式的特殊权限。下面就来说说 Linux 文件系统上的 SUID,SGID 和 Sticky 权限。
在这里插入图片描述

Linux文件系统上的特殊权限

1. 权限分类

Linux 系统上面关于用户、组、其他的人的权限的基本分类

userrwx
grouprwx
otherrwx
目录 - rwx - 说明r有读取目录内容列表的权限即可以使用 ls 命令查看该目录的内容列表w有更改目录的权限即可以在此目录下新建文件或子目录等x可以进入该目录即可以使用 cd 命令进入该目录
文件 - rwx - 说明r可读取此文件的内容即可以读取文件w可编辑此文件的内容即可以增加、删除、更改文件内容x可以执行此文件

2. 安全上下文

前提:进程有属主和属组;文件有属主和属组

(1) 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
(2) 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
(3) 进程访问文件时的权限,取决于进程的发起者(a) 进程的发起者,同文件的属主,则应用文件属主权限(b) 进程的发起者,属于文件的属组,则应用文件属组权限© 应用文件“其它”权限

3. 特殊权限

3.1 SUID
含义解释任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限启动为进程之后,其进程的属主为原程序文件的属主
权限设定

$ chmod u+s FILE…
$ chmod u-s FILE…
3.2 SGID
含义解释默认情况下,用户创建文件时,其属组为此用户所属的基本组一旦某目录被设定了 SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
权限设定

$ chmod g+s DIR…
$ chmod g-s DIR…
3.3 Sticky
含义解释对于一个多人可写的目录,如果设置了 sticky,则每个用户仅能删除自己的文件
权限设定

$ chmod o+t DIR…
$ chmod o-t DIR…

$ chmod 4777 /tmp/a.txt

NUMSUIDSGIDSTICKY
0000
1001
2010
3011
4100
5101
6110
7111
3.4 三个权限位映射
请注意,在权限位上可能会出现 s 和 S,其意义实际上不一样。

SUID: user - 占据属主的执行权限位
s: 属主拥有 x 权限
S:属主没有 x 权限
SGID: group - 占据 group 的执行权限位
s: group 拥有 x 权限
S:group 没有 x 权限
Sticky: other - 占据 ohter 的执行权限位
t: other 拥有 x 权限
T:other 没有 x 权限
3.5 chattr 命令
注释: ls 是看不到 attr 属性的,可以用 lsattr 显示特定属性。

chattr +i xxx 锁定该文件 ,不允许修改/删除/重命名/重定向方式清空也不可以
chattr -i xxx 去掉锁定
chattr +a xxx 只能 >> 追加内容,不能删除和减少
chattr -a xxx 去掉只能追加这种锁定

$ touch file1
$ chattr +i file1
$ lsattr file1
----i----------- file1

$ echo “escape” > file1
-bash: file1: Permission denied

$ echo “escape” >> file1
-bash: file1: Permission denied

$ mv file1 /tmp
mv: cannot remove ‘file1’: Operation not permitted

$ rm file1
rm: remove regular empty file ‘file1’? y
rm: cannot remove ‘file1’: Operation not permitted

$ touch file2
$ chattr +a file2
$ lsattr file2
-----a---------- file2

$ echo “escape” > file2
-bash: file2: Operation not permitted

$ echo “escape” >> file2
$ cat file2
escape

$ rm file2
rm: remove regular file ‘file2’? y
rm: cannot remove ‘file2’: Operation not permitted

4. ACL 访问控制列表

ACL:Access Control List 访问控制列表。除了文件原本的权限位设置,可以自定义用户访问控制。

CentOS 7 默认创建的 xfs 和 ext4 文件系统具有 ACL 功能
CentOS 7 之前版本,系统安装时候创建的文件系统有 ACL 功能,默认手工创建的 ext4 文件系统无 ACL 功 能,需手动增加。

#比如在CentOS6上新加一块磁盘,创建了sdb1分区,可以用下面命令使其支持ACL
$ tune2fs –o acl /dev/sdb1
$ mount –o acl /dev/sdb1 /mnt/test
4.1 getfacl XXX
获取文件或文件夹的权限

#默认的从上到下的权限依次是:
#owner:文件的拥有者
#group:文件的拥有组

user:自定义的用户(可多个)
group:自定义的组(可多个)
other:自定义的其它用户(可多个)

#如果一个用户属于多个自定义的组,权限是这几个组的权限的累加。

$ touch a
$ getfacl a
#file: a
#owner: root
#group: root
user::rw-
group::r–
other::r–

$ mkdir dir1
$ getfacl dir1
#file: dir1
#owner: root
#group: root
user::rwx
group::r-x
other::r-x
4.2 setfacl 基础命令
给一个文件加了facl的话,整个权限位后面会有个+号,表示设置了facl权限。
-m 参数,表示modify修改的意思

#禁止escape用户访问file1
$ setfacl -m u:escape:000 file1

$ getfacl file1
#file: file1
#owner: root
#group: root
user::rw-
user:escape:—
group::r–
mask::r–
other::r–

#禁止escape组访问file2
$ setfacl -m g:escape:rw- file2

$ getfacl file2
#file: file2
#owner: root
#group: root
user::rw-
group::r–
group:escape:rw-
mask::r–
other::r–

#禁止其它用户访问file1
$ setfacl -m o:0 file3

$ getfacl file3
#file: file3
#owner: root
#group: root
user::rw-
group::r–
other::—
4.3 setfacl 的其他用法
setfacl -Rb *:清除所有acl
setfacl -M TEXT:利用列表来批量设置权限

$ cat file.acl
u:escape:-
g:escape:rwx

$ setfacl -M file.acl xxx

$ getfacl xxx
#file: xxx
#owner: root
#group: root
user::rw-
user:escape:—
group::rw-
group:escape:rwx
mask::rwx
other::rw-
-d 参数,表示默认在facl权限下的目录,新创建的文件和文件夹继承上一级目录的权限。

#那么在dir2下新创建的目录就默认继承dir2的acl权限
setfacl -md d:u:yu:rwx /app/dir2
-x表示删除某个权限

setfacl -x u:yu:rwx /app/dir2
-X按照文件里的内容来批量删除权限

setfacl -X file.acl xxx
4.4 ACL 中的 mask
facl的mask是高压线,是影响自定义用户和自定义组的权限,有了mask后,会与自定义的用户和组的权限做逻辑与,这之后是自定义用户和组的真实权限。
默认是没有高压线的,默认值一般都是所有自定义用户和组的最高权限累加。
如果设置了,就相当于设定了高压线,高于这个高压线的权限,会降低到高压线之下。

#设置了高压线后,自定义用户和自定义组的有效值是不超过mask的r–
$ touch file4
$ setfacl -m u:yu:rwx file4
$ setfacl -m g:yu:rw- file4
$ getfacl file4
#file: file4
#owner: root
#group: root
user::rw-
user:yu:rwx
group::r–
group:yu:rw-
mask::rwx
other::r–

$ setfacl -m m:r-- file4

$ getfacl file4
#file: file4
#owner: root
#group: root
user::rw-
user:yu:rwx #effective:r–
group::r–
group:yu:rw- #effective:r–
mask::r–
other::r–
4.5 facl 权限的复制、备份和恢复
复制acl权限
getfacl file1 | setfacl --set-file=- file2
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是tar等常见的备份工具是不会保留目录和文件的ACL信息。

#得到app目录及其目录里所有文件的acl权限(-R参数),写入到/root/app.acl文件里
$ getfacl -R /app >/root/app.acl

#去掉/app目录及其目录里所有文件的acl权限(-b去除)
$ setfacl -R -b /app

#恢复权限

#绝对路径法
$ setfacl --set-file=/root/app.acl /app

#相对路径法(需要在要恢复的文件夹或文件的上一级目录运行)
$ setfacl --restore /root/app.acl

5. 实例演示

SUID

普通用户通过passwd命令修改自己的密码
在这里插入图片描述

setfacl

#修改的密码最终会存储在/etc/shadow文件中,虽然用户有passwd命令的执行权限,但是shadow文件的权限为000
#参考上文所说的进程的安全上下文,是没有权限修改密码的,那么为何我们能修改密码成功呢?
$ sudo ll /etc/shadow
----------. 1 root root 823 Nov 2 15:36 /etc/shadow

#查看一下passwd这个可执行程序文件的权限,竟然是rws,出现了s权限,这就是SUID权限
#这里A用户执行passwd实际上进程属主不再是A而是root所以能修改密码了
$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd

#使用chmod命令就可以实现
$ sudo chmod u+s /usr/bin/passwd
SGID

大家创建各自的文件实现协同工作

#默认情况下,用户A创建一个文件其属主是A,属组是A的基本组这没有问题。
#如果在一个公共目录中,大家创建各自的文件想实现协同工作,但是由于系统的这种默认机制显然A用户访问B用户的文件会被禁止,因为不在一个组呀!
#当某个目录设定为SGID权限后,则对此目录拥有写权限的用户在此目录中创建的文件属组为目录的属组,而非用户的基本组
$ sudo chmod g+s /tmp/public
Sticky

在一个协同工作目录中,用户可以互相编辑文件但是不允许删除别人的文件

$ sudo chmod o+t /tmp/public
ACL

#在/testdir/dir里创建的新文件自动属于g1组
#组g2的成员如alice能对这些新文件有读写权限
#组g3的成员如tom只能对新文件有读权限
#其它用户(不属于g1,g2,g3)不能访问这个文件夹。

#前期准备
$ echo g{1,2,3} | xargs -n 1 groupadd
$ tail -n 3 /etc/group
g1❌1002:
g2❌1003:
g3❌1004:
$ useradd alice -g g2
$ useradd tom -g g3

#题目解答
$ chgrp g1 /testdir/dir
$ chmod g+s /testdir/dir
$ setfacl -Rm d:g:g2:rw /testdir/dir
$ setfacl -Rm d:g:g3:r /testdir/dir
$ chmod o= /testdir/dir

#2、备份/testdir/dir里所有文件的ACL权限到/root/acl.txt中,清除/testdir/dir中所有ACL权限 ,最后还原ACL权限。

#备份权限
$ getfacl -R /testdir/dir > /root/acl.txt

#清除/testdir/dir权限
$ testdir/dir

#还原ACL权限,两种方法。
#第一种绝对路径法:
$ setfacl --set-file=/root/acl.txt /testdir/dir

#第二种相对路径法(查看acl.txt看是相对路径testdir/dir,是相对于/的,所以先cd到/,这步不能省)
$ cd /
$ setfacl --restore /root/acl.txt

文章作者: Escape

文章链接:

https://www.escapelife.site/posts/a176f986.html

版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Escape !

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73372.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue2基础篇-20-生命周期回调函数

1.vue2的生命周期 beforeCreate :在实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用; created: 在实例创建完成后被立即同步调用; beforeMount: 在挂载开始之前被调用 mounted : 实例被挂载后调用; beforeUpdate: 在数据发生…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java民生租赁车辆管理信息系统w29s0

如果你自己基础不好或者是小白的情况下那就建议你选择网站、系统类的去做,但是还得问问你们导师,如果你们导师没问题就可以,因为有的导师是不愿意你们选择做网站、系统的,毕竟做的人比较多,重复率调高,选择…

springboot中统一日志管理

Springboot中统一日志管理 一、为什么要用日志? 一般分为两个大类:操作日志和系统日志 **操作日志:**用户在操作软件时记录下来的操作步骤,便于用户自己查看。主要针对的是用户。 **系统日志:**系统日志是记录系统…

zeno封装子图

选中想要封装的节点,点击编辑->简易子图 2. 设置输入输出(可以有多个) 最后,在main图中测试

CDGA|6大核心环节,详解医疗机构如何做好数据治理

医疗机构进行数据治理的过程,就是对其数据资产进行管理和控制,支撑并保障数据被安全高效地交换与应用的过程。 我们接下来主要从6个核心环节来详解医疗机构如何做好数据治理。 环节一:设立数据治理组织结构 设计健全的数据治理组织结构&…

网络配置(桥接仅主机自定义网络)

目录 一、网络模式简介 1.bridge模式(默认桥接模式) 总结:桥接模式的特点就在于,它所虚拟的服务器都有独立的IP 初始网络模式 2.host模式(仅主机模式) 总结:仅主机它不会分配IP&#xff0c…

java计算机毕业设计ssm校园考研互助网站71747(附源码、数据库)

java计算机毕业设计ssm校园考研互助网站71747(附源码、数据库) 项目运行 环境配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

基于Android的校园二手闲置物品交易系统设计与实现

一、选题背景和意义 随着商品经济的快速发展,人们的生活中出现了大量的闲置物品,这种现象在当代大学生中尤为显著。大多数学生是通过摆地摊的方式来交易闲置物品,这种交易方式效率低下并且信息滞后。还有一部分学生通过BBS论坛来交易闲置物品…

springboot--web开发

使用springboot开发web项目 1)、创建SpringBoot应用,选中我们需要的模块; web 2)、SpringBoot会默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以将项目运行起来 ;/ 3)、自己编…

Paddle 点灯人 之 Paddle介绍

Paddle 点灯人 之 Paddle介绍 文章目录Paddle 点灯人 之 Paddle介绍选择Paddle学习的原因Paddle免费提供的强大算力资源Paddle简单介绍Paddle的优势Paddle相关资料汇总选择Paddle学习的原因 首先,我想讲一下,为什么我想学习paddle,或者说为什…

【C++】STL——vector的模拟实现

vector的模拟实现 文章目录vector的模拟实现一、vector模拟实现总览二、模拟实现vector函数接口1. 默认成员函数1.1. 构造函数1.2. 析构函数1.3.拷贝构造函数(深拷贝)1.4. 赋值运算符重载函数2. 容量操作函数2.1. size和capacity2.2. resize2.3. reserve…

高数 | 【数一专项】真题回顾整理及知识点总结

本文摘录于周洋鑫2023考研数学真题刷题班串讲~ 均为自用笔记整理。 ヾ(◍∇◍)ノ゙ 加油! 对密度的积分 一、空间几何 1.1、旋转面方程 ☆ 常见二次曲面

MINRES(极小残差算法)求解线性系统详细解读

本博客参考了添加链接描述这篇知乎 先看我这篇博客介绍添加链接描述 QkRk−1Q_k R_{k}^{-1}Qk​Rk−1​的处理 假设Dk[d1,d2,…,dk]QkRk−1D_k [d_1,d_2, \ldots, d_k] Q_k R_{k}^{-1}Dk​[d1​,d2​,…,dk​]Qk​Rk−1​,假设RkR_kRk​的第iii行第jjj列元素为ri,…

在无控制点的条件下如何用RTK定线定位

作为测量人的你,是否遇到过暂时没有测区范围内的控制点资料,或者虽然有控制点资料,但没有这些点的 WGS84坐标的情况?这时候如何处理呢? 其实在没有控制点的情况下,可以利用RTK技术提供的在任意点上地方化功…

JavaSe-泛型机制详解

1 理解泛型的本质 JDK 1.5开始引入Java泛型(generics)这个特性,该特性提供了编译时类型安全检测机制,允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再…

2022最后一个月如何快速发表一篇SCI

距2022年结束仅剩不到1个月,年终考核迫在眉睫,您的年初计划是否都已完成?2023年的科研计划是否也已提上日程?想要在2023年论文发表快人一步,早安排才是关键! 进入12月,我处EA-ISET协会重点SCI/…

基于jsp+mysql+ssm手机综合类门户网站-计算机毕业设计

项目介绍 手机综合类门户网站采用ssm框架和eclipse编辑器、MySQL数据库设计并实现的,主要包括系统手机评测管理模块、文章管理模块、手机新闻管理、所有评论管理、登录模块、和退出模块等多个模块。 管理员的登录模块:管理员登录系统对本系统其他管理模块进行管理。…

vue3 速成教程(上)

学 vue3 通过官方文档更详细,不过阅读本博客,可以更容易理解,且帮你速成! 官方文档(记得将API风格偏好切换为 组合式 否则你学的是vue2) https://cn.vuejs.org/guide/introduction.html 学习前的准备 创建…

HBase的读写流程

HBase的读流程 客户端从zk获取.META.表所在的regionserver;去对应的regionserver读取.META.表,获取region所在信息(region在哪个regionserver上保存的信息);客户端到了regionserver时,先找到region&#xf…

MongoDB聚合小tips

MongoDB对于嵌套(Embedded)数组的过滤 首先定义下结构 {"play_id": "639045efae627e2aacf35dce","region_id": 1106,"point_list": [{"id": "1faf5aa9-e262-45fe-96dd-64395c96cf5c",&qu…