3人のユーザー[〜#〜] a [〜#〜]、[〜#〜] b [〜#〜]と[〜#〜 ] c [〜#〜]グループ「admin」内。ホームディレクトリにproject
フォルダがある別のユーザー '[〜#〜] d [〜#〜]'があります。そのフォルダの所有者として[〜#〜] d [〜#〜]を作成し、chgrp
を使用してグループとして「admin」を割り当てました。グループと所有者にはすべての権限がありますが、それでも[〜#〜] a [〜#〜]、[〜#〜] b [〜#〜]または- [〜#〜] c [〜#〜]はフォルダにアクセスできません。私は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 [〜#〜]それにアクセスする(そしてそれらを複製する)
必要だと思われるいくつかのポイント(私はこれらの問題の専門家ではないことは認めますが)であり、RobertLの見事な完全な回答ではカバーされていませんでした。
admin
にログインしていることを確認してください:
A$ newgrp admin
ユーザーは既にグループに属しているため、グループパスワードを設定する必要があると思いますnotもし、するなら:
A$ Sudo chgpasswd
admin:secret
(標準入力に入力)
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
に簡単にアクセスできるようにするには、他のユーザーにそのシンボリックリンクを作成してもらいます。それ以外の場合は、パス全体を毎回入力する必要があります(シェルはパス名を読み取ることができないため、オートコンプリートは機能せず、パス名のみにアクセスできます)。
chmod
コマンドでpermissionsを再帰的に設定できますが、それだけでは、グループの1つのメンバーによって作成された新しいファイルが他の人がアクセスできます。
これまでに行ったことを十分な詳細を含めて説明し、git
リポジトリを共有するという目標を表明していただきありがとうございます。
まず、UnixとLinuxでグループファイル共有を一般的な方法で実行する方法を見てから、git
の考慮事項をいくつか見てみましょう。
これは、UnixやGNUなどでのこのタイプのファイル共有の基本です。これは、グループのすべてのメンバーがグループ内の他のユーザーが作成したファイルの読み取りおよび書き込み権限を持つ1つ以上のディレクトリを設定する簡単な方法です。
共通のユーザーグループがgitusers
で、ディレクトリがrepo
であるとします。
共有メンバーを共通のグループ(たとえば、gitusers
)に入れます。
グループ内のすべてのユーザーに対してumask 002
を設定します。これは、ほとんどのファイルがデフォルトでグループ書き込み可能として作成されることを示します。これは、さまざまなシェル起動ファイル(/etc/bash.bashrc
など)で設定できます。 GNU/Linuxシステムでは、より詳細な情報について、man 8 pam_umask
およびman umask
を参照してください。
すべての共有ファイルにグループの所有権を再帰的に設定します(-R
):
chgrp -R gitusers repo
すべてのファイルに対してグループの読み取りおよび書き込み権限を再帰的に設定します。
chmod -R g+rw repo
リポジトリのset group id on execution bit
(setgid
)とすべてのサブディレクトリを設定します。 setgid
は、そのディレクトリに新しく作成されたファイルとサブディレクトリが親ディレクトリと同じグループ所有権を継承することを示します。新しいサブディレクトリにもsetgid
ビットセットがあり、再帰的な効果があります。
find repo -type d -exec chmod g+s {} \;
上記の手順の後、同じグループgitusers
のすべてのユーザーがお互いのファイルを読み書きできるようになり、gitusers
共有グループ。 chown
だけでなく、任意の共有目的で、chmod
、find
、およびgit
コマンドを必要な数のディレクトリに複製できます。
git
リポジトリの共有git
は上記の設定変更のみで問題なく動作するようです。ただし、git
は、共有とグループの権限についても知っています(実際に上記のいくつかを実行する場合があります)。
共有git
リポジトリを作成する場合は、次のオプションを検討してください:
git init --bare --shared=group repo
既存のリポジトリがある場合は、次の設定を検討してください。
詳細は git-init
のマニュアルページ および the git-config
のマニュアルページ を参照してください。
最小限のグループ共有git
リポジトリは一般的な例と同じ手順の一部を処理しますが、一貫性を確保し、設定を簡単にするために、一般的な例の手順も実行することをお勧めします他の共有ディレクトリ。