接触过Linux系统的人都知道Linux系统都是由文件组成的。那我们就应该意识到关于文件权限的重要性。下面详细介绍一下:
博文大纲:
- 用户与用户组;
- Linux文件权限的重要性;
- 文件与目录的默认权限与隐藏权限;
- 文件特殊权限;
一、用户与用户组
我们来通过一张图片,来详细了解一下用户与用户组之间的关系:
通过这张图片就可以详细的了解用户与用户组之间的关系!
我们通过浏览/root目录下的文件来了解一下每个文件各个部分的内容:
(1)第一栏代表这个文件的类型与权限
这个地方最需要注意了!仔细看的话,你应该可以发现这一栏其实共有十个字符,每个字符的含义,如图:
第一个字符代表这个文件是『目录、文件或链接文件等等』:
- 若是[ d ]则是目录,例如上表文件名为“.config”的那一行;
- 若是[ - ]则是文件,例如上表文件名为“initial-setup-ks.cfg”那一行;
- 若是[ l ]则表示为链接文件(link file);
- 若是[ b ]则表示为设备文件里面的可供储存的周边设备(可随机存取设备);
- 若是[ c ]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备);
接下来的字符中,以三个为一组,且均为『rwx』 的三个参数的组合。其中,[ r ]代表可读(read)、[ w ]代表可写(write)、[ x ]代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号[ - ]而已。『rwx』也可以用数字4、2、1来表示
- 第一组为『文件拥有者可具备的权限』,以『initial-setup-ks.cfg』那个文件为例, 该文件的拥有者
可以读写,但不可执行; - 第二组为『加入此群组之账号的权限』;
- 第三组为『非本人且没有加入本群组之其他账号的权限』。
(2)第二栏表示有多少档名连结到此节点(i-node) :
(3)第三栏表示这个文件(或目录)的{拥有者账号}
(4)第四栏表示这个文件(或目录)的所属群组
(5)第五栏为这个文件的容量大小,默认单位为 bytes
(6)第六栏为这个文件的建档日期或者是最近的修改日期
(7)第七栏为这个文件的档名
二、Linux文件权限的重要性
与 Windows 系统不一样的是,在 Linux 系统当中,每一个文件都多加了很多的属性进来,尤其是群组的概念,这样有什么用途呢? 其实,最大的用途是在『数据安全性』上面的。
Linux文件权限的重要性主要包含这几个方面:
- 系统保护的功能;
- 团队开发软件和数据共享的功能;
- 未将权限设定妥当的危害;
因此在设置目录的权限和属性时,一定要注意: 什么数据是可变的,什么是不可变的!
三、如何改变文件属性与权限
我们现在知道文件权限对于一个系统的安全重要性了,也知道文件的权限对于使用者与群组的相关性,那么如何修改一个文件的属性与权限呢?又!有多少文件的权限我们可以修改呢? 其实一个文件的属性与权限有很多!我们先介绍几个常用于群组、拥有者、各种身份的权限之修改的指令,如下所示:
- chgrp :改变文件所属群组;
- chown :改变文件拥有者;
- chmod :改变文件的权限, SUID, SGID, SBIT 等等的特性;
关于如何修改文件的拥有者、群组、权限这些问题,实在是太简单了,所以这里就不多做介绍了!
四、目录和文件之权限意义
现在我们知道了 Linux 系统内文件的三种身份(拥有者、群组与其他人),知道每种身份都有三种权限(rwx), 已知道能够使用 chown, chgrp, chmod 去修改这些权限与属性,当然,利用 ls -l 去观察文件也没问题。
1) 权限对文件的重要性
文件是实际含有数据的地方,包括一般文本文件、数据库内容文件、二进制可执行文件等等。因此,权限对于文件来说,它的意义是这样的:
- r(read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
- w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
- x (eXecute):该文件具有可以被系统执行的权限。
在Windows系统下,文件的扩展名会起到作用,但是,在LInux系统中,文件的扩展名是不起任何作用的!
2)权限对目录的重要性
文件是存放实际数据的所在,那么目录主要是储存啥玩意啊?目录主要的内容在记录文件名列表,文件名与目录有强烈的关连啦!
- r (read contents in directory):表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来;
- w (modify contents of directory):这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限:
① 建立新的文件与目录;
② 删除已经存在的文件与目录(不论该文件的权限为何!)
③ 将已存在的文件或目录进行更名;
④ 搬移该目录内的文件、目录位置。
总之,目录的 w 权限就与该目录底下的文件名异动有关就对了啦!
- x (access directory):咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没错!目录不可以被执行,目录的 x 代表的是用户能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你
详细介绍,大家看的有点费劲,故意总结成一个表,供大家参考:
3)用户操作功能与权限
通过表的形式了解一下:
五、文件与目录的默认权限与隐藏权限
我们都知道新建的文件权限是644;新建的目录的权限是755。那么大家知道这些权限是怎么来的吗?
那是因为文件的默认权限是666;目录的默认权限是777;
[root@localhost ~]# umask 0022
用文件或目录的默认权限减去umask值,便是新建文件或目录的权限,至于如何修改这个umask值,方法如下:
[root@localhost ~]# umask 111 [root@localhost ~]# umask 0111
umask值的第一位是特殊权限,这里先忽略!
1)隐藏权限
可以使用chattr命令进行设置;使用lsattr可以查看文件或目录的隐藏权限;
chattr命令的常用参数有:
- 在原有参数设定基础上,追加参数;
- 在原有参数设定基础上,移除参数;
- = 更新为指定参数设定;
- A 文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生;
- S 硬盘I/O同步选项,功能类似sync;
- a 即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性;
- c 即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作;
- d 即no dump,设定文件不能成为dump程序的备份目标;
- i 设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助;
- j 即journal,设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。如果filesystem被设定参数为 data=journal,则该参数自动失效;
- s 保密性地删除文件或目录,即硬盘空间被全部收回;
- u 与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion;
lsattr命令的常用参数有:
- -a :将隐藏文件的属性也列出来;
- -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
- R :连同子目录的数据也一并列出来!
2)文件特殊权限
文件 的特殊权限分为:SUID、SGID、SBIT。
SUID的权限对一个文件的特殊权限:
- SUID权限仅对二进制程序有效;
- 执行这对于该程序需要具有x的可执行权限;
- 本权限仅在执行程序的过程中有效;
- 执行者经具有该程序拥有者的权限;
注意:SUID仅针对文件,不可以针对目录!
SGID的功能:
- SGID对二进制程序有用;
- 程序执行者对于该程序来说,需具有x的权限;
- 执行者在执行的过程中将会获得该程序群组的权限;
注意:SGID可以针对文件,也可针对目录!
SBIT对于目录的作用:
- 当使用者对于此目录具有w、x权限,具有写入的权限;
- 当使用者在该目录下创建文件或目录是,仅是自己与root才有权利删除该文件;
注意:SBIT仅针对目录有效!
关于文件或目录的权限就简单介绍这么多!
―――――――― 本文至此结束,感谢阅读 ――――――――
来源:51CTO
作者:筱振
链接:https://blog.51cto.com/14157628/2441301