5. 将所有内容整合在一起

在本节中,我将给出一个简单的示例,它应该有助于将前面章节中的内容整合在一起。

5.1. Apache + mod_auth_pam

在我们的示例中,我们将安装和配置 mod_auth_pam,这是一个 Apache 模块,允许您使用 PAM 对您的 Web 服务器用户进行身份验证。为了本示例的目的,我假设您已经安装了 Apache。如果尚未安装,您应该能够从您的发行商处找到安装包。

5.2. 我们的示例

我们的目标是配置我们 Web 服务器的一个受限区域,一个family/目录,以通过 PAM 验证用户身份。此目录包含私密的家庭信息,并且应该仅对用户组 family 的成员可访问。

5.3. 安装 mod_auth_pam

首先,您需要从 http://blank.pages.de/pam/mod_auth_pam/ 下载 mod_auth_pam。以下命令将编译 mod_auth_pam(您必须以 root 用户身份登录)

   ~# tar xzf mod_auth_pam.tar.gz
   ~# cd mod_auth_pam-1.0a
   ~/mod_auth_pam-1.0a# make
   ~/mod_auth_pam-1.0a# make install
   

如果您在安装 mod_auth_pam 模块时遇到任何问题,请确保您已安装发行版的 apache-dev 软件包。安装 mod_auth_pam 后,您需要重启 Apache。通常可以通过键入以下命令来重启 Apache(同样,您必须是 root 用户)

   ~# /etc/init.d/apache restart
   

5.4. 配置 PAM

Apache 的 PAM 配置存储在/etc/pam.d/httpd中。默认配置(在您安装 mod_auth_pam 时安装的)是安全的,但它使用了一个模块(pam_pwdb.so),该模块可能在许多系统上不可用。(此外,从头开始配置会很有趣!)因此,删除/etc/pam.d/httpd文件,然后从一个新的文件开始。

5.4.1. 决定如何配置 PAM

如果我们要配置 PAM 如何处理 Apache 的身份验证请求,我们需要弄清楚我们需要 PAM 检查什么。首先,我们希望 PAM 确保用户的密码与标准 Unix 密码数据库中的密码匹配。这听起来像是 'auth' 类型和pam_unix.so模块。我们希望将模块的控制类型设置为 'required',这样如果没有正确的密码,身份验证将失败。这是我们的/etc/pam.d/httpd的第一行看起来像

     auth	required	pam_unix.so
     

其次,我们必须确保用户帐户有效(即,他们的密码没有过期或任何此类讨厌的事情)。这是 'account' 类型,也由pam_unix.so模块提供。同样,我们将此模块的控制类型设置为 'required'。添加此行后,我们的/etc/pam.d/httpd配置看起来像这样

     auth	required	pam_unix.so
     account	required	pam_unix.so
     

它不是很复杂,但它完成了工作。它应该是一个学习如何配置 PAM 服务的良好开端。

5.5. 配置 Apache

现在 PAM 已配置为验证 Apache 的请求,我们将配置 Apache 以正确利用 PAM 身份验证来限制对family/目录的访问。为此,请将以下行添加到您的httpd.conf(通常存储在/etc/apache//etc/httpd):

    <Directory /var/www/family>
    AuthPAM_Enabled on
    AllowOverride None
    AuthName "Family Secrets"
    AuthType "basic"
    require group family
    </Directory>
    

中)。您可能需要替换/var/www/为 Web 文档的默认位置,通常是/home/httpd/。无论在哪里,您都需要创建family目录。

在我们测试我们的设置之前,我将花一点时间解释您刚刚输入的 Apache 配置。<Directory> 指令用于封装此目录的配置数据。在此指令中,我们启用了 PAM 身份验证 ("AuthPAM_enabled on"),关闭了对此配置的任何覆盖 ("AllowOverride none"),将此身份验证区域命名为 "Family Secrets" ("AuthName "Family Secrets""),将 http 身份验证(不是 PAM 身份验证)类型设置为默认值 ("AuthType "basic""),并要求用户组 family ("require group family")。

5.6. 测试我们的设置

现在我们已经正确设置了一切,是时候享受我们的成功了。启动您最喜欢的 Web 浏览器,然后访问 http://your-domain/family/(将 your-domain 替换为您自己的域名)。您现在是一名超级身份验证者了!