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 1
mount -o remount,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/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
グループに設定し、staff
aclをグループとユーザーに設定します。foo
rwx
/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
今ユーザー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