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)。 これは一例に過ぎません。 また、 cvsxinetd パッケージがインストールされていること、 SELinux targeted ポリシーを使用していること、 SELinux は enforced モードで実行していることを前提としています。
DAC の全パーミッションが許可されている場合であっても、 SELinux ではファイルラベルに応じたポリシールールを施行し、 CVS アクセス用のラベルが明確に付けられている特定領域にしかアクセスを許可しないようにすることができます。

注記

ステップ 1 から 9 は CVS サーバー cvs-srv で行なってください。
  1. cvsxinetd のパッケージが必要になります。 rpm -q cvs を実行して、 cvs パッケージがインストールされているか確認してください。 インストールされていない場合は、 root ユーザーで次のコマンドを実行し、 cvs をインストールします。
    # yum install cvs
    
    rpm -q xinetd を実行して、 xinetd パッケージがインストールされているか確認してください。インストールされていない場合は、 root ユーザーで次のコマンドを実行し xinetd をインストールします。
    # yum install xinetd
    
  2. CVS と言う名前のグループを作成します。 root ユーザーで groupadd CVS コマンドを実行するか、 system-config-users ツールを使って行ないます。
  3. cvsuser と言うユーザー名のユーザーを作成し、 このユーザーを CVS グループのメンバーにします。 system-config-users ツールを使って行ないます。
  4. /etc/services ファイルを編集し、 以下のように CVS サーバーのエントリをアンコメントします。
    cvspserver	2401/tcp			# CVS client/server operations
    cvspserver	2401/udp			# CVS client/server operations
    
  5. CVS リポジトリをファイルシステムの root 領域に作成します。 SELinux を使用する場合、 リポジトリは root ファイルシステムに配置するのが最適です。 他のサブディレクトリに影響を与えることなく、 再帰的なラベルを与えることができます。 たとえば、 root ユーザーでリポジトリを格納する /cvs ディレクトリを作成します。
    [root@cvs-srv]# mkdir /cvs
    
  6. 誰でもアクセスできるよう /cvs ディレクトリに全パーミッションを与えます。
    [root@cvs-srv]# chmod -R 777 /cvs
    

    警告

    これは説明を目的とした用例に過ぎません。 実稼働のシステムにはここで示すパーミッションを使用しないでください。
  7. /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
    
  8. root ユーザーで service xinetd start を実行し、 xinetd デーモンを起動します。
  9. system-config-firewall ツールを使って、 ポート 2401 上で TCP を使用した着信接続を許可するルールを追加します。
  10. cvsuser ユーザーになり、 次のコマンドを実行します。
    [cvsuser@cvs-client]$ cvs -d /cvs init
    
  11. これで 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 で行なってください。
  12. 既存のデータおよび新規のデータすべてに再帰的にラベル付けが行なわれるよう、 root ユーザーで /cvs ディレクトリのコンテキストを変更し cvs_data_t タイプを与えます。
    [root@cvs-srv]# semanage fcontext -a -t cvs_data_t '/cvs(/.*)?'
    [root@cvs-srv]# restorecon -R -v /cvs
    
  13. これで、 クライアント 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]$