云计算基础大课笔记-云计算工程师系列
第三章 权限管理
简介:本章讲述了Linux系统CentOS7中关于权限的相关概念。以及用户和组的管理方法。
目标:熟悉并掌握权限的相关概念,以及用户和组的管理方法。
第一节,权限UGO
(1)概述
赋于某个用户或组能够以何种方式访问某个文件(图片文件,视频文件,普通文件)
(2)权限对象
01.属主(u):一般是创造的 不一定都归于root
02.属组(g):分组
03.其他人(o):除主/组外的用户
04.所有人(a:u+g+o)
(3)权限类型
01.读:r=4
02.写:w=2
03.执行:x=1
创造的文件一般都有rw 但是一般没有x 如果有x则该文件就会变成程序 里面的代码都会被当作指令执行 使用4,2,1是因为使用的8进制
(4)如何查看权限
01.使用 ls -l+/路径/文件名 (不加路径与文件名则显示当前目录下的所有文件的权限)
02.使用 ll+文件 也可以查看文件权限
03.ls -l 后 显示内容的解释:
01.第一个符号-是文件类型(普通文件)
02.前三个(rw-)代表属主的权限 → 代表有读写权限
03.中三个(r--)代表属组的权限 → 代表有读权限
04.后三个(r--)代表其他人的权限 → 代表有读权限
05.符号 . 代表权限的扩展
06.数字 1 代表文件连接
07.第一个 root 代表文件的属主
08.第二个 root 代表文件的属组
09.数字 0 代表文件的大小(本文件是空的 所有没有大小)
10. 1月 19 06:24代表文件最后修改的时间
11. /root/zyb.txt代表文件的名和路径
(5)如何更改权限
在使用chmod chown chgrp命令时 都可以在命令后面加上 -R 本参数可以以递归的方式将目录内的所有文件都更改为你所输入的想要的权限/属主/属组(包括文件夹本身)
01.使用符号:u用户 g组 o其他 r读 w写 x执行
02.语法:chmod(change mode)+对象(u/g/o/a)赋值符(+加/-减/=覆盖)权限类型(r/w/x)这三个在一起!!+ 文件/目录
(5.Practice)权限管理的实验
01.ls -l -d + 目录 本命令的-d代表仅看目录
02.ll命令也可以查看文件权限
03.echo表示回响 让程序说话 但是他是一种命令
04.read -p 代表收集用户所输入的内容 并将用户输入的内容放在一边等待使用
05.$name $符号是调用内容的方法
06.以上是对file1 写入 赋权 和内容的演示 以下是运行演示(运行程序使用bash+文件)
07.赋权演示
08.使用 ./文件名 符号. 代表当前目录 符号/ 代表路径 这种方式也可以运行文件
(6)设置权限的方法
01.数字授权 4读 2写 1执行 例:chmod 644 file1 第一个数是属主 第二个数是属组 第三个数是其他
02.符号授权 u用户 g组 o其他 r读 w写 x执行 chmod(change mode)+对象(u/g/o/a)赋值符(+加/-减/=覆盖)权限类型(r/w/x)这三个在一起!!+ 文件/目录 例chmod u=rw
03.更改属主 chown(change owner)命令
01.chown:设置一个文件属于谁,属主
02.语法:chown 用户名.组名 文件 注意命令中的符号 .
03.实例 (useradd 添加用户 groupadd 添加组)
01.第一个 更改属主和属组
02.第二个 改属主
03.第三个 改属组 注意符号 .
04.更改属组 chgrp (change group)命令
01.语法:chgrp 组名 文件 -R是递归的意思
02.实例 chgrp hr file1
05.案例需求
第二节,权限ACL(访问控制列表)
是一种补充设计,可以针对更多的用户,更多的基本权限,同样可以配置UGO部分
(1)区别
01.ACL文件权限管理:设置不同用户 设置不同的基本权限(r,w,x)对象数量不同
02.UGO设置基本权限:只能设置一个用户,一个组和其他人的特定权限
(2)语法
01.setfacl/getfacl(set/get file access control list 设置/获得文件的访问控制列表 ) -m(参数m:more/-x 删除/-b) u/g(用户/组):用户(alice)/组(hr):权限(rwx) + 文件/目录 (符号 : 代表分隔符)
02.上述结构简化后为: 命令+设置+用户或组:用户名:权限+文件对象
(3)用法
01.设置ACL
01.查看哪些文件有acl权限
命令:getfacl(get file access control list 获得文件的访问控制列表 )+文件对象
02.实例
03.当权限的扩展变为 + 时,则代表该文件的权限并没那么简单
04.jack后面的 - 代表了禁止了该用户的所有权限,因为在原始的UGO里面 jack为O类用户是拥有r权限的 通过添加 - 后 则该用户的所有权限全部禁用
05.这样写(用户/组的位置是空的)则代表设置所有的O用户都拥有rw权限 不过因为该命令较长,效率不如直接使用chmod
06.增加hr组对test.txt文件读取的权限
02.查看ACL
mask:是一种通配符,对已经授权的权限取交集
03.删除ACL
01.删除部分(自己添加的某一条)setfacl -x g:hr home/test.txt 只能是后来附加的 注意一定不要在用户名/组名后加 : 权限 否则报错
02.删除所有(不包括UGO部分) setfacl -b /home/test.txt
04.setfacl的默认权限 继承权限
默认权限(Default Permissions)是在目录上设置的 ACL 条目,这些条目作用于该目录内新创建的任何文件或子目录。当在一个目录上设置了默认权限时,这些权限会自动被继承到该目录下新创建的文件和子目录,它们的 ACL 会包含与父目录的默认权限匹配的条目。
可以使用 setfacl 设置这些默认权限,例如:
setfacl -m d:u:username:rwx /path/to/directory
注意:d:u:username:rwx中的 d:这代表 “default”,意味着接下来的规则应该作为默认 ACL 条目设置。默认 ACL 值仅用于目录,并且它们指定了在此目录下创建的任何新文件或目录应该继承的权限。
上面的命令会设置指定目录上的默认权限,使得用户 username 对目录中新创建的文件和子目录有读写执行(rwx)的权限。
此外,需要注意的是,虽然设置了默认ACL,但这些ACL不会自动应用于已经存在的文件和子目录。默认ACL只影响之后创建的文件和目录。如果你需要更改现有文件和目录的ACL,你需要单独对它们使用 setfacl 命令。
继承的权限不一定会使文件和目录的实际权限与父目录的 ACL 完全匹配,因为文件和目录的实际权限还受到 umask(用户文件模式创建屏蔽)的影响。umask 决定了新创建的文件和目录的默认权限位,这些权限位可能进一步限制了由默认ACL所提供的权限。
05.UGO和ACL的区别
01.UGO:简单方便 但是所实现的对象很少
02.ACL:是UGO的补充,可以同时可以实现UGO的命令 但是设置的内容类型功能多 但是查看较为复杂,指令较UGO多
第三节,特别权限(了解)/属性
(1)特殊位SUID
01.高级权限的类型
01.suid (那个u就是user 属主) 针对文件/程序时,具备临时获得属主的权限(一般不要设置)
02.sgid (那个g就是group 属组)针对文件/程序时,具备临时获得属组的权限(一般也不要设置)于suid类似滴
03.sticky bit
Sticky bit是一种特殊的权限标志,用于目录。当这个位被设置在一个目录上时,它会产生特殊的行为:
在具有Sticky bit标志的目录上,任何用户都可以创建文件或目录,但只有文件的属主、目录的属主或者root才能删除或重命名这些文件。这就防止了一个用户删除或移动另一个用户的文件,这在诸如/tmp这样的公共目录中特别有用,每个用户都需要读写访问权限,但应防止用户相互干扰。
要设置目录的Sticky bit,可以使用chmod命令的+t选项。例如,要给/some/directory设置Sticky bit,你可以使用如下命令:
chmod +t /some/directory
要移除Sticky bit,可以使用-t选项 同样覆盖也可以使用=:
chmod -t /some/directory
使用ls -ld命令查看目录的权限时,Sticky bit被设置的目录在权限字符串的最后一位显示一个t字符(如果同时具有执行权限)或者T字符(如果没有执行权限)。例如:
drwxrwxrwt 10 root root 4096 Jan 20 10:00 /tmp
在上例中,/tmp目录的权限字符串最后的t指示了Sticky bit已被设置。
02.思考
分析: root运行是超管的权限,普通用户运行时是普通用户的权限。
root /usr/bin/cat (root) /root/file1.txt OK
alice /usr/bin/cat (alice) /root/file1.txt NO
对文件赋上suid chmod(change mode)+对象(u/g/o/a)赋值符(+加/-减/=覆盖)s 这三个在一起!!+ 文件/目录 例:chmod u+s 文件对象
03.示例1
01.设置suid,使普通用户通过suid临时提权,查看超管root用户的文件
02.为cat程序添加suid权限
03.使用普通用户运行cat 暂时获得root权限
(2)文件属性chattr
01.用途 常用于锁定某个文件,拒绝修改 让超管root也汗流浃背(删不了)
02.分类
- A 访问时间 (noatime)
- +a: 当文件被设置为 a 属性时,它只能被追加数据,不能被删除或修改。
- -a: 移除 a 属性,文件可以正常被修改。
- S 同步属性 (synchronous updates)
- +S: 修改操作会导致直接写入磁盘的同步更新。
- -S: 移除 S 属性,文件更新使用正常的缓存策略。
- D 写时更新 (no dump)
- +d: 文件将不会被 dump 程序备份。
- -d: 移除 d 属性,文件可以被 dump 程序备份。
- I 不可修改 (immutable)
- +i: 设置后,文件内容变为不可修改,不可删除,不可重命名,无法添加新链接。
- -i: 移除 i 属性,恢复文件的可修改性。
- A 不更新访问时间 (no atime updates)
- +A: 文件访问时间不会有更新。
- -A: 移除 A 属性,文件访问时会更新访问时间。
- j 数据日志 (data journalling)
- +j: 在ext4文件系统上,对文件启用数据日志,每次更新文件时,数据先写入日志。
- -j: 移除 j 属性,文件不再进行数据日志。
- C 压缩 (compressed)
- +C: 在支持此属性的文件系统上,文件可以被自动压缩。
- -C: 移除 C 属性,文件不会被自动压缩。
- s 安全删除 (secure deletion)
- +s: 文件内容在删除时会被立即清空并覆盖,确保无法恢复。
- -s: 移除 s 属性,文件删除时不会被特别处理。
- u 未删除 (undeletable)
- +u: 文件内容在删除后依然可以恢复。
- -u: 移除 u 属性,正常删除文件。
- T 系统的 top directory (top of directory hierarchy)
- +T: 用于ext4文件系统,明确该目录是文件系统顶层的目录。
- -T: 移除 T 属性,目录不被视作顶层目录。
chattr 命令通常需要超级用户权限来运行,因为修改文件的这些属性可能会影响系统的安全和完整性。这个命令的一般语法格式如下:
chattr [选项] [属性设置] 文件或目录名
使用 + 号给文件添加属性,使用 - 号移除文件的属性,使用 = 号设置成指定的属性。查看这些属性,可以使用 lsattr 命令
03.案例
04.注意 即使是拥有 root 权限的用户,也会受到 chattr 设置的属性的影响。某些属性,如不可修改(immutable)属性 +i 或者不可删除(undeletable)属性 +u,会阻止所有用户(包括 root 用户)对文件进行修改、删除或重命名。
(3)进程掩码umask
01.概述:新建文件 目录的默认权限会受到umask的影响 umask表示要减掉的权限
02.观察系统默认掩码(掩码掩码 掩盖了一些号码)
01.我们在根目录下使用umask 我们可以看到进程掩码的值为0022
02.在创建文件file和dir后 我们可以看到dir的权限是0755 file的权限是0644 这是因为文件夹的起始权限是0777 那么掩码掩码 就是掩盖了最高默认权限(0777)的0022 所以才有了 0755的权限 同理 file的起始权限是0666 那么掩码掩码 就是掩盖了最高默认权限(0666)的0022 所以才有了 0644的权限
03.实例
第三章总结:
在本章中,我们学习了Linux系统(以CentOS 7为例)中用户和文件权限管理的基础知识。通过掌握UGO权限模型,学会了如何管理文件和目录的权限,明白了rwx权限对应于数值4、2、1,以及如何使用ls -l、ll命令查看这些权限。
我们了解到权限可以通过用户(u)、组(g)、其他人(o)以及所有人(a)来赋予,并掌握了如何用chmod、chown、chgrp命令来更改文件和目录的权限和所有权。我们还学习了如何设置默认权限和递归地应用权限更改。
此外,我们接触了较为进阶的权限管理方法:ACL(访问控制列表)。它允许我们为不同的用户和组设置详细的访问权限,从而解决了传统UGO权限模型的限制。
本章还涉及到特殊的权限类型,比如SUID、SGID和Sticky bit,以及如何使用文件属性(通过chattr、lsattr命令)和进程掩码(umask)来对文件系统的安全性和灵活性进行进一步的管理。
课后思考:
在Linux系统中,如何给一个用户只赋予某个文件的写权限而不是读权限?请给出相应的命令。
假设文件名为
example.txt,要给username用户只赋予写权限可以使用:
setfacl -m u:username:w example.txt
或者,如果不利用ACL,且该文件不属于任何其他用户的组,可以使用:
chmod o=w example.txt
如果我们想要设置一个目录,使得该目录下新创建的文件或目录自动继承父目录的权限,我们应该如何操作?
- 可以通过设置目录的默认ACL来实现这一需求,命令可能如下:
setfacl -m d:u::rwx,d:g::rwx,d:o::rx /path/to/directory
该命令会给目录设置默认权限,使得属主(u)和属组(g)拥有读写执行权限,其他用户(o)拥有读执行权限。
阐述SUID、SGID和Sticky bit各自在权限管理中的作用是什么?
SUID:设置在可执行文件上,当运行该程序时,程序会临时获得文件属主的权限。
SGID:对于目录,设置此标志会使该目录下所有新创建的文件继承该目录的属组;对于可执行文件,与SUID类似,运行程序时,程序会临时获得文件属组的权限。
Sticky bit:设置在目录上,任何用户都可以在此目录下创建文件,但只有文件的属主和目录的属主(以及root用户)可以删除和修改文件。
umask值为0022时,新创建的文件和目录的默认权限分别是什么?
当umask值为0022时,新创建的文件默认权限是644(rw-r–r–),新创建的目录默认权限是755(rwxr-xr-x)。这是因为文件的起始权限通常是666(rw-rw-rw-),目录的起始权限通常是777(rwxrwxrwx),umask值指定了应当“掩盖”的权限位。