Linux学习之文件特殊权限详解(SetUID、SetGID、Sticky BIT)(十一)
Linux学习之文件特殊权限详解(SetUID、SetGID、Sticky BIT)
目录
1 2 3 | SetUID SetGID Sticky BIT |
SetUID
SetUID简介
1 2 3 4 | 只有可以执行的二进制程序和可执行的代码才能设定SUID权限。 命令执行者要对该程序拥有x(执行)权限。 命令执行者在执行该程序时获得该程序文件所属主的身份(在执行程序的过程中灵魂附体为文件的所属主)。 SetUID权限只在该程序执行过程中有效,也就是说身份改变只在执行过程中有效。 |
这样大家肯定不怎么理解,现在我们来举一个例子,普通用户a在执行某个二进制程序时候,这个二进制程序的所有者是root,如果这个二进制程序拥有SUID权限,
那么普通用户a就会拥有root用户的权限,这样看来,好像一个变身命令。
设定SetUID的方法
1 | 4 代表SUID, 2 代表GID, 1 代表Sticky BIT, 7 代表全部设置 |
1 | chmod 4xxx 文件名 |
取消SetUID的方法
1 | chmod xxx 文件名 |
SetUID权限的危险性
演示
这里应该用一个可执行的程序或文件来演示的,但理解这个权限的作用是什么就好,一般工作也用不上。
创建一个文件夹test
查看test文件夹的默认权限
重新赋予test文件夹权限
再次查看test文件夹的权限,我们可以看到,在所有者的权限后面多了个s,文件名高亮显示,这种文件,在linux中代表危险文件或者错误的文件
如果你想取消这个文件夹的权限
chmod 755 test即可
SetGID
SetGID简介
SetGID对文件和目录有不同的意义,我们只看对文件的作用
1 2 3 4 | SetGID对文件的作用:<br>只有可以执行的二进制程序和可执行的代码才能设定SUID权限。 命令执行者要对该程序拥有x(执行)权限。 命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)。 SetUID权限只在该程序执行过程中有效,也就是说身份改变只在执行过程中有效。 |
由locate命令带来的思考
1 | 我们知道locate命令比find命令更快,这是由于locate命令是在一个数据库中查询,需要定期更新数据库,要不然查询会不准确,但是find命令会扫描整个文件系统,但是更准确。 |
我们可以看到/usr/bin/locate文件的组的权限是有SGID权限。
我们也可以看到普通用户对数据库没有权限的。
那么为什么普通用户也可以访问这个数据库呢?
我们来看一下使用locate命令查询时候的过程。
假设普通用户lamp现在正在使用locate命令
现在我们明白了,lamp在使用locate命令时,从普通用户变为slocate组身份,这个组对数据库是有r权限的。
设置SetGID和取消SetGID权限
1 2 3 | chmod 2xxx 文件名 chmod xxx 文件名 |
Sticky BIT
Sticky BIT的简介
1 | 这个是用来防止如果我们给了一个目录 777 的权限,那么一个用户创建的目录,另一个目录如果不小心就会删除目录,如果你给这个目录设置Sticky BIT权限,这个用户就删除不了一个用户创建的文件。 |
设置粘着位和取消粘着位
1 2 3 | chmod 1xxx 文件名 chmod xxx 文件名 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?