网站搜索

如何在 CentOS 7 中安装、配置和保护 FTP 服务器 - [综合指南]


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

在本指南中,我们将描述在 CentOS 中安装、配置和保护 FTP 服务器(VSFTPD 代表“非常安全的 FTP 守护进程”)的步骤strong>/RHEL 7Fedora 发行版。

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

第1步:安装FTP服务器

1.安装vsftpd服务器很简单,只需在终端中运行以下命令即可。

yum install vsftpd

2.安装完成后,该服务首先会被禁用,所以我们需要暂时手动启动它,并使其在下次系统启动时自动启动:

systemctl start vsftpd
systemctl enable vsftpd

3. 接下来,为了允许从外部系统访问 FTP 服务,我们必须打开端口 21,FTP 守护进程正在监听该端口,如下所示:

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             # disable  anonymous login
local_enable=YES		# permit local logins
write_enable=YES		# enable FTP commands which change the filesystem
local_umask=022		        # value of umask for file creation for local users
dirmessage_enable=YES	        # enable showing of messages when users first enter a new directory
xferlog_enable=YES		# a log file will be maintained detailing uploads and downloads
connect_from_port_20=YES        # use port 20 (ftp-data) on the server machine for PORT style connections
xferlog_std_format=YES          # keep standard log file format
listen=NO   			# prevent vsftpd from running in standalone mode
listen_ipv6=YES		        # vsftpd will listen on an IPv6 socket instead of an IPv4 one
pam_service_name=vsftpd         # name of the PAM service vsftpd will use
userlist_enable=YES  	        # enable vsftpd to load a list of usernames
tcp_wrappers=YES  		# turn on tcp wrappers

5. 现在配置 FTP 以根据用户列表文件 /etc/vsftpd.userlist 允许/拒绝用户的 FTP 访问。

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

但是,userlist_deny=NO 会更改设置,这意味着只有 userlist_file=/etc/vsftpd.userlist 中明确列出的用户才被允许登录。

userlist_enable=YES                   # vsftpd will load a list of usernames, from the filename given by userlist_file
userlist_file=/etc/vsftpd.userlist    # stores usernames.
userlist_deny=NO   

这还不是全部,当用户登录到 FTP 服务器时,他们被放置在 chroot’ed 监狱中,这是本地根目录,仅充当 FTP 会话的主目录。

接下来,我们将了解如何将 FTP 用户 chroot 到 FTP 用户的主目录(本地根)目录的两种可能场景,如下所述。

6. 现在添加以下两个选项以将 FTP 用户限制在其主目录中。

chroot_local_user=YES
allow_writeable_chroot=YES

chroot_local_user=YES 表示本地用户将被放置在 chroot Jail 中,默认设置是登录后的主目录。

而且默认情况下,出于安全原因,vsftpd 不允许 chroot 监狱目录可写,但是,我们可以使用选项 allow_writeable_chroot=YES 来覆盖此设置。

保存文件并关闭它。

使用 SELinux 保护 FTP 服务器

7. 现在,让我们设置下面的 SELinux 布尔值,以允许 FTP 读取用户主目录中的文件。请注意,这最初是使用以下命令完成的:

setsebool -P ftp_home_dir on

但是,默认情况下,ftp_home_dir 指令已被禁用,如本错误报告中所述:https://bugzilla.redhat.com/show_bug.cgi?id=1097775。

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

semanage boolean -m ftpd_full_access --on

此时,我们必须重新启动 vsftpd 才能使我们迄今为止所做的所有更改生效:

systemctl restart vsftpd

步骤 4:测试 FTP 服务器

8. 现在我们将通过使用 useradd 命令创建 FTP 用户来测试 FTP 服务器。

useradd -m -c “Ravi Saive, CEO” -s /bin/bash ravi
passwd ravi

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

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

9.现在是时候测试我们的上述设置是否正常工作了。我们先来测试一下匿名登录,从下面的截图可以看出,匿名登录是不允许的:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : anonymous
530 Permission denied.
Login failed.
ftp>

10. 我们还测试一下文件 /etc/vsftpd.userlist 中未列出的用户是否会被授予登录权限,但屏幕截图中的情况并非如此以下:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : aaronkilik
530 Permission denied.
Login failed.
ftp>

11. 现在,最后检查一下文件 /etc/vsftpd.userlist 中列出的用户在登录后是否确实放置在他/她的主目录中:

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

仅当您确切知道自己在做什么时才激活此选项。需要注意的是,这些安全隐患并不是 vsftpd 特有的,它们适用于所有 FTP 守护进程,这些守护进程也将本地用户置于 chroot 监狱中。

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

步骤5:配置不同的FTP用户主目录

12.再次打开vsftpd配置文件,首先注释掉下面的unsecure选项:

#allow_writeable_chroot=YES

然后为用户创建备用本地根目录(ravi,您的可能不同)并删除所有用户对此目录的写入权限:

mkdir /home/ravi/ftp
chown nobody:nobody /home/ravi/ftp
chmod a-w /home/ravi/ftp

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

mkdir /home/ravi/ftp/files
chown ravi:ravi  /home/ravi/ftp/files
chmod 0700 /home/ravi/ftp/files/

然后使用以下值在 vsftpd 配置文件中添加/修改以下选项:

user_sub_token=$USER         # inserts the username in the local root directory 
local_root=/home/$USER/ftp   # defines any users local root directory

保存文件并关闭它。再次,让我们使用新设置重新启动服务:

systemctl restart vsftpd

14. 现在再次做最后的测试,看到用户本地根目录就是我们在他的主目录中创建的FTP目录。

ftp 192.168.56.10
Connected to 192.168.56.10  (192.168.56.10).
220 Welcome to TecMint.com FTP service.
Name (192.168.56.10:root) : ravi
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls

就是这样!在本文中,我们描述了如何在 CentOS 7 中安装、配置和保护 FTP 服务器,请使用下面的评论部分给我们回复有关本指南的信息/分享有关此主题的任何有用信息。

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

在下一篇文章中,我们还将向您展示如何在 CentOS 7 中使用 SSL/TLS 连接来保护 FTP 服务器的安全,在此之前,请保持与 TecMint 的连接。