SELinux概要

 Turbolinux 10 Server(先行評価版)におけるSELinuxの設定周りの概要につき、まず軽く触れておきましょう。Fedora Core同様、Turbolinux 10 Serverには標準でSELinuxがパッケージされていますので、いつでもセキュアなサーバ環境を整えることができます。

SELinux概要

 従来のLinuxのシステムは、root権限に全ての権利を付与していた為、何らかの方法でサーバに侵入され一旦root権限を奪取されてしまうと、後は侵入者の好き放題にされてしまうと言う危険性を持っていました。実際、最近このような事例も増えて来ています。こう言った事態を鑑み、最近開発されたのがこのSELinuxです。

 SELinux(Security-Enhanced Linux)は、米国のNSA(National Security Agency)が中心となって開発したLinuxカーネルのセキュリティ拡張モジュールです。SELinuxの機能は、これまでの諸悪の根源であったroot権限を排除して、プロセス・ユーザーに必要最小限の権限を割り当てると言うものです。スーパーユーザーであるrootはもちろん、それぞれのユーザーに必要最小限の権限しか与えませんので、例え侵入者にroot権限を奪取されたとしても、システムに致命的な打撃を受けることはなくなった訳です。詳しくは、以下の「日本SELinuxユーザー会」のホームページをご覧下さい。

http://www.selinux.gr.jp/

SELinuxカーネルの有効化

 Turbolinux 10 Serverをインストールした後、デフォルトの状態ではSELinuxカーネルは無効になっています。これを有効にするには(標準の)ブートローダーであるGRUBに、SELinuxカーネルを有効化するブートオプションを指定しなくては行けません。以下がGRUBの設定ファイルです。

/boot/grub/grub.conf

# This file was converted from /etc/lilo.conf by gilo-0.95-4.
timeout 15
password --md5 $1$g0Sk1ALJ$eRmOHb9VBbCj1Ph34Ceny1
default 0
fallback 1
splashimage (hd0,0)/grub/splash.xpm.gz
# keymap for jp106
setkey doublequote at
setkey ampersand caret
setkey quote ampersand
setkey parenleft asterisk
setkey parenright parenleft
setkey tilde parenright
setkey equal underscore
setkey plus colon
setkey colon quote
setkey asterisk doublequote
setkey bracketleft bracketright
setkey braceleft braceright
setkey bracketright backslash
setkey braceright bar
setkey backslash equal
setkey underscore plus
setkey backslash bracketleft
setkey bar braceleft
setkey F9 equal
setkey F10 bracketleft
setkey equal k73
setkey bracketleft k7d

title Turbolinux
kernel (hd0,0)/vmlinuz root=0303 quiet
initrd (hd0,0)/initrd

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

grub.confファイルの最後に上の赤字部分を付け加えます。これで起動時にSELinuxラベルも現れますので、SELinuxカーネルを有効にしたい時はこちらを選びましょう。

ファイルのタイプ付け

 ここで注意しなくては行けないのは、上の処理を行なった後すぐシステムを再起動しては行けないと言うことです。SELinuxを有効にした場合、root権限でシステムに存在する全てのファイルに対し、デフォルトのポリシーファイル(アクセス制御設定)に基づきタイプ付けを行なう必要があります。これには、コンソールから以下のコマンドを打ちます。

# fixfiles relabel

SELinuxの設定ファイル構成

 では、上述のSELinuxのポリシーファイルについて少し触れておきましょう。SELinuxの設定ファイルは/etc/selinuxディレクトリ下にあります。以下にそのファイル構成を示します。大体見渡せば気付く事と思いますが、/etc/selinux/strict以下と/etc/selinux/targeted以下との構成がほぼ同じとなっています。これは、SELinuxに非常に厳密なstrictポリシーと、特定のデーモンのみに制限を加える比較的緩やかなtargetedポリシーの2つのポリシーがあるからです。

ファイル構成 青色…ディレクトリ 赤色…ファイル

/etc /selinux /strict /contexts /files file_contexts    
/users root    
default_contexts      
default_type      
failsafe_context      
initrc_context      
userhelper_context      
/policy policy.18      
/src /policy /appconfig default_contexts  
default_type  
failsafe_context  
initrc_context  
root_default_contexts  
userhelper_context  
/domains /misc 以下略
/program 以下略
admin.te  
user.te  
/file_contexts /misc 以下略
/program 以下略
types.fc  
/flask access_vectors  
initial_sids  
Makefile  
mkaccess_vector.sh  
mkflask.sh  
security_classes  
/macros /program 以下略
admin_macros.te  
base_user_macros.te  
core_macros.te  
global_macros.te  
mini_user_macros.te  
user_macros.te  
/tunables apache_tun.te  
tunable.te  
/types device.te  
devpts.te  
file.te  
network.te  
nfs.te  
procfs.te  
security.te  
x.te  
assert.te    
attrib.te    
ChangeLog    
constraints    
COPYING    
fs_use    
genfs_contexts    
initial_sid_contexts    
Makefile    
mls    
net_contexts    
policy.18    
policy.spec    
rbac    
README    
serviceusers    
users    
VERSION    
/targeted /contexts /files file_contexts    
/users root    
default_contexts      
default_type      
failsafe_context      
initrc_context      
userhelper_context      
/policy policy.18      
/src /policy /appconfig default_contexts  
default_type  
failsafe_context  
initrc_context  
root_default_contexts  
userhelper_context  
/domains /misc 以下略
/program 以下略
unconfined.te  
/file_contexts /misc
/program 以下略
file_contexts  
types.fc  
/flask access_vectors  
initial_sids  
Makefile  
mkaccess_vector.sh  
mkflask.sh  
security_classes  
/macros /program 以下略
admin_macros.te  
base_user_macros.te  
core_macros.te  
global_macros.te  
mini_user_macros.te  
user_macros.te  
/tmp program_used_flags.te  
/tunables apache_tun.te  
tunable.te  
/types apache.te  
device.te  
devpts.te  
file.te  
network.te  
nfs.te  
procfs.te  
security.te  
x.te  
assert.te    
attrib.te    
ChangeLog    
constraints    
COPYING    
fs_use    
genfs_contexts    
initial_sid_contexts    
Makefile    
mls    
net_contexts    
policy.18    
policy.conf    
policy.spec    
rbac    
README    
serviceusers    
users    
VERSION    
config          

SELinuxの制御ファイル

 SELinuxの動作を制御するファイルは、/etc/selinux/configファイルです。以下にその内容を示します。SELinuxの動作に関しては、以下のようにenforcing(実施)、permissive(警告&許可)、disabled(使用不可)の3つがあります。


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted

 enforcingを選ぶと、セキュリティポリシーで許可されていないアクセスがあった場合、アクセスを拒否してログを吐きます。一方permissiveを選ぶと、セキュリティポリシーに違反するアクセスであっても、ログを吐いてアクセスを許可してしまいます。最後のdisabledは、言葉通りSELinuxは無効となります。

 又、前述のように、SELINUXTYPEにはtargetedstrictの2つのポリシーが存在します。targetedを選ぶとネットワーク関連のデーモン(サービス)のみを保護するのに対し、strictを選ぶと全てのデーモンを厳密に保護してくれます。サーバの運用状況に応じて選択して下さい。

・・・更に続く