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]