CentOS 7上配置FTP服务器

783 阅读3分钟

FTP协议

FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。

默认情况下FTP协议使用TCP端口中的 20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定

服务器端设置

安装vsftpd

sudo yum install vsftpd

备份配置文件

sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak

更改配置文件 /etc/vsftpd/vsftpd.conf

仅允许本地用户访问FTP服务器

anonymous_enable=NO		//禁止匿名访问
local_enable=YES

允许更改文件系统

write_enable=YES

将本地用户锁定在其主目录中

chroot_local_user=YES

chroot下允许上传

当启用chroot后,若用户访问的目录是可写的,vsftpd将拒绝上传文件

user_sub_token=$USER
local_root=/home/$USER/ftp

被动FTP连接

vsftpd可以使用任何端口进行被动FTP连接,我们指定一个端口范围,然后在防火墙中打开该范围

pasv_enable默认值为YES

pasv_min_port=30000
pasv_max_port=31000

限制用户登录

仅允许/etc/vsftpd/user_list中的用户登录FTP服务器

userlist_file=/etc/vsftpd/user_list
userlist_deny=NO

使用SSL/TLS保护传输

以下命令将创建一个有效期为10年的2048位私钥和自签名证书。私钥和证书都将保存在同一文件中

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

生成该文件时的配置选项皆可回车跳过

修改配置文件

sudo vi /etc/vsftpd/vsftpd.conf
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem
ssl_enable=YES

不使用加密传输时,用Wireshark进行抓包

可以看到明文的账号和密码

使用加密传输时,用Wireshark进行抓包

已经不能看到明文的信息

更多的配置请查看vsftpd官方文档

防火墙设置

查看防火墙状态

firewall-cmd --state

开启防火墙

systemctl start firewalld.service

打开防火墙端口

sudo firewall-cmd --permanent --add-port=20-21/tcp
sudo firewall-cmd --permanent --add-port=30000-31000/tcp

重新载入防火墙配置

firewall-cmd --reload

*服务器商的防火墙设置

如果服务器商配置处也有防火墙设置,也需要打开相关端口 以下是阿里云的防火墙设置

设置FTP用户

创建一个FTP用户

sudo adduser ftpuser

设置用户密码

sudo passwd ftpuser

将用户添加到允许访问FTP的列表中

echo "ftpuser" | sudo tee -a /etc/vsftpd/user_list

配置相关权限

sudo mkdir -p /home/ftpuser/ftp/upload
sudo chmod 550 /home/ftpuser/ftp
sudo chmod 750 /home/ftpuser/ftp/upload
sudo chown -R ftpuser: /home/ftpuser/ftp

禁止shell访问

创建新用户时,默认该用户具有对服务器SSH的访问权限。通过以下命令禁止特定用户的SSH访问权限

echo -e '#!/bin/sh\necho "This account is limited to FTP access only."' | sudo tee -a  /bin/ftponly
sudo chmod a+x /bin/ftponly

echo "/bin/ftponly" | sudo tee -a /etc/shells
usermod ftpuser -s /bin/ftponly

客户端配置

由于Windows命令行不支持被动FTP连接,以下使用WinSCP

获取SSL证书

新建会话

使用root账户连接到服务器

直接拖动文件即可复制传输文件到本地

连接FTP服务器

新建会话

配置验证参数

选择上面下载下来的SSL证书文件

连接

出现如下提示框,点击“是”

连接成功

由于上面的权限设置,ftpuser只能访问其用户主目录,并且只能上传文件到upload文件夹

参考文献

www.myfreax.com/how-to-setu…

www.cnblogs.com/chencidi/p/…

blog.nowcoder.net/n/e0b8d3e39…

baike.baidu.com/item/FTP%E5…