見出し画像

CentOSでhttpsアクセスのGitサーバー構築

GitをSVNのようなファイル管理システムと思い込んでいるエンドユーザーから「Gitサーバー」を立てて欲しいと言われました。
そもそも、Gitはすべてがサーバーみたいなものなんですけど。
しかし、Git自体にはネットに公開する機能はなく、httpやsshなどを使って外部から接続できるようにしなればなりません。
今回は、社内、若しくはIPアドレス制限での接続のみであるため、認証のセキュリティが甘い(ユーザー名、パスワードのみの認証)がユーザーが利用し易いhttpsで、リモートリポジトリに接続できるようなサーバーを構築します。

■OSインストール

CentOS 7.8
Webサーバーとしてインストール
+開発ツール
+システム管理ツール

起動後に
・firewalldの無効化(# systemctl disable firewalld)
・selinuxの無効化(/etc/selinux/configの編集)
を行います。

■Gitインストール

# yum install git

■SSL化

# yum install mod_ssl
# openssl genrsa -aes128 2048 > server.key
pass phraseを設定します
# openssl rsa -in server.key -out server.key
pass phraseを入力します
# openssl req -new -key server.key > server.csr
自己証明書に会社名などを設定します
内容は任意で構いません
# openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt

作成した証明書をApacheの設定フォルダの下に配置します
# mkdir /etc/httpd/ssl/
# cp server.key server.crt /etc/httpd/ssl/
# chmod 400 /etc/httpd/ssl/server.*
証明書を設定
# cp -p /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.bk
# vi /etc/httpd/conf.d/ssl.conf
→以下を変更
SSLCertificateFile /etc/httpd/ssl/server.crt
SSLCertificateKeyFile /etc/httpd/ssl/server.key

Apacheでhttpsアクセスできるようにします
(新規作成)
# vi /etc/httpd/conf.d/rewrite.conf
<ifModule mod_rewrite.c>
  RewriteEngine On
  LogLevel crit rewrite:trace3
  RewriteCond %{HTTPS} off
  RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifModule>

再起動
# systemctl restart httpd

これで、httpsでアクセスできるようになりました

■Gitリポジトリ作成

/home/git/gittestにリポジトリを作成します
# cd /home
# mkdir git
# cd git
# git init --bare gittest
# chown -R apache:apache gittest/

公開設定
# cd gittest
# git --bare update-server-info

■Apache設定

WebDAVを使って認証できるようにします
(新規作成)
#vi /etc/httpd/conf.d/git.conf
<Location /gittest>
  DAV on
  SSLRequireSSL
  AuthType Basic
  AuthName "Git Repository"
  AuthUserFile /home/git/conf/authuser
  Require valid-user
</Location>

WebDAVを使うために以下を追記します
# vi /etc/httpd/conf/httpd.conf
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so

Gitリポジトリへのパスを設定します。
<VirtualHost default:443>内に以下を追記
# vi /etc/httpd/conf.d/ssl.conf
DocumentRoot "/home/git"
<Directory "/home/git/gittest">
  Options All
  AllowOverride All
</Directory>

■ユーザー作成(認証ファイルの作成)

# htpasswd -c /home/git/conf/authuser sano
(最初だけ-cオプションが必要、以降、追記の場合は-cなし)

■リポジトリURL

ネットからのアクセスURLは以下になります

https://ユーザー名:パスワード@IPアドレス/リポジトリ名
例:
https://sano:sanopass@192.168.1.100/gittest

IPアドレスはFQDNの方が望ましいです

また、証明書が自己作成のため、接続するクライアント側で
sslVerify
を無効化しておかないとSSLのエラーとなって接続できません

この記事が気に入ったらサポートをしてみませんか?