|
|
|
|
公众号矩阵

Linux下如何部署FTP服务器

FTP 是 File Transfer Protocol 的缩写,即文件传输协议,它通过网络在服务器和客户端之间传输文件,现在已经成为一种广泛使用的标准工具。

作者: LinuxThings 来源:Linux开发那些事儿|2021-09-16 07:52

FTP 是 File Transfer Protocol 的缩写,即文件传输协议,它通过网络在服务器和客户端之间传输文件,现在已经成为一种广泛使用的标准工具

vsftpd 是 very secure ftp daemon 的缩写,它是 Linux 上使用最受欢迎、使用最广泛的 FTP 服务器之一,它具有安全,速度快,稳定的特点,很多重要的 FTP 站点比如 ftp.gnu.org、ftp.freebsd.org 都是使用 vsftpd 作为服务器的

当前,FTP服务在日常工作中使用得也挺多,每次服务器版本更新都需要先打包,然后上传到线上的FTP服务器上,再从FTP服务器上下载服务器包到线上机器,进行MD5校验,然后就可以更新线上服务器了

说明

在安装 vsftpd 之前,有几个重要的地方需要说明下

工作模式

服务器使用两个端口和客户端通信,一个是命令端口,也叫控制端口,默认是 21, 用于命令的传输 ,一个是数据端口,默认是 20 ,用于数据的传输

  • 主动模式

客户端向FTP服务器发送端口信息,由服务器主动连接该端口

流程:客户端和FTP服务器的命令端口(21)建立TCP连接,当需要传输数据时,客户端新启动一个用于数据传输的端口,并在命令端口的连接上用 PORT 命令告诉服务器该端口号,服务器与该端口建立TCP连接,连接成功之后,客户端开始传输数据

  • 被动模式

FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接

流程:客户端和FTP服务器的命令端口(21)建立TCP连接,当需要传输数据时,服务器侦听一个用于数据传输的端口,并在命令端口的连接上用 PASV 命令告诉客户端该端口号,客户端与该端口建立TCP连接,连接成功之后,客户端开始传输数据

建议:

1、大多数FTP客户端都在局域网中,没有独立的公网IP地址,且有防火墙阻拦,主动模式下FTP服务器成功连接到客户端比较困难。因此,如无特殊需求,都是将FTP服务器配置为被动模式,本文后面的FTP服务器配置也是以被动模式为例的

2、被动模式下,命令端口和数据端口都是在FTP服务器端开启,也都可以通过启动配置来修改,由于默认的端口是公开的,安全性低,所以实际安装的时候都会修改默认端口

用户认证模式

  • 匿名用户模式

任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用

  • 本地用户模式

通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。

  • 虚拟用户模式

FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源,进一步增强了FTP服务器的安全性。

匿名用户模式一般用于不重要的于公开文件,并且只提供下载服务,也就是说,用户只能下载,不能有其他操作,本地用户模式通过配置锁定目录、修改命令端口和数据端口 可以进一步增强安全性,本文后面的配置是以该模式为例的

安装

安装前可以使用下面的命令检查是否已安装

  1. vsftpd -v 

如果未安装会有如下提示

  1. [root@localhost ~]$ vsftpd -v 
  2. -bash: vsftpd: 未找到命令 

安装 vsftpd

  1. yum install vsftpd 

安装完成后,执行 vsftpd -v 命令,如果输出版本号,表示安装成功

  1. [root@localhost ~]# vsftpd -v 
  2. vsftpd: version 3.0.2 

配置服务器

安装完成之后,默认的配置位于 /etc/vsftpd/vsftpd.conf, 如果找不到默认配置在哪里,可以使用下面的命令查找下,其中 /etc/vsftpd 目录就是存放配置的地方

  1. [root@localhost ~]# whereis vsftpd 
  2.  
  3. vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz 

配置的格式相对简单,每一行都是注释或者选项,注释以 # 号开头,选项的格式是 option=value 的形式,每个选项占一行,option、= 以及 value 之间不允许出现空格

vsftpd 对每个配置的选项都设置了一个默认值,服务器启动之后,在 vsftpd.conf 中配置的选项会覆盖服务器中的默认值

vsftpd 可配置的选项很多,下面按照类别把常用的配置项分成了 访问权限、锁定访问目录、限定用户登录、修改端口、日志配置、其他配置 几组, 每个配置项前都增加了详细的说明

配置项分组主要是为了总结说明每一组配置项的作用,实际配置的过程中,把所有组的配置项添加到 vsftp.conf 中即可

  • 访问权限
  1. #是否允许匿名登录,默认允许,如果允许,用户名 ftp 和 anonymous 都会被当做匿名登录 
  2. #为了安全,一般不允许匿名登录 
  3. anonymous_enable=NO 
  4.  
  5. #是否允许匿名上传,默认不允许,如果允许 write_enable 选项需要设置为 YES 
  6. #为了安全,一般不允许 
  7. anon_upload_enable=NO 
  8.  
  9. #是否允许本地用户登录,默认不允许,如果允许,在 ``` /etc/passwd``` 中的用户都可以登录 FTP 服务器 
  10. #如果不予许匿名登录的话,这个选项需要设置为允许 
  11. local_enable=YES 
  12.  
  13. #是否允许在FTP服务器上写入, 默认不允许,如果有上传文件、删除文件等需求,一般都是开启的 
  14. write_enable=YES 
  15.  
  16. #设置写入服务器文件的权限掩码值,如果值是八进制需要以 0 开头,否则会当作十进制 
  17. #值为 022,能满足大部分FTP的需求 
  18. local_umask=022 
  • 锁定访问目录
  1. #默认为 NO, 如果设置为 YES,表示用户通过FTP客户端登录之后 
  2. #只能在FTP服务器指定的目录中,不允许切出目录, 
  3. chroot_local_user=YES 
  4.  
  5. #用户名插入到本地 FTP 主目录中 
  6. user_sub_token=$USER 
  7.  
  8. #定义用户 FTP 主目录,用户登录成功之后,vsftpd 服务器会切换到此目录, 
  9. #此时 FTP 客户端会位于此目录中,后续的上传以及下载都是针对这个目录的 
  10. local_root=/home/$USER/ftp 

把登录的用户锁定在指定的目录中,避免用户访问不应该访问的目录,这里我们设置成只允许访问自己的 home 目录中的 ftp 目录,例如:新添加一个用户 testuser 专门用于上传下载, testuser 通过 FTP 客户端成功登录后,会自动切换到 /home/testuser/ftp 目录,并且不允许切出该目录

注意:用户上传和下载都是在限定的目录中,所以一般都是把锁定目录设置到剩余空间比较大的磁盘中

  • 限定用户登录
  1. #如果设置为 YES ,vsftpd 将会从 userlist_file 选项指定的文件读取用户列表 
  2. userlist_enable=YES 
  3.  
  4. #设置用户列表配置文件, 如果 /etc/vsftpd/user_list 不存在需要手工创建 
  5. userlist_file=/etc/vsftpd/user_list 
  6.  
  7. #此选项检查 userlist_enable 选项,当 userlist_enable 为 YES 时 
  8. #如果 userlist_deny 设置为 NO , 表示只允许 userlist_file 中的用户登录 
  9. #如果 userlist_deny 设置为 YES, 表示禁止 userlist_file 中的用户登录,允许其他用户登录 
  10. userlist_deny=NO 
  • 修改端口
  1. #如果启用,vsftpd 将在独立模式下运行,vsftpd 本身将负责侦听和处理传入的连接 
  2. listen=NO 
  3.  
  4. # 跟 listen 选型类似,但是此选项是侦听在 IPV6 上的 socket 
  5. # 而 listen 是 IPV4, 此选项和 listen 是互斥的,不能同时设置为 YES 
  6. listen_ipv6=YES 
  7.  
  8. #服务器侦听端口,也是命令端口, 默认是21,修改之后, 防火墙需要做相应的调整 
  9. #同时 FTP 客户端登录的时候需要指定端口号 
  10. #为了增强安全性,配置的时候一般都会修改 
  11. listen_port=48888 
  12.  
  13. #开启被动模式 
  14. pasv_enable=YES 
  15. #被动模式下,服务器的地址,默认是内网地址 
  16. #如果在云服务器上部署,需要修改成公网IP 
  17. pasv_address=192.168.70.20 
  18.  
  19. #设置被动模式下,建立数据传输可使用的端口范围的最小值。 
  20. #建议把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性 
  21. pasv_min_port=50000 
  22.  
  23. #设置被动模式下,建立数据传输可使用的端口范围的最大值 
  24. pasv_max_port=50010 
  • 日志配置
  1. #是否记录上传下载日志,默认是不记录,如果设置为记录 
  2. #默认日志文件位于 /var/log/vsftpd.log, 如果配置了 vsftpd_log_file 选项,会覆盖默认日志文件 
  3. xferlog_enable=YES 
  4.  
  5. #记录上传下载的日志 
  6. xferlog_file=/var/log/xferlog 
  7.  
  8. #是否按照标准格式记录日志 
  9. xferlog_std_format=YES 
  • 其他配置
  1. # vsftpd 使用的 PAM 服务名字 
  2. pam_service_name=vsftpd 
  3. tcp_wrappers=YES 

这两个配置使用默认生成的选项即可,不用做任何修改

设置防火墙

如果你部署的FTP服务器的机器上防火墙是关闭状态的话,可以跳过此步骤,或者你不想设置防火墙的话,可以通过 systemctl stop firewalld 命令关闭防火墙,这样也可以忽略此步骤

上面配置中服务器侦听端口(也叫命令端口) listen_port 选项设置的是 48888,数据端口的范围是 50000-50010, 所以防火墙需要开放这些端口,执行以下命令即可设置

  1. [root@localhost ~]# firewall-cmd --zone=public --add-port=48888/tcp --permanent 
  2. success 
  3. [root@localhost ~]# firewall-cmd --zone=public --add-port=50000-50010/tcp --permanent 
  4. success 

防火墙设置好以后,执行下面的命令重启防火墙服务

  1. [root@localhost ~]# systemctl restart firewalld 

最后,查看下端口是否成功开放

  1. [root@localhost ~]# firewall-cmd --list-port          
  2. 50000-50010/tcp 48888/tcp 

从结果可以看出,防火墙已经开放了 48888、50000-50099 端口

启动服务器

配置完 /etc/vsftpd/vsftpd.conf ,设置好防火墙之后,执行下面的命令启动服务器

systemctl start vsftpd

启动之后,查询服务器状态,确认服务器是否启动成功

  1. [root@localhost ~]# systemctl status vsftpd                     
  2. ● vsftpd.service - Vsftpd ftp daemon 
  3.    Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabled) 
  4.    Active: active (running) since Fri 2021-09-1 20:21:00 CST; 3 days ago 
  5.  Main PID: 94916 (vsftpd) 
  6.    CGroup: /system.slice/vsftpd.service 
  7.            └─94916 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf 
  8.  
  9. Sep 1 20:21:00 localhost systemd[1]: Starting Vsftpd ftp daemon... 
  10. Sep 1 20:21:00 localhost systemd[1]: Started Vsftpd ftp daemon. 

将服务器设置成开机启动

  1. systemctl enable vsftpd 

下面的命令可以确认服务器的命令端口是否开启( 配置的是 : 48888 )

  1. [root@localhost ~]# netstat -antup | grep vsftpd 
  2. tcp6       0      0 :::48888                :::*                    LISTEN      20501/vsftpd         
  3. [root@localhost ~]# 

新建FTP用户

新建用户 mytest, 并设置密码

  1. [root@localhost ~]# useradd mytest 
  2. [root@localhost ~]# passwd mytest 

新建 FTP 目录,并修改目录权限

  1. [root@cghost21 home]# mkdir -p /home/mytest/ftp/files 
  2. [root@cghost21 home]# chmod -R 500 /home/mytest/ 
  3. [root@cghost21 home]# chmod -R 700 /home/mytest/ftp/files 

注意:/home/mytest/ftp 是 mytest 用户的锁定目录,mytest 登录之后,只能呆在此目录以及此目录的子目录中,不允许切换到其他目录

"/home/mytest/ftp/files" 目录是实际的上传下载的目录,所以需要有可读写和可执行权限

最后,还需要把用户名加入到FTP服务器允许登录的用户列表中,也即 /etc/vsftpd/vsftpd.conf 中 userlist_file 选项对应的文件 /etc/vsftpd/user_list中,如果 user_list 不存在,需要手工创建并把 mytest添加进去

测试

服务器全部搭建好之后,需要进行测试,这里我准备的 FTP服务器的IP是 192.168.70.20, FTP客户端机器的IP是 192.168.70.11

进入FTP服务器的 /home/mytest/ftp/files 目录, 新建一个 a.txt 测试文件

  1. [root@localhost files]# pwd 
  2. /home/mytest/ftp/files 
  3. [root@localhost files]# echo "ftp server..." >> a.txt 
  4. [root@localhost files]# 

进入FTP客户端机器的 /home/wl/temp目录,新建一个 test.txt 测试文件

  1. [root@localhost temp]# echo "ftp test..." >> test.txt 
  2. [root@localhost temp]# cat test.txt  
  3. ftp test... 

测试上传下载需在FTP客户端机器上安装 FTP 客户端, 执行以下命令进行安装,如已安装,可忽略

  1. yum install ftp 

执行下面一系列的命令,进行测试

  1. 1、登录FTP服务器命令,格式:ftp 服务器ID 命令端口 
  2.  
  3. 2、输入登录用户名 
  4.  
  5. 3、输入登录密码 
  6.  
  7. 4、登录成功之后,此时位于FTP服务器的 /home/mytest/ftp 目录中,执行 ls 命令之后, 
  8.  
  9. 结果显示当前目录还有一个 files 的子目录 
  10.  
  11. 5、执行 pwd 命令查看当前所在目录,FTP服务器上的 /home/mytest/ftp 目录就是 FTP 的根目录 
  12.  
  13. 6、执行 cd files 命令进入 files 目录,也即FTP服务器上的 /home/mytest/ftp/files 目录, 
  14.  
  15. 然后执行 ls 命令查看当前目录的文件,可以看到 FTP服务器上的测试文件 a.txt 
  16.  
  17. 7、执行 put test.txt 命令,把FTP客户端机器上当前目录( /home/wl/temp ) 中的 test.txt 文件 
  18.  
  19. 上传到服务器的 /home/mytest/ftp/files 目录中 
  20.  
  21. 8、执行 get a.txt 命令,把FTP服务器上的 /home/mytest/ftp/files/a.txt 文件下载到 FTP客户端机器的当前目录( /home/wl/temp ) 中 
  22.  
  23. 9、上传下载测试完成之后,执行 exit 命令,退出 FTP 命令行 
  24.  
  25. 10、最后执行 cat a.txt 命令查看从 FTP服务器上下载的测试文件的内容,从结果可以看出,和服务器上的测试文件内容是一样的 

小结

本文介绍了 Linux 下FTP服务器 vsftpd 的安装、配置、测试等整个步骤以及注意事项,文中只是对 vsftpd 的常用配置项做了说明,更多的配置项请参考官网文档

【编辑推荐】

  1. 智能经济时代下,如何运用人工智能技术,带来更多科技红利?
  2. 当我们重返工作岗位时需要投资的五项技术
  3. 医疗技术巨头奥林巴斯遭受BlackMatter勒索软件攻击
  4. 中国5G技术时刻都在突破,已领跑世界,新的便民智能时代即将到来
  5. Docker容器技术进阶及Java、Golang项目部署实践
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

带你轻松入门 RabbitMQ

带你轻松入门 RabbitMQ

轻松入门RabbitMQ
共4章 | loong576

44人订阅学习

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

14人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

42人订阅学习

视频课程+更多

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微