次のディレクトリ構造があります。
+ public/
|-+ pics/
| |-- a
| `-- b
`-+ thumbs/
|-- a
`-- b
gallery:http
私はツリー内のすべてのファイルがスキーマセットによって所有されることを望みますug=rwX,o=
。
スクリプトはその中にディレクトリを作成し、pics
userthumbs
として実行されますgallery
。public
、 、pics
に SUID/SGID ビットがセットされていますthumbs
。
これで問題は、a
ディレクトリが所有者と共に作成されますが、グループの権限gallery:http
なしで作成されることです。x
に電話するとchmod
SGIDビットがクリアされます。 (奇妙な動作ですが、http
ユーザーがファイルの所有者ではないため、これが発生します。)
chown
root以外のユーザーとして呼び出してモードを最初に設定し、所有者を設定することはできません。
唯一の解決策は、に設定し、umask
すべてug=rwx,o=
のディレクトリを作成し、通常のファイルが生成される前に変更するか、通常のumask
ファイルを作成してからモードをに変更することですug=rw,o=
。
私が見ることができないより良いと醜い解決策はありますか?
答え1
スクリプトを変更できる場合は、呼び出しmkdir
をmkdir --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でファイル権限などを設定する他の方法は何ですか?