进一步了解Sticky Bit

本文深入探讨了UNIX文件系统中sticky位的历史背景及其在现代操作系统中的应用。sticky位最初是为了提高程序加载效率而设计,但现在主要用于限制特定目录下文件的删除权限。文章详细解释了在HP-UX和Solaris等系统中sticky位的不同作用。
      我们在的前一篇文章《深入了解 UNIX 文件权限》中提到过:当一个目录设置了 sticky bit ,该目录下的文件仅可以被文件所有者或目录所有者删除。这种机制是由 POSIX 规定的并被普遍推广。但是,上述功能并不是 sticky bit 最原始的目的。 POSIX ls 命令中给 sticky bit 是这样定义的:“限制删除功能开关”。在 C 语言头文件中代表 sticky bit 的常数是 S_ISVTX svtx 代表“ save text” 而这也正是提示了 sticky bit 的本来目的。
        POSIX 最初想法是:如果 sticky bit 设置了,进程中的“ text segment” 将会留在 swap 空间中;这样会使得它只需一次硬盘读就可以将其读入内存中。起初, UNIX 使用大小为 512 字节且趋于分散的块;因此需要一定的时间去收集那些分散的“ text segment” 并加载到内存中去。最早期的 UNIX 中没有页面调度,只有页面交换技术;因此要运行一个程序需要全部加载到内存中去;现在我们根据程序的需要加载数据页到内存中。这是不是说 sticky bit 的初始用途已经消失的呢?答案是否定的,根据不同的操作系统有不同的情况。
HP-UX 中, sticky bit 依然存在并可以在 HP-UX chmod(2) man page [1] 中查证。什么在用 sticky bit 呢?,通过 HP-UX FAQ [2] 中可以看到在 [The HP-UX Kernel Tuning and Performance Guide] 中有如下描述:

"When applications are located remotely, set the "sticky bit" on the applications binaries, using the chmod +t command. This tells the system to page the text to the local disk. Otherwise, it is "retrieved" across the network. Of course, this would only apply when there is actual paging occurring. More recently, there is a kernel parameter, page_text_to_local, which when set to 1, will tell the kernel to page all NFS executable text pages to local swap space."

Solaris 中虽然没有关于 sticky bit 初始用途的说明,但根据 Solaris chmod(2) man page [3] 可以看到如下描述 :

"If a regular file is not executable and has S_ISVTX set, the file is assumed to be a swap file. In this case, the system's page cache will not be used to hold the file's data. If the S_ISVTX bit is set on any other file, the results are unspecified."

     如果你发现一个文件设置了sticky bit,您就需要查看对应操作系统的chmod命令的man page看看有什么样的影响。另外请注意,如果有影响,OS会限制对root设置sticky bit。例如:在HP-UX,一个恶意的用户可以设置很多sticky bit让系统用完swap空间导致系统崩溃。

以下是不同OSchmod帮助手册中对sticky bit描述:

表一:不同OSsticky bit的描述

HP-UX实际上还有一些符号链接文件设置了sticky bit这将在以后的文章中继续讨论。



[1] 参考 HP-UX chmod 命令帮助手册 : http://docs.hp.com/en/B2355-90693/chmod.2.html
[2] 参考 HP-UX FAQ http://www.faqs.org/faqs/hp/hpux-faq/
[3] 参考 Solaris chmod 命令帮助手册 : http://docs.sun.com/app/docs/doc/816-5167/chmod-2?a=view
[4] 其它参考资料: www.wikipedia.org
A. http://nixdoc.net/man-pages/Linux/man1/chmod.1.html
B. http://nixdoc.net/man-pages/FreeBSD/man2/chmod.2.html
C. http://nixdoc.net/man-pages/IRIX/man2/standard/chmod.2.html
D. http://www.manpagez.com/man/2/chmod/
E. http://uw714doc.sco.com/en/man/html.2/chmod.2.html


<think>首先,用户的问题是:“我想了解Linux中sticky directory的含义及其文件类型 请问Linux中sticky directory是什么类型的文件”。用户想了解Linux中sticky directory的含义和文件类型。 从系统级指令中,我需要遵守格式:行内数学表达式用$...$,独立公式用$$...$$,使用中文回答,生成相关问题,并在引用段落末尾添加引用标识如[^1]。 用户提供了几个引用,我需要参考这些引用: - 引用[1]: 解释了sticky bit在目录上的作用:设置后,用户可以在目录下创建文件,但只能删除自己创建的文件,不能删除其他用户的文件。 - 引用[2]: 讨论了粘滞位在Linux中的概念、设置方法和应用场景。 - 引用[3]: 描述了SUID、SGID和Sticky权限。对于Sticky,它作用于目录时,确保用户只能删除自己的文件。 - 引用[4]: 解释了Linux目录结构,但没有直接提到sticky bit。 用户真正的需求是关于sticky directory的含义和文件类型。所以,我应该基于这些引用,构建一个清晰的回答。 关键点: - **含义**:Sticky directory 是一个设置了粘滞位(sticky bit)的目录。粘滞位是一种特殊权限位,用于目录时,它限制文件删除权限:只有文件的所有者、目录的所有者或root用户才能删除或重命名目录中的文件。 - **文件类型**:在Linux中,目录本身就是一种文件类型。具体来说,目录是特殊文件类型,用'd'表示(在ls -l输出中)。所以,sticky directory 不是一个单独的文件类型;它只是一个设置了sticky bit的目录。 在ls -l输出中,权限部分如果有't'或'T'表示设置了sticky bit。例如:drwxrwxrwt 表示一个目录,设置了sticky bit。 回答结构: 1. **解释含义**:先定义什么是sticky directory,基于引用。 2. **解释文件类型**:澄清它不是一个独立文件类型,而是目录类型设置了特殊权限。 3. **设置方法**:简要说明如何设置sticky bit。 4. **应用场景**:举例说明其用途。 5. **生成相关问题**:在结尾添加相关问题。 使用中文回答。 添加引用标识:在引用段落末尾添加[^1]等。引用来自用户提供的,所以我应该基于引用[1]、[2]、[3]来构建回答。 可能的回答大纲: - 开头:直接回答用户的问题。 - 主体:详细解释。 - 结尾:生成相关问题。 最后,生成相关问题:例如,1. 如何设置sticky bit?2. Sticky bit在文件上有什么作用?3. 实际应用场景。 确保回答真实可靠。</think>### Linux中sticky directory的含义及其文件类型 在Linux系统中,"sticky directory"(粘滞目录)是指设置了粘滞位(sticky bit)的目录。粘滞位是一种特殊权限位,用于在多用户环境中增强文件安全性和管理。下面我将逐步解释其含义、文件类型及相关细节,帮助您全面理解。 #### 1. **sticky directory的含义** - 粘滞位作用于目录时,主要目的是限制文件删除权限:在设置了粘滞位的目录中,用户只能删除或重命名自己创建的文件,而不能删除其他用户创建的文件(除非用户是root或目录的所有者)。这有效地防止了用户误删或恶意删除他人文件,提升了共享目录的安全性。 - 例如,在/tmp目录(临时文件目录)中,Linux系统默认设置了粘滞位。这样,多个用户可以同时在该目录下创建文件,但每个用户只能管理自己的文件,不会干扰他人[^1][^2][^3]。 - 粘滞位的设置是通过权限位实现的:在目录的权限字符串中,如果"other"(其他用户)的执行位(x)被替换为't'或'T',则表示设置了粘滞位。例如,在`ls -l`命令的输出中,权限字符串如`drwxrwxrwt`(其中末尾的't'表示粘滞位已设置)[^1][^3]。 #### 2. **sticky directory的文件类型** - **文件类型说明**:在Linux中,目录本身就是一种文件类型,称为"目录文件"(directory file)。它不是一个独立的新文件类型,而是标准文件类型之一。在文件系统中,所有文件和目录都视为文件,但目录的类型标识为'd'(在`ls -l`命令的输出中,首字符为'd'表示目录)。 - **粘滞位的作用**:粘滞位只是附加在目录文件上的一个权限标志(类似于读、写、执行权限),并不改变目录本身的文件类型。因此,"sticky directory" 仍然是一个目录文件(类型'd'),但具有额外的粘滞权限属性[^1][^2][^3]。 - 例如: - 普通目录权限:`drwxr-xr-x`(首字符'd'表示目录)。 - 设置了粘滞位的目录权限:`drwxrwxrwt`(首字符'd'表示目录,末尾't'表示粘滞位)。 - 如果目录没有执行权限但设置了粘滞位,权限字符串会显示为'T'(大写),例如`drwxrwxr--T`,这表示粘滞位已设置但目录不可执行(通常不常见,因为目录需要执行权限才能访问)[^1][^3]。 #### 3. **如何设置和检查粘滞位** - **设置方法**:使用`chmod`命令设置粘滞位。语法为`chmod +t directory_name`或`chmod 1xxx directory_name`(其中'xxx'是三位八进制权限码,'1'表示粘滞位)。例如: ```bash chmod +t /shared_dir # 设置粘滞位 ls -ld /shared_dir # 检查权限,输出类似 drwxrwxrwt ``` - **权限位解释**:粘滞位只影响目录内的文件删除操作,不影响文件的创建或读取。用户要在目录下创建文件,仍需具备写(w)和执行(x)权限[^1][^2][^3]。 #### 4. **典型应用场景** - 粘滞位常用于共享目录,如: - `/tmp`目录:所有用户都可以创建临时文件,但只能删除自己的文件,避免系统混乱。 - 团队协作目录:多个用户共享一个目录上传文件(如FTP目录),粘滞位确保文件不会被意外删除。 - 引用[^2]提到,粘滞位在Web服务器或数据库的临时工作目录中也很常见,以增强多进程环境下的安全性。 #### 5. **与其他特殊权限的区别** - Linux还有SUID(Set User ID)和SGID(Set Group ID)权限: - SUID作用于文件时,允许用户以文件所有者的权限执行程序。 - SGID作用于目录时,确保新建文件的组所有权继承自目录(而非用户默认组)。 - 粘滞位(Sticky bit)仅作用于目录,专注于文件删除控制,三者功能互补但应用场景不同[^3]。 总之,Linux中的sticky directory 是一个设置了粘滞位的目录文件(类型'd'),其核心作用是限制文件删除权限,提升多用户环境的安全性。如果您需要进一步操作或示例,请随时告知!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值