当前位置 : 主页 > 操作系统 > centos >

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

来源:互联网 收集:自由互联 发布时间:2022-09-29
第七章-文件系统基本权限和高级权限管理 (上课时间2021-06-21,笔记整理时间2021-06-26) 本节所讲内容: 7.1 文件的基本权限:r w x (UGO) 7.2 文件的特殊权限:suid sgid sticky 和文件扩展权限

第七章-文件系统基本权限和高级权限管理

(上课时间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

如下效果图:

image-20210625115059013

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 没有任何权限 --x 001 1 只有执行权限 -w- 010 2 只有写入权限 -wx 011 3 有写入和执行权限 r-- 100 4 只有读取权限 r-x 101 5 有读取和执行权限 rw- 110 6 有读取和写入权限 rwx 111 7 有全部权限

image-20210625130021764

例 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

image-20210625130558582

注: 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

image-20210626104540452

image-20210626115757699

image-20210626121510194

例 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 属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。

image-20210626130936378

[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

image-20210626135043416

[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

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

image-20210626171340098

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

image-20210626171534444

功能:在设置了 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

image-20210626172605041

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

[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

其他用户无法删除,只有文件创建者、目录所有者才能删除

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--

image-20210626174338833

[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

例 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 都无法删除的文件

网友评论