web-dev-qa-db-ja.com

複数のグループをディレクトリ所有者として設定する

私のサーバーには、ディレクトリ/srv/svnがあります。

このディレクトリに、devFirmAdevFirmBdevFirmCなどの複数のグループ所有権を設定することはできますか?

ポイントは、私はSubversionバージョン管理で複数のリポジトリにまたがる複数のユーザーを管理したいのですが、リポジトリのルートディレクトリであるmerge/srv/svnの方法がわかりません。たとえば、FirmAFirmBFirmCという3つの会社があります。ここで、/srv/svn内にFirmAFirmBFirmCの3つのディレクトリを作成し、その中にプロジェクトごとにリポジトリを作成しました。 /srv/svn内のすべての要素はroot:rootが所有しているため、権限スキームを確立する方法がわかりません。

35
KernelPanic

これを正確に理解し、絶えず遭遇するなら、これは非常に一般的な問題です。些細なグループ化の問題すべてにACLを使用すると、管理できないシステムが大量に存在することになります。この状況ではなく、他の方法でそれを実行できない場合、彼らはベストプラクティスを使用しています。これは私が強くお勧めする方法です。

まず、umaskを002に設定する必要があります。これは、グループがそれ自体と共有できるようにするためです。通常、/etc/profile.d/firm.shのようなファイルを作成し、umaskを使用してテストコマンドを追加します。

[ $UID -gt 10000 ] && umask 002

次に、ディレクトリをそれぞれのグループに設定する必要があります。

chgrp -R FirmA /srv/svn/FirmA 
chgrp -R FirmB /srv/svn/FirmB
chgrp -R FirmC /srv/svn/FirmC

最後に、SGIDビットを適切に設定する必要があります。これにより、グループは常に設定したグループにとどまります。これにより、書き込まれたファイルがライターのGIDに設定されなくなります。

find /srv/svn/FirmA -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmB -type d -print0 | xargs -0 chmod 2775
find /srv/svn/FirmC -type d -print0 | xargs -0 chmod 2775

find /srv/svn/FirmA -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmB -type f -print0 | xargs -0 chmod 664
find /srv/svn/FirmC -type f -print0 | xargs -0 chmod 664

最後に、他のユーザーがディレクトリにアクセスできないようにする場合。

chmod 2770 /srv/svn/FirmA
chmod 2770 /srv/svn/FirmB
chmod 2770 /srv/svn/FirmC
18
J. M. Becker

ownerとしてグループを1つだけ持つことができます。

ただし、 アクセス制御リスト を使用すると、他のグループの権限を定義できます。

コマンドgetfaclを発行してACLがインストールされているかどうかを確認します。システムにACLがインストールされていない場合は、 aclパッケージ に含まれるコマンドラインツールをSudo apt-get install aclでインストールします。

getfacl を使用すると、ディレクトリまたはその他のファイルのACL情報を読み取ることができ、 setfacl を使用すると、ファイルにグループを追加できます。

例えば:

setfacl -m g:devFirmB:rwx /srv/svn/  

グループdevFirmBread、wで追加しますrite、exディレクトリ/srv/svnへの権限を実行します。

そのディレクトリに作成されたファイルも複数のグループに所有させる場合は、ACLをデフォルトのACLとして設定します。デフォルトのグループエントリのXは、「所有者(または他の誰か)が実行可能な場合に実行を許可する」ことを意味します。

setfacl -m g:devFirmB:rwx /srv/svn/  
setfacl -d -m g:devFirmB:rwX /srv/svn/  
27
jcbermu

従来のUnix権限を持つ複数のLinuxグループがファイルを所有することはできません。 (ただし、 ACL で可能です。)

ただし、次の回避策を使用して、グループdevFirmsdevFirmA、およびdevFirmBのすべてのユーザーを含む新しいグループ(devFirmCなど)を作成することができます。 。
次のコマンドで新しいユーザーグループを作成します。

Sudo addgroup NEWGROUPNAME

まず、lid-コマンドを取得するためにid-utilsをインストールする必要があるかもしれません:

Sudo apt-get install id-utils

次に、次のコード行を実行して、SOURCEGROUPのすべてのユーザーをTARGETGROUPに簡単にコピーできます。もちろん、コピーするグループごとにコマンドを1回実行する必要があります。大文字のプレースホルダーを実際のグループ名に置き換えることを忘れないでください。

for u in $(lid -g -n SOURCEGROUP); do Sudo usermod -a -G TARGETGROUP $u; done

したがって、あなたのケースでは、コマンドを実行する必要があります(一度にすべての行):

Sudo addgroup devFirms &&
for u in $(lid -g -n devFirmA); do Sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmB); do Sudo usermod -a -G devFirms $u; done &&
for u in $(lid -g -n devFirmC); do Sudo usermod -a -G devFirms $u; done

これらのコマンドは、ソースグループのcurrentメンバーであるすべてのユーザーのみをコピーすることに注意してください。後で追加されるすべてのユーザーも、adduserコマンドを使用して手動で共通グループに追加する必要があります。もう一度大文字のプレースホルダーを実際のユーザー名とグループ名(devFirms)に置き換えます。

Sudo adduser NEWUSER TARGETGROUP

Justin Ethier のおかげで Unix&Linux.SEの回答をありがとう:あるグループのすべてのユーザーを別のグループに追加しますか?

6
Byte Commander

複数のグループまたはユーザーに異なる権限を提供するには、次のコマンドを使用します(RHEL 6および7でテスト済み)。

グループの新しいオーナーを作成するには:

setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>

現在のACL設定を確認するには:

getfacl <directory_name>
2
Mr.H

いいえ、できません。

各ファイル(およびディレクトリ)には、1つのユーザーと1つのグループしか含めることができません。

1
Uwe Plonus