はじめに
第2回でActive Directory側の準備が整いました。第3回では、Subversion(SVN)の本体をAlmaLinuxにインストールし、リポジトリを作成します。
単にインストールするだけでなく、インターネットに接続できない「閉塞環境」でのパッケージ導入手順や、ADユーザーがWeb経由で操作するために不可欠な「Linux側の権限設定・SELinux」について詳しく解説します。
構築のポイント(お急ぎの方へ)
-
パッケージ導入:
dnfを使い、閉塞環境(DVD/ISO)からApache、SVN、さらに次回の連携で使う mod_ldap を一括インストール。 -
リポジトリ作成:
svnadmin createコマンドで「箱」を初期化。 -
権限設定: 所有者を
apacheに変更するだけでなく、グループ書き込み権限(775) を与えるのが成功の鍵。 -
SELinux対策: ファイルの所有者を変えるだけでなく、セキュリティラベル(httpd_sys_rw_content_t) を付与しないと書き込みは拒否されます。
必要なパッケージのインストール
パッケージ検索先の変更(閉塞環境対応)
インターネットに繋がらない環境のため、インストールメディア(ISO)をリポジトリとして使用します。
DVD(ISO)のマウント確認
sudo ls /mnt/
# AppStream BaseOS EFI EULA LICENSE RPM-GPG-KEY-AlmaLinux-10 boot extra_files.json images media.repo
AppStream や BaseOS が表示されればOKです。
マウントされていない場合の対処方法
- Hyper-VでISOを「再挿入」する
Hyper-VマネージャーでAlmaLinuxを右クリック > 「設定」。
「SCSI コントローラー」 > 「DVD ドライブ」 を選択。
「イメージ ファイル」で、第1回で取得した ISO を指定し直して「適用」を押します。
再度マウントを試みる
Linux側で以下のコマンドを打ちます。sudo mount /dev/sr0 /mnt
リポジトリ設定ファイル(local.repo)の作成
インターネットに繋がらない「閉塞環境」では、通常の設定のまま dnf install を実行しても、外部のリポジトリサーバーに繋ごうとしてエラーになってしまいます。
そこで、「インターネットではなく、マウントしたDVD(ISO)の中を見に行ってね」とOSに教えてあげるための設定ファイルを作成します。
sudo vi /etc/yum.repos.d/local.repo
以下のコードを記載します。
[local-baseos]
name=Local BaseOS
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0
[local-appstream]
name=Local AppStream
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0
Linux(AlmaLinux)でソフトをインストールする
dnfコマンドは、あらかじめ「どこにソフトのデータ(パッケージ)があるか」が書かれた設定ファイルを見に行きます。
通常: インターネット上のサーバー(ミラーサイト)を見に行きます。
閉塞環境: ネットに繋がらないため、標準の設定ファイル(
/etc/yum.repos.d/almalinux.repoなど)をそのまま使うと「ネットに繋がらない」というエラーで止まってしまいます。
- 設定ファイル(local.repo)の内容解説
-
作成したファイルの中身をパーツごとに分解して見ていきましょう。
-
セクション名
[local-baseos]-
システムが内部でリポジトリを区別するための名前(ID)です。
-
-
name=Local BaseOS-
人間が見てわかりやすいリポジトリの表示名です。
-
-
baseurl=file:///mnt/BaseOS(★最重要)-
パッケージ(.rpmファイル)が実際に置いてある場所のパスです。
-
通常のネット経由なら
http://ですが、今回はローカルファイルなのでfile://ではじめます。その後の/mnt/BaseOSは、DVDをマウントした場所です。
-
-
enabled=1-
このリポジトリ設定を有効にするかどうかを指定します(1なら有効)。
-
-
gpgcheck=0-
パッケージの「署名(正しい配布元か)」を検証するかどうかです。本来はセキュリティのため
1(検証する)が望ましいですが、信頼できるDVDメディアからのインストールであれば、検証をスキップしたほうが署名キーのインポート等の手間が省け、トラブルが少なくなります。
-
-
一括インストール
今回はSVN本体だけでなく、次回のAD連携で必要になる mod_ldap も一緒にインストールしておきます。これでサーバー側の準備は万全です。
# インストール実行
sudo dnf install -y httpd subversion mod_dav_svn mod_ldap --disablerepo=* --enablerepo=local-*
--disablerepo=*: まず、登録されているすべてのリポジトリ(標準のインターネット用など)を一旦 「無効(OFF)」 にします。これにより、存在しないネットへ繋ごうとしてエラーになるのを防ぎます。
--enablerepo=local-*: その直後に、先ほど設定ファイル(local.repo)で作成した、名前が「local-」で始まるリポジトリだけを「有効(ON)」 に戻します。
*(ワイルドカード)の意味:local-*と書くことで、設定ファイル内の[local-baseos]と[local-appstream]の両方を一括で指定しています。
Apacheの起動とファイアウォールの開放
インストールが完了したら、Apacheを起動します。同時に、外部のPC(クライアント)からブラウザでアクセスできるように、Linux側のファイアウォールの穴あけを行います。
サービスの起動と自動起動設定
# Apacheを起動
sudo systemctl start httpd
# OS再起動時も自動で起動するように設定
sudo systemctl enable httpd
ファイアウォールの開放
AlmaLinuxの標準設定では、外部からのブラウザ接続(HTTP/80番)がブロックされています。以下のコマンドで許可リストに http を追加します。
# HTTP(80番ポート)の通信を恒久的に許可
sudo firewall-cmd --permanent --add-service=http
# 設定を即座に反映
sudo firewall-cmd --reload
設定の確認
以下のコマンドを実行し、services の欄に http が含まれていることを確認します。
sudo firewall-cmd --list-all
[確認結果の例]
public (active)
target: default
...
services: cockpit dhcpv6-client ssh http <-- これがあればOK!
...
SVNリポジトリの作成・設定
リポジトリ保存用ディレクトリの作成
リポジトリを配置するディレクトリを作成します。今回は /var/www/svn をベースディレクトリとします。
# リポジトリ保存用ディレクトリの作成
sudo mkdir -p /var/www/svn
ディレクトリ権限の設定
作成した直後のディレクトリは、所有者が root になっています。このままだと、Apache(ADユーザー)がWeb経由でファイルを書き込むことができず、エラーが発生してしまいます。
所有者の変更と合わせて、グループに対しても適切な書き込み権限を付与します。
# 所有者をapacheユーザーに一括変更
sudo chown -R apache:apache /var/www/svn
# 書き込み権限を付与
sudo chmod -R 755 /var/www/svn
# 権限の確認
ls -l /var/www/svn
SELinuxの設定(ファイル書き込み許可)
SELinuxが有効な環境では、「このフォルダはApacheが読み書きしていい場所である」 という専用のラベル(コンテキスト)をフォルダに貼る必要があります。
これを設定しないと、ログインはできても、いざファイルをアップロード(コミット)しようとした際に拒否されます。
# SVNディレクトリに対して「httpdが読み書き可能」なラベルを定義
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/svn(/.*)?"
# ラベルを適用
sudo restorecon -Rv /var/www/svn
# 反映確認
ls -Zd /var/www/svn
# unconfined_u:object_r:httpd_sys_rw_content_t:s0 /var/www/svn <- httpd_sys_rw_content_tの真ん中のセクションが「rw(Read/Write)」になっていればOK
設定の解説
httpd_sys_rw_content_t: これが「Apache(httpd)が読み書き(rw)できるコンテンツですよ」という印です。
semanage fcontext: OSの設定リストに「このフォルダはこのラベルで運用する」と登録します。- restorecon:台帳を見て、現物のラベルを正しいものに貼り直す作業です。
SVNリポジトリの作成
テスト用として2つのリポジトリを作成します。
# リポジトリ「repo_a」の作成
svnadmin create /var/www/svn/repo_a
# 同様に「repo_b」も作成(テスト用)
svnadmin create /var/www/svn/repo_b
【疎通テスト】簡易版設定での確認
まずは Apache 経由でリポジトリが「見える」かどうかをテストします。
テスト用の設定ファイル作成
認証なしで誰でも閲覧できる簡易設定を作成します。
sudo vi /etc/httpd/conf.d/subversion.conf
以下の内容を記載して保存します。
<Location /svn/repo_a>
DAV svn
SVNPath /var/www/svn/repo_a
</Location>
設定の反映とブラウザ確認
# 設定の文法チェック(Syntax OKが出れば成功)
sudo apachectl configtest
# Apacheを再起動して反映
sudo systemctl restart httpd
ブラウザで http://192.168.10.11/svn/repo_a にアクセスしてください。「repo_a – Revision 0: /」と表示されれば、OKです。
なお、片方のhttp://192.168.10.11/svn/repo_b にアクセスしてみると、「Not Found」と表示されます。
おわりに
これでLinux側に「リポジトリ」という箱が完成し、ファイルシステムとしてのアクセス権も整いました。検証の結果、「所有者・パーミッション・SELinuxラベル」の3つが揃って初めて、SVNへの書き込みが可能になることが分かりました。
現時点では簡易的な設定のため、誰でもリポジトリが見える状態です。また、これだけではまだADユーザーでのログインはできません。
次回、第3回で導入済みの mod_ldap を活用し、Apacheの設定ファイルを仕上げます。さらに、「ADとの通信を許可するSELinux設定」や、最新のAD環境で突き当たる「署名要件の壁」を突破して、Active Directory連携を完成させます!
はじめに 第4回では、Apacheのモジュールである mod_dav_svn と mod_ldap を使い、SVNの認証をActive Directoryに丸投げする設定を行います。 この設定が完了すれば、ユーザーはWindowsの[…]

