不必要なdaemonの停止

サーバのデフォルト設定では様々なデーモンが動いているがそのままにしておくとセキュリティ上良くないものもあるため、ポートを開いてLISTEN状態になっているものに関してひとまずssh以外を停止する。デーモンを起動しているサービスを調べるのは以外と大変なのでメモ。

手順

1. 以下のコマンドでネットワーク経由で接続可能なサービスを調べる
$ sudo netstat -nlp

オプションの意味は

  • n : IPアドレスを数字で表示
  • l : リスニング状態のソケットのみ表示
  • p : ソケットを所有しているプロセスとそのPIDを表示
  • pに関して、well knownポートの場合rootにならないと表示されない
2. PIDから実行ファイルを特定
$ ls -l /proc/<PID>/exe
3. 実行ファイルを含むパッケージを探す
$ sudo apt-file search <実行ファイル名>

デフォルトでは入っていないので、なかった場合はapt-get installする

4. パッケージ名からそのserviceを探す
$ dpkg -L <パッケージ名> | grep init.d

パッケージの名の一部がわかっているだけなら-lオプションで探せる

5. サービスの情報確認

$ less /etc/init.d/<サービス名>
またはググればたくさんの情報が出てくるので概要を知るだけならその方が早い

6. サービスの停止

$ sudo service <サービス名> stop
または
$ sudo /etc/init.d/<サービス名> stop

うまくいかない場合は/etc/init.d/以下にサービス名のコマンドがあるか調べる。stopなら問題ないと思うが、restartなどだとserviceのコマンドとしてサポートされていないことがあるため。その場合はinit.dから起動、停止する。

7. 自動起動のチェック
$ sudo chkconfig --list <サービス名>
||<  
runlevel毎の自動起動のON, OFFが表示される
現在のrunlevelがわからない場合は以下
>||
$ sudo runlevel

ちなみにchkconfig, runlevelはubuntuにはデフォルトで入っていないのでapt-get installする