评论

收藏

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

服务系统 服务系统 发布于:2021-06-30 17:04 | 阅读数:496 | 评论:0

第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 查看权限
[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
  例如:
[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
  如下效果图:

DSC0000.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 下
[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: 你以什么用户身份登录,那么你创建的文件或目录,自动成为该文件的所属主和组
[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 的区别?
[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 :递归(目录下的所有内容都更改,否则只修改目录)
  示例:
[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
  一个文件只有读的权限,拥有者是否可以写这个文件
  示例:
[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  扩展:
[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 所有人
[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        | 有全部权限       |

DSC0001.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
[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
[root@Centos83 ~]# vim /etc/profile
  
DSC0002.png

注: UID 大于 199 且用户的组名和用户名一样,那么 umask 值为 002,否则为 022.  注: -gt 在 shell 中表示大于; ,id -gn 显示组名,id -un 显示用户名
id -g 显示用户组 ID ,id -u 显示用户 id
[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 权限补码
[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) ?
[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/    "进制在线转换工具"

DSC0003.png
  
DSC0004.png


DSC0005.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 个特殊权限对应的数值为:
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 属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。

DSC0006.png
[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 文件中的内容,这是什么原因?
[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 用户,所以可以修改成功。
[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
DSC0007.png
[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
DSC0008.png
  SGID:
  限定:既可以给二进制可执行程序设置,也可以给目录设置。
  给二进制可执行程序设置,则运行程序时,临时获得该程序所属组权限
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
  
DSC0009.png

  可以看到运行 less 的用户身份为 user1,可以读取 file2.txt ,是因为临时获取 less 程序的所属组身份,而 file2.txt 所属组与 less 程序所属组相同,且有读权限。

DSC00010.png
  功能:在设置了 SGID 权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。
[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 目录就是这样
[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
  
DSC00011.png
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
  
DSC00012.png
[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': 不允许的操作
  
DSC00013.png

其他用户无法删除,只有文件创建者、目录所有者才能删除
7.2.2 文件扩展权限 ACL

  扩展 ACL :access control list
[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--
  
DSC00014.png
[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 权限会同步到组权限中注:只要增加了扩展权限,这个地址就会有一个 + 加号
  
DSC00015.png

例 2: 给目录加扩展权限
[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 下怎么办?
[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 都无法删除的文件
关注下面的标签,发现更多相似文章