第3回 基本操作とポリシーファイルの設定SELinuxで強化するソリューション(1/3 ページ)

最近注目のSELinuxについて学ぶ同連載、今回から、SELinuxを実際に使っていくために必要な基本的なコマンド群を学ぶとともに、実際にアクセス許可の設定を行っていこう。

» 2005年03月25日 17時47分 公開
[佐々木 生弥(サイボウズ),ITmedia]

 Turbolinux 10 serverはLinuxカーネル2.6を搭載したディストリビューションの1つだ。また、SELinuxの構築・運用支援ツールであるSELinux/Aidも標準で同梱されており、SELinuxを使ったシステム構築の敷居を大幅に下げてくれる。今回は、Turbolinux 10 serverを使用してSELinuxの基本操作、ポリシーファイルの設定について解説していく。

SELinuxの基本操作

 まず、最低限知っておくべきSELinuxの基本操作について説明する。

SELinuxカーネルの有効化

 インストール後のデフォルト状態ではSELinuxカーネルが無効なため、GRUBのブートオプションを指定し、SELinuxカーネルを有効化させる。これは、/boot/grub/grub.confファイルに次のような記述を追加すればよい。

title SELinux
kernel (hd0,0)/vmlinuz root=0303 quiet selinux=1
initrd (hd0,0)/initrd

ファイルのタイプ付け

 前述のとおり、Turbolinux 10 serverのデフォルトではSELinuxが無効になっている。SELinuxを無効から有効に変更した場合には、root権限でシステムに存在するすべてのファイルに対し、デフォルトのポリシーファイル(アクセス制御の設定)に基づいたタイプ付けを行う必要がある。ファイルのタイプ付けは、次のようにfixfiles relabelコマンドを実行する。

# fixfiles relabel

 fixfiles relabelコマンドの実行後は、前述したようにgrub.confが修正してあれば、再起動することでSELinuxカーネルを有効化できる。なお、fixfiles relabelコマンドでファイルのタイプ付けを行なう前にシステムを再起動してSELinuxを有効化させてしまうと、ファイルに適切なタイプが付与されないため、システムが正常に起動しないので注意が必要だ。

ドメインとタイプの確認

 SELinuxでは、psコマンドやlsコマンドが拡張されており、「-Z」オプションを付与することで、プロセスのドメイン、リソースのタイプなどセキュリティコンテキストを確認できる。以下は、それぞれの実行例だ。

ps -eZ |more
PID CONTEXT                                  COMMAND
  1 system_u:system_r:init_t                 init [5]
  2 system_u:system_r:kernel_t               [ksoftirqd/0]
  3 system_u:system_r:kernel_t               [events/0]
  4 system_u:system_r:kernel_t               [khelper]
  5 system_u:system_r:kernel_t               [netlink/0]
                :
                :
ls -Z
drwxr-xr-x root root system_u:object_r:bin_t      bin/
drwxr-xr-x root root system_u:object_r:boot_t     boot/
drwxr-xr-x root root system_u:object_r:device_t   dev/
drwxr-xr-x root root system_u:object_r:etc_t      etc/
drwxr-xr-x root root system_u:object_r:home_root_t  home/
drwx------ root root system_u:object_r:root_t     initrd/

ロールの確認

 SELinuxにログイン後(ログイン時のロールの選択に関してはこちらを参照)、ロールの確認を行いたい場合は、getconコマンドで確認できる。ただし、getconコマンドは、Fedora Core 3など一部のディストリビューションには用意されていない。その場合はidコマンドで確認すればよい。

# getcon
root:sysadm_r:sysadm_t

# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:sysadm_r:sysadm_t

SELinuxのモード

 SELinuxにはenforcingとpermissiveの2つのモードが存在する。それぞれのモードの違いは以下のとおりである。

  • enforcingモード

 enforcingモードでは、後述するセキュリティポリシーの設定で許可されていないアクセスがあった場合、アクセスを拒否してログを出力する。実際の運用はこのモードで行われる。

  • permissiveモード

 permissiveモードは、本来であればセキュリティポリシーに違反するアクセスであっても、ログを出力してアクセスを許可する。

 前回、監査ログについて「アクセス権の設定は、ログの内容をもとに許可するべきアクセス権の設定を行っていく」ことを説明した。enforcingモードで実際にアクセス拒否されたログの内容をもとに、許可すべきアクセス権の設定を行うのでは、一度に出力されるログが少ないため適切なアクセス権の設定を行うのに膨大な時間と労力が掛かってしまう。そのため通常は、permissiveモードでひととおりの操作を実行し、出力されたログの内容をもとに必要なアクセス権を設定、enforcingモードで実運用、という流れになる。

 現在動作しているモードは、getenforceコマンドで確認できる。SELinuxが動作している場合、このコマンドを実行することで「permissive」または「enforcing」と動作中のモードが表示される。なお、「Disable」と表示された場合はSELinuxが無効*となっている。

 また、/selinux/enforceファイルでも確認できる。「0」ならpermissiveモード、「1」ならenforcingモードでSELinuxが動作している。

# getenforce
Permissive
# more /selinux/enforce
0

SELinuxが無効
 ここでの「無効」とは、SELinuxカーネルは起動しているがSELinuxモジュールによるアクセス制御が行われないことを意味する。SELinuxカーネルの無効とは異なるので注意

モードの変更

 モードの変更はsetenforceコマンドで行う。rootユーザーでログインした後、newroleコマンドでsysadm_rロールに変更してから実行する。前回紹介したように、sysadm_rロール以外のロールではポリシーファイルの設定は行えないので注意してほしい*

 permissiveモードに変更したい場合は、コマンドの引数に「0」を、enforcingモードに変更したい場合は「1」を入力する。変更後、getenforceコマンドでモードが変更されたことを確認しておくといいだろう。

# newrole -r sysadm_r
Authenticating root.
Password:
# setenforce 0
# getenforce
Permissive

 setenforceコマンドでのモード変更は、サーバを再起動すると無効となってしまう。OS起動時にSELinuxを有効にするには、/etc/sysconfig/selinuxファイルで設定する。

 同ファイルを見ると、「SELINUX=」ディレクティブが見つかるはずだ。Turbolinux 10 serverのデフォルトでは「SELINUX=enforcing」が設定されている。この行を「SELINUX=permissive」または「SELINUX=disable」のように変更したいモードを指定すればよい。

 これまでに説明したコマンドを、表1にまとめた(fixfiles relabelコマンドについては、後で再度取り上げるので省略)。

表1 基本的なコマンド
コマンド
用途
ps -Z プロセスのセキュリティコンテキストの表示
ls -Z リソースのセキュリティコンテキストの表示
getenforce モードの確認
getcon セキュリティコンテキストの表示
id セキュリティコンテキストの表示
newrole ロールの変更
getenforce モードの確認
setenforce モードの変更

Linuxパーミッションチェック
 前回までの解説で、SELinuxはrootユーザーの権限を制限できることを説明した。しかし、SELinuxモジュールによるアクセス制御のほかに、通常のLinuxパーミッションチェックも有効なため、一般ユーザーがsysadm_rロールを保持している場合に比べ、rootユーザーがsysadm_rロールを保持しているほうが強い権限を保持していることになる。newroleコマンドなど、強い権限を必要とするコマンドの実行は、rootユーザーかつ、sysadm_rロールを保持している必要があることに注意しよう。

 次ページではポリシーの設定について解説していく。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ