网站搜索

RHCSA 系列:安装、配置和保护 Web 和 FTP 服务器 - 第 9 部分


Web 服务器(也称为 HTTP 服务器)是一种向网络中的客户端处理内容(最常见的是网页,但也包括其他类型的文档)的服务。

FTP 服务器是最古老和最常用的资源之一(即使到今天),在不需要身份验证的情况下,FTP 服务器可以向网络上的客户端提供文件,因为 FTP 使用用户名密码未经加密。

RHEL 7 中提供的 Web 服务器是 Apache HTTP Server 的 2.4 版本。至于 FTP 服务器,我们将使用 Very Secure Ftp Daemon(又名 vsftpd)来建立受 TLS 保护的连接。

在本文中,我们将解释如何在 RHEL 7 中安装、配置和保护 Web 服务器和 FTP 服务器。

安装 Apache 和 FTP 服务器

在本指南中,我们将使用静态 IP 地址为 192.168.0.18/24 的 RHEL 7 服务器。要安装 Apache 和 VSFTPD,请运行以下命令:


yum update && yum install httpd vsftpd

安装完成后,这两个服务最初都会被禁用,因此我们需要暂时手动启动它们,并使其在下次启动时自动启动:


systemctl start httpd
systemctl enable httpd
systemctl start vsftpd
systemctl enable vsftpd

此外,我们必须打开 Web 和 ftp 守护进程分别监听的端口 8021,以便允许从外部访问这些服务:


firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --reload

要确认 Web 服务器正常工作,请启动浏览器并输入服务器的 IP。您应该看到测试页面:

至于 ftp 服务器,我们必须进一步配置它,我们将在一分钟内完成,然后再确认它是否按预期工作。

配置和保护 Apache Web 服务器

Apache 的主要配置文件位于 /etc/httpd/conf/httpd.conf 中,但它可能依赖于 /etc/httpd 中存在的其他文件/conf.d

尽管默认配置足以满足大多数情况,但最好熟悉官方文档中描述的所有可用选项。

与往常一样,在编辑主配置文件之前对其进行备份:


cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.$(date +%Y%m%d)

然后用您喜欢的文本编辑器打开它并查找以下变量:

  1. ServerRoot:保存服务器配置、错误和日志文件的目录。
  2. 监听:指示 Apache 监听特定的 IP 地址和/或端口。
  3. 包含:允许包含其他必须存在的配置文件。否则,服务器将失败,这与 IncludeOptional 指令相反,如果指定的配置文件不存在,则该指令将被静默忽略。
  4. 用户和组:运行 httpd 服务的用户/组的名称。
  5. DocumentRoot:Apache 将从中为您的文档提供服务的目录。默认情况下,所有请求均从此目录中获取,但符号链接和别名可用于指向其他位置。
  6. ServerName:该指令设置服务器用来识别自身的主机名(或 IP 地址)和端口。

第一个安全措施将包括创建一个专用用户和组(即 howtoing/howtoing)来运行 Web 服务器并将默认端口更改为更高的端口(<在本例中为strong>9000):


ServerRoot "/etc/httpd"
Listen 192.168.0.18:9000
User tecmint
Group tecmint
DocumentRoot "/var/www/html"
ServerName 192.168.0.18:9000

您可以使用测试配置文件。


apachectl configtest

如果一切正常,则重新启动网络服务器。


systemctl restart httpd

并且不要忘记在防火墙中启用新端口(并禁用旧端口):


firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload

请注意,由于 SELinux 政策,您只能使用由


semanage port -l | grep -w '^http_port_t'

对于网络服务器。

如果您想使用其他端口(即 TCP 端口 8100),则必须将其添加到 httpd 服务的 SELinux 端口上下文中:


semanage port -a -t http_port_t -p tcp 8100

为了进一步保护您的 Apache 安装,请执行以下步骤:

1. Apache 正在运行的用户不应有权访问 shell:


usermod -s /sbin/nologin tecmint

2. 禁用目录列表,以防止浏览器在该目录中不存在 index.html 时显示该目录的内容。

编辑 /etc/httpd/conf/httpd.conf (以及虚拟主机的配置文件,如果有)并确保 Options 指令位于顶部和在目录块级别,设置为


Options None

3. 在 HTTP 响应中隐藏有关 Web 服务器和操作系统的信息。编辑 /etc/httpd/conf/httpd.conf 如下:


ServerTokens Prod 
ServerSignature Off

现在您已准备好开始提供 /var/www/html 目录中的内容。

配置和保护 FTP 服务器

与 Apache 的情况一样,Vsftpd (/etc/vsftpd/vsftpd.conf) 的主要配置文件有很好的注释,而默认配置应该足以满足大多数应用程序的需要,您应该熟悉文档和手册页(man vsftpd.conf),以便更有效地操作 ftp 服务器(这一点我怎么强调都不为过!)。

在我们的例子中,使用的指令如下:


anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

通过使用 chroot_local_user=YES,本地用户在登录后将(默认)被放置在其主目录中的 chroot 监狱中。这意味着本地用户将无法访问其相应主目录之外的任何文件。

最后,要允许 ftp 读取用户主目录中的文件,请设置以下 SELinux 布尔值:


setsebool -P ftp_home_dir on

您现在可以使用 Filezilla 等客户端连接到 ftp 服务器:

请注意,/var/log/xferlog 日志记录下载和上传,这与上面的目录列表一致:

另请阅读:使用 Trickle 限制 Linux 系统中的应用程序使用的 FTP 网络带宽

概括

在本教程中,我们解释了如何设置 Web 和 FTP 服务器。由于主题广泛,不可能涵盖这些主题的所有方面(即虚拟网络主机)。因此,我建议您还查看本网站中有关 Apache 的其他优秀文章。