Linux的3种特殊权限场景实战:SUID、SGID、SBIT

简介: Linux的3种特殊权限场景实战:SUID、SGID、SBIT

3种特殊权限

在Linux系统中,有3种特殊权限,它们分别是Setuid(SUID)、Setgid(SGID) 和 Sticky Bit。

  1. Setuid权限:通过Setuid权限,普通用户可以在执行某些特定程序时,拥有与程序所有者相同的权限。也就是说,该程序在执行时,会自动获取其所有者的权限,而不是执行者的权限。这通常用于一些需要root权限才能执行的程序。
  2. Setgid权限:通过Setgid权限,执行者可以在执行某个程序时,获得该程序所属组的权限,而不是执行者所在的组的权限。通常,Setgid权限用于一些需要共享访问权限的目录,比如一个共享的工作目录。
  3. Sticky Bit权限:Sticky Bit权限通常用于某些共享的目录,它可以防止普通用户删除其他用户创建的文件。也就是说,一旦一个目录被设置了Sticky Bit权限,只有该目录的所有者和root用户才能删除该目录中的文件。这样可以避免其他用户意外删除其他用户创建的文件,保证了文件的安全性和完整性。

场景实战

  1. 假设有这样一个二进制程序/usr/bin/passctl,这个程序只能被root用户执行,而我们希望普通用户也能执行该程序,但是又不想将该程序赋予root用户以外的用户特权。这时,我们可以使用Setuid权限来实现该目的。
# 将该程序的所有者设置为root用户,并将该程序的权限设置为可执行,但不允许其他用户执行该程序
chown root /usr/bin/passctl
chmod 700 /usr/bin/passctl
# 设置Setuid权限,以便普通用户执行该程序时可以获得与root用户相同的权限
chmod u+s /usr/bin/passctl

这时候,该程序将以root用户的身份运行,并获得与root用户相同的权限了。比如有一个普通用户tantianran,那么该用户就可以像下面这样运行该程序啦!

/usr/bin/passctl

注意,在实际工作中设置Setuid权限时,需要确保所设置的程序是安全的,避免潜安全风险。

  1. 假设有一个团队正在开发一个 Web 应用程序,并且他们都是在同一个 Linux 服务器上工作。为了便于团队成员之间共享文件和目录,创建了一个名为 "webapp" 的共享目录。此外,还希望确保任何新文件或目录在创建时都具有与父目录相同的权限。为了实现这个场景,可以使用 Setgid 权限来配置 "webapp" 目录。
# 创建演示的目录和用户、组
[root@workhost ~]# mkdir -p /data/tmpdir/webapp
[root@workhost ~]# chmod 775 /data/tmpdir/webapp/
[root@workhost ~]# groupadd webappgroup
[root@workhost ~]# useradd webappdev
# 将 "webapp" 目录的所有者设置为 Web 应用程序的主要开发者,并将其所属组设置为 "webappgroup"。
[root@workhost ~]# chown webappdev:webappgroup /data/tmpdir/webapp
# 设置 "webapp" 目录的 Setgid 权限,这将导致任何新创建的文件或目录都将继承 "webapp" 目录的组权限。
[root@workhost ~]# chmod g+s /data/tmpdir/webapp
# 查看
[root@workhost ~]# ls -ld /data/tmpdir/webapp/
drwxrwsr-x 2 webappdev webappgroup 21 Apr 10 20:58 /data/tmpdir/webapp/
[root@workhost ~]#

如果权限中有小写字母s,则表示 Setgid 权限已经被设置

现在,团队成员可以在 "webapp" 目录中创建新文件和目录,并确保这些文件和目录都具有与 "webapp" 目录相同的组权限。例如,如果开发者tantianran在 "webapp" 目录中创建了一个名为 "main.go" 的文件。

[root@workhost ~]# usermod -g webappgroup tantianran
[root@workhost ~]# id tantianran
uid=1000(tantianran) gid=1001(webappgroup) groups=1001(webappgroup),1000(tantianran)
[root@workhost ~]# 
[root@workhost ~]# su - tantianran
Last login: Mon Apr 10 20:55:24 CST 2023 on pts/0
[tantianran@workhost ~]$ cd /data/tmpdir/webapp/
[tantianran@workhost webapp]$ touch main.go
# 该文件的权限将如下所示:
[tantianran@workhost webapp]$ ls -l
total 0
-rw-r--r-- 1 tantianran webappgroup 0 Apr 10 20:58 main.go
[tantianran@workhost webapp]$

注意到该文件的所属组为 "webappgroup",这是因为 "webapp" 目录设置了 Setgid 权限,导致该文件继承了组权限。此外,团队内其他成员也可以访问该文件,因为 "webapp" 目录的组权限允许组中的任何成员访问它。

  1. 假设我们有一个名为“shared_directory”的公共目录,用于存放团队成员之间共享的文件。我们希望所有团队成员都可以向该目录上传文件,但只有文件所有者和超级用户才能删除文件。
# 创建一个共享目录“shared_directory”
[root@workhost ~]# mkdir /data/tmpdir/shared_directory
# 设置Sticky Bit权限
[root@workhost ~]# chmod +t /data/tmpdir/shared_directory
[root@workhost ~]# ls -ld /data/tmpdir/shared_directory/
drwxr-xr-t 2 root root 6 Apr 10 21:09 /data/tmpdir/shared_directory/
[root@workhost ~]# 
# 创建两个测试用户账号“user1”和“user2”,并将它们添加到同一用户组
[root@workhost ~]# useradd user1
[root@workhost ~]# useradd user2
[root@workhost ~]# groupadd shared_group
[root@workhost ~]# usermod -aG shared_group user1
[root@workhost ~]# usermod -aG shared_group user2
[root@workhost ~]# 
# 将共享目录“shared_directory”的所有权更改为“root”用户和“shared_group”用户组
[root@workhost ~]# chown root:shared_group /data/tmpdir/shared_directory/
# 将目录权限更改为“rwxrwxrwt”,这将允许所有团队成员上传文件到目录中,但只有文件所有者和超级用户可以删除文件:
[root@workhost ~]# chmod 1777 /data/tmpdir/shared_directory/
[root@workhost ~]# ls -ld /data/tmpdir/shared_directory/
drwxrwxrwt 2 root shared_group 6 Apr 10 21:17 /data/tmpdir/shared_directory/
[root@workhost ~]# 
# 测试
[root@workhost shared_directory]# sudo -u user2 touch test.go
[root@workhost shared_directory]# ls -l
total 0
-rw-r--r-- 1 user2 user2 0 Apr 10 21:21 test.go
[root@workhost shared_directory]# sudo -u user1 rm -f test.go 
rm: cannot remove ‘test.go’: Operation not permitted # 会收到一个错误消息,提示没有权限删除该文件:
[root@workhost shared_directory]# touch main.go
[root@workhost shared_directory]# sudo -u user1 rm -f main.go 
rm: cannot remove ‘main.go’: Operation not permitted
[root@workhost shared_directory]# sudo -u user1 touch conf.json
[root@workhost shared_directory]# sudo -u user2 rm -f conf.json 
rm: cannot remove ‘conf.json’: Operation not permitted
[root@workhost shared_directory]#

这个场景实战演示了如何使用Sticky Bit权限来控制公共目录的删除操作,以确保只有目录所有者和超级用户可以删除其他用户的文件。

最后的总结

  • SUID权限(Set User ID on execution):当一个可执行文件被设置了SUID权限时,当任何用户执行该文件时,该文件将以文件所有者的权限来运行,而不是执行者的权限。SUID权限通常用于那些需要执行特定操作,而这些操作只能由具有特定权限的用户或组来执行的程序,例如passwd命令。这可以帮助管理员在系统中实现更严格的访问控制。
  • SGID权限(Set Group ID on execution):当一个可执行文件被设置了SGID权限时,当任何用户执行该文件时,该文件将以文件所属组的权限来运行,而不是执行者的权限。与SUID权限类似,SGID权限通常用于那些需要特定组的权限才能运行的程序。例如,在一个共享文件夹中,如果一个目录设置了SGID权限,则新创建的文件将继承目录的组权限,而不是创建者的组权限,这可以确保在组共享文件夹中的文件访问控制。
  • sticky bit权限:当一个目录被设置了sticky bit权限时,只有目录的所有者、root用户和文件的所有者才能删除目录中的文件。这种权限通常被用于公共目录,以防止其他用户意外删除或修改其他人上传的文件。当一个用户上传一个文件到该目录时,他或她只能修改或删除自己上传的文件,而不能修改或删除其他人的文件。

总而言之,言而总之,这些特殊权限可以帮助管理员更好地控制对文件和目录的访问,并确保系统的安全性和稳定性。


相关文章
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
5161 77
|
10月前
|
存储 数据采集 监控
ubuntu(linux)系统主要应用于哪些工业场景中?研维三防ubuntu系统的手持工业三防平板电脑在哪些行业中有实际应用
Ubuntu 系统凭借其独特的优势,在众多工业场景中得到了广泛应用,为工业数字化、智能化发展提供了有力支持。而研维三防基于 Ubuntu 定制系统的手持工业三防平板电脑,更是将 Ubuntu 系统的优势与工业级的性能、坚固耐用性完美结合,在电力、物流、制造等多个行业中展现出强大的应用价值,助力企业提高生产效率、优化管理流程、提升产品质量,成为推动工业现代化发展的重要力量。随着技术的不断进步与创新,相信 Ubuntu 系统以及研维三防这类工业级设备将在更多的工业领域中发挥更大的作用,为工业发展带来更多的机遇与变革。
|
存储 安全 Ubuntu
从Linux到Windows:阿里云服务器系统镜像适配场景与选择参考
阿里云为用户提供了丰富多样的服务器操作系统选择,以满足不同场景下的应用需求。目前,云服务器的操作系统镜像主要分为公共镜像、自定义镜像、共享镜像、镜像市场和社区镜像五大类。以下是对这些镜像类型的详细介绍及选择云服务器系统时需要考虑的因素,以供参考。
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
646 3
|
关系型数据库 MySQL 应用服务中间件
Linux 手动安装快速部署 LNMP 环境实战
本文详细记录了在阿里云ECS上手动搭建LNMP环境的过程,系统选用Ubuntu 24.04。主要内容包括:1) 使用`apt`安装Nginx和MySQL,并更新软件源;2) 编译安装PHP 8.4.5,配置PHP-FPM及环境路径;3) 配置MySQL root用户密码;4) 调整Nginx支持PHP解析并测试整体环境。通过此过程,重现手动配置服务器的细节,帮助熟悉各组件的安装与协同工作。
1016 23
|
安全 Unix Linux
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
25000多字详细讲解,深度剖析权限管理核心。从基础权限到复杂的特殊权限,逐一拆解,无论你是零基础小白还是经验丰富的运维人员,都能在这里找到提升技能的关键知识,全面掌握 Linux 权限管理。还不快来看看?
【Linux权限】—— 于虚拟殿堂,轻拨密钥启华章
|
安全 Linux 数据安全/隐私保护
【Linux】深入理解linux权限
本文深入解析Linux权限管理机制,涵盖权限概念、用户角色、文件属性及操作方法。文章分为前言、权限介绍、用户与角色、文件属性、权限修改及常见问题六大板块。详细说明了权限类型(r/w/x)、角色优先级、chmod/chown指令用法,以及目录权限、umask掩码、粘滞位等重点内容。掌握这些知识,可有效提升Linux系统安全性和灵活性,是管理员必备技能。喜欢的话别忘了点赞支持哦! ❤❤❤
857 6
|
安全 Linux 数据安全/隐私保护
Linux权限揭秘“Root与Sudo”
Root用户是Linux系统中的超级用户,拥有对系统的完全控制权。Root用户几乎可以执行任何命令,修改任何文件,甚至删除系统上的所有内容。因此,Root用户的使用需要非常谨慎,以避免潜在的安全风险。
792 6
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
525 1
linux特殊权限!!