私のサーバーにはディレクトリがあります/srv/svn
。
devFirmA
、devFirmB
などの複数のグループ所有権を持つようにこのディレクトリを設定できますかdevFirmC
?
要点は、subversion
複数のリポジトリにわたって複数のユーザーを管理するためにバージョン管理が必要ですが、どうすればよいかわからないということです。マージ /srv/svn
、リポジトリのルートディレクトリ、権限。たとえば、、、FirmA
というFirmB
3つの会社がありますFirmC
。これで、内部に、という/srv/svn
3つのディレクトリを作成し、その中に各プロジェクトのリポジトリを作成しました。これで、内部のすべての要素がの所有であるため、権限スキームを設定する方法がわかりません。動作しません。 、それとも私ですか?間違っていますか?FirmA
FirmB
FirmC
/srv/svn
root: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.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
答え3
既存のUnix権限を持つ複数のLinuxグループはファイルを所有できません。 (しかし、ACLを使用できます。.)
ただし、次の回避策を使用して、そのdevFirms
グループのすべてのユーザーを含む新しいグループ(たとえば)を作成できますdevFirmA
。次のコマンドを使用して新しいユーザーグループを作成できます。devFirmB
devFirmC
sudo addgroup NEWGROUPNAME
まず - コマンドをid-utils
取得するためにインストールする必要があるかもしれません。lid
sudo apt-get install id-utils
次に、次のコード行を実行して、すべてのユーザーSOURCEGROUP
をTARGETGROUP
。もちろん、複製したい各グループに対してコマンドを一度だけ実行する必要があります。大文字のプレースホルダを実際のグループ名に変更することを忘れないでください。
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>