Linux文件系统权限管理

本文详细解析了ACL权限的概念,包括查看、设置和删除ACL权限的方法,以及SetUID、SetGID和StickyBIT特殊权限的工作原理。通过具体实例展示了如何在Linux系统中管理和应用这些权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ACL权限
ACL权限简介
在这里插入图片描述
查看分区ACL权限是否开启
#dumpe2fs -h /dev/sda3
dumpe2fs命令是查询指定分区详细文件系统信息的命令
#mount -o remount,acl
重新挂载根分区,并挂载加入ACL权限

选项:
-h  仅显示超级块中信息,而不显示磁盘块组的详细信息

查看ACL命令(这个比较实用和重点)
getfacl 文件名
用以查看ACL权限

设定ACL权限的命令
setfacl 选项 文件名

-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认的ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限

好了,下面的例子用于解释权限的整个问题

#useradd zhangsan 添加用户zhangsan
#useradd lisi 添加用户lisi
#useradd st 添加用户st
#groupadd tgroup 添加组tgroup
#gpasswd -a zhangsan tgroup 添加用户zhangsan到组tgroup中
#gpasswd -a lisi tgroup 添加用户lisi到组tgroup中
#mkdir /project 创建目录/project
#chown root:tgroup /project/ 修改目录的拥有者和所属组
#chmod 770 /project/ 修改目录的权限为777
#setfacl -m u:st:rx /project/ 给用户st设置权限,其中参数-m代表设置权限 u表示用户 st代表用户st rx代表赋予的权限为读和执行 /project/为ACL权限设置的目录

与上面的例子的最后一条相似,可以给用户组设定ACL权限

#groupadd tgroup2
#setfacl -m g:tgroup2:rwx /project/ 
#为组tgroup2分配ACL权限。使用“g:组名:权限”格式

最大有效权限与删除ACL权限

在这里插入图片描述
当查看一个文件的ACL时,会看到上图的mask,mask是用来指定最大有效权限的,如果我们给用户赋予了ACL权限,是要和mask的权限“相与”才能够得到用户的真正权限。

设置mask权限的方法:setfacl -m m:rx /project/
-m后面的m代表的就是mask
修改之后的效果如下图所示
在这里插入图片描述
-x指定删除对应的组
-b删除所有的已添加组权限

默认ACL权限与递归ACL权限
递归ACL权限是指在设定ACL权限以后,所有子文件和子目录也会拥有相同的ACL权限

#setfacl -m u:用户名:权限 -R 文件名 这个里面的R参数就代表的是递归

默认ACL权限
默认ACL权限的作用是如果给父目录设定了默认的ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限
使用方法是

setfacl -m d:u:用户名:权限 文件名 这个里面的d代表的就是default,默认的意思

文件特殊权限
1.SetUID

(1)只有可以执行的二进制程序才能够设定SUID权限
(2)命令执行者要对该程序拥有x(执行)权限
(3)这一段网友说像是Windows下的以管理员的身份运行。命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
(4)SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

比如说一个用户他要去修改/etc/shadow文件,可以使用passwd修改自己密码的方式去修改,但是不能够通过cat查看的方式去修改,这是为什么呢?首先要明确一点root用户可以干任何事情,它可以修改所有用户的密码,通过执行passwd命令,这个命令因为拥有SetUID权限,就可以让普通用户在执行命令是以root的身份去执行。而root用户也可通过cat命令操作/etc/shadow文件,而cat命令是没有SetUID权限的,所以普通用户就无法以root用户的身份,通过cat指令去查看/etc/shadow文件。

具体的passwd与cat命令的SetUID权限如下面的两张图所示
在这里插入图片描述
在这里插入图片描述
由上面可以看到passwd有红框圈起来的s,而cat没有
上面的所有解释可以由下面的表示出来
在这里插入图片描述
lamp用户无法灵魂附体,即使执行了cat命令还是无法像root用户一样通过cat命令去查看/etc/shadow文件的内容,而root本身是可以通过cat命令查看shadow文件的内容的

好了,下面来介绍设定SetUID的方法

4代表SUID
chmod 4755 文件名 所有者 所属组 其它
chmod u+s 文件名

取消SetUID的用法

chmod 755 文件名
chmod u-s 文件名

危险的SetUID

(1)关键目录应该严格控制写权限。比如“/”、“/usr”等
(2)用户的密码设置要严格遵守密码三原则
(3)对系统中默认应该具有SetUID权限的文件做一个列表,定时检查有没有这之外的文件设置了SetUID权限

2.SetGID

SetGID针对文件的作用
(1)只有可执行的二进制程序才能够设置SGID权限
(2)命令执行者要对该程序拥有x(执行)权限
(3)命令执行在执行程序的时候,组身份升级为该程序文件的所属组
SetGID权限同样只在改程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

好了,这里要举的例子是locate文件搜索命令
先看一看
在这里插入图片描述
在这里插入图片描述
对上面的一个解释说明,比如说一个lamp用户要通过使用locate命令
于是/usr/bin/locate是可执行二进制程序,可以赋予SGID,
执行用户lamp对/usr/bin/locate命令拥有执行权限
执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
命令结束,lamp用户的组身份返回lamp组

接下来来看,SetGID针对目录的作用

普通用户必须对此目录拥有r和x权限,才能进入此目录
普通用户在此目录中的有效组会变成此目录的属组
若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组

那么如何设定SetGID呢
如下

2代表SGID
#chmod 2755 文件名
#chmod g+s 文件名

同样的取消一个文件的SetGID方法如下

#chmod 755 文件名
#chmod g-s 文件名

3.Sticky BIT
关于SBIT粘着位的说明

(1)粘着位目前只对目录有效
(2)普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
(3)如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下的所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能够删除自己建立的文件,但是不能删除其他用户建立的文件。

最常见的有粘着位的目录就是/tmp目录
那么按照惯例来介绍一下粘着位的设置与取消

设置粘着位
#chmod 1755 目录名
#chmod o+t 目录名

取消粘着位
#chmod 777 目录名
#chmod o-t 目录名

文件系统属性chattr权限
首先做一点点的说明,chattr change file attribute on a linux file system.chattr的作用是为了防止包括root用户在内的用户的误操作而设置的命令
chattr的命令格式

#chattr  [+-=] [选项] 文件或者目录名
+:增加权限
-:删除权限
=:等于某项权限
选项:
i:如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;
如果对目录设置i属性,那么只能够修改目录下文件的数据,但不允许建立和删除文件
a:如果对文件设置a属性,那么只能够在文件中增加数据,但是不能够删除也不能够修改数据;
如果对目录设置a属性,那么只允许在目录中建立和修改文件,但是不允许删除

通过chattr修改过文件的属性,一般的ls命令是看不到具体的修改的,所以要使用lsattr来修改
下面举一个例子

touch ahi
echo jkjkl >> ahi 此时就向文件ahi中添加了jkjkl数据
chattr +i ahi 好了这个文件就已经被锁死了


lsattr 选项 文件名
选项:
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的

系统命令sudo权限**
root把本来只能超级用户执行的命令赋予普通用户执行
sudo的操作对象是系统命令

我们来看一下这个命令的使用例子

#visudo
sc ALL = /sbin/shutdown -r now 这句话代表的就是给sc用户在任何的IP下都可以执行重启命令
再切换成为一个普通用户,执行sudo -l 显示被root用户分配的权限
sudo  /sbin/shutdown -r now就可以在执行赋予的权限了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值