Ubuntu22.04配置vsftp服务

Ubuntu22.04配置vsftp服务

清阳
2024-08-17 / 3 评论 / 36 阅读 / 正在检测是否收录...

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

测试结果如下图、即配置测试成功

m0nhiwwu.png

十二、报错和解决办法

报错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
1

评论 (3)

取消
  1. 头像
    清阳 作者
    Windows 10 · Google Chrome
    @

    表情表情表情表情表情

    回复
  2. 头像
    sytxtztxoa
    Windows 10 · Google Chrome
    @

    叼茂SEO.bfbikes.com

    回复
  3. 头像
    宇宇熊
    MacOS · Google Chrome
    @

    很实用,收藏啦!表情

    回复