Linux除了基本rwx权限的特殊权限知识总结(ACL,Suid,Sgid,SBIT,chattr)

Linux中最基本的权限是rwx,但有时候一些问题是这三个基本权限解决不了的,所以博主学习总结了下面一些特殊权限,希望对你有所帮助。

目录:

  • ACL权限
  • 文件特殊权限:
    1.SetUID
    2.SetGID
    3.Sticky BIT
  • 文件系统属性chattr权限

一。ACL权限

注意:这里的ACL不是防火墙那里的访问控制列表。

Linux中的ACL权限是为了解决三个身份(user所有者,group所属组,other其他人)不够用的情况
看下图,试想这种情况:/project文件是一个教学文件,它的所有者,数组(相当于老师,同学)对这个文件肯定都是rwx权限,完全可以操作,对other其他人是0权限,其他人不能看,写这个文件。所以这个文件夹的权限是770。 但是这时候来了一个试听用户,我们希望给他的权限是r-x权限,但好像这时候把他放到三个身份都不合适,这时候就要用到ACL权限了。
在这里插入图片描述
ACL系统一般默认都是支持的,接下来看一下怎么使用设置ACL权限

设定ACL权限:
setfacl 选项 文件名
在这里插入图片描述
现在我们使用setfacl命令来解决上图中的问题,使用如下命令:

setfacl -m u:st:rw /project

其中:

  • u代表给用户设置ACL权限,如果给组设置用g
  • st是用户名
  • rw是你要给这个用户的权限

然后设置完,我们使用ls命令查看project时会发现 权限后面多了一个“+”号,这就说明它有了ACL权限了。
并且我们可以使用getfacl命令查看具体的ACL权限
在这里插入图片描述
我们可以看出,在Linux中通过ACL权限我们可以达到类似windows中给任意用户单独添加权限的效果。

细心看上图,有一个mask:rwx,这里的mask和umask权限掩码的功能基本相同,是控制默认权限的,也就是说,其实我们上面给用户的ACL权限rw和这个mask:rwx想与得到的结果才是用户真正的权限。

修改这里的mask权限的方法:

setfacl -m:rx /project

这时候,默认mask权限就变为rx了。(可以防止不小心给用户过高权限)

删除ACL权限:
删除st用户的ACL权限

setfacl -x u:st /project

直接删除这个文件所有ACL权限

setfacl -b /project

如果想给父目录中所有子目录,文件都设置ACL权限,那么我们可以用“-R”选项递归设置ACL权限。

set -m u:用户名:权限: -R 目录名

最后,如果我们想给一个目录设置默认ACL权限,即只要这个目录里新建文件,这些文件就都直接有ACL权限,而不用每次单独重新设置:
只需要前面加一个d就好了,d代表default默认

set -m d:u:用户名:权限: -R 目录名

Linux常用ACL权限的方法就是上面这些,稍微总结一下用到的命令就是这两个:
setfacl 设置,删除ACL权限
getfacl 查看ACL权限

二。文件特殊权限

1.SetUID

当我们查看下面的文件时,我们会发现,有一个s。这是因为passwd命令有Suid权限
在这里插入图片描述
SUID权限指的就是在文件所有者执行权限的位置是一个s
后面要说到的SGID也就是文件从属组的执行权限的位置是一个s。

而这有什么用呢?
我们知道,在我们使用passwd命令设置密码的时候,实际上是写入了/etc/shadow这个文件,我们来查看一下这个文件的权限:
在这里插入图片描述
我们发现是000,也就是普通用户是根本没办法对他进行操作的,但是我们确实可以更改密码对吧。
这里就是因为passwd这个命令拥有SUID权限,当其他用户使用这个命令时,会暂时获取其所有者(即root) 的权限,我们知道rwx权限是无法限制root用户的,因此所有用户都可以使用passwd命令来修改设置密码。

下面具体介绍SUID的特点与设置方法。

SUID权限的特点:

  • 只有可以执行的二进制程序才能设定SUID权限
  • 命令执行者要对该程序拥有x (执行)权限
  • 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的所有者)
  • SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效

设置SUID权限的方法:
有下面两种方法:

chmod 4755 文件名
chmod u+s 文件名

4代表SUID

取消SUID权限:

chmod 755 文件名(不加4了)
chmod u-s 文件名

(注:去掉SUID后,再ls查看文件会发现s变成了S,说明SUID已经失效了,小写的s才有效)

SUID不要随便设置,有很高的危险性
比如我们使用 chmod 4755 /usr/bin/vim 给了vimSUID权限,那么随便一个普通用户都能随意更改系统文件了,会带来很大威胁(如某进入/etc/passwd把自己的UID改成0,把自己编程超级用户)。

2.SGID

SGID与上面的SUID很像,命令执行程序的时候,组身份暂时升级成该程序文件的属组。用的相对不是很多
看一个例子,locate命令
从属用户组执行权限的位置是一个s。
在这里插入图片描述
简单说一下,locate搜索的时候实际搜的是mlocate这个数据库,因此速度比较快,但当我们看这个文件权限是会发现为640,也就是其他用户本不应该能访问,但正因为locate命令有SGID权限,因此,其他用户使用locate命令时,暂时加入到了slocate这个组,也就可以访问那个文件了。
在这里插入图片描述
设置SGID命令:

chmod 2755 文件名
chmod g+s 文件名

同上面的SUID很类似,看懂上面的,这个应该不难理解

3.Sticky BIT(粘着位)

作用:普通用户不能删除其他用户建立的文件(即使拥有w权限)
比如/tmp目录的权限是777,此时user1在tmp目录下创建了一个文件,但是user2来了可以直接把user1创建的文件删了,或者更改。
但是设置了SBIT权限(可以看到图中tmp其他人的执行权限的位置变为了t),用户之间就不能这样任意更改创建的文件了。
在这里插入图片描述
接下来介绍SBIT的特点与设置:

特点:

  • SBIT只对目录设置有效
  • SBIT对root无效
  • 目录设置了粘着位,用户不能删除其他用户创建的文件(可以看),只能删自己创建的。
  • 只能在root用户下设置某个目录的粘着位权限

设置SBIT 命令:

 chomod 1755 目录名
chmod o+t 目录命

取消:
chmod 755 目录名
chmod o-t 目录名

三。文件系统属性chattr权限

attr是attributes属性的缩写

前面说的基本所有权限对root都是没有限制的,而使用chattr可以对root进行一些限制

有两个属性:i 和 a

  • i;如果对文件设置i属性,那么不允许对文件进行 删除、改名,也不能添加和修改数据;如果对目录 设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
  • a:如果对文件设置a属性,那么只能在文件中增加 数据,但是不能删除也不能修改数据;如果对目录设置a属性,那么只允许在目录中建立和修改文件. 但是不允许删除

可以下图的例子,我现在就是root用户,我使用chattr 给test文件设置了i属性(相当于锁柱了这个文件),注意使用ls是不能查看到的,需要使用lsattr命令查看。然后发现我不能对文件进行更改了,提示权限不够!
在这里插入图片描述
设置的命令

chattr +i 文件/目录名
chattr +a 文件/目录名

取消:
chattr -i 文件名
chattr -a 文件名

这个命令主要是为了防止用户误操作,不小心更改或删除重要文件或破坏目录结构

本文也是博主看了“兄弟连”的Linux视频学习总结的,讲的挺好的,有小伙伴感兴趣可以去搜一搜

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值