如何更改目录的权限而不丢失 setgid?

如何更改目录的权限而不丢失 setgid?

当我更改 setgid 目录上其他人或用户的权限时,该目录会丢失其 setgid。如何进行更改而不丢失它? sudo 不是一个选项。是否可以?

这是一些背景信息。

$ whoami
webmin
$ groups
webmin
$ echo $SHELL
/bin/bash
$ uname -srvm
Linux 2.6.38-12-server #51-Ubuntu SMP Wed Sep 28 16:07:08 UTC 2011 x86_64

这是一个例子。

$ ls -la
drwxr-s--- 4 webmin www-data    4096 2011-11-03 10:59 .
drwxr-s--- 4 webmin www-data    4096 2011-10-26 15:53 ..
$ mkdir libraries
$ ls -ld libraries
drwxr-sr-x 2 webmin www-data    4096 2011-11-03 11:01 libraries
$ chmod o= libraries
$ ls -ld libraries
drwxr-x--- 2 webmin www-data    4096 2011-11-03 11:01 libraries
      ^
       `- The problem

如果我修改用户对该目录的权限,也会发生同样的情况。

以下也失败。

$ chmod g=rxs,o= libraries

===更新====

凯文的回答让我明白了我认为问题的原因。显然,您必须是分配给该文件的组的成员。例如

$ whoami
webmin
$ groups
webmin www-data      <---- Now we are in the www-data group.
$ mkdir t
$ ls -ld t
drwxr-sr-x 2 webmin www-data 4096 2011-11-03 12:03 t
$ chmod o= t
$ ls -ld t
drwxr-s--- 2 webmin www-data 4096 2011-11-03 12:03 t
      ^
       `- Yeah!

那么是不是只要你是该团体的成员,答案就是“是”,否则就是“否”?

答案1

$ ls -ld testdir
drwxrwxrwx ... testdir
$ chmod 2750 testdir
$ ls -ld testdir
drwxr-s--- ... testdir

那是你要的吗?

编辑:我检查了我的系统,设置o权限甚至更改组都没有更改 setgid 位。不知道为什么它会发生在你的身上。

答案2

如果您不是分配给该目录的组的成员,那么如果您修改任何权限,您将丢失该目录的 setgid。

选项

  1. 您可以在创建目录之前更改 umask,从而避免在创建目录后修改目录的权限。这样您就不会丢失该目录上的 setuid。 (在本答案的末尾进行了演示。)

  2. 成为群组成员(需要sudo

    $ sudo usermod -a -G www-data webmin

  3. 使用更改权限sudo

    $ chmod g=rxs,o= libraries

最后两个违反了问题的约束,所以答案是选项1。

$ umask 0027
$ mkdir libraries
$ ls -ld libraries
drwxr-s--- 2 webmin www-data 4096 2011-11-03 12:03 libraries

相关内容