「Gitolite」の版間の差分
(ページの作成:「Category:バージョン管理システム en:Gitolite [https://github.com/sitaramc/gitolite/wiki/ Gitolite] を使うことで複数のユーザーが扱う Git...」) |
Kusanaginoturugi (トーク | 投稿記録) (→ssh ユーザー: キーペアを鍵ペアに戻した) |
||
(4人の利用者による、間の6版が非表示) | |||
9行目: | 9行目: | ||
gitolite をインストールすると自動的に ''gitolite'' ユーザーがシステムに追加され、ホームディレクトリ {{ic|/var/lib/gitolite}} が作られます。 |
gitolite をインストールすると自動的に ''gitolite'' ユーザーがシステムに追加され、ホームディレクトリ {{ic|/var/lib/gitolite}} が作られます。 |
||
− | === SSH によるアクセス === |
+ | === SSH による管理者アクセス === |
管理者アクセスできるように、SSH 公開鍵を {{ic|/var/lib/gitolite/''username''.pub}} に追加してください ({{ic|username}} はあなたのユーザー名に置き換えて下さい): |
管理者アクセスできるように、SSH 公開鍵を {{ic|/var/lib/gitolite/''username''.pub}} に追加してください ({{ic|username}} はあなたのユーザー名に置き換えて下さい): |
||
32行目: | 32行目: | ||
}} |
}} |
||
+ | リポジトリやユーザーを直接 ''gitolite'' としてサーバーに追加してはいけません。特別な ''gitolite-admin'' リポジトリを複製することでサーバーを管理します: |
||
− | Do NOT add repositories or users directly as ''gitolite'' on the server! |
||
− | You MUST manage the server by cloning the special ''gitolite-admin'' repository |
||
$ git clone gitolite@''hostname'':gitolite-admin |
$ git clone gitolite@''hostname'':gitolite-admin |
||
43行目: | 42行目: | ||
# install -o gitolite -g gitolite -d /srv/http/git/cgi-bin |
# install -o gitolite -g gitolite -d /srv/http/git/cgi-bin |
||
− | + | gitolite シェルの suEXEC ラッパーを作成してください。以下の例では、{{ic|/srv/http/git/cgi-bin/gitolite-suexec-wrapper}} として保存しています。 |
|
{{hc|/srv/http/git/cgi-bin/gitolite-suexec-wrapper|2= |
{{hc|/srv/http/git/cgi-bin/gitolite-suexec-wrapper|2= |
||
#!/usr/bin/bash |
#!/usr/bin/bash |
||
56行目: | 55行目: | ||
}} |
}} |
||
− | + | ラッパーに実行可能属性を付与して所有者を {{ic|gitolite:gitolite}} に変更: |
|
# chown gitolite:gitolite /srv/http/git/cgi-bin/gitolite-suexec-wrapper |
# chown gitolite:gitolite /srv/http/git/cgi-bin/gitolite-suexec-wrapper |
||
# chmod 0755 /srv/http/git/cgi-bin/gitolite-suexec-wrapper |
# chmod 0755 /srv/http/git/cgi-bin/gitolite-suexec-wrapper |
||
− | + | 空のパスワードデータベースファイルを作成、所有者は {{ic|gitolite:http}}: |
|
# install -o gitolite -g http -m 0640 /dev/null /srv/http/git/htpasswd |
# install -o gitolite -g http -m 0640 /dev/null /srv/http/git/htpasswd |
||
+ | Apache の basic 認証は ssh とは別の仕組みなので、証明書が別に必要になります。{{ic|htpasswd}} を使ってウェブユーザーを作成: |
||
− | Apache's basic authentication mechanism is separate from ssh, and therefore requires a separate set of credentials. Create your web users using {{ic|htpasswd}}. |
||
# htpasswd /srv/http/git/htpasswd ''username'' |
# htpasswd /srv/http/git/htpasswd ''username'' |
||
+ | 以下を Apache の vhost 設定に追加してください: |
||
− | Add the following to your Apache vhost configuration: |
||
{{bc| |
{{bc| |
||
SuexecUserGroup gitolite gitolite |
SuexecUserGroup gitolite gitolite |
||
84行目: | 83行目: | ||
}} |
}} |
||
− | + | {{ic|httpd.service}} を再起動してください。 |
|
+ | 最後に、前述の gitolite-admin リポジトリの中にある、{{ic|conf/gitolite.conf}} を編集して http でアクセスして変更をプッシュしたい全てのリポジトリに {{ic|1=R = daemon}} アクセスルールを追加してください。 |
||
− | Finally, in the gitolite-admin repository you cloned in the previous section, edit {{ic|conf/gitolite.conf}}, add an {{ic|1=R = daemon}} access rule to all repositories you want to make available via http, and push the changes. |
||
== ユーザーの追加 == |
== ユーザーの追加 == |
||
=== ssh ユーザー === |
=== ssh ユーザー === |
||
+ | アクセス権を与えるユーザーに、あなたに公開鍵を送るよう頼んでください。次のコマンドで ssh の鍵ペアを生成できます: |
||
− | Ask each user who will get access to send you a public key. On their workstation generate the pair of ssh keys: |
||
$ ssh-keygen |
$ ssh-keygen |
||
+ | それぞれの公開鍵をユーザーの名前に従ってリネームし、.pub 拡張子を付けてください。例えば itaram.pub や john-smith.pub ような形です。ピリオドやアンダースコアも利用することができます。 |
||
− | Rename each public key according to the user's name, with a .pub extension, like sitaram.pub or john-smith.pub. You can also use periods and underscores. Have the users send you the keys. |
||
+ | すべての *.pub ファイルを複製した gitolite-admin リポジトリの keydir の中にコピーしてください。サブディレクトリを使って鍵を整理することもできます。 |
||
− | Copy all these *.pub files to keydir in your gitolite-admin repo clone. You can also organise them into various subdirectories of keydir if you wish, since the entire tree is searched. |
||
+ | 設定ファイル (複製した gitolite-admin リポジトリの中の conf/gitolite.conf) を編集してください。設定項目や文法などの詳細は gitolite.conf のドキュメント (http://sitaramc.github.com/gitolite/admin.html#conf) を見てください。必要に応じて新しいリポジトリを追加したり、新しいユーザーを追加しパーミッションを与えたりしてください。ユーザーの名前は鍵ファイル名から .pub 拡張子を除いたものと同一にしてください。 |
||
− | Edit the config file (conf/gitolite.conf in your admin repo clone). See the gitolite.conf documentation (http://sitaramc.github.com/gitolite/admin.html#conf) for details on what goes in that file, syntax, etc. Just add new repos as needed, and add new users and give them permissions as required. The users names should be exactly the same as their keyfile names, but without the .pub extension |
||
$ nano conf/gitolite.conf |
$ nano conf/gitolite.conf |
||
+ | 変更をコミットしプッシュしてください: |
||
− | Commit and push the changes them: |
||
$ git commit -a |
$ git commit -a |
||
$ git push |
$ git push |
||
106行目: | 105行目: | ||
=== http(s) ユーザー === |
=== http(s) ユーザー === |
||
+ | http(s) のユーザー管理はシングルユーザーセットアップに適しています。新しいユーザーを追加したり、存在するユーザーのパスワードを変更するには: |
||
− | User management for http(s) is more suitable for single-user setups. To add a new user or to change an existing user's password: |
||
# htpasswd /srv/http/git/htpasswd ''username'' |
# htpasswd /srv/http/git/htpasswd ''username'' |
||
== Gitosis ライクな ssh ユーザー名 == |
== Gitosis ライクな ssh ユーザー名 == |
||
− | + | {{ic|username@server1}} と {{ic|username@server2}} のような同じログインのユーザーを区別したい場合は次を実行してください ({{Pkg|gitolite}} 3.04-1 でテストしています): |
|
− | * |
+ | * {{ic|/usr/lib/gitolite/triggers/post-compile/ssh-authkeys}} を開き |
$user =~ s/(\@[^.]+)?\.pub$//; # baz.pub, baz@home.pub -> baz |
$user =~ s/(\@[^.]+)?\.pub$//; # baz.pub, baz@home.pub -> baz |
||
+ | を |
||
− | by |
||
$user =~ s/\.pub$//; # baz@home.pub -> baz@home |
$user =~ s/\.pub$//; # baz@home.pub -> baz@home |
||
+ | で置き換えてください。 |
||
− | * update authorized_keys file (for example, by pushing into the ''gitolite-admin'' repository) |
||
+ | * authorized_keys ファイルを更新してください。(例えば ''gitolite-admin'' リポジトリにプッシュしてください) |
||
+ | |||
+ | == トラブルシューティング == |
||
+ | gitolite のアカウントでログインできない場合、あなたの ssh の設定によってアカウントがロックされているかもしれません。 |
||
+ | |||
+ | [http://arlimus.github.io/articles/usepam/ SSH and locked users Article] や [https://unix.stackexchange.com/questions/193066/how-to-unlock-account-for-public-key-ssh-authorization-but-not-for-password-aut Unix & Linux StackExchange - How to unlock account for public key ssh authorization, but not for password authorization] に述べられているような SSH のセキュリティの強化がこの動作を引き起こすことがあります。 |
||
+ | |||
+ | この問題を解決するために {{ic|sshd_config}} で PAM を許可するか、アカウントをアンロックしてください: |
||
+ | |||
+ | # usermod -p '*' gitolite |
||
+ | |||
+ | {{hc|# nano /etc/passwd| |
||
+ | ... |
||
+ | gitolite:*:16199:0:99999:7::: |
||
+ | ...}} |
||
+ | |||
+ | {{Warning|空のパスワードを持つアカウントを {{ic|passwd -u}} した状態にしておかないでください。パスワード無しでログインを許可することになります。}} |
||
== 参照 == |
== 参照 == |
||
− | http://sitaramc.github.com/gitolite/index.html |
+ | * [http://sitaramc.github.com/gitolite/index.html Gitolite サイト] |
+ | * [http://arlimus.github.io/articles/usepam/ SSH and locked users Article] |
||
+ | * [https://unix.stackexchange.com/questions/193066/how-to-unlock-account-for-public-key-ssh-authorization-but-not-for-password-aut Unix & Linux StackExchange - How to unlock account for public key ssh authorization, but not for password authorization] |
2021年11月30日 (火) 20:50時点における最新版
Gitolite を使うことで複数のユーザーが扱う Git リポジトリを簡単に安全にホストすることができます。
目次
インストール
設定
gitolite をインストールすると自動的に gitolite ユーザーがシステムに追加され、ホームディレクトリ /var/lib/gitolite
が作られます。
SSH による管理者アクセス
管理者アクセスできるように、SSH 公開鍵を /var/lib/gitolite/username.pub
に追加してください (username
はあなたのユーザー名に置き換えて下さい):
# install -o gitolite -g gitolite ~/.ssh/id_rsa.pub /var/lib/gitolite/username.pub
そして gitolite ユーザーを使って Gitolite のセットアップスクリプトを実行します:
# su - gitolite $ gitolite setup -pk username.pub
これで gitolite-admin の keydir に公開鍵が配置され、あなたのユーザー名で gitolite-admin リポジトリに読み書きアクセスできるようになります。
コピーした SSH 公開鍵を削除して gitolite ユーザーシェルを終了してください:
$ rm username.pub $ exit
あなたのユーザーを使って問題が無いか確認することが可能です:
$ ssh gitolite@hostname info
hello username, this is gitolite@hostname running gitolite3 v3.6.2 on git 2.3.3 R W gitolite-admin R W testing
リポジトリやユーザーを直接 gitolite としてサーバーに追加してはいけません。特別な gitolite-admin リポジトリを複製することでサーバーを管理します:
$ git clone gitolite@hostname:gitolite-admin
詳しくは Gitolite を参照してください。
Apache による http(s) アクセスの追加 (ベーシック認証)
suEXEC ラッパースクリプトを作成する必要があります。suEXEC のセキュリティ要件を満たすために、スクリプトとディレクトリの所有者は gitolite:gitolite
である必要があり、/srv/http
以下に配置しなくてはなりません。ここでは例として、/srv/http/git/cgi-bin
ディレクトリを作成します:
# install -o gitolite -g gitolite -d /srv/http/git/cgi-bin
gitolite シェルの suEXEC ラッパーを作成してください。以下の例では、/srv/http/git/cgi-bin/gitolite-suexec-wrapper
として保存しています。
/srv/http/git/cgi-bin/gitolite-suexec-wrapper
#!/usr/bin/bash # # suEXEC wrapper for gitolite-shell # export GIT_PROJECT_ROOT=/var/lib/gitolite/repositories export GITOLITE_HTTP_HOME=/var/lib/gitolite exec /usr/lib/gitolite/gitolite-shell
ラッパーに実行可能属性を付与して所有者を gitolite:gitolite
に変更:
# chown gitolite:gitolite /srv/http/git/cgi-bin/gitolite-suexec-wrapper # chmod 0755 /srv/http/git/cgi-bin/gitolite-suexec-wrapper
空のパスワードデータベースファイルを作成、所有者は gitolite:http
:
# install -o gitolite -g http -m 0640 /dev/null /srv/http/git/htpasswd
Apache の basic 認証は ssh とは別の仕組みなので、証明書が別に必要になります。htpasswd
を使ってウェブユーザーを作成:
# htpasswd /srv/http/git/htpasswd username
以下を Apache の vhost 設定に追加してください:
SuexecUserGroup gitolite gitolite ScriptAlias /git/ /srv/http/git/cgi-bin/gitolite-suexec-wrapper/ <Directory /srv/http/git/cgi-bin> Require all granted </Directory> <Location /git> AuthType Basic AuthName "Git Access" AuthBasicProvider file AuthUserFile /srv/http/git/htpasswd Require valid-user </Location>
httpd.service
を再起動してください。
最後に、前述の gitolite-admin リポジトリの中にある、conf/gitolite.conf
を編集して http でアクセスして変更をプッシュしたい全てのリポジトリに R = daemon
アクセスルールを追加してください。
ユーザーの追加
ssh ユーザー
アクセス権を与えるユーザーに、あなたに公開鍵を送るよう頼んでください。次のコマンドで ssh の鍵ペアを生成できます:
$ ssh-keygen
それぞれの公開鍵をユーザーの名前に従ってリネームし、.pub 拡張子を付けてください。例えば itaram.pub や john-smith.pub ような形です。ピリオドやアンダースコアも利用することができます。
すべての *.pub ファイルを複製した gitolite-admin リポジトリの keydir の中にコピーしてください。サブディレクトリを使って鍵を整理することもできます。
設定ファイル (複製した gitolite-admin リポジトリの中の conf/gitolite.conf) を編集してください。設定項目や文法などの詳細は gitolite.conf のドキュメント (http://sitaramc.github.com/gitolite/admin.html#conf) を見てください。必要に応じて新しいリポジトリを追加したり、新しいユーザーを追加しパーミッションを与えたりしてください。ユーザーの名前は鍵ファイル名から .pub 拡張子を除いたものと同一にしてください。
$ nano conf/gitolite.conf
変更をコミットしプッシュしてください:
$ git commit -a $ git push
http(s) ユーザー
http(s) のユーザー管理はシングルユーザーセットアップに適しています。新しいユーザーを追加したり、存在するユーザーのパスワードを変更するには:
# htpasswd /srv/http/git/htpasswd username
Gitosis ライクな ssh ユーザー名
username@server1
と username@server2
のような同じログインのユーザーを区別したい場合は次を実行してください (gitolite 3.04-1 でテストしています):
/usr/lib/gitolite/triggers/post-compile/ssh-authkeys
を開き
$user =~ s/(\@[^.]+)?\.pub$//; # baz.pub, baz@home.pub -> baz
を
$user =~ s/\.pub$//; # baz@home.pub -> baz@home
で置き換えてください。
- authorized_keys ファイルを更新してください。(例えば gitolite-admin リポジトリにプッシュしてください)
トラブルシューティング
gitolite のアカウントでログインできない場合、あなたの ssh の設定によってアカウントがロックされているかもしれません。
SSH and locked users Article や Unix & Linux StackExchange - How to unlock account for public key ssh authorization, but not for password authorization に述べられているような SSH のセキュリティの強化がこの動作を引き起こすことがあります。
この問題を解決するために sshd_config
で PAM を許可するか、アカウントをアンロックしてください:
# usermod -p '*' gitolite
# nano /etc/passwd
... gitolite:*:16199:0:99999:7::: ...