やんごとなき事情により、FTPのリバプロやバーチャルユーザーなどてんこ盛り構成にて構築した際の記録。
環境
- CentOS Linux release 7.4
- vsftpd 3.0.2
- パッシブモード
- TCP:21 + TCP:1500-1520
- haproxy 1.5.18
- マシンローカルIP: 192.168.1.2
設定
パッケージインストール
yum install haproxy yum install vsftpd yum install compat-db47
haproxy設定
/etc/haproxy/haproxy.cfg
global log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon stats socket /var/lib/haproxy/stats defaults mode tcp log global option tcplog option dontlognull option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 24h timeout server 24h timeout http-keep-alive 10s timeout check 10s maxconn 3000 frontend ftp mode tcp bind 192.168.1.2:21 default_backend ftp frontend ftpdata mode tcp bind 192.168.1.2:1500-1520 default_backend ftpdata backend ftp server 127.0.0.1 check port 21 inter 10s rise 1 fall 2 backend ftpdata server 127.0.0.1 check port 21 inter 10s rise 1 fall 2
バーチャルユーザー認証のためのPAM設定
/etc/pam.d/vsftpd.virtual
auth required pam_userdb.so db=/etc/vsftpd/virtual-users account required pam_userdb.so db=/etc/vsftpd/virtual-users session required pam_loginuid.so
バーチャルユーザーDB作成
ユーザー認証情報のDBが /etc/vsftpd/virtual-users
へ完全に置き換わるので、既存ユーザーの認証情報もここに記述する。
/etc/vsftpd/virtual-users
user1 user1_passwd user2 user2_passwd user3 . . .
# db_load -T -t hash -f /etc/vsftpd/virtual-users /etc/vsftpd/virtual-users.db # chmod 600 /etc/vsftpd/virtual-users.db # chmod 600 /etc/vsftpd/virtual-users
vsftpd設定
/etc/vsftpd/vsftpd.conf
. . . listen=YES #listen_ipv6=YES force_dot_files=YES chmod_enable=YES use_localtime=YES # listen only on lo listen_address=127.0.0.1 listen_ipv6=NO tcp_wrappers=YES # pasv pasv_enable=YES pasv_min_port=1500 pasv_max_port=1520 pasv_address=xxx.xxx.xxx.xxx # log dual_log_enable=YES log_ftp_protocol=YES # userlist userlist_enable=YES userlist_deny=NO userlist_file=/etc/vsftpd/user_list # user-specific config user_config_dir=/etc/vsftpd/user_conf # enable selective chroot allow_writeable_chroot=YES chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # enable virtual user pam_service_name=vsftpd.virtual virtual_use_local_privs=YES guest_enable=YES guest_username=actual_linux_username
/etc/vsftpd/user_list
user1 user2 user3 . . .
(必要な場合のみ) chroot設定
/etc/vsftpd/chroot_list
user1 user2 user3 . . .
/etc/vsftpd/user_conf/{{username}}
local_root=/path/to/chroot/dir/of/username