4.管理linux文件权限
1.理解文件和文件权限。
- 文件(file):是操作系统用来存储信息的基本结构,是一组信息的集合。文件名是唯一标识。与windows不同的有,在linux中,文件名称地后缀不能确定文件的种类。在linux中,文件名区分大小写。在linux中,如果文件名以"."开始,表示文件为隐藏文件,需要用"ls -a"命令才能显示
- 权限:在linux中每一个文件或目录都包含访问权限,这些权限决定了谁能访问和如何访问这些文件和目录,通过设定权限可以从以下3种访问方式限制访问权限
- 只允许用户和自己访问,用字母U表示
- 允许一个预先指定的用户组种的用户访问,用字母G表示
- 允许系统种的任何用户访问,用字母O表示
? ? 一个文件或目录可能有读(r),写(w)及执行权限(x)。当创建一个文件时,系统会自动赋予不同用户的权限。我们创建一个文件,通过"ls -l"查询
?可以看出,root用户有读写权限,组有可读权限,其他用户或组有可读权限
接下来我们刨析文件的详细信息
- -rw- r-- r-- .? 表示文件类型权限
- 数字? ? 表示连接数
- 第一个root 表示文件用有人
- 第二个root表示文件所属群组
- 数字? 表示文件容量
- 15 11:25 表示文件最后被修改的时间
- 1.txt 表示文件名称
2.详解文件的各种属性信息
①第一组为文件类型权限
?每一行的第一个字符一般用来区分文件的类型,一般取值d,-,l,b,c,s,p,具体含义是:
- d:表示这是一个目录。
- -:表示这个文件是一个普通的文件
- l:表示该文件是一个符号链接文件,实际上它指向另一个文件
- b,c:表示该文件为区块设备或其他的外围设别,是特殊类型的文件
- s,p:这些文件关系到系统的数据结构和管道,通常很少见到
2~10字符表示文件的访问权限。九个字符,3个为一组,左边三个表示文件所有者权限,中间三个表示与所有者同一组的用户的权限,右边三个表示其他用户的权限。
- r(read,读取):对文件而言,具有读取文件内容的权限;对目录而言,具有浏览目录的权限
- w(write,写入):对文件而言,具有新增,修改文件内容的权限;对目录来说,具有删除,移动目录内文件的权限
- x(excute,执行):对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限。
- -:表示不具有该项权限
②第二组为有多少文件名连接到此节点(i-node)
? ? ? ?每个文件都会将其权限与属性记录到文件系统的i-node种。不过,我们使用的目录树却使用文件来记录,因此每个文件命都会连接到一个i-node。这个属性记录的就是有多少不同的文件名连接到相同的的一个i-node??
③第三组表示这个文件(或目录)的拥有者
④第四组表示这个文件(或目录)的所属群组
⑤第五组为这个文件的容量大小,默认是Bytes
⑥第六组为这个文件的创建日期或者最近的修改日期
⑦第七组为这个文件的文件名
3.使用数字表示法修改权限
修改权限的语法:chmod? ? [选项]? ? 文件
所谓数字表示法就是将读取(r),写入(w)和执行(x)分别以数字4,2,1表示
?4.使用文字表示法修改权限
使用文件表示法时,系统用四种字母来表示不同的用户
u:user ,表示所有者
g:group,表示所属组
o:other ,表示其他用户
a:all,表示以上三种用户
使用3种字符的组合表示法设置操作权限
r:read,可读
w:write,写入
x:excute,执行
操作符号包括以下几种
+:添加某种权限
-:减去某种权限
=:赋予给定权限并取消原来的权限
?同时修改三种用户权限时,用逗号隔开
修改目录权限和修改文件权限相同,都是使用chmod命令,但不同的是,要使用通配符“*”来表示目录中所有文件
如果目录中包含子目录,则必须使用-R参数来同时设置所有文件?
5.修改文件与目录的默认权限和隐藏权限
1.理解文件预设权限:umask
umask指的就是用户在建立文件或目录时的默认权限值。
?用数字的方式显示umask,umask有四组数字,前面的第一个数字表示特殊权限
?以符号类型的方式显示权限
目录和文件的默认权限是不一样的,x权限对于目录非常重要的,但是一般文件不应该有执行的权限。所以一般情况下:
- 若使用者建立文件:则预设没有可执行(x)权限,即只有rw这两个权限,也就是最大为666,预设权限为-rw- rw- rw-
- 若使用者建立目录,则关于用户是否能进入目录,则一般具有x权限,因此所有权限都打开了,一般是777,预设权限drwxrwxrwx。
umask的分值就是该默认值需要减掉的权限。
根据虚拟机的umask值可知:此虚拟机新建一个文件的权限为-rwr--r--。新建一个目录的权限是drwxr-xr-x。
2.更改文件预设权限umask
编辑家目录下面的.bashrc隐藏文件
?在末尾添加一行umask 数字,保存退出
立即执行修改后的设置
?通过查询,发现umask已经修改成功了
3.设置文件隐藏属性
①chattr命令-----改变文件属性
语法:chattr [-RV] [-v<版本编号>][+/-/=<属性>][文件或目录]
这项指令可以改变存放在ext4文件系统上的文件或目录属性,这些属性共有以上几种模式
- a:系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件
- b:不更新文件或目录的最后存取时间
- c:将文件或目录压缩后存放
- d:将文件或目录排除在操作之外
- ?i:不得任意改动文件或目录
- s:保密性删除文件或目录
- S:即时更新文件或目录
- u:预防意外删除
chattr的相关参数如下,其中最重要的是+i与+a这两个属性。由于这些属性是隐藏,所以需要使用lsattr命令
-R :递归处理,将指定目录下的所有文件及子目录一并处理
-v<版本编号>:设置文件或目录版本
+<属性>:开启文件或目录的该项属性
-<属性>:关闭文件或目录的该项属性
=<属性>:指定文件或目录的该项属性
②lsattr命令-----显示文件隐藏属性
语法:lsattr [-adR] 文件或目录
-a:将隐藏文件的属性也显示出来
-d:如果是目录,仅列出目录本身的属性,而非目录内的文件名
-R:连同子目录的数据也一并列出来
?4.设置文件特殊权限:SUID,SGID,Sticky
SUID:<u+s>,数字表示4
- 对文件的影响:以拥有文件的用户身份,而不是以运行文件的用户执行文件
- 对目录无影响
SGID:<g+s>,数字表示2
- 对于文件来说,sgid仅对二进制命令程序有效,执行命令的用户可以获得该程序执行期间所属组的权限,suid是拥有这个用户的权限
- 对于目录来说(继承目录所属的组),Linux默认情况下用户创建文件,默认用户和组都是它自己,sgid可以让用户在此目录下创建的文件和目录,具有与此目录相同的用户组设置
Sticky:<o+t>,数字表示1
- 对文件无影响
- 对目录来说,具有写入访问权限的用户仅可以删除其所拥有的文件,而无法删除或强制保存其他用户所拥有的文件
6.修改文件/目录的所属关系
语法格式:
chown 文件/目录所属人:文件/目录所属组? 文件/目录? ?//修改所属者和所属组
chown? :文件/目录所属组? ?文件/目录? ? ? //仅修改所属组
?chown? 文件/目录所属者? ?文件/目录? ? //仅修改所属者
?
7.文件访问控制列表
? ? ? ? 不知道大家注意到没?前面讲的一般权限,特殊权限和隐藏权限其实有一个共性--权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(Access Control List,ACL)。通俗来讲,基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。
? ?1.setfacl命令----用于管理文件的ACL规则
语法规则:
? ? setfacl? ? ?[参数]? 文件名称
文件的ACL提供的是在所有者,所属组,其他人的读/写/执行权限之外的特殊权限控制,使用setfacl可以针对单一的用户或用户组,单一文件或目录来进行读/写/执行权限的控制
针对目录需要用-R参数;针对普通用户需要用-m参数;想要删除某个文件的ACL,可以使用-b参数。
以下我就用2021的红帽RHCSA考试原题为例,示范以下setfacl的用法:
题目:配置 /var/tmp/fstab 权限
将文件 /etc/fstab 复制到 /var/tmp/fstab 。
配置 /var/tmp/fstab 的权限以满足如下条件:
文件 /var/tmp/fstab 自 root 用户所有?
?文件 /var/tmp/fstab 属于组 root
文件 /var/tmp/fstab 应不能被任何人执行
用户 natasha 能够读取和写入 /var/tmp/fstab
用户 harry 无法写入或读取 /var/tmp/fstab
所有其他用户(当前或未来)能够读取 /var/tmp/fstab
2.getfacl命令-----用于显示文件上设置的ACL信息
语法格式为:getfacl? ? ?文件名称?
?
|