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
あとは日本語ファイル名のものをやりとりしてログを確認



コメント