Linux第十四天

一.UGO模型

U代表User,G代表Group,O代表Other;每一个文件的权限基于UGO进行设置 Linux的基本权限分为读、写、执行(r、w、x),可用数字4、2、1来表示
在这里插入图片描述
说明:对于w权限来说,文件的w权限,在于修改文件内容,而目录的w权限是在该目录下创建或者删除文件。两者区别在于目录的w权限需要配合x权限进行使用,比如一个目录如果只有w权限,那么属主属组里的用户都不能在这个目录下进行创建或者删除文件,因为创建,删除该目录下的文件,都是首先要进入到该目录下,而x权限就是控制cd的。而文件的w权限,无论x权限在否,都可以修改文件。对于文件的x权限则是将文件运行为进程的管控,如果没有x权限的话,该文件就不能运行为进程。举例说:我们都知道每个命令的执行都是运行一个文件,如果没有x权限,这个命令就会无法使用
还需注意的是每个文件或者目录是否有权限执行的顺序则是,按照owner->group->other顺序进行匹配。

二.权限管理命令

1.chmod命令

修改文件或目录的权限
a.使用数字修改文件权限
r---->4
w---->2
x----->1
chmod 数字 文件名
b. chmod [-R] 权限值 文件名 表示连同子目录中的所有文件,也都修改设定的权限
c.chmod命令MODE表示法修改文件权限
既然文件的基本权限就是 3 种用户身份(所有者、所属组和其他人)搭配 3 种权限(rwx),chmod 命令中用 u、g、o 分别代表 3 种身份,还用 a 表示全部的身份(all 的缩写)。另外,chmod 命令仍使用 r、w、x 分别表示读、写、执行权限。
在这里插入图片描述

2.chown命令

 chown 命令,可以认为是 “change owner” 的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组

默认情况下:只有root用户才可以使用该命令
-R(注意大写)选项表示连同子目录中的所有文件,都更改所有者。
演示:在我的tmp下有个属主属组是linux001的文件file2,用chown将它的属主,属组都修改为linux002.如果需要修改目录file1连同其下的文件属主属组就需使用-R选项了。
在这里插入图片描述
在这里插入图片描述

二.主机的详细权限规划:ACL权限

ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表。它在UGO权限管理的基础上为文件系统提供一个额外的、更灵活的权限管理机制

它被设计为UNIX文件权限管理的一个补充。ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。
也就是说,如果你有一个目录,需要给一堆人使用,每个人或每个用户组所需要的权限并不相同时,再过去,传统的linux三种身份的三种权限是无法达到的,因为基本是传统的linux权限只能针对一个用户,一个用户组及非此用户组的其他人设置权限而已,无法针对单一用户或个人来设置权限,而ACL就是为了解决这个问题。
既然是作为UGO权限管理的补充,ACL自然要有UGO办不到或者很难办到的本事,例如:
1.可以针对用户来设置权限
2.可以针对用户组来设置权限
3.子文件/目录继承父目录的权限
在这里插入图片描述

1.针对用户设置ACL权限

setfacl -m u:要赋予权限的用户名:要赋予的权限 文件名
演示: setfacl -m u:linux001:rw wangzhe
我先创建一个名为wangzhe的文件发现它的权限是-rw-r–r--,切换到linux001下,发现linux001用户无法编写这个文件,因为没有w权限,之后使用setfacl -m u:linux001:rw wangzhe 给linux001用户赋予rw的权限即可进行编写wangzhe这个文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明:我们可以通过getfacl进行查看该文件的权限信息
在这里插入图片描述
file: wangzhe 文件名
owner: root 属主
group: root 属组
user::rw- 用户栏是空的,说明是属主的权限
user:linux001:rw- 用户linux001对该文件的权限
group::r-- 组名栏是空的,说明是所属组的权限
mask::rw- mask权限
other::r-- 其他人权限

2.针对用户组设置权限

和针对用户的设置几乎一样,把 u 换成 g 就行
setfacl -m g:linux001:rw wangzhe
setfacl -m g:要赋予权限的组名:权限 文件名

3.setfacl -d 针对子文件/目录继承父目录的权限

演示:我们在root用户下创建一个叫wangzhe01的目录,先使用setfacl -m u:linux001:rwx wangzhe03 然后使用setfacl -m d:u:linux001:rwx wangzhe03 设置权限,之后在linux001下的tmp,wangzhe03下创建文件,会发现它的权限都是rwx。这个就是文件继承目录的权限。之后使用getfacl file5查看它的权限。

在这里插入图片描述
在这里插入图片描述
#effective:rw- 解释:这里对linux001实际生效的权限是rw-,这和mask权限有关
#effective:r-- 解释:这里对属组实际生效的权限是rw-,同样这和mask权限有关
说明:
mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理
在上面可以看出由于mask权限对于非目录文件来说为rw-,所以即使用户手动给admin002用户添加对该文件具有rwx权限也没有用,此时并不能说明 admin002 用户就拥有了对该文件的读、写和访问权限,还需要和 mask 权限对比,rwx不在 rw- 范围内,所以最后生效的是rw-权限。
其实 :这里将权限进行对比的过程,实则是将两权限(即mask权限和手动赋予的权限)做“按位相与”运算,最终得出的值,即为admin002 用户有效的 ACL 权限
mask 权限的功能:它将用户或群组所设定的 ACL 权限限制在 mask 规定的范围内,超出部分直接失效。
总结:
如果手动赋予的权限大于mask权限,则最后生效的ACL 权限是mask权限
如果手动赋予的权限小于mask权限,则最后生效的ACL 权限是手动赋予的权限

4.更改ACL权限

-m 选项用来更改文件和目录的ACL权限
当一个用户或组的ACL权限不存在时,-m选项执行的是添加
当一个用户或组的ACL权限已经存在时,-m选项执行的是更新操作

5.递归 ACL 权限

setfacl -R:设定递归 ACL 权限
递归 ACL 权限指的是父目录在设定 ACL 权限时,所有的子文件和子目录也会拥有相同的 ACL 权限。首先我们先创建一个wangzhe05目录,这个目录里面包含dir目录,dir1目录,file1,file2文件。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
说明:默认 ACL 权限指的是针对父目录中后续建立的文件和目录会继承父目录的 ACL 权限;递归 ACL 权限指的是针对父目录中已经存在的所有子文件和子目录会继承父目录的 ACL 权限。

6.删除ACL权限

setfacl -x ,
删除指定的 ACL 权限
演示:先给file2文件创建linux001的acl权限,再创建linux002的acl权限
在这里插入图片描述
setfacl -b:删除指定文件的所有 ACL 权限
递归删除所有ACL信息 setfacl -b -R
递归查看所有ACL信息 getfacl -R

7.如果是想删除一个目录下的所有文件的ACL权限(包括该目录的)
演示:首先使用getfacl -R 查看该目录及所有子目录和子文件的ACL权限信息
在这里插入图片描述
在这里插入图片描述
然后使用setfacl -b -R删除所有的acl权限
在这里插入图片描述
在这里插入图片描述

7.备份和恢复ACL权限

先将指定文件的ACL权限信息进行重定向到文件中进行备份 getfacl -R > file.bak
如果该文件的ACL权限信息被误删后,可以使用 setfacl --restore file.bak 进行恢复

三.权限掩码umask

1.概念
我们都知道在linux下创建一个文件或者目录之后是可以通过chmod等命令进行权限设置,来达到给当前用户、用户组用户以及其他用户分配不同的访问权限。那么,我们新创建的目录和文件本身也是有它的默认权限的,这个默认权限是什么,就是由权限掩码umask所确定的。它的功能可以说与chmod刚好相反的,代表默认拿走的也就是说不要的权限。
若没有文件掩码时,文件的默认权限为0666,文件夹的默认权限为0777
原因:
创建文件一般是用来读写,所以默认情况下所有用户都具有读写权限,但是没有可执行权限,所以文件创建的默认权限为0666
而文件夹的x权限表示的是打开权限,所以这个权限必须要有,所以文件夹的默认权限为0777。
作用:
上述的权限是在没有umask情况下的默认权限。但是系统为了保护用户创建文件和文件夹的权限,此时系统会有一个默认的用户掩码(umask),大多数的Linux系统的默认掩码为022。
用户掩码的作用是用户在创建文件时从文件的默认权限中去除掩码中的权限
文件创建之后的权限实际为:文件创建权限 = 默认权限(文件0666,文件夹0777) - umask
注意:之所以文件用666去减,表示文件默认不能拥有执行权限;如果减得的结果中有执行权限,则需要将其加1
这里要说明两点:
针对目录来说x权限代表可以进入该目录,所以说对于这个权限初始赋值是没什么问题的;
针对文件的x的权限代表执行,这个风险太高,所以一般权限初始赋值必须去掉x的;
所以说,umask是用来指定"目前用户在新建文件或者目录时候的权限值"。那我们如何得知或者设置这个umask?
2.umask的查看
a.umask
在这里插入图片描述
第一个数:0代表suid 丢弃的权限;(不常用,后面说明中均省略该位)
第二个数:0代表本文件/目录拥有者什么权限都没丢弃(如果是文件,x权限除外);
第三个数:2代表本文件/目录的用户组丢弃了w权限(如果是文件那么它的x权限也丢弃);
第四个数:2代表本文件/目录的其他用户能使用的权限只有有r和x(文件除外)。
在这里插入图片描述
这个输出信息表示:当用户新建一个目录的话其默认权限为: rwxr-xr-x ,也就是755;当用户创建一个非目录的文件时去掉以上所有权限对象的w可执行权限,即为:rw-r–r–,也就是644
下面我们看下普通用户下的掩码:
在这里插入图片描述
如果在创建一个文件,会发现它的权限是(-rw-rw-rw-)-(--------w-)=(-rw-rw-r–)
在这里插入图片描述
总结:这就是掩码的作用,它是用来求真实创建文件的权限,修改它就可以修改默认在此用户下创建文件的权限。文件用666减掩码,目录用777减掩码,两者是不一样的,但都是求创建的权限,须注意的是必须将数字换算成rwx的形式去减umask的rwx形式!!!
3.umask的修改
使用umask 数字
去修改umask的值
演示:先修改umask的值再查看umask的值
在这里插入图片描述
注意:这样修改的umask值只是临时的,退出当前shell后就会失效
若要全局生效,可以将umask值写入/etc/profile或者.bashrc文件中

四.文件特殊权限SUID、SGID

(一)Set UID
当s权限出现在文件所有者的x权限位置上时,此时就被称为Set UID,简称为SUID
如/usr/bin/passwd(psswd命令)这个文件的权限状态:“-rwsr-xr-x.”,
在这里插入图片描述
SUID的作用:
1、SUID权限仅对二进制程序(binary program)有效;
2、执行者对于该程序需要具有x的可执行权限;
3、本权限仅在执行该程序的过程中有效(run-time);
4、执行者将具有该程序拥有者(owner)的权限。
SUID的目的:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。
功能:只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
经典案例:
通过查看/etc/passwd文件的权限,我们发现都是横杠,没有任何权限,它的属主,属组都是root,因为root拥有无限的权利,所以仅有它可以访问,那为什么我们普通用户可以去通过passwd命令去改密码,这里补充改密码的话首先是使用passwd命令,也就是执行/usr/bin/passwd这个文件,之后这个文件将密码数据写入到/etc/passwd中。问题是我们知道一个进程要打开一个文件需要拥有x的权限,而这个/etc/passwd没有任何权限。这就是特权命令的作用了。主要作用是有这权限的的文件,会让不是属主属组的用户有权限去执行这个文件,并且可以访问这个用户没有权限访问的资源(比如/etc/passwd)

我们也可以对比下,如果用cat命令去查看/etc/passwd发现根本没有权限,这是因为/bin/cat文件没有s权限。
大写s与小写s:
属主的执行权限位如果属主原本有执行权限,显示为小写s; 否则,显示为大写S;
(二)Set GID
当s权限位于文件的所属用户组x权限位置上的话,就是Set GID,简称SGID
与 SUID 不同的是,SGID 既可以对文件进行配置,也可以对目录进行配置
1.SetGID(SGID)对文件的作用
同 SUID 类似,对于文件来说,SGID 具有如下几个特点:
SGID 只针对可执行文件有效,换句话说,只有可执行文件才可以被赋予 SGID 权限,普通文件赋予 SGID 没有意义。
用户需要对此可执行文件有 x 权限;
用户在执行具有 SGID 权限的可执行文件时,用户的群组身份会变为文件所属群组;
SGID 权限赋予用户改变组身份的效果,只在可执行文件运行过程中有效;
其实,SGID 和 SUID 的不同之处就在于,SUID 赋予用户的是文件所有者的权限,而 SGID 赋予用户的是文件所属组的权限,就这么简单
演示:
以 locate 命令为例,可以看到,/usr/bin/locate 文件被赋予了 SGID 的特殊权限,这就意味着,当普通用户使用 locate 命令时,该用户的所属组会直接变为 locate 命令的所属组,也就是 slocate
locate 命令是用于在系统中按照文件名查找符合条件的文件的,当执行搜索操作时,它会通过搜索 /var/lib/mlocate/mlocate.db 这个数据库中的数据找到答案,看看此数据库的权限:
[root@admin ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 700853 7月 30 10:49 /var/lib/mlocate/mlocate.db
可以看到,mlocate.db 文件的所属组为 slocate,虽然对文件只拥有 r 权限,但对于普通用户执行 locate 命令来说,已经足够了。一方面,普通用户对 locate命令拥有执行权限,其次,locate 命令拥有 SGID 权限,这使得普通用户在执行 locate 命令时,所属组身份会变为 slocate,而 slocate 对 mlocate.db 数据库文件拥有 r 权限,所以即便是普通用户,也可以成功执行 locate 命令、
注意:无论是 SUID,还是 SGID,它们对用户身份的转换,只有在命令执行的过程中有效,一旦命令执行完毕,身份转换也随之失效
(三)SetGID(SGID)对目录的作用
当一个目录被赋予 SGID 权限后,进入此目录的普通用户,其有效群组会变为该目录的所属组,就使得用户在创建文件(或目录)时,该文件(或目录)的所属组将不再是用户的所属组,而使用的是目录的所属组
也就是说,只有当普通用户对具有 SGID 权限的目录有 rwx 权限时,SGID 的功能才能完全发挥。比如说,如果用户对该目录仅有 rx 权限,则用户进入此目录后,虽然其有效群组变为此目录的所属组,但由于没有 x 权限,用户无法在目录中创建文件或目录,SGID 权限也就无法发挥它的作用。
演示:我先在root的/tmp下创建一个目录file5,并给它加上sgid权限,之后切换到linux001用户下,进行创建file66,发现没有权限,这是因为file5目录的属主权限是rw,没有x权限,所以它无法创建文件。下来我们回到root下给file5加入777权限,之后切换到linux001下,在file5目录下创建file66文件,发现可以创建,并且这个文件的属组不是linux001,而是root。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值