linux中chattr、suid、sgid、stick详解

作者qq208555366

文件属性 chattr

chattr命令详解

有两个命令lsattr和charrt用来管理属性接下来我列举chattr的不同参数,
属性 描述
a 允许在文件中进行追加操作
A 不允许更新文件的访问时间
c 文件在磁盘上自动压缩
d 不能用dump命令备份文件
D 更改会同步保存在磁盘上
E 该文件使用磁盘上的块的映射扩展
I 不能更改、重命名、删除文件
J 文件首先保存在日志中,然后再写入文件
S 变更或更改同步保存到磁盘上
可以使用的不同选项
-R 递归的方式修改文件夹和子文件夹的属性
-V Chattr命令会输出带有版本信息的冗余信息
-f 忽略大部分错误信息

我们用一个案例来演示一下linux系统中chattr属性的作用,
首先我们创建新文件file10来查看一下这个文件的默认权限,
linux中chattr、suid、sgid、stick详解_第1张图片

再给该文件加入不能删除的属性,再查看文件属性的变化,发现已经添加上了i属性
linux中chattr、suid、sgid、stick详解_第2张图片

然后尝试删除,看该文件不能被删除,
在这里插入图片描述

测试完成后,将属性给还原。正常删除。

在这里插入图片描述

特殊位suid用户

Suid是针对文件或程序,设置后临时具有属主的权限,
首先我们用alice用户访问/root/file1.txt是访问不了的
linux中chattr、suid、sgid、stick详解_第3张图片

然后我们给cat程序添加上suid权限,截图中已经看出,用户权限多了一个s,此时已经给该程序加上了suid权限。
linux中chattr、suid、sgid、stick详解_第4张图片

接下来我们用普通用户试验,
linux中chattr、suid、sgid、stick详解_第5张图片

我们发现已经可以打开该文件,完成后去除该权限。

在这里插入图片描述

sgid权限

sgid权限可以使文件自动继承父目录的属组,

废话不多说 直接上操作。
首先我们创建一个dir888的文件夹,查看文件夹的属性,

[root@localhost ~]# mkdir /tmp/dir888
[root@localhost ~]# ls -l /tmp/dir888 -d
drwxr-xr-x 2 root root 6 7月  28 20:11 /tmp/dir888

我们给该文件夹加入到jishuzu的组内,并且给文件夹的属组写入权限

[root@localhost ~]# chown .jishuzu /tmp/dir888
[root@localhost ~]# ls -l /tmp/dir888 -d
drwxr-xr-x 2 root jishuzu 6 7月  28 20:11 /tmp/dir888
[root@localhost ~]# chmod g+w /tmp/dir888

查看更改属组和权限后的属性

[root@localhost ~]# ls -l /tmp/dir888 -d
drwxrwxr-x 2 root jishuzu 6 7月  28 20:11 /tmp/dir888

重点!给dir888加入sgid权限,并且查看属性 属组的权限已经变为“rws”说明已经成功加入sgid权限。

[root@localhost ~]# chmod g+s /tmp/dir888
	[root@localhost ~]# ls -l /tmp/dir888 -d
	drwxrwsr-x 2 root jishuzu 6 7月  28 20:11 /tmp/dir888

然后,来验证sgid的效果,我们在dir888文件夹内新建root1.txt文件,
查看该文件的属性,属组本该位root,但此时它的属组为jishuzu,说明sgid起了作用,自动继承父目录的属组,本次实验到此结束。

[root@localhost ~]# touch /tmp/dir888/root1.txt
[root@localhost ~]# ls -l /tmp/dir888/root1.txt
-rw-r--r-- 1 root jishuzu 0 7月  28 20:14 /tmp/dir888/root1.txt

stick权限

stick权限只有对目录有效果,给该目录添加了stick权限的话,该文件夹内创建的文件或文件夹,只有创建者本人和超级管理员root可以删除。

stick权限语法 : chmod o +/- t 文件夹名
废话不多说 操作。
首先在根目录下创建a6l文件夹,并给文件夹777权限,

[root@localhost ~]# mkdir /a6l
	[root@localhost ~]# chmod 777 /a6l
	[root@localhost ~]# ll /a6l/ -d
	drwxrwxrwx 2 root root 6 7月  28 20:41 /a6l/

给文件夹加上stick权限,原本其他用户的最后x变成了t,说明已经设置好了stick权限。

[root@localhost ~]# chmod o+t /a6l
[root@localhost ~]# ll /a6l/ -d
drwxrwxrwt 2 root root 6 7月  28 20:41 /a6l/
	

我们创建用户a和用户b并设置密码,
我们登录a用户创建五个文件

[root@localhost ~]# su - a
上一次登录:二 7月 28 20:44:56 CST 2020pts/1 上
[a@localhost ~]$ touch /a6l/kuaishanwo
[a@localhost ~]$ touch /a6l/kuaishanwo1
[a@localhost ~]$ touch /a6l/kuaishanwo2
[a@localhost ~]$ touch /a6l/kuaishanwo3
[a@localhost ~]$ touch /a6l/kuaishanwo4

然后登录用户b尝试删除刚才创建的文件,提示不允许操作。无法删除。

[a@localhost ~]$ su – b
[b@localhost ~]$ rm -rf /a6l/kuaishanwo4
rm: 无法删除"/a6l/kuaishanwo4": 不允许的操作
[b@localhost ~]$ rm -rf /a6l/kuaishanwo3
rm: 无法删除"/a6l/kuaishanwo3": 不允许的操作
[b@localhost ~]$ rm -rf /a6l/kuaishanwo2
rm: 无法删除"/a6l/kuaishanwo2": 不允许的操作
[b@localhost ~]$ rm -rf /a6l/kuaishanwo1
rm: 无法删除"/a6l/kuaishanwo1": 不允许的操作
[b@localhost ~]$ rm -rf /a6l/kuaishanwo
rm: 无法删除"/a6l/kuaishanwo": 不允许的操作

然后我们继续切换到a用户,自己创建的文件自己成功删除。

[a@localhost ~]$ ls
kuaishanwo   kuaishanwo2  kuaishanwo4
kuaishanwo1  kuaishanwo3
[a@localhost ~]$ rm -rf /a6l/kuaishanwo
[a@localhost ~]$ rm -rf /a6l/kuaishanwo1
[a@localhost ~]$ ll /a6l
总用量 0
-rw-rw-r-- 1 a a 0 7月  28 20:49 kuaishanwo2
-rw-rw-r-- 1 a a 0 7月  28 20:49 kuaishanwo3
-rw-rw-r-- 1 a a 0 7月  28 20:49 kuaishanwo4

然后我们进入root用户,删除这三个文件,再查看,已经删干净了。

[root@localhost ~]# ll /a6l
总用量 0
-rw-rw-r-- 1 a a 0 7月  28 20:49 kuaishanwo2
-rw-rw-r-- 1 a a 0 7月  28 20:49 kuaishanwo3
-rw-rw-r-- 1 a a 0 7月  28 20:49 kuaishanwo4
[root@localhost ~]# rm -rf /a6l/kuaishanwo2
[root@localhost ~]# rm -rf /a6l/kuaishanwo3
[root@localhost ~]# rm -rf /a6l/kuaishanwo4
[root@localhost ~]# ll /a6l
总用量 0

奋斗!

你可能感兴趣的:(linux中chattr、suid、sgid、stick详解)