在 Ubuntu 中安装 httpd

17 Mar 2025 | 6 分钟阅读

httpd 简介

它是一个软件程序,作为后台进程运行,并在客户端-服务器模型中扮演重要的服务器角色,使用 HTTPS 或/和 HTTP 网络协议。httpd 的全称是 Hypertext Transfer Protocol daemon。该进程等待客户端的请求,并对每个请求进行响应,通过提供所请求的信息来回答,例如传输所请求的 Web 资源或附带 HTTP 错误消息。通常,它是 HTTP 服务器(也称为 Web 服务器)的主要软件组成部分。

一些常用的实现如下:

Install httpd Ubuntu
  • TUX Web服务器 (又名 kHTTPd)
  • Thttpd HTTP 服务器
  • OpenBSD 的 Httpd
  • Nginx HTTP 反向代理服务器
  • NCSA HTTPd HTTP 服务器
  • Lighttpd HTTP 服务器
  • Hiawatha HTTP 服务器(带反向代理功能)
  • Cherokee HTTP 服务器
  • CERN HTTPd HTTP 服务器
  • BusyBox httpd

Apache HTTP 服务器 (httpd)

此服务器提供了一个符合现代 HTTP 标准的开源 HTTP 服务器。httpd 包在 Red Hat Enterprise Linux 中提供了 Apache HTTP 服务器。执行命令,即 rpm -q httpd,以查找 httpd 包是否已成功安装。如果尚未安装且我们希望使用 Apache HTTP 服务器,则需要以 root 用户身份执行以下命令进行安装。

SELinux 和 httpd

在激活 SELinux 时,httpd(Apache HTTP 服务器)处于受限模式下运行。受限进程在其自己的域中执行,并与其他受限进程隔离。如果任何受限进程被攻击者利用,根据 SELinux 策略配置,攻击者可以访问的资源以及他们造成的损害将受到限制。

SELinux 策略描述了在受限域(如 httpd_t)中运行的进程如何与系统、文件和其他进程进行交互。文件应正确标记以允许访问。例如,httpd 可以读取所有标记为 httpd_sys_content_t 类型的文件,但无法写入它们,即使 Linux 权限允许写入访问。

应启用布尔值以允许某些行为,例如允许脚本网络访问、允许 httpd 访问 CIFS 和 NFS 卷,以及允许 httpd 运行 CGI(通用网关接口)脚本。

当 /etc/httpd/conf/httpd.conf 目录配置为允许 httpd 监听除 TCP 端口 8443、8009、8008、488、443 或 80 之外的端口时,应使用 semanage 命令将新端口号添加到 SELinux 策略配置中。

httpd 的类型

在 SELinux 中,主要的权限控制方法是通过目标策略来实现高级进程隔离,称为类型强制(Type Enforcement)。所有进程和文件都标记有类型。类型描述了所有进程的域以及每个文件的类型。

SELinux 策略规则描述了类型如何相互使用,无论是域使用类型还是域使用另一个域。只有当存在允许它的特定 SELinux 策略规则时,才会允许访问。

以下列出了一些与 httpd 一起使用的类型。不同的类型允许我们配置灵活的访问。

  • httpd_sys_script_exec_t
    将此类型应用于我们希望 httpd 运行的脚本。通常,此类型用于 /var/www/cgi-bin/ 目录中的 CGI(通用网关接口)脚本。SELinux 策略默认阻止 httpd 运行 CGI 脚本。要允许它,请将脚本标记为 httpd_sys_exec-t 类型,并启用 httpd_enable_cgi 布尔值。标记为 httpd_sys_script_exec_t 类型的脚本在由 httpd 运行时会执行于该域中。该域(httpd_sys_script_exec_t)可以访问许多系统域,例如 mysqld_t 和 postgresql_t。
  • httpd_sys_content_t
    对于静态 Web 内容,例如静态网站使用的 .html 文件,我们可以使用此类型。httpd 可以访问这些文件,并且由 httpd 运行的脚本也标记为该类型。默认标记为该类型的目录和文件不能被 httpd 或任何其他进程修改或写入。

注意:默认情况下,复制到或创建在 /var/www/html/ 目录中并标记为 httpd_sys_content_t 类型的文件。

  • httpd_sys_rw_content_t
    使用此类型创建的文件可以被标记为 httpd_sys_script_exec_t 类型的脚本写入,但不能被标记为其他类型的脚本修改。我们必须应用 httpd_sys_rw_content_t 类型来标记那些将被标记为 httpd_sys_script_exec_t 类型的脚本读取和写入的文件。
  • httpd_sys_ra_content_t
    标记为该类型的可追加文件可以通过标记为 httpd_sys_script_exec_t 类型的脚本进行追加,但不能被标记为其他类型的脚本修改。我们必须应用 httpd_sys_ra_content_t 类型来标记那些将被标记为 httpd_sys_script_exec_t 类型的脚本读取和追加的文件。
  • httpd_uncondined_script_exec_t
    标记为该类型的脚本在没有 SELinux 保护的情况下执行。我们只能在尝试了所有其他选项之后,才对复杂的脚本使用此类型。最好使用此类型,而不是禁用 httpd 或整个系统的 SELinux 保护。

布尔值

SELinux 的工作原理是基于服务执行所需的最低访问级别。服务可以通过多种方式执行,因此我们需要定义我们如何执行我们的服务。这可以通过布尔值来实现,这些布尔值允许在运行时修改 SELinux 策略部分,而无需了解 SELinux 策略编写。它允许进行更改,例如允许服务访问 NFS 卷,而无需重新编译或重新加载 SELinux 策略。

如何在 Ubuntu 中安装 Apache Web 服务器 (httpd)?

Httpd 是最广泛使用的开源 Web 服务器,支持包括 Solaris、macOS、Windows、Linux 等在内的大多数操作系统。它高度可定制,并可以通过其他模块进行扩展。对于常见的设置,安装和配置 Apache 非常容易。在本文中,我们将讨论在 Ubuntu 操作系统中安装和配置 httpd 的过程。

步骤 1:更新系统

在安装最新版本的 Apache2 之前,我们需要先更新系统存储库索引。为此,我们需要通过 Ctrl+Alt+T 快捷键打开终端并运行以下命令。

注意:只有授权用户才能更新、安装或删除 Linux 系统上的软件包。

步骤 2:安装 Apache2

在此步骤中,我们将安装 Apache2 Web 服务器。我们需要在终端窗口中运行以下命令。


Install httpd Ubuntu

系统可能会通过提供 Y/n 选项来要求确认。我们需要输入“Y”然后按 Enter 键继续。Apache Web 服务器及其所有依赖项将被安装在我们的系统上。

安装 Apache 服务器后,我们可以使用以下命令验证其版本。


Install httpd Ubuntu

防火墙配置

现在我们需要在我们的系统上打开一些端口以从外部访问 Apache。首先,让我们列出我们将为 Apache 提供访问权限的应用程序配置文件。执行以下命令进行操作。


Install httpd Ubuntu

我们可以在以下截图中看到不同的 Apache 配置文件。

我们将应用高度限制性的 'Apache' 配置文件来激活 80 端口的网络连接。

我们还可以使用以下命令查看防火墙中允许 Apache 的状态。


Install httpd Ubuntu

设置 Apache Web 服务器;验证 Apache 服务

在继续配置过程之前,我们将首先验证 Apache 服务是否正在运行。我们将执行以下命令在终端窗口中进行此操作。


Install httpd Ubuntu

从上面的结果中,我们可以发现 Apache 服务正在运行并且是活动的。另一种验证 Apache 服务是否激活的方法是通过 Apache Web 服务器请求一个网页。为此,我们需要使用以下命令查找我们的 IP 地址。


Install httpd Ubuntu

如何管理 Apache 服务器?

以下是一些我们可以在终端窗口中执行的用于管理 Apache 服务器的有用命令。

  • 启动 Apache 服务器
  • 停止 Apache 服务器
  • 停止并启动 Apache 服务器
  • 重新加载 Apache 服务器以更新新配置
  • 在启动时启动 Apache 服务器
  • 在启动时禁用 Apache 服务器