RHCSA 系列:安装、配置和保护 Web 和 FTP 服务器 - 第 9 部分
Web 服务器(也称为HTTP服务器)是一种通过网络向客户端处理内容(最常见的是网页,但也有其他类型的文档)的服务。
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
此外,我们必须打开端口80和21,web 和 ftp 守护进程分别监听这两个端口,以便从外部访问这些服务:
# 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)
然后用您喜欢的文本编辑器打开它并查找以下变量:
- ServerRoot:保存服务器配置,错误和日志文件的目录。
- 监听:指示 Apache 监听特定的 IP 地址和/或端口。
- Include:允许包含其他配置文件,这些文件必须存在。否则,服务器将失败,这与 IncludeOptional 指令相反,如果指定的配置文件不存在,则会被默默忽略。
- 用户和组:以该身份运行 httpd 服务的用户/组的名称。
- DocumentRoot:Apache 将在其中提供您的文档的目录。默认情况下,所有请求都来自此目录,但可以使用符号链接和别名指向其他位置。
- ServerName:此指令设置服务器用来标识自身的主机名(或 IP 地址)和端口。
第一项安全措施包括创建一个专用用户和组(即example / example)来运行 Web 服务器,并将默认端口更改为更高的端口(在本例中为9000):
ServerRoot "/etc/httpd" Listen 192.168.0.18:9000 User example Group example DocumentRoot "/var/www/html" ServerName 192.168.0.18:9000
您可以使用来测试配置文件。
# apachectl configtest
如果一切正常,则重新启动 Web 服务器。
# 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'
用于 Web 服务器。
如果您想要使用其他端口(例如 TCP 端口8100),则必须将其添加到httpd服务的SELinux端口上下文中:
# semanage port -a -t http_port_t -p tcp 8100
为了进一步保护您的 Apache 安装,请按照以下步骤操作:
1.运行 Apache 的用户不应具有访问 shell 的权限:
# usermod -s /sbin/nologin example
2.禁用目录列表,以防止浏览器在目录下没有index.html时显示目录的内容。
编辑/etc/httpd/conf/httpd.conf
(以及虚拟主机的配置文件(如果有))并确保顶部和目录块级别的Options指令都设置为None:
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 服务器。由于主题范围很广,因此不可能涵盖这些主题(即虚拟 Web 主机)的所有方面。因此,我建议您也查看本网站上有关Apache 的其他优秀文章。