FTP(文件传输协议)是一种较旧且最常用的标准网络协议,用于通过网络在两台计算机之间上传/下载文件。然而,FTP最初是不安全的,因为它只传输带有用户凭据(用户名和密码)的数据而没有加密。警告:如果您计划使用FTP,则需要考虑通过SSL/TLS配置FTP连接(在下一篇文章中讨论)。否则,最好使用安全的FTP,例如SFTP。推荐阅读:如何在CentOS7中安装和保护FTP服务器安全可以防止FTP漏洞。第一步:在Ubuntu中安装VSFTPDServer1.首先我们需要更新系统安装包列表,然后安装VSFTPD二进制包,如下:$sudoapt-getupdate$sudoapt-getinstallvsftpd2.安装完成后,服务最初是禁用的。因此,我们需要手动启动该服务,同时启动它,以便下次开机自动启动该服务:--------------OnSystemD-----------#systemctlstartvsftpd#systemctlenablevsftpd------------OnSysVInit------------#servicevsftpdstart#chkconfig--level35vsftpdon3.接下来,如果你在服务器上启用了UFW防火墙(默认情况下未启用),那么你需要打开端口20和21-FTP守护进程正在侦听它们-以允许从远程计算机访问FTP服务,然后,添加一个新的防火墙规则如下:$sudoufwallow20/tcp$sudoufwallow21/tcp$sudoufwstatus第2步:在Ubuntu4中配置和保护VSFTPD服务器。让我们做一些配置来设置和保护FTP服务器。首先,我们创建原始配置文件/etc/vsftpd/vsftpd.conf的备份文件,如下所示:$sudocp/etc/vsftpd.conf/etc/vsftpd.conf.orig接下来,打开vsftpd配置文件。$sudovi/etc/vsftpd.confOR$sudonano/etc/vsftpd.conf将以下选项添加/更改为显示的值:anonymous_enable=NO#关闭匿名登录local_enable=YES#允许本地用户登录write_enable=YES#启用可以修改文件的FTP命令local_umask=022#本地用户创建的文件的umask值dirmessage_enable=YES#用户第一次进入新目录时,会显示提示信息xferlog_enable=YES#包含详细上传和下载信息的日志文件connect_from_port_20=YES#使用服务器上的端口20进行PORT类型连接(FTP数据)xferlog_std_format=YES#保持标准日志文件格式listen=NO#防止vsftpd以独立模式运行listen_ipv6=YES#vsftpd会监听ipv6而不是IPv4,可以根据自己的网络情况设置pam_service_name=vsftpd#vsftpd会使用PAM认证设备的名字userlist_enable=YES#allowvsftpd加载用户名列表tcp_wrappers=YES#opentcp写apper5、现在,配置VSFTPD,根据用户列表文件/etc/vsftpd.userlist来允许或拒绝用户访问FTP。注意,默认情况下,如果通过userlist_enable=YES启用用户列表,并且设置了userlist_deny=YES,则用户列表文件/etc/vsftpd.userlist中的用户无法登录访问。但是,选项userlist_deny=NO会反转默认设置,在这种情况下,只有用户名在/etc/vsftpd.userlist中明确列出的用户才能登录到FTP服务器。userlist_enable=YES#vsftpd将从给定的用户列表文件加载用户名列表将进入一个chrooted环境,即在FTP会话中,它的根目录将是它的主目录。接下来,让我们看一下设置chrooted(本地根)目录的两种可能方法,如下所示。6、这时候让我们添加/修改/取消这两个选项来限制FTP用户到自己的home目录。chroot_local_user=YESallow_writeable_chroot=YES选项chroot_local_user=YES表示本地用户将进入chroot环境。登录时,默认是它的主目录。并且我们需要知道,默认情况下,出于安全原因,VSFTPD不允许chroot目录可写。但是,我们可以使用选项更改此设置allow_writeable_chroot=YES保存文件并关闭它。现在我们需要重启VSFTPD服务使上面的修改生效:------------OnSystemD------------#systemctlrestartvsftpd-------------OnSysVInit------------#servicevsftpdrestart第3步:在Ubuntu7上测试VsFTP服务器。现在,我们通过使用如下所示的useradd命令创建一个FTP用户来进行测试FTP服务器:$sudouseradd-m-c"AaronKili,Contributor"-s/bin/bashaaronkilik$sudopasswdaaronkilik然后,我们需要使用echo命令和tee命令在文件/etc/vsftpd.userlist中明确列出用户aaronkilik作为如下:$echo"aaronkilik"|sudotee-a/etc/vsftpd.userlist$cat/etc/vsftpd.userlist8。现在,就该测试一下上面的配置是否有我们想要的功能了。我们先测试匿名登录;我们可以从以下输出中清楚地看到此FTP服务器不允许匿名登录:#ftp192.168.56.102Connectedto192.168.56.102(192.168.56.102).220WelcometoTecMint.comFTPservice.Name(192.168.56.102:aaronkilik):anonymous530Permissiondenied。登录失败.ftp>bye221Goodbye.9。接下来,我们将测试如果用户名不在文件/etc/vsftpd.userlist中,用户是否可以登录。从下面的输出中,我们看到这是不可能的:#ftp192.168.56.102Connectedto192.168.56.102(192.168.56.102).220WelcometoTecMint.comFTPservice.Name(192.168.56.10:root):user1530Permissiondenied.Loginfailed.ftp>bye221Goodbye。10.现在,我们将执行最后一项测试,以确定/etc/vsftpd.userlist文件中列出的用户是否真的在登录后的主目录中。从下面的输出中可知,是这样的:#ftp192.168.56.102Connectedto192.168.56.102(192.168.56.102).220WelcometoTecMint.comFTPservice.Name(192.168.56.102:aaronkilik):aaronkilik331Pleasespecifythepassword.Password:230Loginsuccessful.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftp>ls以确认Ubuntu中的FTP登录警告:设置选项allow_writeable_chroot=YES是危险的,尤其是当用户具有上传权限或具有shell访问权限时,这很可能会导致安全问题。仅当您确切知道自己在做什么时才使用此选项。我们需要注意,这些安全问题不仅会影响VSFTPD,还会影响让本地用户进入chroot环境的FTP守护进程。基于这些原因,在下一步中,我将介绍一种更安全的方法来帮助用户设置不可写的本地根目录。第4步:在Ubuntu11中配置FTP用户的主目录。现在,再次打开VSFTPD配置文件。$sudovi/etc/vsftpd.conf或$sudonano/etc/vsftpd.conf并用#注释掉不安全的选项,如下所示:#allow_writeable_chroot=YES接下来,为用户创建一个备用本地根目录(aaronkilik,您可能不是同上),然后设置目录权限,取消所有其他用户对该目录的写权限:FTP12。然后,在本地根目录下创建一个具有适当权限的目录,用户将在其中存放文件:$sudomkdir/home/aaronkilik/ftp/files$sudochown-Raaronkilk:aaronkilik/home/aaronkilik/ftp/files$sudochmod-R0770后/home/aaronkilik/ftp/files/,在VSFTPD配置文件中添加/修改以下选项为对应的值:user_sub_token=$USER#在本地根目录插入用户名local_root=/home/$USER/ftp#Define每个用户的本地根目录保存文件并关闭它。然后重启VSFTPD服务使以上设置生效:------------OnSystemD------------#systemctlrestartvsftpd-------------OnSysVInit------------#servicevsftpdrestart13.现在,让我们做最后的检查,以确保用户的本地根目录是我们在他的主目录中创建的FTP目录。#ftp192.168.56.102Connectedto192.168.56.102(192.168.56.102).220WelcometoTecMint.comFTPservice.Name(192.168.56.10:aaronkilik):aaronkilik331Pleasespecifythepassword.Password:230Loginsuccessful.RemotesystemtypeisUNIX.Usingbinarymodetotransferfiles.ftp>lsFTP用户Home目录登录就是这样的!请记住通过下面的评论框分享您对本指南的看法,或者您也可以提供有关此主题的任何重要信息。最后但同样重要的是,不要错过我的下一篇文章,在下一篇文章中,我将解释如何使用SSL/TLS来保护连接到Ubuntu16.04/16.10的FTP服务器,在此之前,请继续关注我们。关于作者:AaronKili是Linux和F.O.S.S爱好者,即将成为Linux系统管理员和Web开发人员,目前是TecMint的内容创建者,他喜欢在他的计算机上工作并相信分享知识。
