前回までの設定で、管理用の端末から SSH で安全にアクセスできる状態になり、不要なアクセスは iptables/ip6tables で拒否するようにした。しかし、不要なパッケージ(アプリケーション)を含んでいたり、アップデートされていなかったりすると、サーバーはセキュアとはいえない。今回は、パッケージ(アプリケーション)の整理を行う。
作業はすべてsu で root になって実施している。
対象
内部用サーバー
外部用サーバー
OS
CentOS release 5.10
不要なサービスの停止・パッケージの削除
通常は最初に行う作業だが、VPS は root でログインできる状態で提供されているので、最初に SSH と iptables/ip6tables の設定を行った。不要なサービスの停止・パッケージの削除を行おうと思ったのは、主に権限昇格攻撃(分類を参照)を防ぎたかったからだ。
さくらインターネットの VPS の場合、不要なサービスやパッケージはなかったので、実際には調査だけを行った。調査の過程を記録として残し、停止や削除を行う方法を記述する。
不要なサービスの停止
不要なサービスを洗い出すために、chkconfig や netstat を利用した。
netstat
netstat は、ネットワーク接続や、ルーティングテーブル、インターフェースの表示を行うためのツールだ。今回は、通信で待ち受けを行うサービスを調べるために「-l」オプションを使った。「-n」は、アドレスやポート番号を数値で表示するためのオプション、「-p」は、プログラムの名前と PID を表示するためのオプションだ。「-p」オプションは、root 権限が必要になる。
[root@server ~]# netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:[port] 0.0.0.0:* LISTEN 1676/sshd tcp 0 0 :::[port] :::* LISTEN 1676/sshd udp 0 0 [ip]:123 0.0.0.0:* 1687/ntpd udp 0 0 127.0.0.1:123 0.0.0.0:* 1687/ntpd udp 0 0 0.0.0.0:123 0.0.0.0:* 1687/ntpd udp 0 0 ::1:123 :::* 1687/ntpd udp 0 0 [ipv6]:123 :::* 1687/ntpd udp 0 0 :::123 :::* 1687/ntpd Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node PID/Program name Path ...
[port] と記述している箇所は、sshd の待ち受けポートだ。「123」は、ntpd が待ち受けを行っている。ntpd は時間を合わせるためのデーモンなので、動作させている。今回の環境では不要なサービスは存在しなかったが、意図していないサービスの待ち受けがある場合は、chkconfig で停止する必要がある。
chkconfig
chkconfig は、システムサービスの情報を表示したり更新するプログラムだ。表示は、「–list」オプションをつけて実行する。0~6の数字は、UNIX のランレベルを示す。
[root@server ~]# chkconfig --list NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off anacron 0:off 1:off 2:off 3:off 4:off 5:off 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off ...
今回は不要なサービスが見つからなかったが、不要なサービスがあれば chkconfig にサービス名と「off」という引数を渡して実行する。問題なく設定できた場合、実行結果は特に表示されない。
[root@server ~]# chkconfig NetworkManager off
不要なパッケージの削除
インストールされているパッケージを確認するには、rpm コマンドを使う。「-q」オプションはパッケージを検索することを意味し、「-a」オプションはすべてのパッケージを対象にすることを意味する。非常に長いリストなので、ファイルに保存した。
[root@server ~]# rpm -qa > packages.txt
不要なパッケージを削除する方法は、yum コマンドを使う方法と、rpm コマンドを使う方法がある。
yum コマンドの場合、引数に remove とパッケージ名を渡す。注意が必要なのは、依存するパッケージも削除してしまうこと。つまり、パッケージ「群」を削除することになる。
rpm コマンドの場合は「-e」オプションとパッケージ名を指定する。yum コマンドと異なり、指定したパッケージのみ削除する。また、削除しようとしているパッケージが、他のパッケージに依存されている場合、動作を強制するオプションをつけない限り削除できない。
今回は、不要なパッケージは特になかったので削除しなかった。
[root@server ~]# rpm -e nmap
パッケージの更新
不要なサービスやパッケージはないことがわかったので、最後にインストールしているパッケージを更新して再起動した。
[root@server ~]# yum update ... [root@server ~]# reboot
ここまでの設定で、とりあえずサーバーはセキュアな状態になったのではないだろうか。次回は、アップデートを自動化を行って初期設定を終える。
ピンバック: 運用時のパッケージのアップデート | UB Lab.