SUID, SGID and sticky bit on linux
May 31, 2024About 2 min
SUID
Linux 系统中共享文件的方法是创建组。但对一个完整的文件共享环境而言,事情会复杂得多。
创建新文件时,Linux 会用默认的 UID 和 GID 来给文件分配权限。要想让其他用户也能访问文件,要么修改所有用户的安全权限,要么给文件分配一个包含其他用户的新默认属组。
如果想在大范围内创建并共享文件,这会很烦琐。幸好有一种简单的解决方法。
SGID 位对文件共享非常重要。启用 SGID 位后,可以强制在共享目录中创建的新文件都属于该目录的属组,这个组也就成了每个用户的属组。
因此,要创建一个共享目录,使目录中的所有新文件都沿用目录的属组,只需设置该目录的 SGID 位。
首先,使用 mkdir 命令创建希望共享的目录。然后,通过 chgrp 命令修改目录的默认属组,使其包含所有需要共享文件的用户。最后,设置目录的 SGID 位,保证目录中的新建文件都以 shared 作为默认属组。
为了让这个环境正常工作,所有组成员都要设置他们的 umask 值,使文件对属组成员可写。在这个例子中,umask 被改成了 002,所以文件对属组是可写的。完成这些步骤之后,组成员就能在共享目录下创建新文件了。跟期望的一样,新文件会沿用目录的默认属组,而不是用户账户的默认属组。现在 shared 组的所有用户都能访问这个文件了。
groupadd shared
mkdir testdir
chgrp shared testdir
chmod g+s testdir
umask 002
cd testdir
touch testfile