WHCSRL 技术网

(五)Linux系统中的权限管理

一、权限查看及读取

1.权限查看

ls -l file #查看文件权限 (相当于ll file)
ls -ld dir #查看目录权限
ls -l dir #查看目录中子文件及子目录的权限 (相当于ll )
ls -lR dir #查看目录中子文件、子目录以及子目录中子文件的权限

在这里插入图片描述

2、权限读取

文件权限信息

- | rw-r--r-- | . | 1 | root | root | 0 | Apr 12 10:57 | westos
[1]		[2]    [3] [4]   [5]   [6]   [7]   		[8]        [9]
  • 1
  • 2

目录权限信息

d | rw-r--r-- | . | 2 | root | root | 0 | Apr 12 10:57 | wetosdir
[1]		[2]    [3] [4]   [5]   [6]   [7]   		[8]        [9]
  • 1
  • 2

除去第9为名称之外,我们把前八位叫做元数据。就是描述数据的数据,就是一个属性。
比如人 性别 年龄 等叫做人的元数据 不可更改。
上图中的一类属性占用一个字节 对它进行记录
1-8各占用一个字节(byte),第9位名称中一个字符即占一个byte。

比如 - rw-r–r-- . 1 root root 0 Apr 12 10:57 westos 表示名称为1 的文件 它的属性大小用14个字节来描述

对每一位的解释

[1]		#文件类型
		#- 普通文件
		#d 目录
		#l 软连接
		#b 快设备
		#c 字符设备,比如/dev/pts/0即字符显示设备
		#s socket套接字
		#p 管道 |
[2] 	#用户权限
		#rw-|r--|r--
		#  u   g   o
		#u:文件拥有者权限 g:文件拥有组权限 o:其他用户权限
[3]		#系统的selinux开启,安全上下文
[4]		#对于文件:文件内容被系统记录的次数(硬链接个数)
		#对于目录:目录中子目录的个数
[5]		#文件拥有者
[6]		#文件拥有组
[7]		#对于文件:文件内容大小
		#对于目录:目录中子文件的元数据大小,目录中还存在"."".."两个隐藏文件,占6个byte
[8]		#文件内容被修改的时间
[9]		#文件名称 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

上图中,[4]表示:
#对于文件:文件内容被系统记录的次数(硬链接个数)
#对于目录:目录中子目录的个数
在这里插入图片描述
对于目录来说,4代表目录中子目录的个数,但是为什么只有两个子目录但却显示4呢?
因为还有“.”和“…”两个隐藏目录 。
在这里插入图片描述

而对于文件来说,
首先要了解,什么是软连接和硬连接。
我们现在用到的文件系统叫做日志文件系统,被分成两个区域,
一个是 inode tables 节点区,放的是我们的元数据,有节点号,里面放的是用ls -l可以看到的内容,(就是属性)
一个是data area 数据区,而节点又对应数据区域,数据区存放着用cat查看的内容。
在这里插入图片描述

软连接就可以理解为快捷方式,多个节点对应一个数据区域,(ln -s f1 test2.log #创建f1的一个符号连接文件test2.log)
在这里插入图片描述
上图的意思就是 ,要查看study的属性,但是study带你去看westosfile。
就是可以在不同的路径查看相同的内容。

在解释硬链接前,先做一个辅助解释:

在默认情况下,一个文件对应一个数据区域,你在对文件进行备份的时候,原理上是把节点号复制一个,数据区域也复制一个,那这个文件就复制成功了。
但是当我们要复制非常庞大的数据的时候,会出现一个问题,就是数据区域还没复制满,节点区域已经不够用了。
在这里插入图片描述
所以,我们要知道,当我们在备份数据的时候,备份的是它的内容,而不是它的属性,所以要想办法把节点区域给省略掉,这样节点域才不会被占满。在这里插入图片描述
所以,把数据区域复制好,再让节点指向它即可。
那么此时,对于文件来说,出现多个数据区域对应一个节点号的时候,有几个数据区域,ls看到的就是几。
而这多个数据区域就相互为硬链接。
在这里插入图片描述

硬链接,就是用命令ln
ln f1 test1.log #创建f1的一个硬连接文件test1.log

综上,对于文件来说,[4]的内容对于文件来说,就是文件内容被系统记录的次数(硬链接个数)

[7]对应的内容
对于文件是文件大小,(字节数)
比如在file中输入hello 然后回车 ,esc保存退出 那么就会由原来的0变为7
在这里插入图片描述
对于目录来说,是目录中子文件的元数据大小,目录中还存在".""…"两个隐藏文件,占6个byte
在这里插入图片描述
test占8+4=12个字节,再加上目录中的6个字节,一共18个字节。

而对于[8]:文件内容被修改i的时间
在这里插入图片描述
需要注意的是:ls -l file 显示的是文件“内容”最后一次被修改的时间
比如上图,我们只是把文件名字改了,内容没改,所以 ls-l file 以后 时间还是11:56
但是确实是修改过东西,那么我们ls -l dir 就能观察到目录里面东西被动过的时间了 11:57

二、文件属性中用户和组的修改

命令解释
chown username file更改文件拥有者
chgrp groupname file更改文件拥有组
chown username.groupname file或者chown username:groupname file同时更改文件的拥有者和拥有组
chown/chgrp -R user/group dir更改目录本身及目录中内容的拥有者或者拥有组

我们使用watch -n 1 "ls -lR /mnt"对/mnt进行监控后
在这里插入图片描述
但是在修改目录的属性的时候,发现使用chown username dir 只修改了目录的所有人 ,目录中的内容的所有人没有改变,所以,我们使用-R
在这里插入图片描述

三、文件权限的类型及对于文件的功能

1.用户对文件的身份

1.用户对文件的身份

u: #user文件的拥有者,ls -l 看到的第五列信息
g: #group文件拥有组, ls -l 看到的第六列信息
o: #other既不是拥有者也不是拥有组成员的其他用户的通称

2.权限位

rwx|r–|r–
u  g   o

3.用户身份匹配

user>group>other
用户是件拥有者,user的权力优先于group的权力,当其他用户既不是文件拥有者也不是文件拥有组成员时才考虑other组的权力

4.权限类型

“-”    代表文件权限未开启

r #可读
#对于文件:可以读取文件内容
#对于目录:可以ls列出目录中的文件

w #可写
#对于文件:可以更改文件内容
#对于目录:可以在目录中新建或者删除文件

x #可执行
#对于文件:可以用文件名称调用文件内记录的程序
#对于目录:可以进入目录中

对于超级用户而言,我们可以修改文件或者目录的权限来进行实验,下面是几个可能用到的命令:
chomd 设定文件权限:
chmod o-r westosfile2 代表删掉westosfile2这个文件的other组的读权限
chmod o+r westosfile2 代表增加westosfile2 这个文件的other组的读权限
同理:
chmod u-r westosfile2 代表删掉westosfile2这个文件的user组的读权限
chmod u+rw westosfile2 代表增加westosfile2这个文件的user组的读写权限
在这里插入图片描述

四. 设定普通权限的方法

1.chmod --reference  复制权限

chmod --reference=/tmp /mnt/westosdir复制/tmp目录的权限到/mnt/westosdir上
chmod -R --reference=/tmp /mnt/westosdi复制/tmp目录的权限到/mnt/westosdir及 #目录中的子文件上 -R 代表第归操作

在这里插入图片描述

2.chmod   字符方式设定权限

chmod <a|u|g|o><+|-|=><r|w|x> file     用字符方式设定文件权限

1、将westosfile1中的所有组都加上w权限
在这里插入图片描述

2、直接设定所要求的权限
在这里插入图片描述

3、直接去掉所有权限
在这里插入图片描述

3.数字方式设定权限

上述两种设定权限的方法都不是很优秀,因为权限的修改太过于麻烦,效率太低。
所以我们引进数字方式设定权限。

权限波尔指表示方式
rwx = 111
— = 000
三位二进制可以表示的最大范围为8进制

三位二进制可以表示的最大范围为8进制数

rwx=111=7
rw-=110=6
r-x=101=5
r--=100=4
-wx=011=3
-w-=010=2
--x=001=1
---=000=0

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

由上可知,我们可以用数字来设置权限
比如755代表user的权限是rwx,group的权限是r-x,pther的权限是r-x
在这里插入图片描述

五、系统默认权限设定

系统本身存在的意义就是共享资源,从安全角度讲系统共享的资源越少,开放的权力越小系统安全性越高。
既要保证系统安全,又要系统创造价值,那么就应该在两者之间权衡,于是把应该开放的权力默认开放,把不安全的权力保留。

umask 定义系统保留权力
在这里插入图片描述
查看保留权力,默认0022,第一位为特殊位(所以下述022代替)

文件默认权限 = 777-umask-111		文件默认不能执行,以保护系统,防止一些病毒文件执行
目录默认权限 = 777-umask

umask 027		#umask临时更改

  • 1
  • 2
  • 3
  • 4
  • 5

所以,在新创建目录或者文件之后,可以看到它的权限。
目录的权限是755
目录的权限是644
在这里插入图片描述

那么如果想使我们系统的权力缩小,是安全性进一步提高,那就应该设定umask值。

1.临时改变umask值

在这里插入图片描述

2.永久改变umask值

用上述1方法,只是临时改变umask值,但是当我们关闭当前shell,重新再打开一个,会发现umask值又变回022。
这是因为,刚刚设定的umak 077 是在程序内部设定的,也就是在刚刚的shell中设定的,它只对当时的shell生效,shell关闭掉以后,程序所占用的系统资源,包括在内存当中的数据都会被系统回收,所有数据都会被清理掉。
当再开一个shell,这个shell是一个全新的状态。一个全新的进程。
所以,我们需要更改配置文件,把更改永久保留。

需要更改的配置文件是:/etc/profile ,这里面是系统环境的配置文件。
以及,/etc/bashrc 这是shell本身的配置文件。
在这里插入图片描述

这其中表示,如果UID大于199,且用户组的名称和用户的名称一致,那么,umask=002,
否则,umask就是022。
我们现在使用的是超级用户,所以,我们修改的就是62行的数据。
同样的,修改/etc/bashrc下的内容,和/etc/profile要修改的内容一模一样。

但是修改完以后,我们发现umask值还是0022,这是因为,当前我们开启的shell,已经加载过/etc/bashrc 和 /etc/profile了。所以,我们把这两个文件重新读取一遍就好了。
使用source /etc/basgrc 和 source/etc/profile 重新加载一下这两个文件中的内容设定。
在这里插入图片描述

设定好之后,就可以创建文件或目录来做实验了。
在这里插入图片描述
注意:永久修改就是保证/etc/profile 与 /etc/bashrc中的修改的内容一致。

六、系统当中的特殊权限

现在我们有这样的需求,我们创立一个公共目录,任何用户都可以往里面建立文件,所以我们给这个公共目录777的权限,但是用户A如果往里建立了一个文件,由于该公共目录是777的权限,所以用户B也可以对其进行删除,这样就乱了套。
所以我们现在寻求一种办法:在权限为777的公共目录下,只有文件的建立者才能删除该文件,而其他用户不能操作该文件。
我们在这里引入权限粘制位 stickyid

1.权限粘滞位 stickyid

针对目录: #如果一个目录stickyid开启,那么这个目录中的文件只能被文件所有人删除

t权限一般适用于权限全部开放的公共目录,保证每个用户自己文件存在的权益。

有两种方法可以开启t权限

命令解释
chmod 1777 /mnt/pub开启/mnt下pub的t权限
chmod o+t /mnt/pub开启/mnt下pub的t权限

在这里插入图片描述
在这里插入图片描述
可以看到,当开启t权限以后,普通用户A不能删除普通用户B所创立的文件。

2.强制位 sgid

(1)针对目录:目录中新建的文件自动归属到目录的所属组中

设定:
1、chmod 2 源文件权限 dir
2、chmod g+s dir

注意:上述1中的写法,是直接把目标目录的权限拉满,并且在此基础上把所有组的权限由rwx变为rws
而2中的写法只是在原有权限的基础上增加s权限。没有拉满权限的作用(就是不能把权限直接变为777)

在这里插入图片描述

sgid 是把目录中新建的文件自动归属到目录的所属组中
在现实生活中的意义就是 你在公司建立的所有的资料都是属于公司的,而不是个人的。

(2)针对文件(只针对二进制的可执行文件(c程序))

效果:当运行二进制可执行文件时都是用文件拥有组身份运行,和执行用户无关
二进制可执行文件就是比如:/bin/cat 就是一些命令

我们用一个例子来说明:
公司有一个扫帚,当一个人拿着扫帚扫地的时候,这个扫帚是属于谁的?
正常情况下,这个扫帚是属于公司的,但是在干活儿的时候,谁拿着扫帚扫地就是谁在干

辅助命令:
ps ax -o commod,user,group | grep cat
ps -ax 代表显示系统当中所有进程。
-o表示显示某些信息;
某些信息包括进程名字、进程所有人、进程所有组。

对其进行监控以后,可以发现,以用户zhang操作cat命令,此时cat进程是属于zhang这个用户和zhang这个组的。
在这里插入图片描述

使用chmod g+s /bin/cat 赋予它s权限
在这里插入图片描述

此时,就可以进行实验在这里插入图片描述

3、冒险位 suid

只针对二进制的可执行文件(c语言)
当运行二进制可执行文件时都是用文件拥有者身份运行,和执行用户无关

比如:chmod u+s /bin/cat 就代表任何人在使用cat命令的时候,都是以超级用户的身份在使用。
既然是以超级用户的身份在使用,那进程的所有人和所有组就是超级用户(root)。

注意:由于只使用了u+s,他只会使所有人变成root,所有组也是root是因为上一个实验我们使用了g+s

在这里插入图片描述
由此可见,当增加s权限以后,当前用户身份只是用来启动 bin/cat 程序的
在程序运行的时候,根本不会去看当前运行它的身份,而是看程序本身的所有人所有组,
那为为什么会看root和root呢?
就是因为下图的**两个“s”**起到了作用。
就是上图中我们使用u+s和g+s得到的结果。
在这里插入图片描述

所以,在企业中,我们使用suid和sgid做企业的调整,对程序本身做权力调整,

七、acl权限列表

Aiccess Control Lists #访问控制列表

功能:
在列表中可以设定特殊用户对特殊文件有特殊权限

我们现在有这样的需求:
对于一个目录,要求westos用户不能对其进行操作。

于是,我们引入acl权限列表。

1、acl基本命令

在这里插入图片描述

1、acl列表开启标识
上图中,setfacl -m u:westos:0 /mnt/pub
用setfacl -m 打开权限列表,u:westos:0代表对westos这个用户进行操作,使其权限为0, /mnt/pub代表对哪个目录生效。

当一个文件,如果他后面有“+”出现时,那么就意味着这个文件的权限列表是打开的,
意思就是这个文件的权限将由权限列表来接管,将不再使用ls -l这个命令对它的权限进行查看(不再适用。)

那么此时我们可以使用,getfacl来对文件的权限进行查看。

2、acl列表权限读取
getfacl /mnt/pub
在这里插入图片描述
显示内容解释:

file:westosfile文件名称
owner:root文件拥有者
group:root文件拥有组
user::rw-文件拥有者权限
user:lee:r–特殊指定用户权限
group::r–文件拥有组权限
group:westos:—特殊指定的拥有组的权限
mask::rw-能够赋予特殊用户和特殊用户组的最大权限阀直
other::r–其他人的权限

3、cal列表的控制

setfal -m u:lee:rw westosfile设定指定用户对文件的权限
setfal -m g:westos:rw westosfile设定指定用户组对文件的权限
setfal -m u::rwx westosfile修改文件拥有者的权限
setfal -m g::0 westosfile修改文件拥有组的权限
setfal -x u:lee删除列表中的lee
setfal -b westosfile关闭acl权限

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、acl 权限优先级

拥有者 > 特殊指定用户 > 权限多的组 > 权限少的组 > 其他
(1)、比较文件拥有者和特殊指定用户的权限
图中可以看到,文件拥有者和特殊指定用户的名字都叫westos
而前者对于pub的权限是rwx 后者是0
所以此时切换到westos用户,执行ls -l /mut/pub ,若执行成功,则证明拥有者的权限大。
在这里插入图片描述
(2)、比较特殊指定用户和组的权限。
设定用户zhang的权限是rwx 文件拥有组的权限是0
那么,此时用用户zhang的身份来查看pub 的属性
若能成功,特殊指定用户的权限大。
在这里插入图片描述
(3)、权限多的组和权限少的组
到目前还有拥有者组和特殊指定用户组的权限大小未知,那么谁的权限大呢?

我们将zhang组的权限设定为0 拥有者组的权限设定为rwx
此时使用westos用户查看pub属性(因为westos用户不是特殊指定用户,且属于zhang组) 执行成功;
在这里插入图片描述

然后,我们将zhang组的权限改为rwx 将拥有着组的权限设定为0,然后查看pub属性,也执行成功。

说明在优先级方面:权限多的组大于权限少的组。
在这里插入图片描述

3、mask权限

上面我们提到:
umask 定义系统保留权力
而mask 是赋予指定用户权限的最大阀值

mask值直接决定了,当赋予用户权限时可以赋予的最大权限。
比如,用户westos’与zhang赋予对westos的rwx权限
此时我们修改mask值,为r-x,就可以观察到如下:
虽然你设置了权限为rwx,但是mask值为r-x,其他权限就得跟着变。(组的权限也会跟着变)
在这里插入图片描述

4、默认权限列表设定

在这里插入图片描述
由上图可知,目录的权限列表已开,而目录下文件的权限列表未开,所以
使用命令:

setfacl -Rm u:zhang:rwx /mnt/westos

在这里插入图片描述
那对于之后在/mnt/westosdir中建立的文件,我还想使用户zhang对其保持rwx,那么就应该使用:

setfacl -m d:u:zhang:rwx /mnt/westos

在这里插入图片描述

其实在使用setfacl -m d:u:zhang:rwx /mnt/westos命令后,
在这里插入图片描述
就是出现了如上图高亮处部分,意思就是复制这些内容到新出现的文件中。

问题
setfacl -m d:u:zhang:rwx /mnt/westos对之后在建立出来的文件生效,那么对于目录本身生效吗?
显然,是不生效的。
该命令的意义只是把默认内容复制到新出现的文件中,而目录本省并没有开启对用户zhang的rwx权限,所以,用户zhang此时不能在该目录下建立新文件。
在这里插入图片描述
那怎么才能让用户zhang在该用户下建立新文件呢?
使用setfacl -m u:zhang:rwx /mnt/westosdir ,重新设定一次就好了。

八、 attr权限

i不能作任何的更改
a能添加不能删除
lsattr dir/file查看attr权限
chattr +i/+a/-i/-a/ dir设定attr权限

+a是指只能建立文件,不能删除
+i 是只能查看,不能新建或删除

在这里插入图片描述

推荐阅读