任何类 Unix 系统是否都赋予目录上的 SUID 位含义?

发布于 2024-07-14 17:05:56 字数 254 浏览 8 评论 0原文

正如标题所示,任何类 Unix 系统是否都为目录上的 SUID 位赋予了含义?如果是,它意味着什么?

SVTX(保存的文本或粘滞)位有一个含义 - 除非可以写入该文件,否则不得从此目录中删除文件。 例如,它用在 /tmp 上。

SGID(设置 GID)位有一个含义 - 在此目录中创建的文件应属于拥有该目录的组(尽管稍后可以通过显式调用 chown(2) 来更改该分配)。

那么 SUID 位呢?

As the title says, does any Unix-like system ascribe a meaning to the SUID bit on a directory, and if so, what does it mean?

The SVTX (saved text, or sticky) bit has a meaning - thou shalt not delete a file from this directory unless you can write to the file. It is used on /tmp, for example.

The SGID (set GID) bit has a meaning - files created in this directory shall belong to the group that owns the directory (though that assignment can later be changed by an explicit call to chown(2)).

What about the SUID bit?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

请你别敷衍 2024-07-21 17:05:56

作为 Node 答案的后续内容,我将从 FreeBSD 手册页中的 mount(8) 中发布以下内容:

             suiddir
                 A directory on the mounted file system will respond to
                 the SUID bit being set, by setting the owner of any new
                 files to be the same as the owner of the directory.  New
                 directories will inherit the bit from their parents.
                 Execute bits are removed from the file, and it will not
                 be given to root.

                 This feature is designed for use on fileservers serving
                 PC users via ftp, SAMBA, or netatalk.  It provides secu-
                 rity holes for shell users and as such should not be used
                 on shell machines, especially on home directories.  This
                 option requires the SUIDDIR option in the kernel to work.
                 Only UFS file systems support this option.  See chmod(2)
                 for more information.

以及引用 suid 位的 chmod(2) 手册页部分:

           4000    (the setuid bit).  Executable files with this bit set will
               run with effective uid set to the uid of the file owner.
               Directories with this bit set will force all files and sub-
               directories created in them to be owned by the directory
               owner and not by the uid of the creating process, if the
               underlying file system supports this feature: see chmod(2)
               and the suiddir option to mount(8).

请注意,这是一个安全风险,并了解当你在 FreeBSD 中启用它时你在做什么,但我相信 Linux 也需要启用特殊的挂载标志,并且会改变该目录中文件的行为方式。

As a followup on Node's answer, I will post the following from the FreeBSD man page for mount(8):

             suiddir
                 A directory on the mounted file system will respond to
                 the SUID bit being set, by setting the owner of any new
                 files to be the same as the owner of the directory.  New
                 directories will inherit the bit from their parents.
                 Execute bits are removed from the file, and it will not
                 be given to root.

                 This feature is designed for use on fileservers serving
                 PC users via ftp, SAMBA, or netatalk.  It provides secu-
                 rity holes for shell users and as such should not be used
                 on shell machines, especially on home directories.  This
                 option requires the SUIDDIR option in the kernel to work.
                 Only UFS file systems support this option.  See chmod(2)
                 for more information.

And the chmod(2) man page section that refers to the suid bit:

           4000    (the setuid bit).  Executable files with this bit set will
               run with effective uid set to the uid of the file owner.
               Directories with this bit set will force all files and sub-
               directories created in them to be owned by the directory
               owner and not by the uid of the creating process, if the
               underlying file system supports this feature: see chmod(2)
               and the suiddir option to mount(8).

Please be aware that this is a security risk and know what you are doing when you enable it, in FreeBSD but I believe Linux as well it requires special mount flag to be enabled and will change the way files in that directory behave.

不…忘初心 2024-07-21 17:05:56

此处复制

在大多数系统上,如果设置了目录的 set-group-ID 位,则新创建的子文件将继承与该目录相同的组,并且新创建的子目录将继承父目录的 set-group-ID 位。 在某些系统上,目录的 set-user-ID 位对新子文件的所有权和新子目录的 set-user-ID 位具有类似的影响。 这些机制减少了使用 chmod 或 chown 共享新文件的需要,使用户可以更轻松地共享文件。

这些便利机制依赖于目录的 set-user-ID 和 set-group-ID 位。 如果像 chmod 和 mkdir 这样的命令经常清除目录上的这些位,那么该机制将不太方便,并且共享文件将变得更加困难。 因此,像 chmod 这样的命令不会影响目录的 set-user-ID 或 set-group-ID 位,除非用户以符号模式特别提及它们,或以数字模式设置它们。

Copied from here:

On most systems, if a directory's set-group-ID bit is set, newly created subfiles inherit the same group as the directory, and newly created subdirectories inherit the set-group-ID bit of the parent directory. On a few systems, a directory's set-user-ID bit has a similar effect on the ownership of new subfiles and the set-user-ID bits of new subdirectories. These mechanisms let users share files more easily, by lessening the need to use chmod or chown to share new files.

These convenience mechanisms rely on the set-user-ID and set-group-ID bits of directories. If commands like chmod and mkdir routinely cleared these bits on directories, the mechanisms would be less convenient and it would be harder to share files. Therefore, a command like chmod does not affect the set-user-ID or set-group-ID bits of a directory unless the user specifically mentions them in a symbolic mode, or sets them in a numeric mode.

ˇ宁静的妩媚 2024-07-21 17:05:56

当在目录上设置时,在此目录中创建的所有文件和目录都将具有与 SUID 目录本身相同的所有者,无论文件是谁创建的。 这是一个不经常使用的功能,但在某些情况下很有用。 (

更新:我刚刚在 Linux 2.6.25.5-1.1- 上尝试过此操作默认 #1 SMP x86_64 GNU/Linux openSUSE 11.0 (X86-64)。

mkdir tmp
chmod 4777 tmp
su othergroup
touch testfile

但没有效果。

When set on a directory, all the files and directories created within this directory will have the same owner as the SUID-directory itself, no matter who created the file. This is a feature which is not used too often, but it can be useful in some cases. (source)

Update: I just tried this on Linux 2.6.25.5-1.1-default #1 SMP x86_64 GNU/Linux openSUSE 11.0 (X86-64).

mkdir tmp
chmod 4777 tmp
su othergroup
touch testfile

It had no effect.

长途伴 2024-07-21 17:05:56

SUID 位指出,在执行文件时(当可执行时),进程将以该文件所有者的身份运行,而不是以执行该文件的用户的身份运行。

在某些情况下,实用程序是“suid root”以允许权限升级。

编辑:误读原始问题(指的是目录而不是文件)-出于教育目的保留答案不变;-)

The SUID bit states that, on execution of a file (when executable), the process will run under the identity of the owner of said file, not the user that executed it.

There are a few cases where a utility program is 'suid root' to allow privilege escalation.

EDIT: Misread original question (which refers to directories rather than files) - leaving answer unaltered for educational purposes ;-)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文