ディレクトリ内のすべての新しいファイルがグループからアクセスできるようにする

ディレクトリ内のすべての新しいファイルがグループからアクセスできるようにする

2人のユーザーAliceとBobがあり、GROUPNAMEグループとフォルダがあるとしますfoo。どちらのユーザーもGROUPNAMEのメンバーです(Linuxとext3を使用)。

ユーザーAliceとしてファイルを保存すると、foo権限は次のようになります-rw-r--r-- Alice Alice。しかし、特定のサブディレクトリに保存されているすべてのファイルに権限foo-rwxrwx--- Alice GROUPNAME所有者Alice、GROUPNAMEなど)があるように実装することは可能ですか?

答え1

可能であればACL(アクセス制御リスト)

Linuxでは、使用しているファイルシステムがACLをサポートしていることを確認してください(ほとんどのUNIXファイルシステムはサポートしています)。 ACL をイネーブルにするには、マウントオプションを変更する必要があります。 ext2/ext3/ext4の場合2.6.39 以降、ACL はカーネルでデフォルトで有効になります。。以前のカーネルではマウントオプションを明示的に指定する必要があるため、再起動せずにACLを有効にするには、のエントリがacl.Runと/etc/fstab等しくなければなりません。また、一般的に呼ばれるパッケージに付属のACLコマンドラインツールもインストールします。/dev/sda1 / ext4 errors=remount-ro,acl 0 1mount -o remount,acl /getfaclsetfaclacl

これでワンタイム設定が完了したら、ディレクトリの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/directory。ここでこれが意味するのは、sディレクトリのsetgidビットです。これは、このディレクトリに作成されたファイルがディレクトリを所有するグループに属することを意味します。

また、AliceとBobの設定も設定する必要があります。マスクデフォルトでは、すべてのファイルグループを書き込み可能にします。ほとんどのシステムでは、デフォルトのumaskは022です。これは、ファイルがグループ固有の書き込みおよびその他の権限を除くすべての権限を持つことができることを意味します。 002に変更すると、他の権限を持つ書き込みのみが禁止されます。通常、この設定を次の項目に入れます~/.profile

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

答え2

ディレクトリを作成して、割り当てられた権限ビットとumaskグループを制御できます。設定到着する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これは既存のディレクトリに自動的に伝播されません。 OS Xでは、その後、次のディレクトリの下にディレクトリを作成します。設定ディレクトリは次のとおりです。設定、後者はグループに属していますがGROUPNAME。ほとんどのLinuxディストリビューションでは設定ビットは新しいサブディレクトリに伝播されます。

また、これはumaskプロセス属性であり、そのプロセスとその子プロセスによって生成されたすべてのファイルに適用されます(これらのファイルは親umaskプロセスfork()から実質的に継承されます)。ユーザーはこれを設定する必要があり~/.profile、他の権限が必要なディレクトリに関連していないことに注意する必要があります。 基準寸法他のタスクを実行するときに他の設定が必要な場合に便利です。

POSIX ACLが利用可能な場合は、権限マスクとグループを指定し、それらを賢明に伝播することが可能になります。ただし、POSIX ACLのサポートは多少異なります。

答え3

この質問はLinuxに非常に適しています。acl。オペレーティングシステムを指定していないので、以下ではLinuxを想定します。これはサンプルセッションです。

私は本当に良いチュートリアルを知りませんがacl、あなたはそれよりも良いことができますVan Emeryの「Fedora Core 2(Linuxカーネル2.6.5)でACLを使用する」

デフォルトはaclローカルumaskのように動作します。少なくともLinuxではumaskがグローバルに適用されるので、これがローカルumaskの効果を得る唯一の方法です。何らかの理由でこれはよく知られていない機能です。 Webにはローカル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

fooグループに設定し、staffaclをグループとユーザーに設定します。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

ユーザーとグループのデフォルトのACLrwxも設定します。これはファイルとディレクトリに対する継承された権限を定義します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今ユーザーfaheemjohn

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

# switch to user john for this next command.

/mnt/acl/foo$ touch baz

ファイルを一覧表示します。ファイルはグループ権限で所有およびfaheem作成されます。johnrw

/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

関連情報