Linux教程

Linux云计算集群架构师->第7章-文件系统基本权限和高级权限管理

本文主要是介绍Linux云计算集群架构师->第7章-文件系统基本权限和高级权限管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# 第7章-文件系统基本权限和高级权限管理 (上课时间2021-06-21,笔记整理时间2021-06-26) **本节所讲内容:** **7.1 文件的基本权限:r w x (UGO)** **7.2 文件的特殊权限:suid sgid sticky 和文件扩展权限 ACL** **7.3 实战:创建一个让 root 都无法删除的文件** ## 7.1 文件的基本权限 ### 7.1.1 权限的作用 通过对文件设定权限可以达到以下三种访问限制权限: 只允许用户自己访问; 允许一个预先指定的用户组中的用户访问; 允许系统中的任何用户访问。 ### 7.1.2 查看权限 ```sh [root@Centos83 ~]# ll /etc/passwd -rw-r--r--. 1 root root 3055 6月 25 10:55 /etc/passwd ``` 文件权限基本解释: 以-rw-r--r--. 1 root root 3055 6月 25 10:55 /etc/passwd 为例: | - | rw- | r-- | r-- | root | root | 3055 | 6月25 10:55 | /etc/passwd | | -------- | ------------ | ------------ | ---------- | ------ | ---- | -------- | ------------ | ----------- | | 文件类型 | 拥有者的权限 | 所属组的权限 | 其它人权限 | 拥有者 | 属组 | 文件大小 | 最后修改日期 | 对象/文件名 | **其中:文件类型,可以为 p、d、l、s、c、b 和 –** **p 表示命名管道文件** **d 表示目录文件** **l 表示符号链接文件** **-表示普通文件** **s 表示 socket 套接口文件,比如我们启用 mysql 时,会产生一个 mysql.sock 文件** **c 表示字符设备文件,例: 虚拟控制台 或 tty0** **b 表示块设备文件 例: sda, cdrom** 例如: ```sh [root@Centos83 ~]# ll /dev/sda /dev/cdrom /etc/passwd /dev/tty0 lrwxrwxrwx. 1 root root 3 6月 24 10:25 /dev/cdrom -> sr0 brw-rw----. 1 root disk 8, 0 6月 24 10:25 /dev/sda crw--w----. 1 root tty 4, 0 6月 24 10:25 /dev/tty0 -rw-r--r--. 1 root root 3055 6月 25 10:55 /etc/passwd ``` 如下效果图: ![image-20210625115059013](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210625115059013.png) ### 7.1.3 权限说明 对于文件来说: **r:读 cat** **w:写 vim echo** **x:执行 运行命名或者脚本** **对于目录来说:** **r:读(看到目录里面有什么) ls** **w:在目录里面建文件,删除,移动 touch mkdir rm mv cp** **x:目录是不能直接运行的,对目录赋予 x 权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令。** ### 7.1.4 文件拥有者 **UGO**:所有者--用户组--其它用户 User-所有者: 就是创建文件的用户,这个用户拥有对它所创建的文件的一切权限,所有者可以允许其所在的用户组可以访问所有者的文件。 **Group**-用户组: 用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组。 **Other**-其它用户:系统内的其他所有者用户就是 other 用户类 ### 7.1.5 常见几种文件权限组成 - rwx --- ---:文件所有者对文件具有读取、写入和执行的权限。 - rwx r-- r--: 文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限。 - rw- rw- r-x:文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。 - drwx--x--x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。 - drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。 **举例如下:** 每个用户都拥有自己的专属目录,通常放置/home 下 ```sh [root@Centos83 ~]# ll /home/ 总用量 4 drwxr-xr-x. 2 root root 6 6月 20 07:56 dx3 drwx------. 3 1001 1001 78 6月 24 19:40 harry drwx------. 3 2002 lenovo 113 6月 24 21:23 lenovo drwx------. 3 oracle oracle 92 6月 24 20:03 oracle drwx------. 3 plume plume 113 6月 24 21:41 plume drwx------. 3 thinkplus thinkplus 92 6月 24 20:18 thinkplus ``` 注: [rwx------]表示目录所有者本身拥有的权限,其它用户是无法进入的。 root 可以。 例 2: 你以什么用户身份登录,那么你创建的文件或目录,自动成为该文件的所属主和组 ```sh [root@Centos83 ~]# useradd user [root@Centos83 ~]# su - user [user@Centos83 ~]$ touch use.txt [user@Centos83 ~]$ ll use.txt -rw-rw-r--. 1 user user 0 6月 25 11:56 use.txt ``` **su - user 和 su user 的区别?** ```sh [root@Centos83 ~]# su - user # 从 root 切换到普通用户 user [user@Centos83 ~]$ pwd /home/user [user@Centos83 ~]$ exit 注销 [root@Centos83 ~]# su user [user@Centos83 root]$ pwd # 查看切完后的路径 /root [user@Centos83 root]$ touch a.txt touch: 无法创建 'a.txt': 权限不够 [user@Centos83 root]$ cd /home/user/ [user@Centos83 ~]$ touch a.txt [user@Centos83 ~]$ exit ``` 注: su - 用户,加上-减号,切换用户时,会把用户家目录和环境变量都彻底切成用 user 的。 不 加-减号,保留切换前的路径和环境变量。 一般切换用户都加减号- 。 ### 7.1.6 更改文件的属主和属组 改变文件的所属关系用到命令: **chown**:可以用来改变文件(或目录)的属主 **chgrp**:可以用来改变文件(或目录)的默认属组(不常用) 如果你要对目录进行操作,加参数 **-R** **chown** 语法: chown user:group filename 比如:chown hr:san a.txt 把文件的属主改为 hr 属组改为san chown user filename 比如:chown san a.txt 把文件的属主改为 san 用户 chown :group filename 比如: chown :miao a.txt 把文件的属组改为 miao 组:也可以用.代替 -R :递归(目录下的所有内容都更改,否则只修改目录) 示例: ```sh [root@Centos83 ~]# touch {a,b,c}.txt [root@Centos83 ~]# ll *.txt -rw-r--r--. 1 root root 2735 6月 25 12:04 a.txt -rw-r--r--. 1 root root 0 6月 25 12:04 b.txt -rw-r--r--. 1 root root 0 6月 25 12:04 c.txt [root@Centos83 ~]# chown user a.txt [root@Centos83 ~]# ll a.txt -rw-r--r--. 1 user root 2735 6月 25 12:04 a.txt [root@Centos83 ~]# chown user:user a.txt [root@Centos83 ~]# ll a.txt -rw-r--r--. 1 user user 2735 6月 25 12:04 a.txt [root@Centos83 ~]# chown :root a.txt [root@Centos83 ~]# ll a.txt -rw-r--r--. 1 user root 2735 6月 25 12:04 a.txt [root@Centos83 ~]# chown .bin a.txt [root@Centos83 ~]# ll a.txt -rw-r--r--. 1 user bin 2735 6月 25 12:04 a.txt ``` **一个文件只有读的权限,拥有者是否可以写这个文件** 示例: ```sh [root@Centos83 ~]# su - user [user@Centos83 ~]$ touch a.txt [user@Centos83 ~]$ ll a.txt -rw-rw-r--. 1 user user 0 6月 25 12:09 a.txt [user@Centos83 ~]$ chmod 000 a.txt #修改成 000 权限 [user@Centos83 ~]$ ll a.txt ----------. 1 user user 0 6月 25 12:09 a.txt [user@Centos83 ~]$ vim a.txt #写入hello, :wq! 强制保存退出 [user@Centos83 ~]$ cat /home/user/a.txt cat: /home/user/a.txt: 权限不够 ``` **注:使用 user1 身份,无法查看 cat /home/user1/a.txt** **实验结果:文件所有者一定可以写文件。 就像 root 可以对 shadow 强制写。 因 shadow 的拥有者是 root** 扩展: ```sh [root@Centos83 ~]# ll /etc/shadow* /etc/passwd* -rw-r--r--. 1 root root 3094 6月 25 11:55 /etc/passwd -rw-r--r--. 1 root root 3055 6月 25 10:55 /etc/passwd- #安装完系统时,会生成 passwd 备份文件。系统安装好后,新增加的用户,不会写到/etc/passwd- ----------. 1 root root 1918 6月 25 11:55 /etc/shadow ----------. 1 root root 1891 6月 25 10:55 /etc/shadow- #安装完系统时,会生成 shadow 备份文件。系统安装好后,新增加用户的密码信息,不会写到/etc/shadow ``` ### 7.1.7 修改权限 方法 1:使用字符设定 修改权限用的命令:chmod 作用:修改文件,目录的权限 语法:chmod [对谁操作] [操作符] [赋于什么权限] 文件名 对谁操作: **u----> 用户 user**,表示文件或目录的所有者 **g---->用户组 group**,表示文件或目录所属的用户组 **o---->其它用户 others** **a---->所有用户 all** 操作符: + ’+‘ 添加权限 ; ‘-’ 减少权限 ; ‘=’ 直接给定一个权限 + 权限:r w x 例如下面的组合: + **u-w user 拥有者** + **g+x group 组** + **o=r other 其他人** + **a+x all 所有人** ```sh [root@Centos83 ~]# ll /home/user/a.txt # a.txt文件已经被去掉了所有权限 ----------. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# chmod u+w /home/user/a.txt # 给a.txt 用户加写权限 [root@Centos83 ~]# ll /home/user/a.txt --w-------. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# chmod g+r /home/user/a.txt # 给 a.txt 组加读权限 [root@Centos83 ~]# chmod a+w /home/user/a.txt # 给 a.txt 所有用户加读权限 [root@Centos83 ~]# ll /home/user/a.txt --w-rw--w-. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# chmod a+x /home/user/a.txt # 给 a.txt 所有用户加执行权限 [root@Centos83 ~]# ll /home/user/a.txt --wxrwx-wx. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# chmod o=r /home/user/a.txt # 给 a.txt 其它用户读权限 = 会覆盖仅限 [root@Centos83 ~]# ll /home/user/a.txt --wxrwxr--. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# [root@Centos83 ~]# chmod a=rwx /home/user/a.txt # 给 a.txt 所有用户写、读、执行权限 [root@Centos83 ~]# ll /home/user/a.txt -rwxrwxrwx. 1 user user 6 6月 25 12:10 /home/user/a.txt ``` ### 7.1.8 使用八进制(0-7)数字表示权限法 | 权限 | 二进制值 | 八进制值 | 描述 | | ---- | -------- | -------- | ---------------- | | --- | 000 | 0 | 没有任何权限 | | --x | 001 | 1 | 只有执行权限 | | -w- | 010 | 2 | 只有写入权限 | | -wx | 011 | 3 | 有写入和执行权限 | | r-- | 100 | 4 | 只有读取权限 | | r-x | 101 | 5 | 有读取和执行权限 | | rw- | 110 | 6 | 有读取和写入权限 | | rwx | 111 | 7 | 有全部权限 | ![image-20210625130021764](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210625130021764.png) 例 1: 互动:rw- 的值是多少 答: 4+2=6 rwx r-x r-x 的值是多少 答: rwx=4+2+1=7 ; r-x=4+1=5 rwx r-x r-x=755 **语法:** **chmod 755 文件或文件夹名字** chmod a=rwx mini.txt 等于 chmod 777 mini.txt ```sh [root@Centos83 ~]# touch mini.txt [root@Centos83 ~]# ll mini.txt -rw-r--r--. 1 root root 2742 6月 20 16:45 mini.txt 6 4 4 [root@Centos83 ~]# chmod 755 mini.txt [root@Centos83 ~]# ll mini.txt -rwxr-xr-x. 1 root root 2742 6月 20 16:45 mini.txt 7 5 1 [root@Centos83 ~]# chmod 700 mini.txt [root@Centos83 ~]# ll mini.txt -rwx------. 1 root root 2742 6月 20 16:45 mini.txt 7 0 0 ``` ### 7.1.9 权限对文件和目录的影响 有三种权限可以应用:读取,写入与执行,这些权限对访问文件和目录的影响如下: 权限 对文件的影响 对目录的影响 r(读取) 可以读取文件的内容 可以列出目录的内容(文件名) w(写入) 可以更改文件的内容 可以创建或删除目录中的任意文件 x(执行) 可以作为命令执行文件 可以访问目录的内容(取决于目录中文件的权限) 扩展:补码 为什么我们创建的文件的权限默认是 644 呢? 我们创建文件的默认权限是怎么来的? umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户) 存在一个相应的 umask 值中的数字 文件默认权限=666 ,目录默认权限=777 我们一般在/etc/profile、$ [HOME]/.bash_profile 或$[HOME]/.profile 中设置 umask 值。 永久生效,编辑用户的配置文件 vim .bash_profile ```sh [root@Centos83 ~]# vim /etc/profile ``` ![image-20210625130558582](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210625130558582.png) **注: UID 大于 199 且用户的组名和用户名一样,那么 umask 值为 002,否则为 022.** **注: -gt 在 shell 中表示大于; ,id -gn 显示组名,id -un 显示用户名** **id -g 显示用户组 ID ,id -u 显示用户 id** ```sh [root@Centos83 ~]# touch aaa [root@Centos83 ~]# ll aaa -rw-r--r--. 1 root root 0 6月 26 09:56 aaa 6 4 4 # 666-022=644 [root@Centos83 ~]# su - user [user@Centos83 ~]$ touch aaa [user@Centos83 ~]$ ll aaa -rw-rw-r--. 1 user user 0 6月 26 09:56 aaa 6 6 4 # 666-002= 664 [user@Centos83 ~]$ mkdir dir [user@Centos83 ~]$ ll -d dir drwxrwxr-x. 2 user user 6 6月 26 09:57 dir 7 7 5 # 777-002=775 ``` 临时生效: umask 权限补码 ```sh [user@Centos83 ~]$ umask 044 [user@Centos83 ~]$ touch yh.txt [user@Centos83 ~]$ ll yh.txt -rw--w--w-. 1 user user 0 6月 26 10:03 yh.txt 6 2 2 # 文件默认权限=666 , 666-044=622 ``` #权限的算法:一般情况是:目录默认权限-umask 值 666-022文件默认权限=666=644 目录默认权限=777-022=755 #这是一个好的记忆方法,但不严谨。 **umask 掩码为 033 创建普通文件后,权限是什么? 666-033=633 ( rw- -wx -wx) ?** ```sh [user@Centos83 ~]$ umask 033 [user@Centos83 ~]$ touch mk.txt [user@Centos83 ~]$ ll mk.txt -rw-r--r--. 1 user user 0 6月 26 10:07 mk.txt 6 4 4 #答:结果为: 644 ``` 权限科学的计算方法步骤: **1、将默认权限(目录 777,文件 666)和 umask 值都转换为 2 进制** **2、对 umask 取反** **3、将默认权限和 umask 取反后的值做与运算** **4、将得到的二进制值再转换 8 进制,即为权限,** https://tool.lu/hexconvert [进制在线转换工具]: https://tool.lu/hexconvert/ "进制在线转换工具" ![image-20210626104540452](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626104540452.png) ![image-20210626115757699](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626115757699.png) ![image-20210626121510194](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626121510194.png) 例 1: umask 为 022 **6 6 6 umask 0 2 2** 110 110 110 000 010 010 # 默认权限和 umask 都转成二进制 111 101 101 # umask 取反的值 110 110 110 与 #第二步,默认权限二进制值和 umask 二进制值取反后做与运算 111 101 101 # umask 取反的值 110 100 100 #与运算,都为 1 的为 1,否则为 0 6 4 4 #转成 8 进制 例 2: umask 为 033 结果为: 644 **6 6 6 umask 0 3 3** 110 110 110 000 011 011 # 转成二进制 111 100 100 # umask 取反的值 110 110 110 与 #第二步,默认权限二进制值和 umask 二进制值取反后做与运算 111 100 100 # umask 取反的值 110 100 100 #与运算,都为 1 的为 1,否则为 0 6 4 4 #转成 8 进制 ## 7.2 文件的特殊权限:suid sgid sticky 和文件扩展权限 ACL **其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”.** ### 7.2.1 文件的特殊权限:suid sgid sticky 1、SUID(set uid 设置用户 ID):限定:只能设置在二进制可执行程序上面。对目录设置无效功能:程序运行时的权限从执行者变更成程序所有者的权限。 2、SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置 功能:在设置了 SGID 权限的目录下建立文件时,新创建的文件的所属组会,继承上级目录的所属组 3、Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位 这 3 个特殊权限对应的数值为: ```sh SUID SGID Stickybit 4 2 1 chmod u+s chmod g+s chmod o+t chmod 4664 chmod 2664 chmod 1664 ``` suid 的代表数字是 4,比如 4755 的结果是 rwsr-xr-x sgid 的代表数字是 2,比如 2755 的结果是 rwxr-sr-x sticky 位代表数字是 1,比如 1755 的结果是 rwxr-xr-t suid+sgid+sticky=7 ,比如 7755 的结果是 rwsr-sr-t SUID 属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。 ![image-20210626130936378](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626130936378.png) ```sh [user@Centos83 ~]$ ll /usr/bin/passwd # passwd 命令有 suid 权限 -rwsr-xr-x. 1 root root 33600 4月 7 2020 /usr/bin/passwd ``` **普通用户 user1,没有对 shadow 文件写入的权限, 但是 user1 用户使用 passwd 修改自己密码时,可以修改 shadow 文件中的内容,这是什么原因?** ```sh [root@xuegod63 ~]# ll /etc/shadow # 普通用户对/etc/shadow是没有读写权限的 ----------. 1 root root 1918 6月 25 11:55 /etc/shadow [root@Centos83 ~]# echo 123456 | passwd --stdin user # 免交互更改 user1 密码为 123456 更改用户 user 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@Centos83 ~]# tail -5 /etc/shadow | grep user # 查看下密码 user:$6$zvkiwpKFRisB3ul9$iWFfbpKKjK3DhNzTVxZUlXC6k1hOgbtj2h.wDiOx4WAJxfMR3IPw4LybGTXQIp.e62043lbWgDQMduhYQTBiZ.:18804:0:99999:7::: [root@Centos83 ~]# su - user # 切换到user用户 [user@Centos83 ~]$ passwd # 更改user用户密码 更改用户 user 的密码 。 Current password: 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [user@Centos83 ~]$ exit # 退出user用户 注销 [root@Centos83 ~]# tail -5 /etc/shadow | grep user # 查看下密码 user:$6$Jb3cw59/duG2L0Jl$Znrd3QFYBq/XV0vdvFxuTiNSeFDcj7gLcQGHpLSNfi8nakWhbEsB5leXEfKWrx1X.G5mR1kMkUgAKmvfewTDq/:18804:0:99999:7::: # 查看shadow文件已经被user用户修改成功 ``` **因为 user1 用户执行 passwd 命令时,权限会提升成 root 用户,所以可以修改成功。** ```sh [root@Centos83 ~]# useradd mark # 创建用户 mark [root@Centos83 ~]# echo 123456 | passwd --stdin mark # 免交互更改 mark 密码为 123456 更改用户 mark 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@Centos83 ~]# su - mark # 切换用户到用户 mark [mark@Centos83 ~]$ less /etc/shadow # 查看 /etc/shadow 文件 /etc/shadow: 权限不够 [mark@Centos83 ~]$ su - root # 切换到 root 用户 密码: [root@Centos83 ~]# chmod u+s /usr/bin/less # 给less 命令加用户读权限 [root@Centos83 ~]# su - mark # 切换用户到用户 mark [mark@Centos83 ~]$ less /etc/shadow #看到了 shadow 内容,不要按 q 退出进程新开 shell 窗口查看 u+s 后的效果: [root@Centos83 ~]# ps aux | egrep 'less|USER'| grep -v grep USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 6667 0.0 0.2 9888 2152 pts/0 S+ 13:46 0:00 less /etc/shadow [root@Centos83 ~]# w 13:48:20 up 6:04, 2 users, load average: 0.07, 0.02, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.170.80.200 09:56 2:12 1.17s 0.00s less /etc/shadow root pts/1 10.170.80.200 13:46 1.00s 0.23s 0.08s w ``` ![image-20210626135043416](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626135043416.png) ```sh [root@Centos83 ~]# ll /usr/bin/less -rwsr-xr-x. 1 root root 192040 5月 11 2019 /usr/bin/less [root@Centos83 ~]# chmod 4755 /usr/bin/less # 等同于 chmod u+s /usr/bin/less [root@Centos83 ~]# ll /usr/bin/less -rwsr-xr-x. 1 root root 192040 5月 11 2019 /usr/bin/less [root@Centos83 ~]# chmod u-s /usr/bin/less # 去掉 less 命令的 suid 权限 [root@Centos83 ~]# ll /usr/bin/less -rwxr-xr-x. 1 root root 192040 5月 11 2019 /usr/bin/less ``` ![image-20210626135644422](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626135644422.png) SGID: 限定:既可以给二进制可执行程序设置,也可以给目录设置。 给二进制可执行程序设置,则运行程序时,临时获得该程序所属组权限 ```sh root@Centos83 ~]# echo hello Linux > file.txt # 添加hello Linux内容,创建file.txt [root@Centos83 ~]# less /root/file.txt [root@Centos83 ~]# ll file.txt #查看到 file.txt 文件所属组为 root,且所属组有读权限 -rw-r--r--. 1 root root 12 6月 26 17:02 file.txt [root@Centos83 ~]# su - user #切换到 user 用户 [user@Centos83 ~]$ less /root/file.txt #查看 file2.txt ,权限不足,已去掉了 suid 权限 /root/file.txt: 权限不够 [user@Centos83 ~]$ exit 注销 [root@Centos83 ~]# chmod u-s,g+s /usr/bin/less #去掉 less 的 suid 权限,增加 sgid 权限 [root@Centos83 ~]# ll /usr/bin/less #查看 less 所属组为 root -rwxr-sr-x. 1 root root 192040 5月 11 2019 /usr/bin/less [root@Centos83 ~]# su - user [user@Centos83 ~]$ less /root/file.txt #已经有权限了,不要按 q 退出进程,新开 shell 查看 [root@xuegod63 ~]# ps aux | egrep 'USER|less' | grep -v grep USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND user 8572 0.0 0.2 9888 2124 pts/1 S+ 17:12 0:00 less /root/file.txt ``` ![image-20210626171340098](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626171340098.png) 可以看到运行 less 的用户身份为 user1,可以读取 file2.txt ,是因为临时获取 less 程序的所属组身份,而 file2.txt 所属组与 less 程序所属组相同,且有读权限。 ![image-20210626171534444](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626171534444.png) 功能:在设置了 SGID 权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。 ```sh [root@Centos83 ~]# mkdir test [root@Centos83 ~]# ll -d test drwxr-xr-x. 2 root root 6 6月 26 17:16 test [root@Centos83 ~]# chmod g+s test/ [root@Centos83 ~]# ll -d test drwxr-sr-x. 2 root root 6 6月 26 17:16 test # 测试:sgid 效果 [root@Centos83 ~]# chown :bin test/ [root@Centos83 ~]# touch test/test.txt [root@Centos83 ~]# ll !$ # !$代表得是上一条命令中最后一个参数,快捷键是 esc 加.ll test/test.txt ll test/test.txt -rw-r--r--. 1 root bin 0 6月 26 17:17 test/test.txt ``` **Stickybit** 限定:只作用于目录 功能:目录下创建的文件只有 root、文件创建者、目录所有者才能删除。 例: 系统中的 tmp 目录就是这样 ```sh [root@Centos83 ~]# ll -d /tmp/ drwxrwxrwt. 24 root root 4096 6月 26 17:20 /tmp/ #用法: chmod o+t /tmp [root@Centos83 ~]# mkdir /test/ [root@Centos83 ~]# ll -d /test ``` ![image-20210626172605041](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626172605041.png) ```sh drwxr-xr-x. 2 root root 6 6月 26 17:22 /test [root@Centos83 ~]# chmod 1777 /test [root@Centos83 ~]# ll -d /test/ drwxrwxrwt. 2 root root 6 6月 26 17:22 /test/ [root@Centos83 ~]# [root@Centos83 ~]# su - user [user@Centos83 ~]$ echo user > /test/user.txt [user@Centos83 ~]$ chmod o+rw /test/user.txt [user@Centos83 ~]$ ll /test/user.txt -rw-rw-rw-. 1 user user 5 6月 26 17:23 /test/user.txt ``` ![image-20210626172644235](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626172644235.png) ```sh [think@Centos83 ~]$ echo hello think >/test/user.txt [think@Centos83 ~]$ cat /test/user.txt hello think [think@Centos83 ~]$ rm -rf /test/user.txt rm: 无法删除'/test/user.txt': 不允许的操作 ``` ![image-20210626173656901](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626173656901.png) **其他用户无法删除,只有文件创建者、目录所有者才能删除** ### 7.2.2 文件扩展权限 ACL **扩展 ACL :access control list** ```sh [root@Centos83 ~]# touch /opt/test.txt [root@Centos83 ~]# ll /opt/test.txt -rw-r--r--. 1 root root 0 6月 26 17:38 /opt/test.txt #设置只让用户 user1 对文件 a.txt 拥有的 rwx 权限 ,user1 不属于 a.txt 的所属主,和组,other 的权限还是 r--。 [root@Centos83 ~]# id user uid=2006(user) gid=2006(user) 组=2006(user) [root@Centos83 ~]# getfacl /opt/test.txt getfacl: Removing leading '/' from absolute path names # file: opt/test.txt # owner: root # group: root user::rw- group::r-- other::r-- [root@Centos83 ~]# setfacl -m u:user:rwx /opt/test.txt [root@Centos83 ~]# setfacl -m u:think:rwx /opt/test.txt -m, --modify=acl 更改文件的访问控制列表 [root@Centos83 ~]# getfacl /opt/test.txt getfacl: Removing leading '/' from absolute path names # file: opt/test.txt # owner: root # group: root user::rw- user:think:rwx user:user:rwx group::r-- mask::rwx other::r-- ``` ![image-20210626174338833](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626174338833.png) ```sh [root@Centos83 ~]# su - user [user@Centos83 ~]$ vim /opt/test.txt [user@Centos83 ~]$ ll /opt/test.txt -rw-rwxr--+ 1 root root 12 6月 26 17:44 /opt/test.txt #setfacl 权限会同步到组权限中注:只要增加了扩展权限,这个地址就会有一个 + 加号 ``` ![image-20210626174555561](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626174555561.png) **例 2: 给目录加扩展权限** ```sh [root@Centos83 ~]# mkdir /opt/test [root@Centos83 ~]# setfacl -m d:u:user:rwx /opt/test #d 默认在就是有这个权限 [root@Centos83 ~]# setfacl -R -m u:user:rw- /opt/test #-R 一定要在-m 前面,表示目录下所有文件 -R, --recursive 递归操作子目录 [root@Centos83 ~]# setfacl -x u:user /opt/test.txt # 去掉单个权限 [root@Centos83 ~]# getfacl /opt/test.txt getfacl: Removing leading '/' from absolute path names # file: opt/test.txt # owner: root # group: root user::rw- user:think:rwx group::r-- mask::rwx other::r-- [root@Centos83 ~]# setfacl -b /opt/test.txt # 去掉所有 acl 权限 ``` ## 7.3 实战:创建一个让 root 都无法删除的文件 发现 windows 中 有文件删除不了,怎么办? 使用 360 强制删除,粉碎文件。那么在 Linux 下怎么办? ```sh [root@Centos83 ~]# touch hack.sh aa.sh # 创建两个文件 [root@Centos83 ~]# ll hack.sh aa.sh # 查看文件 -rw-r--r--. 1 root root 0 6月 26 17:53 aa.sh -rw-r--r--. 1 root root 0 6月 26 17:53 hack.sh [root@Centos83 ~]# rm -rf aa.sh # 可以删除其中一个文件 [root@Centos83 ~]# chattr +i hack.sh # 给另一个文件 加只读属性 [root@Centos83 ~]# rm -rf hack.sh # 删除时发现无法删除 rm: 无法删除'hack.sh': 不允许的操作 [root@Centos83 ~]# ll hack.sh # 用 ll 命令也看不到任何异常 -rw-r--r--. 1 root root 0 6月 26 17:53 hack.sh [root@Centos83 ~]# lsattr hack.sh # 用 lsattr 命令可以查看到文件属性 ----i--------------- hack.sh ``` 从 REHL6 开始,新增加文件系统扩展属性: **命令:chattr** **参数: a 只能追加内容 ; i 不能被修改** **+a: 只能追加内容 如: echo aaa >> hack.sh** **+i:即 Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的** **进程只能修改目录之下的文件,不允许建立和删除文件。** **注:immutable [ɪˈmju:təbl] 不可改变的 ; Append [əˈpend] 追加** **-i :移除 i 参数。 -a :移除 a 参数** **总结:** **7.1 文件的基本权限:r w x (UGO)** **7.2 文件的特殊权限:suid sgid sticky 和文件扩展权限 ACL** **7.3 实战:创建一个让 root 都无法删除的文件**
这篇关于Linux云计算集群架构师->第7章-文件系统基本权限和高级权限管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!