Armadilloフォーラム

vsftpd の切断時にプロセスが残る

k.sato

2025年5月14日 10時03分

==========
ABOSバージョン:3.20.3-at.7
カーネルバージョン:5.10.232-0-at
==========

お世話になっております。
佐藤と申します。

/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 /run/podman-init -- sh /startup.sh
    2 root      0:00 sh /startup.sh
    7 root      0:00 vsftpd /etc/vsftpd/vsftpd.conf
 ・・・
   32 root      0:00 sh
   39 nobody    0:00 vsftpd /etc/vsftpd/vsftpd.conf
   41 atmark    0:00 vsftpd /etc/vsftpd/vsftpd.conf
   51 root      0:00 ps
/ #

・コンテナ起動時にvsftpdを起動すると「7 root 0:00 vsftpd /etc/vsftpd/vsftpd.conf」のみ表示されてます。

・PCからFFFTPにてFTPサーバに接続したとき下記が追加され、切断をしても残っています。

   39 nobody    0:00 vsftpd /etc/vsftpd/vsftpd.conf
   41 atmark    0:00 vsftpd /etc/vsftpd/vsftpd.conf

・そのPCから再度FTPサーバに接続するとPIDが上書きされ、他PCからFTPサーバに接続すると下記のように追加されます。

/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 /run/podman-init -- sh /startup.sh
    2 root      0:00 sh /startup.sh
    7 root      0:00 vsftpd /etc/vsftpd/vsftpd.conf
 ・・・
   32 root      0:00 sh
   39 nobody    0:00 vsftpd /etc/vsftpd/vsftpd.conf
   41 atmark    0:00 vsftpd /etc/vsftpd/vsftpd.conf
   48 nobody    0:00 vsftpd /etc/vsftpd/vsftpd.conf
   50 atmark    0:00 vsftpd /etc/vsftpd/vsftpd.conf
   51 root      0:00 ps
/ #

これはプロセスが残ってしまってもよいのでしょうか?
それともvsftpd.confの設定ファイルで切断時にプロセスを落とすことができるのでしょうか?

以上、よろしくお願い致します。

コメント

at_dominique.m…

2025年5月14日 10時27分

佐藤さん

お世話になっています、
マルティネです。

> これはプロセスが残ってしまってもよいのでしょうか?
> それともvsftpd.confの設定ファイルで切断時にプロセスを落とすことができるのでしょうか?

Armadilloから大分離れてる気がしますが、
vsftpd は「keepalive」という機能を使って切断された接続を認識するようになっていますので、
そちらの「残ってしまったプロレス」はいずれ終了すると思います。

vsftpd.conf の設定は不要です。

ただ、Linux ではデフォルトの keepalive 値がとても長いので、プロエス終了までに 2 時間までかかってしまいます。

iproute2 パッケージにある「ss」プログラムでタイムアウトを確認できます:

/ # ss -npot
State       Recv-Q        Send-Q               Local Address:Port               Peer Address:Port        Process       
ESTAB       0             0                        10.88.0.3:21                 172.16.69.20:44810                      timer:(keepalive,117min,0)

また、タイムアウトの設定は sysctl で変更可能です:

armadillo:~# sysctl -a | grep keepalive
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200

(上記のデフォルト値では、2時間毎に keepalive を送信して、返事なかった場合は 75秒の間隔で 9つの ping を送ってから接続を切りますので、最大は ~131 min で切断します)

sysctl の変更は ABOS の /etc/sysctl.d ディレクトリにファイルを追加することで変更できます。

接続の数が少ない場合はデフォルトのままでも問題ないかと思いますが、残ってしまったプロセスはメモリを使ってますので、問題になりそうでしたら上記の設定を短くしていただくのもいいかもしれません。

よろしくお願いします。

マルティネ様

佐藤です。
お世話になっております。

> > これはプロセスが残ってしまってもよいのでしょうか?
> > それともvsftpd.confの設定ファイルで切断時にプロセスを落とすことができるのでしょうか?
>
> Armadilloから大分離れてる気がしますが、
> vsftpd は「keepalive」という機能を使って切断された接続を認識するようになっていますので、
> そちらの「残ってしまったプロレス」はいずれ終了すると思います。
そうですよね。
申し訳ありません。

どう調べてよいかわからなかったのですが、詳細な説明までありがとうございます。