8.4. 設定例
8.4.1. CVS のセットアップ
リモートアクセスを許可する SELinux 設定と簡単な CVS セットアップの例を以下に示します。 2 台のホストを使用しています。 ホスト名が
cvs-srv
で IP アドレスが 192.168.1.1
の CVS サーバーと、 ホスト名が cvs-client
で IP アドレスが 192.168.1.100
のクライアントです。 いずれのホストも同じサブネット上にあります (192.168.1.0/24)。 これは一例に過ぎません。 また、 cvs と xinetd パッケージがインストールされていること、 SELinux targeted ポリシーを使用していること、 SELinux は enforced モードで実行していることを前提としています。
DAC の全パーミッションが許可されている場合であっても、 SELinux ではファイルラベルに応じたポリシールールを施行し、 CVS アクセス用のラベルが明確に付けられている特定領域にしかアクセスを許可しないようにすることができます。
注記
ステップ 1 から 9 は CVS サーバー
cvs-srv
で行なってください。
- cvs と xinetd のパッケージが必要になります。
rpm -q cvs
を実行して、 cvs パッケージがインストールされているか確認してください。 インストールされていない場合は、 root ユーザーで次のコマンドを実行し、 cvs をインストールします。# yum install cvs
rpm -q xinetd
を実行して、 xinetd パッケージがインストールされているか確認してください。インストールされていない場合は、 root ユーザーで次のコマンドを実行し xinetd をインストールします。# yum install xinetd
CVS
と言う名前のグループを作成します。 root ユーザーでgroupadd CVS
コマンドを実行するか、 system-config-users ツールを使って行ないます。cvsuser
と言うユーザー名のユーザーを作成し、 このユーザーを CVS グループのメンバーにします。 system-config-users ツールを使って行ないます。/etc/services
ファイルを編集し、 以下のように CVS サーバーのエントリをアンコメントします。cvspserver 2401/tcp # CVS client/server operations cvspserver 2401/udp # CVS client/server operations
- CVS リポジトリをファイルシステムの root 領域に作成します。 SELinux を使用する場合、 リポジトリは root ファイルシステムに配置するのが最適です。 他のサブディレクトリに影響を与えることなく、 再帰的なラベルを与えることができます。 たとえば、 root ユーザーでリポジトリを格納する
/cvs
ディレクトリを作成します。[root@cvs-srv]# mkdir /cvs
- 誰でもアクセスできるよう
/cvs
ディレクトリに全パーミッションを与えます。[root@cvs-srv]# chmod -R 777 /cvs
警告
これは説明を目的とした用例に過ぎません。 実稼働のシステムにはここで示すパーミッションを使用しないでください。 /etc/xinetd.d/cvs
ファイルを編集し、 CVS セクションをアンコメントして/cvs
ディレクトリを使用するよう設定します。 以下のようになるはずです。service cvspserver { disable = no port = 2401 socket_type = stream protocol = tcp wait = no user = root passenv = PATH server = /usr/bin/cvs env = HOME=/cvs server_args = -f --allow-root=/cvs pserver # bind = 127.0.0.1
- root ユーザーで
service xinetd start
を実行し、xinetd
デーモンを起動します。 - system-config-firewall ツールを使って、 ポート 2401 上で TCP を使用した着信接続を許可するルールを追加します。
cvsuser
ユーザーになり、 次のコマンドを実行します。[cvsuser@cvs-client]$ cvs -d /cvs init
- これで CVS は設定されましたが、 SELinux ではログインおよびファイルのアクセスが拒否されます。これを確認するため、
cvs-client
に $CVSROOT 変数をセットして、リモートによるログインを試行してみます。次のステップはcvs-client
で行なってください。[cvsuser@cvs-client]$ export CVSROOT=:pserver:cvsuser@192.168.1.1:/cvs [cvsuser@cvs-client]$ [cvsuser@cvs-client]$ cvs login Logging in to :pserver:cvsuser@192.168.1.1:2401/cvs CVS password: ******** cvs [login aborted]: unrecognized auth response from 192.168.100.1: cvs pserver: cannot open /cvs/CVSROOT/config: Permission denied
SELinux によりアクセスがブロックされました。 SELinux でこのアクセスを許可させるため、 次のステップをcvs-srv
で行なってください。 - 既存のデータおよび新規のデータすべてに再帰的にラベル付けが行なわれるよう、 root ユーザーで
/cvs
ディレクトリのコンテキストを変更しcvs_data_t
タイプを与えます。[root@cvs-srv]# semanage fcontext -a -t cvs_data_t '/cvs(/.*)?' [root@cvs-srv]# restorecon -R -v /cvs
- これで、 クライアント
cvs-client
はログインして、 このリポジトリ内のすべての CVS リソースにアクセスできるようになったはずです。[cvsuser@cvs-client]$ export CVSROOT=:pserver:cvsuser@192.168.1.1:/cvs [cvsuser@cvs-client]$ [cvsuser@cvs-client]$ cvs login Logging in to :pserver:cvsuser@192.168.1.1:2401/cvs CVS password: ******** [cvsuser@cvs-client]$