最近注目のSELinuxについて学ぶ同連載、今回から、SELinuxを実際に使っていくために必要な基本的なコマンド群を学ぶとともに、実際にアクセス許可の設定を行っていこう。
Turbolinux 10 serverはLinuxカーネル2.6を搭載したディストリビューションの1つだ。また、SELinuxの構築・運用支援ツールであるSELinux/Aidも標準で同梱されており、SELinuxを使ったシステム構築の敷居を大幅に下げてくれる。今回は、Turbolinux 10 serverを使用して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にはenforcingとpermissiveの2つのモードが存在する。それぞれのモードの違いは以下のとおりである。
enforcingモードでは、後述するセキュリティポリシーの設定で許可されていないアクセスがあった場合、アクセスを拒否してログを出力する。実際の運用はこのモードで行われる。
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コマンドについては、後で再度取り上げるので省略)。
|
次ページではポリシーの設定について解説していく。
Copyright © ITmedia, Inc. All Rights Reserved.