Ubuntu22.04配置vsftp服务
本文记录了Ubnutu配置基于Vsftp的FTP服务
注意本文配置文件和路径仅适用于Ubuntu22.04下的vsftp配置,其他系统请适当变通配置
一、环境
系统 软件环境
- Ubuntu: 22.03
- Vsftp: 3.0.5
- ftp 用户这里以用户名: admin, 密码:123456为例
- ftp上传目录 /data/ftp/admin
- ftp被动模式,监听55554端口,同时允许公网访问本机 55555-55557端口
二、配置步骤概要
FTP配置过程分为以下几步:
- 安装软件
- 创建必须得目录结构和空的配置文件
- 写入vsftp配置文件
- 修改vsftp pam认证配置文件
- 生成用户账号密码数据库
- 调整ftp目录权限,修正vsftp chroot环境
- 登录测试
三、安装软件和创建文件结构
apt update
apt install vsftpd db-util -y
vsftpd -v
vsftpd:version 3.0.5
cd /etc/
cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
mkdir vsftpd
cd vsftpd
touch chroot_list ftpusers user_list vuser_passwd.txt
mkdir vsftpd_user_conf
touch vsftpd_user_conf/admin #这个是ftp用户配置文件
四、user配置
向配置文件中写入配置
cat > ftpusers <<EOF
#Users that are not allowed to login via ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
EOF
允许登录的ftp用户,主要是写入admin这个ftp用户
cat > user_list <<EOF
#vsftpd userlist
#If userlist_deny=NO, only allow users in this file
#If userlist_deny=YES (default), never allow users in this file, and
#do not even prompt for a password.
#Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
#for users that are denied.
#root
#bin
#daemon
#adm
#lp
#sync
#shutdown
#halt
#mail
#news
#uucp
#operator
#games
#nobody
#gameday-dg
admin
EOF
创建ftp目录
mkdir -p /data/ftp/admin
五、用户认证密码文件
写入初始账号密码,一会根据这个生成数据库初始源文件
cat > vuser_passwd.txt <<EOF
admin
123456
EOF
生成ftp用户认证所需的数据库文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
六、SSL加密配置
生成ssl安全连接证书文件 (如果需要开启SSL安全连接的情况下)
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
在交互式回话框中填入内容如下:
CN
Shanghai
Shanghai
gmork
gmork
Gmork
825943010@qq.com
例如:Country Name (2 letter code)
[AU]:CNState or Province Name (full name)
[Some-State]:ShanghaiLocality Name (eg, city
) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:gmork
Organizational Unit Name (eg, section) []:gmork
Common Name (e.g. server FQDN or YOUR name) []:Gmork
Email Address []:825943010@qq.com
七、配置vsftpd.conf文件
写入/etc/vsftpd.conf主配置文件
cat > /etc/vsftpd.conf <<EOF
local_enable=YES
write_enable=YES
local_umask=022
user_config_dir=/etc/vsftpd/vsftpd_user_conf
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=NO
idle_session_timeout=300
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
ls_recurse_enable=YES
listen=YES
listen_port=55554
pam_service_name=vsftpd
guest_enable=YES
guest_username=ftpuser
userlist_enable=YES
userlist_deny=NO
tcp_wrappers=YES
use_localtime=YES
allow_writeable_chroot=YES
#ssl_enable=YES
#allow_anon_ssl=NO
#force_local_data_ssl=YES
#force_local_logins_ssl=YES
#ssl_tlsv1=YES
#ssl_sslv2=YES
#ssl_sslv3=YES
#rsa_cert_file=/etc/vsftpd/vsftpd.pem
#ssl_ciphers=HIGH
#require_ssl_reuse=NO
xferlog_enable=YES
secure_chroot_dir=/var/run/vsftpd/empty
#下面这行很重要,用来解决云服务器服务,客户端连接后报
#425 Security:B爱的IP connection错误的问题。
pasv_promiscuous=yes
EOF
设置chroot用户内容
cat > /etc/vsftpd.user_list <<EOF
#vsftpd userlist
#If userlist_deny=NO, only allow users in this file
#If userlist_deny=YES (default), never allow users in this file, and
#do not even prompt for a password.
#Note that the default vsftpd pam config also checks
/etc/vsftpd/ftpusers
# for users that are denied.
#root
#bin
#daemon
#adm
#lp
#sync
#shutdown
#halt
#mail
#news
#uucp
#operator
#games
#nobody
#gameday-dg
admin
EOF
八、配置pam认证
这里需要注意,由于 pam_userdb.so 在不同架构的系统下路径名略有差异,
可以根据自己的系统来确认
find / -name "pam_userdb.so"
知道到对应的so连接库文件,根据路径和名字把以下的改一下即可:
当前测试过的系统类型有:
amd64位系统 x86_64架构文件名为:
/usr/lib/x86_64-linux-gnu/security/pam_userdb.so
苹果电脑m1芯片下,linux虚拟机中.so文件路径为:
/usr/lib/aarch64-linux-gnu/security/pam_userdb.so
#先备份ftp认证配置文件
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
## 然后写入配置
cat > /etc/pam.d/vsftpd <<EOF
auth required /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
EOF
九、设置虚拟ftp用户配置
设置虚拟ftp用户名字,权限,ftp工作模式,监听端口,被动模式使用到端口
cat > /etc/vsftpd/vsftpd_user_conf/admin << EOF
local_root=/data/ftp/admin
local_umask=022
pasv_enable=YES
pasv_min_port=55555
pasv_max_port=55557
virtual_use_local_privs=YES
write_enable=YES
EOF
十、修改目录权限
创建ftp虚拟用户所属的实体账户,用户登录和目录读写授权判断
useradd ftpuser -m -s /usr/sbin/nologin
配置ftp上传目录属主
chown -R ftpuser.ftpuser /data/ftp
十一、测试和debug
测试结果如下图、即配置测试成功
十二、报错和解决办法
报错1:
错误: GnuTLS 错误 -15,位于 gnutls_record_recv: An unexpected TLS packet was received. 错误: 无法读取套接字: ECONNABORTED - 连接中止 错误: 无法连接到服务器
解决重新生成证书:
报错2
useradd ftpuser -m -s /usr/sbin/nologin
chown -R ftpuser.ftpuser /data/ftp
响应: 500 OOPS: cannot change directory:/nonexistent
叼茂SEO.bfbikes.com
很实用,收藏啦!