chmodを呼び出してSGIDビットを保存するにはどうすればよいですか?

chmodを呼び出してSGIDビットを保存するにはどうすればよいですか?

次のディレクトリ構造があります。

+ public/
|-+ pics/
| |-- a
| `-- b
`-+ thumbs/
  |-- a
  `-- b

gallery:http私はツリー内のすべてのファイルがスキーマセットによって所有されることを望みますug=rwX,o=

スクリプトはその中にディレクトリを作成し、picsuserthumbsとして実行されますgallerypublic、 、picsに SUID/SGID ビットがセットされていますthumbs

これで問題は、aディレクトリが所有者と共に作成されますが、グループの権限gallery:httpなしで作成されることです。xに電話するとchmodSGIDビットがクリアされます。 (奇妙な動作ですが、httpユーザーがファイルの所有者ではないため、これが発生します。)

chownroot以外のユーザーとして呼び出してモードを最初に設定し、所有者を設定することはできません。

唯一の解決策は、に設定し、umaskすべてug=rwx,o=のディレクトリを作成し、通常のファイルが生成される前に変更するか、通常のumaskファイルを作成してからモードをに変更することですug=rw,o=

私が見ることができないより良いと醜い解決策はありますか?

答え1

スクリプトを変更できる場合は、呼び出しmkdirmkdir --mode=770

スクリプトを変更できない場合は、ACLが役立ちます。

setfacl -m d:u::rwx,d:g::rwx,o::- pics thumbs

umaskファイルに実行権限を設定しないでください。どの権限も設定しません。ファイルの作成時に権限が設定されないようにするだけです。

答え2

いくつかのオプションがあります。

  • chmod g+x a
  • マスクの変更
  • アクセス制御リストを使用します。

はい、他のビットをクリアせずにビットを設定できます。最初のオプションを参照してください。ただし、さらに自動化するには、次のいずれかを実行してください。

  • umaskをrwxr-x---に設定し、各ユーザーに個人のデフォルトグループを提供します(デフォルトグループはそのユーザーにのみ属します)。
  • アクセス制御リストの使用:このリストを使用すると、複数のグループとユーザーの権限を設定できるだけでなく、ディレクトリのデフォルト値も設定できます(sgidに似ていますが、グループだけでなくモードも設定可能)。 setfacl、getfaclを参照してください。また、見ることができますGnu / linuxでファイル権限などを設定する他の方法は何ですか?

関連情報