可能你已经猜到了,Linux系统上共享文件的方法是创建组。但在一个完整的共享文件的环
    境中,事情会复杂得多。

    在7.3节中你已经看到,创建新文件时,Linux会用你默认的UID和GID给文件分配权限。想
    让其他人也能访问文件,要么改变其他用户所在安全组的访问权限,要么就给文件分配一个包含
    其他用户的新默认属组。

    如果你想在大范围环境中创建文档并将文档与人共享,这会很烦琐。幸好有一种简单的方法
    可以解决这个问题。

    Linux还为每个文件和目录存储了3个额外的信息位。

    • 设置用户ID(SUID):当文件被用户使用时,程序会以文件属主的权限运行。
    • 设置组ID(SGID):对文件来说,程序会以文件属组的权限运行;对目录来说,目录中创建的新文件会以目录的默认属组作为默认属组。
    • 粘着位:进程结束后文件还驻留(粘着)在内存中。

    SGID位对文件共享非常重要。启用SGID位后,你可以强制在一个共享目录下创建的新文件
    都属于该目录的属组,这个组也就成为了每个用户的属组。

    SGID可通过chmod命令设置。它会加到标准3位八进制值之前(组成4位八进制值),或者在
    符号模式下用符号s。
    如果你用的是八进制模式,你需要知道这些位的位置,如表7-6所示。
    image.png
    因此,要创建一个共享目录,使目录里的新文件都能沿用目录的属组,只需将该目录的SGID位置位。

    $ mkdir testdir
    $ ls -l
    drwxrwxr-x 2 rich rich 4096 Sep 20 23:12 testdir/
    $ chgrp shared testdir
    $ chmod g+s testdir
    $ ls -l
    drwxrwsr-x 2 rich shared 4096 Sep 20 23:12 testdir/
    $ umask 002
    $ cd testdir
    $ touch testfile
    $ ls -l
    total 0
    -rw-rw-r— 1 rich shared 0 Sep 20 23:13 testfile
    $

    首先,用mkdir命令来创建希望共享的目录。然后通过chgrp命令将目录的默认属组改为包
    含所有需要共享文件的用户的组(你必须是该组的成员)。最后,将目录的SGID位置位,以保证
    目录中新建文件都用shared作为默认属组。

    为了让这个环境能正常工作,所有组成员都需把他们的umask值设置成文件对属组成员可
    写。在前面的例子中,umask改成了002,所以文件对属组是可写的。

    做完了这些,组成员就能到共享目录下创建新文件了。跟期望的一样,新文件会沿用目录的
    属组,而不是用户的默认属组。现在shared组的所有用户都能访问这个文件了。