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

===更新====

Kevinの答えは、私が考えた問題の原因が何であるかを理解するのに役立ちました。当然、そのファイルに割り当てられたグループのメンバーである必要があります。例えば

$ 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

最後の2つは質問の制約に違反するため、答えはオプション1です。

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

関連情報