web-dev-qa-db-ja.com

vsftpdが起動しない(status = 2)

問題は、別のサーバーから有効な構成を転送した後、vsftpdサービスが開始できないことです。

vsftpdの構成ファイルのうち、これらのみが変更されました:

  • /etc/vsftpd.chroot_listローカルユーザー名を追加します。
  • /etc/vsftpd/vsftpd.conf

構成は次のとおりで、(*)は配布のデフォルトの変更または追加を示します。

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
ftpd_banner=Hello.
listen=YES (*)
listen_ipv6=NO (*)
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
dual_log_enable=YES
use_localtime=YES (*)
rsa_cert_file=/path/to/vsftpd.crt (*)
rsa_private_key_file=/path/to/vsftpd.key (*)
ssl_enable=YES (*)
allow_anon_ssl=NO (*)
force_local_data_ssl=NO (*)
force_local_logins_ssl=NO (*)
ssl_tlsv1=YES (*)
ssl_sslv2=NO (*)
ssl_sslv3=NO (*)
require_ssl_reuse=NO (*)
ssl_ciphers=HIGH (*)
ssl_tlsv1_1=YES (*)
ssl_tlsv1_2=YES (*)
allow_writeable_chroot=YES (*)

emphasized構成が動作中のvsftpdインスタンスから移植されたものです。稼働中のvsftpd-2.2.2-24.el6.x86_64インスタンスはRHEL 6(CentOS 6)にあり、新しいvsftpd-3.0.2-22.el7.x86_64インスタンスはRHEL 7(CentOS 7)にあります。実際、非常に類似した構成が別のサーバーで簡単に開始されました。

VSFTPはCentOS 7の起動に失敗します は役に立ちません。 listen_ipv6=YESは、いずれかのlisten_ipv6またはlistenはYESに設定され、もう一方はNOに設定されます。また、allow_writeable_chroot=YESは元の作業構成には存在しませんでした。vsftpdを開始するだけでは必要ありません(構成をRHEL 6からRHEL 7に移行することに関連する別の問題を解決することが不可欠です)。

$ Sudo systemctl status vsftpd
* vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled;
     vendor preset: disabled)
   Active: inactive (dead)
$ Sudo systemctl enable vsftpd
 Created symlink from /etc/systemd/system/multi-user.target.wants/
   vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
$ Sudo systemctl start vsftpd
 Job for vsftpd.service failed because the control process exited with
   error code. See "systemctl status vsftpd.service" and "journalctl -xe"
     for details.
$ Sudo systemctl -l status vsftpd
 * vsftpd.service - Vsftpd ftp daemon
    Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled;
      vendor preset: disabled)
    Active: failed (Result: exit-code) since Tue 2018-07-31 22:07:56 CDT;
      6min ago
   Process: 10131 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
     (code=exited, status=2)

 Jul 31 22:07:56 Host.example.com systemd[1]: Starting Vsftpd ftp daemon...
 Jul 31 22:07:56 Host.domain.tld systemd[1]: vsftpd.service: control process exited, code=exited status=2
 Jul 31 22:07:56 Host.domain.tld systemd[1]: Failed to start Vsftpd ftp daemon.
 Jul 31 22:07:56 Host.domain.tld systemd[1]: Unit vsftpd.service entered failed state.
 Jul 31 22:07:56 Host.domain.tld systemd[1]: vsftpd.service failed.

 $ Sudo journalct -xe

 Jul 31 22:23:33 Host.domain.tld Sudo[11537]: user : TTY=pts/0 ; PWD=/etc/vsftpd ; USER=root ; COMMAND=/bin/systemctl start vsftpd
 Jul 31 22:23:33 Host.domain.tld polkitd[697]: Registered Authentication Agent for unix-process:11538:187361910 (system bus name :1.13901 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, loc
 Jul 31 22:23:33 Host.domain.tld systemd[1]: Starting Vsftpd ftp daemon...
 -- Subject: Unit vsftpd.service has begun start-up
 -- Defined-By: systemd
 -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
 --
 -- Unit vsftpd.service has begun starting up.
 Jul 31 22:23:33 Host.domain.tld systemd[1]: vsftpd.service: control process exited, code=exited status=2
 Jul 31 22:23:33 Host.domain.tld systemd[1]: Failed to start Vsftpd ftp daemon.
 -- Subject: Unit vsftpd.service has failed
 -- Defined-By: systemd
 -- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
 --
 -- Unit vsftpd.service has failed.
 --
 -- The result is failed.
 Jul 31 22:23:33 Host.domain.tld systemd[1]: Unit vsftpd.service entered failed state.
 Jul 31 22:23:33 Host.domain.tld systemd[1]: vsftpd.service failed.
1
kbulgrien

この場合、非常によく似た動作構成で別のサーバーが正常に起動したのは幸運だったので、概念的にトラブルシューティングを行って違いを探すことができました。

解決策:構成によって参照されるファイルが実際に存在する(またはサーバーからアクセスできる)ことを確認してください。例えば:

rsa_cert_file=/path/to/vsftpd.crt
rsa_private_key_file=/path/to/vsftpd.key

作業インストールでは、キーはWebサーバーの立ち上げの一環としてすでにシステムに転送されていましたが、このシステムでは、vsftpdはまだ同期されていない場所にありました。

.crtファイルと.keyファイルにデータを入力すると、このエラーが解決しました。

1
kbulgrien