(五)Linux系统中的权限管理
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 是只能查看,不能新建或删除