Linux文件特殊权限-SUID、SGID、SBIT、chattr
1、权限s-SUID
1.1、SUID使用背景
在Linux系统中,每个普通用户都可以更改自己的密码,这是合理的设置﹔ 但是用户的密码信息存储在/etc/shadow文件中,普通用户在更改自己密码时会更新/etc/shadow文件的内容。 但/etc/shadow文件不允许任何人修改?那为什么普通用户可以修改自己的权限呢? [root@linux ~]# ll /etc/shadow ---------- 1 root root 725 Apr 20 11:03 /etc/shadow
# 这里是没有任何权限的 [root@linux ~]# ll /bin/passwd -rwsr-xr-x. 1 root root 27856 Apr 1 2020 /bin/passwd # 这里可以看到所属主,执行权限那里是s 其实,普通用户可以修改自己的密码在于passwd命令本身, 该命令拥有特殊权限setUID也就是在属主的权限位的执行权限上是s那如何理解特殊权限SetuID:当一个执行文件设置SetuID后,用户在执行这个文件时将以文件所有者的身份来执行。
1.2、SUID解析
1.2.1、SUID流程图
1.2.2、流程图解析
当我们使用普通用户lamp执行passwd命令会发生什么变化呢? 1、由于passwd命令拥有suid特殊权限;(在命令属主权限位执行权限位置有一个s) [root@linux ~]# ll /bin/passwd -rwsr-xr-x. 1 root root 27856 Apr 1 2020 /bin/passwd 2、所以 passwd命令在执行的过程中,会以命令的属主身份运行该命令;(也是root身份,并且拥有读、写、执权限) 3、总结: lamp --> passwd -->转换为命令属主身份root执行并且获取属主的权限 --> 操作/etc/shadow信息变更;
1.3、示例
1.3.1、设置suid权限
chmod 4755 /usr/bin/cat chmod u+s /usr/bin/cat [root@linux ~]# ll /usr/bin/cat -rwsr-xr-x. 1 root root 54080 Aug 20 2019 /usr/bin/cat
1.3.2、删除suid权限
chmod 0755 /usr/bin/cat chmod u-s /usr/bin/cat
2、权限s-SGID
2.1、什么是SGID
1、设置二进制可执行文件,命令在执行的过程中,会以命令的属组身份运行该命令。
2、设置在目录上,这时候在该目录下新建的文件/目录自动继承父目录的属组
2.2、SGID语法
chmod g+s /dir chmod 2755 /dir
2.3、示例
2.3.1、需求
系统有两个用户,分别为ex1 与ex2,这两个用户都拥有example附加组;
1、这两个用户需要共同拥有/mnt/code目录的开发权; 2、互相之间能修改彼此的文件,且该目录不允许其他人进入查阅;
2.3.2、创建用户和组
groupadd example useradd ex1 -G example useradd ex2 -G example
2.3.3、设置所属组
mkdir /mnt/code chgrp example /mnt/code
[root@linux ~]# ll /mnt/ drwxr-xr-x 2 root example 6 Apr 20 13:15 code
2.3.4、设置权限和sgip权限
chmod 770 /mnt/code chmod g+s /mnt/code chmod 2770 /mnt/code
2.3.5、测试
su - ex1 cd /mnt/code/ && touch ex1.txt [ex1@linux code]$ ll -rw-rw-r-- 1 ex1 example 0 Apr 20 13:21 ex1.txt su - ex2 cd /mnt/code && touch ex2.txt linux code]$ ll -rw-rw-r-- 1 ex1 example 0 Apr 20 13:21 ex1.txt -rw-rw-r-- 1 ex2 example 0 Apr 20 13:21 ex2.txt
3、权限w-SBIT
3.1、什么是SBIT
一旦目录被赋予了粘滞位Sticky(SI TI KI)除了root可以删除目录中的所有文件,普通用户对该目录就算拥有w权限,也只能删除自己建立的文件,而不能删除其他用户建立的文件。
3.2、语法
# 其它,没有任何权限,就是大写T [root@linux ~]# chmod o+t /mnt/code、 [root@linux ~]# ll /mnt/ drwxrws--T 2 root example 36 Apr 20 13:21 code # 其它,有权限就是小写t [root@linux ~]# chmod 1755 /mnt/code [root@linux ~]# ll /mnt/ drwxr-sr-t 2 root example 36 Apr 20 13:21 code
3.3、小结
[ex1@linux code]$ ll -rwxrwx--T 1 ex1 example 0 Apr 20 13:21 ex1.txt -rwxrwx--T 1 ex2 example 0 Apr 20 13:21 ex2.txt
[ex1@linux code]$ rm -f ex1.txt # 删除自己是可以的 [ex1@linux code]$ rm -f ex2.txt # 删除别用户的文件,不允许删除 rm: cannot remove ‘ex2.txt’: Operation not permitted
4、chattr
4.1、场景
1)、创建一个文件,不允许被修改、移动、删除,包括root也不行 --> 适合/etc/passwd。 2)、创建一个文件,仅允许往文件里面追加数据,不允许修改、移动、删除。--> 适合sudo审计日志。
4.2、命令介绍
Linux系统通过chattr来实现特殊属性的配置命令格式: chattr [+-=] [选项] 文件或目录名
+ 增加权限
- 删除权限 a : 可对文件进行追加内容; i : 锁定文件,不允许其他操作;
4.3、示例
4.3.1、配置/etc/passwd文件,不能改,不能追加,不能删除。
# 上锁
chattr +i /etc/passwd [root@linux ~]# rm -f /etc/passwd rm: cannot remove ‘/etc/passwd’: Operation not permitted
# 解锁
chattr -i /etc/passwd
4.3.2、配置/var/log/secure文件,只能追加写入日志,不允许手动修改,也不允许删除。
# 增加只能追加不能删除的权限 [root@linux ~]# chattr +a /var/log/secure # 查询权限 [root@linux ~]# lsattr /var/log/secure -----a---------- /var/log/secure # 可以追加数据 echo "test" >>/var/log/secure echo "test" >>/var/log/secure # 不能删除 [root@linux ~]# rm -f /var/log/secure rm: cannot remove ‘/var/log/secure’: Operation not permitted
4.4、遇到病毒修改数据的时候处理方法
4.4.1、模拟病毒脚本
tmp]# cat >test.sh<<'EOF' #!/bin/bash web_site=/tmp/index.html while true do echo "我是写入恶意数据" >${web_site} sleep 2 done
EOF
sh test.sh
4.4.2、增加锁定文件
tmp]# chattr +i index.html
4.4.3、此时就无法写入数据修改文件
tmp]# sh test.sh test.sh: line 5: /tmp/index.html: Permission denied test.sh: line 5: /tmp/index.html: Permission denied test.sh: line 5: /tmp/index.html: Permission denied test.sh: line 5: /tmp/index.html: Permission denied
4.4.4、然后kill掉病毒进程
kill $( ps -ef | grep test.sh | grep -v grep | awk '{print$2}')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具