■サービスの起動と停止 LAST UPDATE 2006/08/14
------------------------------------------------
■initプロセスとランレベル
◆起動の種類
------------------------------
0 システムの停止
1 シングルユーザーモード(管理者モード)
2 NFSを使わないマルチユーザーモード
3 マルチユーザーモード
4 未使用
5 GUIログインを行えるマルチユーザーモード
6 システムの再起動
------------------------------
システムの再起動(レベル6)と停止(レベル0)を除くレベルがシステムの起動状態を定義している。
ただ、管理者モード(レベル1やレベル2)はメンテナンス時に使うレベル。
レベル4は未使用だからAPPを起動するランレベルは、残るレベル3とレベル5である。
◆起動時のランレベルは『inittab』ファイルで設定
------------------------------
# vi /etc/inittab
------------------------------
~
id:5:initdefault:
~
------------------------------
→ランレベル『5』
■デーモンの起動と停止
常デーモンを起動するときには起動スクリプトと呼ばれるシェルスクリプトが使われます。
これらのファイルは/etc/init.dに置かれており、次のようにして使います。
------------------------------
# /etc/init.d/daemon start (起動)
# /etc/init.d/daemon stop (終了)
------------------------------
/etc/init.dの中を見てみれば分かりますが、ここにはたくさんの起動スクリプトがあります。
システム管理者はこの中からマシンの用途に合ったデーモンだけを選んで、
Linux起動時に自動的に起動するようにさせる必要がある。
⇒「ntsysv」や「chkconfig」を利用して設定が可能。
■ntsysv
システム起動時に自動起動するサービスを変更することができる。
Red Hat Linux系であればntsysvコマンドでサービスの状態を確認可能。
デフォルトで自動起動されるサービスを停止させセキュリティーを確保できる。
【注意】
言語設定が日本語になっている場合はターミナルで文字化けが起きるので、unset LANGにて言語設定をリセットしましょう。
◆ntsysvは、システム起動時の状態を設定するだけで、起動しているサービスを停止したり、
停止しているサービスを起動したりすることはできない。
その場合は、/etc/rc.d/initd/ディレクトリにある、各デーモンの起動スクリプトを、
「start、stop」などのオプションを付けて手動で実行する。
◆/etc/rd.c階層のサービス起動/停止
(1)「start、stop」などのオプションを付けて手動で実行する。
------------------------------
# /etc/rc.d/init.d/smb start
Starting SMB services: [ OK ]
Starting NMB services: [ OK ]
------------------------------
(2)serviceコマンドより
------------------------------
service httpd stop
service ipchains stop
service iptables stop
service httpd stop
service xinetd restart
------------------------------
補足(GUI設定)
redhat-config-services
------------------------------
■chkconfig
ランレベルごとのサービス設定
※【serviceconf】GUI
chkconfig --list
chkconfig --list anacron /etc/rc.d配下のサービス
chkconfig --list finger xinetd配下
⇒chkconfig finger on 実行で即反映
【注意】
chkconfig を使うには, 起動スクリプトが chkconfig で 「on, off」出来るように設定されている必要があります.
◆手動による起動ファイルの設置
/etc/rc.d/init.dにスクリプトを用意したら、ランレベル毎にシンボリックリンクを作成する。
ランレベル3で起動
------------------------------
# cd ../rc3.d
# ln -sf ../init.d/httpd S83httpd
------------------------------
ランレベル5で起動
------------------------------
# cd ../rc5.d
# ln -sf ../init.d/httpd S83httpd
------------------------------
■【xinetd】スーパーデーモンによるサービスの起動と停止
※http://www.xinetd.org/
xinetdは、inetdのセキュリティを強化すべく開発されたスーパーデーモンで、
セキュリティ設定のみならず、サービスの提供時間帯を設定できるなど、細かなアクセス制御が可能です。
従来はtcpwrappersで行っていたアクセス制御を、xinetdのみで行うことが出来ます。
RedHatディストリビューションでは、7.0以降はデフォルトでxinetdが使われます。
・IPによるアクセス制御
・ドメインによるアクセス制御
・サービスの提供時間
・接続数の制限
・ログ出力
xinetdは、/etc/xinetd.confファイルでアクセス制御を行います。
RedHatは基本的な設定のみ/etc/xinetd.confファイルを用い、
サービス毎の設定ファイルは/etc/xinetd.dディレクトリに置く方式を取っています。
------------------------------
/etc/xinetd.conf ⇒グローバルな xinetd設定ファイル。
/etc/xinetd.d/ ⇒全てのサービス特有のファイルを含んだディレクトリ。
------------------------------
◆アクセス制御の書式は次の通りです。
------------------------------
service <サービス名>
{
<属性> <オペレータ: =, +=, -=> <値,...>
}
------------------------------
設定できる主な属性は次のとおり。
◆xinetd設定の属性
------------------------------
属性 説明
user 実行ユーザの指定.
group 実行グループの指定.
only_from アクセスを許可するクライアントを設定.
no_access アクセスを拒否するクライアントを設定.
disable サービスを提供するか否かをyes/noで指定.yesの場合サービス停止.
socket_type ソケットタイプの設定.次のタイプが指定できる:stream;dgram;raw;seqpacket
server サーバプログラムの指定.
server_args サーバプログラムの起動オプションを指定.
instance サーバプログラムの最大同時起動数を設定.
nice nice値の指定.
log_on_success サーバプログラムの正常起動時および正常終了時のログ出力要素を指定.
log_on_failure サーバプログラムの異常起動時および異常終了時のログ出力要素を指定.
port サーバプログラムの接続ポート番号を指定.
access_times アクセスできる時間帯を設定.
------------------------------
オペレータは次の3種類が使用でき、柔軟にアクセス制御を記述できます。
◆xinetd設定のオペレータ
------------------------------
オペレータ 説明
= 属性の代入
+= 属性の追加
-= 属性の削除
------------------------------
◆具体的な例を使って、
/etc/xinetd.confファイルと/etc/xinetd.dディレクトリ以下のファイルの記述方法を説明します。
次のようなアクセス制御を行うとします。
・localhost(127.0.0.1)からのアクセスは全て許可
・ftpサービスは、ホスト"254.188.149.1"とホスト"earth.solarsystem.net"からのアクセスのみ許可
・telnetサービスは、ネットワーク"254.188.149.0"とドメイン"solarsystem.net"からのアクセスは許可
・それ以外のアクセスは拒否
◆/etc/xinetd.conf
以下にRedHat7.2に付属する/etc/xinetd.confファイルに、新たなアクセス制御属性(9行目)を追加したものを示します。
------------------------------
1 #
2 defaults
3 {
4 instances = 60
5 log_type = SYSLOG authpriv
6 log_on_success = HOST PID
7 log_on_failure = 25 30
8
9 only_from = 127.0.0.1
10
11 }
12
13 includedir /etc/xinetd.d
------------------------------
9行目で、特に設定しない限り、localhost(IPアドレス:127.0.0.1)のみアクセス許可と指定します。
13行目の"includedir"属性で、/etc/xinetd.dディレクトリ以下の、サービス毎の設定ファイルを読み込みます。
◆/etc/xinetd.d/wu-ftpd
これは、FTPサービスのアクセス制御を設定するファイルです。
------------------------------
1 services ftp
2 {
3 socket_type = stream
4 wait = no
5 user = root
6 server = /usr/sbin/in.ftpd
7 server_args = -l -a
8 log_on_success += DURATION
9 log_on_failure += USERID
10 nice = 10
11 disable = no
12
13 only_from = 254.188.149.1
14 only_from = earth.solarsystem.net
15
16 }
------------------------------
11行目で、disableをnoとして、FTPサービスが提供可能とします。
13行目、14行目で、ホスト"254.188.149.1"とホスト"earth.solarsystem.net"からのアクセスを許可します。
なお、FTPサービスのアクセス制御は、/etc/ftphostsファイルでの設定も有効となりますので、
/etc/ftphostsファイルの設定も同様に行ってください。
◆/etc/xinetd.d/telnet
これは、TELNETサービスのアクセス制御を設定するファイルです。
------------------------------
1 services telnet
2 {
3 flags = REUSE
4 socket_type = stream
5 wait = no
6 user = root
7 server = /usr/sbin/in.telnetd
8 log_on_failure += USERID
9 disable = no
10
11 only_from = 254.188.149.0
12 only_from = solarsystem.net
13
14 }
------------------------------
9行目で、disableをnoとして、TELNETサービスが提供可能とします。
11行目、12行目で、ネットワーク"254.188.149.0"とドメイン"solarsystem.net"からのアクセスを許可します。
■接続ポートの検査
不要なサービスを停止したら、netstatコマンドを使って確実にポートが閉じているか否か、確認をしてみましょう。
------------------------------
# netstat -ln -A inet
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
------------------------------
カフェでも!駅でも!海外でも!外出先で快適インターネット!!
無線LANサービス「ホットスポット」