目录
3.2.1.4.1.1用户对文件或目录的新增权限或删除权限的举例
3.2.1.4.1.2组对文件或目录的新增权限或删除权限的举例
3.2.2.2设置acl权限、删除acl权限、擦除所有acl信息
3.1权限的概念
在Linux系统中,权限是控制用户对文件和目录访问的关键机制。Linux的权限系统基于用户和组的概念,提供了灵活的访问控制。一般的权限包括r(对文件或目录的读取权)w(对文件或者目录的写入权)x(对文件或者文件夹的执行权)
3.2权限的分类
3.2.1基本权限UGO
3.2.1.1权限对象
在权限中有不同的对象,一共可以分为四类对象,三类是我们常用的对象
第一类:U对象,U对象在计算机中代表的是User用户的意思,表示所有用户的权限
第二类:G对象,G对象在计算机中代表的是Group组的意思,表示所有组的权限
第三类:O对象,O对象在计算机中表示的是Other的意思,表示除了所有用户和组之外的其他所有人
第四类:A对象:A对象在计算机中表示的是ALL的意思,表示计算机中所有的用户和组
3.2.1.2权限类型
权限共分为r(read读取)、w(write写入)、x(execute执行)
x执行的原理:假设我们使用文件内编程命令(后期会讲)例如下图的echo Hello 2024 一直到 echo “$name shidabendan”
编写完成后保存并退出,当我们使用ls命令的时候再查看对应的文件的时候文件变成了绿色代表可执行文件,我们直接在终端中输入文件所在的路径(绝对路径最稳妥,相对路径更简单,但是使用相对路径的话还是要cd 到上一级的文件夹)直接输入可执行文件的路径就代表执行该文件了!这时我们看到终端中命令被执行了,这就是可执行的原理。
r、w、x在计算机中都是用了不同的数字进行表示,r=4、w=2、x=1。
r w x
4 2 1
位置都对应好我们在看下面的例子
U=1赋予U用户执行权限 (0+0+1)
U=2赋予U用户写入权限(0+2+0)
U=4赋予U用户读的权限(4+0+0)
U=7赋予U用户所有权限(4+2+1)
U=5赋予U用户执行和读的权限(4+0+1)
U=6赋予U用户读写权限(4+2+0)
G=3赋予G组写和执行的权限(0+2+1)
G=1赋予G组执行权限(0+0+1)
G=2赋予G组写入权限(0+2+0)
G=4赋予G组读的权限(4+0+0)
G=7赋予G组所有权限(4+2+1)
G=5赋予G组执行和读的权限(4+0+1)
G=6赋予G组读写权限(4+2+0)
G=3赋予G组写和执行的权限(0+2+1)
3.2.1.3权限的查看
我们知道了权限的概念和代表的数字之后,我们怎么知道一个文件的权限到底是什么样的呢?用户可以对这个文件进行什么样的操作、组可以对这个文件进行什么样的操作、其他人可以对文件进行什么样的操作呢?
和之前一样我们不是学过ls命令吗?我们使用
ls -l 想要查看权限的文件或目录的路径
使用上述命令来查看文件或者目录的权限
上图就解释了UGO对于文件或目录的权限如何进行查看和分析的方法,如果还是不理解,我们上一篇也有关于用户和组的相关操作,那里面讲的也很详细,我再放一张图片,该图片就是结合了用户和组、权限等大部分知识(如下图)
3.2.1.4设置权限
3.2.1.4.1使用字母设置权限
上述讲的全是原理。ok,当我们明白了权限的分类和每个权限代表的数字之后,我们如何在Linux系统的计算机中设置权限呢?我们可以使用chmod命令来设置权限,这个命令就是专门用来修改权限的。(我们在修改用户属性的时候学了一个usermod不知道小伙伴们还记得吗?缕一缕二者之间的区别)。chmod的命令如下:
chmod + UGO中任意一个 + ‘+或-或=’ + rwx中的一个或多个
注意:如果使用‘=’的时候设置的新的权限会覆盖掉原来的旧的权限。
3.2.1.4.1.1用户对文件或目录的新增权限或删除权限的举例
可能上述代码还是有点模糊了,我给大家举几个例子方便大家来理解chmod的用法
假设我们存在/aaa/file文件和一个user01用户还有一个组zu1,用户和组对文件都没有任何的权限(如下图所示)我们在root终端下敲击下面的命令
chmod u+rwx /aaa/file
这句表示更改权限(chmod) 用户(U)可以(+)进行读写执行操作(rwx)对/aaa/file文件(/aaa/file)
我们敲完这个命令再ls查看:
命令执行成功了,并且显示出来U对应的字段rwx都已经写入了,表示U已经可以对file1文件进行读写执行操作了
我们再删除U对文件进行读写执行的权限
chmod u-rwx /aaa/file1
这句表示更改权限(chmod) 用户(u)不可以(-)进行读写执行操作(rwx)对/aaa/file文件(/aaa/file)
命令执行成功了,并且显示出来U对应的字段rwx都已经编程‘-’了,表示U不可以对file1文件进行任何操作了
3.2.1.4.1.2组对文件或目录的新增权限或删除权限的举例
上述为用户的权限,我们再举例一个‘组’的权限吧
chmod g+rwx /aaa/file1
这句表示更改权限(chmod) 组(g)可以(+)进行读写执行操作(rwx)对/aaa/file文件(/aaa/file)
同理我们删除组的权限
chmod g-rwx /aaa/file1
这句表示更改权限(chmod) 组(g)不可以(-)进行读写执行操作(rwx)对/aaa/file文件(/aaa/file)
3.2.1.4.2使用数字设置权限
设置权限除了使用字母设置外,我们还可以使用数字设置权限,我们上述讲过:rwx分别代表读写执行,数字也是分别为421,那么我们就有了一个【0-7】的区间,分别代表了不同的权限,那么我们如何将这些权限应用到计算机呢?同样使用chmod命令,只不过格式会有区分。
chmod+XYZ+文件或目录的路径
这里的XYZ的取值范围【0-7】
X表示用户的【0-7】的权限,Y表示组的【0-7】的权限,Z表示其他人的【0-7】的权限
例如:
chmod 111 /aaa/file.txt
代表用户、组、其他人都可以对1.txt进行执行操作(如下图所示)
其余例子我就不一一再举了,我们在后期工作的时候这两种命令结构都可以接触到。总的来说使用字母的方法直观明了但是麻烦,不能直接给UGO一条语句把权限设置完,使用数字法反而简单功能强大效率高,但是也存在理解难的问题,如果大家仔细钻研上述权限的基础知识,我还是推荐大家使用数字法。
3.2.1.4.3更改用户的属主
在CentOS 7中,更改用户的属主和属组是一个常见的系统管理任务,通常用于调整文件和目录的权限,以便不同的用户可以访问或管理它们。以下是相关的概念、代码以及应用场景的详细说明:
3.2.1.4.3.1属主的概念
文件或目录的所有者,拥有对该文件或目录的完全控制权。
3.2.1.4.3.2代码
- 更改用户属组:
例如,将用户sudo usermod -g 新属组 用户名
john
的属组更改为developers
:sudo usermod -g developers john
- 更改文件或目录的属主:
例如,将文件sudo chown 新属主 文件或目录
example.txt
的属主更改为john
:sudo chown john example.txt
- 递归更改目录及其内容的属主:
例如,将目录sudo chown -R 新属主 目录
/home/john/projects
及其所有子目录和文件的属主更改为john
:sudo chown -R john /home/john/projects
3.2.1.4.4更改用户的属组
3.2.1.4.4.1属组的概念
文件或目录所属的用户组,组内的用户可以按照组权限访问文件或目录。
3.2.1.4.4.2代码
要更改文件或目录的属组,可以使用 chgrp
命令。这个命令会改变文件或目录的用户组归属,但不改变其属主。
sudo chgrp 组名 文件或目录
例如,将文件 example.txt
的属组更改为 developers
:
sudo chgrp developers example.txt
递归更改目录及其内容的属组
如果你想要更改一个目录及其所有子目录和文件的属组,可以使用 -R
选项进行递归操作。
sudo chgrp -R 组名 目录
例如,将目录 /home/projects
及其所有子目录和文件的属组更改为 developers
:
sudo chgrp -R developers /home/projects
查看文件或目录的属组
要查看文件或目录的属组,可以使用 ls -l
命令。这个命令会列出文件或目录的详细信息,包括其属主和属组。
ls -l 文件或目录
例如,查看文件 example.txt
的详细信息:
ls -l example.txt
输出可能会类似于:
-rw-r--r-- 1 owner developers 123 Jan 1 12:34 example.txt
在这个输出中,developers
就是文件 example.txt
的属组。
更改属组并保留属主
有时候,你可能只想更改文件或目录的属组,而保持其属主不变。这可以通过 chown
命令实现,只需指定属组,不指定属主。
sudo chown :组名 文件或目录
例如,将文件 example.txt
的属组更改为 developers
,而保持其属主不变:
sudo chown :developers example.txt
使用属组来控制访问权限
你可以利用属组来控制用户对文件或目录的访问权限。例如,如果你想要让 developers
组的所有成员都能够读写 /home/projects
目录中的文件,你可以这样做:
- 首先,确保目录的属组是
developers
:sudo chgrp developers /home/projects
- 然后,设置目录的权限,使得属组成员可以读写:
sudo chmod 770 /home/projects
这样,只有 developers
组的成员才能读写 /home/projects
目录中的文件,而其他用户则不能。
这些例子展示了如何在CentOS 7中使用属组来管理文件和目录的访问权限。在实际操作中,确保你了解每个命令的作用,以避免不必要的权限问题。
3.2.2基本权限ACL
学习完UGO的权限之后,我们发现一个问题:假设我的两个user01用户和user02用户出现了争吵,为了促进安全性,user01所在的部门能看file1的内容,user02所在的部门不能看user02的内容。如何实现这样的需求呢?
我们上述的UGO只是笼统的划分了用户、组、其他人这三大类。如果我们想要具体出哪些用户对某些文件可以有哪些权限,哪些用户又不可以有某些权限怎么办呢?这时我们可以使用ACL来进行区分。
ACL又称为访问控制表,原理与网络中的ACl访问控制表类似。
优点:ACL是UGO的加强版且ACL不限制用户,不限制权限。
3.2.2.1查看文件或者目录的ACL
我们可以使用getfacl+文件或目录的方式来查看ACL
getfacl 文件路径
在弹出的对话框中我们有至少七行信息可以查看(如下图):
1.#file文件或目录的地址
2.#owern:文件的属主
3.#group:文件的属组
4.user:用户的权限
user:其他:其他用户对于该文件的权限,可能会有多个
5.group:组的权限
group:其他:其他组对于该文件的权限,可能会有多个
6.other: 其他人对于该文件的权限
7.mask:掩码(后期会讲)
注意事项:acl单独设置的权限的优先级比other高,假设user02的权限为rwx,other的权限为---,因为user02是通过acl单独设置的,所以即使other没有任何权限也不耽误use02正常的读写执行。
3.2.2.2设置acl权限、删除acl权限、擦除所有acl信息
使用setfacl命令完成对文件的acl的自定义设置
setfacl -m 对象 权限 路径
例如:
setacl -m user01 WX /aaa/file1
我们给/aaa/file1文件设置了让user01用户对于该文件的写(W)与执行(X)的权限
完成acl权限的删除
setfacl -x 对象 权限 路径
例如:
setacl -x user01 WX /aaa/file1
我们删除了/aaa/file1文件设置让user01用户对于该文件的写与执行的权限
完成acl权限的清除
setfacl -b 权限 路径
例如:
setacl -b WX /aaa/file1
我们清除了/aaa/file1文件的读写的权限(针对所有用户、组和其他人)
3.2.2.3 acl的高级使用方法
3.2.2.3.1自动化更新watch语句
如果我们想要实时查看文件的acl的更改情况,我们可以使用watch命令来实时监视文件的acl权限等信息,不光acl好使,watch只是一个命令思想,以后我们想要动态查看文件或者目录的变化的时候都可以打开两个窗口,一个窗口输入命令,另一个窗口用来实时显示更新出来的信息
watch -n+时间(单位为秒)命令+选项
例:watch -n3 ‘ls -l /aaa/1.txt’
我再使用chmod改它的属性上述命令也会在3秒的时候变化
每隔三秒更新一次/aaa/1.txt的全部相关信息,并不是每隔一秒输出一次‘ ’内的命令
在例如:
watch -n3 'getfacl /aaa/699.txt'
表示每3秒监视一次数据,再使用chown修改数据
chown user02.hr /aaa/699.txt
利用如上命令更改完成属主和属组就可以在监视器窗口进行查看了
如果我们想要终止watch窗口可以使用ctrl + C 命令结束对窗口的显示
3.2.3特殊权限
3.2.3.1特殊位suid的使用
如果我们公司以后想让所有的注册的用户都可以使用某一条命令,但是使用sudo命令还要每个用户都让管理员root进入/ets/sudoers文件进行编辑太麻烦,我们可以使用特殊位suid,与sudoers文件的区别就是suid特殊位命令是对命令所在的文件进行操作而不是向sudoers一样对用户的权限进行操作。
chmod 对象+s +命令所在的地址
例如:chmod u+s /usr/bin/cat
任意用户都可以使用cat命令,即使是查看root文件下的文件也可以了!所以用完一定要撤回命令!
suid的注意事项
1.是对命令的chmod u+s +命令所在的路径,不是直接对文件的suid!!!!!!!!!,这一点非常重要而且root附加上suid命令之后最好再删除否则谁都可以任意使用附加了suid的命令了!!
2.suid命令比较危险,因为普通用户也可以使用管理员专属的命令,所以用完suid命令一定记得撤回!以上述命令为例子
撤回suid命令的语句:
chmod u-s usr/bin/cat
3.使用了suid的命令的命令我们再使用ls -l -d 查看命令的权限得 时候我们会看到某一位得权限后面添加了’s‘字母,这就表示该命令所有人都可以调用
3.2.3.2改变文件属性chatter
假设公司现在存在一个文件对公司特别重要,我们普通用户没有权限删除,但是公司高管害怕公司有人使用root用户对文件进行删除,那么有没有一种方法对文件属性的修改使得管理员也不能随意删除文件呢?
我们Linux系统在设计的时候也考虑到了这个问题,我们可以使用chatter命令来改变文件的属性(例如对文件加锁,这样所有人就不能删除文件了)
原始代码:
chatter + ‘+’选项 + 文件路径
文件属性的相关选项有多个,我们列出几个使用频率高的
+i
锁定文件
+a
仅限追加内容,禁止修改或删除旧的内容
+c
文件将自动被压缩,但是每次使用的时候都需要解压缩
+d
文件在备份的时候不会被转储
+s
文件删除时将被安全的覆盖
+S
文件的读写操作将被同步到磁盘
+u
设置文件不能被删除
+D
文件的数据将被记录到日志中
+t
文件的尾部不会被合并
+T
文件是顶层目录的一部分
如果我们想要删除对应的文件的属性我们需要
chatter + ‘-’选项 +文件或目录
就是上述的命令+选项改成-选项(+选项表示添加某些属性,-选项表示删除某些属性)
我们管理员如果上删除添加了加锁的文件,需要先-i去掉文件的锁才能进行删除!
3.2.3.3进程掩码umask的使用
我们平时创建文件或者创建文件夹的时候有没有想过为什么文件的默认权限为644?为什么目录的默认权限为755?接下来子网掩码就是他们的原因!
概念:
umask(用户文件创建掩码)在操作系统中主要用于控制用户创建新文件或目录时的默认权限。
具体来说,umask的值决定了在创建文件或目录时应从最大权限7777中去除的权限。
默认权限的计算公式:
文件:7777-管理员设置的umask码
目录:7777-管理员设置的umask码-0111(文件先天缺少的执行权)
实践:
在Linux终端中我们直接输入umask进行掩码的查看(如下)
原文写的是:4位权限,U前第一位是S临时权限(图片给错了)
Linux中共有四位权限得归属单位,分别是UGO和我们不常提起的第一位S位,S表示的就是suid,任意人都可以使用的权限,所以我们umask查看的掩码是四位的掩码。
计算(默认权限的原因):
那么为什么文件的默认权限为644?为什么目录的默认权限为755?原因就是我们所有文件或者目录的初始属性为所有人用户其他都可以读写查看(7777)与我们的掩码进行差运算就得到了创建目录的默认权限为7777-0022 = 7755 省略掉第一位的S为就是我们平日看到的目录的属性755
那为什么文件的默认属性为644呢?少了一位执行位?答:就是要文件默认少一位执行位,因为目录添加了执行位可以执行表示该目录(文件夹)可以被打开,文件没有执行位表示所有人一开始都是不能执行这个文件的,这时计算机系统的自我保护。
更改:
如果我们完全信任我们的计算机,那么默认的权限也是可以更改的。
umask + 四位0-7的数字 (如果是四位数字的话就将suid位也包括了,否则只有UGO三位)
这样我们的计算就变成了7777-我们新设置的umask,计算出来的结果再匹配到UGO对应的权限,这样就完成了默认权限的更改。
如上图所示,原先的文件的权限为644(rw-rw-r)将umask的权限改成0000之后默认的文件夹权限就变成了(777-000)为全部的权限,UGO都可以对该文件夹进行增删改查。但是,文件的权限先天就比文件少一个执行权,所以文件的权限还要减去0111,(文件的suid位不受影响)。