热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux文件系统中的特殊权限详解:SUID、SGID和StickyBit

在Linux系统中,除了基本的读取、写入和执行权限外,还存在三种特殊权限:SetUserID(SUID)、SetGroupID(SGID)和StickyBit。这些特殊权限用于增强系统的安全性和功能性。

在 Linux 系统中,除了常规的读取 (r)、写入 (w) 和执行 (x) 权限之外,还存在三种特殊的权限设置,即 Set User ID (SUID)、Set Group ID (SGID) 和 Sticky Bit。


1. SUID 和 SGID


为了更好地理解 SUID 和 SGID 的作用,我们可以通过一个具体的例子来说明。例如,查看 /usr/bin/passwd/etc/passwd 文件的权限:



[root@MyLinux ~]# ls -l /usr/bin/passwd /etc/passwd
-rw-r--r-- 1 root root 1549 08-19 13:54 /etc/passwd
-rwsr-xr-x 1 root root 22984 2007-01-07 /usr/bin/passwd


/etc/passwd 文件存储了用户账户及其相关信息,而 /usr/bin/passwd 是用于修改和查看该文件的程序。尽管 /etc/passwd 只有 root 用户具有写入权限,但所有用户都可以通过 /usr/bin/passwd 命令修改此文件。这是因为 /usr/bin/passwd 被赋予了 SUID 权限,如权限字符串中的 's' 所示。


SUID(Set User ID): 允许普通用户在执行某个程序时,暂时获得该程序所有者的权限。例如,当普通用户运行 passwd 命令时,他们可以临时获得 root 权限来修改 /etc/passwd 文件。


SGID(Set Group ID): 类似于 SUID,但它是针对组的。当文件或目录被设置为 SGID 时,任何执行该文件的用户都会获得该文件所属组的权限。


2. Sticky Bit(粘贴位)


另一个例子是查看 /tmp 目录的权限:



[root@MyLinux ~]# ls -dl /tmp
drwxrwxrwt 6 root root 4096 08-22 11:37 /tmp


/tmp 目录是一个所有用户都可以读写和创建文件的公共临时文件夹。然而,为了避免用户 A 创建的文件被用户 B 删除的情况,Linux 引入了 Sticky Bit 权限,如权限字符串中的 't' 所示。


Sticky Bit(粘贴位): 当一个目录被设置为 Sticky Bit 时,只有文件的所有者或 root 用户可以删除或重命名该目录中的文件。这确保了即使所有用户都有写入权限,也无法删除不属于自己的文件。


3. 如何设置特殊权限


可以使用 chmod 命令来设置这些特殊权限:



  • 设置 SUID:chmod u+s 文件名

  • 设置 SGID:chmod g+s 文件名

  • 设置 Sticky Bit:chmod o+t 目录名


还可以使用八进制表示法来设置这些权限。每个特殊权限对应的八进制值如下:



  • SUID:4

  • SGID:2

  • Sticky Bit:1


因此,可以这样设置:



  • 设置 SUID:chmod 4755 文件名

  • 设置 SGID:chmod 2755 文件名

  • 设置 Sticky Bit:chmod 1755 目录名


如果文件的特殊权限没有生效,权限字符串中的 's' 或 't' 会显示为大写的 'S' 或 'T',这通常是因为相应的执行权限未被授予。


推荐阅读
  • 本文详细介绍了MooseFS中的副本管理(Goal)以及文件回收机制。副本管理允许用户设定文件的复制份数,确保数据的安全性和可用性;而文件回收机制则提供了在误删除文件后的恢复途径,通过设置合理的隔离时间,保护重要数据。 ... [详细]
  • Eclipse 中 Maven 的基础配置指南
    本文详细介绍了如何在 Eclipse 环境中配置 Maven,包括环境变量的设置、Maven 插件的安装与配置等关键步骤,旨在帮助开发者顺利搭建开发环境。 ... [详细]
  • 本文详细介绍了如何从SVN中获取项目,并在本地环境中进行有效的构建和开发,包括具体的步骤和配置方法。 ... [详细]
  • 解决Ant编译时出现的非法字符错误
    在进行Java项目的Ant构建过程中,有时会遇到由平台差异引发的编译错误。本文将详细探讨一种常见的错误——'error: illegal character'及其解决方案。 ... [详细]
  • 本文详细介绍如何在iOS项目中集成和使用KTVHTTPCache音视频缓存插件,包括Podfile配置、初始化设置及实际应用中的使用方法。 ... [详细]
  • 2014年4月17日,深入研究了邵杨的代码库,发现代码中的注释较为稀少,影响了理解的效率。同时,学习了一些Eclipse的高效操作技巧。 ... [详细]
  • 如何打造属于自己程序的菜单栏,以上代码清晰的展示了swing是如何创建菜单栏的。只要理清楚javaswing的容器和面板的逻辑顺序就能掌握swing ... [详细]
  • 深入理解Android NinePatch图片在聊天界面的应用
    本文探讨了在开发Android应用,特别是聊天界面时,如何有效利用NinePatch图片解决图片拉伸问题。文章通过实例展示了不使用与使用NinePatch图片的区别,并详细介绍了如何创建和使用NinePatch图片。 ... [详细]
  • 本文详细介绍了Android开发中的关键组件——View和ViewGroup类,以及Android平台上的两种主要事件处理方式。同时,文章还探讨了如何利用Android提供的标准布局文件来优化UI设计。 ... [详细]
  • Java面向对象编程深入解析
    本文详细探讨了Java中的关键字static、单例模式、main()方法、代码块、final关键字、抽象类与方法、模板方法设计模式、接口、内部类等内容,旨在帮助读者深入理解和掌握Java面向对象编程的核心概念。 ... [详细]
  • ECharts 基础使用指南
    本文档提供了一个简单的 ECharts 使用示例,帮助初学者快速了解如何在网页中集成和使用 ECharts 创建图表。更多详细信息请参阅官方文档:https://www.echartsjs.com/zh/tutorial.html#5%20分钟上手%20ECharts ... [详细]
  • 本文详细探讨了函数与对象方法的主要区别,包括它们的定义方式、调用规则以及在面向对象编程语言中的应用特点。 ... [详细]
  • PHP调用Shell命令的多种方法及环境配置指南
    本文详细介绍了在PHP中调用Shell命令的不同方式及其应用场景,同时提供了在Ubuntu系统中配置PHP以支持Shell命令执行的具体步骤。此外,还涵盖了安装与配置Apache服务器及PHP环境的过程,以便于开发者能够顺利地在Web环境中执行Shell脚本。 ... [详细]
  • Linux虚拟机中MySQL安装指南
    本文详细介绍了如何在Linux虚拟机上安装MySQL,包括解决常见问题的方法和步骤。 ... [详细]
  • 本文介绍了ADB(Android Debug Bridge)的基本概念、安装方法、环境配置、连接真机步骤以及常用命令和高级技巧。ADB是一个强大的工具,适用于Android设备的开发和调试。 ... [详细]
author-avatar
昏暗的夜风刮过
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有