搭建FTP站点
简介
FTP(File Transfer Protocol,文件传输协议)是一种在计算机之间通过网络传输文件的标准协议。它采用客户端-服务器架构,允许用户从远程服务器上传、下载、重命名、删除、查看文件和目录结构等。FTP有两种传输模式:
- 主动模式(Active):服务器主动连接客户端的某个端口传输数据。
- 被动模式(Passive):客户端主动连接服务器开放的端口,适用于防火墙限制较多的网络环境。
FTP支持以下的三种认证模式 :
- 匿名认证
- 无需用户名和密码,使用anonymous或ftp登录。
- 通常用于公开资源下载,例如开源软件镜像站。
- 安全性较低,只能访问受限目录(如 /pub),且通常只读。
- 本地用户认证
- 使用Linux系统中的本地用户登录。
- 通常用于内网资源共享或在开发测试环境中使用。
- 用户名和密码来源于/etc/passwd和/etc/shadow。权限等同于系统用户,具有一定的操作风险。
- 虚拟用户认证
- 用户不是真实的系统用户,独立建立账号数据库。通常设置统一的宿主账户(如vsftpd)进行访问控制。
- 常结合gdbm或 libdb实现认证。
- 更安全,权限可精细控制,不依赖系统用户。
vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在HCE 2.0上安装并配置vsftpd,主要包括本地用户认证和虚拟用户认证两种方式。
准备工作
- 准备两台ECS实例,并分配公网IP或者弹性公网IP(EIP)。一台作为服务端,一台作为客户端。
- 服务端安全组的入方向规则已放行21端口。
前置条件
已完成yum源的配置,可参考HCE的REPO源配置与软件安装进行公网yum源的配置。
安装vsftpd软件
- 执行如下命令安装vsftpd:
dnf install vsftpd
- 执行如下命令启动vsftpd服务:
systemctl start vsftpd
- 执行如下命令查看服务状态:
systemctl status vsftpd
如果显示active (running)则表示启动成功,示例如图1。
如果需要将vsftpd设置为开机自启动,则需要再执行如下命令:
systemctl enable vsftpd
配置FTP服务器为本地用户认证方式
- 为FTP服务添加用户
- 执行如下命令为FTP服务创建一个用户:
adduser ftpuser
- 执行如下命令为ftp用户设置密码:
passwd ftpuser
- 执行如下命令为FTP服务创建一个用户:
- 配置vsftpd服务
- 执行如下命令为FTP服务创建目录和文件(可根据个人需要修改目录):
mkdir -p /data/ftp/ touch /data/ftp/test.txt
- 执行如下命令将上述目录的拥有者设置为新用户:
chown -R ftpuser:ftpuser /data/ftp/
- 打开“/etc/vsftpd/vsftpd.conf”文件,找到如下参数进行配置:
# 监听IPv4 sockets。 listen=YES # 根据需要选择是否配置监听IPv6 listen_ipv6=NO
在该配置文件的末尾添加下列参数,其中“pasv_address”参数为“准备工作”中的公网IP或者弹性公网IP(EIP):
# 设置本地用户登录后所在目录。 local_root=/data/ftp #全部用户被限制在主目录。 chroot_local_user=YES #开启被动模式。 pasv_enable=YES pasv_address=<FTP服务器公网IP地址> # 是否允许用户访问其他目录 chroot_list_enable=NO allow_writeable_chroot=YES # 如果chroot_list_enable配置为YES,则需要配置该选项;该配置为一个文件,包含哪些用户可以访问其他目录 # chroot_list_file=/etc/vsftpd/chroot_list # 设置被动模式下,可使用的端口范围,建议把端口范围设置在一段比较高的范围内,有助于提高访问FTP服务器的安全性。 # 可使用的端口范围的最小值,此例中是5000,请根据实际情况修改。 pasv_min_port=5000 # 可使用的端口范围的最大值,此例中是5010,请根据实际情况修改。 pasv_max_port=5010
除上述提及的参数,其他参数保持默认值即可。
无论是否配置chroot_list_enable,都需要创建“/etc/vsftpd/chroot_list”文件。
- 执行如下命令重启vsftpd服务:
systemctl restart vsftpd
- 执行如下命令为FTP服务创建目录和文件(可根据个人需要修改目录):
- 验证
- 执行如下命令查看vsftpd服务所使用的端口:
netstat -natp | grep vsftpd
默认情况下所使用的端口是21。
- 在安全组界面,入方向放开21端口和5000~5010端口。
- 在客户端执行以下命令安装ftp客户端:
yum install ftp
- 在客户端执行以下命令:
ftp <FTP服务器公网IP地址>
- 按照提示输入账号和密码。
- 登录成功后,执行“ls”命令后可以看到test.txt文件表示配置成功。
图2 验证示例
- 执行如下命令查看vsftpd服务所使用的端口:
配置FTP服务器为虚拟用户认证方式
- 创建虚拟用户账号并禁用shell登录
useradd vsftpd -s /bin/false
这是虚拟用户的映射账号,用于访问系统资源,但不能登录系统。
- 创建GDBM数据库
gdbmtool /etc/vsftpd/login.pag store ftpuser 123456
- ftpuser:虚拟用户名示例
- 123456:示例密码
- login.pag:账户密码存储文件
- 配置 PAM 模块,编辑/etc/pam.d/vsftpd文件,删除已有内容并写入以下内容:
auth required pam_userdb.so db=/etc/vsftpd/login account required pam_userdb.so db=/etc/vsftpd/login
db=/etc/vsftpd/login实际指的是login.pag,无需扩展名。
- 设置vsftpd配置文件,编辑/etc/vsftpd/vsftpd.conf文件,添加以下内容:
guest_enable=YES guest_username=vsftpd user_config_dir=/etc/vsftpd/user_conf #开启被动模式。 pasv_enable=YES pasv_address=<FTP服务器公网IP地址> # 是否允许用户访问其他目录 chroot_list_enable=NO allow_writeable_chroot=YES # 设置被动模式下,可使用的端口范围,建议把端口范围设置在一段比较高的范围内,有助于提高访问FTP服务器的安全性。 # 可使用的端口范围的最小值,此例中是5000,请根据实际情况修改。 pasv_min_port=5000 # 可使用的端口范围的最大值,此例中是5010,请根据实际情况修改。 pasv_max_port=5010
- 配置虚拟用户访问权限
- 创建用户权限配置目录
mkdir -p /etc/vsftpd/user_conf
- 在/etc/vsftpd/user_conf/ftpuser文件写入以下内容:
# 允许写操作(上传、改名、删除等) write_enable=YES # 允许本地系统用户(包括虚拟用户)登录 FTP 服务器 local_enable=YES # 本地用户创建文件/目录时使用的权限掩码 local_umask=077 # 匿名用户创建文件/目录时的权限掩码 anon_umask=022 # 设置虚拟用户或本地用户登录后的根目录,限制用户只能访问该目录及其子目录 local_root=/home/vsftpd/ftp # 允许匿名用户上传文件 anon_upload_enable=YES # 允许匿名用户创建目录 anon_mkdir_write_enable=YES # 允许匿名用户执行其他写操作,如删除或改名文件等 anon_other_write_enable=yes
在vsftp中,虚拟用户虽然通过本地用户映射实现,但其权限控制沿用了匿名用户的配置方式,因此需依赖匿名用户相关选项来启用写操作。
- 创建用户权限配置目录
- 准备FTP根目录并赋权
mkdir -p /home/vsftpd/ftp/pub chmod 777 /home/vsftpd/ftp/pub
- 重启vsftpd服务
systemctl restart vsftpd
- 验证
- 执行如下命令查看vsftpd服务所使用的端口:
netstat -natp | grep vsftpd
默认情况下所使用的端口是21。
- 在安全组界面,入方向放开21端口和5000~5010端口。
- 在客户端执行以下命令安装ftp客户端:
yum install ftp
- 在客户端执行以下命令:
ftp <FTP服务器公网IP地址>
- 按照提示输入账号和密码。
- 登录成功后,执行“ls”命令后可以看到test.txt文件表示配置成功。
图3 验证示例
- 执行如下命令查看vsftpd服务所使用的端口: