FTP是FileTransferProtocol的缩写,即文件传输协议,通过网络在服务器和客户端之间传输文件,现在已经成为广泛使用的标准工具vsftpd是非常安全的ftpdaemon的缩写,它是Linux上最流行和使用最广泛的FTP服务器之一。具有安全、速度快、稳定等特点。许多重要的FTP站点如ftp.gnu.org、ftp.freebsd.org目前使用vsftpd作为服务器,日常工作中大量使用FTP服务。每次更新服务器版本,都需要先打包,然后上传到网上的FTP服务器,再从FTP服务器下载。在线机,进行MD5校验,即可更新在线服务器。在安装vsftpd之前,工作模式有几个重点需要说明一下。服务器使用两个端口与客户端通信。一个是命令端口,一个是控制端口,默认为21,用于命令传输,一个是数据端口,默认为20,用于数据传输主动模式客户端发送端口信息到FTPserver,服务器主动连接端口进程:client和FTP服务器的命令端口(21)建立TCP连接。当需要传输数据时,客户端启动一个新的端口进行数据传输,并使用PORT命令告诉服务器命令端口连接上的端口号,服务器与端口建立TCP连接。连接成功后,客户端开始传输数据。被动模式的FTP服务器打开并向客户端发送端口信息。客户端连接该端口,服务器被动接受连接过程:客户端与FTP服务器的命令端口(21)建立TCP连接。当需要传输数据时,服务器监听一个端口进行数据传输,并在命令端口连接上使用PASV命令告诉客户端端口号。客户端与该端口建立TCP连接。连接成功后,客户端开始传输数据。建议:1、FTP客户端大多在局域网内,没有独立的公网IP地址,被防火墙屏蔽。主动模式下FTP服务器很难成功连接到客户端。因此,如果没有特殊要求,FTP服务器配置为被动模式。本文中的FTP服务器配置也是被动模式的一个例子。两者都可以通过启动配置进行修改。由于默认端口是public,安全性较低,实际安装时会修改默认端口。用户认证方式AnonymousUserMode任何人都可以直接登录FTP服务器,无需密码认证。这种模式是最不安全的,一般只用于保存不重要的公共文件。不建议在生产环境中使用。本地用户模式是通过Linux系统的本地账户进行认证的一种模式,比匿名用户模式更加安全。虚拟用户模式下FTP服务器的独占用户。虚拟用户只能访问Linux系统提供的FTP服务,不能访问Linux系统的其他资源,进一步增强了FTP服务器的安全性。匿名用户模式一般用于不重要的公共文件,只提供下载服务,即用户只能下载,不能进行其他操作。本地用户模式可以通过配置锁定目录、修改命令端口和数据端口的安全性进一步增强,本文后面的配置均以此模式为例。安装前可以使用如下命令查看是否安装了vsftpd-v。如果没有安装,会出现如下提示[root@localhost~]$vsftpd-v-bash:vsftpd:Commandnotfoundtoinstallvsftpdyuinstallvsftpd安装完成后,执行vsftpd-v命令。如果输出版本号,说明安装成功[root@localhost~]#vsftpd-vvsftpd:version3.0.2配置服务器安装完成后,默认配置位于/etc/vsftpd/vsftpd.conf,如果可以找不到默认配置在哪里,可以用下面的命令找到,其中/etc/vsftpd目录就是存放配置的地方[root@localhost~]#whereisvsftpdvsftpd:/usr/sbin/vsftpd的配置格式/etc/vsftpd/usr/share/man/man8/vsftpd.8.gz比较简单。每行都是一条评论或一个选项。注释以#开头,选项的格式为option=value。每个Options占一行,option、=、value之间不允许有空格。vsftpd为每个配置选项设置一个默认值。服务器启动后,在vsftpd.conf中配置的选项将覆盖服务器中的默认值。vsftpd可以配置的选项很多。常用的配置项按类别分为访问权限、锁定访问目录、限制用户登录、修改端口、日志配置等配置组。在每个配置项之前添加详细描述配置项。分组主要是总结和说明每组配置项的作用。实际配置过程中,在vsftp.conf中添加所有组配置项访问权限#是否允许匿名登录,默认允许,如果允许,usernameftp和anonymous都会被视为匿名登录#为了安全,匿名登录一般不允许anonymous_enable=NO#是否允许匿名上传,默认不允许,如果write_enable选项允许,需要设置为YES#为了安全,anon_upload_enable=NO一般不允许#是否允许本地用户登录,默认不允许,如果允许,```/etc/passwd```中的用户可以登录FTP服务器#如果不允许匿名登录,需要设置这个选项允许local_enable=YES#是否默认情况下不允许在FTP服务器上写入。如果有上传文件,删除文件等需求,一般开启write_enable=YES#设置写服务器文件的权限掩码值。如果值为八进制,则需要从0开始,否则将被视为十进制#值为022,可以满足大部分FTP需要,不允许切出目录,chroot_local_user=YES#插入用户nameintothelocalFTPmaindirectoryuser_sub_token=$USER#定义用户FTP主目录,用户登录成功后,vsftpd服务器会切换到这个目录,#此时FTPclient会位于这个目录。以后的上传和下载都是针对这个目录的。local_root=/home/$USER/ftp将登录用户锁定在指定目录,防止用户访问不该访问的目录。这里我们设置为只允许访问自己家目录下的ftp目录,例如:新增一个专门用于上传下载的用户testuser,testuser通过ftp客户端登录成功后,会自动切换到/home/testuser/ftp目录,不允许切换注意:用户上传下载都是在限定目录下,所以一般把锁定的目录设置到空闲空间比较大的磁盘,以限制用户登录#如果设置为YES,vsftpd会从userlist_file选项指定Filereaduserlistuserlist_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=NOModifyport#如果启用,vsftpd将以单机模式运行,vsftpd本身会负责监听和处理传入的连接#而listen是IPV4,这个选项和listen是互斥的,不能同时设置为YESlisten_ipv6=YES#服务器监听的端口,也是命令端口,默认是21。修改后,防火墙需要做相应的调整#同时FTP客户端登录时需要指定端口号#为了增强安全性,一般在配置时修改listen_port=48888#启用被动模式pasv_enable=YES#中被动模式,服务器地址默认为内网地址#如果部署在云服务器上,需要修改为公网IPpasv_address=192.168.70.20#设置可用于的端口范围的最小值pa中的数据传输主动模式#建议将端口范围设置在比较高的范围,比如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服务器机器上的防火墙是关闭的,可以跳过这一步,或者你不想设置防火墙,可以通过systemctlstopfirewalld命令关闭防火墙,这样就可以忽略这个上面步骤中配置中服务器监听端口(也叫命令端口)listen_port选项设置为48888,数据端口范围为50000-50010,所以防火墙需要开放这些端口,执行如下命令设置[root@localhost~]#firewall-cmd--zone=public--add-port=48888/tcp--permanentsuccess[root@localhost~]#firewall-cmd--zone=public--add-port=50000-50010/tcp--permanentsuccessfirewallsetup之后执行以下命令重启防火墙服务[root@localhost~]#systemctlrestartfirewalld最后查看端口是否开启成功[root@localhost~]#firewall-cmd--list-port50000-50010/tcp48888/tcp从结果可以看出,防火墙已经开放了48888、50000-50099端口,启动服务器并配置/etc/vsftpd/vsftpd.conf,设置好防火墙后,执行如下命令启动服务器systemctlstartvsftpd启动后查询服务器状态,确认服务器是否启动成功[root@localhost~]#systemctlstatusvsftpdvsftpd.service-VsftpdftpdaemonLoaded:loaded(/usr/lib/systemd/system/vsftpd.service;enabled;vendorpreset:disabled)Active:active(running)sinceFri2021-09-120:21:00CST;3daysagoMainPID:94916(vsftpd)CGroup:/system.slice/vsftpd.service└─94916/usr/sbin/vsftpd/etc/vsftpd/vsftpd.confSep120:21:00localhostsystemd[1]:StartingVsftpdftpdaemon...Sep120:21:00localhostsystemd[1]:StartedVsftpdftpdaemon。设置服务器启动systemctlenablevsftpd下面命令可以确认服务器的命令端口是否打开(配置:48888)[root@localhost~]#netstat-antup|grepvsftpdtcp600:::48888:::*LISTEN20501/vsftpd[root@localhost~]#新建FTP用户新建用户mytest,并设置密码[root@localhost~]#useraddmytest[root@localhost~]#passwdmytest新建FTP目录并修改目录权限[root@cghost21home]#mkdir-p/home/mytest/ftp/files[root@cghost21home]#chmod-R500/home/mytest/[root@cghost21home]#chmod-R700/home/mytest/ftp/files注:/home/mytest/ftp是mytest用户mytes的锁定目录t登录后,只能停留在本目录及其子目录,不能切换到其他目录"/home/mytest/ftp/files"该目录为实际上传下载目录,所以需要具有可读和可执行权限最后需要将用户名添加到允许登录FTP服务器的用户列表中,即/etc/vsftpd/中userlist_file选项对应的文件/etc/vsftpd/user_listvsftpd.conf。如果user_list不存在,需要手动创建并添加到mytest中。测试服务器全部搭建完成后,需要进行测试。我这里准备的FTP服务器的IP是192.168.70.20,FTP客户端机器的IP是192.168.70.11。进入FTP服务器的/home/mytest/ftp/files目录,新建a.txt测试文件[root@localhostfiles]#pwd/home/mytest/ftp/files[root@localhostfiles]#echo"ftpserver...">>a.txt[root@localhostfiles]#进入FTP客户端机器/home/wl/temp目录,新建test.txt测试文件[root@localhosttemp]#echo"ftptest...">>test.txt[root@localhosttemp]#cattest.txtftptest...测试上传下载需要在FTP客户端机器上安装FTP客户端,执行以下命令安装。如果已经安装,可以忽略yuminstallftp,执行下面一系列命令进行测试。1、登录FTP服务器命令,格式:ftp服务器ID命令端口2、输入登录用户名3、输入登录密码4、登录成功后,现在位于/home/mytest/ftpFTP服务器的目录,执行ls命令后,结果显示当前目录还有一个files子目录5.执行pwd命令查看当前目录。FTP服务器上的/home/mytest/ftp目录是FTP的根目录。6、执行cdfiles命令进入files目录,即FTP服务器files目录下的/home/mytest/ftp/,然后执行执行ls命令查看当前目录下的文件,可以在FTP服务器上看到测试文件a.txt。7.执行puttest.txt命令将test.txt文件放到FTP客户端机器当前目录(/home/wl/temp)上传到服务器的/home/mytest/ftp/files目录下8.执行geta.txt命令将FTP服务器上的/home/mytest/ftp/files/a.txt文件下载到FTP客户端机器的当前目录(/home/wl/temp)9.上传下载测试后完成后,执行exit命令退出FTP命令行10.最后执行cata.txt命令查看从FTP服务器下载的测试文件内容。从结果可以看出,服务器上的测试文件内容是一样的。总结本文介绍Linux下FTP服务器vsftpd的安装、配置、测试等内容及注意事项。本文只讲解vsftpd的常用配置项。更多配置项请参考参考官网文档
