第5回 トラブルシューティングはCentOS 5におまかせ


面 和毅
サイオステクノロジー株式会社
OSSテクノロジーセンター
開発支援グループ
グループマネージャー
2007/11/15

 CentOS 5も2007年4月にリリースされてから、早くも半年が過ぎました。そろそろ導入を検討されている方もいらっしゃるのではないでしょうか?

 CentOS 5からはSELinuxの設定方法などが以前のバージョンよりも格段に簡単になり、設定のためのさまざまなツールもそろってきています。今回から、CentOS 5でのSELinuxの使い方を、実例を基に説明していきましょう。

 CentOS 5でのSELinux――RHEL 5との違いは?

 CentOS 5はRed Hat Enterprise Linux 5(RHEL 5)のクローンになります。RHEL 5でのSELinuxの新機能に関しては、@ITの記事ですでに紹介していますので詳しい内容はそちらを参照してください。

【関連記事】
Red Hat Enterprise Linux 5で始めるSELinux
http://www.atmarkit.co.jp/fsecurity/special/97rhel/rhel01.html

 大まかな機能変化としては、

  1. 「Reference Policy」の採用により、ポリシーを修正する際にもポリシーソース全部を必要としなくなった

  2. セキュリティコンテキストに新たに「Multi Level Security」(MLS)を加えた。これにより、MLSによるアクセス制御もできるようになった。

  3. GUIツールが拡充され、プログラムの動作に支障があった場合でも、SELinuxが原因で起きているのかをリアルタイムで把握できるツールが入った。また、対処の指針も出してくれるツールが入った。

  4. デフォルトのポリシーでもドメイン分けされているサービスが増えた。これにより、よく知られているようなアプリケーションであれば、インストールしただけでドメインが分離されてセキュリティが保てるようになった。

というところでしょう。

 1、2に関しては、「Red Hat Enterprise Linux 5で始めるSELinux」ですでに紹介していますので、3、4について実際にCentOS 5上にアプリケーションを導入して、CentOS 4との違いを見ていきましょう。

 GUIツール、SELinuxトラブルシューターを試してみる

 CentOS 5ではSELinuxの管理ツールとして、GUIから、

  • SELinuxトラブルシューター
  • SELinux Manager(semanagement)

の2つが使用できます。CentOS 4でのSELinuxログはアクセスがあるたびに出力されていたため、非常に大量となるログに悩まされたものでした。また、ログの内容自体も、どの部分のアクセス権で処理が拒否されて、どう直していけばよいのかを判断するのが非常に難しいものでした。

 「SELinuxトラブルシューター」は、これらのログを分類してまとめ、かつ分かりやすい形で出力してくれるものです。また、SELinuxに起因しているエラーを解消するための方法もメッセージとして(ある程度までになりますが)出力してくれます。

 今回、例としてリスト1のようなCGIスクリプトとリスト2のようなHTMLファイルを用意しました。

#!/usr/bin/perl

use CGI;
use Net::Ping;
open(STDERR, ">&STDOUT");
$|=1;

$cgi = new CGI;
print "Content-Type: text/html\r\n\r\n";
print "<HTML><BODY><PRE>";
$host = $cgi->param('hostname');
$timeout=0.1;
my $p = Net::Ping->new('tcp');
$p->tcp_service_check(1);
$port = 22;

$p->{'port_num'} = $port;

print "Port $port on $host is ",
        ($p->ping($host) ? "up" : "down"), ".\n";
$p->close();

print "</PRE></BODY></HTML>";
リスト1 ポート22番が空いているかどうかを確認するサンプルCGIスクリプト

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>ping</title>
</head>
<body>

<h1> SSH check page</h1>

<form action=cgi-bin/test.cgi method=POST>
        Host <input type=text size=20 name=hostname><br>
        <input type=submit value="Check SSH now!!">
</form>

</body>
</html>
リスト2 サンプルHTMLファイル

 空欄にIPアドレスを入力してボタンを押すと、そのIPアドレスのホスト上でSSHが動作しているかどうか(より正確にはポート22番がOpenになっているかどうか)をテストしてくれるCGIとHTMLになります。

図1 サンプルプログラムの実行画面

 CentOS 5にyumでApacheをインストールし、このCGIをテストします。このサンプルはそのままではうまく動きませんが、SELinuxトラブルシューターを利用するとどのように対応ができるかを体験してみましょう。

1/3

Index
トラブルシューティングはCentOS 5におまかせ
Page1
CentOS 5でのSELinux――RHEL 5との違いは?
GUIツール、SELinuxトラブルシューターを試してみる
  Page2
早速、トラブルシューティングしてみよう
  Page3
SELinux Managerを試してみる


スイッチ・オン! SELinux 連載インデックス


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間