您的位置:首页 > 运维架构 > Linux

Linux学习第十一篇--默认权限和特殊属性

2017-06-16 14:12 274 查看

前言

我们在使用mkdir命令的时候可以通过使用 -m 选项来制定创建目录的权限.但是如果我们不使用-m参数,创建出来的目录的权限是什么样子呢?

Linux的默认权限--umask

umask在linux可用于查看和设定用户创建目录或文件时的默认权限.
我们可以直接键入命令umsk 查看当前的默认权限,也可使用umask -S 让默认权限以字符的形式展示出来,也可以使用umask 数值来设定默认权限
我们首先要知道一点,对于目录来说,其默认权限属性是777,而文件则是666.之所以出现这种状况,主要是因为.
1.对于目录来说,因为r权限涉及到该目录是否能够被查看,w权限代表着该目录内部是否允许操作,x权限代表着该目录是否能够进入,正常来说我们创建目录的目的,必然是需要进入其中,进行文件操作的.所有目录的默认权限属性是777,即drwxrwxrwx.
2.但是对于文件来说,rw权限通常来说是会使用到的,但是x权限通常只有shell script 等少数类型的文件才会使用,所有默认不开启x权限,故文件的默认权限时666.即 -rwxrwxrwx.
 当然上面说的是目录和文件的默认权限属性,而不是实际创建出来的目录权限,在实际创建出目录后,还需要用这个默认值减去umask的值.
比如,如果umask的值为0022,那么创建目录的时候就需要使用drwxrwxrwx   减去 -----w--w- 即, drwxr-xr-x.而事实上也的确如此.



同理对于文件来说,默认权限是666,即- rw-rw-rw- 减去默认的权限0022即 -----w-w-   创建出来的文件权限应该为-rw-r--r--,结果如下:



这就是linux中文件/目录的默认权限.但是有一点需要特别注意的是.
[b]创建目录或文件的权限,并不是使用默认权限属性(666/777)减去umask就行,比如如果当前umask的值为0033,创建文件后,那么直接减的话,将会发现权限结果为633.

得出的权限结果为 -rw--wx-wx 但是实际权限应该是 -rw-r--r--.所以应该是转换成rwx的表示方法,然后剔除掉需要删掉的权限.

Linux文件的特殊权限

本篇博客一开始探讨的是默认权限的问题,通过之前的学习,此时已经不难发现,文件权限主要是rwx三个参数,那么除了这三个真的就没了吗?
of  course not,不然我在这干啥...
如果我们查看passwd命令的文件属性的话,会发现一件很尴尬的事情...



他的所属用户的执行权限的位置不是x也不是-.而是一个s...
喵喵喵!!?excuse me!!??
这个s是个什么权限,做什么用的?丫没见过啊...
在linux中,刚才的这个s,有一个名称叫 Set UID,也成为SUID,他是一种特殊权限.
SUID只能出现在文件上,且仅对二进制文件有效.他的作用就是,当一个用户拥有该文件x(执行)权限的时候,那么在执行过程中,执行者拥有该文件所属者的权限.
听不懂吗?是不是有点懵?别急,慢慢的,一句一句的,多读两遍.
读完之后就会发现自己慢慢懂了...是在搞不懂,去/usr/bin下看看这些命令,然后找到有SUID权限的文件,慢慢研究~(特殊权限的文件会被特殊颜色标记哦).
我们都知道一个文件的权限分为三个分组,所属者,所属组,其他用户,那么既然有使用在所属者上的特殊权限,也应该有用在所属组上权限呀.
当当当当...所属组上的这个权限就是 Set GID,简称SGID,在所属者上叫SUID,在所属组上叫SGID.恩,这个推理很完美,没有一丢丢的问题.
和SUID略有不同的是,SGID不仅能够应用在二进制程序文件上,也可以作用在目录上.
如果是文件,拥有SGID权限的文件的作用是这样的:当程序对该二进制文件有执行(x)的权限时,那么在该文件执行过程中执行者将会获取该程序所属组的权限.
老规矩..慢慢的,一句一句 ,多读几遍.
如果SGID作用于目录的话,如果用户对于该目录有rx(可进入该目录)权限,那么在此目录下,该用户在此目录下的有效群组是该目录的所属组.如果用户还有w(写的权限),那么该用户创建的文件的所属组为该目录的所属组.

等等,别急,先别急着读两遍,这里面提到了一个名词,叫做有效群组,何为有效群组?
我们知道用户和群组的关系是多对多的关系,即一个用户可以属于多个群组,一个群组可以拥有多个用户,那么对于用户来说哪个才是有效群组呢?我们可以使用groups命令来查看当前用户的群组列表,第一个输出的群组就是有效群组.通常来说,有效群组的作用就是用来创建文件.
好了,了解了有效群组,回到SGID目录那一部分,老规矩,你懂得.

接下来再聊一种只对目录有效的特殊权限--Sticky Bit.恩...他就叫SBIT.

SBIT作用于目录时,如果用户对该目录拥有wx(写入)权限,那么这个用户创建的文件只有ROOT用户和他本身才能够删除.
这个权限很6啊.用了这个命令配合文件的隐藏属性(待会学)简直不要太强大啊.
等等,好像忘了什么东西!?
说了这么多还米有说怎么修改文件的特殊权限呢.
文件的特殊权限也同样是使用三位二进制码来表示的,第一位表示SUID,十进制对应值4.第二位表示SGID,对应十进制值2,第三位表示SBIT,对应十进制1.
如果我们需要添加文件权限其实相对比较简单的,之前我们修改文件权限使用的是这种命令:
chmod  777 文件名.同理,如果我们需要修改特殊权限的话,依然使用chmod命令,只不过权限值不再是三位而是四位,其中第一位就表示特殊权限值.
比如,chmod 4777 文件名 ,这里的4就代表着特殊权限SUID.
当然我们也可以使用符号来改变文件的特殊权限,比如可以使用chmod u+s/g+s/o+t 来添加特殊权限SUID/SGID/SBIT.
还有一点需要注意的是,如果文件所属者/文件所属组都没有对应的执行权限,那么在权限上显示的不是s/t而是S/T,表示该权限是空的.

Linux的隐藏属性

在linux中,文件不止我们常见属性还有一些隐藏的属性,就好像我们打游戏的隐藏BOSS一样,他们不常被发现,但是往往极为强大.

我们可以使用lsattr(List Attribut)来查看当前文件是否含有隐藏属性,也可以使用chattr(change attribute)来改变隐藏属性.

但是,我们先不讲这两条命令,而是先研究一下,隐藏属性具体是个什么东西?

骗你的...哈哈.我们先了解一下chattr命令.



好好看博客,别闹,不就骗一下你吗,有话好说,把刀放下....

在linux文档中描述chattr说这个命令是改变文件在linux文件系统中的属性,他可以通过+/-/=后面跟选项来给文件赋上隐藏属性.

举个栗子:



如果使用命令 chattr +A filename,那么以后这个对这个文件进行存储操作的时候,他的atime就不会变了.

现在学一下,chattr的常用参数

先搞清楚三个符号是啥意思:

+ :这个长得像加号的东西,可以用来增加一个特殊参数(隐藏属性啦).

-:这个长得像减号的东西,可以用来移除一个特殊参数(隐藏属性).

=:这个长得像等号的东西,可以将文件的特殊参数设置为后面的,不管以前啥样,改完之后,就变成=号后面的了.

在+-=后面可以跟的参数不多,但是每个都有其独特的作用,比如,示例中的A,

A属性,表示该文件/目录在存取时不会改变atime,

当然还有其他属性:

S,对该文件的修改,将会变成同步操作(一般默认是异步的).

a:这个属性很厉害,和SBIT权限一样牛,当设定了a属性后,这个档案只能增加数据,其他的像删除,修改之类的就不要想了,除非你是root用户.

c:这个属性就是告诉系统,以后存储该文件的时候先压缩在存储,读取的时候先解压在读取.

d:在dump程序执行的时候,该文件/目录不会被备份.

i:这个和a一样牛,他可以让一个文件不能被删除,不能被改名,不能写入和新增资料.不能设定链接.啥意思..意思就是设置了i属性,你要不是root,你就别想着对这个文件进行任何操作了!

s,被标记的文件/目录被删除时,完全删除.无法找回.

u:s的死对头,被标记的文件/目录被删除后,实际上还存在磁盘中,还能找回.

当然,上面这几个主要是特殊属性的操作,那么chattr本身就没有选项吗?

当然有,chattr 的R选项可以递归改变属性.剩下的选项就不是很重要了.

额咳咳,好了,现在我们学会如何修改文件的隐藏属性,但是会改了还不行啊..怎么查文件的隐藏属性啊!?在线等,挺急的!!!

查看文件的隐藏属性可以使用lsattr命令.



lsattr命令的作用就是显示在linux文件系统中文件的属性.

他常用的选项主要是:

R,递归,如果目标是目录的话,连其子目录的数据也列出来.

a,列出所有文件的属性,包括隐藏文件.

d,如果目标是个目录,那就只列出目录本身的属性.

哦了.终于打完了隐藏boss.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐