Linux教程

Linux文件特殊权限

本文主要是介绍Linux文件特殊权限,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文件的权限除了rwx即读、写、执行的权限还有其他特殊的权限

SUID

Set UID,当s的标志出现在文件拥有者的x位置上时,就拥有SUID的权限,具体来说功能如下

  • SUID仅对二进制程序有效
  • 执行者对该程序需要有x的权限
  • 本权限仅在该程序执行时有效
  • 执行者会拥有程序拥有者的权限

我们可以由如下的例子,对于linux系统/usr/bin/passwd这个文件记录所有账号的密码,只有root可以读写入这个文件

image-20211024202829753

但对于我的普通用户astraym也可以通过passwd指令来修改自己的密码

image-20211024203228846

但是如果用cat指令去读取密码就不能读取

image-20211024220620847

这是因为cat指令没有被设置SUID的权限

image-20211024220820122

用一张示意图来说明SUID执行的过程

图 SUID程序执行过程

如果我们想要让astraym能够读取/etc/passwd文件的内容,只需要让root用户用chmod指令给与其SUID的权限即可

SGID

即Set GID,当s的标志出现在用户组的x位置上时,就拥有SUID的权限。与SUID不同的是,SGID可以针对目录或者文件来设置,对文件来说SGID有如下的功能,这个时候SGID的用法和SUDI非常相似。

  • SGID对二进制程序有用
  • 程序执行者对于该程序来说,需具有x的权限
  • 执行者在执行的过程中会获得用户组的权限

除了二进制程序之外,SGID也能作用于目录,当一个目录被设置了SGID的权限之后

  • 用户若对于这个目录有r与x的权限时,该用户能进入此目录
  • 用户在此目录下的有效用户组将会变成该目录的用户组
  • 若用户在此目录下具有w的权限,则用户所建立的新文件,该新文件的用户组与此目录的用户组相同

SBIT

即Sticky Bit目前只针对目录有效,对于文件没有效果,SBIT的作用是:

  • 当用户对于此目录具有w、x权限,即具有写入的作用
  • 当用户在该目录下建立文件或目录时,仅有自己与root才有权利删除该文件

简单来说,当SBIT位标记的时候,除了所有者和root能够删除该目录的文件

举个例子,linux的/tmp本身的权限是[drwxrwxrwt],权限信息的最后一位t表面该目录被设置了SBIT权限。我们在这里新建一个名为test的文件并将权限设置为777,然后尝试删除该文件。

image-20211025002344707

可以看到我们没法删除/tmp下的test文件

设置SUID/SGID/SBIT权限

以数字类型设置权限

SUID/SGID/SBID权限对应的数字分别为

SUID->4
SGID->2
SBIT->1

#设置一个权限为'-rwxr-xr-x'的文件test的SUID权限,在原先的755前加上4即可,其他同理
chmod 4755 test;

一般情况下,s或者t会代替x这个权限。但是当这个文件或者目录本身没有x权限,添加SUID、SGID、SBIT之后会显示为大写的S或T:

image-20211025003056548

这种情况是需要非常注意的,当文件的拥有者都无法执行该文件时,拥有SUID的用户当然也没法执行。

以符号类型设置权限

chmod u+s test #为test文件加上SUID权限
chmod g+s test #为test目录加上SGID权限
chmod o+t test #为test目录加上SBIT权限
chmod g+s,o+t test #为test目录加上SGID和SBIT权限
这篇关于Linux文件特殊权限的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!