Gitリポジトリのみを使用するために、制限された特権を持つSSHユーザーを作成します


12

SunOSサーバーでホストされているgitリポジトリがあり、sshを介してリモートで使用しています

git clone ssh://myUser@mydomain.com/path/to/git

次に、そのリポジトリにアクセスできるようにするためにユーザーを追加する必要がありますが、その方法はわかりません。

1つのtestUserをsshに追加しましたが、そのユーザー特権をgitのみを使用するように制限することはできません。

testUserは、sshを使用してサーバー全体を閲覧できます。

gitにリモートでのみアクセス、クローン/プル/プッシュなどできるユーザーを作成するにはどうすればよいですか?

ありがとう

回答:


12

複数のgit-shellユーザー(およびリポジトリへのアクセスを共有できるように必要なグループおよびグループのアクセス許可)を設定する代わりに、単一のユーザーでgitoliteを使用することを検討できます。

gitoliteはサーバー上の単一の通常のユーザーで実行され、SSH公開キーを使用してGitリポジトリへのアクセスを区別します(gitoliteがSSHベースの識別を行う方法の詳細については、「gitoliteがsshを使用する方法」を参照してください)。 gitoliteは、リポジトリごと、ブランチごと、さらにはパスごとのアクセス制御を提供します。


1
gitosisの+1 ...このセットアップ用に作成されました。
ジェレミーボーズ

12

基本的に2つのオプションがあります。

  1. topdogが述べたように、サーバー上でユーザーを作成するとき、シェルをgit-shellに設定します本のエントリはこちら)。これにより、ユーザーはSSH経由でログインできますが、通常のフル機能のシェル(sh、bashなど)を実行する代わりに、git機能へのアクセスのみを提供するgit-shellを実行します。

  2. または、TCP(git-deamonを使用)やHTTP / HTTPS などの別のプロトコルを介してリポジトリを利用可能にすることもできます。ただし、このようなシナリオは読み取り専用アクセスにのみお勧めします。

ユーザーの「プッシュ」機能をサポートしたいということなので、オプション1を選択する必要があります。


5

シェルをgit-shellに変更する必要があります。これにより、ユーザーはgit関数のみにアクセスできます。


トップドッグに感謝します。基本的に、ユーザーは自分のMacで自分のgitシェルを使用します。私は彼がサーバーにsshできるようにしたくありません。したがって、gitレポがtestUserコンピューター/ Macからmydomain.comにある場合、ターミナルでgit clone ssh://myUser@mydomain.com/path/to/gitにパスワードの入力を求められ、レポをダウンロードできます。彼のシェルをgit-shellに設定してみました。cloneを呼び出すときにプロンプ​​トが表示されますが、パスワードは拒否されています。
バッハ

myUsersシェルをgit-shellに設定する必要があります。サーバーで実行したいのがgitコマンドを実行し、シェルインできない場合のみです。パスワードプロンプトについてはキーを使用してください。無料のgitブックでのサーバーの外観上のgitのより詳細な報道のためのprogit.org/book/ch4-0.html
トップドッグ

本参照をありがとう!非常に役立ちます。最終的にgitoliteを使用することになりましたが、セットアップにはまだ問題があります。
バッハ

git-shell:「これは、制限されたGitアクセスを提供するSSHアカウント用のログインシェルです。プル/プッシュ機能を実装するサーバー側Gitコマンド、およびgit-shell-commandsというサブディレクトリユーザーのホームディレクトリ。」Linuxでは、「/ bin / git-shell」を「/ etc / shells」に追加してから、「usermod --shell / bin / git-shell $ USER」を追加します。ところで、gitブックはgit-scm.com/book/en/ch4-0.htmlにあります
David Tonhofer 14年

0

別の方法は、ssh内のユーザーのアクセスを制限することです。

http://prefetch.net/blog/index.php/2006/09/05/limited-access-to-openssh-directives/

この例では、ユーザーを1人だけ使用していますが、ユーザーが同じグループに属している場合は、groupディレクティブを使用して除外できます。何かのようなもの

AllowTcpForwarding yes
X11Forwarding yes

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