Linux特殊权限之suid、sgid、sbit权限

老实说,Linux 特殊权限实际上很有趣,尤其是了解如何使用它们以及如何避免陷阱。
当时我是做运维的,差点因为请求许可出了大问题。

先说suid,这个东西很强。
我记得是系统出问题了。
经过一番查找,我发现这个小套件被改动了。
那一刻我的双手颤抖起来,我对某位行政人员提起了起诉。
结果他直接一指令改了系统文件——幸亏我及时发现。
这就是为什么人们说suid是一把双刃剑。
用得好会省事,但如果不用的话,系统几分钟就会崩溃。
然后我给团队定了一条规则:所有需要suid的命令都必须写入sudoers文件中,不能直接改变文件权限。
像 passwd 这样的核心命令可以在没有 suid 的情况下使用。

关于sgid权限,当时我在开发环境中用得最多。
有一个项目想要共享开发文件,但又不想随意更改别人的代码,所以在项目目录下添加了sgid。
结果发现一个新手忘记了 sgid,导致他创建的文件位于错误的组中。
最终,整个团队的代码混合在一起,并且在很长一段时间内发生了变化。
因此,sgid的本质在于,它不仅可以保证文件组属于同一个组,而且可以防止某些情况下的误操作。
后来我发现将git的工作树功能与sgid结合使用可以避免很多麻烦。

最后我们来谈谈sbit权限。
我遇到的最少,但它确实很有帮助。
我记得有一个客户端服务器有很多用户,但是一个用户删除了其他人的所有临时文件。
然后我向临时文件夹添加了一个 sbit,问题立即得到解决。
老实说,sbit 就像文件夹的保镖。
它只关心它的人民。
外人如果想要接触文件,就会查看看门狗。
但请注意,sbit 与 sgid 类似,很容易被误解。
有朋友还问我,为什么在他的垃圾文件夹中添加了sbit后,其他人仍然可以删除该文件——后来我了解到,他使用ln -s命令创建了一个软链接,而该软链接并不关心sbit。

一般来说,这些特殊权限如果使用得当,是生产力工具,但如果使用不当,它们就会成为定时炸弹。
我最近在为我的公司进行安全审计,发现许多旧系统仍然保留着 2 0 世纪 9 0 年代遗留下来的 suid 命令。
那时他们很方便,但现在却似乎隐藏着危险。
因此,新项目不要随意开放特殊权限。
如果可以用 ACL 和 chown 解决,那么就不要使用 suid。
sgid和sbit相对安全,但是也要看情况。
例如,使用suid代替替换需要 root 访问权限的操作并使用 sudo 以实现更加标准化;使用sgid保证团队协作,但不要给不该授予权限的人授予权限; sbit 是为文件夹保留的,尤其是公共文件夹。

Linux特殊权限之suid、sgid、sbit权限

上星期。
学习Linux。

suid特别许可。

文件。
实施它。

证据。
改变。

根权限。
有风险。

sgid 特殊权限。

组权限。
文件夹。

创建文件。
遗产。

辣。
黏。

目录。
共享
文件。
删除
个人文件。
你可以吗?
其他人的文件。
无法系统。
安全。

小心点。
使用。

Linux特殊权限 SUID、SGID、Sticky

说实话,这三个权利比较混乱,但分解下来就很好办了。

SUID 仅对二进制可执行程序有用。
例如,如果您的游戏需要管理员权限才能加载资源,则设置 SUID。
但请注意,常规文件肯定不起作用。
比如你下载了一个文档,设置SUID就没用了。
再比如,发起者必须能够执行程序。
如果您甚至无法打开它,那么该权限就没用了。
重要的是,一旦程序运行,它的身份就成为文件的所有者。
例如,如果程序是张三写的,你使用SUID运行它,那么在运行时系统会认为你是张三。
为目录设置 SUID 是没有意义的。
尝试一下,确实没有什么帮助。

SGID,这个比较灵活,可以用于二进制文件和目录。
对于二进制文件来说,这个功能和SUID类似,也是增加权限。
但有一个区别。
您不再是文件的所有者,而是成为包含该文件的组。
例如,如果程序是属于“开发组”的张三编写的,并且您使用SGID运行该程序,则在运行过程中系统将表现得就像您是“开发组”的成员一样。
为文件夹设置SGID 是非常有趣的。
默认情况下,您在此文件夹中创建的文件将属于该文件夹的组。
例如,如果有一个属于“项目组”的项目文件夹,您设置了SGID,并且您和团队中的其他人向其中写入文件,则文件将自动属于“项目组”,而无需每次都指定它。
特别适合小组协作。

粘性,这仅对文件夹有用,对文件设置无效。
防止有人意外删除他人的文件。
想象一下,有一个公共下载目录,每个人都有写权限。
如果没有粘性权限,任何人都可以删除其他人的文件。
太混乱了。
设置粘性权限后,只有文件的所有者或根用户才能删除它。
例如,如果您上传文件,则只有您可以删除该文件,其他人无法删除。
常用于公共下载和临时文件。

一般来说,SUID允许程序在运行时拥有文件所有者的权限,SGID允许程序在运行时拥有文件所在组的权限,而Sticky则可以防止公用文件夹中的某人意外删除其他人的文件。