私のサーバーには、ディレクトリ/srv/svn
があります。
このディレクトリに、devFirmA
、devFirmB
、devFirmC
などの複数のグループ所有権を設定することはできますか?
ポイントは、私はSubversion
バージョン管理で複数のリポジトリにまたがる複数のユーザーを管理したいのですが、リポジトリのルートディレクトリであるmerge/srv/svn
の方法がわかりません。たとえば、FirmA
、FirmB
、FirmC
という3つの会社があります。ここで、/srv/svn
内にFirmA
、FirmB
、FirmC
の3つのディレクトリを作成し、その中にプロジェクトごとにリポジトリを作成しました。 /srv/svn
内のすべての要素はroot:root
が所有しているため、権限スキームを確立する方法がわかりません。
これを正確に理解し、絶えず遭遇するなら、これは非常に一般的な問題です。些細なグループ化の問題すべてに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
ownerとしてグループを1つだけ持つことができます。
ただし、 アクセス制御リスト を使用すると、他のグループの権限を定義できます。
コマンドgetfacl
を発行してACLがインストールされているかどうかを確認します。システムにACLがインストールされていない場合は、 acl
パッケージ に含まれるコマンドラインツールをSudo apt-get install acl
でインストールします。
getfacl
を使用すると、ディレクトリまたはその他のファイルのACL情報を読み取ることができ、 setfacl
を使用すると、ファイルにグループを追加できます。
例えば:
setfacl -m g:devFirmB:rwx /srv/svn/
グループdevFirmB
をread、wで追加しますrite、exディレクトリ/srv/svn
への権限を実行します。
そのディレクトリに作成されたファイルも複数のグループに所有させる場合は、ACLをデフォルトのACLとして設定します。デフォルトのグループエントリのX
は、「所有者(または他の誰か)が実行可能な場合に実行を許可する」ことを意味します。
setfacl -m g:devFirmB:rwx /srv/svn/
setfacl -d -m g:devFirmB:rwX /srv/svn/
従来のUnix権限を持つ複数のLinuxグループがファイルを所有することはできません。 (ただし、 ACL で可能です。)
ただし、次の回避策を使用して、グループdevFirms
、devFirmA
、および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の回答をありがとう:あるグループのすべてのユーザーを別のグループに追加しますか?
複数のグループまたはユーザーに異なる権限を提供するには、次のコマンドを使用します(RHEL 6および7でテスト済み)。
グループの新しいオーナーを作成するには:
setfacl -m g:<group_name>:<rights you want to give eg.rwx> -R <directory_name>
現在のACL設定を確認するには:
getfacl <directory_name>
いいえ、できません。
各ファイル(およびディレクトリ)には、1つのユーザーと1つのグループしか含めることができません。