Ubuntu系统使用 vsftpd 搭建FTP服务器

vsftpd(Very Secure FTP Daemon)是目前最流行的FTP服务器软件之一,它在安全性和性能方面表现出色。vsftpd支持虚拟用户、各种认证方式(如用户名密码、SSL/TLS证书等)和强大的访问控制功能,可以灵活地配置用户访问权限。

今天十一张(www.11zhang.com)来分享一下 Ubuntu 系统如何使用 vsftpd 搭建FTP服务器。

搭建教程

下面以 Ubuntu 系统22.04版本来演示具体的操作步骤。

1、通过SSH登录到您的 Ubuntu 服务器,并以 root 管理员身份运行下面的命令,请先对 Ubuntu 系统进行更新,如下图。

sudo apt update && sudo apt upgrade

在Ubuntu上安装vsftpd

2、运行下面的命令,使用Ubuntu 官方源进行安装vsftpd,如下图。

sudo apt install vsftpd -y

在Ubuntu上安装vsftpd

3、安装完成后启动vsftpd,如下图。

sudo systemctl start vsftpd

在Ubuntu上安装vsftpd

4、将vsftpd设置为开机自启动,如下图。

sudo systemctl enable vsftpd

在Ubuntu上安装vsftpd

5、查看vsftpd的状态,如果打印出来的列表中有 vsftpd 并且前面是[+],说明安装成功并已启动服务,如下图。

sudo service --status-all

在Ubuntu上安装vsftpd

6、下面开始配置vsftpd,先创建一个FTP根目录(如 ftphome),如下图。

sudo mkdir /ftphome

在Ubuntu上安装vsftpd

在Ubuntu上安装vsftpd

7、创建一个FTP新用户(如 ftpuser)并设置密码,如下图。

sudo useradd -d /ftphome ftpuser
sudo passwd ftpuser

在Ubuntu上安装vsftpd

8、修改FTP根目录(ftphome)的所有者,如下图。

sudo chown ftpuser:ftpuser /ftphome -R

在Ubuntu上安装vsftpd

9、运行下面的命令,创建一个用户列表文件,如下图。

sudo vi /etc/vsftpd.chroot_list

在Ubuntu上安装vsftpd

i 键进入编辑模式,把刚才创建的用户名填入(一个用户名占据一行),按 Esc 键并输入 :wq 保存退出,如下图。

在Ubuntu上安装vsftpd

在Ubuntu上安装vsftpd

10、编辑vsftpd配置文件

sudo vi /etc/vsftpd.conf

在Ubuntu上安装vsftpd

i 键进入编辑模式,主要设置以下内容,然后Esc 键并输入 :wq 保存退出。

listen=YES
#listen_ipv6=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list

在Ubuntu上安装vsftpd

在Ubuntu上安装vsftpd

11、重启vsftpd服务。

sudo systemctl restart vsftpd

在Ubuntu上安装vsftpd

12、最后用FTP客户端测试一下。

在Ubuntu上安装vsftpd

在Ubuntu上安装vsftpd

PS:vsftpd服务的默认端口是21,这也是FTP协议的标准端口,用于主动模式连接。如果你需要修改vsftpd的默认端口,可以在 /etc/vsftpd.conf 配置文件中更改,记得修改后重启vsftpd服务以应用更改。

listen_port=你的端口号

知识拓展

1、修改配置文件

vsftpd服务的配置文件路径:/etc/vsftpd.conf,不同版本的配置文件目录可能不一样。

# 监听IPV4
listen=YES
# 监听IPV6关闭
listen_ipv6=NO
# 开启日志,默认位置在 /var/log/vsftpd.log
xferlog_enable=YES
# 禁止匿名登录,就是必须要输入账户密码
anonymous_enable=NO
# 允许本地用户登录
local_enable=YES
# 允许写入
write_enable=YES
# 默认目录, 默认登陆后在根目录
local_root=/

# 高版本的vsftpd增加了安全限制,家目录不允许有写入权限"w"
# 将本地目录限制在家目录中
chroot_local_user=YES
# 是否启用chroot_list, 写入其中的用户将取消家目录限制
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
# 让用户拥有家目录的写入权限,而不报错
allow_writeable_chroot=YES

# utf8文件系统
utf8_filesystem=YES

2、对root用户的配置

从安全角度考虑,通常一些用户是不允许通过FTP登录的(也就是登录黑名单),这些用户被写在一个vfpusers文件中,但可以通过以下命令找到该目录,将里边的root用户注释掉。

sudo find / -name "ftpusers"

3、多用户配置

(1)vsftpd服务支持三种用户模式

●匿名用户:默认vsftpd是支持匿名用户的,该用户登录FTP服务使用 anonymous 用户直接登录,不需要输入密码。
●系统用户:可以使用Linux系统本身存在的用户,作为FTP用户,具体哪些用户可以登录FTP,可以通过配置文件指定。
●虚拟用户:虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。

PS:虚拟用户在登录过程中会被隐射成匿名用户,因为匿名用户的权限是统一配置的,那么如果想区分匿名用户的权限,默认情况是无法实现的。

(2)建立虚拟宿主用户

虚拟用户并不是系统用户,也就是说这些FTP的用户在系统中是不存在的。他们的总体权限其实是集中映射在一个系统用户身上,所谓vsftpd的[虚拟宿主用户],就是这样一个支持着所有虚拟用户的宿主用户。执行以下命令将虚拟用户映射在virtusers这个用户上。

sudo mkdir /data/ftproot -p
# /sbin/nologin 无法使用shell登陆,只能用ftp其他方式的等登陆
useradd -d /data/ftproot virtusers -s /sbin/nologin

(3)建立FTP相关工作目录,以及权限管理

最新版vsftpd不允许用户主目录有w权限,因此在主目录下新建一个子目录。所有上传、下载、删除、重命名等操作只能在子目录中进行,虚拟用户vuser1的ftp目录是/data/ftproot/vuser1/,没有w权限,设置权限为500,以下是相关目录权限设置参考(或开启 allow_writeable_chroot=YES 配置)。

/data                                                        #数据目录,便于后期数据备份
└── [drwxr-xr-x]  ftproot                        #FTP服务目录
    └── [dr-x------]  vuser1                      #虚拟用户主目录,后期可以增加vuser2、vuser3...
        └── [drwxr-xr-x]  rootdir                #虚拟用户FTP工作目录,可以在此目录读写操作

# 创建目录
mkdir -p /data/ftproot/vuser1/rootdir

# 配置权限
chown -R virtusers.virtusers /data/ftproot
chmod 500 /data/ftproot/vuser1

(4)配置虚拟用户

执行以下命令生成虚拟用户列表。

vi /etc/vsftpd/vuserlist

虚拟用户列表的内容。说明:奇数行为用户名,偶数行为用户密码,如果有多个用户,直接在下面写,不要有空格或换行。

vuser1
123456

用系统的db_load工具来生成db文件,出于安全角度修改vuserlist.db为600权限。

db_load -T -t hash -f /etc/vsftpd/vuserlist /etc/vsftpd/vuserlist.db
chmod 600 /etc/vsftpd/vuserlist.db

找到PAM的文件路径并修改PAM验证。

$ sudo find / -name "pam_userdb.so"
/usr/lib/x86_64-linux-gnu/security/pam_userdb.so   # 用这个,一般在lib目录下的
/snap/core18/1944/lib/x86_64-linux-gnu/security/pam_userdb.so

修改/etc/pam.d/vsftpd,这个文件名与/etc/vsftpd.conf中的pam_service_name=vsftpd相对应。在最前面加入以下两行内容。

# 注意,sufficient模式的意义大约是满足了就通过验证,不满足就验证下一个。本地用户可能也要用pam认证,所以放到所有认证的开头,并且不是required模式。
auth sufficient /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vuserlist
account sufficient /usr/lib/x86_64-linux-gnu/security/pam_userdb.so db=/etc/vsftpd/vuserlist

创建及配置虚拟用户的配置文件。

mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/vuser1

写入

local_root=/data/ftproot/vuser1
anon_upload_enable=YES
anon_world_readable_only=NO
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

首先需要修改vsftpd.conf文件,在最下面增加配置。

#如果前面/etc/pam.d/vsftpd没有改文件名,就不修改
pam_service_name=vsftpd
#虚拟用户使用本地用户的权限
virtual_use_local_privs=YES
#开启虚拟用户
guest_enable=YES
#指定虚拟用户的宿主用户
guest_username=virtusers
#指定用户的配置文件路径,里面是为每个用户的配置文件
user_config_dir=/etc/vsftpd/vuser_conf
#开启被动模式
pasv_enable=YES
#被动模式最小端口,本示例设置为30100
pasv_min_port=30100
#被动模式最大端口,本示例设置为30200
pasv_max_port=30200
#被动模式的IP地址,VPC环境下需要设置为服务器公网地址
# pasv_address=X.X.X.X

重启服务

sudo service vsftpd restart

详细搭建步骤,可参考阿里云云服务器ECS搭建FTP站点教程:https://help.aliyun.com/zh/ecs/use-cases/manually-build-an-ftp-site-on-a-linux-instance#4ae34076052mh

✅来源:十一张博客
© 版权声明
THE END
如果觉得这篇文章对您有帮助,不妨考虑请我喝杯奶茶😄
点赞2赞赏 分享
评论 抢沙发
头像
评论人工审核通过显示,请勿重复提交!
提交
头像

昵称

取消
昵称表情代码

    暂无评论内容