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

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

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

devFirmAdevFirmBなどの複数のグループ所有権を持つようにこのディレクトリを設定できますかdevFirmC

要点は、subversion複数のリポジトリにわたって複数のユーザーを管理するためにバージョン管理が必要ですが、どうすればよいかわからないということです。マージ /srv/svn、リポジトリのルートディレクトリ、権限。たとえば、、、FirmAというFirmB3つの会社がありますFirmC。これで、内部に、という/srv/svn3つのディレクトリを作成し、その中に各プロジェクトのリポジトリを作成しました。これで、内部のすべての要素がの所有であるため、権限スキームを設定する方法がわかりません。動作しません。 、それとも私ですか?間違っていますか?FirmAFirmBFirmC/srv/svnroot:root

答え1

1セットしか持てません。所有者

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

ACLがインストールされていることを確認するには、コマンドを実行してくださいgetfacl。システムにまだACLがインストールされていない場合は、次の場所にあるコマンドラインツールをインストールしてください。aclパックそして:sudo apt-get install acl

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

たとえば、

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

devFirmBグループを追加アル字型頭、勝つ儀式,eXディレクトリに対する権限を実行します/srv/svn

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

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

答え2

これは非常に一般的な質問であり、私が正しく理解した場合はかなり頻繁に遭遇する質問です。すべてのマイナーなグループ化の問題を解決するためにACLを使用する場合は、管理するのが難しい大規模なシステムを持つことになります。彼らはこの状況以外の方法ではできないときにベストプラクティスを使用しています。これは私が強くお勧めする方法です。

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

[ $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

答え3

既存のUnix権限を持つ複数のLinuxグループはファイルを所有できません。 (しかし、ACLを使用できます。.)

ただし、次の回避策を使用して、そのdevFirmsグループのすべてのユーザーを含む新しいグループ(たとえば)を作成できますdevFirmA。次のコマンドを使用して新しいユーザーグループを作成できます。devFirmBdevFirmC

sudo addgroup NEWGROUPNAME

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

sudo apt-get install id-utils

次に、次のコード行を実行して、すべてのユーザーSOURCEGROUPTARGETGROUP。もちろん、複製したい各グループに対してコマンドを一度だけ実行する必要があります。大文字のプレースホルダを実際のグループ名に変更することを忘れないでください。

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

このコマンドはすべてのユーザーだけをコピーすることに注意してください。現在のソースグループのメンバーです。後で追加された各ユーザーは、adduserこのコマンドを使用してパブリックグループに手動で追加する必要があります。大文字のプレースホルダーを実際のユーザーとグループ名(devFirms)に戻します。

sudo adduser NEWUSER TARGETGROUP

ありがとうジャスティン・エティア彼の答えはUnix&Linux.SE:あるグループのすべてのユーザーを別のグループに追加しますか?

答え4

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

グループの新しい所有者になるには、次の手順に従います。

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

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

getfacl <directory_name>

関連情報