文章目录
- 前言
- 1. 默认权限umask
- 1.1 默认权限含义
- 1.2 查看默认权限
- 1.3 默认权限在文件与目录的异同
- 2. 特殊权限
- 2.1 SUID
- 2.2 SGID
- 2.3 SBIT
- 2.4 SUID/SGID/SBIT 权限设置
- 2.4.1 数字法
- 2.4.2 符号法
- 3. file指令
前言
在linux学习6里面,通过ls -al命令列出文件的所有详细信息,对其中的几种权限的意思以及如何更改权限进行了阐述。这小节对文件的默认权限进行阐述。
1. 默认权限umask
1.1 默认权限含义
我们创建一个文件,例如touch test.sh
,我们并没有指名文件的所有者,同组人以及其他用户的权限,但是我们通过ls还是可以看到这个文件在每一个用户组别上有对应的权限,这就是默认权限了。
1.2 查看默认权限
umask 就是指定 “目前使用者在创建文件或目录时候的权限默认值”。
查询umask的具体内容有两种指令:
- umask
- umask -S
前者是数字体态的权限设置分数,后者是以符号类型的方式来显示出权限。
对于umask
指令,为什么得到的数字是0002,这个有啥含义呢?权限不是只有三个分组吗?怎么多了一个?
第一个0标识特殊权限,等下我们会讲。
第二个0标识文件拥有者所有的权限。
第三个0标识文件拥有者所有的权限。
第四个2标识文件拥有者所有的权限。
我们通过对比umask
和umask -S
两个指令输出的结果发现,当对应分组的权限数字为0时,这个分组的权限为rwx
,为2时权限是rx
这里我们是否可以想到我第一节里面写的权限数字对应的含义:
写权限 r=4
,读w=2
,执行权限x=1
。
对比后我们可以发现,umask里面的数字其实是做的减法,0002这里2就表示在其他用户的权限中,没有读权限,就是在三个权限rwx:7
中,减去w:2
。
如果是0
那标识权限rwx:7
一个都不少,保留所有权限。
1.3 默认权限在文件与目录的异同
默认权限在文件和目录上稍有些不同,如下图所示
我们可以看到文件是默认不带执行权限X的,而目录是带X的。
这个是因为我们通常情况下,创建文件不一定是可执行文件,也有可能是文本文件等;而目录创建了我们就要对它进行操作,比如进入目录这个操作就需要用到执行权限x,所以系统才会这样设置。
2. 特殊权限
刚才umask指令输出的对应结果有4个数字,第一个0表示特殊权限。
我们先来看特殊指令出现的情况
这里我们发现/tmp
的权限里面有个t
,/usr/bin/passwd
的权限有个s
。这就是特殊权限了,区别于传统的rwx
。
2.1 SUID
基本上SUID有这样的限制与功能:
1.SUID 权限仅对二进制程序(binary program)有效;
2.执行者对于该程序需要具有 x 的可执行权限;
3.本权限仅在执行该程序的过程中有效 (run-time);
4.执行者将具有该程序拥有者 (owner) 的权限。
上面的话有些抽象,我们举个例子进行深入:
Linux 系统中,所有帐号的密码都记录在 /etc/shadow
这个文件里面,这个文件的权限为:“---------- 1 root root”,意思是这个文件仅有root可读且仅有root可以强制写入而已。 既然这个文件仅有 root 可以修改,并且用户名为pi
的用户,通常情况下是可以修改自己的密码,那为什么pi
用户可以修改自己的密码(即shadow文件的内容),这个问题大家是否想过呢?
pi 对于 passwd 这个程序来说是具有 x 权限的,表示 pi 能执行 passwd;
passwd 的拥有者是 root 这个帐号;
pi 执行 passwd 的过程中,会“暂时”获得 root 的权限;
/etc/shadow就可以被 pi 所执行的 passwd 所修改。
总结一下:
pi拥有对passwd程序的可执行权限x,且passwd是二进制程序,执行过程中将会暂时获得root权限对/shadow进行操作。总而言之,SUID就是用A的尚方宝剑去执行本该A执行的任务。
2.2 SGID
SUID和SGID只有一个字只差,U与G,那对应的其实就是用户User和Group。
与 SUID 不同的是,SGID 可以针对文件或目录来设置。
如果是对文件来说, SGID 有如下的功能:
1.SGID 对二进制程序有用;
2.程序执行者对于该程序来说,需具备 x 的权限;
3.执行者在执行的过程中将会获得该程序群组的支持;
当一个目录设置了 SGID 的权限后,他将具有如下的功能:
1.使用者若对于此目录具有 r 与 x 的权限时,该使用者能够进入此目录;
2.使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
用途
:若使用者在此目录下具有 w 的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。
这个权限的用法其实类似于SUID,就披个组群马甲进行操作,基本是一致的。
2.3 SBIT
SBIT(Sticky Bit)目前只针对目录有效,对于文件已经没有效果了。
SBIT 对于目录的作用是:
1.当使用者对于此目录具有 w, x 权限,亦即具有写入的权限时;
2.当使用者在该目录下创建文件或目录时,仅有自己与 root 才有权力删除该文件
举个例子:
当甲这个使用者于 A 目录是具有群组或其他人的身份,并且拥有该目录 w 的权限, 这表示“甲使用者对该目录内任何人创建的目录或文件均可进行 “删除/更名/搬移” 等动作。” 不过,如果将 A 目录加上了 SBIT 的权限项目时, 则甲只能够针对自己创建的文件或目录进行删除/更名/移动等动作,而无法删除他人的文件。
2.4 SUID/SGID/SBIT 权限设置
2.4.1 数字法
类似于rwx
的权限设置对应的数字,这三个也有对应的数字。
4 为 SUID
2 为 SGID
1 为 SBIT
所以我们在创建文件或者目录的时候给特殊权限可以这样:
这里第二句话;
的作用其实就是标识执行完chmod
之后紧跟着使用指令ls
。
对上面图片输出的-rwsr-xr-x
进行分析
标识 | 含义 | 对应数字 |
---|---|---|
- | 目录 | / |
rws | 拥有者的权限为读写执行 且用s 替代x 表示设定了SUID 权限 | 47(第一个标识特殊权限的数字,第二个标识拥有者的权限) |
r-x | 分组所拥有的权限为读和执行 | 5 |
r-x | 其他用户所拥有的的权限为读和执行 | 5 |
写到这,那么添加其他特殊权限应该能依葫芦画瓢了。
有个特殊的例子这里提及一下:
这里S,T什么的大写了。
怎么会出现大写的 S 与 T 呢?不都是小写的吗? 因为 s 与 t 都是取代 x 这个权限的,但是我们是下达 7666 ,也就是说, user, group 以及 others 都没有 x 这个可执行的标志( 因为 666 嘛 ),所以,这个 S, T 代表的就是“空的”啦!怎么说? SUID 是表示“该文件在执行的时候,具有文件拥有者的权限”,但是文件 拥有者都无法执行了,哪里来的权限给其他人使用?当然就是空的啦
2.4.2 符号法
其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t :
#设置权限成为 -rws–x–x 的模样:
chmod u=rwxs,go=x test; ls -l test
-rws–x–x 1 root root 0 Jun 16 02:53 test
承上,加上 SGID 与 SBIT 在上述的文件权限中!
chmod g+s,o+t test; ls -l test
-rws–s–t 1 root root 0 Jun 16 02:53 test
3. file指令
file指令通常用来查看文件的数据格式;
在这片博客里面写到一部分是因为如果我们查看可执行文件,那就会涉及到文件的suid
权限。
通过file /usr/bin/passwd
可以查看可执行文件的的所有基本数据。
总结:这篇文章主要对文件权限进行深入,关于默认权限以及特殊权限的相关操作是本节的重点。尝试自己举个简单的例子,似乎就变得简单了些。