Linux下如何部署FTP服务器

64次阅读

Linux下如何部署FTP服务器插图

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

vsftpd 是 very secure ftp daemon 的缩写,它是 Linux 上使用最受欢迎、使用最广泛的 FTP 服务器之一,它具有安全,速度快,稳定的特点,很多重要的 FTP 站点比如 ftp.gnu.orgftp.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 服务器的安全性。

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

安装

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

vsftpd -v 

如果未安装会有如下提示

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

安装 vsftpd

yum install vsftpd 

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

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

配置服务器

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

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

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

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

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

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

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

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

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

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

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

设置防火墙

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

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

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

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

[root@localhost ~]# systemctl restart firewalld 

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

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

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

启动服务器

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

systemctl start vsftpd 

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

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

将服务器设置成开机启动

systemctl enable vsftpd 

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

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

新建 FTP 用户

新建用户 mytest,并设置密码

[root@localhost ~]# useradd mytest [root@localhost ~]# passwd mytest 

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

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

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

锁定目录必须要去掉可写权限,不然用户会无法登录,这一点在 FTP 服务器端做了强制的校验,所以 “chmod 500 /home/mytest/” 命令是设置 /home/mytest 以及 /home/mytest/ftp 两个目录可读可执行权限,无可写权限

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

最后,还需要把用户名加入到 FTP 服务器允许登录的用户列表中,也即 /etc/vsftpd/vsftpd.confuserlist_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 测试文件

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

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

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

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

yum install ftp 

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

Linux下如何部署FTP服务器插图1

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

小结

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

原文链接:https://www.cnblogs.com/wanng/p/how-to-install-ftp-server.html

正文完
 
追风者
版权声明:本站原创文章,由 追风者 2024-01-02发表,共计6658字。
转载说明:声明:本站内容均来自互联网,归原创作者所有,如有侵权必删除。 本站文章皆由CC-4.0协议发布。