特定のディレクトリ内の新しいファイルのデフォルトグループとアクセス許可を指定する


15

複数のユーザーが共有するプロジェクトがある特定のディレクトリがあります。これらのユーザーはSSHを使用してこのディレクトリにアクセスし、ファイルを変更/作成します。

このプロジェクトは、特定のユーザーグループのみが書き込み可能である必要があります。「mygroup」と呼びましょう。SSHセッション中、現在のユーザーによって作成されたすべてのファイル/ディレクトリは、デフォルトでグループ「mygroup」によって所有され、グループ書き込み可能な権限を持っている必要があります。

私は許可の問題を解決できますumask

$ cd project
$ umask 002
$ touch test.txt

ファイル「test.txt」はグループ書き込み可能になりましたが、「mygroup」ではなく、デフォルトグループ(「mislav」、ユーザー名と同じ)に属します。chgrp再帰的に目的のグループを設定できますが、セッション中にumaskがデフォルトのアクセス権を変更するように、グループを暗黙的に設定する方法があることを知りたいと思いました。

この特定のディレクトリには、作業コピーと共有gitのレポであり、私はしたいgit checkoutgit reset操作が作業コピーで作成された新しいファイルの正しいマスクとグループを設定します。OSはUbuntu Linuxです。

更新:同僚は、POSIX ACLの getfacl / setfaclを調べる必要があると提案していますumask 002が、現在のセッションで組み合わせた以下のソリューションは私にとって十分であり、はるかに簡単です。

回答:


19

特定のディレクトリ内のすべてのファイルにグループ権限を継承させるには、ディレクトリで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

ありがとう。グーグルで私はこれを見つけることができませんでしたことは興味深い
mislav

6

既存のフォルダーでこれを実行する場合は、すべてのサブフォルダーに対してsetgidビットが有効になっていることを確認する必要があります。ただし、ファイルには必要ありませんし、おそらくファイルにも必要ありません。すべてのサブフォルダーに再帰的に設定する方法を次に示します。

find /path/to/base/dir -type d -exec chmod g+s {} +

4

ソースを見つけることはできませんが、setgid裸のgitリポジトリでこの問題を解決するために使用するのはあなたの場合であり、推奨されておらず、場合によっては問題を引き起こす可能性があります。

Gitはcore.sharedRepositoryフラグを介してこれらすべてを処理できます。同じ問題があり、次のように解決しました。

repogroupあなたのグループであると仮定し、あなたはcdリポジトリディレクトリにいる必要があります:

最初に共有フラグを次のように変更しgroupます。

git config core.sharedRepository group 

注:ここgroupでは、グループ名ではなく、キーワードを使用する必要があります。これは、オプションを使用してベアリポジトリを作成するのと同じです--shared=group

次に、リポジトリ全体のグループを変更します。

chgrp -R repogroup .

既存のディレクトリがグループ書き込み可能(g+w)であり、既存の実行可能ファイルもグループ実行可能ファイル(g+X)になるようにするには、次のことも必要です。

chmod -R g+wX .

これが完了したら、Gitは尊重するshared=groupフラグを、あなたが再び必要は決してないだろうので、両方の既存および新規のファイルに対して、次のようにグループ権限の世話をしますumaskchgrp

見つかったらソースをコメントに入れます。


3

* nixに関して言えば、私は専門家ではありませんが、探しているのはsetgidと呼ばれるものだと思います。

こちらをご覧ください


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.