您的位置:首页 > 运维架构 > Linux

完全指南:如何在 CentOS 7 中安装、配置和安全加固 FTP 服务

2017-06-07 00:00 741 查看
FTP(文件传输协议)是一种用于通过网络在服务器和客户端之间传输文件的传统并广泛使用的标准工具,特别是在不需要身份验证的情况下(允许匿名用户连接到服务器)。我们必须明白,默认情况下FTP是不安全的,因为它不加密传输用户凭据和数据。

在本指南中,我们将介绍在CentOS/RHEL7和Fedora发行版中安装、配置和保护FTP服务器(VSFTPD代表“VerySecureFTPDaemon”)的步骤。

请注意,本指南中的所有命令将以root身份运行,如果你不使用root帐户操作服务器,请使用sudo命令获取root权限。

步骤1:安装FTP服务器

1、安装vsftpd服务器很直接,只要在终端运行下面的命令。



#yuminstallvsftpd

2、安装完成后,服务先是被禁用的,因此我们需要手动启动,并设置在下次启动时自动启用:



#systemctlstartvsftpd

#systemctlenablevsftpd

3、接下来,为了允许从外部系统访问FTP服务,我们需要打开FTP守护进程监听的21端口:



#firewall-cmd--zone=public--permanent--add-port=21/tcp

#firewall-cmd--zone=public--permanent--add-service=ftp

#firewall-cmd--reload

步骤2:配置FTP服务器

4、现在,我们会进行一些配置来设置并加密我们的FTP服务器,让我们先备份一下原始配置文件/etc/vsftpd/vsftpd.conf:



#cp/etc/vsftpd/vsftpd.conf/etc/vsftpd/vsftpd.conf.orig

接下来,打开上面的文件,并将下面的选项设置相关的值:



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(ftp-data)用于PORT风格的连接

xferlog_std_format=YES###使用标准的日志格式

listen=NO###不要让vsftpd运行在独立模式

listen_ipv6=YES###vsftpd将监听IPv6而不是IPv4

pam_service_name=vsftpd###vsftpd使用的PAM服务名

userlist_enable=YES###vsftpd支持载入用户列表

tcp_wrappers=YES###使用tcpwrappers

5、现在基于用户列表文件/etc/vsftpd.userlist来配置FTP来允许/拒绝用户的访问。

默认情况下,如果设置了userlist_enable=YES,当userlist_deny选项设置为YES的时候,userlist_file=/etc/vsftpd.userlist中列出的用户被拒绝登录。

然而,更改配置为userlist_deny=NO,意味着只有在userlist_file=/etc/vsftpd.userlist显式指定的用户才允许登录。



userlist_enable=YES###vsftpd将从userlist_file给出的文件中载入用户名列表

userlist_file=/etc/vsftpd.userlist###存储用户名的文件

userlist_deny=NO

这并不是全部,当用户登录到FTP服务器时,它们会进入chrootjail中,这是仅作为FTP会话主目录的本地根目录。

接下来,我们将介绍如何将FTP用户chroot到FTP用户的家目录(本地root)中的两种可能情况,如下所述。

6、接下来添加下面的选项来限制FTP用户到它们自己的家目录。



chroot_local_user=YES

allow_writeable_chroot=YES

chroot_local_user=YES意味着用户可以设置chrootjail,默认是登录后的家目录。

同样默认的是,出于安全原因,vsftpd不会允许chrootjail目录可写,然而,我们可以添加allow_writeable_chroot=YES来覆盖这个设置。

保存并关闭文件。

步骤3:用SELinux加密FTP服务器

7、现在,让我们设置下面的SELinux布尔值来允许FTP能读取用户家目录下的文件。请注意,这原本是使用以下命令完成的:



#setsebool-Pftp_home_diron

然而,由于这个bug报告:https://bugzilla.redhat.com/show_bug.cgi?id=1097775,ftp_home_dir指令默认是禁用的。

现在,我们会使用semanage命令来设置SELinux规则来允许FTP读取/写入用户的家目录。



#semanageboolean-mftpd_full_access--on

这时,我们需要重启vsftpd来使目前的设置生效:



#systemctlrestartvsftpd

步骤4:测试FTP服务器

8、现在我们会用useradd命令创建一个FTP用户来测试FTP服务器。



#useradd-m-c“RaviSaive,CEO”-s/bin/bashravi

#passwdravi

之后,我们如下使用echo命令添加用户ravi到文件/etc/vsftpd.userlist中:



#echo"ravi"|tee-a/etc/vsftpd.userlist

#cat/etc/vsftpd.userlist

9、现在是时候测试我们上面的设置是否可以工作了。让我们使用匿名登录测试,我们可以从下面的截图看到匿名登录没有被允许。



#ftp192.168.56.10

Connectedto192.168.56.10(192.168.56.10).

220WelcometoTecMint.comFTPservice.

Name(192.168.56.10:root):anonymous

530Permissiondenied.

Loginfailed.

ftp>



测试FTP匿名登录

10、让我们也测试一下没有列在/etc/vsftpd.userlist中的用户是否有权限登录,下面截图是没有列入的情况:



#ftp192.168.56.10

Connectedto192.168.56.10(192.168.56.10).

220WelcometoTecMint.comFTPservice.

Name(192.168.56.10:root):aaronkilik

530Permissiondenied.

Loginfailed.

ftp>



FTP用户登录失败

11、现在最后测试一下列在/etc/vsftpd.userlist中的用户是否在登录后真的进入了他/她的家目录:



#ftp192.168.56.10

Connectedto192.168.56.10(192.168.56.10).

220WelcometoTecMint.comFTPservice.

Name(192.168.56.10:root):ravi

331Pleasespecifythepassword.

Password:

230Loginsuccessful.

RemotesystemtypeisUNIX.

Usingbinarymodetotransferfiles.

ftp>ls



用户成功登录

警告:使用allow_writeable_chroot=YES有一定的安全隐患,特别是用户具有上传权限或shell访问权限时。

只有当你完全知道你正做什么时才激活此选项。重要的是要注意,这些安全性影响并不是vsftpd特定的,它们适用于所有提供了将本地用户置于chrootjail中的FTP守护进程。

因此,我们将在下一节中看到一种更安全的方法来设置不同的不可写本地根目录。

步骤5:配置不同的FTP家目录

12、再次打开vsftpd配置文件,并将下面不安全的选项注释掉:



#allow_writeable_chroot=YES

接着为用户(ravi,你的可能不同)创建另外一个替代根目录,并将所有用户对该目录的可写权限移除:



#mkdir/home/ravi/ftp

#chownnobody:nobody/home/ravi/ftp

#chmoda-w/home/ravi/ftp

13、接下来,在用户存储他/她的文件的本地根目录下创建一个文件夹:



#mkdir/home/ravi/ftp/files

#chownravi:ravi/home/ravi/ftp/files

#chmod0700/home/ravi/ftp/files/

接着在vsftpd配置文件中添加/修改这些选项:



user_sub_token=$USER###在本地根目录下插入用户名

local_root=/home/$USER/ftp###定义任何用户的本地根目录

保存并关闭文件。再说一次,有新的设置后,让我们重启服务:



#systemctlrestartvsftpd

14、现在最后在测试一次查看用户本地根目录就是我们在他的家目录创建的FTP目录。



#ftp192.168.56.10

Connectedto192.168.56.10(192.168.56.10).

220WelcometoTecMint.comFTPservice.

Name(192.168.56.10:root):ravi

331Pleasespecifythepassword.

Password:

230Loginsuccessful.

RemotesystemtypeisUNIX.

Usingbinarymodetotransferfiles.

ftp>ls



FTP用户家目录登录成功

就是这样了!在本文中,我们介绍了如何在CentOS7中安装、配置以及加密的FTP服务器,使用下面的评论栏给我们回复,或者分享关于这个主题的任何有用信息。

建议阅读:在RHEL/CentOS7上安装ProFTPD服务器

在下一篇文章中,我们还将向你介绍如何在CentOS7中保护使用SSL/TLS连接的FTP服务器,再此之前,请继续关注TecMint。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux CentOS ftp配置