setfaclを使用して、グループメンバーがディレクトリ内の任意のファイルに書き込めるようにする


12

setfaclを使用して、「app」グループの誰もが、従来のUNIXのアクセス権の内容に関係なく、/ usr / local / users / appに含まれるファイルを編集できるようにしたいと思います。ジョンとベンという2人のユーザーがいます。別の質問指示に従ってみましたが、johnが一部のファイルに書き込めません。これはaclマスクが原因です。しかし、私はrwxのディレクトリにデフォルトのマスクを設定したので、その中のファイルは作成時にそれを継承しないのですか?

たとえば、ジョンは以下のファイルに書き込むことができませんが、彼はファイルに書き込みACLを持っているグループ「アプリ」のメンバーであるため、ファイルを編集できないことに驚いています。

ben@app1:/usr/local/users$ ls -la app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar 
-rw-r--r--+ 1 ben users 38326 Apr  2 10:21 app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar

ben@app1:/usr/local/users/app$ getfacl app-1.0-SNAPSHOT/lib/
# file: app-1.0-SNAPSHOT/lib/
# owner: ben
# group: users
user::rwx
group::rwx          #effective:r-x
group:app:rwx       #effective:r-x
mask::r-x
other::r-x
default:user::rwx
default:group::rwx
default:group:app:rwx
default:mask::rwx
default:other::r-x

ben@app1:/usr/local/users$ getfacl app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar 
# file: app/app-1.0-SNAPSHOT/lib/play.templates_2.10-2.1.1.jar
# owner: ben
# group: users
user::rw-
group::rwx          #effective:r--
group:app:rwx       #effective:r--
mask::r--
other::r--

回答:


7

getfaclが投げかけている「効果的な」コメントに気付くでしょう。問題は、「アプリ」が書き込みビットセットを取得しないように権限が計算されていることです。これは、ファイルのマスクが読み取り専用に設定されているために発生しています。マスクは、特定のファイルまたはディレクトリに対して与えられる可能性のある権限の量を制限するために使用されます。

この動作が必要な理由の例は、ファイルにアクセスするために別のユーザー/グループが正当に必要であることがわかっていたが、何らかの理由で権限が複雑になり、「他の何でもデフォルトの権限は、グループメンバーシップが何であれ、または再帰的なsetfaclが後で実行されるときに設定され、DEFINITELY DO N'T GIVE TOUT OUT! " 所有しているユーザーはPOSIXの世界で特別なステータスを持っています。非rootになり、ファイルのアクセス許可を変更するなど、他のユーザーにはない権限があり、その権限はマスクによって制限されません(これはとにかくシステムが与える最初の特権のために無意味です)。これが、マスクが制限されているにもかかわらず、rwxを取得する理由です。

ただし、特定の質問に答えるには、ファイルのマスクに書き込みビットを追加して、johnユーザーとして再試行してください。

ここに上記の説明のコマンドラインバージョンを示します。変更したものがすべてマスクの場合に「有効な」権限がどのように変化するかに注意してください。


ありがとうございました。本当に感謝しています。rwxのデフォルトマスクで新しいファイルを作成することは可能ですか?質問をいくつか詳細に編集しました。
ベンマッキャン2013

マスクは、デフォルトのACLを設定できるカテゴリ(ユーザーやグループなど)の1つです。デフォルトのマスクはサブディレクトリに継承され、ファイルに適用されます。例:setfacl -md:m :: rwx / path / to / Dir
Bratchley

デフォルトのACLはサブディレクトリに継承されますが、ファイルには継承されないため、ACLは完全に役に立たなくなります:-(
Ben McCann

同じことを確実にするために、マスクエントリのデフォルトACLについて話しているのですか。これは私がテストで得るものです。
Bratchley 2013

また、親ディレクトリの有効なマスクを変更した後、/ testBedの新しいファイルに対して上記のテストを繰り返し、同じ結果が得られました(デフォルトのマスクエントリは、親の有効なマスクではなくファイルに適用されます)。
Bratchley 2013

0

それは不可能です。cp、rsyncなどは、デフォルトのACLを無視してファイルを作成します

cpがACLを尊重しないのはなぜですか?


不正確ユーザーは以前に遭遇したのと同じマスクに遭遇し、他の誰かから不正確な応答を得ました。デフォルトのACLエントリを無視するのは "cp"やその他のユーティリティではありません。これは、cpがファイルを作成しようとするときにファイルシステムレベルで発生します。このツールには、システムコールを発行して必要なACLをストライプ/追加するオプションがありますが、そうするためには努力が必要です。
Bratchley 2013

その地獄は、ACLエントリを見ることができるということです。彼らが話しているACLエントリは、彼らが見ていることを期待している有効な権限だけではないということです。それは「おいおい、マスクをチェックして」と言う絶好の機会でした。
Bratchley 2013

1
実際、EvilRyryがマスクについて投稿したように見え、OPが「それは機能しませんでした」と応答した後、「felles」がファイルにrwxを取得したことを示すgetfacl出力を投稿しました。この割合では、最高投票数の回答は私の個人的な経験や、ここでコマンドの例を使用して説明したものと一致しません。
Bratchley 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.