当你使用passwd改变自己的口令时,你需要访问/etc/shadow文件,但作为普通用户你并没有这个权限。这时系统通过一种附加权限来实现你对该文件的访问。
当你执行一个设置了suid位的程序时,你就继承了该程序的属主权限,而没有设置suid位的程序在执行时只拥有执行该程序的用户的权限。
下面列出 /usr/bin/passwd的文件属性
-r-s--x--x 1 root root 15368 5ôâ 29 2002 /usr/bin/passwd
可以看到,所有者执行位设置为s
而设置了sgid位的程序将以程序属主所在组的权限来执行。
这里,你执行passwd时,你是以root的权限来执行的。
suid位和粘滞位给目录一个额外的文件移动权限。用户对目录有写权限就可以使用户增加和删除该目录下的任何文件,如果该目录的粘滞位被设置,则只有当你是如下用户时文件才能被删除:设置粘滞位的目录的属主,要被删除的文件的属主,root用户。
目录也可以设置sgid位,如果一个目录设置了sgid位,任何加到该目录下的新文件都自动继承该目录的组,用来代替生成文件的用户的组。
-------------------------------------------------
sgid的应用
众所周知的cvs,本身对用户和项目权限的管理非常薄弱,这就需要我们使用系统对用户的目录文件管理的功能来扶助实现。
在建立新项目时首先建立用于开发该项目的组,如:dxc
将开发人员的用户都加入到这个组中,如有:dxca,dxcb,dxcc
使用一个项目成员账号在$cvsroot目录下建立 一个该项目的同名目录如dxc,并修该目录的所属组为dxc,使用
chmod g+s dxc
设置 sgid位
然后,import该项目。
这样该组的每个成员就都可以正确的checkout和commit,即使add新的目录和文件也不会导致其他的用户不能正确访问而需要手工改变新子目录的属性。