In deploying to a new (Solaris 9) environment recently, one of the steps was to copy a set of files and directories to their new location and then to apply the group UID bit (us
For a executable, g+s
overrides the group id that the executable will run as (it is usually inherited from the parent).
$ cp `which id` id-test $ ./id-test uid=1001(user1) gid=1001(group1) groups=1001(group1),2001(project1) $ chgrp project1 id-test $ chmod g+s id-test $ ./id-test uid=1001(user1) gid=1001(group1) egid=2001(project1) groups=1001(group1),2001(project1)
(egid is "effective group id" -- usually the same as gid, "group id", but here different.)
For a directory, g+s
overrides the group id that new files and directories will have (it is usually inherited from the creator).
$ mkdir project $ chgrp project1 file1 $ umask 0022 $ touch project/file1 $ ls -l project/file1 -rw-r--r-- 1 user1 group1 0 file1 $ chmod g+s project $ touch project/file2 $ ls -l project/file2 -rw-r--r-- 1 user1 project1 0 file2
You may still need to fiddle with umask
for best results; something at least as permissive as 0007
is required for shared writing, and something at least as permissive as 0027
is required for shared reading.
$ umask 0077 $ touch project/file3 $ ls -l project/file3 -rw------- 1 user1 project1 0 file3 $ umask 0027 $ touch project/file4 $ ls -l project/file4 -rw-r----- 1 user1 project1 0 file4 $ umask 0007 $ touch project1/file5 $ ls -l project1/file5 -rw-rw---- 1 user1 project1 0 file5