グループがアクセスできるディレクトリ内のすべての新しいファイルを作成する


131

2人のユーザーAliceとBobとグループGROUPNAMEとfolderがありfoo、両方のユーザーがGROUPNAMEのメンバーであるとします(Linuxとext3を使用)。

の下にユーザーAliceとしてファイルを保存するfooと、アクセス許可は次のようになり-rw-r--r-- Alice Aliceます。ただし、のサブディレクトリの下に保存されたすべてのファイルにfooアクセス許可-rwxrwx--- Alice GROUPNAME(つまり、所有者アリス、グループGROUPNAME)を持たせることは可能ですか?


回答:


91

umaskディレクトリをsetgidに設定すると、割り当てられた許可ビットをで制御でき、グループを制御できGROUPNAMEます。

$ umask 002            # allow group write; everyone must do this
$ chgrp GROUPNAME .    # set directory group to GROUPNAME
$ chmod g+s .          # files created in directory will be in group GROUPNAME

サブディレクトリごとにchgrp/ を実行する必要があることに注意してくださいchmod。自動的には伝播しません(つまり、setgidディレクトリの下にある既存のディレクトリもその後作成されるディレクトリもsetgidにはなりませんが、後者はgroupに含まれますGROUPNAME)。

また、これumaskはプロセス属性であり、そのプロセスとその子(その時点でumask親で有効になっているものを継承する)によって作成されたすべてのファイルに適用されますfork()。ユーザーは~/.profile、これをに設定する必要があり、ディレクトリとは関係のない、異なるアクセス許可が必要なものに注意する必要があります。 モジュールは、異なることをするときに異なる設定が必要な場合に便利です。

POSIX ACLを使用できる場合は、物事を少しうまく制御できます。許可マスクとグループの両方を指定し、それらを適切に伝播できるようにする必要があります。ただし、POSIX ACLのサポートは多少異なります。


6
親ディレクトリにsetgidを設定した後に作成されたサブディレクトリには、setgidが自動的に設定されます。
アローマスター

2
@Arrowmaster:一部のシステムでは、おそらくすべてではありません。OSXでテストしましたが、少なくとも非ルートでは伝播しません。
ギーコサウルス

2
Debian(および他のほとんどのLinuxディストリビューションを想定しています)では、setgidとグループ名の両方が伝播します。
アローマスター

3
OS Xでは、ディレクトリのsetgidビットは無視されます。新しいファイルとディレクトリには、常にそれらを含むディレクトリのグループが与えられます。
ジョンフラットネス

また、ファイルをfooにコピーまたは移動(cp resp。mvを使用)して、必要なアクセス許可を自動的に取得することは可能-rwxrwx--- A Gですか()?
学生

106

可能な限り、アクセス制御リスト(ACL)を使用します

Linuxでは、使用しているファイルシステムがACLをサポートしていることを確認してください(ほとんどのUNIXファイルシステムがサポートしています)。マウントオプションを変更してACLを有効にする必要がある場合があります。ext2/ ext3 / ext4では、aclマウントオプションを明示的に指定する必要があるため、エントリはの/etc/fstabようになり/dev/sda1 / ext4 errors=remount-ro,acl 0 1ます。mount -o remount,acl /再起動せずにACLをアクティブにするために実行します。また、ACLコマンドラインツールgetfaclをインストールしsetfacl、通常、というパッケージで提供されますacl

ワンタイムセットアップが終了したので、ディレクトリのACLを変更して、グループに書き込み権限を付与し、これらの権限を新しく作成されたファイルに継承させます。Linuxの場合:

setfacl -d -m group:GROUPNAME:rwx /path/to/directory
setfacl -m group:GROUPNAME:rwx /path/to/directory

ACLがオプションでない場合は、グループが所有するディレクトリを作成し、GROUPNAMEその権限を2775または2770に設定しますchmod g+rwxs /path/to/directorysここにsetgidビットを意味します。ディレクトリの場合、このディレクトリで作成されたファイルは、そのディレクトリを所有するグループに属することを意味します。

また、AliceとBobのumaskを設定して、すべてのファイルをデフォルトでグループ書き込み可能にする必要があります。ほとんどのシステムのデフォルトのumaskは022です。これは、ファイルがグループやその他の書き込みを除くすべての許可を持つことができることを意味します。これを002に変更します。これは、他者による書き込み許可のみを禁止することを意味します。通常、その設定は次の場所に配置します~/.profile

umask 002    # or 007 to have files not readable by others

6
+1-非常に徹底的な答え。再マウント/オンザフライで実行できるとは知らなかった。知っておくといい。
boehj

1
そのディレクトリ内に含まれるファイルには、書き込み許可を無効にするr--マスクがあるため、setfacl -dコマンドは機能しません。助けてください。unix.stackexchange.com/questions/71743/を
ベンマッキャン

2
@its_me Q1:オプション付きのmountコマンドを表示するremountため、を使用しませんfstab。持つacl二回は、ファイルシステムがマウントされてたことを意味しacl、すでにオプション、およびそれ無害。ちなみに、最近のカーネルではext4 acl のデフォルトです(この回答を書いたとき、パッチはまだ新しいものでした)。Q2:どちらの順序でもコマンドを実行できます。
ジル14年

1
@its_meはい、あなたの理解は正しいです。エントリを追加する順番に関係ないということだけです
ジル14年

8
あなたが使用するために、次に答えを改善しなければならないGROUPNAME代わりに、Gそれをより明確にするために、
knocte

24

この質問はlinuxに適していaclます。OSを記載していないので、以下ではLinuxを想定します。以下にセッションの例を示します。

本当に良いaclチュートリアルは知りませんが、http: //www.vanemery.com/Linux/ACL/linux-acl.htmlよりも悪いことがあります

デフォルトaclはローカルumaskのように動作することに注意してください。少なくともLinuxではumaskがグローバルに適用されるため、これがローカルumaskの効果を得る唯一の方法です。何らかの理由で、これはあまり知られていない機能です。ネットには、ローカルのumaskオーバーライドを尋ねる人々が散らばっていますが、を使用することを考えている人はほとんどいないようaclです。

また、aclサポートを使用して作業しているパーティションをマウントする必要があることに注意してください。

/dev/mapper/debian-acl /mnt/acl        ext3    defaults,acl        0       2

セッションは次のとおりです。

/mnt/acl$ mkdir foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: faheem
user::rwx
group::r-x
other::r-x

のグループをfoostaff設定し、グループとユーザーのACLをに設定foorwxます。

/mnt/acl$ chgrp staff foo
/mnt/acl$ setfacl -R -m u::rwx,g::rwx foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x

ユーザーとグループのデフォルトACLも設定しますrwx。これは、ファイルとディレクトリが継承するパーミッションを定義しますfoo。したがって、fooの下に作成されたすべてのファイルとディレクトリにはグループのアクセス許可がありrwます。

/mnt/acl$ setfacl -d --set u::rwx,g::rwx,o::- foo
/mnt/acl$ getfacl foo
# file: foo
# owner: faheem
# group: staff
user::rwx
group::rwx
other::r-x
default:user::rwx
default:group::rwx
default:other::---

次に、いくつかのファイルfooをユーザーfaheemおよびとして作成しますjohn

/mnt/acl$ cd foo
/mnt/acl/foo$ touch bar

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

ファイルをリストします。が所有するファイルとが所有するファイルの両方がグループ権限で作成さfaheemれてjohnいることに注意してくださいrw

/mnt/acl/foo$ ls -la
total 3
drwxrwxr-x+ 2 faheem staff  1024 May  9 01:22 .
drwxr-xr-x  4 faheem faheem 1024 May  9 01:20 ..
-rw-rw----  1 faheem faheem    0 May  9 01:20 bar
-rw-rw----  1 john   john      0 May  9 01:22 baz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.