CentOS5 不要なサービスの停止 - itochif.com
GNOME端末を起動する
サーバーにインストールされているサービスを調査する
GNOME端末で、以下のコマンドを入力します。
# /sbin/chkconfig --list NetworkManager 0:off 1:off 2:off 3:off 4:off 5:off 6:off NetworkManagerDispatcher 0:off 1:off 2:off 3:off 4:off 5:off 6:off acpid 0:off 1:off 2:off 3:on 4:on 5:on 6:off anacron 0:off 1:off 2:on 3:on 4:on 5:on 6:off apmd 0:off 1:off 2:on 3:on 4:on 5:on 6:off atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off avahi-daemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off avahi-dnsconfd 0:off 1:off 2:off 3:off 4:off 5:off 6:off bluetooth 0:off 1:off 2:on 3:on 4:on 5:on 6:off conman 0:off 1:off 2:off 3:off 4:off 5:off 6:off cpuspeed 0:off 1:on 2:on 3:on 4:on 5:on 6:off crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off cups 0:off 1:off 2:on 3:on 4:on 5:on 6:off dhcdbd 0:off 1:off 2:off 3:off 4:off 5:off 6:off dund 0:off 1:off 2:off 3:off 4:off 5:off 6:off firstboot 0:off 1:off 2:off 3:on 4:off 5:on 6:off gpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off haldaemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off hidd 0:off 1:off 2:on 3:on 4:on 5:on 6:off httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off ibmasm 0:off 1:off 2:off 3:off 4:off 5:off 6:off ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off irda 0:off 1:off 2:off 3:off 4:off 5:off 6:off irqbalance 0:off 1:off 2:on 3:on 4:on 5:on 6:off kudzu 0:off 1:off 2:off 3:on 4:on 5:on 6:off lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off mcstrans 0:off 1:off 2:on 3:on 4:on 5:on 6:off mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off mdmpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off messagebus 0:off 1:off 2:off 3:on 4:on 5:on 6:off multipathd 0:off 1:off 2:off 3:off 4:off 5:off 6:off netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off netplugd 0:off 1:off 2:off 3:off 4:off 5:off 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off nscd 0:off 1:off 2:off 3:off 4:off 5:off 6:off ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off oddjobd 0:off 1:off 2:off 3:off 4:off 5:off 6:off pand 0:off 1:off 2:off 3:off 4:off 5:off 6:off pcscd 0:off 1:off 2:on 3:on 4:on 5:on 6:off portmap 0:off 1:off 2:off 3:on 4:on 5:on 6:off psacct 0:off 1:off 2:off 3:off 4:off 5:off 6:off rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off readahead_early 0:off 1:off 2:on 3:on 4:on 5:on 6:off readahead_later 0:off 1:off 2:off 3:off 4:off 5:on 6:off restorecond 0:off 1:off 2:on 3:on 4:on 5:on 6:off rpcgssd 0:off 1:off 2:off 3:on 4:on 5:on 6:off rpcidmapd 0:off 1:off 2:off 3:on 4:on 5:on 6:off rpcsvcgssd 0:off 1:off 2:off 3:off 4:off 5:off 6:off saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off smartd 0:off 1:off 2:on 3:on 4:on 5:on 6:off sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off vncserver 0:off 1:off 2:off 3:off 4:off 5:off 6:off winbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off wpa_supplicant 0:off 1:off 2:off 3:off 4:off 5:off 6:off xfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off ypbind 0:off 1:off 2:off 3:off 4:off 5:off 6:off yum-updatesd 0:off 1:off 2:off 3:on 4:on 5:on 6:off図1.chkconfig --listによる出力
一番左がサービス名、その右側に記載されているのがrunlevelです。3:offはrunlevel 3の時には起動時に起動しない、5:onは runlevel 5の起動時に起動する、という意味になっています。
runlevelの内容は/etc/inittabに記載されています。(以下は/etc/inittabからの抜粋です。)
# Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this)図2.CentOS5のランレベル
停止するべきサービスの特定と停止
先に記載したように、ネットワークサービスはリモートからの攻撃を受ける対象となってしまうので、ここでは一旦外部と接続できるネットワークサービスをすべて停止します。停止したサービスは、今後必要となった時に(自動)起動する設定を行います。
ネットワークサービスを特定するには以下のコマンドを使用します。
# /bin/netstat -anp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:674 0.0.0.0:* LISTEN 1764/rpc.statd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1743/portmap tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1973/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1993/sendmail: acce tcp 0 0 :::22 :::* LISTEN 1962/sshd udp 0 0 0.0.0.0:32768 0.0.0.0:* 2115/avahi-daemon: udp 0 0 0.0.0.0:668 0.0.0.0:* 1764/rpc.statd udp 0 0 0.0.0.0:671 0.0.0.0:* 1764/rpc.statd udp 0 0 0.0.0.0:5353 0.0.0.0:* 2115/avahi-daemon: udp 0 0 0.0.0.0:111 0.0.0.0:* 1743/portmap udp 0 0 0.0.0.0:631 0.0.0.0:* 1973/cupsd udp 0 0 :::32769 :::* 2115/avahi-daemon: udp 0 0 :::5353 :::* 2115/avahi-daemon: Active UNIX domain sockets (servers and established) 以下略・・・図3.ネットワークサービスを提供しているプログラムとポートのリスト
[Local Address]欄に[127.0.0.1:数値]と記載されているものは外部から接続できないため、ここでは除外します。[Local Address]がそれ以外のもの(0.0.0.0:数値や:::*になっているもの)は外部から接続できるため停止します。対応するプログラムは[PID/Program name]欄の[Program name]にあたります。この例では以下のプログラムが停止対象です。
- rpc.statd
- portmap
- sshd
- avahi-daemon
- cupsd
これらのプログラムのうち、[portmap]、[sshd]、[avahi-daemon]は図1.で出力されたサービスと同じ名称です。これらのネットワークサービスを停止するには以下のようなコマンドを入力します。
# /sbin/service portmap stop portmap を停止中: [ OK ] # /sbin/service sshd stop sshd を停止中: [ OK ] # /sbin/service avahi-daemon stop Avahi デーモンを停止中: [ OK ]図4.それぞれのネットワークサービスを停止
これらの停止コマンドを入力した後のネットワークサービスの状態を確認してみます。
# /bin/netstat -anp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:674 0.0.0.0:* LISTEN 1764/rpc.statd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1973/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1993/sendmail: acce udp 0 0 0.0.0.0:668 0.0.0.0:* 1764/rpc.statd udp 0 0 0.0.0.0:671 0.0.0.0:* 1764/rpc.statd udp 0 0 0.0.0.0:631 0.0.0.0:* 1973/cupsd Active UNIX domain sockets (servers and established) 以下略・・・図5.portmap,sshd,avahi-daemonを停止した後のネットワークサービスを提供しているプログラムとポートのリスト
図5の結果、停止するべきプログラムは以下の2つとなりました。
- rpc.statd
- cupsd
この2つのプログラムがどのサービスから起動されているのかを調べる必要があります。
調べる方法は、/etc/rc.d/init.d/内にあるサービス起動スクリプトを調査します。ここでは、grepコマンドを使用し、起動スクリプト内を調査します。
# /bin/grep cupsd /etc/init.d/* /etc/init.d/cups:DAEMON=cupsd # /bin/grep rpc.statd /etc/init.d/* /etc/init.d/nfslock:[ -x /sbin/rpc.statd ] || exit 5 /etc/init.d/nfslock: daemon rpc.statd "$STATDARG" /etc/init.d/nfslock: killproc rpc.statd /etc/init.d/nfslock: status rpc.statd /etc/init.d/nfslock: /sbin/pidof rpc.statd >/dev/null 2>&1; STATD="$?"図6.プログラム名から起動サービスを特定している(赤字がサービス)
この結果から、cupsdを停止するにはcupsサービスを、rpc.statdを停止するにはnfslockを停止すれば良い事がわかります。図4と同様の方法でこれらのサービスを停止します。
# /sbin/service cups stop cups を停止中: [ OK ] /sbin/service nfslock stop NFS statd を停止中: [ OK ]図7.cupsとnfslockを停止
これらの停止コマンドを入力した後のネットワークサービスの状態を再度確認してみます。
# /bin/netstat -anp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1993/sendmail: acce Active UNIX domain sockets (servers and established) 以下略・・・図8.外部接続を待ち受けているサービスが無くなった様子
これで、外部からの接続を待ち受けているネットワークサービスの停止が完了しました。
再起動してもサービスを起動しないようにする
これまでで停止したサービスは一時的に停止されたもので、システムが再起動されると再びサービスが起動されてしまいます。システムを再起動しても自動的にサービスが起動しないようにするには図1で使用したchkconfigコマンドを使用します。
# /sbin/chkconfig portmap off # /sbin/chkconfig sshd off # /sbin/chkconfig avahi-daemon off # /sbin/chkconfig cups off # /sbin/chkconfig nfslock off図9.自動起動をoffにするコマンド及びランレベル毎の確認
自動起動が無効になっている事の確認は、以下のコマンドで行います。
# /sbin/chkconfig --list portmap portmap 0:off 1:off 2:off 3:off 4:off 5:off 6:off # /sbin/chkconfig --list sshd sshd 0:off 1:off 2:off 3:off 4:off 5:off 6:off # /sbin/chkconfig --list avahi-daemon avahi-daemon 0:off 1:off 2:off 3:off 4:off 5:off 6:off # /sbin/chkconfig --list cups cups 0:off 1:off 2:off 3:off 4:off 5:off 6:off # /sbin/chkconfig --list nfslock nfslock 0:off 1:off 2:off 3:off 4:off 5:off 6:off図10.ランレベルとそれに対応する起動設定の確認
すべてがoffになっている事を確認し、再起動を行います。再起動後に設定が反映されているかどうかをnetstatコマンドで確認します。
# /bin/netstat -anp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1886/sendmail: acce Active UNIX domain sockets (servers and established) 以下略・・・図11.再起動しても外部接続を待ち受けているサービスが起動していない事の確認
再起動後もサービスが自動起動されていない事が確認できました。これで、リモートからの攻撃にさらされる可能性はほぼなくなりました。
ネットワークサービス以外の停止
ネットワークサービス以外のサービスも必要なければ停止しておく事で無駄なリソースの使用が減ります。例えば、bluetoothの機能を使用しないのにbluetoothサービスを起動しておくのはリソースの無駄使いです。以下は当サイトで行っている設定です。
| サービス | 状態 | サービス | 状態 |
|---|---|---|---|
| NetworkManager | off | NetworkManagerDispatcher | off |
| acpid | off | anacron | on |
| apmd | off | atd | on |
| auditd | on | autofs | on |
| avahi-daemon | off | avahi-dnsconfd | off |
| bluetooth | off | conman | off |
| cpuspeed | on | crond | on |
| cups | off | dhcdbd | off |
| dund | off | firstboot | off |
| gpm | off | haldaemon | on |
| hidd | off | httpd | off |
| ibmasm | off | ip6tables | off |
| iptables | on | irda | off |
| irqbalance | on | kudzu | on |
| lvm2-monitor | on | mcstrans | on |
| mdmonitor | off | mdmpd | off |
| messagebus | on | multipathd | off |
| netconsole | off | netfs | off |
| netplugd | off | network | on |
| nfs | off | nfslock | off |
| nscd | off | ntpd | off |
| oddjobd | off | pand | off |
| pcscd | off | portmap | off |
| psacct | off | rdisc | off |
| readahead_early | off | readahead_later | off |
| restorecond | on | rpcgssd | off |
| rpcidmapd | off | rpcsvcgssd | off |
| saslauthd | off | sendmail | off |
| smartd | on | sshd | off |
| syslog | on | vncserver | off |
| winbind | off | wpa_supplicant | off |
| xfs | off | ypbind | off |
| yum-updatesd | off |



CentOS5をインストールした直後には、必要のないと考えられるサービスが複数稼動しています。特に、脆弱性のあるネットワークサービスが稼動をしていると、そのサービスが原因で攻撃者にサーバーを乗っ取られてしまったり、他者への攻撃の踏み台として悪用されたりする恐れがあります。
「ファイアウォールで守られているから必要ない」と考える方がいるかもしれませんが、ファイアウォール内の別のサーバーが攻撃者によって乗っ取られたとき、そのサーバーからのアクセスをファイアウォールは防いでくれません。このプロセスを行う事によって、内部外部問わず、ネットワーク経由の攻撃者から、サーバーへの侵入の可能性を軽減することができます。