五、Linux下的文件权限管理

文章目录

    • 1.如何查看及读取权限信息
        • 对于属性各字段的理解
    • 2. 文件的拥有者及拥有组
        • 更改文件拥有者及拥有组的方法
    • 3. 文件权限的理解
        • 文件权限的读取
        • 权限类型
    • 4. 文件权限设定方式
    • 5.系统预留权限阀值
        • 权限预留阀值设定
    • 6. 特殊权限
        • 对特殊权限的理解
        • 对特殊权限的设定
    • 7、ACL权限列表
      • facl命令

1.如何查看及读取权限信息

ls -l 文件名		#查看文件属性(=ll 文件名)
ls -ld 目录名	#查看目录属性

五、Linux下的文件权限管理_第1张图片

对于属性各字段的理解

对于文件属性字段的理解 对于目录属性字段的理解
1 类型(-:文件,d:目录) 类型(-:文件,d:目录)
2 文件权限 目录权限
3 SELinux Context(安全上下文) SELinux Context
4 文件硬链接个数,即文件被系统记录的次数 目录中子目录的个数
5 文件拥有者 目录拥有者
6 文件拥有组 目录拥有组
7 文件大小 目录大小
8 文件最后一次被修改的时间 目录最后一次被修改的时间
9 文件名称 目录名称

示例
五、Linux下的文件权限管理_第2张图片

2. 文件的拥有者及拥有组

Linux 是个多用户多任务的系统 , 常常会有多人同时使用同一主机来进行工作 , 为了考虑每个人的隐私权以及每个人喜好的工作环境 , 对用户进行分类
用户对于文件的身份划分:
文件拥有者(user)文件所属组(group) 其他人(other)

更改文件拥有者及拥有组的方法

• 文件拥有者及拥有组只有超级用户root可以修改
• 更改方式如下

chown 用户名 文件			#修改文件的拥有者
chgrp 组名称 文件			#修改文件的拥有组
chown 用户名 目录		 	#修改目录的拥有者,但不修改目录里面内容的所有人
chgrp 组名称 目录			#修改目录的拥有组,但不修改目录里面内容的所有组
chown –R 用户名 目录		#修改目录的拥有者,同时递归修改目录里面内容的所有人
chgrp –R 组名称 目录 		#修改目录的拥有组,同时修改目录里面内容的所有组
chown 用户名:组名称 文件或目录 	#同时修改所有人和所有组(其中的“:”也可以用“.”)

(1)、先打开一个shell输入监控命令

watch -n 1 ls -Rl /mnt

(2)、重新打开一个shell,在/mnt下建立一些文件和文件夹
五、Linux下的文件权限管理_第3张图片(3)、用root身份对文件的所有人和所有组进行修改
五、Linux下的文件权限管理_第4张图片

3. 文件权限的理解

文件权限的读取

五、Linux下的文件权限管理_第5张图片

权限类型

- 关闭权限,表示此位权限未开启
r 读权限,对于文件可查看文件内容,目录可列出目录中的文件名称
w 写权限,对于文件可更改文件中的内容,对于目录,只能增加或删除文件,不能更改文件中的内容
x 执行权限,对于文件,可用文件名称调用文件内记录的程序,对于目录可进入目录(cd切换)

4. 文件权限设定方式

用命令 chmod 对文件权限进行设置,chmod 命令的工作方式有三种:

1、字符方式设定文件权限

   chmod [参数]... 权限模式,权限模式... 目标...
      chmod <+-=> 目标
      eg:chmod  u+x 目标文件
      	chmod u=rw	目标文件	#指定目标文件的拥有者的权限为读写
		chmod a-w 目标文件 	#文件拥有者、拥有组、其他人都去掉写的权限
		chmod ug+x 目标文件	#文件的所有者和所有组都添加执行的权限

2、数字方式设定文件权限
权限可用一个八进制数字来表示:

权限 二进制 八进制
- - - 000 0
- -x 001 1
- w- 010 2
-wx 011 3
r- - 100 4
r-x 101 5
rw- 110 6
rwx 111 7
权限管理方法:chmod 数字 目标文件
例如:chmod 777 目标文件	#任何人(u,g,o)都对目标文件具有读写执行的权限

3、依照模板复制文件权限

• chmod [参数]... --reference=模板 目标...
复制权限方式: chmod --reference=属性源文件 目标文件
例: chmod --reference=/mnt/westos westos1

修改前文件的权限:
五、Linux下的文件权限管理_第6张图片
修改后文件的权限:

五、Linux下的文件权限管理_第7张图片

5.系统预留权限阀值

1、资源存在意义在于共享,权限开放越大,共享效果越明显,但是安全性越差。对于系统安全而言,开放权利越小,系统越安全。在系统中开放应开放的权利,保留不安全的权利以确保系统功能性及安全性。
2、可以使用 umask 命令查看系统中预留权限阀值,如下图:五、Linux下的文件权限管理_第8张图片
从图中可以看到,不同用户身份的权限预留阀值是不同的,以root用户的权限预留阀值为例,第一个0表示特殊权限的预留阀值,先忽略它,可以看到root用户的权限预留阀值为022,系统里的满权限为777,减去权限预留阀值022,结果为755,因此可知root用户建立的目录的权限为755,建立文件的权利为777-755-111=644,可由下图观察到(监控命令为 watch -n 1 ls -Rl /mnt)
五、Linux下的文件权限管理_第9张图片

权限预留阀值设定

系统中使用 umask 命令来预留权限

umask				#查看预留权限阀值
umask 预留阀值		#设定预留权限阀值,为临时设定,只在当前shell中有用,关闭当前shell再重新打开以后就没啦
永久改变权限预留阀值:
vim /etc/bashrc		#改变shell配置文件
vim /etc/profile	#改变系统环境配置文件
注意:一定要两个文件一起改,并且修改的值也要相同

永久改变权限预留阀值过程:

1、 vim /etc/bashrc

shell配置文件部分截屏
要想改超级用户的权限预留阀值就需要else语句后面的umask的值,权限预留阀值越大,代表预留权限越多,则对用户的权限就越小,安全性就越高
五、Linux下的文件权限管理_第10张图片

2、vim /etc/profile

系统配置文件部分截屏
系统配置文件和shell配置文件预留权限阀值是同步的,因此和shell配置文件的修改也一样
五、Linux下的文件权限管理_第11张图片

3、修改root用户的预留阀值为077,修改完成以后需要用source命令让我们的更改立即生效
五、Linux下的文件权限管理_第12张图片
4、可以看到修改以后root用户建立的目录的权限为700(777-077=700),建立的文件的权限为600(777-077-111=600),结束!
五、Linux下的文件权限管理_第13张图片

6. 特殊权限

对特殊权限的理解

SUID
• 只针对于二进制可执行文件 , 使用拥有SUID权限的文件发起其中记录的程序时以文件拥有者的身份去执行
SGID
• 针对二进制可执行文件 : 该命令发起的程序是以该命令所有组的身份去执行
• 针对目录 : 目录新建文件的所属组与该目录的所有组保持一致
STICKYID
• 对于文件:表示文件即使没有被程序调用也会被加载到交换空间中;
• 对于目录:表示当目录上有 STICKYID 的权限时 , 所有用户在该目录下均可创建文件 , 但只有文件拥有者和 root 用户可以删除该目录下的文件

对特殊权限的设定

SUID

chmod u+s 目标文件(chmod 4原文件属性 目标文件)
例如:chmod u+s /bin/cat=chmod 4原文件属性 /bin/cat 

观察过程:

1、设置观察环境

watch -n 1 ‘ps ax -o user,group,comm | grep cat’	
#显示系统中调用cat命令的进程的用户,组,进程名字的信息
##ps ax 显示系统中所有进程的所有信息;
  ps ax -o user,group,comm 只看所有进程的用户、组、进程名字是什么;
  grep cat表示捕捉cat命令的信息;

2、查看文件/bin/cat的属性可知,该文件的所有人、所有组均为root
五、Linux下的文件权限管理_第14张图片
3、当以student用户去执行 /bin/cat 命令以后产生的进程显示是谁调用了该命令则该文件显示用户和组均为谁,即进程的所有人和文件的所有人无关,谁执行了动作产生的进程就应该是谁的,ctrl+c 结束该进程
五、Linux下的文件权限管理_第15张图片
4、使用命令 chmod u+s /bin/cat 设定让这个命令在执行时必须用一个固定的用户身份,可以看到拥有者的权限中的x变成了s
五、Linux下的文件权限管理_第16张图片
切换到student用户后再次执行 /bin/cat 命令可以看到进程中的所有者变成了文件的所有者root
五、Linux下的文件权限管理_第17张图片

SGID

chmod g+s 目标文件(=chmod 2原文件属性 目标文件)
例如:chmod g+s /bin/cat	=chmod 2源文件属性 /bin/cat

接SUID的实验,使用命令 chmod g+s /bin/cat 设定让这个命令在执行时必须用一个固定的用户组身份,可以看到拥有组的权限中的x变成了s

五、Linux下的文件权限管理_第18张图片
再次切换到student用户后执行 /bin/cat 命令可以看到进程中的所有组变成了文件的所有组root
五、Linux下的文件权限管理_第19张图片

STICKID
表示当目录上有 STICKYID 的权限时 , 所有用户在该目录下均可创建文件 , 但只有文件拥有者和 root 用户可以删除该目录下的文件

chmod o+t 目标文件(=chmod 1原文件属性 目标文件)
例如:chmod o+t /mnt/pub =chmod 1原文件属性 /mnt/pub

实验过程:
1、先建立一个目录,将权限修改为777,则此目录为一个公共目录,任何人可以读写执行该目录里的内容,可以任意建立文件,可以任意删除文件,竟然也可以删除别人写的文件。这合理吗。。。?要是这样那不乱套了
五、Linux下的文件权限管理_第20张图片

五、Linux下的文件权限管理_第21张图片
因此我们需要设置一些特殊权限,让用户只能删除自己的文件而不能删除别人的文件,这就需要SKICKID权限,使用 chmod o+t /mnt/pub 命令来设置权限,此时我们可以看到别的用户只能删除自己的文件而不能删除别人的文件。
五、Linux下的文件权限管理_第22张图片

7、ACL权限列表

问:为什么要引入权限列表?
答:为了限制特定的用户对于特定的文件具有我们所指定的特殊的权限,
传统的权限仅有三种身份 (owner,group,othe),搭配三种权限 (r,w,x), 并没有办法单纯的针对某一个使用者或某一个群组来设置特定的权限需求 , 此时就得要使用ACL( 文件访问控制列表 ,Access Control List) 这个机制,因此目前 ACL 几乎已经默认加入在所有常见的 Linux 文件系统的挂载参数中(ext2/ext3/ext4/xfs 等等 ), 但 rhel6.0以及之前的版本默认不支持 acl 的功能,需要手动的去加载(加载方法:mount 设备名称 /mnt/ -o acl)

facl命令

1、facl参数

1、getfacl		#查看权限列表
2、setfacl		#设定权限列表
setfacl -m 		#设定权限
例如:setfacl -m u:westos:rw file1
	#设定westos用户对file1文件具有读写的权利
	setfacl -m g::rwx file1
	#设定file1文件的拥有组的权利为rwx
setfacl -x 		#删除指定用户
例如:setfacl -x u:westos file1
	#删除用户westos的特殊权限
setfacl -b 		#关闭列表功能
例如:setfacl -b file1	
	#关闭file1文件的权限列表(ls命令查看时“+”消失)

具体实验过程如下图:
图一:
五、Linux下的文件权限管理_第23张图片
可以看到给用户westos设定了特殊权限以后,用ls命令查看文件file1时,权限后面多了个加号,代表该文件是有权限列表的("+"代表开启权限列表),此时真正的权限是不能用`ls命令看到的,应该用getfacl命令查看具体权限,可以看到特定用户westos是具有读写的权利的

图二:如图,在执行setfacl -x u:westos file1 后用户westos的特殊权限消失

五、Linux下的文件权限管理_第24张图片
图三:如图,在执行了gefacl -b file1 命令后再用ls命令查看文件file1时权限后的“+”消失

五、Linux下的文件权限管理_第25张图片
2、facl列表权限区配顺序
权限顺序:
资源拥有者>特殊指定用户>权利开放多的组>权利开放少的组>其他用户
3、facl的mask阀值
mask阀值
mask阀值是指定用户能够获取的最大有效权限,当设定过facl列表后用chmod缩减文件权限很可能会损坏mask

mask的恢复:

setfacl –m m:权限值 目标文件

(1)、刚开始的时候mask值为rwx
五、Linux下的文件权限管理_第26张图片

(2)、执行完chmod命令后mask的值变为“-wx”,使用命令“setfacl -m m:rwx file2”恢复mask值
五、Linux下的文件权限管理_第27张图片

4、facl的默认(default)权限
问:为什么引入?
答:对于一目录,现在想指定一个用户对该目录中的文件具有特殊权限,可用setfacl命令设置,但是,问题来了,当设置完特殊权限以后,再次在目录中新建文件时,之前设置的特殊权限对新建的文件是不生效的,也就是说,设置的特殊权限列表只对当前已经在目录中存在的文件生效,对于没有存在的文件是不生效的,所以引入默认权限,使设置的特殊权限对该目录中新建的文件生效

(1)、default权限特性:

  • 只对目录设定
  • 只对目录中新出现的文件或目录生效
  • 对目录本身不生效
  • 对目录中原有文件不生效

(2)、default权限设定方式

setfacl –m d::权限目录

1、使用setfacl设置特殊权限,但是发现只对目录生效,而对目录中的文件不生效

五、Linux下的文件权限管理_第28张图片
2、要使设置的特殊权限对目录中的文件也生效,需要加“-R”,但是新建文件之后发现特殊权限对新建的文件又不生效

五、Linux下的文件权限管理_第29张图片
3、此时,需要设置默认权限,设置完成后用getfacl命令查看可以看到默认权限

五、Linux下的文件权限管理_第30张图片
4、设置完默认权限后,再次新建文件,可以看到默认权限对新建的文件生效

五、Linux下的文件权限管理_第31张图片
注意:默认权限只对新建的文件生效,不对目录本身和目录中已存在的文件生效

结束!!!

你可能感兴趣的:(五、Linux下的文件权限管理)