在最近部署到新的(Solaris 9)环境时,其中一个步骤是将一组文件和目录复制到新位置,然后将组UID位(使用"chmod -R g + s")应用于所有目录树中的文件给出了-rwxr-s的模式.结果是,除非单独打开并重新保存,否则我们的shell脚本都不会执行.我应该补充一点,我们之前在复制文件之前在目标父文件夹上设置了g + s; 这已经将所有新目录的初始模式设置为drwxr-s ---但文件的模式为-rwxr-x ---
在最终发现导致问题的步骤后,我们能够切断该步骤并继续进行.
但是,我想了解"s"位在应用于目录和文件时的含义,希望这能解释为什么我们首先遇到问题.
设置目录g + s使得在所述目录中创建的所有新文件都将其组设置为目录的组.
如果您设置了umask以便默认情况下文件具有组写,那么这对于协作目的来说实际上非常方便.
注意:这是它在Linux中的工作方式,它可以在Solaris中完全不同地工作.
对于可执行文件,这意味着在执行文件时,它将作为拥有该文件的组执行,而不是执行该文件的用户组.
如果您希望用户能够仅为运行一个命令而承担特定组的权限,这将非常有用.
但是,它也存在安全风险,因为它允许用户提升其权限.您必须知道具有此位设置的脚本不会执行任何会让用户滥用这些额外权限的操作.
以下是SGID(chmod g + s)的非常方便的解释:http://www.linuxnix.com/sgid-set-sgid-linuxunix/
SGID(执行时设置组ID)是一种特殊类型的文件/文件夹文件权限.通常在Linux/Unix中运行程序时,它会从登录用户继承访问权限.SGID定义为为用户提供临时权限以运行具有文件组权限的程序/文件,以成为该组的成员以执行该文件.简单来说,用户在执行文件夹/文件/程序/命令时将获得文件组的权限.