複数のユーザーが共有するプロジェクトがある特定のディレクトリがあります。これらのユーザーは、SSHを使用してこのディレクトリにアクセスし、ファイルを変更または作成します。
このプロジェクトは、特定のユーザーグループにのみ書き込み可能である必要があります。「mygroup」と呼んでください。 SSHセッション中、現在のユーザーが作成したすべてのファイル/ディレクトリは、デフォルトでグループ "mygroup"が所有し、グループに書き込み可能な権限を持っている必要があります。
umask
で権限の問題を解決できます:
$ cd project
$ umask 002
$ touch test.txt
ファイル「test.txt」はグループ書き込み可能になりましたが、まだ私のデフォルトグループ(「ユーザー名」と同じ「mislav」)に属しており、「mygroup」には属していません。 chgrp
を再帰的に使用して目的のグループを設定できますが、セッション中にumaskがデフォルトのアクセス許可を変更するなど、いくつかのグループを暗黙的に設定する方法があることを知りたいと思いました。
この特定のディレクトリは、作業コピーを含む共有gitリポジトリであり、git checkout
およびgit reset
操作により、作業コピーで作成された新しいファイルに正しいマスクとグループを設定します。 OSはUbuntu Linuxです。
更新:POSIX ACL のgetfacl/setfaclを調べる必要があると同僚が示唆していますが、以下の解決策はumask 002
現在のセッションでは、私には十分で、はるかに単純です。
特定のディレクトリ下のすべてのファイルにグループ権限を継承させるには、ディレクトリでsetgidビットを使用する必要があります。 このリンク を参照してください。
$ mkdir test
$ Sudo chown raphink.staff test
$ ls -lhd test
drwxr-xr-x 2 raphink staff 4.0K 2009-12-21 16:19 test
$ Sudo chmod g+s test # Set the setgid bit
$ ls -lhd test
drwxr-sr-x 2 raphink staff 4.0K 2009-12-21 16:21 test
$ touch test/foo
$ ls -lh test
total 0
-rw-r--r-- 1 raphink staff 0 2009-12-21 16:23 foo
既存のフォルダでこれを行う場合は、すべてのサブフォルダでもsetgidビットが有効になっていることを確認する必要があります。ただし、ファイルでは必要ありません。また、ファイルでも必要ありません。すべてのサブフォルダに再帰的に設定する方法は次のとおりです。
find /path/to/base/dir -type d -exec chmod g+s {} +
私はソースを見つけることができませんが、setgid
を使用してベアgitリポジトリのこの問題を解決することは、私があなたのケースだと思いますが、非推奨であり、場合によっては問題を引き起こす可能性があります。
Gitはcore.sharedRepository
フラグを介してこれらすべてを処理できます。私は同じ問題を抱えており、それを次のように解決しました:
repogroup
がグループで、repoディレクトリにcd
があると仮定します。
最初に共有フラグをgroup
に変更します。
git config core.sharedRepository group
注:ここでは、グループ名ではなく、キーワードgroup
を使用する必要があります。これは、オプション--shared=group
を使用してベアリポジトリを作成するのと同じです。
次に、リポジトリ全体のグループを変更します。
chgrp -R repogroup .
既存のディレクトリがグループ書き込み可能(g+w
)であり、既存の実行可能ファイルもグループ実行可能(g+X
)になることを確認するには、次の操作も必要です。
chmod -R g+wX .
これを実行すると、gitはshared=group
フラグを尊重し、既存のファイルと新しいファイルの両方について、以下のグループ権限を処理します。そのため、umask
またはchgrp
に再度アクセスする必要はありません。
見つかった場合は、コメントにソースを追加します。
* nixに関しては、私はあまり専門家ではありませんが、探しているものはsetgidと呼ばれていると思います。
こちら を参照してください。
ACLを使用せずにLinux/UNIXで親ディレクトリの権限を継承することは困難です。しかし、デフォルトのファイル権限を割り当てる方法があります。以下のリンクを確認してください