vsftpd 3.0.5 でログを日本語対応にする

vsftpd は日本語のログ出力に対応していません。調べてみるとソースを1行変えるだけでひとまず出力されるようになるとのことなので、やってみることにしました。少し躓いたので、メモとして残しておきます

 

更新日

2026/10/13 バージョン 3.0.5 用に書き直し。環境も変更

 

 

環境

Rocky Linux  8.10(x64)
vstpfd 3.0.5

 

 

インストール

関連パッケージのインストール

# dnf install openssl openssl-devel libcap libcap-devel gcc make pam-devel

 

執筆時点の私の環境は以下の通りです、

$ rpm -q openssl openssl-devel libcap libcap-devel gcc make
openssl-1.1.1k-17.el8_10.x86_64
openssl-devel-1.1.1k-17.el8_10.x86_64
libcap-2.48-6.el8_10.1.x86_64
libcap-devel-2.48-6.el8_10.1.x86_64
gcc-8.5.0-29.el8_10.x86_64
make-4.2.1-11.el8.x86_64

 

 

ダウンロード

公式サイトでURLを確認してダウンロード。この記事では ver 3.0.5 を使いました

# wget https://security.appspot.com/downloads/vsftpd-3.0.5.tar.gz
# tar xzfv vsftpd-3.0.5.tar.gz
# cd vsftpd-3.0.5

 

 

SSL対応にする

# vi builddefs.h

SSLに対応する場合はビルドの設定を変更します

 

5行目を#undefから#defineに変更します

#undef VSF_BUILD_TCPWRAPPERS
#define VSF_BUILD_PAM
#define VSF_BUILD_SSL

この記事ではTCPWrapperは使いません

 

 

ログを日本語対応にする

# vi logging.c

logging.cファイルを修正します

 

str_replace_unprintable(p_str, '?');

171行目付近のこの行を削除なりコメントアウトなりします

 

 

make

# make
# make install

 

makeエラー1

/usr/bin/ld: -lcap が見つかりません
collect2: エラー: ld はステータス 1 で終了しました
make: *** [Makefile:29: vsftpd] エラー 1

こんなエラーは、 /usr/lib64 に libcap.so が見つからない場合におきます。libcap をインストールしていても、今のバージョンの libcap はファイル名が libcap.so から変わってしまっています

 

./vsf_findlibs.sh を書き換えるか、シンボリックリンクを貼ることで解決します。今回は後者の手段を取ります。まずライブラリフォルダを確認します

# ls -l /usr/lib64/libcap*

/usr/lib64/libcap-ng.so.0 -> libcap-ng.so.0.0.0
/usr/lib64/libcap-ng.so.0.0.0
/usr/lib64/libcap.so.2 -> libcap.so.2.26
/usr/lib64/libcap.so.2.26

 

libcap.so がなく、libcap.so.2.xx のようなファイルがあったらシンボリックリンクを貼ります

# ln -s /usr/lib64/libcap.so.2 /usr/lib64/libcap.so

libcap.so と libcap.so.2.xx を紐づけます

 

# ls -l /usr/lib64/libcap*

/usr/lib64/libcap-ng.so.0 -> libcap-ng.so.0.0.0
/usr/lib64/libcap-ng.so.0.0.0
/usr/lib64/libcap.so -> /usr/lib64/libcap.so.2
/usr/lib64/libcap.so.2 -> libcap.so.2.26
/usr/lib64/libcap.so.2.26

確認。再度makeします

 

# make install

makeが通ったらインストール。

 

make install時に

/usr/share/man/man5/
/usr/share/man/man8/

のディレクトリがないと怒られたら作ってからやりなおします(投げやり)

# mkdir /usr/share/man/man5/
# mkdir /usr/share/man/man8/
# make install

 

 

設定

vsftpd.confの編集

# vi /etc/vsftpd/vsftpd.conf

適宜設定します

 

pam_service_name=vsftpd

ssl_enable=YES
rsa_cert_file=/***/*****.pem
rsa_private_key_file=/***/*****.pem
ssl_sslv2=NO
ssl_sslv3=NO
ssl_tlsv1=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES

seccomp_sandbox=NO
require_ssl_reuse=NO

私の設定の一部。

起動できない、ログインできない場合は seccomp_sandbox=NO の1行を追加します。vsftpdのseccompオプションは、最新のカーネルバージョン(3.5以上?)でftpコマンドを処理できない原因となるようです

require_ssl_reuse=NO は ssl_reuse に対応してないクライアントから接続したい場合に追加します。クライアントが 522 SSL connection failed; session reuse required のエラーを出して接続できない場合は、追加することで繋がるようになります。例えば、私の場合、Androidの X-plore File Manager が追加しないと接続できませんでした。不要であれば初期値(YES)のままがいいです

 

 

PAMの設定

# ls /etc/pam.d/vsftpd

上記例では conf 上では PAM の名前を vsftpd にしてましたが、実際にあるか確認します

 

# vi /etc/pam.d/vsftpd

なかったら作りましょう

 

#%PAM-1.0
auth       include      password-auth
account    include      password-auth
session    include      password-auth

こんな感じで

 

SSLの確認

# openssl s_client -connect localhost:21 -starttls ftp

サーバーと証明書の設定が適切か確認できます
TLS のバージョンなんかも確認できます

 

 

サービス化

# vi /etc/systemd/system/vsftpd.service
[Unit]
Description=Vsftpd ftp daemon
Wants=local-fs.target network-online.target
After=local-fs.target network-online.target [Service] Type=simple ExecStart=/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf ExecStop=/bin/kill ${MAINPID} [Install] WantedBy=multi-user.target
# systemctl daemon-reload
# systemctl start vsftpd

 

 

ログ確認

# cat /var/log/vsftpd.log

あとは日本語ファイル名のものをやりとりしてログを確認

 

コメント

タイトルとURLをコピーしました