When could or should I use chmod g+s on a file or directory?

后端 未结 8 1459
日久生厌
日久生厌 2021-01-30 13:47

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

8条回答
  •  旧巷少年郎
    2021-01-30 14:07

    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

提交回复
热议问题