【セキュアOS SELinux入門】第4回 SELinuxの基本操作方法をマスターする

 前回は,SELinuxを有効にする方法を解説した。ただし,SELinuxの初回起動時には,ファイルのタイプがうまく付与されておらず,X Window Systemが起動しないなどの不具合が生じる場合がある。そのため,前回の手順でSELinuxを有効にした後,ファイルのタイプを付与し直す必要がある。

前回の補足:ファイルのタイプを付与し直す

 まず,rootユーザーでログインし,管理するために必要な権限に切り替える。newroleの役目については後述する。

# newrole -r sysadm_r

rootユーザーのパスワードを入力した後,システムの全ファイルに正しいタイプを付与する。

# fixfiles relabel

終了したらシステムを再起動しよう。うまく動作している場合でも,以上の操作を行っておくことをお勧めする。

SELinuxの基本操作方法

 Fedora Core 2でSELinuxを有効にすると,通常のLinuxのパーミッション・チェックに加えて,SELinux独自のアクセス制御機能が動作するようになる。具体的には,プロセスに最小限の権限を割り当てるための機能「TE」と,ユーザーに最小限の権限を割り当てるための機能「RBAC」が動作する(TEとRBACについては連載第2回)。SELinuxが有効になったシステムでは,これらの機能を反映して,ログイン方法などが通常のLinuxをインストールしたシステムと多少異なってくる。そこで今回はSELinuxの基本的な操作方法を解説する。

SELinuxを有効にしたシステムにログインする

 SELinuxでは,RBACにより,ユーザーに「ロール」という役割を割り当てられる。ユーザーはログイン時にロールを選択できる*1。Fedora Core 2の標準設定では,システム管理のためのロール「sysadm_r」,一般ユーザーの権限を付与するロール「staff_r」,さらに権限を限定したロール「user_r」という3種類のロールが用意されており,ログイン時に選択できる。

 それでは,テキスト・ログインとグラフィカル・ログインのそれぞれについて,SELinuxを有効にした場合のログイン方法を紹介していこう。

テキスト・ログインの方法

 SELinuxのテキスト・ログインの画面を次に示す。

 システムがグラフィカル・ログインになっている場合は,CtrlキーとAltキーとF1キーを同時に押すことで,テキスト・ログインに変更できる。

 ここではユーザー名「root」でログインしている。パスワード入力後に,ロールの選択画面が表示される。

(1)「Your default context is root:sysadm_r:sysadm_t」は,sysadm_rがデフォルト(初期状態)のロールであることを示している。「Do you want to choose a different one? [n] 」は,sysadm_r以外のロールを選択するか否かという問い合わせである。ここでは「y」を入力して,別のロールを選択する例を紹介する。

(2)前問で「y」を入力すると,staff_rが選択できるようになる。ここで「2」を入力するとstaff_rでログインができる。各ユーザーが使えるロールについては,ポリシー・ファイルにあらかじめ設定されている。

 これで,ログインができた。まずは,どのロールでログインしたかを確認してみよう。それには,「getcon」コマンドを用いる。

# getcon
root:staff_r:staff_t

 上記中央のstaff_rがログインしているロール,右端のstaff_tがユーザー・シェルのドメインである。

 このように,「rootユーザー,staff_rロール」でログインした場合,まるで普通のrootユーザーとしてログインしているように見える。しかし,staff_rロールは一般ユーザー用であり,ほとんど管理用の権限を持っていない。実際には,「rootユーザー,staff_rロール」で管理作業を行うことは不可能である。

 例えば,この権限では,/etcディレクトリ以下のシステム・ファイル群を編集したりすることはできない。逆に言えば,rootユーザーで管理作業以外(例えばWebの閲覧)を行う場合には,staff_rロールで作業した方が安全である*2。なぜなら,操作を間違えた場合でもシステムに大きな被害を与える危険が少ないからだ。

「rootユーザー,sysadam_rロール」で管理作業を行う

 管理作業を行うためには,「rootユーザー,sysadm_rロール」でログインする必要がある。図1の(1)で「n」を選択すればsysadm_rロールでログインできる。また,他のロールでログインした後でも,ロールを切り替えられる。具体的には

# newrole -r sysadm_r

を実行すると,sysadm_rロールに変更できる。こうして「rootユーザー,sysadm_rロール」になれば,通常のLinuxのrootユーザーと同じように,システムの管理作業が行える。

一般ユーザーでログインする

 一般ユーザーでログインする場合には,sysadm_rロールとuser_rロールが使えるように設定されている。一般ユーザーがsysadam_rロールを使えることはセキュリティ上望ましくないが,Fedora Core 2のデフォルトでは使いやすさを優先して甘く設定してあるようだ。

 なお,「一般ユーザー,sysadm_rロール」でログインした場合には,システムの管理作業は行えない。なぜなら,通常のLinuxのパーミッション・チェックにより,管理作業で必要なファイルなどへのアクセスが拒否されるためである。管理作業を行うには,「rootユーザー,sysadm_rロール」でログインする必要がある。あるいは,「一般ユーザー,sysadm_rロール」から,suコマンドを入力して「rootユーザー,sysadm_rロール」に切り換えてから管理作業を行うようにする。

グラフィカル・ログインやsshでのログイン方法

 グラフィカル・ログインやsshでログインすると,rootユーザーの場合は,自動的にstaff_rロールでログインする。システム管理作業を行いたい場合は,「newrole-r sysadm_r」コマンドを実行してsysadm_rに切り替える必要がある。なお,一般ユーザーの場合は,自動的にuser_rでログインする。

TEに関する基本操作

 続いて,TEに関する基本操作方法を述べる。Fedora Core 2では,Apache HTTP Server(以下,Apache)やsendmailなど,Fedora Core 2に標準添付されているほとんどのアプリケーション用のドメインとタイプが用意されている。さらに,「ドメインがどのタイプにアクセスできるか」というアクセス制御の設定なども既に施されている。

 実際に,プロセスに付与されているドメインを確認してみよう。それには,psコマンドを「Z」オプション付きで実行する。

 下線部分がプロセスのドメインを示す。例えば,/usr/sbin/httpd(Apacheのプロセス)のドメインは,httpd_tであることが分かる。

セキュリティ・コンテキスト

 上記の例ではドメインと共に「root:system_r:httpd_t」という3種類の要素が表示されている。これらの要素は,「セキュリティ・コンテキスト」と呼ばれる。

 セキュリティ・コンテキストは,「プロセスを起動したユーザー:プロセスを起動したロール:プロセスのドメイン」を意味する。セキュリティ・コンテキストのうち,実際にアクセス制御に使われるのはドメインだけであるため,実用上はその他の要素は気にしなくてよい。

タイプの確認方法

 ファイルに付与されているタイプを確認することもできる。それには,lsコマンドを「Z」オプション付きで実行する。

 下線部分がファイルに付与されているタイプである。/etc/shadowには「shadow_t」タイプが付与されていることが分かる。ここでも「system_u:object_r:shadow_t」というセキュリティ・コンテキストが表示されているが,実用上は一番右のタイプだけに注目しておけばよい。なお,ファイルに付与されているセキュリティ・コンテキストを「ファイル・コンテキスト」という用語で呼ぶこともある。

 今回は基本操作について解説した。Apacheでホームページを公開するだけなら,ここで解説した知識だけで十分であるが,その他のサーバの動作には,設定の追加が必要なことがある。次回(6月29日公開予定)は,SELinuxの設定を行うための基本的な知識を解説する予定である。


■著者紹介
中村 雄一(なかむら ゆういち)氏
日立ソフトウェアエンジニアリング 技術開発本部研究部。SELinux関連の研究・開発を行っている。SELinux普及活動に力を入れており,講演・執筆を行うとともに,パッチやインストール・パッケージなどを開発。著書に「SELinux徹底ガイド」(日経BP社)がある。日本SELinuxユーザ会準備委員会代表。日本オープンソース推進機構(JOSAO)SELinux専門委員会委員長。書籍・記事のサポート・ページも開設。