Linux
CentOS
xinetd
lpic

はじめてのxinetd

LPIC 102試験の勉強中。

ftpをsystemdでなくxinetdで起動してみる。

install ftp

一番ハマったのがftp側の設定。

適当に触ったときに hoge=NOhoge=NO と後ろにスペースを入れたら起動しなくて起動しなくて....

古いライブラリはそういう気持ちで付き合いましょう。

(通信チェックだけなら別にftp loginできなくてもいいので、サービス起動さえしてればよかったりする。悔しかったので。)

まずftpサービスを起動する

# install
yum install -y vsftpd ftp

# ftpサーバの設定
vim /etc/vsftpd/vsftpd.conf

# listenを有効にする
listen=YES
#listen=NO

# ipv6コメントアウト
#listen_ipv6=YES

# 一番下にこれを追加
userlist_deny=NO

ログインユーザの設定

# rootで使えるようにする
vim /etc/vsftpd/ftpusers

root の行をコメントアウトする

#root

# 起動して試す
systemctl start vsftpd && systemctl status vsftpd

ここで起動中のport, processの関係を見ておく

# port状況を確認
[root@cent70 vsftpd]# netstat -na  | grep 21
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     

# processのリレーションを確認
[root@cent70 vsftpd]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        └─vsftpd

systemdの下にvsftpdが起動しているのがわかる。ここがxinetdでは変わるはず。

次に、ここにftp接続されるとpstreeがどう変わるか見ていく。systemdなftpに接続してみる。

# ftp 接続してみる
ftp localhost
Name: root            # ここで Name: と来ていればftp通信はできてることになる
Password: ***        # rootの普通のpassword, sshで使ったりするやつ

ftp> dir        # ファイル一覧出ればok

この接続中のpstreeを別terminalから確認する。

[root@cent70 vsftpd]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        └─vsftpd───vsftpd───vsftpd

systemdの下にvsftpdが連なって何個も起動している。

xinetdを設定していく

こちらを参考にした

http://d.hatena.ne.jp/sin-j/20080812/1218512584

まずvsftpdを止める

systemctl stop vsftpd

# port が消えたか確認
[root@cent70 vsftpd]# netstat -na  | grep 21
なし

vsftpdのlistenを無効にしておく

vim /etc/vsftpd/vsftpd.conf
#listen=YES
listen=NO

xinetdにvsftpd用の設定を作る

vim /etc/xinetd.d/vsftpd 

# default: off
# description: The vsftpd FTP server serves FTP connections. It uses \
#       normal, unencrypted usernames and passwords for authentication.
service ftp
{
        socket_type             = stream
        wait                    = no
        user                    = root
        server                  = /usr/sbin/vsftpd
        server_args             = /etc/vsftpd/vsftpd.conf
        nice                    = 10
        disable                 = no
        flags                   = IPv4
}

xinetdを起動

systemctl start xinetd && systemctl status xinetd

ポートとプロセスをチェク!

[root@cent70 vsftpd]# netstat -na  | grep 21
tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN     

[root@cent70 vsftpd]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        └─xinetd

ポートが空いてる & xinetd がプロセスに変わっています!

ではftp接続してftpをxinetd経由で起動してみよう

# ftp 接続してみる
ftp localhost
Name: root            # ここで Name: と来ていればftp通信はできてることになる
Password: ***        # rootの普通のpassword, sshで使ったりするやつ

ftp> dir        # ファイル一覧出ればok

接続したままの状態で pstree を見てみよう!

[root@cent70 xinetd.d]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        └─xinetd───vsftpd───vsftpd

キタ━━━━(゚∀゚)━━━━!! xinetd が親の形でvsftpdが連なっています!

まとめ

xinetdを使うと vsftpc が単体でlistenしなくてよくなった

でも結局xinetdがport開けっぱなしでlistenするのね。その瞬間だけ開く、とかじゃないのか...

サービス起動なんて大した負荷じゃないし今のサーバだとほんと意味なさそう。。。

inetdをインストールしようとしたらxinetdが入ったのでこれをやった。inetdはどうやってcent7で試すんだろう。。。