web-dev-qa-db-ja.com

グループのユーザーは、別のユーザーのホームディレクトリにあるファイルにアクセスできますか?

3人のユーザー[〜#〜] a [〜#〜][〜#〜] b [〜#〜][〜#〜 ] c [〜#〜]グループ「admin」内。ホームディレクトリにprojectフォルダがある別のユーザー '[〜#〜] d [〜#〜]'があります。そのフォルダの所有者として[〜#〜] d [〜#〜]を作成し、chgrpを使用してグループとして「admin」を割り当てました。グループと所有者にはすべての権限がありますが、それでも[〜#〜] a [〜#〜][〜#〜] b [〜#〜]または- [〜#〜] c [〜#〜]はフォルダにアクセスできません。私は2つの質問があります:

  1. 他のユーザーが別のユーザーのディレクトリにあるものにアクセスすることも可能ですか?

  2. グループに権限を与えると、そのグループのユーザーは、ユーザーのホームディレクトリの外部にあるファイルにアクセスできるようになりますか?

編集:プロジェクトの所有者とグループを設定する方法は次のとおりです

Sudo chown -R D project
Sudo chgrp -R admin project

[〜#〜] d [〜#〜]のホームディレクトリにあるprojectフォルダーにアクセスしようとしたときにエラーが発生しました([〜#〜] a [〜#〜]

cd /home/D/project
-bash: cd: /home/D/project: Permission denied

ls -laコマンドの出力は次のとおりです。

drwxrwsr-x 7 D admin      4096 Nov 18 13:06 project

グループadminの説明は次のとおりです。

getent group admin
admin_users:x:501:A,B,C

また、ユーザーからadminと入力するとグループgroupsが表示されない[〜#〜] d [〜#〜]ですが、 cut -d: -f1 /etc/groupを使用しました。私が参照しているユーザー[〜#〜] d [〜#〜]は実際にはec2-user(AmazonサーバーのデフォルトのFedoraユーザー)です

最終的に、私はサーバー上にgitリポジトリーをセットアップしています。 [〜#〜] d [〜#〜]のホームディレクトリにリポジトリを作成しましたが、[〜#〜] a [〜#〜]を希望します[〜#〜] b [〜#〜]および[〜#〜] c [〜#〜]それにアクセスする(そしてそれらを複製する)

7
Daud

必要だと思われるいくつかのポイント(私はこれらの問題の専門家ではないことは認めますが)であり、RobertLの見事な完全な回答ではカバーされていませんでした。

  1. 他のユーザーが実際にグループadminにログインしていることを確認してください:

A$ newgrp admin

ユーザーは既にグループに属しているため、グループパスワードを設定する必要があると思いますnotもし、するなら:

A$ Sudo chgpasswd
admin:secret(標準入力に入力)

  1. [〜#〜] d [〜#〜]のホームディレクトリがグループadminにあり、グループ検索可能であることを確認してください。

D$ chgrp admin ~
D$ chmod g+x ~
D$ ls -lad ~
drwx--x--- 3 D admin 4096 Nov 24 19:25 /home/D

ユーザーがディレクトリまたはそのサブディレクトリprojectを入力できるように、ディレクトリは検索可能である必要があります。グループ化する必要はありません---読み取り可能、つまり[〜#〜] d [〜#〜]の独自のファイル名は引き続き非公開です。他のユーザーがprojectに簡単にアクセスできるようにするには、他のユーザーにそのシンボリックリンクを作成してもらいます。それ以外の場合は、パス全体を毎回入力する必要があります(シェルはパス名を読み取ることができないため、オートコンプリートは機能せず、パス名のみにアクセスできます)。

5
Tom Zych
  1. はい、ユーザーは別のユーザーのホームディレクトリにあるファイルにアクセスできます。
  2. いいえ、システムファイルのアクセス許可以外でのホームディレクトリの特別な扱いはありません。 「グループへの権限の付与」には、グループ所有権の付与とグループ権限の設定の2つの部分が含まれます。あなたの例は所有権のみを扱います。

chmodコマンドでpermissionsを再帰的に設定できますが、それだけでは、グループの1つのメンバーによって作成された新しいファイルが他の人がアクセスできます。

これまでに行ったことを十分な詳細を含めて説明し、gitリポジトリを共有するという目標を表明していただきありがとうございます。

まず、UnixとLinuxでグループファイル共有を一般的な方法で実行する方法を見てから、gitの考慮事項をいくつか見てみましょう。

基本的なグループファイル共有構成

これは、UnixやGNUなどでのこのタイプのファイル共有の基本です。これは、グループのすべてのメンバーがグループ内の他のユーザーが作成したファイルの読み取りおよび書き込み権限を持つ1つ以上のディレクトリを設定する簡単な方法です。

共通のユーザーグループがgitusersで、ディレクトリがrepoであるとします。

  1. 共有メンバーを共通のグループ(たとえば、gitusers)に入れます。

  2. グループ内のすべてのユーザーに対してumask 002を設定します。これは、ほとんどのファイルがデフォルトでグループ書き込み可能として作成されることを示します。これは、さまざまなシェル起動ファイル(/etc/bash.bashrcなど)で設定できます。 GNU/Linuxシステムでは、より詳細な情報について、man 8 pam_umaskおよびman umaskを参照してください。

  3. すべての共有ファイルにグループの所有権を再帰的に設定します(-R):

    chgrp -R gitusers repo
    
  4. すべてのファイルに対してグループの読み取りおよび書き込み権限を再帰的に設定します。

    chmod -R g+rw repo
    
  5. リポジトリのset group id on execution bitsetgid)とすべてのサブディレクトリを設定します。 setgidは、そのディレクトリに新しく作成されたファイルとサブディレクトリが親ディレクトリと同じグループ所有権を継承することを示します。新しいサブディレクトリにもsetgidビットセットがあり、再帰的な効果があります。

    find repo -type d -exec chmod g+s {} \;
    

上記の手順の後、同じグループgitusersのすべてのユーザーがお互いのファイルを読み書きできるようになり、gitusers共有グループ。 chownだけでなく、任意の共有目的で、chmodfind、およびgitコマンドを必要な数のディレクトリに複製できます。

gitリポジトリの共有

gitは上記の設定変更のみで問題なく動作するようです。ただし、gitは、共有とグループの権限についても知っています(実際に上記のいくつかを実行する場合があります)。

共有gitリポジトリを作成する場合は、次のオプションを検討してください:

git init --bare --shared=group  repo

既存のリポジトリがある場合は、次の設定を検討してください。

  1. core.bare
  2. core.sharedRepository = group

詳細は git-initのマニュアルページ および the git-configのマニュアルページ を参照してください。

ノート

最小限のグループ共有gitリポジトリは一般的な例と同じ手順の一部を処理しますが、一貫性を確保し、設定を簡単にするために、一般的な例の手順も実行することをお勧めします他の共有ディレクトリ。

7
RobertL