vsftpd安装配置

其实现在已经很少需要用到FTP了,毕竟不够安全,用SFTP不香么?不过因为碰到个需求要在内网的服务器(其中有Windows)之间传文件,但是因为跨网段又不能用SAMBA,NFS啥的windows又不灵,所以只能搭个FTP服务做中转。

安装

以vsftpd 3.0.3为例。之前的版本用的是db4.8。

apt install vsftpd db5.3-util

目录及用户配置

cd
mkdir -p ftp/ftpuser1  # 一个FTP用户,挂在当前用户目录下
sudo chgrp -R ftp ftp
CUR_USER=`whoami`
sudo usermod -aG ftp $CUR_USER

配置FTP用户

创建目录及文件(以下命令以root用户运行):

mkdir /etc/vsftpd.d
touch /etc/vsftpd.d/ftpusers.txt
# 可以有多个FTP用户(FTP使用独立的用户认证,不同于系统用户),奇数行用户名,偶数行密码
# 类似:
# ftpuser1
# password1
cd /etc/vsftpd.d
db5.3_load -T -t hash -f ftpusers.txt vsftpd_login.db
chmod 600 *

配置FTP用户权限

修改/etc/pam.d/vsftpd,增加:

auth    sufficient    /lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd.d/vsftpd_login
account    sufficient    /lib/x86_64-linux-gnu/security/pam_userdb.so    db=/etc/vsftpd.d/vsftpd_login

auth    include    system-auth
account    include    system-auth
session    include    system-auth
session    required    pam_loginuid.so

配置FTP用户级配置

以下命令以root用户运行:

mkdir /etc/vsftpd.d/users.d
echo 'local_root=/home/$CUR_USER/ftp/ftpuser1' > /etc/vsftpd.d/users.d/ftpuser1

这里只指定了用户的FTP根目录,其它选项也可以配置,用户配置会覆盖vsftpd.conf里的通用配置。

vsftpd配置

配置文件/etc/vsftpd.conf,参考配置:

listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
allow_writeable_chroot=YES  # 没有这个会导致错误:refusing to run with writable root inside chroot ()
guest_enable=YES
guest_username=appuser
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd.d/user.d
pasv_enable=YES
pasv_min_port=13031
pasv_max_port=13051
pasv_promiscuous=YES
ftpd_banner=FTP service.
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO

重启vsftpd

以上配置完成后即可启动FTP服务:

systemctl restart vsftpd

正常可查看状态及日志:

systemctl status vsftpd
journalctl -xe

问题处理

如果不能启动,日志也没有什么异常,可手动运行测试:

vsftpd /etc/vsftpd.conf

即可显示错误日志。

推送到[go4pro.org]