さくらのVPSでSELinuxを有効にする

話題のさくらのVPSを借りた。すでにレビューや初期設定に関する情報は他にたくさんあるので、ここでは少々マニアック(?)な話題を。 KVMならディスクやNICは virtio だとおもったら、ここは完全仮想化(ゲストの汎用性を考えて?)。

さて、せっかくCentOS5で完全仮想化なのに、SELinuxが無効化されているのはもったいない。 SSHのアクセス制限等の基本的な設定が終わってから、すぐにSELinuxを有効にすることにした。

まず、初期状態でもラベルはある程度ついているが、怪しいのでこれは再ラベル必要か。

# ls -lZ /
drwxr-xr-x  root root system_u:object_r:bin_t:s0       bin
drwxr-xr-x  root root system_u:object_r:boot_t:s0      boot
drwxr-xr-x  root root                                  dev
drwxr-xr-x  root root system_u:object_r:etc_t:s0       etc
drwxr-xr-x  root root system_u:object_r:home_root_t:s0 home
drwxr-xr-x  root root system_u:object_r:lib_t:s0       lib
drwxr-xr-x  root root system_u:object_r:lib_t:s0       lib64
drwx------  root root                                  lost+found
drwxr-xr-x  root root system_u:object_r:mnt_t:s0       media
drwxr-xr-x  root root system_u:object_r:mnt_t:s0       misc
drwxr-xr-x  root root system_u:object_r:mnt_t:s0       mnt
drwxr-xr-x  root root system_u:object_r:usr_t:s0       opt
dr-xr-xr-x  root root                                  proc
drwxr-x---  root root root:object_r:user_home_dir_t:s0 root
drwxr-xr-x  root root system_u:object_r:sbin_t:s0      sbin
drwxr-xr-x  root root system_u:object_r:file_t:s0      selinux
drwxr-xr-x  root root system_u:object_r:var_t:s0       srv
drwxr-xr-x  root root                                  sys
drwxrwxrwt  root root system_u:object_r:tmp_t:s0       tmp
drwxr-xr-x  root root system_u:object_r:usr_t:s0       usr
drwxr-xr-x  root root system_u:object_r:var_t:s0       var

ということで、次回起動時にラベルの再付与できるように。

# touch /.autorelabel

その際はPermissiveモードで起動できるように、/etc/selinux/config を書き換えておく。

#SELINUX=disabled
SELINUX=permissive

再起動すると起動中にラベルが再付与される。コントロールパネルのリモートコンソールで次のようなメッセージを確認。

*** Warning -- SELinux targeted policy relabel is required.
*** Relabeling could take a very long time, depending on file
*** system size and speed of hard drives.
/sbin/setfiles:  labeling files under /
******************************************** 

ログインしてPermissiveモードになっていることを確認。

# getenforce 
Permissive

続いて、SSHのポートを変えてみよう。安全にSSHを使うために、接続元の制限や公開鍵認証をするのは当然として、あわせてポートも変えておきたい。このようなサービスのポートを変更するのはSELinuxのポリシに違反するので、対応が必要。例として 10022 番ポートにする(本当はもっとわかりにくいものを設定している)。これで /etc/ssh/sshd_config でポートを変更してもsshdを立ち上げることができる。

# semanage port -a -t ssh_port_t -p tcp 10022

sermanage コマンドで ssh_port_t タイプのポートで 10022 が追加されていることを確認。

# semanage port -l|grep ssh
ssh_port_t                     tcp      10022, 22

さくらのVPSでは標準では auditd が起動していないので、SELinuxに関するログは /var/log/messages や dmesg で確認ができる。ログを確認して問題がないようであれば、Enforcingモードに切り替える。

# setenforce 1
# getenforce 
Enforcing

起動時にEnforcingモードとなるように、 /etc/selinux/config も書き換える。

#SELINUX=disabled
#SELINUX=permissive
SELINUX=enforcing

これで再起動して動作に問題がなければOK。さくらのVPSの場合、リモートコンソールがあるので、万一SELinuxの設定をミスして起動できなくなっても安心(GRUB で enforcing=0 すればよい)。

SELinuxを有効にしたからセキュリティは万全というわけでもないし、運用も面倒だったりするのだけど、何もしないよりは安心できる気がする。

自分が設定したサーバを他人へ提供する場合、SELinuxの運用は難しい。例えば、初期状態ではWebアプリケーションがDBに接続したり、ネットワークを介して外部へ接続することすらできない。かといって、httpd_t に対して何でも許可してしまうと、SELinuxを有効にしている意味が薄れるので、ユーザが何をしたいのかをすべて把握する必要がある。それに対して、自分が使うサーバであれば、好きなように設定ができる。

わからずにSELinuxを有効にしていると「ホームディレクトリから移動したファイルがApacheで表示できない」「ポートを変更したらサービスが起動しない」「DocumentRoot を変更したらApacheが起動しない」「FTPでファイルが転送できない」なんてことになるので、SELinuxが悪者扱いされることが多いのは残念。

このエントリへのトラックバック

spamが増えたためトラックバック機能は停止中です。

このエントリへのコメント

spamが増えたためコメント機能は停止中です。

Information

サイト内検索

けんども日記

直近 10 件
RSS
RSS 1.0
Home@けんどもネット
diary.php(v2): 2005-06-11
Copyright © 2003-2005 Kendomo.net.