FreeBSD7-服务器构建指南-全-
FreeBSD7 服务器构建指南(全)
原文:Building a Server with FreeBSD 7
译者:飞龙
如何使用本书
本书中的指南构建成以标准格式提供信息。本书分为两部分:第一部分,"基础系统",和第二部分,"第三方应用"。
第一部分提供了安装 FreeBSD 操作系统的信息。本书的这一部分还包含了设置你的基础 FreeBSD 环境和更新 ports 集合的重要信息。如果你需要有关 FreeBSD 操作系统的更多信息,请查阅 FreeBSD 手册。这是一份无价资源,可以在freebsd.org/doc/en/books/handbook上找到。
第二部分构成了本书的大部分内容。本节提供了使用 ports 集合安装和配置软件所需的信息。应用程序被分为单独的模块,这些模块按字母顺序排列,最大限度地减少了搜索索引或目录的需要。
本书涵盖的应用程序经过精心挑选。在选择要包含哪些应用程序时,稳定性和可用支持是决定因素。在服务器环境中,稳定性至关重要。社区支持对于应用程序的长期可行性也非常重要;一个得到良好支持的应用程序意味着如果你需要帮助,将会有资源可用。社区支持也鼓励开发工作,这可能导致对错误或安全问题的更快响应。
格式
让我们检查在整个文档中使用的标准化指南格式。以下图显示了每个模块的标题和头部的信息。

❶ 模块标题:这种字典式标题使得通过翻页查找你想要的项目变得容易。
❷ 文件路径:FreeBSD ports 树中 Makefile 和其他相关文件的路径在此给出。
❸ 应用程序使用的协议和端口:如果应用程序提供的服务需要可供互联网上的客户端使用,你可能需要配置你的路由器将这些端口转发到你的 FreeBSD 服务器。请查阅路由器的文档以获取有关端口转发的详细信息。
❹ 努力程度:此值是对完成模块所需的时间和努力的估计,范围从 1 到 5。级别 1 需要最少的努力,而级别 5 需要最多的努力。
❺ 模块中涵盖的应用版本和开发者网站:本书中涵盖的应用正在持续开发中,因此版本号会发生变化,但描述的安装程序应保持相对稳定。开发者网站的 URL 提供供参考。
每个模块都包含以下部分的一些或全部:
概述 本节解释了模块中包含的应用程序的功能,它提供的服务或解决方案,以及其历史。
资源 本节展示了提供有关所涵盖应用程序或它所采用的协议的进一步信息的网站。
必需 本节指定在开始模块之前需要安装或完成的模块或任务。
可选 本节列出了增强或扩展应用程序功能的功能模块或项目。
准备 本节包含在开始应用程序安装过程之前需要完成的说明和任务。
安装 本节包含指令和/或命令,使用称为 Makefile 的脚本将应用程序的源代码编译成二进制形式。
配置 本节包含重要的安装后说明,为安装的应用程序准备配置文件。
测试 如果适用,本节提供了测试应用程序或服务安装的步骤。有关启用服务器应用程序自动启动的详细信息也在此处提及。
工具 本节包含对系统管理有用的重要命令或程序。
注意: 这里提供了常用选项(或开关)的快速参考。有关命令或实用程序的完整文档,请参阅手册页面。有关更多信息,请参阅“手册页面”。
配置文件 本节包含了一系列重要的配置文件列表,包括它们的简要描述和默认位置。
日志文件 本节包含记录应用程序信息的日志列表;这些日志对于诊断问题和监控活动可能很有用。
备注 本节包含可能有助于扩展应用程序的功能和安全性的信息。可能还包含基于个人偏好的选项。
WHERE TO START
下面是本书中包含的模块及其关系的视觉表示。服务器角色垂直组织,相关模块位于其下方。
箭头表示在使用本书中的模块时应遵循的逻辑顺序。连接模块的实线显示了模块之间的关系。您可以用这个作为起点,也可以开发自己的构建策略。

BECOMING THE SUPERUSER
本书通篇使用“成为超级用户”这个方向,我想尽早阐明其含义。超级用户一词与 UNIX-like 系统中的 root 账户同义。root 账户是一个具有对系统完全管理权限的特殊用户账户。本书的大部分模块都需要您以超级用户身份执行命令。
要成为超级用户,你可以使用 root 用户名在控制台(使用控制台意味着你正在使用连接到系统的监视器和键盘)登录。有时你可能需要通过 SSH(安全外壳)远程登录。出于安全原因,FreeBSD 不允许 root 用户通过 SSH 登录。你必须首先以普通用户身份登录,然后使用su命令切换到超级用户账户。只有属于 wheel 组的用户账户才能切换到超级用户账户。本书中的 FreeBSD 模块解释了如何在安装过程中将你的初始用户添加到 wheel 组。如果你没有遵循该模块或如果你想验证你的组成员资格,登录后输入以下命令:
# id
uid=1001(john) gid=1001(john) groups=1001(john), 0(wheel)
你可以从上面看到,用户 john 是 wheel 组的成员。要成为超级用户,John 需要输入以下命令:
# su
在 John 输入超级用户(root)密码后,他将切换到超级用户账户。他可以通过输入以下命令来验证:
# whoami
root
一旦以超级用户身份登录,你可以使用以下命令将其他用户添加到 wheel 组:
# pw user mod `*uname*` -G wheel
将*uname*替换为你想要添加的用户名。
EASY EDITOR
与其他类 UNIX 平台类似,FreeBSD 的配置由各种文本配置文件的内容控制。这些配置文件决定了系统的行为,因此能够编辑它们是至关重要的。FreeBSD 包括 ee(Easy Editor),它易于学习,并具有执行管理任务所需的基本功能。要在命令提示符下启动 Easy Editor,只需输入**ee**即可。以下是一个界面示例:
代码视图:
^[ (escape) menu ^y search prompt ^k delete line ^p prev li ^g prev page
^o ascii code ^x search ^l undelete line ^n next li ^v next page
^u end of file ^a begin of line ^w delete word ^b back 1 char
^t top of text ^e end of line ^r restore word ^f forward 1 char
^c command ^d delete char ^j undelete char ^z next word
============================================================================
锚符号表示应该按住[ctrl]键与相邻的字母组合。例如,要搜索当前文本文件中的某个单词,请按[ctrl-Y]。你将看到以下搜索提示:
search for:
Easy Editor 在屏幕底部显示提示和状态信息。要访问菜单系统,请按[esc]:
+---------------------+
| main menu |
| |
| a) leave editor |
| b) help |
| c) file operations |
| d) redraw screen |
| e) settings |
| f) search |
| g) miscellaneous |
| |
| press Esc to cancel |
+---------------------+
界面直观,不需要花费太多精力去学习。一旦完成初始的 FreeBSD 安装,花些时间熟悉一下 Easy Editor。
第一部分:基础系统
第一章. FREEBSD 7.0
HTTP://WWW.FREEBSD.ORG
1.1. 摘要
FreeBSD 是一个基于 BSD(伯克利软件发行版)的免费、类 UNIX 操作系统,最初在加州大学伯克利分校开发。FreeBSD 是开源软件;源代码(软件蓝图)对公众免费,可以修改或改进。
FreeBSD 作为一个完整的操作系统被开发,包括内核(操作系统的核心)、shell(用户界面)和设备驱动程序(控制硬件的软件)。另一方面,Linux 内核是独立于 Linux 用户空间开发的。换句话说,shell、系统工具和应用程序是分别开发的,并以各种发行版(如 Ubuntu、Red Hat、SUSE 等)的形式与内核打包。
1.1.1. 许可证
Linux 根据 GPL(GNU 通用公共许可证)的第 2 版授权;FreeBSD 根据新的 BSD 许可证发布。有关 GPL 和 BSD 许可证的详细信息,请访问www.opensource.org。
1.1.2. 端口集合
标准 FreeBSD 发行版包括一系列经过验证的强大工具,以及一个庞大的动态开发第三方软件库,称为端口集合。
端口集合是 FreeBSD 最方便的特性之一。它被组织成一个包含 makefile(从源代码构建软件的脚本)的目录层级结构。每个 makefile 都包含自动修补、编译和安装应用的脚本,这使得安装和跟踪软件相对容易。
1.1.3. FreeBSD 的根源,简要介绍
FreeBSD 的起源可以追溯到 1973 年,当时贝尔实验室的员工肯·汤普森和丹尼斯·里奇在 ACM(计算机机械协会)操作系统原理研讨会上提交了一篇关于 UNIX 的论文。加州大学伯克利分校的一位教授,罗伯特·法布里,听了他们的演讲,说服了伯克利分校的员工购买一台 PDP-11(当时由数字设备公司制造的 16 位计算机,价格近 11,000 美元)来运行汤普森的 AT&T UNIX。该系统的受欢迎程度不断提高,伯克利教职员工和学生建立了一个系统,以便在 PDP-11 上共享时间。
当 UNIX 在 PDP-11 上运行时,两位伯克利研究生,比尔·乔伊和查克·黑利,开始为 UNIX 编写程序。伯克利的 UNIX 开发最终引起了美国政府的注意,国防部授予加州大学伯克利分校一份合同,为其与 DARPA(国防高级研究计划局)合作的承包商创建一个定制的 UNIX 版本。在伯克利开发的代码被整合到现有的 AT&T UNIX 系统中,以满足 DARPA 项目的需求,乔伊被选中领导该项目,直到 1982 年中旬他离开,共同创立了 Sun Microsystems。(比尔·乔伊也是 vi 文本编辑器的创造者,并为 UNIX 开发了 TCP/IP 堆栈。)
公司对使用伯克利的 BSD Unix 的兴趣日益增长。然而,当时,BSD Unix 包含了 AT&T UNIX 的源代码,使用时需要向 AT&T 支付许可费。这笔费用对于许多小公司来说是难以承受的,摆脱 AT&T 的许可成为了一项优先任务。开发者们被大量召集起来,重新编写和替换 AT&T 的内核和实用工具。
经过大量的编码工作,1991 年 BSD Unix 已经摆脱了 AT&T 的代码,但它仍然缺少六个内核文件,这些文件是使其完全功能性的必要条件。这些文件最初由 AT&T 编写,不易重写。1991 年底,比尔和林恩·约尔茨(两位加州大学伯克利分校校友)编写了这六个缺失的文件,并发布了 386/BSD。几个月后,FreeBSD 项目成立,负责 FreeBSD 操作系统的开发,其初始代码基于约尔茨的 386/BSD。
1992 年 1 月,伯克利软件开发公司(BSDI)开始销售基于 386/BSD 的商业版 Unix。1992 年底,UNIX 系统实验室(AT&T 的子公司,负责 UNIX 的开发)对 BSDI 和加州大学伯克利分校提起诉讼,指控其侵犯版权和未经授权发布商业机密。1994 年 1 月达成和解,要求对伯克利代码进行小幅度修改。结果发布的代码,即 4.4BSD-Lite,是当前 FreeBSD 的基础。
第一部分:基础系统
第一章. FREEBSD 7.0
HTTP://WWW.FREEBSD.ORG
1.1. 摘要
FreeBSD 是一个基于 BSD(伯克利软件发行版)的免费、类 UNIX 操作系统,最初在加州大学伯克利分校开发。FreeBSD 是开源软件;源代码(软件蓝图)对公众免费,可以修改或改进。
FreeBSD 作为一个完整的操作系统进行开发,包括内核(操作系统的核心)、shell(用户界面)和设备驱动程序(控制硬件的软件)。另一方面,Linux 内核是独立于 Linux 用户空间开发的。换句话说,shell、系统工具和应用程序是分别开发的,并以各种发行版(如 Ubuntu、Red Hat、SUSE 等)的形式与内核打包。
1.1.1. 许可证
Linux 遵循 GPL(GNU 通用公共许可证)的第 2 版许可;FreeBSD 则采用新的 BSD 许可证。有关 GPL 和 BSD 许可证的详细信息,请访问www.opensource.org。
1.1.2. 端口集合
标准 FreeBSD 发行版包括一系列经过验证的强大工具,以及一个庞大的动态开发的第三方软件库,称为端口集合。
端口集合是 FreeBSD 最方便的特性之一。它被组织成一个分类目录的层次结构,包含 makefile(从源代码构建软件的脚本)。每个 makefile 包含自动修补、编译和安装应用的脚本,使得安装和跟踪软件相对容易。
1.1.3. FreeBSD 的根源,简要介绍
FreeBSD 的起源可以追溯到 1973 年,当时贝尔实验室的员工肯·汤普森和丹尼斯·里奇在 ACM(计算机机械协会)操作系统原理研讨会上提出了 UNIX 的论文。加州大学伯克利分校的一位教授,罗伯特·法布里,听了他们的演讲,说服了伯克利分校的员工购买一台 PDP-11(当时由数字设备公司制造的 16 位计算机,价格近 11,000 美元)来运行汤普森的 AT&T UNIX。该系统的受欢迎程度不断提高,伯克利教职员工和学生建立了一个系统,在 PDP-11 上共享时间。
当 UNIX 在 PDP-11 上运行时,两位伯克利研究生比尔·乔伊和查克·黑利开始为 UNIX 编写程序。伯克利的 UNIX 开发最终引起了美国政府的注意,国防部授予加州大学伯克利分校一份合同,为其与 DARPA(国防高级研究计划局)合作的承包商创建一个定制的 UNIX 版本。在伯克利开发的代码被整合到现有的 AT&T UNIX 系统中,以满足 DARPA 项目的需求,乔伊被选中领导该项目,直到 1982 年中旬他离开并共同创立了 Sun Microsystems。(比尔·乔伊也是 vi 文本编辑器的创造者,并为 UNIX 开发了 TCP/IP 堆栈。)
企业对使用伯克利的 BSD Unix 的兴趣日益增长。然而,当时,BSD Unix 包含了 AT&T UNIX 的源代码,使用时需要向 AT&T 支付许可费。这笔费用对于许多小公司来说是难以承受的,摆脱 AT&T 的许可成为了一项优先任务。开发者们被大量召集起来,重新编写和替换 AT&T 的内核和实用工具。
经过大量的编码工作,1991 年 BSD Unix 已经摆脱了 AT&T 的代码,但它仍然缺少六个内核文件,这些文件是使其完全功能性的必要条件。这些文件最初由 AT&T 编写,不易重写。1991 年底,比尔和林恩·约尔茨(两位加州大学伯克利分校校友)编写了这六个缺失的文件,并发布了 386/BSD。几个月后,FreeBSD 项目成立,负责 FreeBSD 操作系统的开发,其初始代码基于约尔茨的 386/BSD。
1992 年 1 月,伯克利软件开发公司(BSDI)开始销售基于 386/BSD 的商业版 Unix。1992 年底,UNIX 系统实验室(AT&T 的子公司,负责 UNIX 的开发)对 BSDI 和加州大学伯克利分校提起诉讼,指控其侵犯版权和未经授权发布商业机密。1994 年 1 月达成和解,要求对伯克利代码进行小幅度修改。结果发布的代码,即 4.4BSD-Lite,是当前 FreeBSD 的基础。
第一部分:基础系统
第一章. FREEBSD 7.0
HTTP://WWW.FREEBSD.ORG
1.1. 总结
FreeBSD 是基于 BSD(伯克利软件发行版)的免费、类 UNIX 操作系统,最初在加州大学伯克利分校开发。FreeBSD 是开源软件;源代码(软件蓝图)对公众免费开放,以便修改或改进。
FreeBSD 是作为一个完整的操作系统开发的,它包括内核(操作系统的核心)、外壳(用户界面)和设备驱动程序(控制硬件的软件)。另一方面,Linux 内核是独立于 Linux 用户空间开发的。换句话说,外壳、系统实用程序和应用程序是分别开发的,并以各种发行版(如 Ubuntu、Red Hat、SUSE 等)的形式与内核打包。
1.1.1. 许可证
Linux 根据 GPL(GNU 通用公共许可证)的第 2 版授权;FreeBSD 则在新 BSD 许可证下发布。有关 GPL 和 BSD 许可证的详细信息,请访问 www.opensource.org。
1.1.2. Ports 收集
标准的 FreeBSD 发行版包括一系列经过验证的强大实用程序,以及一个庞大的动态开发第三方软件库,称为 ports 收集。
Ports 收集是 FreeBSD 最方便的特性之一。它被组织成一系列分类目录的层次结构,包含 makefile(从源代码构建软件的脚本)。每个 makefile 包含自动修补、编译和安装应用程序的脚本,使得安装和跟踪软件相对容易。
1.1.3. FreeBSD 的根源,简要概述
FreeBSD 的起源可以追溯到 1973 年,当时贝尔实验室的员工 Ken Thompson 和 Dennis Ritchie 在 ACM(计算机机械协会)操作系统原理研讨会上提交了一篇关于 UNIX 的论文。加州大学伯克利分校的一位教授 Robert Fabry 听了他们的演讲,并说服伯克利分校的员工购买了一台 PDP-11(由数字设备公司制造的 16 位计算机,当时价值近 11,000 美元)来运行 Thompson 的 AT&T UNIX。该系统的受欢迎程度不断提高,伯克利学院的教师和学生建立了一个系统,以便在 PDP-11 上共享时间。
当 UNIX 在 PDP-11 上运行时,两位加州大学伯克利分校的毕业生 Bill Joy 和 Chuck Haley 开始为 UNIX 编写程序。伯克利分校的 UNIX 开发最终引起了美国政府的注意,国防部授予加州大学伯克利分校一份合同,为其与 DARPA(国防高级研究计划局)合作的承包商创建一个定制的 UNIX 版本。在伯克利开发的代码被整合到现有的 AT&T UNIX 系统中,以满足 DARPA 项目的需求,Joy 被选为项目负责人,直到 1982 年中他离开去共同创立 Sun Microsystems 为止。(Bill Joy 还创造了 vi 文本编辑器,并为 UNIX 开发了 TCP/IP 堆栈。)
企业对使用伯克利的 BSD Unix 的兴趣日益增长。然而,当时,BSD Unix 包含了 AT&T UNIX 的源代码,使用时需要向 AT&T 支付许可费。这笔费用对于许多小公司来说是难以承受的,摆脱 AT&T 的许可成为了一项优先任务。开发者们被大量召集起来重写和替换 AT&T 内核和实用工具。
经过大量的编码工作,1991 年 BSD Unix 已经摆脱了 AT&T 代码,但仍然缺少六个内核文件才能使其完全功能化。这些文件最初由 AT&T 编写,不易重写。1991 年底,比尔和林恩·约尔茨(两位加州大学伯克利分校校友)编写了六个缺失的文件,并发布了 386/BSD。几个月后,FreeBSD 项目成立,负责 FreeBSD 操作系统的开发,其初始代码基于约尔茨的 386/BSD。
1992 年 1 月,伯克利软件开发公司(BSDI)开始销售基于 386/BSD 的商业版 Unix。1992 年底,UNIX 系统实验室(AT&T 的子公司,负责 UNIX 开发)对 BSDI 和加州大学伯克利分校提起诉讼,指控其侵犯版权和未经授权泄露商业机密。1994 年 1 月达成和解,要求对伯克利代码进行少量修改。结果发布的代码,作为 4.4BSD-Lite 发布,是当前 FreeBSD 的基础。
1.2. 资源
官方 FreeBSD 手册
www.freebsd.org/doc/en/books/handbook
《为什么选择 FreeBSD》—— 摩根·波尔曼著
www.ibm.com/developerworks/opensource/library/os-freebsd
《FreeBSD 简史》—— 贾森·哈伯德著
www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/history.html
1.3. 必需项
以下是为 FreeBSD 操作系统的 CD 安装所需的最低硬件和软件要求。有关支持的硬件的官方列表,请访问www.freebsd.org/releases/7.0R/hardware.html。
拥有 i80486 处理器或更高版本的 x86 计算机,或者 AMD Am486 处理器或更高版本;32MB 的 RAM;至少 2GB 的硬盘空间;支持从 CD 启动的系统 BIOS

(ISO 镜像可在www.freebsd.org/where.html获取)
1.4. 可选项
以下内容对于 FreeBSD 的基本安装不是必需的,但可能需要运行功能性的网络服务器:
如果您想使用 ports 集合
如果您希望在互联网上托管服务器
一个与主硬盘大小相当的第二个物理硬盘,用于存储备份或镜像主硬盘
1.5. 准备
在您打算安装 FreeBSD 的系统上备份所有您希望保留的数据。本指南假设 FreeBSD 将是计算机上使用的唯一操作系统。请确保您的系统 BIOS 设置中已启用从 CD 引导。
1.6. 安装
下面是开始 FreeBSD 安装过程所需的步骤。
-
将 FreeBSD CD 插入系统并重新启动。应该会出现一个欢迎使用 FreeBSD 的菜单。您可以按[enter]键或让计时器倒数到零。
-
启动后,应该会出现国家选择菜单。使用箭头键选择您的国家并按[enter]键。
-
应该会显示 sysinstall 主菜单。使用箭头键选择“标准安装”选项,然后按[enter]键。
-
应该会显示一个包含不同分区方案详细信息的消息。按[enter]键。您可能会看到一个包含关于不正确几何形状警告的另一个对话框;如果是这样,sysinstall 应自动调整此设置。按[enter]键。
-
为了简化,我们将整个磁盘分配给 FreeBSD。要这样做,请按 A 键,然后按 Q 键完成。
-
在引导管理器对话框中选择“标准”以使刚刚分区的驱动器可引导。
-
下一个对话框将解释我们需要在新的分区内创建 BSD 分区。按[enter]键,然后按 A 键让编辑器自动创建标准分区。按 Q 键退出并继续。
-
将出现一个对话框,要求您选择分发类型。使用箭头键向下滚动到“用户”并按[空格键]选择它。另一个对话框将出现,询问您是否要安装 FreeBSD 端口集合。选择“是”并按[enter]键继续。返回到“选择分发”菜单后,按[tab]键高亮显示“确定”并按[enter]键。
-
下一个屏幕将要求您选择安装介质。由于我们使用的是 CD,请选择 CD/DVD 并按[enter]键。
-
最后,您将被要求确认您已准备好安装。如果您是,请选择“是”并按[enter]键。sysinstall 应将所有必要的文件复制到您的硬盘上。
1.7. 配置
一旦 sysinstall 完成将必要的文件复制到硬盘上,就是时候配置 FreeBSD 的选项了。
-
应该会出现恭喜对话框。按[enter]键。
-
现在,您可以配置您的以太网适配器。如果您已安装,请选择“是”并按[enter]键。否则选择“否”并继续到第 5 步。
-
下一个对话框列出了可用的接口。您安装的以太网适配器很可能是列表顶部的。如果是这样,只需按[enter]键;如果不是,请选择它并按[enter]键。sysinstall 将询问您是否要尝试 IPv6 配置。选择“否”并按[enter]键。
-
你会被要求尝试 DHCP(动态主机配置协议)。选择“是”并按[回车键]。(要手动完成,选择“否”并输入你的设置。)会出现一个带有光标位于标记为“主机”位置的屏幕。在这里输入完全限定域名(FQDN)(例如,server.example.com)。将
*server*替换为你选择的名字,将example.com替换为你注册的域名。如果这台计算机将是域上的服务器,请在域名字段中输入域名。如果你还没有注册域名或想稍后设置,只需将域名字段留空并继续(有关稍后配置的详细信息,请参阅"配置静态 IP")。最后,按[Tab 键]直到“确定”被高亮,然后按[回车键]继续。 -
当询问你是否想要将机器作为网络网关时,选择“否”并按[回车键]。会出现一个询问你是否想要配置 inetd 的对话框。选择“否”并按[回车键]。
-
sysinstall 会询问你是否想要启用 SSH(安全壳)登录。选择“是”并按[回车键]。
-
当询问你是否想要允许匿名 FTP 访问时,选择“否”并按[回车键]。
-
当询问你是否想要将机器配置为 NFS 服务器时,选择“否”并按[回车键]。
-
当询问你是否想要将机器配置为 NFS 客户端时,选择“否”并按[回车键]。sysinstall 会要求自定义系统控制台设置。选择“否”并按[回车键]。
-
当被要求设置时区时,选择“是”并按[回车键]。会出现一个对话框询问 CMOS 时钟是否设置为 UTC。很可能不是,所以选择“否”并按[回车键]。选择你的计算机设置的地区/国家/时区并按[回车键]。sysinstall 会要求你确认你的选择;如果一切看起来都正常,选择“是”并按[回车键]。
-
当询问你是否想要启用 Linux 二进制兼容性时,选择“否”并按[回车键]。
-
当询问你是否拥有鼠标时。由于这个安装是从命令行进行的,选择“否”并按[回车键]。
-
当询问你是否想要浏览应用程序时,选择“否”并按[回车键]。
-
下一个对话框会询问你是否想要添加一个用户账户。选择“是”并按[回车键]。从菜单中选择“用户”并按[回车键]。现在光标应该位于下一个屏幕中的登录 ID 字段。输入你选择的用户名(这将是你用来管理系统账户的用户名),然后按[Tab 键]直到光标位于密码字段,并为此账户输入一个密码(最好是数字和字母的组合,避免可猜测的单词),然后按[Tab 键]直到光标位于全名字段,并输入你的全名。现在再次按[Tab 键]到标记为“成员组”的字段,并输入单词
**wheel**以允许用户使用su命令成为 root/administrator(有关详细信息,请参阅"su")。按[Tab 键]到“确定”并按[回车键]。 -
您将返回到用户/组管理菜单。选择退出并按[enter]键。将弹出一个通知,告诉您设置系统管理员(即 root)的密码。按[enter]键并输入您选择的密码。(请使用强密码,最好是数字和字母的组合,避免可猜测的单词。)为验证重新输入您的密码。
-
最后,sysinstall 会询问您是否要设置任何最后选项。选择“否”并按[enter]键。现在您应该处于主菜单。按[tab]键直到退出安装选项高亮,然后按[enter]键。当询问您是否确定时,在从 CD 驱动器中移除 FreeBSD CD 之前选择“是”。系统现在应该会重启。
1.7.1. 登录
系统重启后,将出现登录提示。您可以用 root 身份登录以执行管理任务。当通过 SSH 远程登录时,您需要以普通用户身份登录,然后使用su命令切换用户身份到 root 用户(详情请见"su")。
1.7.2. 默认搜索路径
当您在命令提示符下输入命令时,FreeBSD 会在一系列目录中查找您输入的命令名称,如果找到匹配项,则会运行该程序。这个目录列表被称为默认搜索路径或路径环境变量。
当安装第三方软件时,FreeBSD 搜索此路径的顺序很重要,本书将重点介绍这一点。大多数第三方程序文件都放在/usr/local 的子目录中。/usr/local 目录的默认位置在路径语句的末尾附近。如果一个第三方应用程序的命令与基础 FreeBSD 命令集的命令同名,它将永远不会运行,因为 FreeBSD 命令将首先被找到并始终具有优先权。由于我们将安装第三方应用程序以扩展和/或更新 FreeBSD 的基本系统,因此反转搜索路径的顺序是有益的。让我们使用 Easy Editor 更改 root 用户的默认搜索路径顺序:
# cd /root
# ee .cshrc
我们将注释掉(禁用)默认的 set path 语句,并输入我们自己的自定义语句。向下滚动到set path声明(约第 17 行),在其前面加上井号(#)以禁用它,然后添加下面的替代路径,以便即使第三方程序与本地 FreeBSD 命令同名,它们也能运行。set path语句现在应如下所示:
#set path = (/sbin /bin /usr/sbin /usr/bin /usr/games
/usr/local/sbin /usr/local/bin /usr/X11R6/bin)
set path = (/usr/local/sbin /usr/local/bin /usr/sbin
/usr/bin /sbin /bin $HOME/bin)
注意: 文本已换行,但每个*set path*语句应仅占用.cshrc 文件中的一行。
保存、退出、注销和登录。您可以使用此命令显示当前搜索路径:
# echo $path
默认情况下,非 root 用户使用 sh shell(界面),而 root 默认使用 tcsh shell。非 root 用户的默认搜索路径可以以相同的方式修改。sh shell 将此设置存储在每个用户家目录的.profile 文件中。
1.7.3. 限制 SSH 访问
默认情况下,所有用户(除了 root 账户)都有远程 SSH 访问。要限制 SSH 访问到特定用户,请将AllowUsers *username*添加到/etc/ssh/sshd_config文件中,多个用户之间用空格分隔。只有出现在此行上的用户才能进行远程 SSH 访问。
要这样做,请使用 Easy Editor 打开 sshd_config:
# ee /etc/ssh/sshd_config
添加以下行(用斜体中的用户名替换您的用户名):
AllowUsers *curly larry moe*
保存并退出(按[esc]键进入 Easy Editor 的主菜单)。为了使上述设置生效,您需要重新启动(见下文)或使用以下命令重新启动 ssh 守护进程:
# /usr/rc.d/sshd restart
1.7.4. 关闭系统
关闭系统时,使用shutdown命令安全地将文件系统缓存刷新到磁盘,并允许进程正确终止。如果您的系统 BIOS 支持 ACPI(高级配置和电源接口),则会移除电源。以 root 身份登录,然后输入:
# shutdown -p now
1.7.5. 重新启动
要重新启动系统,您可以使用以下所示的reboot命令(您需要以 root 身份登录)。
# reboot
1.8. 配置静态 IP
服务器拥有静态 IP 或永久地址对于服务器来说非常重要,这与一个人需要电话号码的原因大致相同:它允许呼叫者或客户端找到接收者。FreeBSD 使用名为 rc.conf 的文件在系统启动时确定系统的 IP 地址以及其他设置。在本节中,我们将自定义 rc.conf 文件以反映服务器预期的配置。
rc.conf 文件包含计算机的主机名、网络接口卡和启动时启动的服务配置设置。确保此文件中的设置正确;这里的错误可能会妨碍系统的功能。
注意:以下讨论假设您正在构建 FreeBSD 系统以作为互联网服务器运行。如果不是这种情况,那么在安装过程中选择的选项应该足够,您可以跳过本节。
我们将涵盖配置静态 IP 地址的两个场景:
-
位于 NAT(网络地址转换)路由器后的服务器
-
直接连接到互联网的服务器
1.8.1. A. 位于 NAT 路由器后的 FreeBSD 服务器
小型办公室或家庭网络通常有一个需要由多台计算机共享的互联网连接。NAT 路由器允许在本地(私有)网络内共享单个互联网连接。路由器作为防火墙,通过允许所有流量出去,但只允许已知或请求的流量进入,在私有网络中创建一个受保护的区域。
端口转发
大多数 NAT 路由器提供端口转发功能,该功能将路由器接收到的流量转发到私有网络内具有静态 IP 地址的计算机。例如,如果您正在托管一个 Web 服务器,您需要将 TCP 端口 80(HTTP 的 IANA 标准)转发到您的 FreeBSD 服务器的 IP 地址。(有关端口转发的详细信息,请参阅路由器的文档。)
大多数支持端口转发的 NAT 路由器都内置了 DHCP 服务器,为私有网络中的计算机分配一个动态 IP 地址,这个地址可能会在计算机每次登录网络时改变。
当机器只需要连接到网络并获得第一个可用的 IP 地址时,DHCP 会起作用,但如果您想将您的 FreeBSD 系统用作服务器,它对您就没有帮助了。您需要一个静态(永久)IP 地址,以便信息能够到达您的服务器。
修改 rc.conf 以指定静态 IP 地址
要指定服务器的静态 IP 地址,您需要修改 rc.conf。但首先,您需要告诉 DHCP 服务器分配一个不与服务器 IP 地址冲突的 IP 地址范围。
您的路由器的 DHCP 选项应该允许您设置起始 IP 地址(有关详细信息,请参阅路由器的文档)。在这个例子中,我们将使用 192.168.1.12 作为可以分配给机器的地址范围的起始地址,知道数字是从这个地址分配的(.13、.14、.15 等等)。我们将分配 192.168.1.11 作为服务器的静态 IP 地址,因为它不在 DHCP 服务器的范围内。
现在让我们在 rc.conf 中设置它。打开 rc.conf:
# ee /etc/rc.conf
您应该在您的 rc.conf 文件中看到以下内容(约 7)。如果设置时指定了 FQDN,则应在此处;*xl0* 可能不同。
hostname="*host.example.com*"
ifconfig_*xl0*="DHCP"
注意: 如果您尚未设置主机名,请务必正确设置。主机名应该是您系统的完全合格域名;host 是机器的名称,example.com 是您注册的域名。
如下所示,在 defaultrouter 语句中插入您的路由器的 IP 地址(约 7)。使用我们上面的示例场景,hostname、ifconfig 和 defaultrouter 语句现在应该看起来像这样:
hostname="*host.example.com*"
ifconfig_xl0="inet 192.168.1.11 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
注意,我们已经将 "DHCP" 替换为我们的静态 IP 地址,并添加了子网掩码地址(255.255.255.0 是大多数配置中的默认子网掩码地址)。
我们还添加了一条 defaultrouter 行,该行指向 NAT 路由器的 IP 地址。此地址 192.168.1.1 将是您在网页浏览器中输入以访问路由器网页配置的 IP 地址;这也被称为默认网关。
现在保存并退出。(跳转到 "动态 DNS"。)
1.8.2. B. 直接连接到互联网的 FreeBSD 服务器
如果您的 FreeBSD 系统直接连接到电缆或 DSL 调制解调器,并且在上述配置步骤 4 中正确输入了您的 FQDN,则不需要进一步配置。然而,如果您在 DHCP 配置过程中没有输入主机名,那么您将需要编辑 /etc/rc.conf 以包含您的 FQDN。
使用 Easy Editor 打开 rc.conf:
# ee /etc/rc.conf
rc.conf (约 7)应如下所示(将 host.example.com 替换为您的 FQDN):
hostname="*host.example.com*"
1.8.3. 动态 DNS
动态 DNS 是由第三方公司提供的一项服务,用于跟踪计算机的公共 IP 地址。如果由于任何原因 IP 地址发生变化,这些提供商会自动更新与域名关联的 IP 地址。大多数互联网服务提供商使用 DHCP 服务器动态地为他们的客户分配公共 IP 地址。除非您支付静态 IP 地址的费用,否则这个动态分配的地址可能会不时地发生变化。
当您注册域名时,如果您希望托管自己的服务,可以指定服务器的目标 IP 地址。许多人错误地认为他们的当前动态 IP 地址将无限期地属于他们。当您的动态 IP 地址发生变化(这可能会频繁发生或每几个月发生一次)时,您似乎“从互联网上消失”,因为您的域名注册商的记录指向的旧 IP 地址已不再有效。然后您必须回到您的域名注册商那里,通知他们您的新 IP 地址以恢复您的互联网存在(这通常通过基于 Web 的控制面板完成)。
这就是动态 DNS 服务提供商变得有用的地方。这些第三方公司允许您通过在服务器上使用客户端程序来检测 IP 地址的变化,从而保持您的 IP 地址更新。当 IP 地址发生变化时,客户端程序会自动联系动态 DNS 服务以更新您的 DNS 记录,这样您就可以保持“在线”。当使用这些服务时,您需要将您的域名注册商指向动态 DNS 服务的服务器,然后这些服务器指向您更新的 IP 地址。大多数动态 DNS 提供商对其服务收费,尽管有一些是免费的,例如 ZoneEdit (zoneedit.com)。通过结合动态 DNS 服务提供商和像 ddclient 这样的动态 DNS 更新客户端,您可以提供一个类似于静态 IP 的互联网存在。有关 ddclient 的信息,请参阅"ddclient 3.7.3"。
1.9. 主机文件和 resolv.conf
主机文件和 resolv.conf 文件用于控制 FreeBSD 如何执行 DNS 查找。DNS 查找就像打电话给电话接线员:您给接线员一个名字,她给您一个电话号码作为回报。例如,如果请求一个像www.google.com这样的网页,FreeBSD(默认情况下)首先咨询主机文件(/etc/hosts),然后是 resolv.conf 中指定的 DNS 服务器,以便将www.google.com转换为像 66.102.7.99 这样的 IP 地址。
让我们更详细地看看这些文件,并了解如何设置它们。
1.9.1. hosts
主机文件将主机名解析(转换)为 IP 地址。至少,主机文件应该修改以反映您系统的域名和主机名。
在文本编辑器中打开主机文件:
# ee /etc/hosts
您的主机文件(~14)应如下所示(将example.com替换为您的域名,host.example.com替换为您的主机名,以及*192.168.1.11*替换为您的 IP 地址):
::1 localhost localhost.*example.com*
127.0.0.1 localhost localhost.*example.com*
*192.168.1.11* *host.example.com*
保存并退出。
此文件中的设置仅影响本地系统。主机文件为守护进程和其他系统进程提供基本的域名解析。如果您需要提供 DNS 服务,您需要使用 DNS 服务器。(有关更多信息,请参阅“ISC BIND DNS 服务器 9.4.2”)
1.9.2. resolv.conf
resolv.conf 文件包含系统在尝试解析不在主机文件中找到 IP 地址的主机名时将查询的 DNS 服务器的 IP 地址。如果您在初始 FreeBSD 安装过程中选择 DHCP 来配置网络适配器,则这些地址将自动设置。要手动设置此文件,请打开它:
# ee /etc/resolv.conf
resolv.conf 文件应如下所示,其中example.com是您的域名,*206.12.29.11*是 DNS 服务器的 IP 地址,*192.168.1.11*是备份 DNS 服务器的 IP 地址(这两个 IP 地址均由您的 ISP 提供):
domain *example.com*
nameserver *206.12.29.11*
nameserver *192.168.1.11*
1.10. 配置文件
以下是一些对基本 FreeBSD 管理重要的常用 FreeBSD 配置文件:
/etc/rc.conf
包含大多数守护进程的常见配置和启动选项,这些守护进程是在后台运行的程序,用于提供服务,例如 Web 服务器(Apache)或邮件服务器(Postfix)。
/etc/resolv.conf
解析器配置文件。此文件包含解析主机名到 IP 地址时将查询的 DNS 服务器。
/etc/hosts
系统的主机名到 IP 地址表。此文件包含手动输入的主机名及其关联的 IP 地址。FreeBSD 在查询 resolv.conf 文件中列出的 DNS 服务器之前会查看此文件。
以下两个目录包含在启动时自动执行的启动脚本。这些脚本旨在根据 rc.conf 文件中的指令确定是否启动服务。例如,/etc/rc.d/sshd 脚本将在 rc.conf 中查找SSHD_ENABLE="YES"。如果存在启用行,rc将启动指定的服务;否则不会。
/etc/rc.d
此目录包含在启动时执行的系统启动脚本。
/usr/local/etc/rc.d
此目录包含在启动时执行的第三方启动脚本。
1.11. 注意事项
-
如果您不熟悉 Unix 命令,在尝试继续本指南之前,请务必查阅附录 A。这将为您节省大量时间和精力。附录 B 包含有关备份和恢复的详细信息,这对于任何服务器设置都非常重要。附录 D 包含有关本书中提到的协议和术语的详细信息。
-
监控 FreeBSD 安全公告对于获取已知安全问题的最新信息非常重要。安全公告是详细说明 FreeBSD 操作系统安全问题的文档。若想通过电子邮件接收 FreeBSD 安全公告,请访问
lists.freebsd.org/mailman/listinfo/freebsd-security-notifications。
此外,请检查 FreeBSD 的安全页面:www.freebsd.org/security。
如果安全问题需要软件更新,您可以使用 freebsd-update 命令来更新系统,而不是手动编译源代码。
注意: 这适用于本书中提到的 FreeBSD 的二进制安装。有关 *freebsd-update* 的更多信息,请访问 www.daemonology.net/freebsd-update。在更新之前备份系统是明智之举。
# freebsd-update fetch
# freebsd-update install
# reboot
重启后,使用以下命令显示版本级别:
# uname -r
版本级别应与安全公告中提到的版本级别相匹配或更高。
- 有关端口集合的更多信息,请参阅 "FreeBSD 端口集合"。
第二章. FREEBSD 端口集合
FreeBSD 端口
2.1. 概述
正如你在 "FreeBSD 7.0" 中所学,端口集合为在 FreeBSD 上安装软件提供了一种简单且集中的方式。它由分类的目录组成,包含由 make 命令使用的 makefile,这些 makefile 用于将源代码编译成可执行程序或库。端口集合旨在自动化且相对易于使用。
端口由指定的端口管理员维护,他们负责确保每个端口与原始软件作者提供的最新版本保持一致。
从端口安装软件是从其源代码构建程序;如果系统上没有源代码,它将从 makefile 中指定的站点下载。系统会验证下载的源代码内容,通常使用 MD5(消息摘要算法 5)散列来确保其真实性。MD5 散列是一个 32 位的字母数字字符串,类似于文件的指纹。一个典型的 MD5 散列可能看起来像这样:e6c75c12f663a484ee3157ab058cfc9e。
一旦确保了源代码的真实性,make 程序会检查 makefile 以查看端口是否需要其他软件。如果需要,FreeBSD 也会安装这些依赖项。接下来,在编译和安装之前,根据需要应用补丁到源代码上。
一旦所有过程都已完成,该端口就被视为一个 FreeBSD 软件包,并记录在已安装软件包数据库 pkgdb.db 中,该数据库存储在 /var/db/pkg 目录下。有关 FreeBSD 软件包系统的信息可以在 www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-overview.html 找到。
第二章. FREEBSD 端口集合
HTTP://WWW.FREEBSD.ORG/PORTS
2.1. 摘要
正如你在"FreeBSD 7.0"中学到的,端口集合为在 FreeBSD 上安装软件提供了一种简单且集中的方式。它由分类的目录组成,包含由 make 命令使用的 makefile,用于将源代码编译成可执行程序或库。端口集合旨在自动化且相对易于使用。
端口由指定的端口管理员维护,他们负责确保每个端口与原始软件作者的最新版本保持一致。
从端口安装软件是从源代码构建程序;如果系统上还没有源代码,它将从 makefile 中指定的站点下载。系统会验证下载的源代码内容,通常使用 MD5(消息摘要算法 5)哈希来确保其真实性。MD5 哈希是一个 32 字符的字母数字字符串,类似于文件的指纹。一个典型的 MD5 哈希可能看起来像这样:e6c75c12f663a484ee3157ab058cfc9e。
一旦确保了源代码的真实性,make 程序会检查 makefile 以查看端口是否需要其他软件。如果需要,FreeBSD 也会安装这些依赖项。接下来,在编译和安装之前,根据需要应用补丁到源代码中。
一旦所有进程都完成,该端口就被视为一个 FreeBSD 软件包,并记录在安装的软件包数据库 pkgdb.db 中,该数据库存储在/var/db/pkg 目录下。有关 FreeBSD 软件包系统的信息可以在www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-overview.html找到。
2.2. 资源
使用端口集合(FreeBSD 手册)
www.freebsd.org/doc/en/books/handbook/ports-using.html
搜索 FreeBSD 端口集合
portmaster
2.3. 需要的
FreeBSD 7.0-RELEASE (参见 "FreeBSD 7.0")
FreeBSD 7.0-RELEASE 安装 CD1
互联网连接(如果你想使用端口集合安装应用程序,则需要在线)
2.4. 准备
成为超级用户。
2.5. 安装
如果您在安装 FreeBSD 时安装了 ports 集合(如前一章所述),请跳转到下面的“配置”部分。否则,将 FreeBSD CD 放入 CD 驱动器,然后输入以下命令来挂载 FreeBSD CD,切换到正确的当前工作目录,并将 ports 集合安装到/usr/ports 目录。
# mount /cdrom
# cd /cdrom/7.0-RELEASE/ports
# ./install.sh
2.6. 配置
保持 ports 集合更新,确保通过 ports 系统安装的应用程序是最新版本。要更新 ports 集合:
-
修改 ports-supfile 文件。指定通过
csup下载更新时需要联系的服务器,然后将此配置文件复制到/root 目录,以便以后容易找到。要将示例 ports-supfile 复制到/root 目录,请输入:# cp /usr/share/examples/cvsup/ports-supfile /root -
在编辑 ports-supfile 之前,选择一个合适的更新服务器。FreeBSD 维护着名为cvsup2.freebsd.org、cvsup3.freebsd.org等的服务器。要获取全球 CVSup 服务器的完整列表,请访问
www.freebsd.org/doc/en/books/handbook/cvsup.html。使用以下命令 ping 几个服务器,以找到相对较快的那个。
# ping -c 5 cvsup2.freebsd.org PING cvsup2.us.freebsd.org (130.94.149.166): 56 data bytes 64 bytes from 130.94.149.166: icmp_seq=0 ttl=48 time=85.607 ms上一个命令最后一行最右侧的列(
time=85.607 ms)显示每个数据包到达服务器并返回所需的时间。数字越低越好。对几个服务器重复此操作,并选择时间最短的那个。 -
打开 ports-supfile 文件,并添加您已选择的服务器名称。向下滚动到
*default host声明中的CHANGE_THIS,并将其替换为您选择的服务器名称。以下命令在 Easy Editor 中打开 ports-supfile:# ee /root/ports-supfile*default host声明应出现在/root/ports-supfile 的第 49 行附近:*default host=*cvsup4*.FreeBSD.org将
*cvsup4*替换为您之前选择的服务器,然后保存并退出。 -
要更新 ports 集合,请使用此命令:
# csup -g -L 2 /root/ports-supfile -
在继续之前,我们将从 ports 集合中安装 Perl 编程语言,以便我们可以创建 ports 索引文件。要开始安装,请输入以下命令:
# cd /usr/ports/lang/perl5.8 # make install clean # rehash -
安装 Perl 后,使用以下命令更新 ports 索引和 README 文件:
# cd /usr/ports # make readmes && make index
这可能需要超过半小时才能完成,具体取决于您系统的速度。
您可以使用以下命令搜索 ports 集合:
# cd /usr/ports
# make search name=portname
将*portname*替换为您想要查找的应用程序名称。此命令的输出将提供端口号、路径、描述和依赖关系等信息。您还可以通过访问www.freebsd.org/ports/或www.freshports.org在互联网上搜索端口。
如果您已安装了像 Lynx 这样的网页浏览器(参见 "Lynx 2.8.6"),您可以通过 HTML 界面浏览端口集合。以下命令将使用 Lynx 打开此文件。
# lynx /usr/ports/README.html
2.6.1. portmaster
portmaster 工具允许您在不破坏依赖关系或与其他程序的链接的情况下,将大多数已安装的端口升级到端口集合中当前可用的版本。例如,Apache HTTP 服务器依赖于端口 eXpat 以支持 XML(可扩展标记语言)。手动升级到 eXpat 的最新版本涉及移除之前的安装并重新安装。这样做将会破坏 Apache HTTP 服务器的安装,因为其与 eXpat 的链接已丢失。portmaster 将允许您在不更改此依赖关系或与 Apache HTTP 服务器的链接的情况下移除并重新安装 eXpat。
要从端口集合中安装 portmaster,请输入以下命令:
# cd /usr/ports/ports-mgmt/portmaster
# make install clean
# rehash
注意: 在执行任何软件安装或升级之前,请备份您的系统。升级已安装的端口可能会破坏某些内容,而拥有一个全新的备份将允许您相对轻松地回滚。(有关备份和恢复的信息,请参阅 附录 B)
使用此命令可以显示具有在端口树中可用的新版本的已安装端口的列表:
# portmaster -L | grep -B1 "New version"
===>>> expat-1.95.8
===>>> New version available: expat-2.0.0
在升级端口之前阅读 /usr/ports/UPDATING 是一个好主意。此文本文件包含在升级某些端口时已知的问题。
要升级特定的端口(例如 eXpat),请运行以下所示的 portmaster 命令:
# portmaster -b expat-1.95.8
注意: 您必须指定如上斜体所示的老端口名称。
默认情况下,portmaster 在升级指定端口之前会提示您。输入 Y 并按 [enter] 键开始升级。一旦 portmaster 完成操作,您应该安装了 eXpat 的当前版本,而不会影响 Apache HTTP 安装。
上面的 -b 开关告诉 portmaster 在 /root 目录中保留旧端口的备份。如果需要回滚到旧版本的端口,这可能很有用。例如,如果安装的新版本的 eXpat 是 2.0.0,我们可以使用以下命令回滚到旧版本:
# pkg_delete -f expat-2.0.0
# pkg_add /root/expat-1.95.8.tbz
注意: 端口集合不断更新并频繁变化。尝试保持已安装端口的更新可能具有挑战性。您应在必要时(例如,进行安全更新;参见下文的 "端口审计" 部分)使用 portmaster,因为当运行程序的最新版本与期望旧版本以实现功能相关的软件一起使用时,可能会出现不兼容性。为了最小化这种影响,可以使用带有 -r 开关的 portmaster 命令,该开关将升级指定的端口及其依赖的任何端口。应谨慎使用此开关,因为它可能会影响除升级端口之外的更多内容。
2.6.2. 端口审计
portaudit 工具允许您将已安装的端口与已发布的漏洞数据库进行比对。此数据库由 FreeBSD 端口管理员和 FreeBSD 安全团队维护。如果已安装的端口存在安全公告,将提供指向安全公告的网页链接以获取更多信息。
要安装 portaudit,请输入:
# cd /usr/ports/ports-mgmt/portaudit
# make install clean
# rehash
要检查已安装端口与当前 portaudit 数据库的匹配情况,请输入:
# portaudit -Fda
注意: 在构建端口时,make 将检查漏洞数据库以确保您正在安装的端口没有已知的安全漏洞。如果有,端口将不会安装,并提供对漏洞(或漏洞)的引用。如果您确定端口安装不会对您的系统造成安全风险,您可以通过暂时禁用漏洞检查来允许受影响的端口安装。要在运行 make 时禁用漏洞检查:
# make -D DISABLE_VULNERABILITIES install clean
2.7. 工具
一旦端口成功安装,它将被注册在位于 /var/db/pkg 的软件包数据库中。软件包是由软件应用程序安装的一组文件。安装后的端口被视为软件包,应按此类进行管理。以下实用程序用于管理已安装的软件包。
2.7.1. pkg_info
此实用程序用于显示系统上安装的软件包信息。
命令
pkg_info
语法
pkg_info *-option pkgname*
选项
-a
显示所有已安装软件包
-r
显示依赖软件包的列表
示例
要以两列格式显示所有已安装软件包的列表,请执行以下命令:
# pkg_info
要显示名为 perl-5.8.8 的软件包的依赖项,请执行以下命令:
# pkg_info -r perl-5.8.8
要列出所有已安装软件包的依赖项,请输入:
# pkg_info -a -r
注意: *pkg_info* 的输出可能跨越多页。因此,在处理长文件列表时,使用文本显示实用程序如 *less* 可能是明智的。*less* 命令允许您逐页查看长文档。有关详细信息,请参阅 "less"。
2.7.2. pkg_delete
此实用程序用于删除已安装的软件包或端口。
命令
pkg_delete
语法
pkg_delete *-option pkgname*
选项
-f
强制删除已安装的软件包,即使它包含依赖项
-r
递归删除;删除指定的软件包及其依赖项
示例
要删除名为 perl-5.8.8 的软件包,请输入:
# pkg_delete perl-5.8.8
要强制删除包含依赖项的名为 perl-5.8.8 的软件包,请输入:
# pkg_delete -f perl-5.8.8
要删除名为 perl-5.8.8 的软件包及其依赖项,请输入:
# pkg_delete -r perl-5.8.8
2.8. CONFIG 文件
2.8.1. ports-supfile
可选 CVSup 系统的配置文件。您可以在 /usr/share/examples/cvsup 中找到示例。
2.9. 备注
在您通过 ports 系统安装应用程序之前,请对系统进行完整备份。这是一个好习惯,以防安装没有按照您预期的进行。(有关备份程序的详细信息,请参阅附录 B。)
第二部分:第三方应用
第三章. APACHE HTTP SERVER 2.2.8
HTTP://HTTPD.APACHE.ORG
3.1. 摘要
Apache HTTP 服务器是一个开源的 Web 服务器应用程序,被认为是效率最高、可扩展性最强、功能最丰富的 Web 服务器之一。Apache 还可以高度定制,有众多第三方模块可供扩展其功能。您会发现添加对 HTTP(超文本传输协议)上 SSL(安全套接字层)加密、PHP 支持(PHP 是一种服务器端脚本语言)以及用于密码保护网站或页面的身份验证支持的模块。
Apache 诞生于 1993 年的 NCSA(国家超级计算应用中心),当时 Rob McCool 开发了一个公共领域的 HTTP 守护进程(后台进程),后来成为 Apache 项目的基石。Apache 1.3 版本仍然包含来自原始 NCSA 开发的 HTTP 守护进程的代码,而版本 2 是从头开始重写的,不包含任何 NCSA 代码。
Apache HTTP 服务器安装在世界上近 53%的 Web 服务器上。微软的 Internet Information Server 位居第二,服务器市场份额超过 32%。^([])
^([]) Netcraft Ltd., "Netcraft: July 2007 Web Server Survey,"
news.netcraft.com/archives/2007/07/09/july_2007_web_server_survey.html
这里记录的 FreeBSD 端口 Apache HTTP 服务器支持使用mod_ssl模块在 HTTP 上使用 SSL。该模块由 Ralf S. Engelschall 于 1998 年创建;它基于 Ben Laurie 开发的软件。
第二部分:第三方应用
第三章. APACHE HTTP SERVER 2.2.8
HTTP://HTTPD.APACHE.ORG
3.1. 摘要
Apache HTTP Server 是一个开源的 Web 服务器应用程序,被认为是效率最高、可扩展性最强、功能最丰富的 Web 服务器之一。Apache 还具有高度的可定制性,有众多第三方模块可供扩展其功能。您会发现一些模块增加了对通过 HTTP(超文本传输协议)的 SSL(安全套接字层)加密的支持,PHP 支持(PHP 是一种服务器端脚本语言),以及用于密码保护网站或页面的身份验证支持。
Apache 诞生于 1993 年的 NCSA(国家超级计算应用中心),当时 Rob McCool 开发了一个公共领域的 HTTP 守护进程(后台进程),后来成为 Apache 项目的基石。Apache 1.3 版本仍然包含来自原始 NCSA 开发的 HTTP 守护进程的代码,而版本 2 是从头开始重写的,不包含 NCSA 的代码。
Apache HTTP Server 安装在全球大约 53% 的 Web 服务器上。微软的 Internet Information Server 位居第二,市场份额超过 32%。^([])
^([]) Netcraft Ltd., "Netcraft: July 2007 Web Server Survey,"
news.netcraft.com/archives/2007/07/09/july_2007_web_server_survey.html
这里记录的 Apache HTTP 服务器在 FreeBSD 上的版本包括使用 mod_ssl 模块通过 HTTP 使用 SSL 的支持。该模块由 Ralf S. Engelschall 在 1998 年创建;它基于 Ben Laurie 开发的软件。
第二部分:第三方应用
第三章. APACHE HTTP SERVER 2.2.8
HTTP://HTTPD.APACHE.ORG
3.1. 摘要
Apache HTTP Server 是一个开源的 Web 服务器应用程序,被认为是效率最高、可扩展性最强、功能最丰富的 Web 服务器之一。Apache 还高度可定制,有众多第三方模块可供扩展其功能。您会发现一些模块增加了对 HTTP(超文本传输协议)上 SSL(安全套接字层)加密的支持、PHP 支持(PHP 是一种服务器端脚本语言),以及用于密码保护网站或页面的身份验证支持。
Apache 诞生于 1993 年的 NCSA(国家超级计算应用中心),当时 Rob McCool 开发了一个公共领域的 HTTP 守护进程(后台进程),这个进程后来成为了 Apache 项目的基石。Apache 1.3 版本仍然包含来自原始 NCSA 开发的 HTTP 守护进程的代码,而版本 2 则是从头开始重写的,不包含任何 NCSA 代码。
Apache HTTP Server 几乎安装在世界上 53%的 Web 服务器上。微软的 Internet Information Server 位居第二,服务器市场份额超过 32%。^([])
^([]) Netcraft Ltd.,“Netcraft: July 2007 Web Server Survey,”
news.netcraft.com/archives/2007/07/09/july_2007_web_server_survey.html
这里记录的 FreeBSD 版本的 Apache HTTP 服务器支持使用mod_ssl模块在 HTTP 上使用 SSL。该模块由 Ralf S. Engelschall 于 1998 年创建;它基于 Ben Laurie 开发的软件。
3.2. 资源
官方 Apache HTTP Server 在线文档
RFC 2616 - 超文本传输协议 - HTTP/1.1
3.3. 必需的
FreeBSD 7.0-RELEASE(见“FreeBSD 7.0”)
更新的端口集合(见“FreeBSD 端口集合”)
互联网连接
3.4. 可选
OpenSSL 与已签名的 SSL 证书(如果您想启用安全的 HTTP 连接;见“OpenSSL 0.9.8g”)
注册的域名
3.5. 准备
成为超级用户,然后确保您的服务器的主机名可以在本地解析。如果您运行自己的 DNS 服务器并且已正确配置,这应该已经是这种情况了。
如果您没有运行自己的 DNS 服务器,请确保您在 /etc/hosts 文件中有一个指向您服务器 IP 地址的条目;这将确保您的服务器主机名可以在本地解析。为此,请使用文本编辑器打开 hosts 文件:
# ee /etc/hosts
您应该在 /etc/hosts 文件的第 14 行附近找到类似以下内容;将 example.com 替换为您的域名,host.example.com 替换为您的服务器主机名,并将 *192.168.1.11* 替换为您的服务器的本地 IP 地址:
::1 localhost localhost.*example.com*
127.0.0.1 localhost localhost.*example.com*
*192.168.1.11 host.example.com*
3.6. 安装
要开始 Apache 安装过程,请输入以下命令:
# cd /usr/ports/www/apache22
# make config ; make install clean
# rehash
应该会弹出一个菜单,显示 Apache 的选项。我们将保留默认设置,因此按 [tab] 键高亮显示“确定”,然后按 [enter] 键。
3.7. 配置
安装过程完成后,是时候为您的系统配置 Apache 了。
-
打开位于 /usr/local/etc/apache22 的 httpd.conf 文件:
# ee /usr/local/etc/apache22/httpd.conf -
我们将编辑 httpd.conf 中的几个条目,以便让 HTTP 守护进程启动并运行。为此,滚动到
ServerAdmin声明 (~138) 并将 you@example.com 替换为将维护服务器的人员的电子邮件地址。该行应如下所示:ServerAdmin *you@example.com* -
滚动到
ServerName声明 (~147),取消注释(移除前面的井号),并将 host.example.com:80 替换为您的服务器的主机名。现在该行应如下所示:ServerName *host.example.com*:80
注意: 如果您不想在 HTTP 上设置 SSL,请保存、退出,然后继续到 "测试"。
-
要启用 SSL 支持,取消注释 Secure (SSL/TLS) 连接声明 (~449)(移除井号)。现在该行应如下所示:
Include etc/apache22/extra/httpd-ssl.conf -
保存、退出,并打开 Apache 的 SSL 配置文件:
# ee /usr/local/etc/apache22/extra/httpd-ssl.conf -
滚动到
ServerName和ServerAdmin声明 (~78) 并将 host.example.com 替换为您的服务器的主机名。将 you@example.com 替换为将维护服务器的人员的电子邮件地址。这两行现在应如下所示:ServerName *host.example.com*:443 ServerAdmin *you@example.com* -
前往
SSLCertificateFile声明 (~99) 并输入您服务器 SSL 证书的路径和文件名。现在该行应如下所示(将斜体中的路径和文件名替换为您的 SSL 证书的路径和文件名):SSLCertificateFile */usr/local/openssl/certs/host.example.com-cert.pem* -
前往
SSLCertificateKeyFile声明 (~107) 并输入您服务器私钥的路径和文件名。现在该行应如下所示(将斜体中的路径和文件名替换为您的私钥的路径和文件名):代码视图:
SSLCertificateKeyFile */usr/local/openssl/certs/host.example.com-unencrypted-key.pem*
注意: 强烈建议您在此处指定未加密的密钥文件。加密的密钥文件会导致 Apache 提示输入密码,这可能会干扰其他关键服务的启动。有关解密密钥文件的详细信息,请参阅 "OpenSSL 0.9.8g"。
-
保存并退出。
3.8. 测试
在本节中,我们将执行一些基本测试以确认 Apache 能够正确响应 HTTP 请求。
-
Apache 包含一个名为 apachectl 的实用程序,可以测试您的配置文件是否存在语法错误。让我们运行此程序来检查语法错误:
# apachectl configtest如果 apachectl 返回
Syntax OK,请继续以下步骤。如果 apachectl 发现问题,它将列出文件名、行号和错误的可能原因。在继续以下步骤之前,请确保解决任何问题。 -
我们将配置 Apache 在启动时自动启动。为此,打开位于
/etc的 rc.conf 文件:# ee /etc/rc.conf然后在
/etc/rc.conf中添加以下行:apache22_enable="YES" apache22_http_accept_enable="YES"使用以下命令保存、退出并启动 Apache:
# /usr/local/etc/rc.d/apache22 start -
您可以选择通过标准网络浏览器进行测试,但下面的说明将通过命令行进行测试。输入以下命令直接连接到监听端口 80 的 HTTP 服务:
# telnet localhost 80 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'.以下
GET命令是区分大小写的。请确保按两次[Enter]键,并在第一个斜杠前后输入一个空格:代码视图:
GET / HTTP/1.0 HTTP/1.1 200 OK Date: Sat, 01 Mar 2008 02:00:30 GMT Server: Apache/2.2.8 (FreeBSD) mod_ssl/2.2.8 OpenSSL/0.9.8g DAV/2 Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT ETag: "cf597-2c-4c23b600" Accept-Ranges: bytes Content-Length: 44 Connection: close Content-Type: text/html <html><body><h1>It works!</h1></body></html>Connection closed by foreign host.如果您在输出的最后一行看到
It works!文本,那么 Apache 确实工作正常! -
如果您已配置 Apache SSL 支持,请输入以下命令通过 SSL 连接到 HTTP 服务器:
# openssl s_client -connect localhost:443GET命令是区分大小写的;按两次[Enter]键:GET / HTTP/1.0输出应该与您通过未加密连接收到的输出相同。
3.9. 工具
以下是对应用于在 FreeBSD 上控制 Apache 守护进程的 apache22 脚本的简要信息。
3.9.1. apache22
此脚本用于控制 HTTP 守护进程。
命令
/usr/local/etc/rc.d/apache22
语法
/usr/local/etc/rc.d/apache22 *选项*
选项
start
启动 Apache HTTP 服务器
stop
停止 Apache 服务器
configtest
解析配置文件以查找语法错误
restart
重启 Apache 服务器
示例
要启动 HTTP 守护进程,请在提示符下输入以下命令:
# /usr/local/etc/rc.d/apache22 start
注意: /etc/rc.conf中必须存在apache22_enable="YES",以便此脚本能够正常工作。
3.10. 配置文件
/usr/local/etc/apache22/httpd.conf
Apache HTTP 服务器的主要配置文件
/usr/local/etc/apache22/extra/httpd-ssl.conf
Apache HTTP 服务器的 SSL 配置文件
3.11. 日志文件
/var/log/httpd-access.log
包含 IP 地址、时间和 HTTP 服务器上的活动日志
/var/log/httpd-error.log
包含由 HTTP 服务器产生的错误消息日志
/var/log/httpd-ssl_request.log
包含 HTTPS 服务器上的 IP 地址、时间和活动日志
3.12. 备注
-
HTTP 服务器使用默认端口 80 进行非安全通信。启用 SSL 的 HTTP 服务器使用默认端口 443 进行安全通信。如果您位于 NAT 路由器后面,请确保将这些端口转发到您的服务器。(有关端口转发的详细信息,请参阅路由器文档。)
-
HTTP 服务器的默认根目录是/usr/local/www/apache22/data。除非你在 httpd.conf 中更改文档根目录,否则网页内容必须放置在此处。
第四章. COURIER - AUTHLIB 0.60.2
HTTP://WWW.COURIER-MTA.ORG/AUTHLIB
4.1. 摘要
Courier-authlib(Courier 身份验证库)为 Courier-IMAP 服务器提供身份验证功能(参见“Courier-IMAP 服务器 4.3.0”页面 43)。此软件包使得 Courier-IMAP 能够对位于 /etc/master.passwd 的系统密码文件进行用户身份验证。主密码文件存储系统中所有用户账户的密码。
Courier-IMAP 服务器包含 IMAP(互联网消息访问协议)和 POP3(邮局协议版本 3)服务器实现,两者都依赖于 Courier-authlib 进行身份验证。用户名和密码信息通过 Courier-authlib 的 authpam 身份验证模块与位于 /etc/master.passwd 的系统密码文件进行比较。然后,Courier-authlib 咨询 FreeBSD 内置的 PAM(可插拔身份验证模块)库进行身份验证。如果身份验证成功,用户将被允许访问 Courier-IMAP 提供的服务。
第四章. COURIER - AUTHLIB 0.60.2
HTTP://WWW.COURIER-MTA.ORG/AUTHLIB
4.1. 摘要
Courier-authlib(Courier 认证库)为 Courier-IMAP 服务器提供认证功能(见“Courier-IMAP 服务器 4.3.0”页面 43)。此软件包使得 Courier-IMAP 能够对位于/etc/master.passwd的系统密码文件进行用户认证。主密码文件存储系统中所有用户账户的密码。
Courier-IMAP 服务器包含 IMAP(互联网消息访问协议)和 POP3(邮局协议第 3 版)服务器实现,并且两者都依赖于 Courier-authlib 进行认证。用户名和密码信息将与位于/etc/master.passwd的系统密码文件进行比较,使用 Courier-authlib 的authpam认证模块。然后 Courier-authlib 将咨询 FreeBSD 内置的 PAM(可插拔认证模块)库进行认证。如果认证成功,用户将被允许访问 Courier-IMAP 提供的服务。
4.2. 资源
Courier 认证库文档
www.courier-mta.org/authlib/documentation.html
4.3. 必需
FreeBSD 7.0-RELEASE(见“FreeBSD 7.0”)
更新的 ports 集合(见“FreeBSD Ports Collection”)
互联网连接
4.4. 准备
成为超级用户。
4.5. 安装
要开始 Courier-authlib 的安装过程,请输入以下命令:
# cd /usr/ports/security/courier-authlib
# make config ; make install clean
# rehash
应该会出现一个菜单,显示 Courier-authlib 的选项。我们不需要这些可选认证模块,所以按[tab]键高亮显示“确定”,然后按[enter]键。
4.6. 配置
安装过程完成后,是时候为您的系统配置认证守护进程了。
我们将仅使用authpam认证方法。
下一步将移除 authdaemonrc 配置文件中列出的多余认证模块,以防止 authdaemond 在 maillog 文件中生成错误。
-
打开 authdaemonrc:
# ee /usr/local/etc/authlib/authdaemonrc -
在
authmodulelist声明中(~27)移除所有认证模块的名称,除了authpam。authmodulelist声明现在应如下所示:authmodulelist="authpam" -
保存并退出。
4.7. 测试
在本节中,我们将进行基本测试以确认 Courier-authlib 启动正常。
-
将 Courier-authlib 配置为在系统启动时自动启动。要加载 Courier-authlib 守护进程在启动时,打开 rc.conf:
# ee /etc/rc.conf并添加以下行:
courier_authdaemond_enable="YES"保存并退出。
-
启动 Courier-authlib 守护进程并验证其是否正在运行:
# /usr/local/etc/rc.d/courier-authdaemond start # /usr/local/etc/rc.d/courier-authdaemond status如果启动成功,第二个命令的输出应读取:
courier_authdaemond is running as pid *12073*.您的进程 ID(PID)将不同。
4.8. 配置文件
/usr/local/etc/authlib/authdaemonrc
包含 authdaemond 的配置信息
4.9. 日志文件
/var/log/maillog
包含来自 authdaemond 信息的电子邮件活动通用日志
第五章.Courier - IMAP 服务器 4.3.0
HTTP://WWW.COURIER-MTA.ORG/IMAP
5.1.摘要
Courier-IMAP 是一个开源的 IMAP(互联网消息访问协议)服务器,它与 MTA(邮件传输代理)如 Postfix 一起工作。Courier-IMAP 提供对 Maildir 邮箱的访问,这是一个首先在 Qmail 中引入的电子邮件存储系统。
Courier-IMAP 还包括一个 POP3(邮局协议第 3 版)服务器,它为 Maildir 邮箱提供 POP3 协议访问。目前,POP3 是最受欢迎的电子邮件检索协议;几乎所有的电子邮件提供商都支持它。一个 POP3 邮件事务包括客户端到服务器的初始化连接,下载消息,从服务器删除这些消息,以及连接终止。这种方法适用于那些经常从同一台电脑访问电子邮件的用户,但对于需要从多种不同的电脑(例如,工作、家庭、互联网咖啡馆等)访问电子邮件的用户来说可能会很麻烦。
IMAP 是由 Mark Crispin 在 1986 年编写的,旨在提供 POP 的替代方案。IMAP 相对于 POP 提供的一些优势包括按需下载消息(只有选定的消息被下载到客户端,而不是整个邮箱),支持多个邮箱(IMAP 用户可以在服务器上的文件夹之间创建和移动消息),以及便携式邮箱访问(IMAP 用户可以在不同的电脑之间移动并完全访问他们的邮件;而 POP 用户则被限制在他们下载电子邮件的机器上)。
Sam Varshavchik 在 1999 年编写了 Courier-IMAP。他这样做是为了为采用 Maildir 格式的 MTA 提供 IMAP 支持;当时还没有这样的解决方案。
第五章. COURIER - IMAP 服务器 4.3.0
HTTP://WWW.COURIER-MTA.ORG/IMAP
5.1. 摘要
Courier-IMAP 是一个开源的 IMAP (互联网消息访问协议) 服务器,与 Postfix 等 MTA (邮件传输代理) 一起工作。Courier-IMAP 提供对 Maildir 邮箱的访问,这是一个在 Qmail 中首次引入的电子邮件存储系统。
Courier-IMAP 还包括一个 POP3 (邮局协议第 3 版) 服务器,它为 Maildir 邮箱提供 POP3 协议访问。POP3 是目前最流行的电子邮件检索协议;几乎所有电子邮件提供商都支持它。一个 POP3 邮件事务包括客户端到服务器的初始化连接,下载消息,从服务器删除这些消息,以及连接终止。这种方法适用于经常从同一台计算机访问电子邮件的用户,但对于需要从不同计算机(例如,工作、家庭、互联网咖啡馆等)访问电子邮件的用户来说可能有些繁琐。
IMAP 由 Mark Crispin 在 1986 年编写,旨在提供 POP 的替代方案。IMAP 相较于 POP 的一些优势包括按需下载消息(仅下载选定的消息到客户端,而不是整个邮箱),支持多个邮箱(IMAP 用户可以在服务器上的文件夹之间创建和移动消息),以及便携式邮箱访问(IMAP 用户可以在不同的计算机之间移动并完全访问他们的邮件;POP 用户仅限于下载邮件的机器)。
Sam Varshavchik 在 1999 年编写了 Courier-IMAP。他这样做是为了为采用 Maildir 格式的 MTA 提供 IMAP 支持;当时还没有这样的产品。
5.2. 资源
官方 Courier-IMAP 文档
www.courier-mta.org/imap/documentation.html
RFC 3501 - 互联网消息访问协议 (IMAP)
RFC 1939 - 邮局协议 - 第 3 版 (POP3)
5.3. 必需项
FreeBSD 7.0-RELEASE (参见 "FreeBSD 7.0")
更新的端口集合 (参见 "FreeBSD 端口集合")
配置为向 Maildir 交付的 MTA (参见 "Postfix SMTP 服务器 2.5.1")
Courier-authlib (参见第 39 页的 "Courier-authlib 0.60.2")
互联网连接
5.4. 可选项
使用带有签名 SSL 证书的 OpenSSL(见“OpenSSL 0.9.8g”);如果您需要在电子邮件客户端和服务器之间进行安全通信,应在开始之前安装 OpenSSL。
5.5. 准备
成为超级用户。
5.6. 安装
要开始安装 Courier-IMAP,请输入以下命令:
# cd /usr/ports/mail/courier-imap
# make config ; make install clean
将会显示一个包含 Courier-IMAP 选项列表的菜单。保留选项的默认值;按[tab]键选择 OK,然后按[enter]键开始安装。
注意: Courier-IMAP 包含 IMAP 和 POP3 服务器。本指南将配置这两个服务;如果您不想启用特定服务器,只需跳转到“测试”部分的相应部分(开始)。
5.7. 配置
安装过程完成后,是时候为您的系统配置 Courier-IMAP 了。
-
要启用 Courier-IMAP 和电子邮件客户端之间的安全通信,您需要配置 SSL 证书。如果您不想启用安全通信,请跳转到“查看测试”部分。Courier-IMAP 需要将私有服务器密钥和服务器 SSL 证书合并到一个文件中。我们假设您的私有密钥和服务器证书位于/usr/local/openssl/certs 目录。
以下命令将合并您的私有密钥与您的服务器证书,生成 Courier-IMAP 可以使用的单个文件:
# cd /usr/local/openssl/certs # cp host.example.com-unencrypted-key.pem\ ? host.example.com-key-cert.pem # chmod 400 host.example.com-key-cert.pem # cat host.example.com-cert.pem >> host.example.com-key-cert.pemhost.example.com
-unencrypted-key.pem是您的服务器未加密的私有密钥文件。host.example.com
-key-cert.pem是合并的密钥和证书文件。host.example.com
-cert.pem是服务器的公共证书文件。将这些示例文件名更改为与您使用 OpenSSL 创建服务器密钥和证书文件时使用的命名约定相匹配。
-
您需要通过编辑位于/usr/local/etc/courier-imap 的 imap-ssl 和 pop3d-ssl 文件来告诉 Courier-IMAP 合并的密钥证书文件(在步骤 1 中创建的文件)的位置。如下打开并修改 imap-ssl 文件(约 257 行):
# ee /usr/local/etc/courier-imap/imapd-ssl TLS_CERTFILE=/usr/local/openssl/certs/host.example.com-key-cert.pem保存并退出。
-
如下打开并修改 pop3d-ssl 文件(约 244 行):
# ee /usr/local/etc/courier-imap/pop3d-ssl TLS_CERTFILE=/usr/local/openssl/certs/host.example.com-key-cert.pem保存并退出。
如果您使用了不同的命名约定,请用适当的文件名替换host.example.com
-key-cert.pem。如果此文件的路径与上述不同,请确保更改。您的证书文件必须采用密钥后跟证书的格式(如步骤 1 中所示),且不得包含任何多余文本。
5.8. 测试
在本节中,我们将执行一些基本测试,以确认 Courier-IMAP 能够正确响应请求。
5.8.1. IMAP
你将需要系统上账户的用户名和密码来测试 IMAP 功能。确保你选择的用户账户具有现有的 Maildir 目录。此目录由 Postfix 在向用户投递邮件时自动创建。如果用户尚未收到电子邮件,则 Maildir 目录将不存在。在这种情况下,使用 maildirmake 命令手动创建 Maildir 目录。有关详细信息,请参阅 "maildirmake"。
-
检查 Courier-IMAP 是否启动并正确处理请求。要启用 IMAP 服务,修改 rc.conf。打开位于 /etc 的 rc.conf 文件:
# ee /etc/rc.conf并添加以下一行或两行:
courier_imap_imapd_enable="YES" courier_imap_imapd_ssl_enable="YES"
注意: 如果你没有配置 Courier-IMAP 使用 SSL 进行安全通信,则省略第二行。
要启动 IMAP 服务,输入:
# /usr/local/etc/rc.d/courier-imap-imapd.sh start # /usr/local/etc/rc.d/courier-imap-imapd-ssl.sh start -
输入以下命令以连接到端口 143 上的 IMAP 服务器:
代码视图:
# telnet localhost 143 Connected to localhost. Escape character is '^]'. * OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2005 Double Precision, Inc. See COPYING for distribution information.
注意: 此输出,即 IMAP 服务器连接横幅,将显示在一行上。
使用系统有效的用户名和密码登录。
aa login username password aa OK LOGIN Ok.下一个命令通常在邮件客户端从邮箱中检索消息之前发送;你将希望看到类似以下所示的响应。
ab select inbox * FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent) * OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited * 2 EXISTS * 0 RECENT * OK [UIDVALIDITY 1129543635] Ok * OK [MYRIGHTS "acdilrsw"] ACL ab OK [READ-WRITE] Ok ac logout* BYE Courier-IMAP server shutting down ac OK LOGOUT completed Connection closed by foreign host.如果你的会话与上面类似,那么 Courier-IMAP 是正常的。
-
使用 SSL 测试 Courier-IMAP 类似,但使用 OpenSSL 命令行工具。(如果你没有选择配置使用 SSL 的安全通信,你可以继续下面的“POP3”部分。)以下命令开始一个使用 SSL 的 IMAP 会话:
# openssl s_client -connect localhost:993一旦建立连接,你可以发出与上面相同的命令来测试 IMAP-SSL 功能,从
aa login*用户名 密码*命令开始。
5.8.2. POP3
你将需要系统上账户的用户名和密码来测试 POP3 功能。确保你选择的用户账户具有现有的 Maildir 目录。此目录由 Postfix 在向用户投递邮件时自动创建。如果用户尚未收到电子邮件,则 Maildir 目录将不存在。在这种情况下,使用 maildirmake 命令手动创建 Maildir。有关详细信息,请参阅 "maildirmake"。
-
检查 Courier-IMAP 是否启动并正确处理请求。要启用 POP3 服务,打开位于 /etc 的 rc.conf 文件:
# ee /etc/rc.conf并添加以下一行或两行:
courier_imap_pop3d_enable="YES" courier_imap_pop3d_ssl_enable="YES"
注意: 如果你没有配置 Courier-IMAP 使用 SSL 进行安全通信,则省略第二行。
要启动 POP3 服务,输入:
# /usr/local/etc/rc.d/courier-imap-pop3d.sh start # /usr/local/etc/rc.d/courier-imap-pop3d-ssl.sh start -
输入以下命令以连接到端口 110 上的 POP3 服务器:
# telnet localhost 110 Connected to localhost. Escape character is '^]'. +OK Hello there.使用系统有效的用户名和密码登录。
user username +OK Password required. pass password +OK logged in.stat命令触发 POP3 服务器返回所谓的删除列表。以下删除列表中的七个(在下面的删除列表中)表示邮箱中的消息数量,后面跟着这些消息在磁盘上消耗的字节数(以字节为单位)。你的输出将根据你的邮箱内容而有所不同。stat +OK 7 19775 quit到目前为止,我们可以假设 POP3 服务器正在正确运行。
-
您可以使用与 OpenSSL 命令行工具相同的方式测试带有 SSL 的 POP3 守护进程。以下命令通过 SSL 开始一个 POP3 会话:
# openssl s_client -connect localhost:995一旦建立连接,您可以使用与上面相同的命令,从
user *username*命令开始,以测试 POP3 SSL 功能。
5.9. 实用工具
以下是关于 maildirmake 程序的简要信息,该程序用于创建用户的初始 Maildir 目录结构或向现有的 Maildir 添加子目录。
5.9.1. maildirmake
此实用程序用于创建用户的 Maildir 目录和子目录。
命令
maildirmake
语法
maildirmake -*options* Maildir
选项
-f
在现有的 Maildir 中创建子目录
示例
以下示例假设您是 root 用户并且位于适当的用户家目录中。
要创建一个新的 Maildir,请输入:
# su user
# maildirmake Maildir
# exit
用 *用户* 替换您为创建 Maildir 而创建的账户的用户名。
要在现有的 Maildir 中创建名为 Junk 的子目录,请使用以下命令:
# su user
# maildirmake -f Junk Maildir
# exit
用 *用户* 替换您为创建子目录而创建的账户的用户名。
5.10. 配置文件
/usr/local/etc/courier-imap/imapd
主要的 IMAP 配置文件
/usr/local/etc/courier-imap/imapd-ssl
使用 SSL 相关的选项补充了主要的 IMAP 配置文件
/usr/local/etc/courier-imap/pop3d
主要的 POP3 配置文件
/usr/local/etc/courier-imap/pop3d-ssl
使用 SSL 相关的选项补充了主要的 POP3 配置文件
5.11. 日志文件
/var/log/maillog
电子邮件活动的一般日志
5.12. 备注
-
如果您在没有 SSL 支持的情况下安装了 Courier-IMAP,请注意端口 143 传输登录和密码信息是“明文”。这意味着它可能被未经授权的人员获取。如果您的所有用户都将使用具有 SSL 支持的电子邮件客户端,那么运行仅启用 SSL 的 Courier-IMAP 实例可能是一个好主意,方法是删除 /etc/rc.conf 文件中的非 SSL 启动行。
如果您的服务器位于 NAT 路由器后面,您可以通过仅转发端口 993 来启用端口转发。这将只允许来自本地网络外部的 SSL 连接。除非您已禁用如上所述的标准 IMAP,否则本地流量仍然容易受到攻击。
如果您打算安装使用 IMAP 的 Webmail 客户端(如 SquirrelMail;请参阅 "SquirrelMail 1.4.13"),请不要禁用端口 143 上的标准 IMAP 功能。
如果您选择从 rc.conf 中删除非 SSL imapd 行,请记住像这样停止非 SSL 守护进程:
# /usr/local/etc/rc.d/courier-imap-imapd.sh stop -
同样,如果你安装了没有 SSL 支持的 POP3,请注意端口 110 会明文传输登录和密码信息。这意味着它可能被未经授权的人获取。如果你的所有用户都将使用支持 SSL 的电子邮件客户端,那么可能只运行 SSL 启用的 POP3 守护进程实例是个好主意,方法是删除/etc/rc.conf 文件中的非 SSL 启动行。
如果你的服务器位于 NAT 路由器后面,你可以启用仅端口 995 的端口转发。这将只允许来自本地网络外部的 SSL 连接。除非你像上面提到的那样禁用了非 SSL POP3,否则本地流量仍然会容易受到攻击。
如果你选择从 rc.conf 中移除非 SSL pop3d 行,请记住这样停止非 SSL 守护进程:
# /usr/local/etc/rc.d/courier-imap-pop3d.sh stop
第六章. CUPS 打印服务器 1.3.3
HTTP://CUPS.ORG
6.1. 摘要
常见 Unix 打印系统(CUPS)是一个开源打印系统,为基于 Unix 的系统中的打印机提供通用接口。它还提供了一个标准化和模块化的平台,允许使用外部过滤器,如 Foomatic 和 Ghostscript,以扩展打印机兼容性。CUPS 在 GNU GPL 下授权,并已成为大量 Linux 发行版以及 Mac OS X 的标准打印系统。
CUPS 由打印队列、过滤器和后端组成。它使用互联网打印协议(IPP)从网络上的客户端接受打印作业。然后,打印数据存储在打印队列或队列中,直到打印机准备好接受打印作业。当打印机准备好时,CUPS 通过将打印作业数据转换为打印机理解的语言的过滤器发送打印作业。转换后的数据随后通过后端传输到目标打印机。常见的后端包括通用串行总线(USB)和并行接口。
大多数打印机使用 PostScript 或打印机控制语言(PCL)进行通信。PostScript 是在 20 世纪 80 年代中期由 Adobe Systems 开发的,旨在创建一种标准语言,用于文档交换和打印机通信。CUPS 可以打印几乎支持 PostScript 的所有打印机。然而,由于从 Adobe 许可技术的成本,PostScript 打印机因其高昂的价格而闻名。PCL 是由惠普公司在 1984 年创建的,没有像 PostScript 那样的许可限制。这创造了一个庞大的低成本 PCL 打印机市场。为了支持这个大市场,启动了像 Gimp-Print 这样的项目,以开发针对 PCL 打印机的 Unix 驱动程序。惠普公司通过惠普喷墨驱动程序项目回应了对基于 Unix 的驱动程序的需求。Gimp-Print 和惠普喷墨驱动程序项目极大地扩展了 CUPS 对非 PostScript 打印机的支持。
CUPS 是由 Michael Sweet 创建的,于 1999 年由他与其共同创始人 Andrew Senft 创立的 Easy Software Products 公司首次发布。CUPS 最初是围绕在 Unix 系统中常见的 30 年历史的行打印守护程序(LPD)协议设计的。IPP 的出现最终导致了从 LPD 协议切换到更可扩展的 IPP 协议。
第六章 CUPS 打印服务器 1.3.3
HTTP://CUPS.ORG
6.1. 摘要
通用 Unix 打印系统(CUPS)是一个开源打印系统,为基于 Unix 的系统提供支持打印机的通用接口。它还提供了一个标准化和模块化的平台,允许使用外部过滤器(如 Foomatic 和 Ghostscript)来扩展打印机兼容性。CUPS 根据 GNU GPL 许可,已成为大量 Linux 发行版以及 Mac OS X 的标准打印系统。
CUPS 由打印队列管理器、过滤器以及后端组成。它使用互联网打印协议(IPP)从网络上的客户端接收打印作业。打印数据随后存储在打印队列或队列中,直到打印机准备好接收打印作业。当打印机准备好时,CUPS 通过过滤器将打印作业数据转换为打印机理解的格式。转换后的数据随后通过后端传输到目标打印机。常见的后端包括通用串行总线(USB)和并行接口。
大多数打印机使用 PostScript 或打印机控制语言(PCL)进行通信。PostScript 在 20 世纪 80 年代中期由 Adobe Systems 开发,旨在创建一个既适用于文档交换又适用于打印机通信的标准语言。CUPS 可以打印几乎所有支持 PostScript 的打印机。然而,由于需要从 Adobe 获得技术许可,PostScript 打印机因其高昂的成本而闻名。PCL 由惠普公司在 1984 年创建,没有像 PostScript 那样的许可限制。这创造了一个庞大的低成本 PCL 打印机市场。为了支持这个大市场,启动了像 Gimp-Print 这样的项目来开发 PCL 打印机的 Unix 驱动程序。惠普公司通过惠普喷墨驱动程序项目回应了对基于 Unix 的驱动程序的需求。Gimp-Print 和惠普喷墨驱动程序项目极大地扩展了 CUPS 对非 PostScript 打印机的支持。
CUPS 由 Michael Sweet 创建,并于 1999 年由他与 Andrew Senft 共同创立的 Easy Software Products 公司首次发布。CUPS 最初是围绕在 Unix 系统中常见的 30 年老式行打印守护进程(LPD)协议设计的。IPP 的出现最终导致了从 LPD 协议切换到更可扩展的 IPP 协议。
6.2. 资源
CUPS 1.3 用户文档
6.3. 必需条件
FreeBSD 7.0-RELEASE(见“FreeBSD 7.0”)
更新的端口集合(见“FreeBSD 端口集合”)
互联网连接


6.4. 可选
如果您希望启用对 Web 管理界面的安全 HTTP 连接
注册域名
如果您希望为打印服务器分配主机名
6.5. 准备
在继续之前,请参阅 "打印机类型" 以获取有关打印机兼容性的信息。
成为超级用户。
6.6. 安装
输入以下命令以开始 CUPS 安装过程:
# setenv XORG_UPGRADE yes
# cd /usr/ports/print/cups
# make config ; make install clean
# rehash
将显示一个菜单,显示 cups-base 的选项。我们将保留这些选项为默认设置,因此按 [tab] 键选择“确定”,然后按 [enter] 键继续安装过程。
在构建过程超过 30 分钟后,也会出现一个 GNU Ghostscript 驱动配置菜单。除非您有特殊原因要更改它们,否则请保留默认设置。按 [tab] 键选择“确定”,然后按 [enter] 键继续安装过程。
6.7. 配置
安装过程完成后,是时候为您的系统配置 CUPS 了。
-
FreeBSD 包含一个使用与 CUPS 相同命令名的打印队列系统。如果搜索路径未从默认值修改,则 FreeBSD 队列程序将运行而不是 CUPS。有关更改默认搜索路径的详细信息,请参阅 "默认搜索路径"。
-
必须将
"NO_LPR = YES"语句添加到位于 /etc 的 make.conf 文件中。这告诉 FreeBSD 的make命令,如果您选择重新编译基础操作系统,则跳过打印队列程序的编译。CUPS 可以被认为是 FreeBSD 打印队列程序的直接替代品。以下命令将添加此行到 make.conf:# cp /etc/make.conf /etc/make.conf.old # echo "NO_LPR = YES" >> /etc/make.conf -
为了允许打印客户端将原始打印数据发送到连接的打印机,您必须在位于 /usr/local/etc/cups 的 mime.convs 文件中取消注释一行。以这种方式打开 mime.convs:
# ee /usr/local/etc/cups/mime.convs滚动到
application/octet-stream声明 (~109) 并移除井号 (#) 以取消注释该行。现在它应该如下所示:application/octet-stream application/vnd.cups-raw 0 -保存并退出。
-
现在,您已准备好修改位于 /usr/local/etc/cups 的主配置文件 cupsd.conf。要打开 cupsd.conf,请输入:
# ee /usr/local/etc/cups/cupsd.conf将
Listen localhost:631声明 (~18) 更改为Listen *:631。这将允许外部客户端访问 CUPS Web 管理页面。修改后,此行应如下所示:Listen *:631 -
默认情况下,对 CUPS 服务的访问受到限制,需要放宽以允许本地网络上的计算机进行打印支持。将
Location /容器内的Allow localhost声明 (~32) 更改为Allow @LOCAL。修改后,该行应如下所示:# Restrict access to the server... <Location /> Order allow,deny Allow @LOCAL </Location> -
默认情况下,对管理 Web 界面的访问被关闭,只能从服务器本身访问。要允许本地网络访问,将
Location /admin容器内的Allow localhost声明 (~39) 更改为Allow @LOCAL。您还应该添加Require user @SYSTEM以要求对 Web 管理页面的访问进行身份验证。修改后,这些行应如下所示:# Restrict access to the admin pages... <Location /admin> Encryption Required Require user @SYSTEM Order allow,deny Allow @LOCAL </Location>
注意: 根账户和 wheel 组的成员将能够登录到
host.example.com:631/admin(用 host.example.com 的服务器主机名或 IP 地址替换)的 Web 管理页面来管理打印机和打印作业。CUPS 将使用自签名证书加密身份验证凭据。如果您喜欢,可以指定自己的 SSL 证书。有关详细信息,请参阅 "SSL 证书"。
-
保存并退出。
6.8. 测试
在本节中,我们将执行一些基本测试,以确认在尝试配置打印机之前 CUPS 是否正确启动。
-
要配置 CUPS 在系统启动时自动启动,打开位于 /etc 的 rc.conf 文件:
# ee /etc/rc.conf然后添加以下行:
cupsd_enable="YES"保存您的更改并运行启动脚本:
# /usr/local/etc/rc.d/cupsd start -
通过将 Web 浏览器指向
host.example.com:631(用 host.example.com 的服务器主机名或 IP 地址替换)来测试服务器。如果服务器成功启动,您应该会看到一个通用 Unix 打印系统欢迎页面;如果没有,请检查您的 cupsd.conf 文件是否有打印错误。 -
如果您使用的是 PostScript 打印机,请准备好其 PPD(PostScript 打印机描述)文件,然后跳到步骤 8。如果您没有打印机 PPD 文件,请检查
openprinting.org。
注意: PPD 文件通常与打印机附带的软件一起提供。您可能可以在制造商的网站上或
linuxprinting.org找到它们。CUPS 将这些文件存储在 /usr/local/share/cups/model 目录中。
-
如果您打算使用 CUPS 的非 PostScript 打印机,您需要安装打印机驱动程序。如果您的打印机由 Gutenprint 或 HPLIP(惠普 Linux 图像和打印)驱动程序支持,请转到相应的部分。如果您的打印机不支持这两个驱动程序中的任何一个,请跳到步骤 7 并在步骤 10 中指定原始打印机型号。
6.8.1. Gutenprint 驱动程序
NaN. Gutenprint 驱动程序包含了对 Epson 打印机(以及其他打印机)的广泛支持。访问 gutenprint.sourceforge.net 获取支持的打印机完整列表。以下命令将从 ports 集合中安装 Gutenprint 驱动程序(这可能需要 30 分钟或更长时间才能完成):
```
# cd /usr/ports/print/gutenprint
# make install clean
```
将出现一个包含 Gutenprint 选项的菜单;高亮显示“Gutenprint Cups 驱动程序”并按[空格键]在其框中打勾。保留其他选项的默认设置:按[tab]键高亮显示“确定”,然后按[enter]键。安装完成后,继续下面的第 8 步。如果你愿意,也可以安装 HPLIP 驱动程序。
6.8.2. HPLIP 驱动程序
NaN. HP Linux Imaging and Printing 驱动程序是在惠普公司开发的,它几乎支持所有 HP 打印机。访问 hplip.sourceforge.net 获取支持的打印机完整列表。以下命令将从 ports 集合中安装 HPLIP 打印机驱动程序(这可能需要 60 分钟或更长时间才能完成):
```
# cd /usr/ports/print/hplip
# make config ; make install clean
```
将出现一个包含 HPLIP 选项的菜单。保留它们的默认设置:按[tab]键高亮显示“确定”,然后按[enter]键继续安装。
6.8.3. 完成打印机设置
NaN. 确保打印机已开启并通过 USB 或并行线缆连接到 CUPS 服务器。重启系统。以 root 身份登录到网络管理界面 host.example.com:631/admin(用你的服务器主机名或 IP 地址替换host.example.com)。
NaN. 选择添加打印机。为连接的打印机选择一个名称(写下这个名称;当你设置客户端打印时你需要它)。如果你愿意,可以输入一个位置(例如,楼上办公室)。输入打印机的描述(例如,HP LaserJet 1100)。点击继续。
NaN. 下一页上应该有一个下拉菜单。根据需要选择 USB 或 LPT(并行)并点击继续。
NaN. 在下一页上选择你的打印机正确的品牌(制造商),然后点击继续。
NaN. 在下一页上从列表中选择正确的型号,然后点击继续。
NaN. 你的打印机应该准备好接受打印作业。你可以从 CUPS 网络界面的“打印机”页面打印测试页。
进行到适当的部分以设置客户端打印。
从 Windows XP 打印
-
要从 Windows XP 打印到 CUPS 打印机,点击开始菜单并选择控制面板。
-
双击“打印机与传真”图标。
-
在窗口左侧点击“添加打印机”。将出现“欢迎使用添加打印机向导”对话框;点击下一步。
-
点击“网络打印机”单选按钮,然后点击下一步。
-
点击“连接到互联网上的打印机或家庭或办公室网络”单选按钮。在 URL 字段中,使用以下语法指定服务器地址:
host.example.com:631/printers/printername(用您的 CUPS 服务器的主机名或 IP 地址替换host.example.com,并用您在 CUPS 打印机设置期间分配的打印机名称替换 printername)。 -
点击“下一步”后,您将需要从列表中选择打印机品牌和型号。如果您有制造商的 Windows 驱动程序,请使用它;否则,从提供的列表中选择并点击“确定”。
-
您应该能够从 Windows 应用程序通过 CUPS 打印服务器打印。
从 Mac OS X 打印
-
打开一个能够打印的应用程序(例如,Safari)。
-
在文件菜单中选择打印。
-
选择打印机下拉菜单以显示可用打印机的列表。您应该在菜单的下半部分看到共享打印机。
-
将鼠标悬停在共享打印机上以显示子菜单。
-
从列表中选择适当的 CUPS 打印机。CUPS 打印机将被添加到您的打印机永久列表中。
-
您可以通过点击对话框右下角的“打印”来打印当前文档。
从 FreeBSD 命令行打印
您可以使用以下命令在 FreeBSD 命令行中将文件内容打印到 CUPS 配置的打印机上:
# lp -d printername filename
将*printername*替换为您想要打印的 CUPS 打印机名称。将*filename*替换为您要打印的文件的路径和文件名。
6.9. 管理
要管理 CUPS,请输入以下 URL 之一,用您的主机名或 CUPS 服务器 IP 地址替换host.example.com。
host.example.com:631 (打印机及打印作业状态)
host.example.com:631/admin (通过 SSL 进行 CUPS 管理)
6.10. 配置文件
/usr/local/etc/cups/cupsd.conf
CUPS 打印服务器的配置主文件
6.11. 日志文件
/var/log/cups/access_log
包含 IP 地址、时间和 CUPS 网络界面的活动
/var/log/cups/error_log
包含由 CUPS 打印服务器产生的错误和状态消息
/var/log/cups/page_log
包含打印机日志、打印到它们的用户、时间、页数和它们的 IP 地址
6.12. 备注
以下部分包括对两种打印机类型的简要说明,一些打印限制选项,以及 SSL 证书和 lptcontrol 工具的介绍。
6.12.1. 打印机类型
通常,存在两种打印机类别,PostScript 和 PCL。PostScript 是一种行业标准页面描述语言。该语言由 Adobe Systems 在 1980 年代中期开发,以允许在保留格式和外观的同时共享电子文档。它与 Adobe 开发的 PDF(可移植文档格式)类似。PostScript 打印机通常比非 PostScript 打印机更贵。高端商务激光打印机通常包括 PostScript 支持。PCL 打印机包括大多数面向消费者的喷墨和激光打印机。大多数低成本打印机不支持 PostScript 语言。这意味着必须安装针对打印机型号特定的驱动程序。寻找和安装与 CUPS 系统兼容的驱动程序可能是一项具有挑战性的任务。本指南提供了 Gutenprint 和 HPLIP 驱动的安装说明。许多流行的消费级打印机至少由这两个驱动程序之一支持。
如果你拥有与打印机匹配的 PostScript 打印机描述文件,CUPS 系统几乎支持所有 PostScript 打印机。PPD 文件通常包含在打印机捆绑的软件中。许多 PPD 文件也免费提供在 linuxprinting.org。
如果你拥有 Epson、Canon、Lexmark 或其他基于 PCL 的打印机,请访问 gutenprint.sourceforge.net 查看你的打印机是否由 Gutenprint 驱动支持。如果你拥有 HP 打印机,请访问 hplip.sourceforge.net 查看你的打印机是否由 HPLIP 驱动支持。如果你的打印机来自其他制造商,请访问 linuxprinting.org 查看你的打印机是否由其他与 CUPS 兼容的驱动支持。
如果你的打印机不支持与 CUPS 兼容的驱动程序,你仍然可以使用 CUPS 服务器打印,前提是:
-
所有预期的打印客户端都在运行 Microsoft Windows
-
每个系统上都有可用的 Windows 兼容打印机驱动程序
这是因为 CUPS 有能力将原始数据发送到连接的打印机。Windows 驱动程序将打印数据发送到正确的打印机语言;然后 CUPS 将这些数据中继到连接的打印机。
要配置 CUPS 以将原始数据发送到连接的打印机,在“测试”步骤 10(第 56 页)中指定打印机型号时选择原始数据。正常完成其余指南。
6.12.2. 打印限制
可以通过基于客户端 IP 地址的认证和/或访问规则强制执行打印限制。例如,要仅限制认证用户打印,请将以下行添加到 /usr/local/etc/cups 中的 cupsd.conf 文件末尾。要打开 cupsd.conf,请输入:
# ee /usr/local/etc/cups/cupsd.conf
使用 [ctrl-U] 向下滚动到 cupsd.conf 文件底部,并添加以下行:
<Location /printers>
AuthType Basic
AuthClass User
</Location>
保存并退出。
在这些设置到位后,用户将需要提供用户名和密码才能将作业发送到任何打印机。
注意: 用户必须拥有自己的系统级账户进行认证。用户名和密码信息以明文形式发送;如果您不希望将认证信息以不安全的方式通过网络发送,请考虑使用访问规则。
访问规则可用于根据客户端的原始 IP 地址允许访问打印机。例如,要仅限制打印到 IP 地址 192.168.0.1 和 192.168.0.2,请将以下行添加到/usr/local/etc/cups 中的 cupsd.conf 文件末尾。要打开 cupsd.conf,请输入:
# ee /usr/local/etc/cups/cupsd.conf
使用[ctrl-U]滚动到 cupsd.conf 文件的底部并添加以下行:
<Location /printers>
Order Deny,Allow
Deny From All
Allow From 192.168.0.1
Allow From 192.168.0.2
</Location>
保存并退出。
上述打印限制的方法非常基础。如果您需要更多功能或灵活性,请考虑使用 Samba 来管理打印权限。有关更多信息,请参阅"Samba 3.0.28"。
6.12.3. SSL 证书
您可以使用现有的 SSL 证书与 CUPS 一起使用,而不是使用 CUPS 为与安全 Web 管理界面一起使用而生成的自签名证书。将以下行添加到/usr/local/etc/cups 中的 cupsd.conf。替换您的服务器证书和密钥文件的路径和文件名。
代码视图:
ServerCertificate /usr/local/openssl/certs/ host.example.com-cert.pem
ServerKey /usr/local/openssl/certs/ host.example.com-unencrypted-key.pem
*host.example.com-cert.pem * is the server's public SSL Certificate file.
*host.example.com-unencrypted-key.pem * is the server's private unencrypted key file.
6.12.4. lptcontrol
lptcontrol 实用程序控制 LPT 打印机驱动程序如何将数据发送到打印机。这不适用于 USB 打印机。默认情况下,LPT 打印机驱动程序使用中断驱动模式。这对于大多数打印机来说工作得很好。然而,一些打印机可能会出现与此模式相关的问题。如果您遇到比典型打印时间慢的情况,您可能尝试使用以下命令将默认的中断驱动模式更改为轮询模式:
# lptcontrol -p -d /dev/lpt0
如果需要,您可以将此行添加到/etc/rc.local 以在启动时自动设置 LPT 端口轮询模式。
第七章. CYRUS SASL 2.1.22
HTTP://ASG.WEB.CMU.EDU/SASL
7.1. 摘要
SASL(简单认证和安全层)是一种为基于连接的协议添加认证支持的系统。在本书中,我们将使用此机制为简单邮件传输协议(SMTP)提供支持。Postfix 邮件传输代理(MTA)使用 SMTP 来传输互联网电子邮件。为 Postfix 添加认证支持对于希望从不受保护公开网络通过服务器中继电子邮件的用户来说非常重要。通过将 SASL 与基于 SSL/TLS 的加密结合,可以实现安全的邮件中继。
默认情况下,Postfix MTA 不是一个开放的电子邮件中继。虽然这阻止了未经授权的用户使用服务器中继垃圾邮件,但也阻止了合法用户从本地私有网络以外的位置发送电子邮件。Cyrus SASL 允许 SMTP 服务器验证远程用户的身份。一旦认证成功,用户将被允许远程中继权限。
约翰·迈尔斯(John Myers),卡内基梅隆大学的前系统架构师,于 1997 年 10 月发布了 SASL 规范。Cyrus SASL 在卡内基梅隆大学的 Cyrus 项目下维护。
第七章. Cyrus SASL 2.1.22
CMU ASG SASL
7.1. 摘要
SASL(简单认证和安全层)是一个用于向基于连接的协议添加认证支持的系统。在本书中,我们将使用此机制用于简单邮件传输协议(SMTP)。Postfix MTA 使用 SMTP 传输互联网电子邮件。为 Postfix 添加认证支持对于希望从不受保护的网络发送电子邮件的用户来说很重要。通过将 SASL 与基于 SSL/TLS 的加密结合使用,可以获得安全的邮件中继。
默认情况下,Postfix MTA 不是一个开放的电子邮件中继。虽然这阻止了未经授权的用户使用服务器中继垃圾邮件,但也阻止了合法用户从除本地私有网络以外的位置发送电子邮件。Cyrus SASL 允许 SMTP 服务器验证远程用户的身份。一旦认证,用户将被允许远程中继权限。
卡内基梅隆大学前系统架构师约翰·迈尔斯(John Myers)于 1997 年 10 月发布了 SASL 规范。Cyrus SASL 在卡内基梅隆的 Project Cyrus 下维护。
7.2. 资源
卡内基梅隆大学的官方 Cyrus SASL 网站
7.3. 必需的

更新后的端口集合(参见 "FreeBSD 端口集合")

7.4. 准备
成为超级用户。
注意: 本指南适用于配置 Cyrus SASL 与 Postfix MTA,并假设您打算使用 SASL 与 SMTP 结合 SSL/TLS 加密来保护 PLAIN 和/或 LOGIN 认证方法。
7.5. 安装
您将安装 Cyrus SASL 认证服务器,它包括 Cyrus SASL。要开始安装 Cyrus SASL 认证服务器,请输入以下命令:
# cd /usr/ports/security/cyrus-sasl2-saslauthd
# make config ; make install clean
# rehash
应该会出现一个菜单,显示 Cyrus SASL 的选项。我们将保留这些设置在默认值,因此按 [tab] 键高亮显示“确定”,然后按 [enter] 键。
7.6. 配置
安装过程完成后,是时候为您的系统配置 Cyrus SASL 了。
-
创建一个名为 smtpd.conf 的文件。当 Cyrus SASL 配置为与 Postfix MTA 一起工作时,该文件被 Cyrus SASL 使用。创建文件:
# ee /usr/local/lib/sasl2/smtpd.conf并向其中添加以下两行:
pwcheck_method: saslauthd mech_list: plain login第一行指示 Cyrus SASL 使用您已安装的 SASL 认证服务器。第二行告诉 Cyrus SASL 当客户端最初连接到 SMTP 服务器时,只宣布 PLAIN 和 LOGIN 方法。
-
保存并退出。
7.7. 测试
在本节中,我们将启用 SASL 身份验证服务器在启动时启动,然后进行测试以确认其正在运行。
-
要配置 SASL 身份验证服务器在启动时自动启动,打开 rc.conf 文件:
# ee /etc/rc.conf并添加以下启动行:
saslauthd_enable="YES" saslauthd_flags="-a pam" -
保存您的更改并通过运行启动脚本进行测试:
# /usr/local/etc/rc.d/saslauthd start # /usr/local/etc/rc.d/saslauthd status如果 SASL 身份验证服务器正在运行,您将看到:
saslauthd is running as pid *1234*.进程 ID(PID)可能会有所不同。
7.8. 配置文件
/usr/local/lib/sasl2/smtpd.conf
此文件控制 SASL 守护进程在使用 Postfix MTA 时的行为。它存储了告诉 Cyrus SASL 向 SMTP 客户端宣布哪种身份验证方法的参数。
第八章.DDCLIENT 3.7.3
HT TP://DDCLIENT.SOURC E FORGE.NET
8.1.概述
ddclient 是一个用 Perl 编写的开源程序。它用于自动更新各种动态 DNS(域名系统)服务提供商的动态 DNS 条目。当 ddclient 检测到系统的 IP 地址已更改时,它会将新的 IP 地址信息发送到您指定的动态 DNS 服务提供商。这使得具有动态分配 IP 地址的系统可以通过互联网域名系统保持可解析性(保持可达),无论其 ISP 做出的 IP 地址更改如何。
ddclient 支持许多动态 DNS 服务提供商,包括以下:
BroadbandReports (www.dslreports.com)
DNS Park (dnspark.com)
DynDNS (www.dyndns.com)
easyDNS (www.easydns.com)
Namecheap (www.namecheap.com)
ZoneEdit (zoneedit.com)
ddclient 包含对多个品牌 NAT 路由器的原生支持。它通过从路由器的内置状态页面提取当前 IP 信息来保持更新。如果您的路由器不受支持,ddclient 可以配置为通过 Web 获取系统 IP 地址信息。本指南提供了通过 Web 获取 IP 地址信息而不是使用路由器状态页面的信息。
Paul Burry 最初编写了 ddclient,并且仍然是维护 SourceForge.net 上项目的五个开发者之一。
第八章. DDCLIENT 3.7.3
HT TP://DDCLIENT.SOURC E FORGE.NET
8.1. 摘要
ddclient 是一个用 Perl 编写的开源程序。它用于自动更新各种动态 DNS(域名系统)服务提供商的动态 DNS 条目。当 ddclient 检测到系统的 IP 地址已更改时,它会将新的 IP 地址信息发送到您指定的动态 DNS 服务提供商。这使得具有动态分配 IP 地址的系统可以通过互联网域名系统保持可解析性(保持可达),无论其 ISP 做出的 IP 地址更改。
ddclient 支持许多动态 DNS 服务提供商,包括以下:
BroadbandReports (www.dslreports.com)
DNS Park (dnspark.com)
DynDNS (www.dyndns.com)
easyDNS (www.easydns.com)
Namecheap (www.namecheap.com)
ZoneEdit (zoneedit.com)
ddclient 包括对几种品牌的 NAT 路由器的原生支持。它通过从路由器的内置状态页面提取当前的 IP 信息来保持更新。如果您的路由器不受支持,ddclient 可以配置为通过 Web 获取系统 IP 地址信息。本指南提供了有关通过 Web 获取 IP 地址信息而不是使用路由器状态页面的信息。
Paul Burry 最初编写了 ddclient,并且仍然是维护 SourceForge.net 上项目的五个开发者之一。
8.2. 资源
官方 ddclient 主页
8.3. 必需的
FreeBSD 7.0-RELEASE(请参阅 "FreeBSD 7.0")
更新的端口集合(请参阅 "FreeBSD 端口集合")
互联网连接
已注册的域名
动态 DNS 更新服务(有关提供商列表,请参阅 "摘要")
8.4. 准备
成为超级用户。
8.5. 安装
要开始安装 ddclient,请输入以下命令:
# cd /usr/ports/dns/ddclient
# make install clean
# rehash
8.6. 配置
安装过程完成后,是时候为您的系统配置 ddclient 了。
-
将 ddclient.conf.sample 文件复制到 ddclient.conf,您将在其中进行配置。输入以下命令以完成此操作:
# cd /usr/local/etc # cp ddclient.conf.sample ddclient.conf # ee ddclient.conf -
滚动并取消注释第 51 行的
use=web声明(通过删除行首的井号#),该行应如下所示:use=web, web=checkip.dyndns.org/, web-skip='IP Address' # ...这行指示 ddclient 从
checkip.dyndns.org获取当前的 IP 地址信息。当向checkip.dyndns.org发起 HTTP 请求时,DynDNS 托管一个公共服务,返回你的公网 IP 地址。使用这些信息,ddclient 保持你的 DNS 记录是最新的。 -
滚动并找到你的动态 DNS 更新提供商(~89)。取消注释每条适当的行,并按照以下加粗内容提供你的登录名、密码和注册的域名(或域名)。(取消每行的井号;不要修改以两个井号开头的行。)以下是一个dyndns.org配置的示例:
## ## dyndns.org custom addresses ## ## (supports variables: wildcard,mx,backupmx) ## custom=yes, \ server=members.dyndns.org, \ protocol=dyndns2 \ login=username \ password=password \ example.com保存并退出。
-
由于 ddclient.conf 包含你的动态 DNS 提供商的密码,请确保只有 root 可以读取,如下所示:
# chmod 600 /usr/local/etc/ddclient.conf
8.7. 测试
以下基本测试将显示 ddclient 是否按预期运行。
-
要在启动时自动启动 ddclient,请编辑/etc 中的 rc.conf 文件。打开 rc.conf:
# ee /etc/rc.conf并添加以下启动行:
ddclient_enable="YES" ddclient_flags="-daemon 600"ddclient_flags="-daemon 600"语句表示 ddclient 将每 600 秒(10 分钟)检查一次你的公网 IP,但你可以使用你认为合理的任何值。(有关此值的详细信息,请参阅“备注”部分。) -
保存你的更改并运行启动脚本:
# /usr/local/etc/rc.d/ddclient.sh start -
输入此命令以确认 ddclient 正在运行:
# ps -ax | grep ddclient p0 S 0:00.05 ddclient - sleeping for 300 seconds (perl)你可以重复使用
ps命令来随时检查 ddclient 的状态。在睡眠时间到期后,ddclient 应该检查你的公网 IP 地址并对你的动态 DNS 提供商进行适当的更改。状态邮件将被发送到 root 账户的电子邮件地址。(如果你在/etc/aliases 文件中设置了 root 的电子邮件转发,请检查该电子邮件地址以获取状态更新。)
8.8. 配置文件
/usr/local/etc/ddclient.conf
这是 ddclient 的主要配置文件。
/usr/local/etc/ddclient.cache
此文件保存了系统最后已知的公网 IP 地址,以便 ddclient 知道何时需要更新你的动态 DNS 提供商。此文件位于/var/tmp。
8.9. 日志文件
/var/log/messages
ddclient 将状态消息以及错误记录到该文件。
8.10. 备注
-
将守护进程更新时间设置为 600 秒是合理的。如果你设置这个值太低,会导致系统产生不必要的流量。设置这个值太高将延迟向动态 DNS 提供商的 DNS 更新。
-
当在动态 DNS 服务提供商处创建账户时,避免使用与你的系统上任何账户匹配的登录名和/或密码。当 ddclient 更新你的公网 IP 地址时,它可能会以明文(未加密)的形式将你的用户名和密码传输给你的动态 DNS 服务提供商。如果攻击者分析了你的网络流量,这些信息可能会被用来危害你系统的安全。ddclient 的后续版本(包括 3.7 版)支持到动态 DNS 提供商的 SSL 加密连接。
第九章. DRUPAL 5.5
DRUPAL.ORG
9.1. 摘要
Drupal 是一个开源的基于网络的网站内容管理系统(CMS)。内容管理系统可以用来组织、存储和分发各种类型的内容,包括网页、图像、音频和文档。现代 CMS 应用如 Drupal 使得用户添加、删除和修改内容相对容易。这为公司内部网站甚至个人博客提供了一个可行的平台。Drupal 是用 PHP 编写的,并将内容存储在 MySQL(或 PostgreSQL)数据库中。
Drupal 的一些功能包括基于角色的权限、模板/主题系统、版本控制和内置网站分析。它还有一个强大的模块/插件系统,允许第三方开发者扩展默认功能集。如果你需要的功能不在 Drupal 的默认功能集中,它可能作为一个模块提供。
Drupal 的早期开发始于 2000 年,当时安特卫普大学的 student Dries Buytaert 构建了一个基于网络的公告板系统,他和他的朋友们用它来分享笔记。毕业后,Buytaert 继续添加功能,并于 2001 年将 Drupal 作为一个开源项目发布。多年来,Drupal 的受欢迎程度稳步上升;它现在被部署在许多网站上,例如《洋葱报》、福布斯杂志和电子前沿基金会。到 2006 年,Drupal 的开发者人数超过 400 人,Buytaert 担任项目负责人。
第九章. DRUPAL 5.5
HTTP://DRUPAL.ORG
9.1. 摘要
Drupal 是一个开源的基于网络的 内容管理系统 (CMS)。内容管理系统可以用来组织、存储和分发各种类型的内容,包括网页、图片、音频和文档。现代 CMS 应用程序如 Drupal 使得用户能够相对容易地添加、删除和修改内容。这为公司内部网站甚至个人博客提供了一个可行的平台。Drupal 使用 PHP 编写,并将内容存储在 MySQL(或 PostgreSQL)数据库中。
Drupal 的一些功能包括基于角色的权限、模板/主题系统、版本控制和内置网站分析。它还有一个强大的模块/插件系统,允许第三方开发者扩展默认功能集。如果您需要的功能不在 Drupal 的默认功能集中,它可能作为模块提供。
Drupal 的早期开发始于 2000 年,当时安特卫普大学的 Dries Buytaert 学生构建了一个基于网络的公告板系统,他和他的朋友们用它来分享笔记。毕业后,Buytaert 继续添加功能,并于 2001 年将 Drupal 作为开源项目发布。Drupal 的受欢迎程度逐年稳步上升;它现在部署在许多网站上,例如洋葱报、福布斯杂志和电子前沿基金会。到 2006 年,Drupal 的开发者人数超过 400 人,Buytaert 担任项目负责人。
9.2. 资源
Drupal 手册(关于使用 Drupal 的文档和视频教程)
9.3. 必需条件
FreeBSD 7.0-RELEASE(参见 "FreeBSD 7.0")
更新的端口集合(参见 "FreeBSD 端口集合")
Apache HTTP 服务器(参见 "Apache HTTP 服务器 2.2.8")
PHP 5(参见 "PHP 5.2.5")
MySQL 5(参见 "MySQL 服务器 5.0.51")
Lynx(参见 "Lynx 2.8.6")
互联网连接
注册的域名
9.4. 准备工作
-
成为超级用户。
-
在 MySQL 中创建一个名为 drupal 的数据库。接下来,创建一个名为 drupal 的用户,并授予此用户全部权限:
# mysql -u root -p mysql> create database drupal; mysql> grant all on drupal.* to -> drupal@localhost identified by 'password'; mysql> quit将
*password*替换为你选择的密码(需要使用单引号)。你稍后需要使用此密码。
9.5. 安装
输入以下命令以开始 Drupal 安装:
# cd /usr/ports/www/drupal5
# make config ; make install clean
将显示一个包含 Drupal 选项的菜单。我们将保留它们的默认设置,因此按[tab]键高亮显示“确定”,然后按[enter]键开始安装。
9.6. 配置
安装完成后,是时候为你的系统配置 Drupal 了。
-
创建一个针对 Drupal 的特定 Apache 配置文件。此文件将 Apache 指向 Drupal 文件的正确位置,并通过将 Drupal 特定的选项与主 httpd.conf 文件分开来简化管理。默认情况下,Apache 在/usr/local/etc/apache22/Includes 目录中搜索配置文件。以下是创建一个用于 Drupal 的配置文件的步骤:
# ee /usr/local/etc/apache22/Includes/drupal.conf添加以下行:
Alias /*drupal* "/usr/local/www/drupal5/" <Directory "/usr/local/www/drupal5/"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
注意: 默认情况下,Drupal 被设置为你的网站服务器根目录下的子目录。这意味着你需要在网络浏览器中输入
host.example.com/drupal。要更改此默认目录,将(斜体)中的drupal替换为不同的名称。
保存并退出。重新启动 Apache 以提交更改:
# /usr/local/etc/rc.d/apache22 restart -
需要在/etc/crontab 中添加一行,以允许 Drupal 的维护任务自动运行。Crontab 是一个系统服务,它允许根据在/etc/crontab 文件中指定的计划自动执行脚本或程序。
# ee /etc/crontab添加以下行:
代码视图:
45 */4 * * * root /usr/local/bin/lynx http:*//host.example.com/drupal/*cron.php将host.example.com/drupal替换为你的主机名和 Drupal 目录。此行将每四小时运行一次 Drupal 维护脚本。
注意: 确保已安装 Lynx,否则此命令将无法正确执行。
保存并退出。
-
在你喜欢的网络浏览器中打开
host.example.com/drupal/install.php,替换你的主机名和目录(如果你已修改)。 -
将数据库类型更改为 mysqli,然后输入你在“准备”中设置的数据库名称、用户名和密码。点击“保存配置”。
-
你应该看到 Drupal 安装完成页面。点击“你的新站点”链接,按照说明完成 Drupal 安装。
9.7. 配置文件
usr/local/www/drupal5/sites/default/settings.php
存储 Drupal 的用户名、密码和数据库信息
9.8. 备注
当第一次以 Drupal 网站管理员身份登录时,你可能会在状态报告页面上注意到红色的 Cron 维护任务。这表明可能存在配置错误。我们在第 2 步中创建的 crontab 条目最终将运行并纠正此错误状态。如果你希望更早地执行脚本,可以点击手动运行链接,从而移除警告。
第十章. ISC BIND DNS 服务器 9.4.2
HTTP://WWW.ISC.ORG/SW/BIND
10.1. 摘要
BIND(伯克利互联网域名系统)是互联网上最广泛使用的 DNS 服务器应用程序。根据 2007 年 7 月互联网系统联合公司(ISC)进行的一项调查,略超过 79%的 DNS 服务器使用 BIND DNS,微软以 16%的份额位居第二.^([]) 域名系统负责将域名,如unorthodocs.net,转换为可路由的 IP 地址,如 69.226.238.99。它被认为是互联网最关键组件之一。
^([]) 请参阅互联网系统联合公司持续调查的结果
www.isc.org/ds。
BIND 版本 9 是对 BIND 包的全面重写,解决了先前版本中的架构问题和已知的安全问题。BIND 9 的新特性包括 DNS 安全(DNSSEC)、多处理器支持、IPv6 支持、协议增强和更好的可移植性。
BIND 还支持动态 DNS 更新(根据 RFC 2136)。当与互联网系统联合公司的 DHCP 服务器结合使用时,动态 DNS 允许在 DHCP 客户端加入网络时实时更新 DNS 服务器的区域文件。这为 DHCP 客户端提供了拥有本地或公开可解析的主机名的便利。
BIND 最初是在 20 世纪 80 年代初加州大学伯克利分校的一个研究生项目中被构思的。加州大学伯克利分校与数字设备公司合作开发 BIND 几年。数字设备公司的保罗·维克斯后来成为 BIND 项目的首席程序员。BIND 被转交给互联网系统联合公司(ISC),这是一个由维克斯领导的非营利性公司,他现在继续独立开发 BIND 系统。
我们将为您的域名构建一个本地主授权域名服务器。这还将提供缓存域名服务器的优势。缓存域名服务器基本上是一个 DNS 中继器:它没有自己的区域文件,必须从其他 DNS 服务器(也称为转发器)获取 DNS 信息。授权和缓存域名服务器都将 DNS 查询存储在缓存中,以使后续请求更快。
一个主授权域名服务器也有一个用于您域名的区域文件(已知 IP 地址列表)。当接收到对您域名的 DNS 查询时,BIND 会查看您的区域文件并返回所需信息。如果查询的是除您域名之外的其他域名,查询将被转发到您转发器配置中指定的其他 DNS 服务器。
第十章. ISC BIND DNS 服务器 9.4.2
HTTP://WWW.ISC.ORG/SW/BIND
10.1. 概述
BIND(伯克利互联网名称域)是互联网上最广泛使用的 DNS 服务器应用程序。根据互联网系统协会(ISC)在 2007 年 7 月进行的一项调查,略超过 79%的 DNS 服务器使用 BIND DNS,微软以 16%的份额位居第二。[^([])] 域名系统负责将域名,如unorthodocs.net,转换为可路由的 IP 地址,如 69.226.238.99。它被认为是互联网最关键组件之一。
^([]) 请参阅互联网系统协会持续调查的结果
www.isc.org/ds。
BIND 版本 9 是对 BIND 软件包的全面重写,解决了先前版本中的架构问题和已知的安全问题。BIND 9 的新特性包括 DNS 安全(DNSSEC)、多处理器支持、对 IPv6 的支持、协议增强和更好的可移植性。
BIND 还支持动态 DNS 更新(根据 RFC 2136)。当与互联网系统协会的 DHCP 服务器结合使用时,动态 DNS 允许在 DHCP 客户端加入网络时实时更新 DNS 服务器的区域文件。这为 DHCP 客户端提供了拥有本地或公开可解析的主机名的便利。
BIND 最初是在 20 世纪 80 年代初加州大学伯克利分校的一个研究生项目中被构思的。加州大学伯克利分校与数字设备公司合作开发 BIND 几年。数字设备公司的保罗·维克斯后来成为 BIND 项目的首席程序员。BIND 被转交给互联网系统协会(ISC),这是一个由维克斯领导的非营利性组织,他现在继续独立开发 BIND 系统。
我们将为您的域名构建一个本地主授权域名服务器。这还将提供缓存域名服务器的优势。缓存域名服务器基本上是一个 DNS 中继:它没有自己的区域文件,必须从其他 DNS 服务器(也称为转发器)获取 DNS 信息。授权和缓存域名服务器都将 DNS 查询存储在缓存中,以使后续请求更快。
主授权域名服务器也有一个区域文件(已知 IP 地址列表)用于您的域名。当接收到对您域名的 DNS 查询时,BIND 会查看您的区域文件并返回所需信息。如果查询的是除您域名外的域名,则查询会被转发到您转发器配置中指定的其他 DNS 服务器。
10.2. 资源
BIND 9 管理员参考手册
RFC 1034 - 域名:概念和功能
RFC 1035 - 域名:实现和规范
FreeBSD 手册
www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-dns.html
10.3. 必需
FreeBSD 7.0-RELEASE(见“FreeBSD 7.0”)
更新的 ports 集合(见“FreeBSD Ports Collection”)
互联网连接
注册域名
公共或私有静态 IP 地址
您的 ISP 的 DNS 服务器地址
10.4. 可选
DHCP 服务器(见“ISC DHCP Server 3.0.5”)
10.5. 准备
-
成为超级用户。
-
BIND 9.4.2 是 FreeBSD 7.0 标准发行版的一部分。使用以下命令检查 ports 集合中可用的 BIND 当前版本:
# cat /usr/ports/dns/bind94/Makefile | grep PORTVERSION
如果这个版本取代了 9.4.2,请继续下面的“安装”部分。如果它与 9.4.2 相同,请跳转到“配置”。
10.6. 安装
要使用 ports 集合中可用的版本覆盖 BIND 的基础安装,请使用以下命令:
# cd /usr/ports/dns/bind94
# make config ; make install clean
应该会出现一个菜单,显示 bind94 的选项。按[空格键]选择 REPLACE_BASE 选项;保留其他选项的默认值。按[tab 键]选择 OK,然后按[回车键]继续安装过程。
10.7. 配置
安装过程完成后,是时候为您的系统配置 BIND 了。
-
将
"NO_BIND = YES"语句添加到位于/etc 的 make.conf 文件中。以下命令将此语句追加到 make.conf 或创建文件(如果不存在):# cp /etc/make.conf /etc/make.conf.old # echo "NO_BIND = YES" >> /etc/make.conf这告诉
make命令在从源代码重新构建 FreeBSD 时不要构建基础版本的 BIND,防止系统将 BIND 降级到那个较旧版本。 -
我们需要编辑位于/var/named/etc/namedb 的 named.conf 文件。打开文件:
# ee /var/named/etc/namedb/named.conf -
滚动并使用两个前置斜杠(
//)注释掉listen-on声明。这允许 BIND 的 named 守护进程回答外部和本地 DNS 查询;默认行为是只回答本地查询。这一行(约 21 行)应如下所示:// listen-on { 127.0.0.1; }; -
滚动并移除
forwarders声明上方的斜杠和星号(/*)。将*127.0.0.1*替换为您的 ISP 的名称服务器。使用分号(;)分隔名称服务器条目。同时移除forwarders声明后面的星号和斜杠(*/)。forwarders声明(约 43-47 行)应如下所示(当然,您的 IP 地址将不同):forwarders { 202.13.68.62;68.103.31.52; }; -
滚动到 named.conf 的底部,并添加以下行以添加您的正向查找区域(用您的域名替换 example.com):
zone "*example.com*" { type master; file "*master*/example.com"; allow-transfer { localhost; }; allow-update { key rndc-key; }; };
注意: BIND 的一个功能称为动态 DNS 更新,允许 BIND 和 ISC DHCP 服务器协同工作,并在客户端加入和离开您的本地网络时自动添加/删除区域文件中的条目。如果您想启用 ISC DHCP 的动态 DNS 更新,则将上述代码中的斜体
master(在*file*行中)更改为dynamic。有关 ISC DHCP 服务器的详细信息,请参阅 "ISC DHCP Server 3.0.5"。
-
如果您直接连接到互联网(没有 NAT 路由器)并且有一个动态的公共 IP 地址,则跳到步骤 8。如果您直接连接到互联网并具有静态 IP 地址或位于 NAT 路由器后面的静态本地 IP 地址,请在步骤 5 中指定的正向查找区域下方添加以下行。这将定义您的反向查找区域。
zone "1.168.192.in-addr.arpa" { type master; file "*master*/example.com.rev"; allow-transfer { localhost; }; allow-update { key rndc-key; }; };将您的服务器静态 IP 地址的前三个八位字节以反序替换为
*1.168.192*。如果您的本地网络使用 IP 子网 192.168.1.XXX,则上述示例是正确的。用您的域名替换 example.com。
注意: 如果您计划启用动态 DNS 更新(需要 ISC DHCP),则将上述代码中的斜体
master(在*file*行中)更改为dynamic。
-
记录反向区域名称(在本例中为
1.168.192.in-addr.arpa)。你稍后创建反向区域文件时会需要它。保存并退出。 -
创建 rndc.key 文件,并将其内容追加到 named.conf 文件的底部。rndc.key 文件是 rndc 实用程序需要的功能密钥;它还用于在通信动态 DNS 更新时对 DHCP 服务器进行身份验证。以下命令将创建密钥并将其追加到 named.conf:
# rndc-confgen -a # cd /var/named/etc/namedb # cp named.conf named.conf.old # cat rndc.key >> named.conf -
创建主正向查找区域文件。将 example.com 替换为您的域名;它必须与步骤 5 中指定的域名匹配。
# cd /var/named/etc/namedb/master # ee example.com这是 example.com 的正向查找区域文件,以下是每行的解释:
$TTL 3600 *example.com*. IN SOA *host.example.com*. *root*.*example.com*. ( 1 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL ;DNS Servers *example.com*. IN NS *host.example.com*. ;Machine Names *host.example.com*. IN A *192.168.1.11* ;Aliases www IN CNAME *host.example.com*. ;MX Record *example.com*. IN MX 10 *host.example.com*.
注意: BIND 忽略以分号(
;)开头的任何行。
$TTL 3600TTL(或生存时间)为 3,600 秒。这是其他 DNS 服务器应从该区域缓存信息的时间长度。
*example.com.* IN SOA *host.example.com.* *root.example.com.* (example.com. 是正向区域名称。
IN是一个表示互联网数据的 数据类型。SOA代表授权开始。host.example.com. 是持有此区域文件的计算机的计算机名。
root.example.com. 是负责该区域的人员的电子邮件地址(在区域文件中,
@符号用于表示区域名称,因此在电子邮件地址中使用点来分隔用户名和域名)。(左括号表示 SOA 记录的开始。1 ; Serial序列号是一个你可以选择的数字;通常每次你更改区域文件时都会增加一。你也可以使用日期(格式为
YYYYMMDD)。10800 ; Refresh如果配置了从服务器,这是它等待多长时间后联系主服务器进行更新的秒数。
3600 ; Retry如果从服务器失去联系,它会等待多长时间后重试连接到主服务器。
604800 ; Expire如果从服务器在此时间内无法联系到主服务器,它将停止回答 DNS 查询。
86400 ) ; Minimum TTL这是负回答缓存的秒数。如果客户端尝试解析一个不存在的域名,服务器将在此时间耗尽之前一直给出负回答,然后才尝试再次解析地址。
;DNS Servers *example.com.* IN NS *host.example.com.*example.com 是正向区域的名称或域名。
NS是一个记录类型,表示域名服务器。host.example.com 是域名服务器的全限定域名。(结尾的点号表示 FQDN 是绝对的;如果没有它,named 会自动将其添加为example.com——所以不要忘记点号。)
;Machine Names *host.example.com.* IN A *192.168.1.11*host.example.com 是域名上主机的全限定域名。
A是一个记录类型,表示主机地址。*192.168.1.11*是主机的 IP 地址(IP 地址不需要终止点号;它们被认为是绝对的)。;Aliases www IN CNAME *host.example.com.*www是域名上别名主机的全限定域名。(注意www后面没有点号;named 会自动添加域名example.com。如果你觉得这很困惑,你可以在这里简单地输入www.example.com.。)CNAME是一个记录类型,表示别名的规范名称。host.example.com 是别名的主机实际主机名。
;MX Record *example.com.* IN MX 10 *host.example.com.*example.com 是 MX 的域名。
MX是一个记录类型,表示邮件交换。*10*是指定邮件服务器的优先级。(发往你域的电子邮件将首先被导向优先级最高的邮件服务器,然后是优先级较低的邮件服务器;数字越小优先级越高。)host.example.com 是邮件服务器的全限定域名(没有 IP 地址)。
注意: 请务必仔细检查正向查找区域文件的拼写、标点符号和语法。如果区域文件包含错误,BIND 将无法正确运行。
-
当你完成创建正向查找区域文件后,保存并退出。
-
我们将构建名为 example.com.rev 的反向查找区域文件。如果你在 named.conf 中没有指定(步骤 6),请跳转到 "测试"。此文件包含与正向查找区域文件相同的基本信息。所有
A和CNAME记录类型现在变为PTR记录。将 example.com 替换为你的域名;它必须与步骤 5 中指定的域名匹配。# ee example.com.rev这是在
/var/named/etc/namedb/master目录下的 example.com.rev 反向查找区域文件,随后是对之前未涵盖的项目进行解释:$TTL 3600 *1.168.192.in-addr.arpa*. IN SOA *host.example.com*. *root.example.com*. ( 1 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL ;DNS Servers *1.168.192.in-addr.arpa*. IN NS *host.example.com*. ;Machine IPs *11* IN PTR *host.example.com*. *11* IN PTR www.*example.com*.此文件中的元素将在下面详细解释。
*1.168.192.in-addr.arpa*. IN SOA *host.example.com*. *root.example.com*.*1.168.192.in-addr.arpa*``.是反向区域的名称。它应该与你在 named.conf 文件中输入的内容匹配(参考第 76 页的步骤 7)。;DNS Servers *1.168.192.in-addr.arpa*. IN NS *host.example.com*.DNS 服务器的 NS 记录应指向反向区域的名称。这里的
@符号也可以。在 DNS 区域文件的上下文中,@符号代表区域的名称。;Machine IPs *11* IN PTR *host.example.com*.11是 host.example.com IP 地址的最后一个八位字节。PTR是一个表示指针的记录类型。注意上面的
*11*并不以句号结尾。它将被自动添加到该文件的区域名称前(1.168.192.in-addr.arpa.)。结果将使 host.example.com 指向反向 IP*11*``.1.168.192.in-addr.arpa.。当你的反向区域文件完成时,保存并退出。 -
如果你将不会启用动态 DNS 更新,请跳转到 "测试"。BIND 预期正向和反向区域文件存储在
/var/named/etc/namedb/dynamic目录中。像这样将这些两个区域文件复制到/var/named/etc/namedb/dynamic目录:# cd /var/named/etc/namedb/master # cp example.com ../dynamic # cp example.com.rev ../dynamic # chown -R bind /var/named/etc/namedb/dynamic一定要用你的域名替换 example.com。
10.8. 测试
在本节中,我们将执行一些基本测试以确认 BIND 正确回答 DNS 请求。
-
将 resolv.conf 文件中的第一个名称服务器条目修改为指向回环或 localhost 地址(127.0.0.1)。这将强制系统在尝试查询其他 DNS 服务器之前先查询本地 DNS 服务器。
# ee /etc/resolv.conf domain example.comnameserver 127.0.0.1 nameserver 61.32.24.84 nameserver 206.13.22.96
注意: 你可以指定最多三个名称服务器。
保存并退出。
-
配置 named 在启动时自动启动。要使 named 在启动时自动启动,打开
/etc中的 rc.conf 文件:# ee /etc/rc.conf并添加以下行:
named_enable="YES"保存并退出。
-
启动 named 守护进程并执行 DNS 查询测试。
# /etc/rc.d/named start -
对 google.com 执行基本 DNS 查询:
代码视图:
# dig google.com ; <<>> DiG 9.4.1 <<>> google.com. ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 31313 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 246 IN A 72.14.207.99 google.com. 246 IN A 64.233.167.99 google.com. 246 IN A 64.233.187.99 ;; AUTHORITY SECTION: google.com. 339294 IN NS ns2.google.com. google.com. 339294 IN NS ns3.google.com. google.com. 339294 IN NS ns1.google.com. google.com. 339294 IN NS ns4.google.com. ;; ADDITIONAL SECTION: ns4.google.com. 87732 IN A 216.239.38.10 ns1.google.com. 86787 IN A 216.239.32.10 ns2.google.com. 88494 IN A 216.239.34.10 ns3.google.com. 344254 IN A 216.239.36.10 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Jun 7 01:43:03 2008 ;; MSG SIZE rcvd: 212输出末尾的粗体行确认了此 DNS 查询是由本地 DNS 服务器回答的。
-
下一个命令启动了一个名为区域传输的 DNS 查询;这将测试正向查找区域文件(替换你的域名):
# dig example.com axfr ; <<>> DiG 9.4.1 <<>> example.com axfr ;; global options: printcmd example.com. 3600 IN SOA host.example.com. example.com. 3600 IN MX 10 host.example.com. example.com. 3600 IN NS host.example.com. host.example.com. 3600 IN A 192.168.1.11 www.example.com. 3600 IN CNAME host.example.com. example.com. 3600 IN SOA host.example.com. ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Jun 7 09:58:01 2008 ;; XFR size: 6 records (messages 1, bytes 189)虽然你的结果可能会有所不同,但请检查此输出以验证你的 DNS 服务器是否返回了正确的信息。如果你遇到问题,请使用文本编辑器检查 /var/log/messages 中的 named 相关消息和/或错误。大多数问题都是区域文件语法错误。
10.9. 实用程序
以下是关于 rndc 程序的简要信息,该程序用于控制 named 守护进程。
10.9.1. rndc
此实用程序控制名称服务器(named)的操作。
命令
rndc
语法
rndc *选项*
选项
flush
清除 DNS 服务器的缓存
reload
重新加载配置文件和区域
stop
将更新保存到区域文件并停止服务器
status
显示服务器的状态
示例
要刷新 DNS 服务器的缓存:
# rndc flush
10.10. 配置文件
/var/named/etc/namedb/named.conf
named 的主要配置文件
/var/named/etc/namedb/rndc.key
包含 rndc 实用程序用于向 named 发出命令时使用的加密密钥;也用于在应用动态 DNS 更新时验证 ISC 的 DHCP 服务器
10.11. 日志文件
/var/log/messages
包含由 named 守护进程产生的错误和状态消息
10.12. 注意事项
-
如果你打算运行自己的公共权威性互联网 DNS 服务器,你需要从你的互联网服务提供商那里获得一个公共静态 IP 地址(这会花费更多)。你的域名注册商需要这个静态 IP 地址来将你的区域的 DNS 查询转发到你的 DNS 服务器。如果你无法获得或选择不获取公共静态 IP 地址,你需要使用你的域名注册商或第三方的服务来托管你的域名区域的文件。即使没有公共静态 IP 地址,你也可以运行你的 DNS 服务器以在本地(在你的私有网络内)作为权威性服务器。
-
如果你打算运行一个本地权威性 DNS 服务器并且你使用 DHCP 来配置你的网络客户端,请确保修改你的 DHCP 服务器的配置,以便将客户端指向你的服务器的 IP 地址进行 DNS 解析。这将确保你的本地域的客户从你的 DNS 服务器的缓存和区域信息中受益。如果你在 NAT 路由器后面,并且不打算在互联网上以权威性方式使用你的 DNS 服务器,请确保在你的路由器配置中关闭端口 53(这应该是默认设置)。
第十一章. ISC DHCP SERVER 3.0.5
HTTP://WWW.ISC.ORG/SW/DHCP
11.1. 摘要
DHCP(动态主机配置协议)为网络客户端提供了一种自动获取与基于 IP(互联网协议)网络的其它系统通信所需的配置参数的方法。DHCP 服务器通常提供给客户端的参数包括 IP 地址分配、DNS 服务器地址以及默认路由器或网关地址。
当一个客户端系统首次使用 DHCP 加入网络时,它会向本地网络广播一个请求,以获取配置信息。然后 DHCP 服务器用 DHCP 服务器配置文件中设置的参数来回答这个请求。客户端系统将这个分配的配置应用到其网络接口上,以便与网络通信。
DHCP 服务器通常以两种方式之一分配 IP 地址:静态或动态。静态方法根据客户端的硬件 MAC(媒体访问控制)地址分配 IP 地址给客户端。这个 IP 地址不会改变。动态 IP 地址分配是一个租用地址。DHCP 服务器从管理员设置的地址池或范围内分配这些地址。当客户端从网络断开连接时,动态 IP 地址会返回到池中。如果相同的客户端重新加入网络,如果之前分配的地址不可用,它可能会被分配一个不同的 IP 地址。
DHCP(动态主机配置协议)首次于 1993 年 10 月出现,作为 BOOTP(引导协议)的替代品。ISC 的 DHCP 服务器第 1 版由 Ted Lemon 于 1997 年 12 月发布。ISC 的 DHCP 实现仍然是最受欢迎和最健壮的开源 DHCP 解决方案之一。
第十一章. ISC DHCP 服务器 3.0.5
HTTP://WWW.ISC.ORG/SW/DHCP
11.1. 摘要
DHCP(动态主机配置协议)为网络客户端提供了一种自动获取与基于 IP(互联网协议)网络的其它系统通信所需配置参数的方法。DHCP 服务器通常提供给客户端的参数包括 IP 地址分配、DNS 服务器地址以及默认路由器或网关地址。
当客户端系统首次使用 DHCP 加入网络时,它会向本地网络广播一个请求以获取配置信息。然后 DHCP 服务器用 DHCP 服务器配置文件中设置的参数回答此请求。客户端系统将此分配的配置应用到其网络接口,以便与网络通信。
DHCP 服务器通常以两种方式之一分配 IP 地址:静态或动态。静态方法根据客户端的硬件 MAC(媒体访问控制)地址分配 IP 地址给客户端。这个 IP 地址不会改变。动态 IP 地址分配是一个租用地址。DHCP 服务器从管理员设置的池或范围内分配这些地址。当客户端从网络断开连接时,动态 IP 地址会返回到池中。如果相同的客户端重新连接到网络,如果之前分配的地址不可用,它可能会被分配一个不同的 IP 地址。
DHCP 首次于 1993 年 10 月作为 BOOTP(引导协议)的替代品出现。ISC 的 DHCP 服务器 1.0 版本由 Ted Lemon 于 1997 年 12 月发布。ISC 的 DHCP 实现仍然是最受欢迎和最稳健的开源 DHCP 解决方案之一。
11.2. 资源
Ted Lemon 关于 ISC DHCP 分发的论文(日期为 1998 年)
www.isc.org/sw/dhcp/dhcp-freenix.php
ISC DHCP 版本 3 README
http://www.isc.org/sw/dhcp/dhcpv3-README.php
RFC 1541 - 动态主机配置协议
http://tools.ietf.org/html/rfc1541
FreeBSD 手册
www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/network-dhcp.html
11.3. 必需
FreeBSD 7.0-RELEASE(见 "FreeBSD 7.0")
更新的端口集合(见 "FreeBSD 端口集合")
互联网连接
您的 ISP 的 DNS 服务器地址
路由器或默认网关的 IP 地址;要查找此信息:
# netstat -rn | grep default
11.4. 可选
如果您希望启用动态 DNS 更新(请参阅 "ISC BIND DNS Server 9.4.2")
11.5. 准备
如果您计划运行自己的 DNS 服务器,请在开始本指南之前安装和配置它。成为超级用户。
11.6. 安装
要开始 ISC DHCP 服务器安装过程,请输入以下命令:
# cd /usr/ports/net/isc-dhcp3-server
# make config ; make install clean
# rehash
将出现一个选项菜单。保留这些选项的默认设置(除非您有特殊需求需要更改它们),按 [tab] 键高亮显示“确定”,然后按 [enter] 键。
11.7. 配置
安装过程完成后,是时候配置 DHCP 以在您的系统上使用了。
-
我们需要将默认配置文件 dhcpd.conf.sample 复制到名为 dhcpd.conf 的新文件中。然后我们将打开它并自定义 DHCP 服务器的配置。输入以下命令以进行复制并打开文件进行编辑:
# cd /usr/local/etc # cp dhcpd.conf.sample dhcpd.conf # ee dhcpd.conf -
滚动到
domain-name选项,将 example.org 替换为您的域名。将 ns1.example.org 和 ns2.example.org 替换为您希望 DHCP 服务器分配给客户端的 DNS 服务器 IP 地址。您可以使用自己的 DNS 服务器 IP 地址,或使用您的 ISP 的 IP 地址。如果您的域名是 example.com 且您的 DNS 服务器 IP 地址是*192.168.1.11*和*61.32.24.84*,则这两行(约第 7 行)将如下所示:option domain-name "*example.com*"; option domain-name-servers *192.168.1.11*, *61.32.24.84*; -
滚动并取消注释
authoritative指令,通过删除前面的井号(#)使其成为权威的 DHCP 服务器。该行(约第 15 行)应如下所示:authoritative;
注意: 确保网络上没有其他 DHCP 服务器。大多数路由器都内置了 DHCP 服务器;在开始 "Testing" 之前将其禁用。
-
滚动到
ddns-update-style选项,将ad-hoc更改为none以禁用动态 DNS 更新。要启用动态 DNS 更新,请将其更改为interim(您必须有一个配置了动态 DNS 更新的本地 BIND DNS 服务器才能使此选项生效)。如果启用了动态 DNS 更新,该行(约第 18 行)应如下所示:ddns-update-style *interim*; -
滚动到第二个子网声明(约第 32 行)。您应该看到以下内容:
subnet 10.254.239.0 netmask 255.255.255.224 { range 10.254.239.10 10.254.239.20; option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; }这些行指定了将分配给 DHCP 客户端的 IP 地址子网、子网掩码、范围和路由器。修改这些行以适应您希望的网络设置。例如,我们将使用
subnet*192.168.1.0*和netmask*255.255.255.0*。我们将设置 DHCP IPrange从*192.168.1.12*到*192.168.1.62*。我们将假设路由器(默认网关)的 IP 地址是*192.168.1.1*。修改上述行后,我们现在有以下内容:subnet *192.168.1.0* netmask *255.255.255.0* { range *192.168.1.12* *192.168.1.62*; option routers *192.168.1.1*; } -
默认情况下,dhcpd.conf 文件包含许多示例行,应将其注释掉或删除。为了简化,请删除上述子网声明之后的所有后续行。
-
下两个部分是可选的。第一个解释了如何设置静态 IP 地址,以便某些 DHCP 客户端始终接收相同的 IP 地址;第二个启用动态 DNS 更新。为了使后者生效,请确保 BIND DNS 服务器已配置为动态 DNS 更新。有关详细信息,请参阅第 73 页的“ISC BINDDNS Server 9.4.2”。如果您不想配置这些选项中的任何一个,可以跳到相应的部分或保存、退出并继续到“测试”。
11.7.1. 静态 IP 地址分配
本节展示了如何将静态 IP 地址分配给 DHCP 客户端。这对于像网络连接打印机这样的设备很有用。
-
要通过 DHCP 将静态(或固定)IP 地址分配给主机(计算机),请获取其硬件 MAC 地址。MAC 地址可以通过多种方式获取。在 FreeBSD 和 Macintosh OS X 系统上,使用
ifconfig命令(在 Macintosh 上,启动终端程序并在提示符下输入**ifconfig**)。每个接口的 MAC 地址将跟随ether语句。在 Windows 系统上,在命令提示符下使用ipconfig /all命令;每个相应接口的 MAC 地址将列在Physical Address之后。 -
将以下行添加到 dhcpd.conf 文件的末尾。将desktop01.example.com替换为目标系统的主机名、其 MAC 地址以及您希望分配的 IP 地址。静态 IP 声明应如下所示:
host *desktop01.example.com* { hardware ethernet *08:00:07:26:c0:a5*; fixed-address *192.168.1.10*;}
注意: 如果您有一个具有区域 DNS 查找文件中适当条目的授权 DNS 服务器,
fixed-address也可以是一个 FQDN。不要分配属于动态分配 IP 地址范围内 IP 地址的 IP 地址。在上面的示例配置中,声明的范围是从 192.168.1.12 到 192.168.1.62;因此 192.168.1.10 是可以接受的,而 192.168.1.13 则不行。
您可以使用与上面相同的格式添加多个静态 IP 地址分配。要启用动态 DNS 更新,请继续下一节;否则保存、退出并跳转到“测试”。
11.7.2. 动态 DNS 更新
本节展示了如何使用 ISC BIND DNS 服务器启用动态 DNS 更新。
-
将 rndc.key 文件的内容复制到 dhcpd.conf 文件中。这将允许 DHCP 守护进程在需要更新时加密与 DNS 服务器的通信。以下命令将 rndc.key 的内容追加到 dhcpd.conf 中,假设 rndc.key 文件位于其默认位置:
# cd /usr/local/etc # cp dhcpd.conf dhcpd.conf.old # cat /var/named/etc/namedb/rndc.key >> dhcpd.conf -
将两个区域声明添加到 dhcpd.conf 文件的底部。如果 dhcpd.conf 尚未打开,请输入:
# ee /usr/local/etc/dhcpd.conf使用[ctrl-U]滚动到 dhcpd.conf 文件的底部并添加以下行:
zone *example.com*. { primary *192.168.1.11*; key rndc-key; } zone 1.168.192.in-addr.arpa. { primary *192.168.1.11*; key rndc-key; }将example.com和
*1.168.192.in-addr.arpa.*替换为您正向和反向查找区域文件的名称。上述 IP 地址应指向您的 BIND DNS 服务器(如果 DNS 服务器位于同一计算机上,您可以使用 127.0.0.1)。如果您没有创建反向查找区域文件,则只需省略反向区域声明。 -
如果您设置了任何静态 IP 分配,请将以下行添加到 dhcpd.conf 中。这将允许 DHCP 更新 DNS 以静态分配。
update-static-leases on;保存并退出。
11.8. 测试
在本节中,我们将执行一些基本测试以确认 DHCP 服务器正确响应 DHCP 请求。
-
如果您的网络中已存在 DHCP 服务器,请在继续之前将其禁用。大多数消费级 NAT 路由器都内置了 DHCP 服务器,并且默认开启。以下命令将以调试模式启动 DHCP 服务器;这允许您实时查看 DHCP 消息。
# dhcpd -f -d打开并连接一个客户端系统到网络,并注意查看
DHCPREQUEST后跟DHCPACK。您应该看到实时的 DHCP 请求和确认。如果客户端系统已经运行,您可以通过重启来强制 DHCP 更新。由于
DHCPREQUEST和DHCPACK响应包含分配的 IP 地址和 MAC 地址,因此如果您配置了静态 IP 分配,您应该能够验证它们。要退出此模式,请按[ctrl-C]。 -
如果您启用了动态 DNS 更新,请尝试使用
host命令使用主机名解析客户端 IP 地址。假设名为*desktop01*的计算机之前未在 DNS 区域文件中声明,您可以使用以下命令解析其 IP 地址:# host desktop01.example.com desktop01.example.com has address 192.168.1.13如果您收到“找不到主机”的消息,请验证通过重启计算机或使用操作系统特定的实用程序强制续订来更新该计算机的 DHCP 租约。此外,在排除故障时,请检查位于/var/log 的消息日志文件中 named 或 dhcpd 的错误。
-
配置 DHCP 服务器在启动时自动启动。为此,打开位于/etc 的 rc.conf 文件:
# ee /etc/rc.conf并添加以下行:
dhcpd_enable="YES"使用此命令保存、退出并启动 DHCP:
# /usr/local/etc/rc.d/isc-dhcpd start
11.9. 配置文件
/usr/local/etc/dhcpd.conf
dhcpd 的主配置文件
11.10. 日志文件
/var/db/dhcpd.leases
dhcpd 已分配的租约数据库
/var/log/messages
包含 dhcpd 守护进程的错误和状态消息
第十二章. LYNX 2.8.6
HTTP://LYNX.ISC.ORG
12.1. 摘要
Lynx 是一种基于文本的网页浏览器,能够访问互联网资源或本地文件系统上的内容。它作为开源软件,在 GNU 通用公共许可证下分发。Lynx 支持通过 http、gopher、ftp、wais、nntp、finger 和 telnet 协议进行连接。支持带有 SSL 的安全 HTTP。
突出显示是通过键盘箭头键而不是鼠标完成的。一旦一个超链接被突出显示,可以通过按 [enter] 键来跟随。
Lynx 最初是堪萨斯大学在 1989 年的一个项目。该大学希望创建一个校园范围内的信息系统。Lynx 是作为这个信息共享项目的接口开发的。使用不支持图形界面的基于 Unix 的控制台连接到校园网络。Lynx 的早期版本支持专有超文本格式;在添加了对 HTML 的支持后,这个特性随后被取消。
Lou Montulli、Charles Rezac 和 Michael Grobe 是堪萨斯大学 Lynx 的最初设计者。他们后来转向了其他追求。1994 年,Lynx 被一支国际志愿者团队采用;他们至今仍在继续 Lynx 的发展。
第十二章. LYNX 2.8.6
HTTP://LYNX.ISC.ORG
12.1. 摘要
Lynx 是一个基于文本的网页浏览器,能够访问互联网资源或本地文件系统上的内容。它作为开源软件在 GNU 通用公共许可证下发行。Lynx 支持通过 http、gopher、ftp、wais、nntp、finger 和 telnet 协议进行连接。支持带有 SSL 的安全 HTTP。
使用键盘箭头键而不是鼠标进行高亮显示。一旦高亮显示了一个超链接,可以通过按[enter]键来访问。
Lynx 最初是堪萨斯大学在 1989 年的一个项目。该大学希望创建一个校园范围内的信息系统。Lynx 是作为这个信息共享项目的接口开发的。使用不支持图形界面的基于 Unix 的控制台连接到校园网络。Lynx 的早期版本支持专有超文本格式;在添加了对 HTML 的支持后,该功能随后被取消。
Lou Montulli、Charles Rezac 和 Michael Grobe 是在堪萨斯大学设计 Lynx 的初始设计师。他们后来转向了其他追求。Lynx 于 1994 年被一个国际志愿者团队采用;他们至今仍在继续 Lynx 的开发。
12.2. 资源
Lynx 用户指南
lynx.isc.org/current/lynx2-8-7/lynx_help/Lynx_users_guide.html
12.3. 必需的
(请参阅“FreeBSD 7.0”)
(请参阅“FreeBSD 端口集合”)

12.4. 准备
成为超级用户。
12.5. 安装
要开始 Lynx 安装过程,请输入以下命令:
# cd /usr/ports/www/lynx
# make install clean
# rehash
12.6. 配置
本节配置 Lynx 以使用 SSL 加密的 HTTP 连接。如果您不需要或不想使用此功能,您可以通过键入以下命令开始使用 Lynx:
# lynx
为了避免访问 SSL 加密的网站时出错,需要在 /usr/local/openssl/certs 目录中存在一个名为 cert.pem 的文件,该文件包含受信任的根认证机构的公共证书。此文件可以通过从另一个操作系统(即 Microsoft Windows XP 或 Macintosh OS X)导出现有的受信任根证书集合来构建。
12.6.1. Microsoft Windows XP
从 Windows XP 系统导出受信任的根证书:
-
点击“开始”菜单并打开控制面板。
-
双击“Internet 选项”图标。
-
点击“内容”选项卡,然后点击“证书...”按钮。
-
点击“受信任的根认证机构”选项卡。
-
点击列表中的第一个条目,然后滚动到列表的末尾。在按住 [shift] 键的同时,点击列表中的最后一个条目。这将选择列表中的所有证书。
-
点击向导欢迎屏幕上的下一步 > 并点击导出按钮。
-
点击浏览...按钮,并将文件保存为 cert.p7b 到您选择的存储位置。
-
当返回到文件名提示时,点击下一步 >。
-
点击完成以完成导出。
-
使用 SFTP 或类似文件传输工具将 cert.p7b 文件复制到您的 FreeBSD 系统上的 /usr/local/openssl/certs 目录(有关 SFTP 的详细信息,请参阅 "OpenSSH 服务器 4.7p1")。
-
一旦 cert.p7b 文件位于正确的位置,运行以下命令将其转换为所需的 PEM(增强隐私邮件)格式:
# cd /usr/local/openssl/certs # openssl pkcs7 -inform DER -in cert.p7b -print_certs -text -out cert.pem您现在应该能够安全地连接到 Microsoft "信任"的网站,而不会出现 Lynx SSL 错误。
12.6.2. Macintosh OS X
要从 Macintosh OS X 系统导出受信任的根证书:
-
打开应用程序文件夹。
-
双击实用工具文件夹并启动钥匙串访问。
-
在钥匙串面板(左上角)中点击 X509Anchors。
-
在主窗口中点击任何证书条目。按住 [command] 键 (
) 并按 A 键以选择所有证书。
-
点击文件菜单并选择导出...
-
将文件命名为 cert.pem,指定一个您选择的存储位置(确保文件格式设置为增强隐私邮件),然后点击保存。
-
使用 SFTP 或类似文件传输工具将此文件复制到您的 FreeBSD 系统上的 /usr/local/openssl/certs 目录(有关 SFTP 的详细信息,请参阅 "OpenSSH 服务器 4.7p1")。
您现在应该能够安全地连接到 Apple "信任"的网站,而不会出现 Lynx SSL 错误。
12.7. 工具
以下是对 Lynx 程序的简要信息。
12.7.1. lynx
Lynx 是一个基于文本的万维网浏览器,设计用于在命令行中使用。它用于阅读 HTML 格式的文档、浏览网页或测试。
命令
lynx
语法
lynx *目标*
示例
要在默认启动页面上启动 Lynx,请输入:
# lynx
要查看 Lynx 用户指南的本地副本,请输入:
# lynx /usr/local/share/lynx_help/Lynx_users_guide.html
要使用 Lynx 访问 Google 主页,请输入:
# lynx http://www.google.com
要浏览 ftp.freebsd.org,请输入:
# lynx ftp://ftp.freebsd.org
12.8. 配置文件
/usr/local/etc/lynx.cfg
Lynx 的主要配置文件
.lynxrc
位于每个用户主目录中的 Lynx 用户默认设置文件
第十三章. MEDIAWIKI 1.11.1
HTTP://MEDIAWIKI.ORG
13.1. 摘要
MediaWiki 是一个用 PHP(PHP:超文本预处理器)编写的开源维基实现。它使用 MySQL 数据库来存储内容。Wikiwiki 是一个夏威夷语单词,意为快速。在技术意义上,维基是一个用户可以修改内容的协作网站。MediaWiki 目前为维基百科提供动力,维基百科是一个由志愿者编写的流行免费内容百科全书。
维基允许用户在页面上共同创作内容,而无需 HTML 技能或管理权限。编辑 MediaWiki 页面比编辑典型的 HTML 页面简单。这是通过 Wikitext 格式实现的,它使用简化的语法和类似文字处理器的易于理解的工具栏。当用户向维基页面提交编辑时,MediaWiki 会保存更改以及之前的版本。这允许手动回滚,这对于对抗破坏和纠正其他用户发现的不准确信息非常有用。
现今被称为 MediaWiki 的软件在 2002 年 1 月创建时没有名字,直到 2003 年中期的公开发布。科隆大学的本科生 Magnus Manske 为其专门为维基百科编写,以取代基于 Perl 的 UseModWiki 引擎。他开发的程序将内容存储在关系数据库中(即 MySQL),这比传统的平面文件系统提供了更多的功能。后来,Lee Daniel Crocker 重写了软件以解决可扩展性问题。Brion Vibber 最终接任首席开发者,2003 年中旬,维基媒体基金会将项目命名为 MediaWiki 并向公众发布了软件。
第十三章. MEDIAWIKI 1.11.1
MEDIAWIKI.ORG
13.1. 摘要
MediaWiki 是一个用 PHP (PHP: Hypertext Preprocessor) 编写的开源维基实现。它使用 MySQL 数据库来存储内容。Wikiwiki 是夏威夷语,意为快速。在技术意义上,维基是一个用户可以修改内容的协作网站。MediaWiki 目前为 Wikipedia 提供动力,这是一个由志愿者编写的流行免费内容百科全书。
维基允许用户在页面上协同创作内容,无需 HTML 技能或管理权限。编辑 MediaWiki 页面比编辑典型的 HTML 页面简单。这是通过 Wikitext 格式实现的,它使用简化的语法和易于理解的类似文字处理器的工具栏。当用户向维基页面提交编辑时,MediaWiki 会保存更改以及之前的版本。这允许手动回滚,这对于对抗破坏和纠正其他用户发现的不准确信息非常有用。
现今被称为 MediaWiki 的软件在 2002 年 1 月创建时没有名字,直到 2003 年中期的公开发布。科隆大学的本科生 Magnus Manske 为 Wikipedia 编写了它,以替换基于 Perl 的 UseModWiki 引擎。他开发的程序将内容存储在关系数据库中(即 MySQL),这比传统的平面文件系统提供了更多的功能。Lee Daniel Crocker 后来重写了软件以解决可扩展性问题。Brion Vibber 最终接任首席开发者,2003 年中期,维基媒体基金会将项目命名为 MediaWiki 并向公众发布了软件。
13.2. 资源
MediaWiki 文档
www.mediawiki.org/wiki/Documentation
13.3. 需求
FreeBSD 7.0-RELEASE (参见 "FreeBSD 7.0")
更新的端口集合(参见 "FreeBSD Ports Collection")
Apache HTTP 服务器(参见 "Apache HTTP Server 2.2.8")
PHP 5 (参见 "PHP 5.2.5")
MySQL 5 (参见 "MySQL Server 5.0.51")
网络连接
注册域名
13.4. 准备
-
成为超级用户。
-
在 MySQL 中创建一个名为 mediawiki 的数据库。创建一个名为 mediawiki 的用户,并授予此用户如下权限:
# mysql -u root -p mysql> create database mediawiki; mysql> grant all on mediawiki.* to -> mediawiki@localhost identified by 'password'; mysql> quit将
*密码*替换为你选择的密码(需要单引号)。你稍后会需要这个密码。
13.5. 安装
输入以下命令以启动 MediaWiki 安装:
# cd /usr/ports/www/mediawiki
# make config ; make install clean
将出现一个菜单,包含 mediawiki 的选项。我们将保留它们的默认设置,因此按 [tab] 键选择“确定”,然后按 [enter] 键继续。
13.6. 配置
安装过程完成后,是时候为你的系统配置 MediaWiki 了。
-
创建一个 MediaWiki 特定的 Apache 配置文件。这指向 Apache 正确的 MediaWiki 文件位置,并通过将 MediaWiki 特定的选项与主 httpd.conf 文件分开来简化管理。默认情况下,Apache 在 /usr/local/etc/apache22/Includes 目录中搜索配置文件。为 MediaWiki 创建配置文件:
# ee /usr/local/etc/apache22/Includes/mediawiki.conf并添加以下行:
Alias /*mediawiki* "/usr/local/www/mediawiki/" <Directory "/usr/local/www/mediawiki/"> Options Indexes FollowSymLinks AllowOverride NoneOrder allow,deny Allow from all </Directory>
注意: 默认情况下,MediaWiki 被设置为你的 web 服务器根目录的子目录。这意味着你需要在网页浏览器中输入
host.example.com/mediawiki。如果你想要更改默认目录,将配置文件中添加的代码后的*Alias*之后的mediawiki(斜体)替换为不同的名称。
保存并退出。重启 Apache 以提交更改:
# /usr/local/etc/rc.d/apache22 restart -
在你喜欢的网页浏览器中打开
host.example.com/mediawiki(如果你修改了它,请替换你的主机名和目录)。 -
你应该会看到 MediaWiki 标志以及一个标题为“设置维基”的链接。点击此链接开始配置过程。MediaWiki 1.11.1 安装页面将列出有关你的服务器环境的详细信息。
-
此页面上大约有 20 个不同的配置选项。大多数选项都有很好的解释。以下选项应仔细输入,以确保维基的正常功能:
维基名称
确保在这里为你的维基设置一个名称。不要使用 MediaWiki 这个名称,否则你的维基会以通用方式宣传自己而不是具体名称。
管理员用户名
选择你希望分配给维基管理员的用户名和密码(记住或记录此信息,因为你稍后需要用它来维护网站)。
SQL 服务器主机
这应该是本地主机,除非你的 MySQL 服务器位于另一个系统上。
数据库名称
将此设置为 mediawiki。
数据库用户名
将此设置为 mediawiki。
数据库密码
将此设置为创建数据库时分配的密码(参见“准备”)。
-
当你对已设置的选项满意时,点击页面底部的“安装 Media Wiki!”继续。
-
你应该会看到与所设置选项相关的注释。最后一行应说“安装成功!”。
-
将 LocalSettings.php 文件移动到主 MediaWiki 目录中。应设置正确的权限以避免暴露其中包含的 MySQL 数据库密码。我们还将删除 config 目录以消除与其存在相关的安全风险:
# cd /usr/local/www/mediawiki # mv config/LocalSettings.php . # chmod 640 LocalSettings.php # rm -r config -
您可以通过网页浏览器在
host.example.com/mediawiki(替换您的服务器主机名)访问您的 wiki。
13.7. 管理
使用此 URL 来管理您的 MediaWiki 安装(替换您的服务器主机名):
在 MediaWiki 主页上,点击登录(右上角),并输入您的管理员用户名和密码以访问管理员账户。
13.8. 配置文件
/usr/local/www/mediawiki/LocalSettings.php
此文件包含在安装脚本期间记录的配置数据。您可以使用文本编辑器进行修改。
13.9. 备注
您可以通过编辑 LocalSettings.php 文件来编辑 wiki 左上角的标志。在文件底部添加一行,包含以下语句(替换您的主机名和图像文件名):
$wgLogo = "http://host.example.com/logo.gif";
第十四章 MYSQL 服务器 5.0.51
MySQL 官网
14.1. 摘要
MySQL 是一个开源的 SQL(结构化查询语言)数据库管理系统。SQL 是最流行的计算机语言,用于与关系数据库管理系统接口。关系数据库管理系统(RDBMS)通常使用行和列在表中存储数据和它们之间的关系。要被认为是 RDBMS,数据还必须以这种格式可编辑。
MySQL 通常与 PHP 搭配使用,以创建动态网站。一些例子包括 WordPress(个人博客软件)、MediaWiki(维基百科的基础)和 phpBB(一个基于网络的论坛系统)。
MySQL 是全球最广泛部署的开源数据库,估计有 1100 万安装。根据 2004 年 7 月 SD Times 的一份报告,MySQL 在商业巨头甲骨文和微软的 SQL Server 之后排名第三(市场份额为 33%)。
^([]) "关系数据库统治着天空",SD Times (2004),
www.sdtimes.com/content/article.aspx?ArticleID=27991。
迈克尔·维德纽斯和戴维·阿克马克于 1995 年创建了 MySQL。他们与艾伦·拉尔森共同创立了 MySQL AB 公司。该公司销售 MySQL 的支持合同和服务。MySQL 的商业许可证适用于不适用于 GNU GPL 的应用程序。
第十四章:MYSQL 服务器 5.0.51
MySQL 官网
14.1. 摘要
MySQL 是一个开源的 SQL(结构化查询语言)数据库管理系统。SQL 是最流行的计算机语言,用于与关系数据库管理系统接口。关系数据库管理系统(RDBMS)通常使用行和列在表中存储数据和它们之间的关系。为了被认为是 RDBMS,数据还必须以这种格式可编辑。
MySQL 通常与 PHP 搭配使用来创建动态网站。一些例子包括 WordPress(个人博客软件)、MediaWiki(维基百科的基础)和 phpBB(一个基于网络的论坛系统)。
MySQL 是世界上部署最广泛的开源数据库,估计有 1100 万安装。根据 2004 年 7 月的 SD Times 报告,MySQL 排名第三(市场份额为 33%),仅次于商业巨头 Oracle 和微软的 SQL Server.^([])
^([]) "关系数据库统治着天空",SD Times (2004),SD Times 文章.
Michael Widenius 和 David Axmark 于 1995 年编写了 MySQL。他们与 Allan Larsson 共同创立了 MySQL AB 公司。该公司销售 MySQL 的支持合同和服务。MySQL 的商业许可证适用于不适用于 GNU GPL 的应用程序。
14.2. 资源
MySQL 参考手册
14.3. 必需的
FreeBSD 7.0-RELEASE(参见 "FreeBSD 7.0")
更新的端口集合(参见 "FreeBSD 端口集合")
互联网连接
注册域名
14.4. 准备
-
成为超级用户。
-
确保您的服务器主机名可以在本地解析。如果您正在运行自己的 DNS 服务器并且已正确配置,那么这应该已经是这种情况了。如果您没有运行自己的 DNS 服务器,那么请确保您在
/etc/hosts文件中有一个条目,指向您服务器的 IP 地址。在文本编辑器中打开 hosts 文件:# ee /etc/hosts您的 hosts 文件(~14)应如下所示(将example.com替换为您的域名,将host.example.com替换为您的主机名,将
*192.168.1.11*替换为您的 IP 地址):::1 localhost localhost.*example.com* 127.0.0.1 localhost localhost.*example.com* *192.168.1.11* *host.example.com*
14.5. 安装
输入以下命令开始安装 MySQL 服务器:
# cd /usr/ports/databases/mysql50-server
# make -D BUILD_OPTIMIZED install clean
# rehash
14.6. 配置
安装过程完成后,是时候为您的系统配置 MySQL 了。
-
运行 mysql_install_db 脚本以设置 MySQL 所需的授权表。授权表存储有关 MySQL 用户权限和其他安全设置的信息。使用以下命令运行脚本:
# mysql_install_db --user=mysql -
以下命令将启动 MySQL 守护进程并设置 MySQL root 密码(将
*localpassword*和*remotepassword*替换为您自己的密码,并将host.example.com替换为您的主机名):# mysqld_safe & # mysqladmin -u root password 'localpassword' # mysqladmin -u root -h host.example.com password 'remotepassword'
注意:
localpassword和remotepassword两边的单引号是必需的。远程密码用于从不同的计算机登录到 MySQL 服务器。默认情况下,MySQL 会加密通过 TCP 连接发送的登录信息。认证后的数据库查询和响应将“明文”传输。
-
MySQL 在/usr/local/share/mysql 目录中包含一组四个示例配置文件。每个选项文件都针对特定的系统配置进行了定制,如下所示:
*my-small.cnf*对于具有高达 64MB RAM 的系统
*my-medium.cnf*对于具有高达 128MB RAM 的系统(理想用于 Web 服务器)
*my-large.cnf*对于具有 512MB RAM 的系统(专用 MySQL 服务器)
*my-huge.cnf*对于具有 1 到 2GB RAM 的系统(数据中心等)
决定哪个选项文件适合您的系统需求,然后将它复制到/var/db/mysql 目录作为 my.cnf。例如,如果您决定使用 my-medium.cnf 作为配置文件,您将输入:
# cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf
14.6.1. 禁用 MySQL TCP 网络
如果您打算仅将 MySQL 用于基于 Web 的 PHP 应用程序,禁用 TCP 网络可以提高您的 MySQL 安装的安全性。
注意: 这仅适用于您的 Web 服务器和 MySQL 数据库在相同计算机上运行的情况。
-
要禁用 MySQL TCP 网络,请修改/var/db/mysql 目录中的 my.cnf 配置文件:
# ee /var/db/mysql/my.cnf -
滚动并取消注释(移除前面的井号)第 45 行(大约)以显示如下:
skip-networking -
保存并退出。
关于 my.cnf 选项文件的更多信息可以在
dev.mysql.com/doc/refman/5.0/en/option-files.html找到。
14.7. 测试
在本节中,我们将执行基本测试以确认 MySQL 正常运行。
-
配置 MySQL 在系统启动时自动启动。打开 etc/rc.conf 文件:
# ee /etc/rc.conf并添加以下行:
mysql_enable="YES"保存并退出。
-
要提交上述配置部分所做的更改,请重新启动 MySQL:
# /usr/local/etc/rc.d/mysql-server restart -
执行以下查询以显示服务器上的现有数据库:
# mysqlshow -p
如果 MySQL 服务器运行正常,您应该看到以下输出:
+--------------------+
| Databases |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
如果您收到无法连接的错误,请检查/var/db/mysql 中的错误日志以查找错误信息。错误日志将命名为host.example.com.err(使用您的主机名)。
此外,请确保您的/tmp 目录的权限正确。可以通过输入以下命令来显示权限:
# ls -ld /tmp
*drwxrwxrwt * 7 root wheel 512 Feb 17 12:00 /tmp
/tmp目录的权限应设置为示例输出行中斜体显示的权限。如果您的权限或所有权不同,超级用户可以使用以下命令进行纠正:
# chown root:wheel /tmp
# chmod 777 /tmp
# chmod =t /tmp
14.8. BASICS
本节介绍了一些使用 MySQL 创建、删除和向数据库添加用户的基本命令。要访问这些命令,请以 root 身份登录 MySQL 监控器。MySQL 监控器是一个用于管理 MySQL 的命令行外壳。您将被提示输入在步骤 2 中创建的 localhost MySQL root 密码,该步骤在"配置"中。
# mysql -u root -p
要退出 MySQL 监控器,请输入:
mysql> exit;
14.8.1. 显示数据库
要显示 MySQL 中的数据库列表,请在 MySQL 提示符下使用以下命令:
mysql> show databases;
注意: 分号是 MySQL 命令行语法的一个重要部分;它表示语句的结束。
14.8.2. 创建数据库
使用以下命令创建一个名为 testing 的新数据库(用您选择的名称替换):
mysql> create database testing;
14.8.3. 将用户添加到数据库
当您将用户添加到数据库时,您可以授予他全部权限、只读权限或自定义权限。
全部权限
要向特定数据库添加用户并授予全部权限,请在 MySQL 提示符下使用以下命令:
mysql> grant all on database.* to user@localhost identified by
-> 'password';
将*database*替换为数据库名称,将*user*替换为用户名,将*password*替换为该用户的密码。如果您需要此数据库可以从外部访问(使用 TCP),请将*localhost*替换为您的服务器主机名(对于本地托管的基于 Web 的 PHP 应用程序,请使用localhost)。
只读权限
要添加具有只读访问权限的用户,请在 MySQL 提示符下使用以下命令:
mysql> grant select on database.* to user@localhost identified
-> by 'password';
将*database*替换为数据库名称,将*user*替换为用户名,将*password*替换为该用户的密码。如果您需要此数据库可以从外部访问(使用 TCP),请将*localhost*替换为您的服务器主机名(对于本地托管的基于 Web 的 PHP 应用程序,请使用localhost)。
自定义权限
要添加具有自定义访问权限的用户,请在 MySQL 提示符下使用以下命令:
mysql> grant options on database.* to user@localhost identified
-> by 'password';
将*options*替换为以下任一项或全部:select、insert、update、delete、create或drop(用逗号分隔多个项)。将*database*替换为数据库名称,将*user*替换为用户名,将*password*替换为该用户的密码。如果您需要此数据库可以从外部访问(使用 TCP),请将*localhost*替换为您的服务器主机名(对于本地托管的基于 Web 的 PHP 应用程序,请使用localhost)。
14.8.4. 从数据库中删除用户
要删除特定用户的数据库的所有权限,请在 MySQL 提示符下使用以下命令:
mysql> revoke all privileges on database.* from user@localhost;
将*database*替换为要撤销权限的数据库名称,将*user*替换为您希望撤销权限的用户名。
14.8.5. 从 MySQL 中删除用户
要从 MySQL 中完全删除用户,请在 MySQL 提示符下使用以下命令:
mysql> revoke all privileges, grant option from user@localhost;
mysql> drop user user@localhost;
将*user*替换为您希望从 MySQL 中删除的用户名。
14.8.6. 删除数据库
要从 MySQL 中删除名为 testing 的数据库,请在 MySQL 提示符下使用以下命令:
mysql> drop database testing;
将 *testing* 替换为您要删除的数据库的名称。
14.8.7. 显示用户权限
要显示特定用户的全部权限,请在 MySQL 提示符下使用以下命令:
mysql> show grants for user@localhost;
将 *user* 替换为您要查看权限的用户名。
14.8.8. 备份所有数据库
要备份所有 MySQL 数据库,请使用以下命令(您将被提示输入本地主机 root 密码):
# mysqldump -u root -p --all-databases > /path/filename.sql
替换备份文件的路径和文件名。
14.8.9. 备份单个数据库
要备份特定的 MySQL 数据库,请使用以下命令(您将被提示输入本地主机 root 密码):
# mysqldump -u root -p --databases dbname > /path/filename.sql
将 *dbname* 替换为数据库名称,并用备份文件的路径和文件名替换。
14.8.10. 恢复数据库
要恢复 MySQL 数据库,请使用以下命令(您将被提示输入本地主机 root 密码):
# mysql -u root -p dbname < /path/filename.sql
将 *dbname* 替换为您要恢复的数据库名称,并用导入备份文件的路径和文件名替换。
14.9. 配置文件
/var/db/mysql/my.cnf
用于指定 MySQL 选项的 MySQL 配置文件
14.10. 日志文件
/var/db/mysql/host.example.com.err
包含 MySQL 服务器状态消息、错误等信息
14.11. 注意事项
一个流行的管理工具 phpMyAdmin 使用 PHP 创建一个网页界面来处理 MySQL 的管理。有关更多详细信息,请参阅 "phpMyAdmin 2.11.5"。
第十五章. NTP 服务器 4.2.2
HTTP://NTP.ISC.ORG
15.1. 摘要
NTP(网络时间协议)是一种用于同步网络计算机时钟的互联网协议。计算机时钟的准确性对于提供系统日志文件、电子邮件时间戳、定时脚本等的一致参考至关重要。NTP 系统能够使您的计算机时钟的准确性保持在与准确时间服务器相差几毫秒的范围内。时间服务器通常直接连接到准确时间源(例如,原子钟或 GPS 时钟)。
NTP 系统由公共和私有服务器组成的层次结构或层。第 1 层服务器将其时钟与准确的外部 GPS(全球定位系统)时钟、无线电时钟或其他高精度计时设备同步。第 2 层服务器从一个或多个第 1 层服务器获取其时钟数据,第 3 层服务器从一个或多个第 2 层服务器获取其时钟数据,依此类推。在较低层级的服务器(按数字来说)并不一定更准确。时间源、地理位置和网络延迟都影响着时间服务器的准确性。
运行 NTP 守护进程的服务器会定期将其时钟与一个或多个已建立的时间服务器同步。随着时间的推移,NTP 守护进程会计算系统特定的时钟误差。如果系统暂时失去互联网连接,NTP 守护进程将使用此误差(或时钟漂移)数据保持系统时钟的准确性,直到它可以重新与时间服务器同步。
戴尔大学的教授 David Mills 在 20 世纪 80 年代初最初开发了 NTP。NTP 最初命名为互联网时钟服务,旨在为 HELLO 路由协议提供时钟同步。这些早期的 NTP 版本不如现在的准确,因为它们没有频率校正能力。Mills 与一支志愿者团队继续开发 NTP。
第十五章. NTP 服务器 4.2.2
HTTP://NTP.ISC.ORG
15.1. 摘要
NTP(网络时间协议)是一种用于同步网络计算机时钟的互联网协议。计算机时钟的准确性对于提供系统日志文件、电子邮件时间戳、定时脚本等的一致参考至关重要。NTP 系统能够将您的计算机时钟保持在与准确时间服务器相差几毫秒的准确性。时间服务器通常直接连接到准确时间源(例如,原子钟或 GPS 时钟)。
NTP 系统由公共和私有服务器组成的层次结构或层。第 1 层服务器将其时钟与准确的外部 GPS(全球定位系统)时钟、无线电时钟或其他高精度计时设备同步。第 2 层服务器从一个或多个第 1 层服务器获取其时钟数据,第 3 层服务器从一个或多个第 2 层服务器获取其时钟数据,依此类推。较低层级的服务器(按数字排序)不一定更准确。时间源、地理位置和网络延迟都影响着时间服务器的准确性。
运行 NTP 守护进程的服务器会定期将其时钟与一个或多个已建立的时间服务器同步。随着时间的推移,NTP 守护进程会计算系统特定的时钟误差。如果系统暂时失去互联网连接,NTP 守护进程将使用此误差(或时钟漂移)数据保持系统时钟的准确性,直到它可以重新与时间服务器同步。
特拉华大学的教授 David Mills 在 20 世纪 80 年代初期最初开发了 NTP。NTP 最初命名为互联网时钟服务,旨在为 HELLO 路由协议提供时钟同步。这些早期的 NTP 版本不如今天的准确,因为它们没有频率校正能力。Mills 与一支志愿者团队继续开发 NTP。
15.2. 资源
NTP 文档索引
ntp.isc.org/bin/view/Main/DocumentationIndex
RFC 4330 - 网络时间协议版本 4
15.3. 需要的
FreeBSD 7.0-RELEASE (参见 "FreeBSD 7.0")
更新的端口集合(参见 "FreeBSD 端口集合")
互联网连接
15.4. 可选
注册域名
15.5. 准备工作
成为超级用户。
15.6. 安装
虽然 NTP 4.2.0 包含在 FreeBSD 7.0 标准发行版中,但我们将从 ports 集合中安装 NTP 的更新版本。输入以下命令开始安装:
# cd /usr/ports/net/ntp
# make config ; make install clean
# rehash
15.7. 配置
一旦安装过程完成,就是时候为你的系统配置 NTP 了。
-
更改默认的搜索路径。FreeBSD 的 NTP 基本版本使用与从 ports 系统安装的版本相同的文件名。如果搜索路径未从默认值更改,则 NTP 相关命令将运行 FreeBSD 基本版本,而不是 ports 的新版本。有关更改默认搜索路径的详细信息,请参阅"默认搜索路径"。
-
创建一个用于存储时钟校正数据的漂移文件。以下命令在/etc/ntp 目录中创建此文件:
# touch /etc/ntp/drift -
选择合适的同步时间服务器。访问
ntp.isc.org/bin/view/Servers/StratumTwoTimeServers获取公共时间服务器的最新列表。从列表中选择至少三个服务器。选择标记为 OpenAccess 且位于你地理邻近的服务器。
注意: 请参阅 NTP 的参与规则网页,以获取选择时间服务器的建议:
support.ntp.org/bin/view/Servers/RulesOfEngagement。
-
创建一个名为 ntp.conf 的新配置文件:
# ee /etc/ntp.conf并添加以下配置选项:
server *time.example1.com* iburst server *time.example2.com* iburst server *time.example3.com* iburst driftfile /etc/ntp/drift logfile /var/log/ntp.log将服务器的域名(斜体)替换为你所选择的域名。
iburst修饰符允许 NTP 守护进程加快初始同步速度。driftfile语句告诉 NTP 守护进程在哪里查找漂移文件(在步骤 2 中创建)。logfile语句指示 NTP 守护进程将日志文件存储在/var/log 目录中。保存并退出。
15.8. 测试
在本节中,我们将执行一些基本测试以确认 NTP 正确同步时间数据。
-
要在启动时自动启动 NTP 守护进程,打开/etc/rc.conf:
# ee /etc/rc.conf并添加以下行:
ntpd_enable="YES" ntpd_program="/usr/local/bin/ntpd" -
启动 NTP 守护进程并开始系统时间同步:
# /etc/rc.d/ntpd start等待大约 10 分钟,然后执行以下命令以检查时间同步的状态:
# ntpq -p localhost你应该看到类似以下的结果:
remote refid st t when poll reach delay offset jitter ========================================================================= +gabe.kjsl.com 209.81.9.7 2 u 30 64 377 13.267 1282.65 405.902 +reva.xtremeunix 204.123.2.5 2 u 50 64 377 25.863 1228.18 421.589 *zorac.sf-bay.or 204.123.2.5 2 u 20 64 377 25.283 1017.32 345.212 -time.nist.gov .INIT. 16 u 159m 1024 0 0.000 0.000 4000.00
注意: 上面的输出中的最后一行是一个不可达或工作不正常的对等体的示例。
*jitter*值通常为 4000.00,*stratum*为 16,*delay*和*offset*为零。
上述输出中的元素如下所述:
remote对等体(时间服务器)的主机名。以星号开头的主机名表示所选的同步服务器。
refid对应对等体使用的时钟维护设备类型。由于上述时间服务器是 2 层服务器,它们列出了提供时间的服务器 IP 地址。
st对等体的层级,范围从 1 到 16。
t对等方的类型(
u= 单播,m= 多播)。when对等方上次被听到的时间,以秒为单位。
pollNTP 守护进程与对等方同步的频率,以秒为单位。
reach可达性寄存器的状态,以八进制格式表示。如果最后 8 次尝试与每个时间服务器同步都成功(达到此值需要大约 10 分钟),则此值将稳定在 377。
delay往返包延迟时间,以毫秒为单位(越小越好)。
offset系统时间与远程对等方时间的差异,以毫秒为单位。负值表示本地系统的时钟落后于远程对等方的时钟,而正值表示领先。
jitter偏移量的变化,以毫秒为单位(越小越好)。
-
使用此命令检查以确保您的时服务器正确响应 NTP 请求:
代码视图:
# ntpdate -q localhost server 127.0.0.1, stratum 3, offset 0.000004, delay 0.02579 server ::1, stratum 3, offset 0.000010, delay 0.02583 6 Jun 20:15:12 ntpdate[2710]: adjust time server 127.0.0.1 offset 0.0004 sec
如果您正在与第二层服务器同步,您的服务器将显示为第三层,如下所示。
15.9. 配置文件
/etc/ntp.conf
ntpd 的主要配置文件
15.10. 日志文件
/var/log/ntp.log
NTP 守护进程将时间同步消息记录到该文件。
/var/log/messages
NTP 守护进程将其状态记录到该文件。
/etc/ntp/drift
NTP 守护进程将时钟校正值存储到该文件。
15.11. 备注
-
“配置”步骤 2 中指定的漂移文件(第 108 页)将每小时自动更新一次,更新频率偏移(时钟误差)由 NTP 守护进程计算。重要的是要按照步骤 2 中的说明创建空文件;NTP 守护进程不会自动创建该文件。如果漂移文件不存在,NTP 守护进程将假设误差为零,并需要大约 15 分钟来完成初始同步并进入稳定状态或正常模式。
-
如果您想同步服务器的时钟并拒绝所有客户端对 NTP 服务器的请求,请将以下行添加到 /etc 中的 ntp.conf:
restrict default ignore restrict *time.example1.com* restrict *time.example2.com* restrict *time.example3.com*
注意: 将斜体中的主机名替换为“配置”步骤 4 中配置的时间服务器的主机名。在这里不能使用 NTP 池服务器,因为池服务器会动态分配 NTP 服务器地址。
如果您希望仅允许本地网络使用 NTP 服务,请将以下行添加到位于 /etc 的 ntp.conf 文件中:
restrict *192.168.1.0* mask *255.255.255.0* nomodify notrap
注意: 这一行是上述四个限制语句的补充。
将 IP 地址和子网(斜体)更改为与您的网络配置匹配。上面的示例将允许 IP 地址为 192.168.1.X 的系统与您的 NTP 服务器同步。
第十六章. OPENLDAP 服务器 2.3.38
HTTP://OPENLDAP.ORG
16.1. 摘要
LDAP(轻量级目录访问协议)是一种基于 TCP 的协议,用于访问目录服务。目录服务为用户提供有关网络中其他用户和资源的信息(通常以地址簿条目的形式)。条目存储在中央数据库中,并通过具有 LDAP 功能的客户端(如 Microsoft Outlook、Mozilla Thunderbird 等)从 LDAP 服务器(OpenLDAP、Windows Server Active Directory 等)访问。
OpenLDAP 符合 ITU-T(国际电信联盟的标准部门)开发的 X.500 系列目录服务标准。这为基于 X.500 的应用程序提供了 LDAP 互操作性。
根据 X.500 标准,LDAP 条目以层次格式存储,由目录条目内的属性集组成:
-DOMAIN COMPONENT (.com)
-DOMAIN COMPONENT (example)
-ORGANIZATIONAL UNIT (People)
-USER ID (jdoe)
-TELEPHONENUMBER (phone number)
-GIVENNAME (doe)
LDAP 是由 Tim Howes、Steve Kille 和 Wengyik Yeong 在 1992 年创建的。它最初是一个项目,旨在与密歇根大学的电子邮件系统一起提供目录服务。
一家名为 Net Boolean Inc. 的公司成立于 1998 年初,旨在为商业提供电子邮件服务。当时可用的商业 LDAP 实现对这个年轻的公司来说太昂贵了。Net Boolean 从密歇根大学提供的开源 LDAP 软件中创建了 Boolean LDAP。Net Boolean 的 Kurt Zeilenga 后来在 1998 年 8 月创立了 OpenLDAP 基金会和该项目。当前的 OpenLDAP 开发由一个核心团队组成,包括创始人 Kurt Zeilenga、Howard Chu 和 Pierangelo Masarati。
第十六章. OPENLDAP 服务器 2.3.38
HTTP://OPENLDAP.ORG
16.1. 摘要
LDAP(轻量级目录访问协议)是一种基于 TCP 的协议,用于访问目录服务。目录服务为用户提供有关网络中其他用户和资源的信息(通常以地址簿条目的形式)。条目存储在中央数据库中,并通过 LDAP 服务器(OpenLDAP、Windows Server Active Directory 等)从具有 LDAP 功能的客户端(Microsoft Outlook、Mozilla Thunderbird 等)访问。
OpenLDAP 符合 ITU-T(国际电信联盟的标准部门)开发的 X.500 系列目录服务标准。这为基于 X.500 的应用程序提供了 LDAP 互操作性。
根据 X.500 标准,LDAP 条目以分层格式存储,由目录条目内的属性集组成:
-DOMAIN COMPONENT (.com)
-DOMAIN COMPONENT (example)
-ORGANIZATIONAL UNIT (People)
-USER ID (jdoe)
-TELEPHONENUMBER (phone number)
-GIVENNAME (doe)
LDAP 是由 Tim Howes、Steve Kille 和 Wengyik Yeong 在 1992 年创建的。它最初是一个项目,旨在与密歇根大学的电子邮件系统一起提供目录服务。
一家名为 Net Boolean Inc.的公司在 1998 年初成立,为商业提供电子邮件服务。当时可用的商业 LDAP 实现对这个年轻的公司来说太昂贵了。Net Boolean 从密歇根大学提供的开源 LDAP 软件中创建了 Boolean LDAP。Net Boolean 的 Kurt Zeilenga 后来在 1998 年 8 月创立了 OpenLDAP 基金会和该项目。当前的 OpenLDAP 开发由一个核心团队组成,包括创始人 Kurt Zeilenga、Howard Chu 和 Pierangelo Masarati。
16.2. 资源
OpenLDAP 2.3 管理员指南
RFC 4511 - 轻量级目录访问协议
16.3. 必需
FreeBSD 7.0-RELEASE(见"FreeBSD 7.0")
更新的 ports 集合(见"FreeBSD Ports Collection")
网络连接
16.4. 可选
使用带有签名 SSL 证书的 OpenSSL(见"OpenSSL 0.9.8g")
已注册域名
16.5. 准备
成为超级用户。
16.6. 安装
要开始 OpenLDAP 的安装过程,请输入以下命令:
# cd /usr/ports/net/openldap23-server
# make config ; make install clean
# rehash
应该会出现一个菜单,显示 openldap-server 的选项。我们将保留选项的默认值;按[tab]键选择 OK,然后按[enter]键继续安装过程。
16.7. 配置
安装过程完成后,是时候为您的系统配置 OpenLDAP 了。
-
设置 OpenLDAP 的根密码。OpenLDAP 将 LDAP 管理员的密码存储在主配置文件 slapd.conf 中。OpenLDAP 可以以明文或哈希的形式读取此密码。哈希通过算法将密码加密,使其不在明文中显示。以下命令将为 OpenLDAP 创建根密码的 SSHA(加盐安全哈希算法)哈希,并将其插入到 slapd.conf 中。
# cd /usr/local/etc/openldap # sed -I .old 's/rootpw/# rootpw/' slapd.conf # echo -n "rootpw " >> slapd.conf # slappasswd >> slapd.conf -
我们将对 slapd.conf 文件进行一些修改。打开 slapd.conf:
# ee /usr/local/etc/openldap/slapd.conf -
滚动到
suffix声明(约 56 行)。如果您的域名是example.com,请输入"dc=``*example*``,dc=``*com*``"。继续到下一个条目rootdn,并输入相同的信息,保留"cn=Manager"部分不变。对于名为example.com的域名,这两行将如下所示:suffix "dc=example,dc=com" rootdn "cn=Manager,dc=example,dc=com" -
滚动到 slapd.conf 文件的底部并添加以下两行:
include /usr/local/etc/openldap/schema/cosine.schema include /usr/local/etc/openldap/schema/inetorgperson.schema这些行添加了对
COSINE模式和对inetOrgPerson对象类的支持。COSINE和inetOrgPerson通过添加对组织有用的属性扩展了核心模式。附加属性的示例包括员工编号、房间编号、建筑名称等。关于
COSINE模式的信息,请参阅tools.ietf.org/html/rfc4524。关于
inetOrgPerson对象类的信息,请参阅tools.ietf.org/html/rfc2798。 -
添加一个简单的访问策略,以防止将
userPassword属性显示给其他用户。将以下行添加到 slapd.conf 文件的底部:access to attrs=userPassword by self write by anonymous auth by * none -
添加另一个访问策略以获取用户信息。用户应有权写入自己的信息,并对其他人的信息具有只读访问权限。匿名用户应无权访问。来自本地主机的请求应具有读取权限。这些行应如下所示:
access to * by self write by users read by peername.ip=127.0.0.1 read by anonymous auth -
如果您拥有已签名的 SSL 证书并希望启用使用 SSL 的安全 LDAP 连接,请继续。否则跳到步骤 8。以下声明将告诉 slapd 程序在哪里找到您的 SSL 证书。
代码视图:
TLSCACertificateFile */usr/local/openssl/certs/example.com-CAcert.pem* TLSCertificateFile */usr/local/openssl/certs/host.example.com-cert.pem* TLSCertificateKeyFile */usr/local/openssl/certs/host.example.com-unencrypted-key.pem*记得将路径和文件名(斜体)更改为指向您的服务器证书和密钥文件。保存并退出。
-
OpenLDAP 使用一个名为 Berkeley DB 的嵌入式数据库来存储其数据。以下命令将示例数据库配置文件 DB_CONFIG.example 复制到 OpenLDAP 的数据库路径:
# cd /usr/local/etc/openldap # cp DB_CONFIG.example /var/db/openldap-data/DB_CONFIG
16.8. 测试
在本节中,我们将执行一些基本测试,以确认 OpenLDAP 能够正确地响应 LDAP 请求。
-
要在启动时自动启动 LDAP 服务器,请将以下行添加到位于
/etc目录中的 rc.conf 文件中。打开 rc.conf:# ee /etc/rc.conf如果您没有选择启用带有 SSL 的安全 LDAP 连接,请添加以下行:
slapd_enable="YES" slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap:///"' slapd_sockets="/var/run/openldap/ldapi"如果您选择启用带有 SSL 的安全 LDAP 连接,请添加以下行:
slapd_enable="YES" slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/\ ldap:/// ldaps:///"' slapd_sockets="/var/run/openldap/ldapi" slapd_owner="root:ldap"保存并退出,然后启动 LDAP 服务器:
# /usr/local/etc/rc.d/slapd start -
创建要导入到 LDAP 数据库中的数据。LDAP 数据库的第一个导入将包括域名和管理员条目。切换到您选择的任何工作目录。创建一个名为 domainmgr.ldif 的文件:
# ee domainmgr.ldif将以下文本输入到空白文件中:
# Create Domain entry dn: dc=example,dc=com objectclass: dcObjectobjectclass: organization o: example.com dc: example # Create Manager entry dn: cn=Manager,dc= example,dc=com objectclass: organizationalRole cn: Manager当前使用的 LDAP 缩写如下:
dn被区分的名字
dc域组件
cn常见名称
o组织
适当地替换你的域名(斜体中的项必须反映你的域名)。不要更改此文件的任何其他部分。我们接下来要运行的 ldapadd 实用程序对 LDIF(LDAP 数据交换格式)文件的语法非常具体。确保每行的最后一个字母后面没有多余的空格。域名和管理员条目之间的单个空行是必要的。保存并退出。
-
将 domainmgr.ldif 条目添加到 LDAP 数据库中(替换你的域名):
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f domainmgr.ldif -c你将被提示输入你在步骤 1 中创建的 LDAP 根密码。“配置”。如果命令无错误完成,则继续;否则重新打开 domainmgr.ldif,检查拼写和空格,然后再次运行命令。
-
创建一个组织单位来保存用户条目。创建一个名为 people.ldif 的文件:
# ee people.ldif将以下文本输入到空白文件中:
# Create Organizational Unit (People) dn: ou=People,dc=example,dc=com objectclass: top objectclass: organizationalUnit ou: People再次替换斜体中的域名(显示在斜体中)并注意拼写和空格。保存并退出。
-
将 people.ldif 条目添加到 LDAP 数据库中(替换你的域名):
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f people.ldif -
在你创建的组织单位内将用户添加到 LDAP 数据库中。创建一个名为 user.ldif 的文件:
# ee user.ldif将以下文本输入到空白文件中:
# Create User Entry dn: cn=John Doe,ou=People,dc=example,dc=com objectclass: inetOrgPerson cn: John Doe givenname: John sn: Doe mail: jdoe@example.com将斜体中的项替换为适当的数据。保存并退出。
-
为此新用户创建一个散列密码并将其追加到 user.ldif 中:
# echo -n "userPassword: " >> user.ldif # slappasswd >> user.ldif -
将 user.ldif 条目添加到 LDAP 数据库中(替换你的域名):
# ldapadd -x -D "cn=Manager,dc=example,dc=com" -W -f user.ldif -
检查上述所有条目是否已成功添加到 LDAP 数据库中(替换你的域名):
# ldapsearch -W -H ldap://localhost/ -D\ ? cn=Manager,dc=example,dc=com -b 'dc=example,dc=com' ' (objectclass=*)'你将被提示输入管理员密码。以下是
ldapsearch命令的输出示例:# extended LDIF # # LDAPv3 # base <dc=turbojets,dc=net> with scope subtree # filter: (objectclass=*) # requesting: ALL # # example.com dn: dc=example,dc=com objectClass: dcObjectobjectClass: organization o: example.com dc: example # Manager, example.com dn: cn=Manager,dc=example,dc=com objectClass: organizationalRole cn: Manager # People, example.com dn: ou=People,dc=example,dc=com objectClass: top objectClass: organizationalUnit ou: People # John Doe, People, example.com dn: cn=John Doe,ou=People,dc=example,dc=com objectClass: inetOrgPerson cn: John Doe givenName: John sn: Doe mail: jdoe@example.com userPassword:: e1NTSEF9MTJTZkh1YkRQelI0ZG4wV3hlZUxqRkJFZ200UzQ0YnQ=
注意: 当从 LDAP 客户端登录 LDAP 服务器时,你可能需要输入“Base DN”、“Bind DN”、密码和主机名。以下是“Base DN”和“Bind DN”的输入内容(适当地替换斜体中的项):
Base DN: dc=example,dc=com Bind DN: cn=John Doe,ou=People,dc=example,dc=com
16.9. 配置文件
/usr/local/etc/openldap/slapd.conf
slapd 的主配置文件
16.10. 日志文件
/var/log/debug.log
包含 slapd 日志
16.11. 备注
-
由于 ldapadd 对语法错误敏感,手动将条目添加到 LDAP 数据库(如我们在上面的测试部分中所做的那样)可能非常不方便。存在一些实用程序,允许您以更高效和用户友好的方式管理 LDAP 数据库。phpLDAPadmin 是一个基于 Web 的 LDAP 浏览器,旨在更直观地管理 LDAP 数据库。有关详细信息,请参阅第 153 页的“phpLDAPadmin 1.1.0”。
-
OpenLDAP 2.3 默认只接受 LDAPv3 请求。如果提供了选项,请确保您的 LDAP 客户端设置为 LDAPv3。如果需要 LDAPv2,您可以在 /usr/local/etc/openldap/slapd.conf 中添加
allow bind_v2;有关 slapd.conf 的详细信息,请参阅手册页(在提示符下输入man slapd.conf查看此信息)。
第十七章. OPENSSH 服务器 4.7P1
HTTP://WWW.OPENSSH.COM
17.1. 摘要
OpenSSH 是一套开源工具,实现了 SSH(安全壳)协议。SSH 是 telnet 的安全版本;它是一种用于访问远程系统控制台或命令行的协议。SSH 为管理员和用户提供访问远程系统的权限,就像他们物理上位于控制台一样。
SSH 使用加密来防止客户端和服务器之间连接的窃听。telnet 协议缺乏加密;这使得窃听者能够使用数据包嗅探器捕获用户名和密码。(数据包嗅探器是一种用于监控和捕获网络流量的程序。)
根据 2005 年 11 月进行的一项调查,OpenSSH 命令占据了 SSH 市场的压倒性 87%。它几乎包含在所有 Linux 和 BSD 的发行版中,以及苹果的 Mac OS X。
^([]) OpenBSD, "SSH Usage Profiling,"
www.openssh.com/usage/index.html。
SSH 协议最初由赫尔辛基科技大学的研究员 Tatu Ylönen 于 1995 年开发。Ylönen 于 1995 年底创立了 SSH Communications Security 公司,以开发和推广 SSH。他的公司目前销售 SSH Tectia 服务器/客户端。
OpenSSH 最初由 OpenBSD 团队在 1999 年 12 月 OpenBSD 2.6 版本发布时构思。该团队使用了 Tatu Ylönen 的 SSH 项目的代码,该代码最初是开源的。在 OpenSSH 发布后,开发人员决定分成两个团队。一个团队专注于为 OpenBSD 开发 OpenSSH,而另一个团队开发了适用于其他平台的 OpenSSH 的可移植版本。便携版在其版本号后附加了字母 P 以表示这一点。OpenSSH 仍然由 OpenBSD 团队开发,由其创始人 Theo de Raadt 领导。
第十七章. OPENSSH 服务器 4.7P1
HTTP://WWW.OPENSSH.COM
17.1. 摘要
OpenSSH 是一组开源实用程序,实现了 SSH(安全外壳)协议。SSH 是 telnet 的安全版本;它是一种用于访问远程系统控制台或命令行的协议。SSH 为管理员和用户提供访问远程系统的权限,就像他们物理上位于控制台一样。
SSH 使用加密来防止客户端和服务器之间连接的窃听。telnet 协议没有加密;这给了窃听者使用数据包嗅探器捕获用户名和密码的能力。(数据包嗅探器是一种用于监控和捕获网络流量的程序。)
根据 2005 年 11 月进行的一项调查,OpenSSH 命令控制了 87%的 SSH 市场。它几乎包含在所有 Linux 和 BSD 的发行版中,以及苹果的 Mac OS X。
^([]) OpenBSD, "SSH 使用分析,"
www.openssh.com/usage/index.html.
SSH 协议最初于 1995 年由赫尔辛基工业大学的研究员 Tatu Ylönen 开发。Ylönen 于 1995 年底成立了 SSH Communications Security 公司,以开发和推广 SSH。他的公司目前销售 SSH Tectia 服务器/客户端。
OpenSSH 最初由 OpenBSD 团队在 1999 年 12 月的 OpenBSD 2.6 版本中构思,作为该版本的一部分。该团队使用了来自 Tatu Ylönen 的 SSH 项目的代码,该项目最初是开源的。在 OpenSSH 版本中修复了错误并添加了功能。OpenSSH 发布后不久,其开发者决定分成两个团队。一个团队专注于为 OpenBSD 开发 OpenSSH,而另一个团队开发了适用于其他平台的便携式 OpenSSH 版本。便携版版本号后附加了字母 P 以表示这一点。OpenSSH 仍然由 OpenBSD 团队开发,并由其创始人 Theo de Raadt 领导。
17.2. 资源
OpenSSH 手册页
RFC 4251 - 安全外壳(SSH)协议架构
17.3. 必需的
FreeBSD 7.0-RELEASE(见"FreeBSD 7.0")
更新的 ports 集合(见"FreeBSD Ports Collection")
互联网连接
OpenSSL(见"OpenSSL 0.9.8g")
17.4. 准备
成为超级用户。
17.5. 安装
OpenSSH 4.5.p1 是 FreeBSD 7.0 标准发行版的一部分。在本指南中,我们将用 ports 集合中更新的 OpenSSH 版本替换基本版本。
要开始 OpenSSH 安装过程,请输入:
# cd /usr/ports/security/openssh-portable
# make config ; make -D WITH_OVERWRITE_BASE install clean
将显示一个包含 OpenSSH 选项的菜单。我们将保留它们的默认设置,因此按[tab]键高亮显示“OK”,然后按[enter]键开始安装。
17.6. 配置
安装过程完成后,是时候配置 OpenSSH 以在您的系统上使用了。
-
必须将“
NO_OPENSSH = YES”行添加到位于/etc 中的 make.conf 文件中。这告诉 make 在从源代码重新构建 FreeBSD 时不要构建 OpenSSH 的基本版本(即,这防止系统将 OpenSSH 降级到较旧的基本版本)。以下命令将此行添加到 make.conf 中:# cp /etc/make.conf /etc/make.conf.old # echo "NO_OPENSSH = YES" >> /etc/make.conf -
OpenSSH 的默认配置文件与基本版本略有不同,以提高安全性。我们将用新安装的文件替换基本配置文件。
# cd /etc/ssh # cp sshd_config sshd_config.old # cp sshd_config-dist sshd_config # /etc/rc.d/sshd restart
注意: 如果您之前进行了任何自定义设置,可能需要重新修改 sshd_config 文件。
17.7. 测试
在本节中,我们将进行一些基本测试,以确认 OpenSSH 能够正确响应 SSH 请求。
-
要在启动时自动启动 OpenSSH 服务器,请打开 rc.conf:
# ee /etc/rc.conf并添加以下行(如果尚未存在):
sshd_enable="YES" -
保存并退出。
-
要测试 OpenSSH 是否在端口 22 上正确响应,请通过 telnet 连接并检查响应。使用以下命令:
# telnet localhost 22
注意: 如果您从不同的系统进行测试,可以将
localhost替换为服务器的 FQDN 或 IP 地址。
连接应该产生以下标语:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
*SSH-2.0-OpenSSH_4.7p1 FreeBSD-openssh-portable-overwrite-base-4.7.p1,1*
确认正确的版本出现在标语中(SSH-2.0 和 OpenSSH_4.7p1 或更高版本)。按[enter]键退出并返回到命令提示符。现在您应该能够使用任何具有 SSH 功能的客户端和除 root 以外的任何有效用户账户进行连接。
17.8. 工具
OpenSSH 包括 SSH 客户端、SFTP(安全文件传输)客户端和 SCP(安全复制)客户端。每个程序都设计得与原始的、不安全的 telnet 和 FTP 协议类似。SSH 客户端允许用户安全地登录到远程系统,而 SFTP 和 SCP 客户端使安全文件传输成为可能。
17.8.1. SSH 客户端
此程序用于安全地登录到远程系统的控制台(即,启动一个终端会话)。
命令
ssh
语法
ssh -``*options* *user@host*
选项
-p
指定要连接到远程主机的端口(OpenSSH 服务器必须配置为指定的端口)。
-L
**localport:host:remoteport** 在安全连接中转发指定的本地端口到指定的主机端口。
-N
不要执行远程命令(用于端口转发)。
-f
将 SSH 客户端作为后台进程运行。
示例
要以用户 johnny 的身份登录到名为host.example.com的远程主机,请输入以下命令:
# ssh johnny@host.example.com
要以用户 cat 身份通过端口 23 登录到名为 fluffy.net 的远程主机,请输入:
# ssh -p 23 cat@fluffy.net
要从本地端口 1234 到远程主机 host.example.com 的端口 110 创建 SSH 隧道,以用户 aeron 身份执行,请输入:
# ssh -L 1234:host.example.com:110 -f -N aeron@host.example.com
要稍后关闭此隧道,请输入:
# killall -TERM ssh
17.8.2. 安全复制客户端
此实用程序安全地将文件和目录从远程主机复制到或从远程主机复制到。
命令
scp
语法 scp -``*options filename user@host:path*
选项
-C
启用数据压缩。
-P
指定连接到远程主机(指定的端口 OpenSSH 服务器必须配置)的端口。
-p
保留原始文件的修改时间、访问时间和文件模式。
-r
递归复制目录。
示例
要将当前工作目录中的名为 example.doc 的文件复制到远程系统 example.com 的 /usr/home 目录,以用户 author 身份执行,请输入:
# scp example.doc author@example.com:/usr/home
要将本地 /usr/samba 目录中的所有内容复制到远程系统 example.com 的 /usr/home 目录,以用户 author 身份执行,同时保留文件模式和启用数据压缩,请输入:
# scp -p -C /usr/samba author@example.com:/usr/home
要使用名为 server1.example.com 的主机上的作者账户,通过端口 23 将名为 /usr/example.doc 的文件复制到本地系统的 /usr 目录,请输入:
# scp -P 23 author@server1.example.com:/usr/example.doc /usr
17.8.3. 安全文件传输客户端
此程序是一个交互式且安全的文件传输客户端。它可以作为 FTP 的替代方案,FTP 本身是不安全的。
命令
sftp
语法
sftp -``*options user@host*
选项
-o Port=xx
指定连接到远程主机(指定的端口 OpenSSH 服务器必须配置)的端口。
-C
启用数据压缩。
示例
要以用户 test 身份连接到名为 server.example.com 的主机,请输入:
# sftp test@server.example.com
要以用户 wilson 身份通过端口 23 连接到名为 example.com 的主机,并启用压缩,请输入:
# sftp -o Port=23 -C wilson@example.com
17.9. 配置文件
/etc/ssh/sshd_config
包含 sshd(SSH 服务器守护进程)的一般设置。通常可以安全地保留此文件的默认设置。
/etc/ssh/ssh_config
包含 ssh(SSH 客户端程序)的一般设置。
17.10. 日志文件
/var/log/auth.log
SSH 服务器活动的一般日志
17.11. 注意事项
-
默认情况下,您的服务器上所有具有 shell 访问权限的用户账户都将拥有 SSH 访问权限(root 用户除外)。如果您想限制 SSH 访问权限仅限于特定用户,您需要向位于 /etc/ssh 的 sshd_config 文件中添加一行。打开方式如下:
# ee /etc/ssh/sshd_config并添加以下行:
AllowUsers *username*将
*username*替换为您想要允许 SSH 访问的用户的登录名。多个用户之间用空格分隔。只有出现在此行上的用户才能访问基于 SSH 的服务。
注意: 请注意,此行区分大小写。请确认用户名正确,尤其是如果您是从远程位置进行此更改。如果配置错误,您可能会被锁定在外部!
保存、退出并重新启动 sshd:
# /etc/rc.d/sshd restart -
主机密钥通常在初始 FreeBSD 安装过程之后创建,如果启用了 SSH 登录。如果您需要重新创建它们,最简单的方法是删除旧密钥并重新启动 SSH 守护进程。SSH 守护进程将自动重新创建密钥。以下命令将完成此操作:
# cd /etc/ssh # mkdir old_keys # mv ssh_host* old_keys # /etc/rc.d/sshd restart -
默认情况下,OpenSSH 服务器不允许 root 登录。如果您需要 root 权限,您需要以 wheel 组成员的正常用户身份登录,然后使用
su命令成为超级用户。有关详细信息,请参阅"su"。要将名为 lucky 的用户添加到 wheel 组,以 root 身份登录并输入:# pw user mod lucky -G wheel
第十八章. OPENSSL 0.9.8G
HTTP://WWW.OPENSSL.ORG
18.1. 摘要
OpenSSL 是一个开源工具包和加密库,实现了 SSL(安全套接字层)和 TLS(传输层安全性)协议。OpenSSL 是一个由世界各地各种志愿者管理的独立项目。简而言之,OpenSSL 为网络安全连接提供加密工具。
常见的 SSL 实现方式是使用 HTTPS(通过加密的 HyperText Transfer Protocol)来保护网页。HTTPS 握手包括以下步骤:
-
一个 HTTP 客户端(网页浏览器)向 Web 服务器发送一个 HTTPS 请求。
-
服务器通过发送包含其公钥、域名和颁发证书机构的 SSL 证书来响应客户端。
-
客户端使用服务器的公钥 SSL 加密发送一个挑战信息。
-
服务器使用其私有的 SSL 密钥解密此消息。
-
服务器最终将解密后的消息发送回客户端。
-
如果客户端收到正确的消息,且假设客户端信任签发证书的机构,那么双方可以开始安全地交换信息。
OpenSSL 提供了创建证书签名请求、私钥服务器密钥和自签名证书所需的工具。当与认可的证书颁发机构结合使用时,可以生成用于 TCP 协议(如 HTTP、SMTP、IMAP 等)的受信任服务器证书。
OpenSSL 是基于由 Eric A. Young 和 Tim J. Hudson 开发的原始 SSLeay 库构建的。SSLeay 是 Netscape 的 Secure Socket Layer 协议的开源实现,该协议在 1990 年代中期被用于 Netscape Secure Server 和 Navigator 浏览器中。
第十八章. OPENSSL 0.9.8G
HTTP://WWW.OPENSSL.ORG
18.1. 摘要
OpenSSL 是一个开源工具包和加密库,实现了 SSL(安全套接字层)和 TLS(传输层安全性)协议。OpenSSL 是一个由世界各地各种志愿者管理的独立项目。简而言之,OpenSSL 为网络安全连接提供加密工具。
常见的 SSL 实现方式是使用 HTTPS(通过加密的 HyperText Transfer Protocol)来保护网页。HTTPS 握手包括以下步骤:
-
一个 HTTP 客户端(网页浏览器)向 Web 服务器发送一个 HTTPS 请求。
-
服务器通过发送包含其公钥、域名和颁发证书机构的 SSL 证书来响应客户端。
-
客户端使用服务器的公钥 SSL 加密发送一个挑战信息。
-
服务器使用其私有的 SSL 密钥解密此消息。
-
服务器最终将解密后的消息发送回客户端。
-
如果客户端收到正确的消息,且假设客户端信任签发证书的机构,那么双方可以开始安全地交换信息。
OpenSSL 提供了创建证书签名请求、私钥服务器密钥和自签名证书所需的工具。当与认可的证书颁发机构结合使用时,可以生成用于 TCP 协议(如 HTTP、SMTP、IMAP 等)的受信任服务器证书。
OpenSSL 是基于由 Eric A. Young 和 Tim J. Hudson 开发的原始 SSLeay 库构建的。SSLeay 是 Netscape 的 Secure Socket Layer 协议的开源实现,该协议在 1990 年代中期被用于 Netscape Secure Server 和 Navigator 浏览器中。
18.2. 资源
OpenSSL 手册页面
SSL 证书常见问题解答
RFC 2246 - TLS 协议
18.3. 必需的
FreeBSD 7.0-RELEASE (参见 "FreeBSD 7.0")
更新后的端口集合(参见 "FreeBSD 端口集合")
网络连接
注册的域名
18.4. 可选
可信的 SSL 证书颁发机构(CA)例如 GeoTrust、Thawte、Verisign 等,如果您希望创建行业可信的 SSL 证书
18.5. 准备
成为超级用户。本指南假设 root(超级用户)的默认搜索路径已按“FreeBSD 7.0”中概述的方式更改。如果你没有进行此修改,在执行 OpenSSL 命令时指定完整路径(/usr/local/bin/openssl)。
18.6. 安装
OpenSSL 0.9.8e 是 FreeBSD 7.0 标准发行版的一部分。在本指南中,我们将从 ports 集合中安装一个更新的 OpenSSL 版本。
# cd /usr/ports/security/openssl
# cp Makefile Makefile.old
# echo EXTRACONFIGURE+=no-idea >> Makefile
# make install clean
# rehash
注意: 上面的第二和第三条命令防止编译受版权限制的 IDEA 加密算法。这对于其他第三方应用程序的正确运行很重要。
18.7. 配置
安装过程完成后,是时候为你的系统配置 OpenSSL 了。
-
需要将“
WITH_OPENSSL_PORT = YES”行添加到/etc中的make.conf文件。这将确保未来构建的 ports 链接到新的 OpenSSL 版本。以下命令将添加适当的行到make.conf。# cp /etc/make.conf /etc/make.conf.old # echo "WITH_OPENSSL_PORT=YES" >> /etc/make.conf -
将旧的
openssl.cnf文件重命名,使其更难意外使用旧的 OpenSSL 版本创建证书。然后将示例 OpenSSL 配置文件复制到工作副本:# mv /etc/ssl/openssl.cnf /etc/ssl/openssl.cnf.old # cd /usr/local/openssl # cp openssl.cnf.sample openssl.cnf -
你可以修改
openssl.cnf以适应你的需求,但默认值通常足够。为了验证新版本是否正常工作,请使用以下命令:# openssl version OpenSSL 0.9.8g 19 Oct 2007新版本号晚于 0.9.8e 表示新版本已正确安装。如果版本信息仍然指示 0.9.8e,你可能没有修改你的默认路径。只要记得在使用命令行工具(/usr/local/bin/openssl)时指定新版本 OpenSSL 的完整路径,这是可以接受的。
18.8. SSL 证书
在本节中,将使用 OpenSSL 端口安装的 CA.pl 脚本(一个 Perl 脚本)创建 SSL 证书。
如果你打算让官方证书颁发机构签名你的 SSL 证书,请转到“为 CA 提交生成证书请求”。如果你想创建自签名 SSL 证书,请跳转到“创建自签名 SSL 证书”。
18.8.1. 为 CA 提交生成证书请求
你可以通过发送请求让官方证书颁发机构签名你的 SSL 证书。大多数证书颁发机构为此服务收费。有关证书签名过程的更多信息,请参阅“注意事项”。
-
证书颁发机构需要证书请求文件才能为你的服务器生成有效的 SSL 证书。我们将使用 OpenSSL 附带包含的 CA.pl 脚本创建证书请求。让我们使用
/usr/local/openssl/certs目录作为你的工作目录。以下命令将脚本复制到工作目录:# cd /usr/local/openssl # cp misc/CA.pl certs -
使用以下命令运行脚本以创建证书请求:
# cd /usr/local/openssl/certs # setenv OPENSSL /usr/local/bin/openssl # ./CA.pl -newreq -
您将被要求输入一个 PEM 密码短语。输入您选择的密码。请确保记住这个密码短语,因为您稍后需要它。填写其余字段,使其在公众查看您的证书时显示您希望的方式。确保在通用名称提示中输入您的主机名,否则服务器证书将无效。(如果您正在为具有主机名host.example.com的服务器创建 SSL 证书,您将输入通用名称host.example.com。)
注意: 您可以在通用名称字段中指定通配符值。例如,您可以输入*.example.com作为通用名称,以创建一个覆盖example.com任何子域的 SSL 证书,如www.example.com、mail.example.com等。请注意,如果您指定了像*.example.com这样的通配符,如果您尝试为根域名example.com创建证书,则它将无效。
在输入电子邮件地址后,系统将提示您输入挑战密码。只需按两次[回车键];挑战密码和公司名称是可选的。您将返回到命令提示符。
-
运行 CA.pl 脚本将为您创建一个名为 newkey.pem 的新文件,其中包含您的加密私钥。为了便于识别,我们将此文件复制到host.example.com-encrypted-key.pem。使用以下命令复制此文件(将host.example.com替换为您的实际通用名称):
# cp newkey.pem host.example.com-encrypted-key.pem -
您还将有一个名为 newreq.pem 的新创建的文件,其中包含您的证书请求。您可以将此文件提交给证书颁发机构进行签名。为了清晰起见,我们将此文件复制到host.example.com-req.pem。使用以下命令复制此文件(将host.example.com替换为您的实际通用名称):
# cp newreq.pem host.example.com-req.pem -
host.example.com-encrypted-key.pem文件使用您之前输入的密码加密。您记住此密码非常重要。当 SSL 应用程序使用它时,您需要输入它。如果此文件将用于无人值守的服务器,那么解密文件以便守护进程能够在用户干预的情况下加载它可能是一个好主意。要移除加密并使未加密的文件仅对 root 可读,请使用以下命令(将host.example.com替换为您的服务器的主机名):
# openssl rsa -in host.example.com-encrypted-key.pem\ ? -out host.example.com-unencrypted-key.pem # chmod 400 host.example.com-unencrypted-key.pem重要的是,root 用户是唯一可以访问此文件的用户。如上所述权限设置不严格可能会危及您的服务器证书的安全性。
-
在证书颁发机构签署您的证书请求后,将其复制到/usr/local/openssl/certs 目录,并命名为server.example.com-cert.pem或您认为合适的任何名称。一些服务器应用程序(Apache HTTP 服务器、Postfix 等)还需要您的证书颁发机构的根证书文件。大多数根证书文件都可以从证书颁发机构的网站上下载。将此文件保存到/usr/local/openssl/certs 目录中,命名为example.com-CAcert.pem,或使用您喜欢的任何名称。
18.8.2. 创建自签名 SSL 证书
有时候,由官方证书颁发机构签发的 SSL 证书并不实用或负担得起。在这些情况下,您可能想通过创建自己的证书颁发机构来创建和签署自己的 SSL 证书。实现这一目标的最简单方法是使用包含的证书颁发机构脚本(CA.pl)尽可能自动化这个过程。请注意,创建自己的证书将在客户端应用程序(网页浏览器、电子邮件客户端等)上导致出现不受信任的证书对话框。您可以将服务器的证书文件安装到客户端系统上以避免此警告。
-
让我们使用/usr/local/openssl/certs 目录作为您的工作目录。我们还将默认证书签发长度从 365 天扩展到 1,095 天(3 年)。下面的命令将脚本复制到工作目录,并将 OpenSSL 设置为创建有效期为 3 年的证书:
# cd /usr/local/openssl # cp misc/CA.pl certs # sed -I .old 's/365/1095/' openssl.cnf -
按照以下方式运行脚本以创建证书颁发机构:
# cd /usr/local/openssl/certs # setenv OPENSSL /usr/local/bin/openssl # ./CA.pl -newca -
第一个提示将要求您输入 CA 证书文件名。由于您正在创建一个新的,只需按[enter]键。
-
第二个提示将要求您输入 PEM 密码短语。输入您选择的密码。请务必记住这个密码短语,因为您稍后需要它。填写其余字段,使其在公众查看您的证书时显示您希望的方式。通用名称字段可以是您的公司名称或描述性的内容;它实际上是您的证书名称。在输入电子邮件地址后,您将被提示输入挑战密码。只需按[enter]键两次;挑战密码和公司名称是可选的。最后,您将被提示输入./demoCA/private/cakey.pem 的密码短语。输入您在本步骤开始时选择的 PEM 密码短语。
-
使用以下命令生成证书请求:
# ./CA.pl -newreq您将被要求输入一个密码短语;为了简单起见,请使用您之前使用的相同密码短语。输入您之前提供的信息。确保您在“通用名称”提示中输入您的主机名,否则服务器证书将无效。(如果您正在为网站
host.example.com创建 SSL 证书,您将输入通用名称 host .example.com。)
注意: 您也可以在通用名称字段中指定通配符值。例如,您可以将*.example.com作为通用名称输入,以创建一个覆盖example.com任何子域的 SSL 证书,如www.example.com、server.example.com等。请注意,如果您指定了像*.example.com这样的通配符,如果您试图为根域名example.com创建证书,它将不会有效。
在输入电子邮件地址后,系统将提示您输入挑战密码。只需按两次[回车键];挑战密码和公司名称是可选的。您将返回到命令提示符。不要更改新创建的 newreq.pem 文件的文件名;脚本稍后会查找它。
-
从您刚刚创建的请求和证书授权文件创建已签名的证书。使用以下命令开始证书签名过程:
# ./CA.pl -signreq输入您之前选择的密码。在接下来的两个提示中回答“是”,以创建已签名的 SSL 证书。已签名的 SSL 证书位于当前工作目录,命名为 newcert.pem。私钥文件也位于当前目录,命名为 newkey.pem。证书授权机构和私钥证书位于 demoCA 目录中,分别命名为 cacert.pem 和 cakey.pem。为了使所有这些文件易于识别,我们将使用以下约定:commonName-filetype.pem。以下命令将所有证书复制到/usr/local/openssl/certs 目录(将host.example.com替换为您的服务器主机名)。
# cp newcert.pem host.example.com-cert.pem # cp newkey.pem host.example.com-encrypted-key.pem # cp demoCA/cacert.pem ./example.com-CAcert.pem # cp demoCA/private/cakey.pem ./example.com-encrypted-CAkey.pem最后两行不包括服务器名称主机,因为证书授权文件并不针对任何特定的系统;将证书授权机构视为一个父实体。
![图片]()
host.example.com-encrypted-key.pem 文件使用您之前输入的密码加密。您记住这个密码很重要。当 SSL 应用程序使用它时,您需要输入它。如果这个文件将用于无人值守的服务器,那么解密这个文件可能是个好主意,这样守护进程可以在不进行用户干预的情况下加载它。要移除加密并使未加密的文件仅对 root 可读,请使用以下命令,将host.example.com替换为您的域名:
# openssl rsa -in host.example.com-encrypted-key.pem\ ? -out host.example.com-unencrypted-key.pem # chmod 400 host.example.com-unencrypted-key.pem重要的是,root 用户是唯一可以访问此文件的用户(上述命令实现了这一点)。缺乏上述严格权限可能危及您的服务器证书的安全性。
-
导出在步骤 2(第 131 页)中创建的 CA 证书或根证书(example.com-CAcert.pem)非常重要,以便它可以安装到将利用您的 SSL 证书的系统上。这是消除不受信任的根 SSL 证书警告信息出现所必需的。这些信息似乎在警告最终用户 SSL 证书可能存在潜在问题。如果消除了这个不必要的警告,检测实际被劫持的 SSL 会话会更困难。大多数客户端系统(Windows XP 和 Mac OS X)都识别 DER(区分编码规则)二进制格式编码的 SSL 证书文件。要将您的 PEM(增强型邮件)文本证书转换为 DER 格式,请输入以下命令:
# openssl x509 -in example.com-CAcert.pem -inform PEM\ ? -out example.com-CAcert.cer -outform DER您可以使用以下命令通过电子邮件发送您的 DER 编码证书:
# uuencode example.com-CAcert.cer example.com-CAcert.cer\ ? | mail -s " Subject" user@example.com适当地替换您的文件名(example.com-CAcert.cer 的第二个实例可以替换为您希望收件人看到的文件名)并将
*Subject*替换为适当的电子邮件主题行。user@example.com 可以是任何有效的电子邮件地址。
18.9. 配置文件
/usr/local/openssl/openssl.cnf
包含 OpenSSL 命令行工具的默认设置
18.10. 注意事项
-
签署 SSL 证书的证书机构通常收取可变费用。请注意,如果您自行签署 SSL 证书,客户端程序将向用户显示一个对话框,解释该证书不在受信任的根数据库中。这可能会让不熟悉该技术的用户感到困惑。如果只有少数已知用户将通过 SSL 访问您的服务器,您可以给每个用户一份您服务器根证书的副本,将其安装到他们的客户端应用程序中,以消除此警告信息(参见第 133 页的第 7 步)。
-
CAcert 是一个提供免费 SSL 证书的证书机构。如果您对 SSL 证书不熟悉,该网站是了解 SSL 证书签名过程的好地方。您可以按照本指南创建一个证书签名请求,并由 CAcert 签署。由 CAcert 签署的证书支持有限;大多数网络浏览器不包括其根证书在其受信任的 CA 数据库中。然而,CAcert 的根证书包含在 FreeBSD 和几个 Linux 发行版中。请访问
cacert.org上的 CAcert 网站。 -
如果您正在创建自签名的 SSL 证书并且希望创建另一个(例如,如果您正在将另一个服务器添加到您的网络中),请从第 132 页的第 5 步开始。 (请记住为您的服务器分配一个与服务器主机名一致的通用名称。)
第十九章. OPENVPN 服务器 2.0.6
HTTP://OPENVPN.NET
19.1. 摘要
OpenVPN 是一个开源 VPN 实现,使用 OpenSSL 库加密通过公共网络传输的数据。VPN(虚拟专用网络)是从一个点到另一个点的私有连接,它利用现有网络作为传输媒介。VPN 在企业中很受欢迎,因为它们允许在站点或员工之间进行安全通信,而无需租赁专用 WAN(广域网)线路。
詹姆斯·约南(James Yonan)在 2002 年初开始开发 OpenVPN。当时他的雇主允许他远程办公,因此他对远程通信工具产生了兴趣。他对开源 VPN 社区的考察揭示了安全意识与易用性软件项目之间的分歧。约南的 OpenVPN 已经发展成为一个非常受欢迎且功能完善的 VPN 解决方案,它解决了安全和易用性问题。约南作为项目负责人继续开发 OpenVPN。
有几种 VPN 实现,每种都提供不同层次的安全性和功能性。
-
PPTP(点对点隧道协议)用于实现一些 VPN。由于一个公开的安全漏洞,它被认为是不安全的。
-
L2TP/IPsec(带有互联网协议安全的第二层隧道协议)是一个相对安全的 VPN 解决方案。然而,它穿越许多基本 NAT 路由器时存在问题。
-
OpenVPN 是一种跨平台 VPN 解决方案,已被证明是安全的,能够在 NAT 路由器上持续运行,并且可扩展。OpenVPN 需要安装客户端软件才能运行,并且初始设置可能比较复杂。
OpenVPN 支持路由或桥接 VPN。路由 VPN 为客户端创建一个虚拟子网,并将流量通过 VPN 路由到远程侧的系统。桥接 VPN 将客户端连接到现有的网络子网。数据通过桥接像虚拟以太网集线器一样广播。桥接 VPN 隧道可以为客户端提供与本地连接到该网络相同的网络功能。本指南概述了桥接 VPN 的设置,而不是默认的路由方法。
桥接 VPN 将远程客户端连接到本地网络,就像它们在现场一样,享有该本地网络的所有好处。此外,桥接 VPN 可以使用非路由协议(如 Windows 文件共享、广播流量、局域网游戏等),这些协议可能对小型办公室和家庭办公室用户很有用。
第十九章. OPENVPN 服务器 2.0.6
HTTP://OPENVPN.NET
19.1. 摘要
OpenVPN 是一个开源 VPN 实现,它使用 OpenSSL 库加密通过公共网络传输的数据。VPN(虚拟专用网络)是从一个点到另一个点的私有连接,它利用现有网络作为传输媒介。VPN 因其允许在站点或员工之间进行安全通信而受到企业的青睐,无需租赁专用 WAN(广域网)线路。
詹姆斯·约南(James Yonan)在 2002 年初开始开发 OpenVPN。当时他的雇主允许他远程办公,因此他对远程通信工具产生了兴趣。他对开源 VPN 社区的考察揭示了安全意识与基于可用性软件项目之间的分歧。约南的 OpenVPN 已经发展成为一个非常受欢迎且功能完善的 VPN 解决方案,它解决了安全和可用性问题。约南作为项目负责人继续开发 OpenVPN。
有几种 VPN 实现,每种都提供不同层次的安全性和功能性。
-
PPTP(点对点隧道协议)用于实现一些 VPN。由于一个公开的安全漏洞,它被认为是不安全的。
-
L2TP/IPsec(带有互联网协议安全的第二层隧道协议)是一个相对安全的 VPN 解决方案。然而,它穿越许多基本 NAT 路由器时存在问题。
-
OpenVPN 是一个跨平台 VPN 解决方案,已被证明是安全的、在 NAT 路由器上可持续的,并且可扩展。OpenVPN 需要安装客户端软件才能运行,并且最初设置可能很复杂。
OpenVPN 支持路由或桥接 VPN。路由 VPN 为客户端创建一个虚拟子网,并将流量通过 VPN 路由到远程端系统。桥接 VPN 将客户端连接到现有的网络子网。数据像虚拟以太网集线器一样通过桥接广播。桥接 VPN 隧道可以为客户端提供与本地连接到该网络相同的网络功能。本指南概述了桥接 VPN 的设置,而不是默认的路由方法。
桥接 VPN 将远程客户端连接到本地网络,就像它们在现场一样,享有该本地网络的全部好处。此外,桥接 VPN 可以使用非路由协议(由 Windows 文件共享、广播流量、局域网游戏等所需),小型办公室和家庭办公室用户可能会发现这些协议很有用。
19.2. 资源
OpenVPN 文章
19.3. 必需条件
FreeBSD 7.0-RELEASE(见 "FreeBSD 7.0")
更新后的端口集合(见 "FreeBSD 端口集合")

OpenSSL (参见 "OpenSSL 0.9.8g")
19.4. 可选
用于解析本地网络系统主机名和解析 VPN 客户端 DNS 查询的本地 DNS 服务器(参见 "ISC BIND DNS 服务器 9.4.2")
19.5. 准备
您需要确定您本地网络默认网关、默认 DNS 服务器以及服务器网络接口的设备名称。以下命令将帮助您获取这些地址。
-
要显示本地网络默认网关的 IP 地址和设备名称,成为 root 用户并输入:
# netstat -rn | grep default default 192.168.1.1 UGS 0 2144 ed0在这里,默认网关是
192.168.1.1。网络接口的设备名为ed0。 -
要显示当前配置用于系统上的 DNS 服务器,请输入:
# grep nameserver /etc/resolv.conf
19.6. 安装
要开始 OpenVPN 的安装过程,请输入以下命令:
# cd /usr/ports/security/openvpn
# make config ; make install clean
# rehash
应该会出现一个菜单,其中包含一个 OpenVPN 选项。我们将保留此选项的默认设置(关闭),因此按[Tab]键选择 OK,然后按[Enter]键继续。
19.7. 配置
安装过程完成后,是时候为您的系统配置 OpenVPN 了。
-
在/usr/local/etc 下创建一个名为 openvpn 的目录,并使用以下命令将示例配置文件复制到其中(我们稍后会编辑此文件):
# mkdir /usr/local/etc/openvpn # cd /usr/local/share/doc/openvpn/sample-config-files # cp server.conf /usr/local/etc/openvpn/openvpn.conf -
开始创建 OpenVPN 正常运行所需的 SSL 证书和密钥。在 openvpn 目录下创建一个名为 keys 的子目录,用作工作目录。以下命令将创建 keys 目录并将适当的 OpenSSL 和脚本文件复制到其中:
# mkdir /usr/local/etc/openvpn/keys # cd /usr/local/etc/openvpn/keys # cp /usr/local/openssl/misc/CA.pl . -
使用 CA.pl 脚本创建 CA 证书和密钥:
# ./CA.pl -newca -
当提示输入 CA 证书文件名时,只需按[Enter]键创建文件。
-
当提示输入 PEM 密码短语时,输入一个,并确保记住它。您稍后需要它。
-
当提示输入国家名称、州、城市等时,输入适当的响应。将通用名称输入为
**OpenVPN-CA**。 -
输入电子邮件地址后,您将被提示输入挑战密码。只需按[Enter]键两次;挑战密码和公司名称是可选的。您输入步骤 5 中创建的 PEM 密码短语后,将返回到命令提示符。
-
生成证书请求。输入以下命令开始此过程:
# ./CA.pl -newreq -
当提示输入密码短语时,为了简单起见,请输入您之前使用的相同密码。
-
输入您之前输入的信息,但将通用名称输入为
**服务器**。 -
输入电子邮件地址后,您将被提示输入挑战密码。只需按[Enter]键两次;挑战密码和公司名称是可选的。您输入步骤 5 中创建的 PEM 密码短语后,将返回到命令提示符。
-
从我们生成的请求和证书权威机构文件创建签名的证书。使用以下命令开始证书签名过程:
# ./CA.pl -signreq -
输入您之前分配的密码。
-
回答“是”以签署证书并提交提示以创建一个签名的 SSL 证书。
签名的 SSL 证书位于当前工作目录中,名称为 newcert.pem。为了使其易于识别,我们将将其复制到 openvpn-cert.pem,并将我们的私钥复制到 openvpn-encrypted-key.pem。CA 证书和密钥位于 demoCA 目录中。我们将将它们复制到当前工作目录,并分别重命名为 openvpn-CAcert.pem 和 openvpn-encrypted-CAkey.pem。
-
输入以下命令以按上述方式组织您的 SSL 证书:
# cp newcert.pem openvpn-cert.pem # cp newkey.pem openvpn-encrypted-key.pem # cp demoCA/cacert.pem ./openvpn-CAcert.pem # cp demoCA/private/cakey.pem ./openvpn-encrypted-CAkey.pem -
openvpn-encrypted-key.pem 文件使用您之前输入的密码加密。我们将移除此加密,以便 OpenVPN 可以使用该文件。以下命令将移除加密并使文件可供 root 用户读取:
代码视图:
# openssl rsa -in openvpn-encrypted-key.pem -out openvpn-unencrypted-key.pem # chmod 400 openvpn-unencrypted-key.pem现在我们开始生成用于 OpenVPN 的客户端证书和私钥。在此示例中,我们将使用 client01、client02 等名称。(您可以使用不同的命名约定,以便您能够轻松识别客户端。)
-
要为 client01 创建私钥和证书请求,请输入以下命令:
# openssl req -days 1095 -nodes -new -keyout client01-key.pem\ ? -out client01-req.pem # chmod 400 client01-key.pem -
当提示输入国家名称、州、地区等时,输入适当的响应。
-
您必须输入 client01 作为通用名称,因为每个客户端都必须有一个唯一的通用名称。如果您使用了不同的命名约定,您可以将
*client01*替换为另一个名称,只要每个新客户端名称都是唯一的。
注意: 在可选的挑战密码和公司名称提示时,您可以按 [enter] 键跳过它们;它们不是必需的。
-
使用我们之前创建的 OpenVPN 证书权威机构创建一个签名的客户端证书:
# openssl ca -days 1095 -out client01-cert.pem -in client01-req.pem -
当提示时,输入您之前分配的密码。
-
回答“是”以签署证书并提交提示以继续。
-
要为其他客户端创建额外的证书和密钥,重复上述步骤 17 到 22,将 client02、client03 等替换为 client01。(务必将通用名称更改为反映您正在创建的客户端的迭代。)
-
一旦您创建了客户端证书,请使用安全介质(SFTP、可移动媒体等)将适当的证书(client01-cert.pem)和密钥(client01-key.pem)传输到您的客户端系统。不要将 client01-key.pem 文件暴露给公众!
-
您需要创建一个 Diffie-Hellman 参数,以便 OpenVPN 正确运行。为此,请确保您仍在 /usr/local/etc/openvpn/keys 工作目录中,然后输入以下命令:
# openssl dhparam -out dh2048.pem 2048 -
编辑您在步骤 1 中创建的 openvpn.conf 文件。首先,打开 openvpn.conf:
# ee /usr/local/etc/openvpn/openvpn.conf -
取消注释
dev tap声明(~52),通过删除该行开头的分号(;)。通过在行首插入分号注释dev tun声明。这告诉 OpenVPN 使用tap设备,这对于以太网桥接是必需的。这两行现在应如下所示:dev tap ;dev tun -
告诉 OpenVPN 在哪里可以找到 CA 证书、服务器证书和服务器私钥。向下滚动到
ca声明(~78),将ca.crt替换为相对于 openvpn 目录的相对路径和 CA 证书文件名。对cert和key声明做同样的操作。这些行应如下所示:ca keys/openvpn-CAcert.pem cert keys/openvpn-cert.pem key keys/openvpn-unencrypted-key.pem # This file should be kept secret -
告诉 OpenVPN Diffie-Hellman 参数文件所在的位置。将
dh声明(~87)修改为指向 openvpn 目录中的 dh2048.pem。现在它应如下所示:dh keys/dh2048.pem -
注释掉
server声明(~96),通过在行首插入分号(;)。现在该行应如下所示:;server 10.8.0.0 255.255.255.0 -
取消注释
server-bridge语句(~115),通过删除该行开头的分号。修改该行上的 IP 地址以反映您的网络:第一个 IP 地址应该是您本地网络的默认网关;第二个是本地网络的子网掩码;第三个定义客户端 IP 地址池的下限;第四个定义客户端 IP 地址池的上限。该行应类似于以下内容:
注意: 如果您正在使用本地 DHCP 服务器(在 NAT 路由器中很常见),请确保您在此处指定的范围不与 DHCP 服务器使用的 IP 地址范围重叠。如果您正在使用内置在 NAT 路由器中的 DHCP 服务器,请检查其配置界面以获取此范围。例如,如果 DHCP 服务器有一个起始 IP 地址为 192.168.1.10,最大用户数为 50,则您将有一个从 192.168.1.10 到 192.168.1.60 的范围,并且您可以安全地使用从 192.168.1.61 到 192.168.1.69 的范围用于 VPN 客户端(假设在此范围内没有静态 IP 分配)。
-
取消注释
push redirect-gateway声明(~181)。该行应如下所示:push "redirect-gateway"
注意: 此选项将 VPN 客户端的默认网关更改为 OpenVPN 服务器端网络上的网关。当您处于不受信任的远程网络(如酒店房间、Wi-Fi 热点等)中,并希望消除将您的数据暴露给潜在攻击者的风险时,此功能很有用。如果您不希望启用此功能,请保持此行不变,并跳到以下步骤 34。
-
取消注释
push dhcp-option语句(~187)。此选项指示 VPN 客户端使用指定的 DNS 服务器进行主机名查找。现在该行应如下所示,用您的默认 DNS 服务器 IP 地址替换此处斜体显示的 IP 地址。push "dhcp-option DNS *192.168.1.11*"
注意: 到本文写作时,上述功能在 Windows(OpenVPN GUI)或 Macintosh(Tunnelblick)的 GUI OpenVPN 客户端上运行。如果您在其他平台上拥有客户端,请访问其客户端软件供应商以获取更新,或在 VPN 连接建立后手动设置其 DNS 服务器 IP 地址。
-
为了启用 VPN 客户端之间的通信(同时连接的两个用户),取消注释
client-to-client声明(~196)。该行应如下所示:client-to-client -
取消注释
user nobody和group nobody(~254)。这减少了初始化后 OpenVPN 的权限。这两行应如下所示:user nobody group nobody保存并退出。
19.8. 测试
在本节中,我们将执行一些测试以确认 OpenVPN 能够正确响应请求。在继续之前,您需要一台安装并配置了 OpenVPN 客户端的计算机。(有关客户端设置的信息,请参阅第 143 页的“注意事项”)
-
为了允许远程客户端上的流量桥接到本地网络,必须加载内核模块
if_bridge和if_tap。如下加载这两个模块:# kldload if_bridge # kldload if_tap -
创建虚拟桥接和 tap 网络接口,这些接口将作为远程客户端和本地网络之间的虚拟中心,如下所示(将
*ed0*替换为您的网络接口设备名称):# ifconfig bridge0 create # ifconfig tap0 create # ifconfig tap0 up # ifconfig bridge0 addm ed0 addm tap0 -
启动 OpenVPN 并监视来自您的 OpenVPN 客户端的传入连接。
# cd /usr/local/etc/openvpn # openvpn openvpn.conf您应该看到类似以下输出:
代码视图:
Sun Jun 15 17:04:20 2008 OpenVPN 2.0.6 i386-portbld-freebsd7.0 [SSL] [LZO] Sun Jun 15 17:04:20 2008 Diffie-Hellman initialized with 2048 bit key Sun Jun 15 17:04:20 2008 TLS-Auth MTU parms [ L:1574 D:138 EF:38 EB:0 ET:0 Sun Jun 15 17:04:20 2008 TUN/TAP device /dev/tap0 opened Sun Jun 15 17:04:20 2008 Data Channel MTU parms [ L:1574 D:1450 EF:42 EB:135 Sun Jun 15 17:04:20 2008 GID set to nobody Sun Jun 15 17:04:20 2008 UID set to nobody Sun Jun 15 17:04:20 2008 UDPv4 link local (bound): [undef]:1194 Sun Jun 15 17:04:20 2008 UDPv4 link remote: [undef] Sun Jun 15 17:04:20 2008 MULTI: multi_init called, r=256 v=256 Sun Jun 15 17:04:20 2008 IFCONFIG POOL: base=192.168.0.200 size=11 Sun Jun 15 17:04:20 2008 IFCONFIG POOL LIST Sun Jun 15 17:04:20 2008 client01,192.168.1.61 Sun Jun 15 17:04:20 2008 Initialization Sequence Completed
注意: 如果可能,尝试从本地网络外部将客户端连接到服务器。(如果服务器位于 NAT 路由器后面,请记住转发 UDP 端口 1194 到服务器。)一旦发起连接,您应该看到实时滚动的状态消息。
-
当您完成测试后,在控制台按下[ctrl-C]以关闭 OpenVPN。假设测试成功,配置 OpenVPN 以及必要的桥接和 tap 接口以在系统启动时自动启动。
-
通过首先以如下方式打开/boot 中的 loader.conf 来在启动时启用
if_bridge和if_tap内核模块:# ee /boot/loader.conf -
仔细添加以下行并检查是否有错别字:
if_bridge_load="YES" bridgestp_load="YES" if_tap_load="YES" -
保存并退出。
-
在
/etc目录下的 sysctl.conf 文件中添加一行,以在 OpenVPN 守护进程打开tap0接口时自动应用up标志。为此,以如下方式打开 sysctl.conf:# ee /etc/sysctl.conf并添加以下行:
net.link.tap.up_on_open=1保存并退出。
-
将 OpenVPN 启动行和桥接语句添加到
/etc目录下的 rc.conf 文件中。打开 rc.conf:# ee /etc/rc.conf并添加以下行(将
*ed0*替换为您的网络接口设备名称):openvpn_enable="YES" cloned_interfaces="bridge0 tap0" ifconfig_bridge0="addm ed0 addm tap0"保存、退出并重启。
-
通过与客户端系统重新连接来重新测试 OpenVPN,以确认其正确启动。
19.9. 配置文件
/usr/local/etc/openvpn/openvpn.conf
主配置文件
19.10. 日志文件
/var/log/messages
包含来自 OpenVPN 的输出
/usr/local/etc/openvpn/openvpn-status.log
显示每分钟更新的当前连接状态
/usr/local/etc/openvpn/ipp.txt
记录客户端虚拟 IP 地址
19.11. 注意事项
当你准备配置 OpenVPN 客户端时,你需要在客户端系统上准备以下四个文件:
-
OpenVPN 公共 CA 证书文件 (openvpn-CAcert.pem)
-
客户证书(client01-cert.pem)
-
客户私钥(client01-key.pem)
-
客户端 OpenVPN 配置文件(以下为示例)
您应该已经拥有了前三个文件(我们之前已经创建过它们)。第四个文件是对我们用于配置上述服务器的 openvpn.conf 文件的修改。
client
dev tap
proto udp
remote *host.example.com* 1194
resolv-retry infinite
persist-key
persist-tun
ca *openvpn-CAcert.pem*
cert *client01-cert.pem*
key *client01-key.pem*
comp-lzo
verb 3
您应该在客户端系统上的同一目录中保留这四个文件。
请参阅您特定客户端应用的文档以获取更多安装细节。OpenVPN 网站列出了适用于不同平台的流行 OpenVPN 客户端 GUI,链接为 openvpn.net/gui.html。
第二十章. PHP 5.2.5
HTTP://PHP.NET
20.1. 摘要
PHP (PHP: Hypertext Preprocessor) 是一种可以嵌入到 HTML 中的服务器端脚本语言。它通常用于创建动态生成的网站,并且是像 WordPress(博客软件)、MediaWiki(作为维基百科的基础)和 phpBB(一个基于网络的论坛系统)等应用程序的基础。PHP 还以其易于与关系型数据库管理系统集成而闻名。这些应用程序都使用 PHP 和 MySQL 等关系型数据库系统的一种组合。
与在用户浏览器中执行函数的 JavaScript 不同,PHP 处理的是在 web 服务器上的函数。使用 JavaScript 的网站必须将完整的代码块发送到客户端的浏览器,这可能会消耗带宽,尤其是在大型网站上。另一方面,PHP 在 web 服务器上执行代码,然后只向客户端发送必要的 HTML 以生成完成的页面,从而消除了向浏览器发送冗长代码的需要。
PHP 最初是由 Rasmus Lerdorf 编写的一小套 Perl 脚本。他使用它们来监控他的在线简历的流量。1995 年,在添加了新功能后,Lerdorf 公开发布了一个用 C 语言编写的工具,称为 PHP/FI(Personal Home Page/Forms Interpreter)。1997 年,两位以色列开发者 Zeev Suraski 和 Andi Gutmans 将 PHP/FI 重写以适应他们的电子商务项目。这次重写在 1998 年中作为 PHP 3 发布。那年冬天,Suraski 和 Gutmans 开始了另一轮重写,这次是对 PHP 核心的重写。这项工作的成果是 Zend 引擎,它是当前 PHP 版本的基础。
第二十章. PHP 5.2.5
HTTP://PHP.NET
20.1. 摘要
PHP(PHP:超文本预处理器)是一种可以嵌入到 HTML 中的服务器端脚本语言。它通常用于创建动态网站,是像 WordPress(博客软件)、MediaWiki(支撑维基百科)和 phpBB(一个基于网络的论坛系统)这样的应用程序的基础。PHP 还以其易于与关系型数据库管理系统集成而闻名。这些应用程序都使用 PHP 和像 MySQL 这样的关系型数据库系统组合。
与在用户浏览器中执行函数的 JavaScript 不同,PHP 在 Web 服务器上处理函数。使用 JavaScript 的网站必须将完整的代码块发送到客户端的浏览器,这可能会消耗带宽,尤其是在大型网站上。另一方面,PHP 在 Web 服务器上执行代码,然后只向客户端发送必要的 HTML 以生成完成的页面,从而消除了向浏览器发送长代码的需求。
PHP 最初是由 Rasmus Lerdorf 编写的一组小的 Perl 脚本。他使用它们来监控他的在线简历的流量。1995 年,在添加了新功能后,Lerdorf 公开发布了一个用 C 语言编写的工具,称为 PHP/FI(个人主页/表单解释器)。1997 年,两位以色列开发者 Zeev Suraski 和 Andi Gutmans 将 PHP/FI 重写以适应他们的电子商务项目。这次重写在 1998 年中旬作为 PHP 3 发布。那年冬天,Suraski 和 Gutmans 开始了另一轮重写,这次是 PHP 核心的重写。这项工作的成果是 Zend 引擎,它是当前 PHP 版本的基础。
20.2. 资源
官方 PHP 手册
20.3. 必需的
FreeBSD 7.0-RELEASE(见 "FreeBSD 7.0")
更新的端口集合(见 "FreeBSD 端口集合")
Apache HTTP 服务器(见 "Apache HTTP 服务器 2.2.8")
互联网连接
20.4. 可选的
使用 Lynx(见 "Lynx 2.8.6")从命令行测试 PHP 安装
20.5. 准备
成为超级用户。
20.6. 安装
要开始 PHP 安装过程,请输入以下命令:
# cd /usr/ports/lang/php5
# make config ; make install clean
# rehash
将出现一个菜单,其中包含 php5 的选项。滚动到 APACHE 并按 [空格键] 安装 Apache 模块。将其他选项保留在默认设置,然后按 [Tab] 键选择 OK 并按 [Enter] 键开始安装。
20.7. 配置
安装完成后,是时候为您的系统配置 PHP 了。
-
编辑 httpd.conf 文件以配置 Apache 与 PHP 模块一起工作。打开 httpd.conf:
# ee /usr/local/etc/apache22/httpd.conf -
滚动到
DirectoryIndex声明(~216)并在index.html之前插入**index.php**,如下所示:<IfModule dir_module> DirectoryIndex index.php index.html </IfModule>此设置指示 Apache 在请求的目录包含这两个文件时,优先考虑 index.php 而不是 index.html。
-
滚动到 httpd.conf 的底部并添加以下行:
AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps -
保存并退出。
-
将 php.ini-recommended 文件复制到/usr/local/etc 目录下的 php.ini。这将设置 PHP 在生产服务器环境中所推荐使用的选项。
# cd /usr/local/etc # cp php.ini-recommended php.ini -
指定 PHP 会话保存路径。此指令告诉 PHP 在哪里存储临时会话文件,默认情况下是注释掉的。按照以下方式取消注释
session.save_path。首先,打开 php.ini:# ee /usr/local/etc/php.ini滚动到
session.save_path声明(~1050)并移除其前面的分号。编辑后应如下所示:session.save_path = "/tmp" -
保存,退出,并重新启动 Apache:
# /usr/local/etc/rc.d/apache22 restart
20.8. 测试
要测试您的 PHP 安装,我们将使用内置的phpinfo()函数来显示有关您的 PHP 安装的多种信息。我们将在您的 Web 服务器根目录下创建一个名为 phpinfo.php 的文件,并输入一行 PHP 代码。
-
在 Apache 的默认数据目录中创建 phpinfo.php:
# ee /usr/local/www/apache22/data/phpinfo.php并添加此行:
<?php phpinfo(); ?> -
保存并退出。
-
使用网络浏览器从您的 Apache 服务器请求 phpinfo.php。如果您已安装 Lynx,对于具有主机名host.example.com的 Web 服务器,命令如下所示:
# lynx http://host.example.com/phpinfo.php如果 PHP 配置正确,你应该会看到几个信息表。如果你看到一个空白页面,那么 PHP 可能安装不正确,或者 phpinfo.php 文件可能存在问题。(检查是否有拼写错误等。)
-
测试完成后删除 phpinfo.php 文件:
# rm /usr/local/www/apache22/data/phpinfo.php
20.9. 工具
以下是对 PHP 命令行界面的简要信息。
20.9.1. php
PHP 命令行程序对于测试和开发非常有用。
命令
php
语法
php -``*options arguments*
选项
-a
以交互模式运行 PHP
-f
解析并执行一个文件
-c
指定一个配置文件而不是默认的 php.ini
-v
显示 PHP 版本
-l
检查语法错误
示例
要在交互模式下运行 PHP,请输入:
# php -a
要使用名为 php-test.ini 的备用配置文件解析并执行当前工作目录中名为 test.php 的 PHP 文件,请输入:
# php -c php-test.ini -f test.php
要测试名为 example.php 的文件是否存在语法错误,请输入:
# php -l -f example.php
20.10. 配置文件
/usr/local/etc/php.ini-dist
包含适合开发者的选项
/usr/local/etc/php.ini-recommended
包含更适合生产服务器环境的选项
注意: 您选择的配置文件必须重命名为 php.ini,并位于/usr/local/etc 目录中。
第二十一章. PHPBB 3.0.0
HTTP://PHPBB.COM
21.1. 摘要
phpBB 是一个开源的论坛系统,或称为公告板系统,使用 PHP 编写。该程序使用 MySQL 存储其数据,尽管它也支持 PostgreSQL、Access 和 Microsoft SQL Server 数据库系统。主要功能包括无限数量的论坛和帖子、多语言支持、私有和公共论坛、用于设计定制的模板系统以及论坛搜索工具。
自 1990 年代中期以来,基于网络的公告板非常受欢迎。许多公司使用互联网论坛为他们的客户提供技术支持,同时存在许多爱好者论坛,用户在这里讨论各种主题。
phpBB 是最受欢迎的互联网公告板系统之一。詹姆斯·阿特金森在 2000 年夏天开始为他的网站开发论坛系统,当时他还是一名大学生。他着手创建一个开源的扁平式消息板,当时这样的消息板非常少。内森·科丁和约翰·阿贝拉加入了开发团队,phpBB 1.0 于 2000 年 12 月发布。phpBB 2.0 的开发始于 2001 年 2 月;源代码从头开始重写并于 2002 年 4 月发布。詹姆斯·阿特金森继续带领一个由五名开发者组成的团队管理并领导 phpBB 项目。
第二十一章. PHPBB 3.0.0
HTTP://PHPBB.COM
21.1. 摘要
phpBB 是一个用 PHP 编写的开源论坛系统或公告板系统。该程序使用 MySQL 存储其数据,尽管它也支持 PostgreSQL、Access 和 Microsoft SQL Server 数据库系统。主要功能包括无限数量的论坛和帖子、多语言支持、私有和公共论坛、用于设计定制的模板系统以及论坛搜索工具。
自 1990 年代中期以来,基于网络的公告板一直非常受欢迎。许多公司使用互联网论坛向客户提供技术支持,同时存在许多爱好者论坛,用户在那里讨论各种主题。
phpBB 是最受欢迎的互联网公告板系统之一。詹姆斯·阿特金森在 2000 年夏天,作为一名大学生,开始为他的网站开发一个论坛系统。他着手创建一个开源的扁平式消息板,当时这样的消息板非常少。内森·科丁和约翰·阿贝拉加入了开发团队,phpBB 1.0 在 2000 年 12 月发布。phpBB 2.0 的开发始于 2001 年 2 月;源代码从头开始重写,并于 2002 年 4 月发布。詹姆斯·阿特金森继续带领一个由五名开发者组成的团队管理 phpBB 项目。
21.2. 资源
phpBB 用户指南
www.phpbb.com/support/documentation/3.0
phpBBHacks.com(包括主题在内的大型 phpBB 资源)
21.3. 必需条件
FreeBSD 7.0-RELEASE(见 "FreeBSD 7.0")
更新的端口集合(见 "FreeBSD Ports Collection")
Apache HTTP 服务器(见 "Apache HTTP Server 2.2.8")
PHP 5(见 "PHP 5.2.5")
MySQL 5(见 "MySQL Server 5.0.51")
互联网连接
注册域名
21.4. 准备工作
-
成为超级用户。
-
必须为 phpBB 创建一个 MySQL 数据库和用户账户。以下命令创建了一个名为 phpbb 的数据库和一个名为 phpbb 的用户,并授予此用户全部权限:
# mysql -u root -p mysql> create database phpbb; mysql> grant all on phpbb.* to -> phpbb@localhost identified by 'password'; mysql> quit
将 *密码* 替换为你选择的密码并记下来;你稍后会需要它。(password 两边的单引号是必需的。)
21.5. 安装
要开始 phpBB 安装过程,请输入以下命令:
# cd /usr/ports/www/phpbb3
# make config ; make install clean
21.6. 配置
安装过程完成后,是时候为你的系统配置 phpBB 了。我们将创建一个针对 phpBB 的特定 Apache 配置文件,该文件将指向 phpBB 文件的正确位置,并通过将 phpBB 特定选项与主 httpd.conf 文件分开来简化管理。
-
为 phpBB 创建一个配置文件:
# ee /usr/local/etc/apache22/Includes/phpbb.conf
注意: 默认情况下,Apache 在 /usr/local/etc/apache22/Includes 目录中搜索配置文件。
-
添加以下行:
Alias /*phpbb* "/usr/local/www/phpBB3/" <Directory "/usr/local/www/phpBB3/"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>
注意: 默认情况下,phpBB 被设置为你的网站根目录下的子目录。这意味着你需要在你的网页浏览器中输入
host.example.com/phpbb。要更改此默认目录,将phpbb替换为不同的名称。
-
保存并退出,然后重新启动 Apache 以提交更改:
# /usr/local/etc/rc.d/apache22 restart -
在你喜欢的网页浏览器中打开
host.example.com/phpbb。(如果你已修改,请替换你的主机名和目录。) -
点击安装选项卡,然后点击页面底部的进行下一步按钮。
-
将出现安装兼容性页面。滚动到页面底部并点击开始安装。
-
在数据库配置页面上,选择带有 MySQLi 扩展的 MySQL。为“数据库服务器主机名或 DSN”输入
**localhost**。输入你之前创建的数据库名称、用户名和密码,然后点击进行下一步。 -
下一个页面应显示“连接成功”。点击进行下一步。
-
在管理员配置页面上输入适当的信息。此账户将用于管理 phpBB。点击进行下一步。
-
下一个页面应显示“测试通过”。点击进行下一步。phpBB 将保存配置文件。点击进行下一步。
-
将出现高级设置页面。你可以进行更改或接受默认设置;然后点击进行下一步。phpBB 将指示创建初始数据库表。点击进行下一步以完成安装。
-
phpBB 安装目录必须被移除以启用正常操作,包含你的 MySQL 数据库密码的 config.php 文件应设置为不供世界读取:
# rm -rf /usr/local/www/phpBB3/install # chmod 640 /usr/local/www/phpBB3/config.php
21.7. 管理
使用此 URL 来管理你的 phpBB 安装,用你的服务器主机名替换 host.example.com:
21.8. 配置文件
/usr/local/www/phpBB3/config.php
包含 phpBB 的用户名、密码和数据库信息
第二十二章 PHPLDAP ADMIN 1.1.0
HTTP://PHPLDAPADMIN.SOURCEFORGE.NET
22.1. 摘要
phpLDAPadmin 是一个基于 PHP 编写的开源 Web-based LDAP(轻量级目录访问协议)管理工具。其主要功能包括基于模板的条目创建;添加、修改、重命名和删除 LDAP 条目的能力;支持散列的用户密码管理;LDIF(LDAP 数据交换格式)的导入/导出;以及 LDAP 架构浏览器。
phpLDAPadmin 受 LDAP 管理员欢迎,因为它具有平台无关性。作为一个基于 Web 的应用程序,它允许管理员从几乎任何带有浏览器的计算机上远程维护 LDAP 数据库。
phpLDAPadmin 由 David Smith 创建。Deon George 目前在众多贡献者的帮助下维护 phpLDAPadmin 项目。
第二十二章. PHPLDAP ADMIN 1.1.0
phpldapadmin.sourceforge.net
22.1. 摘要
phpLDAPadmin 是一个基于 PHP 的开源 Web-based LDAP(轻量级目录访问协议)管理工具。其主要功能包括基于模板的条目创建;添加、修改、重命名和删除 LDAP 条目的能力;支持散列的用户密码管理;LDIF(LDAP 数据交换格式)导入/导出;以及 LDAP 架构浏览器。
phpLDAPadmin 受 LDAP 管理员欢迎,因为它具有平台独立性。作为一个基于 Web 的应用程序,它允许管理员从几乎任何带有浏览器的计算机上远程维护 LDAP 数据库。
phpLDAPadmin 由 David Smith 创建。Deon George 目前在众多贡献者的帮助下维护 phpLDAPadmin 项目。
22.2. 资源
phpLDAPadmin 文档
22.3. 必需
FreeBSD 7.0-RELEASE(参见 "FreeBSD 7.0")
更新端口集合(参见 "FreeBSD Ports Collection")
Apache HTTP 服务器(参见 "Apache HTTP Server 2.2.8")
OpenLDAP(参见 "OpenLDAP 服务器 2.3.38")
PHP 5(参见 "PHP 5.2.5")
互联网连接
22.4. 可选
OpenSSL 与已签名 SSL 证书(参见 "OpenSSL 0.9.8g")
注册域名
22.5. 准备
如果您将从不受保护的网络公共网络使用 phpLDAPadmin,那么首先确保您的 Apache HTTP 服务器已正确配置以接受带有 SSL 的 HTTPS 连接。如果您的 Apache HTTP 服务器缺少 SSL 支持,您的 LDAP 登录名和密码将通过网络“明文”传输,可能会被未经授权的人员获取。
成为超级用户。
22.6. 安装
要开始 phpLDAPadmin 的安装过程,请输入:
# cd /usr/ports/net/phpldapadmin
# make config ; make install clean
22.7. 配置
安装过程完成后,配置 phpLDAPadmin 以在您的系统上使用。
-
打开 /usr/local/www/phpldapadmin/config 下的 config.php 文件:
# ee /usr/local/www/phpldapadmin/config/config.php -
滚动到
$config->custom->session['blowfish']声明(~49),并在单引号之间输入一个字母数字字符串(字母或数字,越长越好)。可以在www.grc.com/passwords.htm找到随机字母数字字符串。这加密了 phpLDAPadmin 使用的 cookie 内容(存储在 Web 浏览器中并提供给服务器身份信息的存储数据)。该行应如下所示(用您的字母数字字符串替换示例):$config->custom->session['blowfish'] = '*aSD453PAsldiflDSAPOSD*'; -
滚动到默认哈希算法设置(~255)。将其从
md5更改为ssha(更安全),并通过移除前面的斜杠(//)取消注释该行。该行现在应如下所示:$ldapservers->SetValue($i,'appearance','password_hash','ssha'); -
保存并退出。
-
现在我们将创建一个针对 phpLDAPadmin 的特定 Apache 配置文件。此文件将指向 phpLDAPadmin 文件的正确位置,并通过将 phpLDAPadmin 特定的选项与主 httpd.conf 文件分开来简化管理。默认情况下,Apache 在/usr/local/etc/apache22/Includes 目录中搜索配置文件。要为 phpLDAPadmin 创建一个配置文件,请打开以下文件:
# ee /usr/local/etc/apache22/Includes/phpldapadmin.conf并添加以下行:
Alias /*phpldapadmin* "/usr/local/www/phpldapadmin/htdocs/" <Directory "/usr/local/www/phpldapadmin/htdocs/"> Options none AllowOverride none Order Deny,Allow Deny from all Allow from 127.0.0.1 *192.168.1* </Directory>将
*192.168.1*替换为本地网络的前三个八位字节以限制对本地子网的访问。如果您需要从本地网络外部访问,请参阅“注意事项”以了解如何强制非本地 IP 的安全连接。
注意: 默认情况下,phpLDAPadmin 被设置为您的 Web 服务器根站点的子目录。这意味着为了访问它,您需要在您的网络浏览器中输入
host.example.com/phpldapadmin。要更改此默认目录,将上述条目中的phpldapadmin(斜体)替换为不同的名称。
-
保存并退出,然后重新启动 Apache 以提交更改:
# /usr/local/etc/rc.d/apache22 restart要使用 Web 浏览器访问 phpLDAPadmin,请输入以下 URL(使用您的服务器主机名):
http://host.example.com/phpldapadmin域名example.com中的组织单元(ou) People 的用户 John Doe 将输入:
Login DN: cn=John Doe,ou=People,dc=example,dc=com
22.8. 管理
要使用 phpLDAPadmin 管理您的 LDAP 服务器,请输入以下 URL 之一,用您的服务器主机名替换host.example.com。
host.example.com/phpldapadmin(用于不安全的连接)
host.example.com/phpldapadmin(用于 SSL 加密连接)
您将被提示输入登录 DN;请使用以下语法。将*example*和*com*替换为您的域名。
Login DN:
cn=Manager,dc=example,dc=com
22.9. 配置文件
/usr/local/www/phpldapadmin/config/config.php
允许自定义 phpLDAPadmin
22.10. 注意事项
为了确保通过互联网登录的安全性,所有通信都应该通过要求使用 HTTPS 连接到 phpLDAPadmin 来加密。我们将重新构建我们的 phpLDAPadmin 特定配置文件以确保这一点。Apache 需要配置 SSL 支持才能实现这一点。打开现有文件:
# ee /usr/local/etc/apache22/Includes/phpldapadmin.conf
然后修改文件,使其内容如下:
Alias /*phpldapadmin * "/usr/local/www/phpldapadmin/htdocs/"
<Directory "/usr/local/www/phpldapadmin/htdocs/">
Options none
AllowOverride None
Order Allow,Deny
Allow from All
</Directory>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /*phpldapadmin*
RewriteRule (.*) https://*host.example.com* /*phpldapadmin* / [R]
</IfModule>
根据您的域名进行适当的替换,然后保存、退出并重新启动 Apache:
# /usr/local/etc/rc.d/apache22 restart
第二十三章. PHPMYADMIN 2.11.5
HTTP://WWW.PHPMYADMIN.NET
23.1. 摘要
phpMyAdmin 是一个基于 PHP 的开源 Web 数据库管理工具。许多人将 phpMyAdmin 用作 MySQL 默认安装中包含的命令行工具的替代品。phpMyAdmin 获得了众多行业奖项,并得到了数据库管理员社区的广泛赞誉。
主要功能包括创建和删除数据库;创建、删除或修改表;删除、编辑或添加字段;执行任何 SQL 语句;管理字段上的键;管理权限;以及将数据导出为各种格式。phpMyAdmin 已被翻译成 50 多种语言。
与其他 Web 管理工具一样,phpMyAdmin 为管理员提供了高度的灵活性。它是平台无关的,并且可以从任何连接到互联网的计算机上使用几乎任何 Web 浏览器执行管理功能。
phpMyAdmin 的发展始于 1998 年,由 IT 顾问 Tobias Ratschiller 发起。Ratschiller 的工作基于一个名为 MySQL-Webadmin 的程序,这是 Peter Kuppelwieser 的产品,当时他已经停止了开发。Ratschiller 为 phpMyAdmin 编写了新的代码,并改进了 Kuppelwieser 项目中的概念。Ratschiller 于 2001 年离开了 phpMyAdmin 项目。由 Olivier Müller 领导的八人开发团队在 SourceForge.net 上继续开发 phpMyAdmin (sourceforge.net)。
第二十三章. PHPMYADMIN 2.11.5
HTTP://WWW.PHPMYADMIN.NET
23.1. 摘要
phpMyAdmin 是一个基于 PHP 的开源 MySQL 网络管理工具。许多人将 phpMyAdmin 作为 MySQL 默认安装中包含的命令行工具的替代品使用。phpMyAdmin 获得了众多行业奖项,并得到了数据库管理员社区的广泛赞誉。
主要功能包括创建和删除数据库;创建、删除或修改表;删除、编辑或添加字段;执行任何 SQL 语句;管理字段上的键;管理权限;以及将数据导出为各种格式。phpMyAdmin 已被翻译成 50 多种语言。
与其他网络管理工具一样,phpMyAdmin 为管理员提供了高度的灵活性。它是平台无关的,并且可以从任何连接到互联网的计算机上使用任何网络浏览器执行管理功能。
phpMyAdmin 的开发始于 1998 年,由 IT 顾问 Tobias Ratschiller 发起。Ratschiller 的工作基于一个名为 MySQL-Webadmin 的程序,这是 Peter Kuppelwieser 的产品,当时已经停止开发。Ratschiller 为 phpMyAdmin 编写了新的代码,并改进了 Kuppelwieser 项目中的概念。Ratschiller 于 2001 年离开了 phpMyAdmin 项目。由 Olivier Müller 领导的八人开发团队在 SourceForge.net 上继续开发 phpMyAdmin(sourceforge.net)。
23.2. 资源
phpMyAdmin 文档
www.phpmyadmin.net/documentation
23.3. 必需
FreeBSD 7.0-RELEASE(见"FreeBSD 7.0")
更新的端口集合(见"FreeBSD Ports Collection")
Apache HTTP 服务器(见"Apache HTTP Server 2.2.8")
MySQL 5(见"MySQL Server 5.0.51")
PHP 5(见"PHP 5.2.5")
互联网连接
23.4. 可选
配有签名 SSL 证书的 OpenSSL(见"OpenSSL 0.9.8g")
注册域名
23.5. 准备
如果您计划从不受保护的网络使用 phpMyAdmin,请确保您的 Apache HTTP 服务器已正确配置以接受带有 SSL 的 HTTPS 连接。如果您的 Apache HTTP 服务器缺少 SSL 支持,您的 MySQL 登录名和密码将通过网络“明文”传输,可能会被未经授权的人员获取。
成为超级用户。
注意: 本指南假设 MySQL 和 Apache 在同一系统上共存。
23.6. 安装
要开始安装 phpMyAdmin,请输入以下命令:
# cd /usr/ports/databases/phpmyadmin
# make config ; make install clean
将出现一个选项菜单。向下滚动到 MYSQLI 并按[空格键]启用改进的 MySQL 支持(这允许访问 MySQL 4.1.x 及以后的某些功能)。将其他选项保留在默认值。按[tab]键高亮显示 OK,然后按[enter]键开始安装。
23.7. 配置
安装过程完成后,是时候为您的系统配置 phpMyAdmin 了。
-
在位于/usr/local/www/phpMyAdmin 目录的 config.inc.php 文件中指定配置选项。以这种方式打开 config.inc.php:
# cd /usr/local/www/phpMyAdmin # ee config.inc.php -
删除 config.inc.php 文件的内容(以便更容易阅读),然后添加以下几行。
括号中的选项可能需要根据您的特定配置进行修改。下面提供了每行的说明。
<?php cfg['blowfish_secret'] = '*4fj8Rv15ZFls16Lei23qrn42*'; $i = 1; $cfg['Servers'][$i]['connect_type'] = '*socket*'; $cfg['Servers'][$i]['auth_type'] = 'cookie'; $cfg['Servers'][$i]['extension'] = 'mysqli'; ?>$cfg[blowfish_secret] =是 Blowfish 算法用于加密存储在 cookie 中的密码信息的随机字符串。在此处输入不超过 46 个随机字符的字符串。$i =指定了下面几行的数组编号。如果您有多个 MySQL 服务器,可以为每个服务器指定一组(数组)选项。$cfg['Servers'][$i]['connect_type'] =告诉 phpMyAdmin 通过 Unixsocket或tcp连接来联系 MySQL 服务器。当 Apache 和 MySQL 在同一系统上运行时,通常使用 Unix 套接字。TCP 连接允许您管理运行在另一台计算机上的 MySQL 服务器,尽管 MySQL 也必须配置为允许传入的 TCP 连接。$cfg['Servers'][$i]['auth_type'] =告诉 phpMyAdmin 使用加密 cookie 来存储用户名和密码信息。$cfg['Servers'][$i]['extension'] =指示 phpMyAdmin 使用 mysqli PHP 扩展,这允许访问 MySQL 4.1 及以后版本中添加的功能。 -
保存并退出。
注意: 下几个步骤配置可选的链接表基础设施,这是一组 phpMyAdmin 特定的功能,包括 PDF 生成、书签和历史记录等。如果您不需要此功能,请跳到步骤 8。
-
创建一个名为 pma 的 MySQL 用户,并授予其对 phpmyadmin 数据库的
select、insert、update和delete权限。以下是创建用户并分配适当权限的方法:# mysql -u root -p mysql> grant select, insert, update, delete on phpmyadmin.* to -> pma@localhost identified by 'password'; mysql> quit;将上面的
*password*替换为任意密码,稍后将会再次使用。 -
使用 phpMyAdmin 附带创建表的脚本创建适当的数据库和表。以下命令将自动创建数据库和表:
# cd /usr/local/www/phpMyAdmin/scripts # mysql -u root -p < create_tables_mysql_4_1_2+.sql -
重新编辑/usr/local/www/phpMyAdmin 中的 config.inc.php 文件以完成设置。打开文件:
# ee /usr/local/www/phpMyAdmin/config.inc.php并添加以下行:
<?php $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = '*password*'; $cfg['Servers'][$i]['table_info'] = 'pma_table_info'; $cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages'; $cfg['Servers'][$i]['history'] = 'pma_history'; $cfg['Servers'][$i]['column_info'] = 'pma_column_info'; $cfg['Servers'][$i]['table_coords'] = 'pma_table_coords'; $cfg['Servers'][$i]['relation'] = 'pma_relation'; $cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark'; ?>将
*password*替换为在步骤 4 中分配给 pma 用户的密码。 -
保存并退出。
-
创建一个针对 phpMyAdmin 的特定 Apache 配置文件。此文件将指向 phpMyAdmin 文件的正确位置,并通过将 phpMyAdmin 特定的选项与主 httpd.conf 文件分开来简化管理。默认情况下,Apache 在/usr/local/etc/apache22/Includes 目录中搜索配置文件。要为 phpMyAdmin 创建一个,打开 phpmyadmin.conf:
# ee /usr/local/etc/apache22/Includes/phpmyadmin.conf并添加以下行:
Alias /*phpmyadmin* "/usr/local/www/phpMyAdmin/" <Directory "/usr/local/www/phpMyAdmin/"> Options none AllowOverride All Order Deny,Allow Deny from all Allow from 127.0.0.1 *192.168.1* </Directory>将
*192.168.1*替换为您本地网络的前三个八位字节以限制对本地子网的访问。如果您需要从本地网络外部访问,请参阅第 161 页上的关于强制非本地 IP 的安全连接的说明。
注意: 默认情况下,phpMyAdmin 被设置为您的 Web 服务器根站点的子目录。这意味着您需要在您的网页浏览器中输入
host.example.com/phpmyadmin以访问它。要更改此默认目录,将上面斜体显示的phpmyadmin替换为不同的名称。
-
保存并退出。重新启动 Apache 以提交更改:
# /usr/local/etc/rc.d/apache22 restart -
您可以使用网页浏览器通过
host.example.com/phpmyadmin(将host.example.com替换为您的服务器主机名)访问 phpMyAdmin。
23.8. 管理
要使用 phpMyAdmin 管理您的 MySQL 服务器,请使用以下 URL 之一,根据需要替换服务器的主机名和目录:
host.example.com/phpmyadmin(用于未加密通信)
host.example.com/phpmyadmin(用于加密通信)
23.9. 配置文件
/usr/local/www/phpMyAdmin/config.inc.php
phpMyAdmin 的主要配置文件
注意: 有关选项的详细信息,请参阅/usr/local/www/phpMyAdmin/Documentation.txt。
23.10. 备注
当允许从互联网登录时,所有通信都应通过仅允许 HTTPS 连接到 phpMyAdmin 来加密。我们将重新构建我们的 phpMyAdmin 特定配置文件以适应这一点。Apache 需要配置 SSL 支持才能使此功能正常工作。打开现有文件:
# ee /usr/local/etc/apache22/Includes/phpmyadmin.conf
然后修改文件,使其内容如下:
Alias /*phpmyadmin * "/usr/local/www/phpMyAdmin/"
<Directory "/usr/local/www/phpMyAdmin/">
Options none
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{REQUEST_URI} /*phpmyadmin*
RewriteRule (.*) https://*host.example.com* /*phpmyadmin* / [R]
</IfModule>
进行适当的替换后保存,退出并重新启动 Apache:
# /usr/local/etc/rc.d/apache22 restart
第二十四章. POSTFIX SMTP 服务器 2.5.1
HTTP://WWW.POSTFIX.ORG
24.1. 摘要
Postfix 是一个开源的邮件传输代理(MTA)。MTA 用于在互联网上路由和发送电子邮件。Postfix 最初被开发作为广泛部署的 Sendmail MTA 的替代品。像 Sendmail 一样,Postfix 使用 SMTP 进行操作。在开发过程中,由于 Sendmail 历史上存在与安全相关的问题,因此特别强调了安全性。
Postfix 支持 SASL 和 TLS 进行安全连接,以及 Maildir 邮箱格式(从 Qmail MTA 采纳)。Postfix 是多个 Linux 发行版、NetBSD 以及苹果最新版本的 Mac OS X 的默认 MTA。
Wietse Venema,一位计算机安全专家和 IBM 研究员,于 1998 年编写了 Postfix。IBM 将 Venema 的软件(当时命名为 IBM Secure Mailer)作为开源软件发布,希望它能够被广泛采用,以创建更快、更安全的电子邮件基础设施。这次发布帮助 IBM 发展了其开源策略,这在当时正变得越来越受欢迎。
第二十四章。POSTFIX SMTP 服务器 2.5.1
HTTP://WWW.POSTFIX.ORG
24.1. 摘要
Postfix 是一个开源的邮件传输代理(MTA)。MTA 用于在互联网上路由和发送电子邮件。Postfix 最初被开发为广泛部署的 Sendmail MTA 的替代品。像 Sendmail 一样,Postfix 使用 SMTP 进行操作。在开发过程中,由于 Sendmail 历史上存在许多安全问题,因此特别强调了安全性。
Postfix 支持 SASL 和 TLS 进行安全连接,以及 Maildir 邮箱格式(从 Qmail MTA 采用)。Postfix 是多个 Linux 发行版、NetBSD 以及苹果 Mac OS X 最新版本的默认 MTA。
Wietse Venema,一位计算机安全专家和 IBM 研究员,于 1998 年编写了 Postfix。IBM 将 Venema 的软件(当时名为 IBM Secure Mailer)作为开源软件发布,希望它能够被广泛采用,以创建更快、更安全的电子邮件基础设施。这次发布帮助 IBM 发展其开源策略,该策略在当时正日益受到欢迎。
24.2. 资源
Postfix 文档
www.postfix.org/documentation.html
RFC 2821 - 简单邮件传输协议
24.3. 必需
FreeBSD 7.0-RELEASE (参见 "FreeBSD 7.0")
更新的端口集合(参见 "FreeBSD Ports Collection")
互联网连接
注册的域名
对您域名 DNS MX (DNS 邮件交换) 记录的行政访问
24.4. 可选
Cyrus SASL2 (参见 "Cyrus SASL 2.1.22")
使用带有签名 SSL 证书的 OpenSSL (参见 "OpenSSL 0.9.8g")
注意: SASL 和 SSL 一起使用以创建安全的电子邮件中继。SASL 允许用户在成功认证后中继电子邮件。SSL 加密认证事务和数据传输。
24.5. 准备
要启用 Postfix 的 TLS/SSL 和/或 SASL,请确保在继续 Postfix 安装之前它们已经安装。
注意: 记录您互联网服务提供商的出站 SMTP 服务器的 FQDN。它通常看起来像smtp.ispname.com。
成为超级用户。
24.6. 安装
-
要开始 Postfix 安装过程,请输入以下命令:
# cd /usr/ports/mail/postfix # make config ; make install clean # rehash将出现一个菜单,询问您选择 Postfix 的选项。如果您计划使用 TLS/SSL 和/或 SASL2,请使用箭头键突出显示选项,然后按 [空格键] 打勾。选择您希望安装的选项后,按 [tab] 键突出显示“确定”,然后按 [enter] 键。
-
在安装过程中,您将被要求将用户 postfix 添加到组 mail。输入 Y 以接受此操作并继续安装。
-
当询问您是否希望在 /etc/mail/mailer.conf 中激活 Postfix 时,输入 Y。这将创建位于 /etc/mail 中的特定于 Postfix 的 mailer.conf。
24.7. 配置
安装过程完成后,是时候为您的系统配置 Postfix 了。
-
编辑位于 /usr/local/etc/postfix 的 main.cf 文件。首先,使用 Easy Editor 打开 main.cf:
# ee /usr/local/etc/postfix/main.cf -
滚动并取消注释三个
mydestination声明中的第二个(通过删除前面的井号)。该行现在应如下所示:mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain -
取消注释
mynetworks_style声明 (~247)。这将允许本地网络(子网)中的客户端在没有身份验证的情况下进行中继访问。如果您的本地子网不受信任或您希望强制所有客户端的身份验证,请不要修改此行。如果允许子网中继访问,该行应如下所示:#mynetworks_style = host -
如果您的 ISP 封锁端口 25,请继续到步骤 5;如果没有,请跳到步骤 6。(有关检测端口 25 封锁的说明,请参阅“注意事项”)
-
滚动到
relayhost声明 (~311) 并指定您的 ISP 的 SMTP 服务器。将*mailserver.isp.tld*替换为您的 ISP 服务器地址,并取消注释此行。该行应如下所示:relayhost = [*mailserver.isp.tld*] -
取消注释
home_mailbox声明 (~415) 以启用 Maildir 的邮件投递。该行现在应如下所示:home_mailbox = Maildir/如果您不想使用 SSL 加密的 SASL 设置,请保存、退出并跳到步骤 12。要启用使用 SSL 加密的 SASL,请继续。
24.7.1. 启用使用 SSL 加密的 SASL
NaN. 滚动到 main.cf 文件的底部(如果您使用 Easy Editor,请按 [ctrl-U])并添加以下行以启用 Cyrus SASL2:
```
smtp_sasl_auth_enable = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $mydomain
broken_sasl_auth_clients = yes
smtp_sasl_password_maps = hash:/usr/local/etc/sasldb2
smtpd_recipient_restrictions =
permit_sasl_authenticated
permit_mynetworks
reject_unauth_destination
```
* * *
***注意:*** Postfix 配置语句跨越多行时,需要像上面最后三行所示的前导空白。
* * *
NaN. 将下一组配置语句添加到 main.cf 中将启用 TLS/SSL 加密。您可以使用空白行将这些行与 SASL 指令分开,以便更容易区分 SASL2 选项和 TLS/SSL 选项。
* * *
***注意:*** 这里使用的命名约定与本书中的 OpenSSL 指南一致。根据您的系统适当替换斜体中的项。
* * *
```
smtp_tls_CAfile = */usr/local/openssl/certs/example.com-CAcert.pem*
smtp_tls_cert_file = */usr/local/openssl/certs/host.example.com-cert.pem*
smtp_tls_key_file =
*/usr/local/openssl/certs/host.example.com-unencrypted-key.pem*
smtp_tls_session_cache_database = btree:/var/run/smtp_tls_session_cache
smtp_tls_security_level = may
smtpd_tls_CAfile = */usr/local/openssl/certs/example.com-CAcert.pem*
smtpd_tls_cert_file = */usr/local/openssl/certs/host.example.com-cert.pem*
smtpd_tls_key_file =
*/usr/local/openssl/certs/host.example.com-unencrypted-key.pem*
smtpd_tls_session_cache_database = btree:/var/run/smtpd_tls_session_cache
smtpd_tls_received_header = yes
smtpd_tls_security_level = may
tls_random_source = dev:/dev/urandom
smtpd_tls_auth_only = yes
```
上述使用的文件是:
[example.com-CAcert.pem](http://example.com-CAcert.pem) 证书颁发机构根证书
[host.example.com-cert.pem](http://host.example.com-cert.pem) 服务器证书
[host.example.com-unencrypted-key.pem](http://host.example.com-unencrypted-key.pem) 服务器私钥
NaN. 保存并退出。
假设一切顺利,您现在已通过启用带有 SSL 的 SASL 创建了一种安全的方式远程中继电子邮件。话虽如此,如果您的用户将从远程位置发送电子邮件,他们可能会受到 ISP 强制的 SMTP 端口 25 封锁(见 "注意事项"),这阻止他们通过默认端口发送出站邮件。为了解决这个问题,我们将启用 SMTP 提交端口 587,用户可以通过此端口安全地向您的服务器提交电子邮件。
NaN. 修改位于 /usr/local/etc/postfix 的 master.cf 文件以启用提交端口。打开该文件:
```
# ee /usr/local/etc/postfix/master.cf
```
and uncomment the following four lines (~12):
```
submission inet n - n - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
```
NaN. 保存并退出。
24.7.2. 完成配置
无论您是否启用了带有 SSL 加密的 SASL,请按照以下步骤完成配置。
NaN. 要将发送给 root 用户的电子邮件转发,您需要编辑位于 /etc/mail 目录中的 aliases 文件。使用 Easy Editor 打开此文件:
```
# ee /etc/mail/aliases
```
滚动到 (~19),取消注释此行,并输入系统管理员的电子邮件地址。根账户的电子邮件将被转发到这个电子邮件地址。此行应如下所示,用正确的电子邮件地址替换 username@example.com:
```
root: *username@example.com*
```
NaN. 保存并退出。
NaN. 要更新 aliases.db 以反映对别名文件的更改,请输入以下命令:
```
# newaliases
```
24.8. 测试
在本节中,我们将执行一些基本测试以确认 Postfix 正确响应 SMTP 命令。
-
通过编辑位于 /etc 的 rc.conf 文件,将 Postfix 配置为在启动时自动启动,而不是 Sendmail MTA。首先,打开 rc.conf:
# ee /etc/rc.conf然后添加以下行以在启动时自动启动 Postfix:
postfix_enable="YES" sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" -
保存并退出。
-
在 /etc 中创建一个名为 periodic.conf 的文件,并向其中添加四行。由于 Postfix 正在取代 Sendmail 作为 MTA,我们可以从每日运行脚本中删除与 Sendmail 相关的不必要指令。创建并打开 /etc/periodic.conf:
# ee /etc/periodic.conf然后将以下行添加到空文件中:
daily_clean_hoststat_enable="NO" daily_status_mail_rejects_enable="NO" daily_status_include_submit_mailq="NO" daily_submit_queuerun="NO" -
保存并退出。
-
输入以下命令以停止 Sendmail 并启动 Postfix 进行测试:
# killall sendmail # /usr/local/etc/rc.d/postfix start
24.8.1. 发送邮件
要检查 Postfix 是否正在运行并处理邮件请求,我们将使用 telnet 发送 SMTP 命令并发送测试消息。
NaN. 使用以下命令通过 telnet 初始化与 Postfix 的连接:
```
# telnet localhost 25
Connected to localhost.
Escape character is '^]'.
220 *host.example.com * ESMTP Postfix
```
您的主机名应显示在 host.example.com 的位置。
NaN. 创建测试电子邮件消息。您可以将 test@example.com 替换为任何电子邮件地址;在测试目的上,它不需要是有效的。
```
mail from: test@example.com
250 Ok
```
NaN. 指定电子邮件收件人,将 user@example.com 替换为您可访问的外部电子邮件账户,最好通过网页邮箱。按照以下格式输入每一行,然后在测试消息的末尾输入一个空行(**.**):
```
rcpt to: user@example.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
Subject: test messageThis is a test message
.
```
您应该看到类似以下内容的输出(斜体化的 ID 标签在您的输出中将是不同的):
```
250 Ok: queued as *1242EC119*
```
NaN. 关闭连接:
```
quit
```
NaN. 检查收件人电子邮件账户以查看消息是否成功发送。如果您没有设置 SASL 和 SSL,请跳转到 "接收邮件"。
24.8.2. 测试 SASL over SSL
如果您已配置 Postfix 以支持 SASL 和 SSL,则可以启动 SSL 连接并使用 SASL 进行身份验证。
NaN. 将您要测试的用户账户的用户名和密码编码为 Base-64 格式。输入以下命令以编码您的用户名和密码,适当替换斜体项:
```
# perl -MMIME::Base64 -e 'print encode_base64("\0 username\0 password")'
*AHVzZXJuYW1lAHBhc3N3b3Jk*
```
请确保将此字符串准确地记录下来,您稍后需要输入它。
NaN. 下一个命令将启动到 Postfix SMTP 服务器的 SSL 加密连接:
```
# openssl s_client -starttls smtp -crlf -connect localhost:25
CONNECTED(00000003)...
...SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 3886C410C971913F87CA439B92FA7ED67CFFEE7D3...
Session-ID-ctx:
Master-Key: B9F96FB08D2E7C86B2454C7553F0F84D1C2DD3B3...
Key-Arg : None
Start Time: 1196074152
Timeout : 300 (sec)
Verify return code: 19 (self signed certificate in certificate chain)
---
250 DSN
```
NaN. 使用您之前创建的编码用户名和密码对服务器进行身份验证:
```
AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk
```
如果身份验证成功,您应该看到以下内容:
```
235 2.0.0 Authentication successful
```
在此阶段,您可以按照 "发送邮件" 中的说明发送测试邮件。
24.8.3. 接收邮件
现在我们将测试 Postfix 服务器接收电子邮件的能力。请确保您的域的主 DNS MX 记录指向您的服务器 IP 地址(您的域名注册商应提供有关如何执行此操作的详细信息)。如果您有 NAT 路由器,请确保端口 25 已转发到您的服务器,否则此测试将不会成功。
NaN. 从外部电子邮件账户(例如,Gmail 或 Yahoo! 账户)向您的服务器上的有效用户账户(除了 root)发送测试消息。
NaN. 使用以下命令切换到用户的邮件目录(将 *username* 替换为您在服务器上发送邮件的目标用户名):
```
# cd /usr/home/username/Maildir/new
# more *
```
您应该看到测试电子邮件的内容。
24.9. 工具
以下是对 postfix 启动脚本和 postqueue 工具的简要信息。
24.9.1. postfix
此脚本用于控制 Postfix 守护进程。
命令
/usr/local/etc/rc.d/postfix
语法
/usr/local/etc/rc.d/postfix *选项*
选项
start
启动 Postfix 邮件系统
stop
停止 Postfix 邮件系统
reload
重新启动 Postfix 邮件系统并重新读取配置文件
示例
要停止 Postfix 邮件系统,请在命令提示符下输入以下命令:
# /usr/local/etc/rc.d/postfix stop
24.9.2. postqueue
此实用程序用于检查 Postfix 的邮件队列。
命令
postqueue
语法
postqueue -``*选项*
选项
-f
指示 Postfix 清空/投递队列中的邮件
-p
显示 Postfix 队列的内容
示例
要显示 Postfix 邮件队列的内容,请在命令提示符下输入以下命令:
# postqueue -p
24.10. 配置文件
/usr/local/etc/postfix/main.cf
包含大多数常用的配置选项。
/usr/local/etc/postfix/master.cf
包含 Postfix 主进程的配置选项。它还控制 Postfix 如何与其他第三方软件(过滤器等)交互。
/etc/mail/aliases
邮件重定向规则的文本表示。newaliases命令将此文件转换为名为 aliases.db 的数据库文件,用于与 Postfix 一起使用;aliases.db 存储在/etc 中。
24.11. 日志文件
/var/log/maillog
邮件活动通用日志
24.12. 备注
-
端口 25 为了防止用户发送垃圾邮件,大多数主要的互联网服务提供商除了自己的 SMTP 服务器外,都会阻止端口 25 的出站流量。为了查看您的 ISP 是否阻止了端口 25,请输入以下命令:
# telnet smtp.stanford.edu 25 Trying 171.67.22.28... Connected to smtp1.stanford.edu. Escape character is '^]'. 220 smtp1.stanford.edu ESMTP Postfix # quit如果端口 25 没有被阻止,您应该会看到上述输出。如果您收到如下信息:
Trying *xx*.*xx*.*xx*.*xx*...如果看起来卡住了,端口 25 可能被阻止。按[ctrl-C]中断并返回提示符。
-
Postfix 使用 SMTP 在互联网上发送电子邮件。电子邮件客户端(Outlook、Thunderbird、Apple 的 Mail、Eudora 等)需要另一个协议来从您的邮件服务器接收消息,即 IMAP 或 POP3。有关安装/配置的详细信息,请咨询。
-
默认的入站邮件消息大小限制为 10,240,000 字节(10.2MB)。您可以通过在/usr/local/etc/postfix 中的 main.cf 文件末尾添加
"message_size_limit =*xxx*``"(将*xxx*替换为字节数)来更改此大小限制。以下命令将此语句追加到 main.cf 并重新启动 Postfix(将*xxx*替换为字节数;例如,要设置 25MB 的限制,请使用25000000):# cd /usr/local/etc/postfix # cp main.cf main.cf.old # echo "message_size_limit = xxx" >> main.cf # /usr/local/etc/rc.d/postfix reload
注意: 如果将消息大小限制更改为大于 51200000 的值,您需要添加
mailbox_size_limit语句并确保它大于message_size_limit设置。如果您想要 100MB 的消息大小限制,这两个语句将如下所示:
mailbox_size_limit = 101000000 message_size_limit = 100000000
第二十五章. PROCMAIL 3.22
HTTP://WWW.PROCMAIL.ORG
25.1. 摘要
Procmail 是一种邮件过滤器,或称为邮件投递代理(MDA),用于根据一组指定的规则或操作处理收到的电子邮件。这些操作可以包括将电子邮件转发到不同的地址,将标记为垃圾邮件的消息路由到垃圾邮件文件夹,发送自动回复消息等。处理可以应用于所有收到的消息,或者仅限于包含某些标签或字符串的消息。
对于新用户来说,设置 Procmail 规则可能具有挑战性。"资源"部分列出了托管大量示例和配方以帮助配置的网站。本指南将提供使用 Procmail 将标记为垃圾邮件的消息重定向到单独垃圾邮件文件夹的详细信息。
Procmail 最初由 Stephen R. van den Berg 于 1990 年创建。1998 年,Philip Guenther 成为 Procmail 的维护者;他继续领导开发工作。
第二十五章. PROCMAIL 3.22
HTTP://WWW.PROCMAIL.ORG
25.1. 摘要
Procmail 是一个邮件过滤器,或邮件投递代理(MDA),用于根据一组指定的规则或操作处理传入的电子邮件。这些操作可以包括将电子邮件转发到不同的地址、将标记为垃圾邮件的消息路由到垃圾邮件文件夹、发送自动回复消息等。处理可以应用于所有传入的消息,或限制为包含某些标记或字符串的消息。
设置 Procmail 规则对新用户来说可能具有挑战性。"资源"部分列出了提供大量示例和配置食谱的网站。本指南将提供有关使用 Procmail 将标记为垃圾邮件的邮件重定向到单独的垃圾邮件文件夹的详细信息。
Procmail 最初由 Stephen R. van den Berg 于 1990 年创建。1998 年,Philip Guenther 成为 Procmail 的维护者;他继续领导开发工作。
25.2. 资源
Procmail 文档项目
Procmail FAQ(Era Eriksson)
partmaps.org/era/procmail/mini-faq.html
25.3. 必需的
FreeBSD 7.0-RELEASE(见"FreeBSD 7.0")
更新的端口集合(见"FreeBSD 端口集合")
Postfix SMTP 服务器(见"Postfix SMTP 服务器 2.5.1")
SpamAssassin(见"SpamAssassin 3.2.4")
互联网连接
25.4. 准备
成为超级用户。
25.5. 安装
要开始 Procmail 的安装过程,请输入以下命令:
# cd /usr/ports/mail/procmail
# make config ; make install clean
# rehash
安装过程将暂停,以便您可以向测试锁定例程添加目录。我们将接受默认设置,因此按[enter]键继续。
25.6. 配置
安装完成后,是时候为您的系统配置 Procmail 了。
-
创建一个全局配置文件(即影响所有用户的文件),将 SpamAssassin 标记为垃圾邮件的电子邮件路由到每个用户收件箱的子文件夹,称为垃圾邮件:
# ee /usr/local/etc/procmailrc添加以下行:
# Environment Variables MAILDIR=$HOME/Maildir/ DEFAULT=$HOME/Maildir/ DROPPRIVS = yes LOGFILE=$HOME/proc.log # Spam to Junk Recipe :0 *^X-Spam-Status: Yes .Junk/ -
保存并退出。
-
在 Postfix 的主.cf 文件中添加一行,指定 Procmail 作为本地邮件投递代理。打开 main.cf:
# ee /usr/local/etc/postfix/main.cf使用[ctrl-U]滚动到 main.cf 的底部并添加此行:
mailbox_command = /usr/local/bin/procmail -
保存、退出并重新加载 Postfix 的配置:
# postfix reload
25.7. 测试
在本节中,我们将执行测试以确认 Procmail 是否正确地将邮件发送到用户的邮箱中。
-
向邮件系统发送测试垃圾邮件消息。首先,打开 telnet 连接:
# telnet localhost 25 Connected to localhost. Escape character is '^]'. 220 *host.example.com * ESMTP Postfix
注意: 您的主机名应该代替host.example.com。
输入以下内容(用您的域名替换example.com):
mail from: test@example.com 250 Ok rcpt to: spamd@example.com 250 Ok
注意: 如果您愿意,可以指定不同的收件人。如果您在这本书中使用了 SpamAssassin 指南,则 spamd 账户将存在于您的系统上。
接下来,按照以下所示输入以下行,每行输入后按[回车]键。
注意: 这个长字符串被称为 GTUBE(通用垃圾邮件测试)。它会导致 SpamAssassin 将消息标记为垃圾邮件。
data 354 End data with <CR><LF>.<CR><LF> Subject: This is Spam XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X . 250 Ok: queued as *1242EC120*
注意: 在您的输出中,斜体的 ID 标签可能会有所不同。
最后,关闭连接:
quit -
给邮件系统一分钟的时间来处理消息,然后检查收件人主目录中的 Procmail 日志文件:
# cat /var/spool/spamd/proc.log如果 Procmail 成功处理了消息,您应该看到类似以下的内容:
From test@example.com Mon Nov 17 13:40:00 2008 Folder: .Junk/new/1195508418.1125_0.host.example.com 2606
25.8. 配置文件
/usr/local/etc/procmailrc
全局 Procmail 配置文件。此文件还包含处理邮件消息的食谱。
/usr/home/username/.procmailrc
用户特定的 Procmail 配置文件。此文件中的食谱在处理/usr/local/etc/procmailrc 中的食谱之后处理。默认情况下,/usr/local/etc/procmailrc 中的环境变量会传递到此文件,不应再次指定。所有文件夹都与用户的 Maildir 文件夹相对。
25.9. 日志文件
/usr/home/username/proc.log
包含了为 username 处理的 Procmail 消息日志
/var/log/maillog
邮件活动的一般日志
25.10. 注意事项
有关 Procmail 食谱的示例,请参阅 procmailex 手册页:
# man procmailex
第二十六章. PURE - FTPD 服务器 1.0.21
HTTP://WWW.PUREFTPD.ORG
26.1. 摘要
FTP(文件传输协议)用于在服务器和客户端系统之间传输文件。根据 RFC 959,^([]) FTP 的四个目标是促进文件共享、鼓励使用远程计算机、保护用户免受文件存储系统差异的影响,以及可靠高效地传输数据。
^([]) J. Postel 和 J. Reynolds, "文件传输协议 (FTP)," 互联网工程任务组,
www.ietf.org/rfc/rfc959.txt。
FTP 最初于 1971 年由美国国防部开发,用于其在 DARPA 网络中的使用。它被认为是互联网最早的协议之一。
Pure-FTPd 是一个开源的 FTP 服务器,它符合原始 FTP 标准并具有一些附加功能。这些包括虚拟用户系统、SSL/TLS 加密支持、带宽限制和上传/下载比率等。Pure-FTPd 支持虚拟用户和存在于系统级账户中的用户。本指南将专门关注虚拟用户方案,因为它提供了更丰富的功能集。
Pure-FTPd 基于 1995 年由 Arnt Gulbrandsen 编写的 Troll-FTPd。Troll-FTPd 在 90 年代末期的积极开发停滞,促使 Frank Denis 创建了 Pure-FTPd 项目。Denis 对 Troll-FTPd 代码进行了修改,编写了新的文档,并于 2001 年发布了 Pure-FTPd。Denis 领导的一个九人团队继续开发 Pure-FTPd 项目。
第二十六章.PURE - FTPD 服务器 1.0.21
HTTP://WWW.PUREFTPD.ORG
26.1. 摘要
FTP(文件传输协议)用于在服务器和客户端系统之间传输文件。根据 RFC 959,^([])FTP 的四个目标是促进文件共享、鼓励使用远程计算机、保护用户免受文件存储系统差异的影响,以及可靠高效地传输数据。
^([]) J. Postel 和 J. Reynolds,"文件传输协议 (FTP)",互联网工程任务组,
www.ietf.org/rfc/rfc959.txt。
FTP 首次于 1971 年由美国国防部开发,用于其在 DARPA 网络中的使用。它被认为是互联网最早的协议之一。
Pure-FTPd 是一个开源的 FTP 服务器,它符合原始的 FTP 标准,并具有一些额外的功能。这些包括虚拟用户系统、SSL/TLS 加密支持、带宽限制以及上传/下载比率等。Pure-FTPd 支持虚拟用户和存在于系统级别账户上的用户。本指南将专门关注虚拟用户方案,因为它提供了更丰富的功能集。
Pure-FTPd 基于 1995 年由 Arnt Gulbrandsen 编写的 Troll-FTPd。Troll-FTPd 在 90 年代后期的发展停滞,促使 Frank Denis 创建了 Pure-FTPd 项目。Denis 对 Troll-FTPd 代码进行了修改,编写了新的文档,并于 2001 年发布了 Pure-FTPd。Denis 领导的九人团队继续开发 Pure-FTPd 项目。
26.2. 资源
Pure-FTPd 文档
www.pureftpd.org/project/pure-ftpd/doc
RFC 959 - 文件传输协议
26.3. 必需
(参见 "FreeBSD 7.0")
(参见 "FreeBSD Ports Collection")

26.4. 可选
如果您想启用 FTP 控制通道的加密(参见 "OpenSSL 0.9.8g")

26.5. 准备
成为超级用户。
注意: 本指南提供了使用虚拟用户系统管理和控制用户的说明。该系统提供更丰富的功能集,并允许在不影响系统账户的情况下管理 FTP 账户。
26.6. 安装
要开始 Pure-FTPd 安装过程,请输入以下命令:
# cd /usr/ports/ftp/pure-ftpd
# make config ; make install clean
# rehash
将出现一个包含 pure-ftpd 选项的菜单。保留这些选项的默认值,然后按 [tab] 键选择 OK,按 [enter] 键继续。
26.7. 配置
安装过程完成后,是时候为您的系统配置 Pure-FTPd 了。
-
将名为 pure-ftpd.conf.sample 的示例配置文件复制到 /usr/local/etc 下的 pure-ftpd.conf。此文件将用于设置配置选项。
# cd /usr/local/etc # cp pure-ftpd.conf.sample pure-ftpd.conf # ee pure-ftpd.conf -
指定虚拟用户数据库的位置。向下滚动到
PureDB语句 (~126),取消注释它(移除前面的井号),并将路径更改为 /usr/local/etc/pureftpd.pdb。PureDB语句应如下所示:PureDB /usr/local/etc/pureftpd.pdb -
为了使添加新虚拟用户更容易,配置 Pure-FTPd 在登录时自动创建用户的主目录(如果尚未存在)。取消注释
CreateHomeDir语句 (~336) 以启用此功能。CreateHomeDir语句应如下所示:CreateHomeDir yes -
Pure-FTPd 自动编译了 SSL/TLS 支持。然而,默认情况下它是禁用的。如果您不想启用 SSL/TLS 加密,请保存、退出并跳到步骤 8。
26.7.1. 配置 SSL/TLS
FTP 会话使用控制通道和数据通道。控制通道负责处理初始身份验证、向服务器发送的命令以及服务器的响应。数据通道用于在文件传输期间传输数据。
如果配置了 SSL/TLS,Pure-FTPd 可以提供控制通道的加密,尽管数据通道上的信息仍然以明文形式传输。为了更高的安全性,请考虑其他解决方案,如 SFTP,它是 OpenSSH 的一部分。
NaN. 取消注释 TLS 声明 (~422) 并指定 1 或 2。有两种可能的 SSL/TLS 配置:第一种(选项 1)允许未加密和加密连接同时发生,而第二种(选项 2)只允许加密连接。下面的示例启用了加密和未加密连接:
```
TLS 1
```
NaN. 保存并退出。
NaN. Pure-FTPd 需要您的服务器证书和密钥文件合并成一个文件才能正常工作。我们将假设您的证书和私钥位于 /usr/local/openssl/certs。以下命令将合并您的服务器私钥文件与您的服务器证书文件到一个新的文件,供 Pure-FTPd 使用:
```
# cd /usr/local/openssl/certs
# cp host.example.com-unencrypted-key.pem pure-ftpd.pem
# chmod 400 pure-ftpd.pem
# cat host.example.com-cert.pem >> pure-ftpd.pem
# mkdir /etc/ssl/private
# mv pure-ftpd.pem /etc/ssl/private
```
* * *
***注意:*** 将上述文件名替换为您使用 OpenSSL 创建服务器密钥和证书文件时使用的命名约定(请参阅 "OpenSSL 0.9.8g")。
* * *
[host.example.com-unencrypted-key.pem](http://host.example.com-unencrypted-key.pem) 您服务器的未加密私钥文件
[host.example.com-cert.pem](http://host.example.com-cert.pem) 您服务器的公共证书文件
[/etc/ssl/private/pure-ftpd.pem](http:///etc/ssl/private/pure-ftpd.pem) Pure-FTPd 在此处查找 SSL 证书
26.7.2. 导入和添加用户
NaN. 您可以批量导入具有系统级账户(在/etc/master.passwd 中列出)的用户,或者手动创建新用户。要手动创建用户,请跳到步骤 9。要将已存在于您系统中的用户导入虚拟用户数据库,请输入以下命令:
```
# pure-pwconvert >> /usr/local/etc/pureftpd.passwd
# chmod 600 /usr/local/etc/pureftpd.passwd
# pure-pw mkdb
```
* * *
***注意:*** 此实用程序只会导入具有 shell 访问权限的账户。如果账户的 shell 设置为`*nologin*`,则需要手动添加。
* * *
NaN. 要手动将用户添加到 Pure-FTPd 虚拟用户数据库,我们需要创建一个系统级账户,该账户将与虚拟用户关联。创建一个名为 vftp 的新用户,如下所示:
```
# pw user add vftp -s /sbin/nologin -w no -d /usr/home/vftp\
? -c "Virtual FTP User" -m
```
现在我们可以使用以下命令将用户添加到虚拟用户数据库。将`*user*`替换为您想要创建的用户名。
```
# pure-pw useradd user -u vftp -g vftp -d /usr/home/vftp/user
# pure-pw mkdb
```
要添加更多用户,只需使用不同的用户重复上述命令即可。
26.7.3. 配置匿名 FTP
我们将在下一步配置匿名 FTP 访问。如果您不想配置匿名 FTP,请跳转到"Testing"。
注意: 在运行匿名 FTP 服务器时请格外小心。单个配置不当的选项可能会危及您系统的安全。
NaN. 创建一个名为 ftp 的新系统级用户,如下所示:
```
# pw user add ftp -s /sbin/nologin -w no -d /usr/home/ftp\
? -c "Anonymous FTP User" -m
# rm /usr/home/ftp/.??*
```
您可以在/usr/home/ftp 中创建您选择的目录结构。要创建匿名用户可以上传到的目录,请在目录上使用 777 权限。对于文件的只读访问,使用 444 权限。对于目录的只读访问,使用 555 权限。
例如,您可以为目录/usr/home/ftp/upload 允许上传访问。以下命令将使主目录只读,创建上传目录,并授予匿名用户在该目录的写权限:
```
# chmod 555 /usr/home/ftp
# mkdir /usr/home/ftp/upload
# chmod 777 /usr/home/ftp/upload
```
* * *
***注意:*** 请务必监控/usr/home/ftp/upload 目录中的文件,因为如果用户在该目录放置非法内容,您可能会承担责任。请查阅/usr/local/etc 中的 pure-ftpd.conf 文件以获取匿名登录相关选项。有关设置文件所有权和权限的详细信息,请参阅"chown"和"chmod"。
* * *
26.8. 测试
在本节中,我们将执行一些基本测试以确认 Pure-FTPd 正常运行。
-
输入此命令以启动 Pure-FTPd:
# /usr/local/etc/rc.d/pure-ftpd onestart -
使用此命令启动 FTP 连接(使用您的系统主机名):
# ftp localhost登录消息应如下所示:
Connected to host.example.com. 220---------- Welcome to Pure-FTPd [TLS] ---------- 220-You are user number 1 of 50 allowed. 220-Local time is now 15:16\. Server port: 21. 220-IPv6 connections are also welcome on this server. 220 You will be disconnected after 15 minutes of inactivity. Name (host.example.com:user): -
使用您之前创建的用户账户登录,并使用
ls命令获取目录列表。如果目录列表成功,则测试通过。输入**quit**退出 FTP 会话。
注意: 为了测试 TLS/SSL 功能,您需要一个支持 TLS/SSL 的 FTP 客户端,例如 Macintosh 的 Cyberduck 或 Windows 的 FileZilla。
-
如果测试成功,请配置 Pure-FTPd 在系统启动时自动启动。为此,打开 etc/rc.conf:
# ee /etc/rc.conf并添加以下行:
pureftpd_enable="YES" -
保存、退出并重新启动 Pure-FTPd:
# /usr/local/etc/rc.d/pure-ftpd restart # /usr/local/etc/rc.d/pure-ftpd status
26.9. 工具
以下是对 pure-pw 和 pure-ftpwho 工具的简要信息。
26.9.1. pure-pw
pure-pw 工具添加、删除、修改并显示 Pure-FTPd 虚拟用户数据库的信息。
命令
pure-pw
语法
pure-pw *command* *user* -``*options*
命令
useradd
将虚拟用户添加到 pureftpd.passwd 文件
usermod
修改 pureftpd.passwd 文件中的虚拟用户条目
userdel
删除虚拟用户
passwd
更改虚拟用户密码
show
显示指定用户的详细信息
list
显示 pureftpd.passwd 文件中的用户列表
mkdb
将 pureftpd.passwd 文件导出到 pureftpd.pdb 数据库文件;此命令必须在修改 pureftpd.passwd 后运行
选项
-u
系统用户 ID
-g
系统组 ID
-d
家目录
示例
要从虚拟用户数据库中删除名为 jill 的虚拟用户,请输入:
# pure-pw userdel jill
# pure-pw mkdb
要更改名为 jack 的虚拟用户的密码,请输入:
# pure-pw passwd jack
# pure-pw mkdb
26.9.2. pure-ftpwho
pure-ftpwho 工具监控当前的 FTP 客户端会话。
命令
pure-ftpwho
语法
pure-ftpwho -``*options*
选项
-v
详细模式(将本地 IP 地址、端口和传输统计信息添加到输出)
示例
要显示具有传输统计信息的当前 FTP 客户端会话,请输入:
# pure-ftpwho -v
26.10. 配置文件
/usr/local/etc/pure-ftpd.conf
这是主要配置文件。它包含 pure-config.pl 脚本在启动时传递给 Pure-FTP 守护进程的选项。
/usr/local/etc/pureftpd.passwd
此文件包含虚拟用户的用户名、散列密码和目录信息。
.banner
这是一个文本文件,当放入用户家目录时,会在登录时自动显示。
.message
这是一个文本文件,当用户进入其父目录时,会自动显示。
26.11. 日志文件
/var/log/xferlog
存储 FTP 会话信息和错误消息
/var/log/messages
记录 Pure-FTPd 报告的错误消息
/var/log/debug.log
如果在 pure-ftpd.conf 中将 VerboseLog 声明设置为 yes,则存储所有客户端命令的日志
26.12. 注意事项
-
默认情况下,所有用户帐户都被限制在其各自的 home 目录中。如果您需要允许访问用户家目录外的特定目录,可以使用符号链接。例如,假设网站管理员 Michelle(用户名 michelle)需要访问 /usr/local/www/apache22/data 目录以上传网页内容。您可以创建指向此目录的符号链接,如下所示:
# cd /usr/home/vftp/michelle # ln -s /usr/local/www/data-dist wwwMichelle 将拥有您在将她在 pureftpd.passwd 文件中添加时指定的关联 userID 和 groupID 的权限。您可能需要使用 pure-pw 工具更改她的关联 userID 和/或 groupID,以便允许适当的读写执行访问新链接的目录。(如果是这样,您可能需要更改她的用户和组 ID 为 www。)您还可以选择更改文件和目录的所有权,以适应她现有的 userID 和 groupID。
注意: 在实施此类方案之前,请确保您理解文件所有权和权限,因为它可能具有安全影响。
-
如果您的服务器位于防火墙(如 NAT 路由器)后面,当 Pure-FTP 守护进程在主动模式下尝试在任意端口建立数据连接时,客户端尝试发起连接可能会出现问题。如果您遇到这种情况,请配置您的 FTP 客户端使用被动模式。
-
Pure-FTPd 包含了数十个在此处未记录的其他功能。请查阅 Pure-FTPd 项目网页
www.pureftpd.org/project/pure-ftpd或手册页面以获取详细信息。以下命令显示 Pure-FTPd 的手册页面:# man pure-ftpd
第二十七章. SAMBA 3.0.28
HTTP://WWW.SAMBA.ORG
27.1. 摘要
Samba 是 SMB(服务器消息块)和 CIFS(通用互联网文件系统)协议的开源实现,这些协议用于在 Microsoft 网络上共享文件和打印机。Samba 的创建是为了提供与 UNIX 系统兼容的文件和打印机共享服务。
SMB 最初是为了在 NetBIOS(网络基本输入/输出系统)协议之上运行而开发的。然而,由于 NetBIOS 是为小型网络设计的,它缺乏路由功能,这限制了 SMB 只能用于局域网。在 1996 年,微软修改了 SMB,使其不再依赖于 NetBIOS,并将其重命名为通用互联网文件系统(CIFS)。随着 Windows 2000 的发布,SMB/CIFS 能够在 TCP/IP 之上运行。
Samba 共享在 Windows 网络中看起来就像其他共享文件夹。访问权限可以扩展到正常的 Unix 文件权限,还可以根据登录实施可配置的限制。Unix 用户也可以使用 Samba 客户端挂载和访问共享,这类似于 FTP 客户端。Samba 由两个守护进程组成,即 smbd 和 nmbd。SMB 守护进程处理文件和打印服务以及身份验证。NMB 守护进程处理名称解析和文件浏览功能。
国际商业机器公司(IBM)的巴里·费根鲍姆博士在 20 世纪 80 年代初开发了 SMB 协议,作为构建小型局域网的解决方案。微软后来在原始 SMB 基础上进行了扩展,并成为该技术的主导用户。安德鲁·特里德尔在 1992 年通过逆向工程 SMB 协议来满足他的需求,开发了 Samba。Samba 项目现在是一个跨国团队,并继续开发新功能。
第二十七章. SAMBA 3.0.28
Samba 网站
27.1. 摘要
Samba 是 SMB(服务器消息块)和 CIFS(通用互联网文件系统)协议的开源实现,这些协议用于在 Microsoft 网络上共享文件和打印机。Samba 的创建是为了在 UNIX-like 系统上提供与 Windows 兼容的文件和打印机共享服务。
SMB 最初是为了在 NetBIOS(网络基本输入/输出系统)协议之上运行而开发的。然而,由于 NetBIOS 是为小型网络设计的,它缺乏路由功能,这限制了 SMB 仅限于局域网。在 1996 年,微软修改了 SMB,使其不依赖于 NetBIOS,并将其重命名为通用互联网文件系统(CIFS)。随着 Windows 2000 的发布,SMB/CIFS 能够在 TCP/IP 之上运行。
Samba 共享在 Windows 网络中看起来就像其他共享文件夹。访问权限可以继承自常规 Unix 文件权限,并且可以根据登录配置限制。Unix 用户也可以使用 Samba 客户端挂载和访问共享,这类似于 FTP 客户端。Samba 由两个守护进程组成,即 smbd 和 nmbd。SMB 守护进程处理文件和打印服务以及身份验证。NMB 守护进程处理名称解析和文件浏览功能。
IBM 的巴里·费根鲍姆博士在 20 世纪 80 年代初开发了 SMB 协议,作为构建小型局域网的解决方案。微软后来在原始 SMB 基础上进行了扩展,并成为该技术的主导用户。安德鲁·特里德尔于 1992 年通过逆向工程 SMB 协议来满足他的需求开发了 Samba。Samba 项目现在是一个跨国团队,并继续开发新功能。
27.2. 资源
Samba 文档
服务器消息块协议
27.3. 必需的
FreeBSD 7.0-RELEASE (参见 "FreeBSD 7.0")
(参见 "FreeBSD 端口集合")

27.4. 可选
(参见 "CUPS 打印服务器 1.3.3")
27.5. 准备
成为超级用户。
应该为想要允许访问 Samba 的用户存在系统账户。如果它们不存在,现在使用 adduser 命令添加它们。(有关 adduser 命令的详细信息,请参见 附录 C)
27.6. 安装
要开始 Samba 安装过程,请输入以下命令:
# cd /usr/ports/net/samba3
# make config ; make install clean
# rehash
应该会出现一个菜单,列出 samba 的可用选项。选中 LDAP 并按 [空格键] 取消选中。通过按 [Tab] 键选择 OK 并然后按 [Enter] 键继续,保持其他选项为默认设置。
27.7. 配置
一旦安装过程完成,就是时候配置 Samba 以在您的系统上使用了。
-
将位于 /usr/local/etc 目录下的 smb.conf 文件修改为适合您系统的配置。首先,打开该文件:
# ee /usr/local/etc/smb.conf -
滚动到
workgroup声明 (~26) 并将MYGROUP替换为与您的客户端系统匹配的工作组名称。如果您使用的工作组名称为EXAMPLE,则此行将如下所示:workgroup = EXAMPLE
注意: 您可以通过右键单击我的电脑并选择属性来确定 Windows PC 的工作组名称。工作组名称将在名称选项卡中显示。您还可以在命令提示符中输入
*net config workstation*来检索工作组名称。
-
滚动到
server string声明 (~29) 并将Samba Server替换为您希望分配给服务器的名称。该行应如下所示:server string = *Example FileServer* -
滚动到
hosts allow语句 (~41)。Samba 将允许访问在此处输入的 IP 地址。要允许所有客户端连接,请保持此行不变。要启用本地网络上的 SMB 连接,列出192.168.1.(最后一个八位字节留空表示从 .01 到 .255 的任何地址)和127.(这意味着以 127. 开头的任何地址都是允许的),如下例所示。务必取消注释此行,通过删除行首的分号 (;) 来实现。该行应如下所示:hosts allow = 192.168.1\. 127.
注意: 您可以在此处输入完整的 IP 地址以限制连接到特定的客户端 IP,每个 IP 地址之间用空格、逗号或制表符分隔。
27.7.1. 配置共享
现在我们将创建定义,指定目录如何共享。有多种不同的配置方式,但现阶段只需使用以下示例之一创建一个简单的共享。
公共共享
以下示例是一个允许所有用户登录、读取、删除、创建和修改文件的共享。此类共享适用于希望无限制共享文件的用户。要实现此类共享,请将以下行添加到 smb.conf 文件的末尾。(您可以使用不同的共享名称和路径替换。)
代码视图:
[*public*] /* name of the share */
comment = Public Files /* a short description of the share */
path = */usr/home/samba/*public /* path of shared directory */
public = yes /* password is not required to connect */
read only = no /* users may create, modify, and delete files */
私有共享
使用以下配置,只有用户 john 和 jane 被允许访问。每个用户创建的文件将拥有者权限 read、write 和 execute。默认情况下,组和世界权限为只读。此类共享适用于希望保留对其文件控制的小组人员之间的共享。要实现此类共享,请将以下行添加到 smb.conf 文件的末尾(用您选择的共享名称、路径和有效用户列表替换)。
代码视图:
[*private*] /* name of the share */
comment = Private Files /* a short description of the share */
path = */usr/home/samba/*private /* path of shared directory */
valid users = *john jane* /* users allowed to access this share */
public = no /* password required to access this share */
writable = yes /* users may create, modify, and delete */
/* files they own */
只读共享
以下配置允许所有人无需密码即可以只读方式访问共享。只有写入列表中的用户可以创建、修改和删除他们在共享中拥有的文件。此类共享适用于发布供公众访问的文件,同时让作者或管理员保留对其内容的控制权。要实现此类共享,请将以下行添加到 smb.conf 文件的末尾,用你选择的共享名称、路径和具有写入访问权限的用户列表替换。
代码视图:
[*readonly*] /* name of share */
comment = *Read Only Shares* /* a short description of the share */
path = */usr/home/samba/*readonly /* path of shared directory */
public = yes /* password is not required to connect */
write list = *bert ernie* /* users allowed write access */
writable = yes /* write list users may create, modify, */
/* and delete files they own */
打印机
默认情况下,CUPS 中配置的所有打印机都是共享的,并且可供认证用户使用。如果你需要将访问限制应用于打印机,请参阅“注意事项”。
完成
当你对共享配置满意时,保存并退出。
测试 smb.conf 文件是否存在语法错误:
# testparm
检查输出是否有任何错误,并在必要时进行纠正。确保你在共享定义中指定的路径存在。如果它们不存在,请现在创建它们。
27.7.2. 设置共享权限
下面的部分对应于之前提到的示例共享配置。例如,如果你在上一个部分中创建了一个公共共享,请转到“公共共享权限”。当你完成配置共享的权限设置后,请转到“测试”。
公共共享权限
如果你将托管一个公共共享,你需要将公共共享目录的权限设置为模式777,以便允许所有用户创建、修改和删除文件。例如,下面的命令将设置/usr/home/samba/public目录所需的权限:
# chmod 777 /usr/home/samba/public
私有共享权限
如果你将托管一个私有共享,你需要将私有共享目录的权限设置为模式770。这将允许 root 和该组的成员完全访问目录(我们也将创建该组)。
因为我们只想让指定的用户访问这个目录,我们需要创建一个新的组并将他们添加为成员。例如,我们将创建一个名为 smbprivate 的新组,其成员为 john 和 jane。
以下命令将创建 smbprivate 组,将/usr/home/samba/private目录的所有权更改为该新组,并设置正确的权限。(你可以使用你喜欢的任何组名。)
# pw groupadd smbprivate -M john,jane
# chgrp smbprivate /usr/home/samba/private
# chmod 770 /usr/home/samba/private
根据需要替换你自己的用户名、组名和路径。
只读共享权限
如果你将托管一个只读共享,你需要将只读共享目录的权限设置为模式770。这将允许 root 和该组的成员完全访问目录。
因为我们只想让我们在写入列表中指定的用户访问这个目录,所以我们需要创建一个新的组并将这些用户添加为成员。例如,我们将创建一个名为 smbreadonly 的新组,其成员为 bert 和 ernie。
以下命令将创建组,将 /usr/home/samba/private 目录的所有权更改为新组,并设置正确的权限。
# pw groupadd smbreadonly -M bert,ernie
# chgrp smbreadonly /usr/home/samba/readonly
# chmod 770 /usr/home/samba/readonly
根据需要替换自己的用户名、群组名和路径。
27.7.3. 添加用户
为希望允许 Samba 访问的用户创建 Samba 用户账户和密码。您指定的用户名应与他们的现有系统账户匹配。要设置新用户,请使用 smbpasswd 命令(将 *用户名* 替换为您希望创建的用户名):
# smbpasswd -a username
输入密码后,您应该看到:
Added user *username*
对您想要添加的任何其他用户重复此操作。
27.8. 测试
在本节中,我们将执行一些基本测试以确认 Samba 能够正确响应 SMB/CIFS 请求。
-
输入此命令以启动 SMB 守护进程进行测试:
# /usr/local/etc/rc.d/samba onestart -
要列出 Samba 托管的所有可用共享,请使用以下命令:
# smbclient -U username -L localhost将
*用户名*替换为有效的 Samba 用户。输入用户密码后,您应该看到您之前配置的共享列表。 -
要登录并浏览共享,请输入:
# smbclient -U username //localhost/sharename登录完成后,您应该看到
smb: \>提示符。然后您可以使用常见的 Unix 命令,如cd和ls,来导航共享。输入**退出**以退出。 -
如果测试成功,配置 Samba 服务器在启动时自动启动。打开 /etc/rc.conf:
# ee /etc/rc.conf然后添加以下行:
samba_enable="YES" -
保存、退出并重新启动 Samba:
# /usr/local/etc/rc.d/samba restart # /usr/local/etc/rc.d/samba status
注意: 您可以运行
*状态*命令以确认 Samba 服务已启动。
27.9. 工具
以下是对 smbpasswd 和 pdbedit 实用程序的简要信息,这些实用程序用于维护用户密码和策略。本节还涵盖了 SWAT,它是 Samba 管理的替代接口。
27.9.1. smbpasswd
此实用程序管理用户的 Samba 密码。
命令
smbpasswd
语法
smbpasswd -``*选项 用户名*
选项
-a
将用户添加到 Samba 密码文件
-x
从 Samba 密码文件中删除用户
-d
禁用用户
-e
如果之前已禁用,则启用用户
示例
要将用户 jake 添加到 Samba 密码文件,请输入:
# smbpasswd -a jake
要禁用用户 webster,请输入:
# smbpasswd -d webster
注意: 如果用户有权访问您的服务器 shell,他可以通过不带参数输入 *smbpasswd* 来更改密码。
27.9.2. pdbedit
此实用程序管理 Samba 用户数据库中的用户。它只能由 root 使用。
命令
pdbedit
语法
pdbedit -``*选项* *参数*
选项
-a
添加用户
-u
指定要管理的用户
-f
指定用户的全名
-v
详细列表格式
-L
列出数据库中的所有用户
-x
删除用户
-P
显示账户策略和当前值。有效的参数包括:
最小密码年龄 |
不良锁定尝试 |
|---|---|
最大密码年龄 |
重置计数分钟 |
| --- | --- |
最小密码长度 |
断开连接时间 |
| --- | --- |
密码历史 |
用户必须登录才能更改密码 |
| --- | --- |
锁定持续时间 |
拒绝机器密码更改 |
| --- | --- |
-C
更改账户策略值
示例
要将用户 John Doe 添加到 Samba 数据库中,用户名为 john,请输入:
# pdbedit -a -u john -f "John Doe"
要详细列出数据库中的所有用户,请输入:
# pdbedit -L -v
要显示最小密码长度账户策略,请输入:
# pdbedit -P "min password length"
要将最小密码长度更改为 8,请输入:
# pdbedit -P "min password length" -C 8
查看 pdbedit 的手册页以获取更多选项:
# man pdbedit
27.9.3. 启用 SWAT
SWAT(Samba Web 管理工具)提供了一个易于使用的 Samba 管理替代接口。SWAT 通过 FreeBSD 内置的 Internet 超级服务器(inetd)运行。要启用 SWAT,请按照以下步骤操作。
-
打开 inetd.conf:
# ee /etc/inetd.conf -
取消注释
swat声明(~120)。现在它应该如下所示:swat stream tcp nowait/400 root /usr/local/sbin/swat swat -
保存并退出。
-
除非您已特别配置 inetd 在启动时运行,否则请输入以下内容以启动服务:
# /etc/rc.d/inetd onestart要访问 SWAT 界面,使用网页浏览器导航到
host.example.com:901(用您的服务器主机名替换)。以 root 身份登录以访问管理功能。
注意: 请注意,您的登录名和密码将以明文形式传输。如果您无法确保网络的安全性,请不要使用此实用程序。使用安全的解决方案,例如通过 SSH 或浏览器(如 Lynx(见"Lynx 2.8.6"))手动配置服务器控制台。除非您已经采取措施使用类似安全 VPN 隧道的东西加密 root 密码的传输,否则不要从您的网络外部使用此实用程序。
一旦使用 SWAT 完成 Samba 的配置,您可以按照以下方式终止 inetd:
# /etc/rc.d/inetd stop
要在启动时自动启动 inetd,请将以下行添加到/etc/rc.conf 中:
inetd_enable="YES"
27.10. 配置文件
/usr/local/etc/smb.conf
Samba 的主要配置文件
/usr/local/etc/samba/smbpasswd
Samba 加密密码文件;它由 smbpasswd 实用程序创建,包含 SMB 用户的用户名和散列密码
27.11. 日志文件
/var/log/samba
包含 Samba 活动日志和连接到 Samba 共享的主机
27.12. 备注
-
如果您已安装并配置了 CUPS 打印而没有设置访问限制,所有经过身份验证的 Samba 用户都将有权打印到任何已安装的打印机。要限制打印权限到特定用户,您必须修改/etc/smb.conf。首先,打开 smb.conf:
# ee /usr/local/etc/smb.conf使用[ctrl-U]滚动到 smb.conf 文件的底部并添加以下行:
[printers] valid users = username将
*username*替换为你想要允许打印权限的用户名(多个用户名之间用空格分隔)。保存、退出并重新启动 Samba:
# /usr/local/etc/rc.d/samba restart -
如果您在未设置访问限制的情况下配置了 CUPS 打印,考虑到您正在尝试限制打印访问权限到特定用户,请考虑禁用 IPP(互联网打印协议)。为了防止 CUPS 接受直接 IPP 打印请求,编辑 cupsd.conf 文件。首先,打开 cupsd.conf:
# ee /usr/local/etc/cups/cupsd.conf使用[ctrl-U]滚动到 cupsd.conf 文件的底部并添加以下行:
<Location /printers> Order Deny,Allow Deny From All Allow From 127.0.0.1 </Location>此指令将导致 CUPS 拒绝所有直接 IPP 打印请求,并仅接受 Samba 中继的打印作业。
保存、退出并重新启动 CUPS:
# /usr/local/etc/rc.d/cupsd restart -
Windows XP SP2 系统在选择某些应用程序中的 Samba 打印机或在尝试访问打印机属性时可能会出现延迟。这可以通过删除指向 Samba 托管打印机的 Windows 注册表条目来解决。注册表条目的位置如下:
HKEY_CURRENT_USER\Printers\DevModePerUser
HKEY_CURRENT_USER\Printers\DevModes2
删除 \ samba_server_name \ printer_name.
注意: 修改 Windows 注册表时请谨慎操作。
第二十八章。SPAMASSASSIN 3.2.4
HTTP://SPAMASSASSIN.APACHE.ORG
28.1. 摘要
SpamAssassin 是一个高效的开源电子邮件分类器。它通过使用一系列不同的测试来检查电子邮件,以确定一条消息是否为垃圾邮件。通过使用关键词、历史数据(例如,贝叶斯过滤)和指纹识别方法(例如,Vipul's Razor 和 DCC 数据库)来评分,这些测试旨在通过利用每种测试类型的好处来最大化其有效性。SpamAssassin 将这些测试的结果存储在每个电子邮件的标题中。邮件投递代理(MDA)如 Procmail(参见 "Procmail 3.22")可以使用这些标题来路由或对消息进行进一步处理。
通常,SpamAssassin 作为守护进程或后台进程被调用。邮件传输代理(MTA)如 Postfix 被配置为将电子邮件通过 SpamAssassin 进行分析。如果确定一条消息是垃圾邮件,SpamAssassin 可以配置为以多种方式修改该消息。默认情况下,垃圾邮件被重新编码为附件,并且消息的正文显示触发积极结果的测试列表。然后垃圾邮件和正常邮件(合法电子邮件)被投递到用户的邮箱中。
许多商业反垃圾邮件软件包都将其产品中的 SpamAssassin 集成。这些包括 McAfee 的 SpamKiller、Kerio 的 Kerio MailServer 和 SmarterTools 的 SmarterMail。
SpamAssassin 由爱尔兰软件开发者 Justin Mason 在 2001 年编写。它基于 Mark Jeftovic 在 1997 年用 Perl 编写的 spam 过滤器 filter.plx。Justin 为 Jeftovic 的 filter.plx 贡献了补丁,后来决定从头开始重写代码(同样是用 Perl)。这次重写成为了 SpamAssassin,现在它是 Apache 软件基金会的一个项目。Mason 目前作为 Apache 软件基金会的副总裁负责 SpamAssassin 的发展。
第二十八章。SPAMASSASSIN 3.2.4
HTTP://SPAMASSASSIN.APACHE.ORG
28.1. 摘要
SpamAssassin 是一个高度有效的开源电子邮件分类器。它通过使用一系列不同的测试来检查电子邮件,以确定一条消息是否为垃圾邮件。通过使用关键词、历史数据(例如,贝叶斯过滤)和指纹识别方法(例如,Vipul 的 Razor 和 DCC 数据库)来评分消息,以最大化每种测试类型的好处。SpamAssassin 将这些测试的结果存储在每个电子邮件的标题中。邮件投递代理(MDA)如 Procmail(参见 "Procmail 3.22")可以使用这些标题来路由或对消息进行进一步处理。
通常,SpamAssassin 以守护进程或后台进程的方式调用。邮件传输代理(如 Postfix)被配置为将电子邮件通过 SpamAssassin 进行分析。如果确定一条消息是垃圾邮件,SpamAssassin 可以配置为以多种方式修改该消息。默认情况下,垃圾邮件被重新编码为附件,并且消息正文显示触发阳性结果的测试列表。垃圾邮件和正常邮件(合法电子邮件)随后被投递到用户的邮箱中。
许多商业可用的反垃圾邮件软件包在其产品中集成了 SpamAssassin。这些包括 McAfee 的 SpamKiller、Kerio 的 Kerio MailServer 和 SmarterTools 的 SmarterMail。
SpamAssassin 由爱尔兰软件开发者 Justin Mason 在 2001 年编写。它基于 Mark Jeftovic 在 1997 年用 Perl 编写的垃圾邮件过滤器 filter.plx。Justin 为 Jeftovic 的 filter.plx 贡献了补丁,后来决定从头开始重写代码(同样是用 Perl)。这次重写成为了 SpamAssassin,现在它是 Apache 软件基金会的一个项目。Mason 目前作为 Apache 软件基金会的副总裁负责 SpamAssassin 的发展。
28.2. 资源
官方 SpamAssassin 文档
spamassassin.apache.org/doc.html
SpamAssassin 测试描述和评分
spamassassin.apache.org/tests_3_2_x.html
SpamAssassin 规则集市
28.3. 必需的
FreeBSD 7.0-RELEASE(参见 "FreeBSD 7.0")
更新的端口集合(参见 "FreeBSD 端口集合")
Postfix SMTP 服务器(参见 "Postfix SMTP 服务器 2.5.1")
互联网连接
28.4. 准备
成为超级用户。
28.5. 安装
安装 SpamAssassin 和 DCC 测试支持。
注意: DCC(分布式校验和清除屋)是一种与 Vipul's Razor 和 Pyzor 类似的方法,用于与一个社区共享集中式的电子邮件指纹。它由 Commtouch Software Ltd.拥有的专利保护,并且对于非商业应用是免费的。如果你同意许可协议的条款,你可以按以下详细说明安装 DCC;如果不,请省略步骤 1 中的*-D WITH_DCC*。许可协议可以在www.rhyolite.com/anti-spam/dcc找到。
-
输入以下命令以开始安装 SpamAssassin:
# cd /usr/ports/mail/p5-Mail-SpamAssassin # make config ; make -D WITH_DCC install clean # rehash应该会显示一个包含 p5-Mail-SpamAssassin 选项的菜单。向下滚动到 DKIM 并按[空格键]以启用域名密钥支持。继续向下滚动到 SPF_QUERY 并按[空格键]以启用 SPF 查询支持。我们将其他选项保留在默认设置。按[Tab]键选择“确定”,然后按[Enter]键开始构建过程。
-
输入以下命令以安装 DCC 测试的支持:
# cd /usr/ports/mail/dcc-dccd # make config ; make -D WITHOUT_SENDMAIL install clean # rehash
28.6. 配置
一旦安装过程完成,就是时候为你的系统配置 SpamAssassin 了。
-
设置两个基于社区的电子邮件指纹测试,Vipul's Razor 和 DCC。这些垃圾邮件识别系统略有不同,但两者都依赖于社区输入以保持其数据库的最新状态,因为垃圾邮件在演变。Vipul's Razor 和 DCC 采用信任网络方案,以给准确报告垃圾邮件的客户更多的权重。
要设置 Vipul's Razor 报告功能,创建默认配置文件和目录结构,并在以下 Razor 提名服务器上注册一个身份(用你的域名替换example.com):
# razor-admin -home=/var/spool/spamd/.razor -create # razor-admin -home=/var/spool/spamd/.razor\ ? -register -user=postmaster@example.com # chown -R spamd /var/spool/spamd/.razor -
创建 SpamAssassin 的主配置文件,local.cf:
# cd /usr/local/etc/mail/spamassassin # ee local.cf -
添加以下行(将斜体项替换为与你的网络匹配的值):
trusted_networks *192.168.1\. 209.85.146.176/29 204.13.250.97* internal_networks *192.168.1.11 204.13.250.97* bayes_file_mode 0770 dns_available yes razor_config /var/spool/spamd/.razor/razor-agent.conf add_header all DCC _DCCB_ _DCCR_ add_header ham SCL 1 add_header spam SCL 9trusted_networks指定了不转发垃圾邮件的系统的 IP 或 IP 范围。换句话说,你确信这些计算机没有被入侵,使用它们的人不是垃圾邮件发送者。在上面的例子中,你正在为 192.168.1.xxx、209.85.146.176-182(Gmail 的出站邮件服务器)和 204.13.250.97(这可能是你域的备份邮件服务器/交换机)的内部网络作担保。这些 IP 将从 DNS 黑名单检查中豁免。internal_networks指定了处理你域邮件的系统的 IP 或 IP 范围。通常,你应该在这里指定你域的邮件服务器/交换机。在上面的例子中,我们说 192.168.1.11 和 204.13.250.97 处理我们域的邮件投递。internal_networks的所有值也必须在trusted_networks语句中存在。 -
保存、退出并测试配置文件语法错误:
# spamassassin --lint如果配置文件解析成功,则不会显示任何消息。
注意: 关于 local.cf 文件的更多信息,请输入:
# perldoc Mail::SpamAssassin::Conf -
创建一个简短的脚本,当新电子邮件到达时由 Postfix 调用。此脚本将发送电子邮件到 SpamAssassin 进行分析,然后将结果重新定向回邮件系统以进行投递。创建脚本:
# cd /usr/local/bin # touch spamd.sh # chmod 555 spamd.sh # ee spamd.sh并添加以下行:
#! /bin/sh /usr/local/bin/spamc | /usr/sbin/sendmail -i "$@" -
配置 Postfix 通过您刚刚创建的脚本将新电子邮件消息通过管道传输。首先,打开 Postfix 配置文件,master.cf:
# ee /usr/local/etc/postfix/master.cf -
滚动并找到
smtp声明(约第 9 行)。在smtp声明下创建新行并添加content_filter语句。smtp声明应如下所示:smtp inet n - n - - smtpd -o content_filter=spamd:
注意: 请确保第二行开头至少留有一个空格,如所示,否则 Postfix 将无法正确解析文件。
-
添加一个
spamd声明来告诉 Postfix 调用 spamd.sh 脚本,以便 SpamAssassin 可以处理消息。滚动到 master.cf 的底部并添加以下两行:spamd unix - n n - - pipe flags=Rq user=spamd argv=/usr/local/bin/spamd.sh -f ${sender} -- ${recipient}
注意: 再次提醒,请确保第二行和第三行开头至少留有一个空格,以便 Postfix 可以正确解析文件。
-
保存、退出并重新加载 Postfix 配置文件:
# postfix reload
28.7. 测试
在本节中,我们将执行一些基本测试以确认 SpamAssassin 是否被 Postfix 调用并正确处理消息。
-
配置 SpamAssassin 在系统启动时自动启动。打开 rc.conf:
# ee /etc/rc.conf并添加以下行:
spamd_enable="YES" spamd_flags="-u spamd -H /var/spool/spamd"保存并退出。
-
启动 SpamAssassin 守护进程,以便它可以响应 Postfix 提交的请求:
# /usr/local/etc/rc.d/sa-spamd start -
向邮件系统发送测试垃圾邮件消息。首先,打开 telnet 连接:
# telnet localhost 25 Connected to localhost. Escape character is '^]'. 220 *host.example.com * ESMTP Postfix
注意: 应该用您的主机名代替host.example.com。
输入以下内容(将example.com替换为您的主域):
mail from: test@example.com 250 Ok rcpt to: spamd@example.com 250 Ok然后按照以下所示输入以下行,每行输入后按[enter]键。
注意: 以下长字符串被称为 GTUBE(通用未经请求的大批量电子邮件测试)。它将导致 SpamAssassin 将消息标记为垃圾邮件。
data 354 End data with <CR><LF>.<CR><LF> Subject: This is Spam XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X . 250 Ok: queued as *1242EC119*
注意: 在您的输出中,斜体的 ID 标签将不同。
最后,关闭连接:
quit -
显示 spamd 邮箱的内容:
# cd /var/spool/spamd/Maildir/new # cat * | more
如果 SpamAssassin 成功处理了消息,您应该看到类似以下输出:
代码视图:
Return-Path: <test@example.com>
X-Original-To: spamd@example.com
Delivered-To: spamd@example.com
Received: by host.example.com (Postfix, from userid 58)
id 590631171D; Sat, 01 Mar 2008 12:00:04 -0700 (PDT)
Received: from localhost by host.example.com
with SpamAssassin (version 3.2.4);
Sat, 01 Mar 2008 12:00:04 -0700
From: test@example.com
To: undisclosed-recipients:;
Subject: This is Spam
Date: Sat, 01 Mar 2008 11:59:37 -0700 (PDT)
Message-Id: <20070630185947.811351171B@host.example.com>
*X-Spam-DCC: host.example.com 1049; Body=many Fuz1=many*
*X-Spam-Flag: YES*
*X-Spam-Checker-Version: SpamAssassin 3.2.4 (2008-03-01) on host.example.com*
*X-Spam-Level: ***************************************************
*X-Spam-Status: Yes, score=1007.0 required=5.0
tests=ALL_TRUSTED,AWL,DCC_CHECK,
DIGEST_MULTIPLE,DKIM_POLICY_SIGNSOME,DNS_FROM_AHBL_RHSBL,DNS_FROM_RFC_DSN,
DNS_FROM_SECURITYSAGE,GTUBE,RAZOR2_CF_RANGE_51_100,RAZOR2_CF_RANGE_E4_51_100,*
*RAZOR2_CHECK autolearn=no version=3.2.4*
MIME-Version: 1.0
28.8. 工具
以下是sa-update和sa-learn命令的简要信息。
28.8.1. SA-UPDATE
此实用程序下载并安装 SpamAssassin 的更新和/或自定义规则。
命令
sa-update
语法
sa-update *选项*
选项
--channel
从指定的频道检索规则更新。
--nogpg
不要使用 GPG(GNU 隐私守护)来确保真实性。
示例
要更新 SpamAssassin 的默认规则集:
# sa-update
# /usr/local/etc/rc.d/sa-spamd restart
要安装一个专门用于捕获成人内容的垃圾邮件规则集:
# sa-update
# sa-update --channel 70_sare_adult.cf.sare.sa-update.dostech.net --nogpg
# /usr/local/etc/rc.d/sa-spamd restart
斜体字中的频道来自:
频道列表
wiki.apache.org/spamassassin/SareChannels
频道信息
www.rulesemporium.com/rules.htm
28.8.2. sa-learn
此实用程序帮助贝叶斯分类器学习垃圾邮件和正常邮件的特征。贝叶斯分类基于单词概率,如果训练得当,可以非常有效。
命令
sa-learn
语法
sa-learn *options* *file*
选项
--ham
将消息作为正常邮件(非垃圾邮件)学习。
--spam
将消息作为垃圾邮件学习。
--dbpath
指定贝叶斯数据库文件的位置。
--progress
使用进度条显示进度。
--dump
显示贝叶斯数据库的内容。
示例
要教 SpamAssassin 当前目录中的所有消息都是垃圾邮件:
# sa-learn --spam * --progress --dbpath /var/spool/spamd/.spamassassin
要教 SpamAssassin /usr/home/john/Maildir/cur 目录中的所有消息都是正常邮件:
# sa-learn --ham /usr/home/john/Maildir/cur --progress \?
--dbpath /var/spool/spamd/.spamassassin
要显示贝叶斯数据库的内容摘要:
# sa-learn --dump magic --dbpath /var/spool/spamd/.spamassassin
28.9. 配置文件
使用以下文件来自定义 SpamAssassin 的配置:
/usr/local/etc/mail/spamassassin/local.cf
SpamAssassin 的主配置文件
/usr/local/etc/mail/spamassassin/init.pre
3.0.x 版本发布的插件配置文件
/usr/local/etc/mail/spamassassin/v310.pre
3.1.0 版本发布的插件配置文件
/usr/local/etc/mail/spamassassin/v312.pre
3.1.2 版本发布的插件配置文件
/usr/local/etc/mail/spamassassin/v320.pre
3.2.0 版本发布的插件配置文件
插件配置文件在 SpamAssassin 的 spamd 守护进程加载时加载。每个文件都包含在各自版本发布时特别添加的插件。
28.10. 日志文件
/var/log/maillog
包含 SpamAssassin 的 spamd 守护进程的活动和状态信息的日志
28.11. 注意事项
-
使用邮件投递代理,SpamAssassin 将垃圾邮件和正常邮件都投递到用户的默认邮箱中;它不能对垃圾邮件应用规则。要为标记为垃圾邮件的电子邮件设置规则,请使用 Procmail(见)等工具处理 SpamAssassin 标记后的消息。
-
白名单如果有一些发件人或域名你想从 SpamAssassin 的测试集中有效豁免,你可以将它们的电子邮件地址或域名添加到系统白名单中。SpamAssassin 将接受在/usr/local/etc/mail/spamassassin 的 local.cf 或/var/spool/spamd/.spamassassin 中的 user_prefs 中的白名单声明。在 user_prefs 中保留白名单条目更可取,因为它将它们与主要配置设置分开。
为了演示,我们将为 vip@example.com 和来自gmail.com的任何人添加白名单条目到 user_prefs 文件中。打开 user_prefs:
# cd /var/spool/spamd/.spamassassin # touch user_prefs # chown spamd:spamd user_prefs # chmod 440 user_prefs # ee user_prefs并添加以下行:
whitelist_from vip@example.com whitelist_auth *@gmail.comwhitelist_from语句从所有声称来自 vip@example.com 的电子邮件的垃圾邮件评分中减去 100 分。whitelist_auth语句从所有由 SPF、DomainKeys 或 DKIM 验证的来自任何gmail.com电子邮件地址的电子邮件的垃圾邮件评分中减去 100 分。如果你可以确认发件人在他们的电子邮件系统中使用 SPF、DomainKeys 或 DKIM,请使用
whitelist_auth而不是whitelist_from。 -
向 Vipul's Razor 报告垃圾邮件 你可以使用 razor-report 实用工具向 Razor 提名服务器报告消息。向 Razor 系统报告垃圾邮件有助于社区更好地识别不断变化的垃圾邮件类型。如果你有一个包含已知垃圾邮件的文件夹,你可以像这样提交给 Razor 服务器(将斜体路径替换为你垃圾邮件目录的路径):
# cat /usr/home/john/Maildir/.Junk/cur/* | razor-report \ ? -home=/var/spool/spamd/.razor -
贝叶斯分类测试 贝叶斯分类测试将在数据库中记录了 200 条垃圾邮件和 200 条正常邮件之前不会在收件箱中运行。贝叶斯系统将自动随着时间的推移学习垃圾邮件和正常邮件。如果你有一个现有的垃圾邮件和正常邮件集合,可以使用 sa-learn 实用工具来加速此过程。有关示例,请参阅"sa-learn"。
第二十九章. SQUIRRELMAIL 1.4.13
www.squirrelmail.org
29.1. 摘要
SquirrelMail 是一个基于 Web 的电子邮件客户端,或称 Webmail 应用,使用 PHP 编写,强调遵循 Web 标准和跨浏览器的广泛兼容性。SquirrelMail 输出的页面符合 HTML 4.0 标准,且不使用任何客户端脚本。
SquirrelMail 支持 IMAP 用于接收邮件,SMTP 用于发送邮件。还提供了扩展或插件,可以添加到 SquirrelMail 的基本安装中。
Nathan 和 Luke Ehresman 于 1999 年编写了 SquirrelMail。他们直到 2001 年中期都是该项目的活跃开发者。目前,SquirrelMail 由一组 12 名程序员维护,他们继续开发,着眼于 Web 标准和简洁性。
第二十九章. SquirrelMail 1.4.13
SquirrelMail 官方网站
29.1. 摘要
SquirrelMail 是一个基于 Web 的电子邮件客户端,或称 Webmail 应用,使用 PHP 编写,注重网络标准和跨浏览器的广泛兼容性。SquirrelMail 输出的页面符合 HTML 4.0 标准,不使用任何客户端脚本。
SquirrelMail 支持 IMAP 用于接收邮件,SMTP 用于发送邮件。也提供了扩展或插件来添加到 SquirrelMail 基本安装的功能。
Nathan 和 Luke Ehresman 于 1999 年编写了 SquirrelMail。他们直到 2001 年中期都是该项目的活跃开发者。SquirrelMail 目前由一组 12 名程序员维护,他们继续开发,着眼于网络标准和简洁性。
29.2. 资源
SquirrelMail 文档
SquirrelMail 在 SourceForge.net 上
29.3. 必需
FreeBSD 7.0-RELEASE(参见“FreeBSD 7.0”)
更新的端口集合(参见“FreeBSD 端口集合”)
Apache HTTP 服务器(参见“Apache HTTP 服务器 2.2.8”)
PHP 5(参见“PHP 5.2.5”)
Postfix SMTP 服务器(参见“Postfix SMTP 服务器 2.5.1”)
Courier-IMAP(参见第 43 页上的“Courier-IMAP 服务器 4.3.0”)
互联网连接
29.4. 可选
如果您想启用安全的 HTTP 连接,请使用带有签名 SSL 证书的 OpenSSL(参见“OpenSSL 0.9.8g”)
OpenLDAP 用于地址簿查找(参见“OpenLDAP 服务器 2.3.38”)
29.5. 准备
成为超级用户。
29.6. 安装
要开始 SquirrelMail 的安装过程,请输入以下命令:
# cd /usr/ports/mail/squirrelmail
# make config ; make install clean
29.7. 配置
安装完成后,是时候为您的系统配置 SquirrelMail 了。
-
PHP 默认文件上传限制为 2MB,这实际上限制了您的电子邮件附件的大小为 2MB。要增加此大小限制,您需要修改/usr/local/etc 目录中的 php.ini 文件,如下所示。(如果 2MB 满足您的需求,请跳到步骤 2。有关提高附件大小限制的更多详细信息,请参阅
www.squirrelmail.org/wiki/AttachmentSize。)# ee /usr/local/etc/php.ini滚动到
upload_max_filesize声明 (~606) 并将默认值2M更改为8M。现在该行应如下所示:upload_max_filesize = 8M保存并退出。
-
调用 SquirrelMail 配置实用程序:
# cd /usr/local/www/squirrelmail # ./configure确保以下配置选项设置正确:
[2] Server Settings [1] Domain在提示符下,将example.com替换为您的域名。
[2] Server Settings [A] Update IMAP Settings [8] Server Software在提示符下,将
*other*替换为courier。输入 Q 然后按[enter]键退出。当提示保存您的数据时,输入 Y。
-
创建一个 SquirrelMail 特定的 Apache 配置文件。此文件将 Apache 指向 SquirrelMail 文件的正确位置,并通过将 SquirrelMail 特定选项与主 httpd.conf 文件分开来简化管理。默认情况下,Apache 在/usr/local/etc/apache22/Includes 目录中搜索配置文件。以下是创建 SquirrelMail 配置文件的方法:
# ee /usr/local/etc/apache22/Includes/squirrelmail.conf添加以下行:
Alias /*squirrelmail* "/usr/local/www/squirrelmail/" <Directory "/usr/local/www/squirrelmail/"> Options None AllowOverride None Order allow,deny Allow from all </Directory>
注意: 默认情况下,SquirrelMail 被设置为您的 Web 服务器根站点的子目录,这意味着您需要在 Web 浏览器中输入
host.example.com/squirrelmail。要更改此默认目录,将(如上所述的斜体)squirrelmail替换为不同的名称。
保存并退出。重新启动 Apache 以提交更改:
# /usr/local/etc/rc.d/apache22 restart
29.8. 测试
在本节中,我们将测试 SquirrelMail 的配置。
-
要测试您的 SquirrelMail 配置,请将 Web 浏览器指向以下地址:
host.example.com/squirrelmail/src/configtest.php。如果适用,替换您的域名和目录。
-
检查输出是否有错误。如果一切顺利,底部应该有一个祝贺信息。
您现在应该能够通过点击链接或通过在 Web 浏览器中输入
host.example.comsquirrelmail来登录 SquirrelMail(再次替换您的服务器主机名和目录)。
29.9. 配置文件
/usr/local/www/squirrelmail/configure
此交互式 Perl 脚本使用菜单配置 SquirrelMail 选项。
29.10. 日志文件
/var/log/maillog
邮件活动的一般日志
29.11. 备注
-
SSL 为了保护用户的隐私,最好通过只允许 HTTPS 连接到 SquirrelMail 来保护所有通信。
我们将重建我们的 SquirrelMail 特定配置以适应这一点。打开现有文件:
# ee /usr/local/etc/apache22/Includes/squirrelmail.conf修改文件以读取:
Alias /*squirrelmail* "/usr/local/www/squirrelmail/" <Directory "/usr/local/www/squirrelmail/"> Options None AllowOverride None Order Allow,Deny Allow from All </Directory> <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{REQUEST_URI} /*squirrelmail* RewriteRule (.*) https://*host.example.com*/*squirrelmail*/ [R] </IfModule>进行适当的替换后保存,退出并重新启动 Apache:
# /usr/local/etc/rc.d/apache22 restart -
LDAP 如果您有一个运行中的功能正常的 LDAP 服务器,您可以在 SquirrelMail 中启用 LDAP 电子邮件地址查找。
确保您已使用以下命令安装了 php5-ldap 共享扩展:
# pkg_info | grep php5-ldap如果您没有获得任何结果,请重新构建 SquirrelMail:
# cd /usr/ports/mail/squirrelmail # make deinstall # make -D WITH_LDAP install clean要设置 LDAP 查找:
# cd /usr/local/www/squirrelmail # ./configure [6] Address Books [1] Change LDAP Servers如果您在同一系统上运行 LDAP 服务器,这些设置应该可以正常工作。如果不是,请进行适当的替换。
[ldap] command (?=help) > + hostname: localhost base: ou=People,dc=example,dc=com port: press [enter] charset: press [enter] name: LDAP: example.com maxrows: press [enter] binddn: press [enter] protocol: 3 [ldap] command (?=help) > d输入 Q 然后按 [enter] 键退出。当提示保存数据时,请输入 Y。
要在 SquirrelMail 中执行 LDAP 查找,请点击“撰写”链接,然后在撰写窗口中点击“地址”按钮(不是链接)以搜索或显示 LDAP 记录。地址链接将带您到您的个人地址簿,并且与 LDAP 目录独立。
第三十章. WORDPRESS 2.3.3
HTTP://WORDPRESS.ORG
30.1. 摘要
WordPress 是一个开源的个人发布系统,也被称为博客平台。像许多其他动态 Web 应用一样,WordPress 是用 PHP 编写的,并将内容存储在 MySQL 数据库中。
主要功能包括支持 trackback/pingback、第三方插件功能、符合万维网联盟(W3C)设定的 Web 标准、主题支持、静态页面管理以及 RSS(真正简单的聚合)订阅源支持。
随着 WordPress 等工具的出现,博客变得流行起来。作家和研究生 Justin Hall 被认为是 1994 年最早创建个人博客的人之一。另一位知名人物 David Winer 创建了 ping 服务器,这些服务器记录了从博客应用接收到的更新。Ping 服务器允许博客读者快速检查博客是否有更新内容;technorati.com是这一概念的流行例子。Winer 还创建了 RSS 规范,使用户能够通过 RSS 功能的客户端查看博客上的新内容。
WordPress 是 b2/cafelog 内容管理系统的继任者,其开发始于 2001 年。Matthew Mullenweg 和 Mike Little 是 WordPress 项目的原始创始人。Mullenweg 于 2005 年 8 月成立了 Automattic,Inc.,以容纳包括 WordPress 在内的各种开源项目。WordPress 的开发由 Mullenweg 和 Automattic,Inc.的 Ryan Boren 领导。
第三十章. WORDPRESS 2.3.3
WORDPRESS.ORG
30.1. 摘要
WordPress 是一个开源的个人发布系统,也被称为博客平台。像许多其他动态网络应用一样,WordPress 使用 PHP 编写,并将内容存储在 MySQL 数据库中。
主要功能包括支持 trackback/pingback、第三方插件能力、符合万维网联盟(W3C)设定的网络标准、主题支持、静态页面管理以及 RSS(真正简单的聚合)源支持。
随着 WordPress 等工具的出现,博客越来越受欢迎。作家和研究生贾斯汀·霍尔被认为是 1994 年最早创建个人博客的人之一。另一位知名人物大卫·温纳创建了 ping 服务器,这些服务器记录了从博客应用接收到的更新。ping 服务器允许博客读者快速检查博客是否有更新内容;technorati.com 是这一概念的流行例子。温纳还创建了 RSS 规范,使用户能够通过 RSS 客户端查看博客上的新内容。
WordPress 是 b2/cafelog 内容管理系统的继承者,其开发始于 2001 年。马修·穆伦韦格和迈克·利特尔是 WordPress 项目的原始创始人。穆伦韦格于 2005 年 8 月成立了 Automattic, Inc.,以容纳各种开源项目,包括 WordPress。WordPress 的开发由穆伦韦格和 Automattic, Inc. 的瑞安·博伦领导。
30.2. 资源
WordPress 文档
30.3. 必需的
FreeBSD 7.0-RELEASE(见 "FreeBSD 7.0")
更新后的端口集合(见 "FreeBSD 端口集合")
Apache HTTP 服务器(见 "Apache HTTP 服务器 2.2.8")
PHP 5(见 "PHP 5.2.5")
MySQL 5(见 "MySQL 服务器 5.0.51")
互联网连接
已注册域名
30.4. 准备
-
成为超级用户。
-
在 MySQL 中创建一个名为 wordpress 的数据库。接下来,创建一个名为 wordpress 的用户并赋予此用户完全权限:
# mysql -u root -p mysql> create database wordpress; mysql> grant all on wordpress.* to -> wordpress@localhost identified by 'password'; mysql> quit将
*密码*替换为您选择的密码(需要单引号)。您稍后需要这个密码。
30.5. 安装
输入以下命令开始 WordPress 的安装:
# cd /usr/ports/www/wordpress
# make config ; make install clean
30.6. 配置
安装完成后,是时候为您的系统配置 WordPress 了。
-
将 wp-config-sample.php 文件复制到 wp-config.php。以下命令将执行复制、设置文件权限并打开 wp-config.php 以进行修改:
# cd /usr/local/www/data/wordpress # cp wp-config-sample.php wp-config.php # chmod 640 wp-config.php # ee wp-config.php -
修改
DB_NAME、DB_USER和DB_PASSWORD声明(约 3 处)以匹配您的 MySQL 设置。这些行应如下所示(使用您之前分配的密码):define('DB_NAME', '*wordpress*'); // The name of the database define('DB_USER', '*wordpress*'); // Your MySQL username define('DB_PASSWORD', '*password*'); // ...and password保存并退出。
-
创建一个针对 WordPress 的特定 Apache 配置文件。此文件将 Apache 指向 WordPress 文件的正确位置,并通过将 WordPress 特定的选项与主 httpd.conf 文件分开来简化管理。默认情况下,Apache 在/usr/local/etc/apache22/Includes 目录中搜索配置文件。以下是创建 WordPress 配置文件的方法:
# ee /usr/local/etc/apache22/Includes/wordpress.conf添加以下行:
Alias /*wordpress* "/usr/local/www/data/wordpress/" <Directory "/usr/local/www/data/wordpress/"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory>
注意: 默认情况下,WordPress 被设置为您的网络服务器根站点的子目录。这意味着您需要在网络浏览器中输入
host.example.com/wordpress。要更改此默认目录,将上面的斜体中的wordpress替换为不同的名称。
保存并退出。重新启动 Apache 以提交更改:
# /usr/local/etc/rc.d/apache22 restart -
在您喜欢的网络浏览器中打开
host.example.com/wordpress/wp-admin/install.php,替换您的主机名和目录(如果您已修改),然后按照说明完成安装。 -
登录后,通过点击用户标签更改您的管理密码。点击名为您的个人资料的子标签,输入新密码(右下角),然后点击更新个人资料按钮。
30.7. 管理
使用此 URL 来管理您的 WordPress 安装(替换您的服务器主机名):host.example.com/wordpress/wp-admin。
30.8. 配置文件
usr/local/www/data/wordpress/wp-config.php
存储 WordPress 的用户名、密码和数据库信息
30.9. 备注
您可能想在您的博客中使用永久链接。以下是永久链接和标准链接的示例:
永久链接
host.example.com/wordpress/blog-article
标准链接
host.example.com/wordpress/?p=123
上述链接都会带您访问同一个假设的博客条目,但永久链接提供了一个有意义的 URL,这使得其他网站更容易引用您博客中的帖子。
要启用永久链接,请通过将您的网络浏览器指向 host.example.com/wordpress/wp-admin 来打开 WordPress 网络管理界面。
通过转到选项标签中的永久链接标签来启用永久链接。点击一个预定义的结构,或创建自己的结构,然后点击更新永久链接结构。
通过点击页面顶部的“查看网站 >>”来查看网站。点击“Hello, world!”帖子并确认浏览器地址栏中的 URL 字段与您设置的永久链接结构相匹配。
附录 A. 命令
本附录包含适用于基本 FreeBSD 系统管理的常用命令,旨在为不熟悉 Unix 命令的用户提供简明参考。它按以下类别组织:一般、存档文件和网络。命令按相对使用频率从高到低排列。有关任何命令的完整文档,请参阅其 man 页面。有关 man 页面的详细信息,请参阅“手册页面”。
A.1. 一般
A.1.1. ls
此命令将列出当前目录中的文件。
命令
ls
语法
ls -``*options file*
选项
-a
包含所有以点(.)开头的文件(隐藏文件)。
-l
以长格式列出文件(权限、日期、时间、所有者和组)。
-d
将目录作为普通文件列出(不递归搜索)。
-h
使用单位后缀,例如K代表千字节,M代表兆字节等(必须与-l选项一起使用)。
-F
在每个文件或目录类型后附加符号(/附加到目录,*附加到可执行文件,@附加到符号链接)。-F选项对于快速识别文件类型和目录非常有用,无需进行长列表(-l选项)。
下面是使用ls -l进行长格式目录列表的输出:
代码视图:
-rw-rw-r-- 2 root wheel 45463 Sep 26 03:20 example.doc
drwxr-xr-x 1 john user 512 May 20 18:06 Maildir
^|_||_||_| ^ ^ |____| |___| |_____| |___| |________|
| | | | | | | | | | |
| | | | | owner group size date time name
| | | | # of links to file or directory
| | | world permissions
| | group permissions
| owner permissions [r = read] [w = write] [x = execute] [- no permission]
type of file [- = normal file] [d = directory] [l = symbolic link]
示例
要列出当前目录中所有文件,包括以点(.)开头且使用长格式的文件,请输入:
# ls -al
要列出以 u 开头的根目录中的文件和目录名称,请使用*通配符输入:
# ls -d /u*
要列出所有文件和目录名称,包括以点(.)开头和以.txt 结尾的文件,请输入:
# ls -ald *.txt
默认 FreeBSD shell 配置文件中包含的两个有用的快捷键是命令ll和l(小写 L)。输入ll等同于输入ls -alFo,并显示您需要了解的当前目录的几乎所有信息。命令l等同于ls -l。
注意事项
要获取有关此命令的更多详细信息和其他选项,请在命令提示符下输入man ls。请记住,FreeBSD 是一个区分大小写的操作系统。命令ls -l file与命令ls -l File完全不同。星号(*)可以用作通配符,允许您指定过滤搜索。将其视为一种简短的说法“任何东西”。例如,如果您想搜索当前目录中以b开头的所有文件,请输入ls -d b*,这相当于“列出以小写 b 开头后跟任何内容的文件”。-d告诉系统列出以b开头的目录名称,而不是递归地搜索目录内的文件。
A.1.2. cd
此命令将工作目录更改为指定的目录。
命令
cd
语法
cd *directoryname*
示例
要将当前工作目录中的目录更改为名为 test 的目录,请输入:
# cd test
要切换到根目录,请输入:
# cd /
要将当前工作目录更改为 /usr/local/www,请输入:
# cd /usr/local/www
注意
在此示例中,www 是 /usr/local 的子目录,因为 local 是 /usr 的子目录。如果您的当前工作目录是 /usr/local/www,并且您想导航到 /usr/local,您可以输入 cd /usr/local 或 cd ..(.. 是导航到当前目录父目录的另一种方式)。另一个快捷键可以使用波浪号(~)键执行。输入 cd ~ 将您放置在当前用户的家目录中。此位置可能不同,但最可能是 /usr/home/username,其中 username 是当前用户的登录 ID。
如果您需要切换到包含空格的目录,您需要使用引号将路径括起来。输入 cd "/usr/local/www/webserver" 将是正确的语法。
A.1.3. pwd
此命令将显示当前工作目录。
命令
pwd
语法
pwd
示例
在命令提示符下输入 pwd。如果您刚刚登录,您可能会看到类似 /usr/home/user 的内容,其中 user 是您的登录名。这意味着您在名为 user 的目录中,它是 home 的子目录。home 的父目录是 usr。
A.1.4. cp
此命令用于将文件从一个位置复制到另一个位置。
命令
cp
语法
cp -``*options sourcefile targetfile*
选项
-i
强制 cp 在覆盖具有相同文件名的文件之前提示用户。
-R
如果源文件是目录,则整个子树将被复制。
-p
如果权限允许,保留源文件(s)的原始属性(修改和访问时间、文件标志、文件模式、用户和组 ID)。
示例
要将名为 example.doc 的文件复制到名为 newexample.doc 的新文件中,请输入:
# cp example.doc newexample.doc
要将 example.doc 文件复制到 /usr/local/www 目录,请输入:
# cp example.doc /usr/local/www
要在保留文件属性的同时将名为 logs 的目录树复制到名为 archive 的新目录中,请输入:
# cp -R -p logs archive
注意
如果您将文件复制到具有相同文件名的位置,如果未使用 -i 选项且权限允许,cp 将会覆盖文件。
可以使用通配符来复制多个文件。命令 cp *.doc /usr/home/user 将将当前目录中所有具有 .doc 扩展名的文件复制到 /usr/home/user 目录。
A.1.5. mkdir
此命令创建指定名称的目录。
命令
mkdir
语法
mkdir *directoryname*
示例
要在当前工作目录中创建名为 documents 的目录,请输入:
# mkdir documents
要在 /usr 目录内创建名为 home 的子目录,请输入:
# mkdir /usr/home
A.1.6. rm
此命令删除文件和目录。
命令
rm
语法
rm -``*options file*
选项
-i
在删除每个文件之前,让 rm 提示用户确认。
-r
递归删除指定路径中包含的所有文件和目录。
示例
要删除目录 tmp 及其包含的所有文件和目录,请输入:
# rm -r tmp
如果您想从当前目录删除名为 example.doc 的单个文件,请输入:
# rm example.doc
如果您想删除/usr/local/www 目录中的所有.doc 文件,并对每个文件进行确认,请输入:
# rm -i /usr/local/www/*.doc
注意
如果目录为空,也可以使用rmdir命令删除目录。命令rmdir test只会删除包含没有文件的 test 目录。
A.1.7. mv
此命令用于将文件从一个位置移动到另一个位置。
命令
mv
语法
mv -``*options source target*
选项
-i
在移动会覆盖现有文件或目录的文件或目录之前,mv命令会提示用户。
示例
要将目录/usr/local/www 中的名为 example.doc 的文件移动到当前用户的家目录,并启用覆盖确认,请输入:
# mv -i /usr/local/www/example.doc ~
要将文件 foobar.conf 重命名为 apache.conf,请输入:
# mv foobar.conf apache.conf
要将名为 www 的目录重命名为 cgi-bin,请输入:
# mv www cgi-bin
A.1.8. ee
Easy Editor 是一个简单的文本编辑程序。
命令
ee
语法
ee *filename*
要启动 ee,请在命令提示符中输入**ee**。
按下[esc]键进入主菜单。在顶部,您将看到可用的命令及其快捷键。插入符号(^)表示先按住[ctrl]键,然后按与命令相关的字母。屏幕底部,您可能会看到执行不同命令时的消息和提示。
您可以通过输入 ee 来打开文本文件。
# ee filename
将*filename*替换为文件的实际名称。
A.1.9. find
此命令是查找特定目录中嵌套文件的一种便捷方式。您可以指定要搜索的确切名称,或使用通配符搜索特定文件集。
命令
find
语法
find *startpath* -``*options searchstring*
选项
-name
xxx
搜索字符串*xxx*;要使用通配符(如?或*)搜索,请将字符串用双引号括起来。
-user
xxx
列出匹配用户名 xxx 的文件。
-group
xxx
列出匹配组名 xxx 的文件。
示例
要查找/usr 目录中所有的.doc 文件,请输入:
# find /usr -name "*.doc"
要搜索所有挂载的文件系统中的文件 example.doc,请输入:
# find / -name example.doc
要在当前目录及其子目录中搜索文件 example.doc,请输入:
# find . -name example.doc
要查找/usr 目录中属于用户 john 的所有文件,使用以下命令:
# find /usr -user john
A.1.10. file
此命令将检查文件与已知文件类型的预编译列表,如果找到匹配项,则返回文件类型描述。
命令
file
语法
file *filename*
示例
要确定名为 example.mov 的文件类型,请输入:
# file example.mov
要显示当前工作目录中所有文件的文件类型,请输入:
# file *
A.1.11. less
此程序可用于显示文本文件,以及滚动显示不适合一屏的其他命令的输出。
命令
less
语法
less -``*options file*
选项
-N
在每行的开头显示行号。
-M
在提示符中显示已查看文件的百分比和当前屏幕上的行号范围。
示例
要显示文本文件 example.txt 的内容,请输入:
# less example.txt
如果你选择的文件比屏幕长,请使用箭头键上下滚动文档。快速查找单词或字母的方法是按?,然后输入要查找的单词或字母并按[enter]。所有单词或字母的实例都将被突出显示。在任何时候按 Q 将退出到命令提示符。
要显示包含行号和百分比的文本文件/etc/services 的内容到可见文件,使用以下命令:
# less -NM /etc/services
1 #
2 # Network services, Internet style
3 #
4 # Note that it is presently the policy of IANA to assign a single...
5 # port number for both TCP and UDP; hence, most entries here have...
6 # even if the protocol doesn't support UDP operations.
7 #
8 # The latest IANA port assignments can be gotten from
9 #
10 # http://www.iana.org/assignments/port-numbers
/etc/services lines 1-10/2114 0%
less也可以用来检查来自其他命令的输出,如ls。通过使用管道符号(|),你可以将ls的输出重定向到less的输入,以便滚动输出。例如,要使用滚动显示目录/usr/lib(以长格式)的内容,请输入:
# ls -l /usr/lib | less
A.1.12. grep
此程序用于在文件或其他命令的输出中查找文本字符串。如果grep找到指定的字符串,它将返回匹配发生的整个行。
命令
grep
语法
grep *模式 文件*
示例
要在名为 apache.conf 的文本文件中搜索单词 server,请输入:
# grep server apache.conf
通过使用管道符号(|),你可以使用grep分析来自其他命令的输出,例如ls。要搜索根目录长列表的输出中的单词 usr,请输入:
# ls -l / | grep usr
你也可以在类似这样的文件中搜索短语:
# cat /COPYRIGHT | grep "All rights reserved"
A.1.13. su
此实用程序用于切换用户身份。如果没有提供用户名,则默认为 root。只有属于 wheel 组的用户才能切换到 root 登录,除非使用sudo命令以 root 身份运行su。
命令
su
语法
su *用户名*
示例
要从 wheel 组成员切换到 root 账户,请输入:
# su
A.1.14. chown
更改指定文件或目录的所有者和/或组。要查看文件或目录关联的当前所有者和组,使用长格式ls -l列出目录。
命令
chown
语法
chown -``*选项 所有者:组 文件*
选项
**-R** 当应用于目录时,递归地应用所有者/组更改。
示例
要将名为 example.doc 的文件的所有者更改为 john,请输入以下命令:
# chown john example.doc
要将名为 Maildir 的目录的组所有权更改为 user,请输入:
# chown :user Maildir
要将名为 apache.conf 的文件的所有者和组分别更改为 root 和 wheel,请输入:
# chown root:wheel apache.conf
要将名为 www 的目录的所有者更改为 john,包括所有子目录及其文件,请输入:
# chown -R john www
注意
只有你创建或拥有的文件才能使用此命令进行修改,除非你是超级用户。
A.1.15. chmod
此命令更改文件或目录的读取、写入和执行权限。对于文件,读取权限意味着读取文件内容的能力。对于目录,读取权限意味着列出其内容(文件或其他目录)的能力。对于文件和目录,写入权限意味着更改或删除其内容的能力。对于文件,执行权限意味着加载和运行作为程序的能力。对于目录,执行权限意味着可以使用 cd 命令进行导航。与 chown 命令类似,您需要是超级用户或要修改的文件的所有者,以便此命令成功。
命令
chmod
语法
chmod -``*options mode file*
选项
**-R** 当应用于目录时,递归地应用权限更改。
示例
以下是确定用于 chmod 的三位数文件模式的图解。
-rwxr-xr-- 2 root wheel 45463 Sep 26 03:20 example.doc
|_||_||_|
| | |
| | r-- [r=4] = 4 = third digit (world/anybody permission)
| r-x [r=4]+[x=1] = 5 = second digit (group permission)
rwx [r=4]+[w=2]+[x=1] = 7 = first digit (owner permission)
example.doc 有一个三位数的模式 754,因为每个数字是该用户 r(即读取)、w(写入)和 x(执行)权限值的总和,其中 r(即读取)是 4,w(写入)是 2,x(执行)是 1。
要更改名为 example.doc 的文件的权限,以便所有者、组和世界具有完全的读取、写入和执行权限,请输入:
# chmod 777 example.doc
要更改名为 www 的目录的权限,以便所有者具有读取、写入和执行权限,组具有读取权限,世界用户没有权限,请输入:
# chmod 740 www
A.1.16. df
此实用程序显示所有挂载文件系统的可用磁盘空间量。
命令
df
语法
df -``*options*
选项
**-h** 以兆字节、吉字节等后缀生成“人类可读”的输出。
**-c** 在输出的底部显示总行。
示例
要以“人类可读”的格式显示所有挂载文件系统的可用磁盘空间,请输入:
# df -h
A.1.17. du
此实用程序显示文件或目录使用的磁盘空间量。
命令
du
语法
du -``*options filename*
选项
-d
x
列出所有文件和目录,深度为 x。
-c
显示列出文件和目录的总计。
-h
使用单位后缀,如 K 表示千字节,M 表示兆字节。
-a
显示所有文件,包括隐藏文件。
示例
要使用单位后缀显示 /usr 目录中每个文件和目录的磁盘空间使用情况,请使用以下命令:
# du -d 1 -h /usr
要显示当前目录(包括子目录)中所有文件的磁盘空间使用情况以及总计,请输入:
# du -ca
注意事项
此实用程序的输出可能跨越几页;当处理长文件列表时,使用文本显示实用程序如 less 可能很有用。
A.1.18. mount
mount 命令用于使磁盘驱动器可用于计算机的文件系统。
命令
mount
语法
mount -``*options device node*
选项
-t
声明要挂载的设备的文件系统类型;常见的类型包括 msdos、ufs(默认)、cd9660、ntfs(有限)、udf 和 nfs。
注意: 挂载的 NTFS 卷写权限有限。文件必须是非驻留的,不能包含任何空格,也不能包含多字节字符。压缩文件也不受支持。
示例
要将数据 CD (/dev/acd0) 挂载到 /mnt 目录,请输入:
# mount -t cd9660 /dev/acd0 /mnt
要将硬盘 ad0 的第 1 片的第 a 分区(ad0s1a)挂载到 /mnt 节点,请输入:
# mount /dev/ad0s1a /mnt
A.1.19. umount
umount 命令用于将磁盘驱动器从计算机的文件系统中解除关联。在卸载之前移除可移动驱动器可能会导致数据损坏或丢失。
命令
umount
语法
umount *节点*
示例
要卸载挂载在节点 /mnt 上的文件系统,请输入:
# umount /mnt
注意事项
确保当前工作目录不是要卸载的文件系统内的目录;如果是,umount 命令将返回设备忙错误。
附录 A. 命令
本附录包含适用于基本 FreeBSD 系统管理的常用命令,旨在为不熟悉 Unix 命令的用户提供简明参考。它按以下类别组织:一般、存档文件和网络。命令按相对使用频率从高到低排列。有关任何命令的完整文档,请参阅其 man 页。有关 man 页的详细信息,请参阅“手册页”。
A.1. 一般
A.1.1. ls
此命令将列出当前目录中的文件。
命令
ls
语法
ls -``*选项 文件*
选项
-a
包含所有以点(.)开头的文件(隐藏文件)。
-l
以长格式列出文件(权限、日期、时间、所有者和组)。
-d
将目录作为普通文件列出(不递归搜索)。
-h
使用单位后缀,例如 K 表示千字节,M 表示兆字节,等等(必须与 -l 选项一起使用)。
-F
在每个文件或目录类型后附加符号(/ 附加到目录,* 附加到可执行文件,@ 附加到符号链接)。-F 选项对于快速识别文件类型和目录非常有用,而无需进行长列表(-l 选项)。
下面是使用 ls -l 以长格式列出目录输出的示例:
代码视图:
-rw-rw-r-- 2 root wheel 45463 Sep 26 03:20 example.doc
drwxr-xr-x 1 john user 512 May 20 18:06 Maildir
^|_||_||_| ^ ^ |____| |___| |_____| |___| |________|
| | | | | | | | | | |
| | | | | owner group size date time name
| | | | # of links to file or directory
| | | world permissions
| | group permissions
| owner permissions [r = read] [w = write] [x = execute] [- no permission]
type of file [- = normal file] [d = directory] [l = symbolic link]
示例
要列出当前目录中的所有文件,包括以点(.)开头的文件,并使用长格式,请输入:
# ls -al
要列出以 u 开头的根目录中的所有文件和目录名称,请使用 * 通配符,输入:
# ls -d /u*
要以长格式列出所有文件和目录名称,包括以点(.)开头且以 .txt 结尾的文件,请输入:
# ls -ald *.txt
默认 FreeBSD shell 配置文件中包含的两个有用的快捷键是命令 ll 和 l(小写 L)。输入 ll 与输入 ls -alFo 相同,并显示有关当前目录所需了解的大部分信息。命令 l 等同于 ls -l。
注意事项
要获取有关此命令的更多详细信息和其他选项,请在命令提示符下输入man ls。请记住,FreeBSD 是一个区分大小写的操作系统。命令ls -l file与命令ls -l File完全不同。星号(*)可以用作通配符,允许你指定过滤搜索。把它想作是“任何东西”的简写。例如,如果你想搜索当前目录中所有以b开头的文件,请输入ls -d b*,这相当于“列出以小写 b 开头后跟任何内容的文件”。-d告诉系统列出以b开头的目录名,而不是递归地搜索目录内的文件。
A.1.2. cd
此命令将工作目录更改为你指定的目录。
命令
cd
语法
cd *directoryname*
示例
要将当前工作目录更改为当前工作目录中的名为 test 的目录,请输入:
# cd test
要切换到根目录,请输入:
# cd /
要将当前工作目录更改为/usr/local/www,请输入:
# cd /usr/local/www
备注
在此示例中,www 是/usr/local 的子目录,因为 local 是/usr 的子目录。如果你的工作目录是/usr/local/www,并且你想导航到/usr/local,你可以输入cd /usr/local或cd ..(..是导航到当前目录父目录的另一种方式)。还可以使用波浪号(~)键执行另一个快捷操作。输入cd ~将把你带到当前用户的家目录。此位置可能不同,但最可能是/usr/home/username,其中 username 是当前用户的登录 ID。
如果你需要切换到包含空格的目录,你需要使用引号将路径括起来。输入cd "/usr/local/www/webserver"将是正确的语法。
A.1.3. pwd
此命令将显示当前工作目录。
命令
pwd
语法
pwd
示例
在命令提示符下输入pwd。如果你刚刚登录,你可能会看到类似/usr/home/user的内容,其中user是你的登录名。这意味着你位于名为 user 的目录中,它是 home 的子目录。home 的父目录是 usr。
A.1.4. cp
此命令用于将文件从一个位置复制到另一个位置。
命令
cp
语法
cp -``*options sourcefile targetfile*
选项
-i
强制cp在覆盖具有相同文件名的文件之前提示用户。
-R
如果源文件是目录,则导致整个子树被复制。
-p
如果权限允许,保留源文件(夹)的原始属性(修改和访问时间、文件标志、文件模式、用户和组 ID)。
示例
要将名为 example.doc 的文件复制到名为 newexample.doc 的新文件,请输入:
# cp example.doc newexample.doc
要将 example.doc 文件复制到/usr/local/www 目录,请输入:
# cp example.doc /usr/local/www
要将名为 logs 的目录树复制到名为 archive 的新目录,同时保留文件属性,请输入:
# cp -R -p logs archive
备注
如果你将文件复制到具有相同文件名的位置,如果未使用-i选项且权限允许,cp将覆盖文件。
可以使用通配符来复制多个文件。命令 cp *.doc /usr/home/user 将从当前目录复制所有具有 .doc 扩展名的文件到 /usr/home/user 目录。
A.1.5. mkdir
此命令使用您指定的名称创建目录。
命令
mkdir
语法
mkdir *directoryname*
示例
要在当前工作目录中创建名为 documents 的目录,请输入:
# mkdir documents
要在 /usr 目录内创建名为 home 的子目录,请输入:
# mkdir /usr/home
A.1.6. rm
此命令删除文件和目录。
命令
rm
语法
rm -``*options file*
选项
-i
在删除每个文件之前,提示用户使用 rm 进行确认。
-r
递归地删除指定路径中包含的所有文件和目录。
示例
要删除目录 tmp 及其包含的所有文件和目录,请输入:
# rm -r tmp
如果您想从当前目录删除名为 example.doc 的单个文件,请输入:
# rm example.doc
如果您想从 /usr/local/www 目录删除所有 .doc 文件,并对每个文件进行确认,请输入:
# rm -i /usr/local/www/*.doc
注意
目录也可以使用 rmdir 命令删除,前提是它为空。命令 rmdir test 仅在 test 目录不包含任何文件时才会删除该目录。
A.1.7. mv
此命令用于将文件从一个位置移动到另一个位置。
命令
mv
语法
mv -``*options source target*
选项
-i
在移动会覆盖现有文件或目录的文件或目录之前,提示用户使用 mv。
示例
要将名为 example.doc 的文件从 /usr/local/www 目录移动到当前用户的家目录,并启用覆盖确认,请输入:
# mv -i /usr/local/www/example.doc ~
要将文件 foobar.conf 重命名为 apache.conf,请输入:
# mv foobar.conf apache.conf
要将名为 www 的目录重命名为 cgi-bin,请输入:
# mv www cgi-bin
A.1.8. ee
Easy Editor 是一个简单的文本编辑程序。
命令
ee
语法
ee *filename*
要启动 ee,请在命令提示符下输入 **ee**。
按下 [esc] 键进入主菜单。在顶部,您将看到可用的命令及其快捷键。上箭头符号 (^) 表示按住 [ctrl] 键后跟与命令关联的字母。屏幕底部,您可能会看到执行不同命令时的消息和提示。
您可以通过在命令提示符下输入 ee 来打开文本文件。
# ee filename
将 *filename* 替换为文件的实际名称。
A.1.9. find
此命令是查找特定目录中嵌套的文件的有用方式。您可以指定要搜索的确切名称,或使用通配符搜索特定文件集。
命令
find
语法
find *startpath* -``*options searchstring*
选项
-name
xxx
搜索字符串 *xxx*;要使用通配符(如 ? 或 *)进行搜索,请将字符串用双引号括起来。
-user
xxx
列出与用户名 xxx 匹配的文件。
-group
xxx
列出与组名 xxx 匹配的文件。
示例
要在 /usr 目录中查找所有 .doc 文件,请输入:
# find /usr -name "*.doc"
要在所有挂载的文件系统中搜索名为 example.doc 的文件,请输入:
# find / -name example.doc
要在当前目录及其子目录中搜索名为 example.doc 的文件,请输入:
# find . -name example.doc
要查找属于用户 john 的位于/usr 目录中的所有文件,请使用以下命令:
# find /usr -user john
A.1.10. 文件
此命令将检查文件与预编译的已知文件类型列表进行匹配,并在找到匹配项时返回文件类型描述。
命令
file
语法
file *filename*
示例
要确定名为 example.mov 的文件类型,请输入:
# file example.mov
要显示当前工作目录中所有文件的类型,请输入:
# file *
A.1.11. less
此程序可用于显示文本文件,以及滚动不适合一屏的其他命令的输出。
命令
less
语法
less -``*options file*
选项
-N
在每行的开头显示行号。
-M
在提示符中显示已查看的文件百分比和当前屏幕上的行号范围。
示例
要显示文本文件 example.txt 的内容,请输入:
# less example.txt
如果您要显示的文件比屏幕长,请使用箭头键在文档中上下滚动。快速查找单词或字母的方法是按?,然后输入要查找的单词或字母并按[enter]。所有单词或字母的实例都将被突出显示。在任何时候按 Q 将退出到命令提示符。
要显示包含行号和百分比的文本文件/etc/services 的内容,请使用以下命令:
# less -NM /etc/services
1 #
2 # Network services, Internet style
3 #
4 # Note that it is presently the policy of IANA to assign a single...
5 # port number for both TCP and UDP; hence, most entries here have...
6 # even if the protocol doesn't support UDP operations.
7 #
8 # The latest IANA port assignments can be gotten from
9 #
10 # http://www.iana.org/assignments/port-numbers
/etc/services lines 1-10/2114 0%
less也可以用于检查来自其他命令的输出,如ls。通过使用管道符号(|),您可以将ls的输出定向到less的输入,以便滚动输出。例如,要显示以滚动方式显示目录/usr/lib(以长格式)的内容,请输入:
# ls -l /usr/lib | less
A.1.12. grep
此程序用于在文件或其他命令的输出中查找文本字符串。如果grep找到指定的字符串,它将返回匹配发生的整个行。
命令
grep
语法
grep *pattern file*
示例
要在名为 apache.conf 的文本文件中搜索单词 server,请输入:
# grep server apache.conf
通过使用管道符号(|),您可以使用grep分析来自其他命令的输出,例如ls。要在根目录的长列表中搜索单词 usr,请输入:
# ls -l / | grep usr
您还可以像这样在文件中搜索短语:
# cat /COPYRIGHT | grep "All rights reserved"
A.1.13. su
此实用程序用于切换用户身份。如果没有提供用户名,则假定 root。只有属于 wheel 组的用户才能切换到 root 登录,除非使用sudo命令以 root 身份运行su。
命令
su
语法
su *username*
示例
要从 wheel 组的成员切换到 root 账户,请输入:
# su
A.1.14. chown
更改指定文件或目录的所有者和/或组。要查看与文件或目录关联的当前所有者和组,请使用长格式ls -l列出目录。
命令
chown
语法
chown -``*options owner:group file*
选项
**-R** 当应用于目录时,递归地应用所有者/组更改。
示例
要将名为 example.doc 的文件的所有者更改为 john,请输入以下命令:
# chown john example.doc
要将名为 Maildir 的目录的组所有权更改为用户,请输入:
# chown :user Maildir
要将名为 apache.conf 的文件的所有者和组分别更改为 root 和 wheel,请输入:
# chown root:wheel apache.conf
要将名为 www 的目录的所有者更改为 john,包括所有子目录及其文件,请输入:
# chown -R john www
备注
只有您创建或拥有的文件可以使用此命令修改,除非您是超级用户。
A.1.15. chmod
此命令更改文件或目录的读取、写入和执行权限。对于文件,读取权限意味着读取文件内容的能力。对于目录,读取权限意味着列出其内容(文件或其他目录)的能力。对于文件和目录,写入权限意味着更改或删除其内容的能力。对于文件,执行权限意味着加载和作为程序运行的能力。对于目录,执行权限意味着可以使用cd命令导航。与chown命令类似,您需要是超级用户或要修改的文件的所有者,以便此命令成功。
命令
chmod
语法
chmod -``*options mode file*
选项
**-R** 将权限更改递归地应用于目录时应用。
示例
下面是确定用于chmod的 3 位文件模式的图示。
-rwxr-xr-- 2 root wheel 45463 Sep 26 03:20 example.doc
|_||_||_|
| | |
| | r-- [r=4] = 4 = third digit (world/anybody permission)
| r-x [r=4]+[x=1] = 5 = second digit (group permission)
rwx [r=4]+[w=2]+[x=1] = 7 = first digit (owner permission)
example.doc 具有 3 位数的模式 754,因为每个数字是该用户r(即读取)、w(写入)和x(执行)权限值的总和,其中r(即读取)是 4,w(写入)是 2,x(执行)是 1。
要将名为 example.doc 的文件的权限更改为所有者、组和世界具有完全的读取、写入和执行权限,请输入:
# chmod 777 example.doc
要将名为 www 的目录的权限更改为所有者具有读取、写入和执行权限,组具有读取权限,世界用户没有权限,请输入:
# chmod 740 www
A.1.16. df
此实用程序显示所有挂载文件系统的可用磁盘空间量。
命令
df
语法
df -``*options*
选项
**-h** 以兆字节、千兆字节等后缀的“人类可读”格式输出。
**-c** 在输出底部显示总行。
示例
要以“人类可读”格式显示所有挂载文件系统的可用磁盘空间,请输入:
# df -h
A.1.17. du
此实用程序显示文件或目录使用的磁盘空间量。
命令
du
语法
du -``*options filename*
选项
-d
x
列出 x 目录深的所有文件和目录。
-c
显示列出文件和目录的总计。
-h
使用单位后缀,如K表示千字节,M表示兆字节。
-a
显示所有文件,包括隐藏文件。
示例
要使用单位后缀显示/usr 目录中每个文件和目录使用的磁盘空间量,请使用以下命令:
# du -d 1 -h /usr
要显示当前目录中所有文件(包括子目录)使用的磁盘空间以及总计,请输入:
# du -ca
备注
此实用程序的输出可能跨越多个页面;在处理长文件列表时,使用文本显示实用程序如less可能很有用。
A.1.18. mount
mount命令用于使磁盘驱动器可用于与计算机的文件系统一起使用。
命令
mount
语法
mount -``*options device node*
选项
-t
声明要挂载的设备上的文件系统类型;常见类型包括msdos、ufs(默认)、cd9660、ntfs(有限)、udf和nfs。
注意:已挂载的 NTFS 卷写权限有限。文件必须是非驻留的,不能包含任何空格,也不能包含多字节字符。压缩文件也不受支持。
示例
要将数据光盘(/dev/acd0)挂载到/mnt 目录,请输入:
# mount -t cd9660 /dev/acd0 /mnt
要将硬盘 ad0 的第 1 个分区的分区 a(ad0s1a)挂载到/mnt 节点,请输入:
# mount /dev/ad0s1a /mnt
A.1.19. umount
umount命令用于将磁盘驱动器从计算机的文件系统中解除关联。在卸载之前移除可移动驱动器可能会导致数据损坏或丢失。
命令
umount
语法
umount *node*
示例
要卸载挂载在节点/mnt 上的文件系统,请输入:
# umount /mnt
注意事项
确保当前工作目录不是要卸载的文件系统中的目录;如果是,umount命令将返回设备忙碌错误。
A.2. 文件存档
A.2.1. dump
此命令具有备份 FreeBSD 文件系统的能力。
命令
dump
语法
dump -``*options filesystem*
选项
-0
(零)指定零级备份,或完整备份。
-a
自动调整输出大小,直到媒体返回媒体结束指示。
-L
告诉dump正在备份的文件系统是“活动”的(正在使用中),并拍摄文件系统的快照以保持一致性。除非系统处于单用户模式,否则始终包含此开关。
-f
告诉dump将输出写入文件而不是默认的磁带驱动器。
示例
要将/usr 分区备份到当前工作目录外的新文件 usr.dump 中,请输入:
# dump -0 -a -L -f usr.dump /usr
要将根(/)分区备份到当前工作目录中的新文件 root.dump 中,请输入:
# dump -0 -a -L -f root.dump /
注意事项
最好定期进行备份,并在可能的情况下,将备份文件存储在不同的物理驱动器或媒体上,以防硬件故障。我无法强调这一点的重要性:始终要有备份!请记住备份在初始 FreeBSD 安装期间创建的每个分区。如果您使用了默认设置,它们是/usr、/var、/和/tmp。如果您将备份文件存储在不同的物理驱动器上,请注意存储备份文件的文件系统的名称,并将其与 FreeBSD 启动 CD 一起保存。如果您的主驱动器发生故障,在需要恢复时需要此分区名称来访问备份文件(您可以使用df命令查看分区名称)。有关备份和恢复程序的详细信息,请参阅附录 B。
A.2.2. tar
此实用程序用于操作存档文件。存档文件可能包含单个文件或整个目录树。Tar 存档通常用于在互联网上传输文件或目录的完整层次结构,就像在其他平台上使用 Zip 文件一样。
命令
tar
语法
tar -``*options archive files*
选项
-c
创建一个新的存档。
-x
从存档中提取到磁盘。
-t
列出存档的内容。
-z
使用 gzip 压缩存档。
-r
将文件追加到现有存档中(必须未压缩)。
-f
指定一个文件以保存存档,而不是传统的磁带驱动器。
示例
要创建一个包含 /usr 目录中所有文件和目录的压缩存档名为 usr.tgz,请输入:
# tar -c -z -f usr.tgz /usr
要将名为 usr.tgz 的 gzip 存档提取到当前目录,请输入:
# tar -x -z -f usr.tgz
要将文件 example.xxx 追加到名为 archive.tar 的现有未压缩存档中,请输入:
# tar -r -f archive.tar example.xxx
A.2.3. restore
restore 命令可以从转储备份中恢复特定文件或整个文件系统。
命令
restore
语法
restore -``*options source*
选项
-i
将 restore 放入交互模式;用于恢复特定文件而不是整个文件系统。
-r
重建文件系统;在恢复整个文件系统时使用。(参见附录 B。)
-f
从文件而不是磁带驱动器读取输入。
示例
要从名为 usr.dump 的转储文件中交互式地恢复特定文件,请输入:
# restore -i -f usr.dump
将会显示一个提示符;你可以像操作一个实时文件系统一样在卷中导航。要显示可用选项的列表,请输入 ?。
当你找到要恢复的文件时,通过输入将其添加到提取队列中:
restore > add filename
其中 *filename* 是你希望提取的文件名。你也可以在这里使用通配符。
当你完成将文件添加到队列后,输入命令 **extract** 以开始恢复。restore 将显示一条消息,说明你尚未读取任何磁带,并询问从哪里开始;按 1 然后按 [enter],当它要求你设置所有者/模式时按 Y。输入 **quit** 以退出。你选择的文件将嵌套在当前工作目录中的原始层次结构中。
A.3. 网络
A.3.1. sockstat
sockstat 命令列出打开的互联网端口或套接字。此实用程序用于列出活动守护进程及其相关端口。在此处使用 grep 命令可以帮助从 sockstat 的输出中提取信息。
命令
sockstat
语法
sockstat -``*options*
选项
-l
显示监听套接字。
-c
显示连接的套接字。
-4
显示 IPv4 套接字。
-6
显示 IPv6 套接字。
示例
要列出监听服务请求的所有端口,请输入:
# sockstat -l
要列出当前监听 TCP 端口 443 的所有端口,请输入:
# sockstat | grep httpd
要列出当前监听 TCP 端口 443 的所有进程,请输入:
# sockstat | grep 443
A.3.2. ifconfig
此实用程序可用于检查或修改特定网络接口的配置。通常此命令在启动时从 /etc 中的 rc.conf 文件执行。在没有参数的情况下运行 ifconfig 将列出所有网络接口及其配置。
命令
ifconfig
语法
ifconfig *接口选项*
选项
inet
将系统的 IP 地址设置为指定的值。
netmask
将系统的子网掩码设置为指定的值。
示例
要将名为 xl0 的接口的 IP 地址更改为 192.168.0.12,子网掩码为 255.255.255.0,请使用以下命令:
# ifconfig xl0 inet 192.168.0.12 netmask 255.255.255.0
备注
此实用程序有数十种选项可用;它们超出了本指南的范围。请通过输入 **man ifconfig** 查看手册页以获取更多详细信息。
A.3.3. ping
ping 工具向指定的主机发送 ICMP 数据包并监听返回的数据包。这有助于确定主机是否在网络中可达。
命令
ping
语法
ping -``*选项 主机*
选项
-c
指定在终止前发送的包数或数量;默认情况下,ping 在被 [ctrl-C] 中断之前运行。
示例
要使用五个数据包 ping 名为 example.com 的主机,请使用以下命令:
# ping -c5 example.com
A.3.4. netstat
此命令显示有关网络拓扑的各种信息。
命令
netstat
语法
netstat -``*选项*
选项
-f
指定协议族(inet 或 unix)。
-r
显示所有路由表的内容。
-rs
显示路由统计信息。
示例
要显示路由表的内容,请使用以下命令:
# netstat -r
要显示所有活动 Internet 连接的状态,请使用以下命令:
# netstat -f inet
A.3.5. dig
dig,即域名信息探索器,是一个用于查询 DNS 名称服务器的工具。此工具对于解决 DNS 问题非常有用。
命令
dig
语法
dig @``*服务器名称 类型*
示例
要查询 DNS 服务器 ns2.foo.com 关于域名 example.com 的信息,请使用以下命令:
# dig @ns2.foo.com example.com
要查询具有 IP 地址 69.72.158.226 的 DNS 服务器关于域名 example.com 的邮件交换器(MX)记录,请使用以下命令:
# dig @69.72.158.226 example.com mx
A.3.6. 跟踪路由
此实用程序显示从本地系统到指定远程主机传输的数据所采取的路由。traceroute 实用程序对于诊断与路由相关的网络问题非常有用。
命令
traceroute
语法
traceroute -``*选项 主机*
选项
-n
显示 IP 地址而不是主机名。
示例
要跟踪到主机 www.example.com 的路由,请使用以下命令:
# traceroute www.example.com
A.4. 手册页
手册页(或 man 页)构成了 Unix 系统的在线文档。FreeBSD 的 man 页系统分为以下九个类别:
-
通用命令
-
系统调用和错误号
-
C 库
-
设备和设备驱动程序
-
文件格式
-
游戏
-
其他信息
-
系统维护命令
-
内核系统接口
可能存在不同类别中具有相同名称的 man 页面。我们将以主题“tar”为例。Tar 是磁带归档的缩写。它也是一种文件格式,以及用于操作 tar 归档的实用程序(程序)的名称。如果你想要有关 tar 的文件格式信息,你可以查看上面的类别,并看到该信息位于第五部分。要显示 tar 的文件格式 man 页面,请输入 **man 5 tar**。要了解更多关于 tar 实用程序的信息,它是一个通用命令,因此位于第一部分,请输入 **man 1 tar**。
如果你输入 man 后跟一个主题而没有章节号,系统将显示它找到的第一个与你的查询匹配的 man 页面(从第一部分开始)。查看该 man 页面后,你将返回到命令提示符。要显示所有与你的查询匹配的章节的 man 页面,请使用 -a 标志,例如:**man -a tar**。
在查看 man 页面时快速搜索一个单词,请输入 **/** 后跟单词并 [按回车键]。第一个匹配项将在屏幕顶部高亮显示;要找到单词的下一个实例,请按 N。
有时候,你可能不知道为某个任务使用哪个命令。在这种情况下,apropos 和 whatis 命令非常有用。apropos 命令会在命令数据库中搜索指定的字符串。例如,要搜索包含字符串 ftp 的所有 man 页面,请输入 **apropos ftp**。whatis 命令会在相同的命令数据库中搜索,但只返回完整的单词匹配。例如,要搜索包含单词 ftp 的所有 man 页面,请输入 **whatis ftp**。
下面是 whatis 命令的输出示例:
# whatis ftp
ftp(1) - Internet file transfer program
ftp-proxy(8) - Internet File Transfer Protocol proxy server
smbclient(1) - ftp-like client to access SMB/CIFS resources on servers
Net::Cmd(3) - Network Command class (as used by FTP, SMTP etc)
Net::FTP(3) - FTP Client class
第一列包含条目的名称及其数值类别,第二列是一个简要描述。要获取第一项的更多信息,请输入 **man 1 ftp**。要显示第二项的 man 页面,请输入 **man 8 ftp-proxy**。
附录 B. 备份和恢复
定期备份系统非常重要。不小心删除或误配置关键文件很容易导致系统“损坏”。在安装任何软件之前备份系统也是明智的,以防安装不按计划进行而造成挫败感。本节提供了使用 dump 和 restore 命令进行完整系统备份以进行灾难恢复的基本指南。
注意: 在将服务器“上线”之前,进行几次实验性的备份和恢复。对于新用户来说,熟悉这个过程比在时间和数据至关重要的时刻摸索这些程序更重要。建议将备份文件存储在不同的物理介质上(例如,辅助硬盘),以防主硬盘故障。有关详细信息,请参阅“添加第二个硬盘”。
B.1. 备份
使用dump实用程序进行备份是一个相当直接的过程。有关dump命令的更多详细信息,请参阅“存档文件”。在本例中,我们将假设安装了两个物理硬盘。第二个硬盘已挂载到系统上的/backup。如果您系统上没有第二个硬盘,您应该考虑添加一个。备份硬盘是非常值得投资的选择;有关说明,请参阅“添加第二个硬盘”。
在开始备份之前,我们将检查我们希望备份的每个分区的文件系统名称。通常,如果您在设置 FreeBSD 时选择自动分区驱动器,则应该备份根(/)、/var 和/usr 分区。
-
要查看挂载的文件系统列表,请输入:
# df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 253678 119942 113442 51% / devfs 1 1 0 100% /dev /dev/ad0s1e 2026030 12 1863936 0% /tmp /dev/ad0s1f 24767644 1572648 21213586 7% /usr /dev/ad0s1d 1012974 60350 871588 6% /var /dev/ad1s1d 37846636 1914068 32904838 5% /backupdf命令的输出显示,根分区(/)与文件系统名称 ad0s1a 相关联,/var 与 ad0s1d 相关联,/usr 与 ad0s1f 相关联。还请注意备份分区的文件系统;在这种情况下,它是 ad1s1d。 -
要将根、/var 和/usr 文件系统备份到辅助硬盘,请输入以下命令:
# dump -0 -a -L -f /backup/root.ad0s1a.dump / # dump -0 -a -L -f /backup/var.ad0s1d.dump /var # dump -0 -a -L -f /backup/usr.ad0s1f.dump /usr注意,文件名包括分区和文件系统名称。如果在恢复过程中需要,这将非常有帮助。前两个命令应该相对较快完成。第三个命令将根据您的/usr 目录树的大小而显著更长。当所有三个命令都完成后,您应该有一个能够恢复关键文件系统相同副本的备份集。
附录 B. 备份和恢复
定期备份您的系统非常重要。不小心删除或误配置关键文件很容易导致系统“损坏”。在安装任何软件之前备份系统也是明智之举,以防安装不按计划进行而造成挫败感。本节提供了使用dump和restore命令进行完整系统备份以备灾难恢复的基本指南。
注意: 在将服务器“上线”之前,先进行几次实验性的备份和恢复。对于新用户来说,熟悉这个过程比在时间和数据至关重要的时刻摸索这些程序更重要。建议将备份文件存储在不同的物理介质上(例如,一个辅助硬盘),以防主硬盘故障。有关详细信息,请参阅“添加第二个硬盘”。
B.1. 备份
使用 dump 工具进行备份是一个相当直接的过程。有关 dump 命令的更多详细信息,请参阅 "存档文件"。在此示例中,我们将假设安装了两个物理硬盘驱动器。第二个硬盘驱动器已挂载到系统上作为 /backup。如果您系统上没有第二个硬盘驱动器,您应该考虑添加一个。备份硬盘驱动器是非常值得的投资;请参阅 "添加第二个硬盘驱动器" 以获取说明。
在开始备份之前,我们将检查要备份的每个分区的文件系统名称。通常,如果您在设置 FreeBSD 时选择自动分区驱动器,则应该备份根(/)、/var 和 /usr 分区。
-
要查看挂载的文件系统列表,请输入:
# df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/ad0s1a 253678 119942 113442 51% / devfs 1 1 0 100% /dev /dev/ad0s1e 2026030 12 1863936 0% /tmp /dev/ad0s1f 24767644 1572648 21213586 7% /usr /dev/ad0s1d 1012974 60350 871588 6% /var /dev/ad1s1d 37846636 1914068 32904838 5% /backupdf命令的输出显示,根分区(/)与文件系统名称 ad0s1a 相关联,/var 与 ad0s1d 相关联,/usr 与 ad0s1f 相关联。同时,务必注意备份分区的文件系统;在这种情况下,它是 ad1s1d。 -
要将根、/var 和 /usr 文件系统备份到辅助硬盘驱动器,请输入以下命令:
# dump -0 -a -L -f /backup/root.ad0s1a.dump / # dump -0 -a -L -f /backup/var.ad0s1d.dump /var # dump -0 -a -L -f /backup/usr.ad0s1f.dump /usr注意,文件名既包括分区名称也包括文件系统名称。如果在恢复过程中需要,这将非常有帮助。前两个命令应该会相对快速完成。第三个命令将根据您 /usr 目录树的大小而显著更长。当所有三个命令都完成后,您应该有一个能够恢复关键文件系统相同副本的备份集。
B.2. 恢复
我们将假设您已按照“备份”部分中的说明将系统备份到单独的驱动器。我们将替换主驱动器的内容,因此仅在灾难恢复情况或测试系统上继续操作。您可以考虑将包含备份的驱动器移动到备用计算机上,并在那里练习恢复过程。
-
将 FreeBSD 分发 CD 的副本插入 CD-ROM 驱动器并重新启动。从 FreeBSD CD 启动后,您将看到 Sysinstall 主菜单。使用箭头键向下滚动以配置,并按[enter]。接下来,向下滚动到 Fdisk 并按[enter]。
-
将会弹出一个菜单,要求您选择一个驱动器。您将恢复主驱动器,因此滚动到它(可能是 ad0 或 da0)并按[enter]。
-
您现在处于 FDISK 分区编辑器中,因此按 A 自动创建一个分区,使用向下箭头直到新创建的分区被突出显示(可能命名为 ad0s1),然后按 S 将其设置为可引导。按 Q 退出 FDISK。
-
将会弹出一个对话框询问您是否想要安装引导管理器。选择标准并按[enter]。您可能会被返回到选择驱动器菜单;如果是这样,按[esc]取消。您将返回到 FreeBSD 配置菜单。
-
向下滚动,选择标签,并按[Enter]键。将出现 FreeBSD 磁盘标签编辑器。按 A 键自动创建默认分区,然后按 W 键写入更改(如果您愿意,也可以手动进行)。将出现一个对话框询问“您绝对确定现在要这样做吗?”请确认显示在上左角的正确磁盘(如果您正在恢复主 IDE 驱动器,它应该是 ad0,或者对于 SCSI 是 da0)。如果您准备好了,使用箭头键选择是并按[Enter]键。操作完成后,您将返回到 FreeBSD 磁盘标签编辑器。按 Q 键退出回到配置菜单。向上滚动退出并按[Enter]键。
-
滚动到 fixit 并按[Enter]键。将出现一个对话框,要求您选择 fixit 选项。选择 CDROM/DVD 并按[Enter]键。您将被带到命令提示符。首先,您需要挂载包含您的转储文件的分区。然后您将切换到适当的目录并从转储文件中恢复每个文件系统。
-
要开始恢复文件,请输入以下命令(将斜体中的文件系统名称替换为您包含转储文件的文件系统名称):
# mount /dev/ad1s1d /tmp # cd /mnt # restore -r -f /tmp/backup/root.ad0s1a.dump # cd /mnt/var # restore -r -f /tmp/backup/var.ad0s1d.dump # cd /mnt/usr # restore -r -f /tmp/backup/usr.ad0s1f.dump
注意: 忽略任何关于“文件存在”的消息。如果您已安装 MySQL,您可能需要在恢复后重置/tmp 目录的权限。有关更多详细信息,请参阅“MySQL 服务器 5.0.51”。
-
完成恢复后,输入
**exit**。这将带您回到 sysinstall。您将处于 fixit 菜单;选择退出并按[Enter]键,然后选择退出安装并按[Enter]键。您将被询问是否确定。选择是并按[Enter]键。从 CD-ROM 驱动器中取出 FreeBSD CD。系统现在已恢复。
B.3. 添加第二个硬盘
本指南假设您已将并行或串行 ATA 硬盘添加到系统中。如果您将使用 USB 或 SCSI 硬盘,您可以将所有关于 ad 的引用替换为 da,并正常进行。我们假设硬件安装正确且完整,并且您不打算保留新硬盘上可能存在的任何数据。在安装新硬盘后启动,以超级用户身份登录。
-
要开始配置新硬盘,请在命令提示符下输入
**sysinstall**。您将被带到主菜单。向下滚动到配置并按[Enter]键。 -
选择 Fdisk 并按[Enter]键。将出现一个对话框,要求您选择驱动器。选择适当的驱动器并按[Enter]键(新驱动器可能是列表中的第二个,名称类似于 ad1 或 ad2)。可能会出现一个警告消息,解释您的驱动器几何形状不正确。FreeBSD 将自动调整此设置,因此按[Enter]键继续。
-
您现在处于 FDISK 分区编辑器。按 A 键自动分区,然后按 W 键写入更改。将出现一个对话框,表示这应该在现有安装上执行,并询问您是否确定现在要这样做。通过检查左上角显示的磁盘名称来确认您正在修改正确的物理驱动器。如果准备好擦除驱动器,选择“是”并按 [enter] 键。将出现一个对话框,询问您是否想要安装引导管理器。选择“无”并按 [enter] 键。下一个对话框将表示操作成功。按 [enter] 键。输入 Q 退出 FDISK。
-
您将返回到“选择驱动器”菜单。选择“取消”返回到配置菜单。按 X 键并按 [enter] 键退出。您将处于 sysinstall 主菜单;再次按 X 键退出(您需要退出 sysinstall 以使更改生效)。
-
此时您将处于命令提示符。通过输入
**sysinstall**来重启 sysinstall。选择“配置”并按 [enter] 键。选择“标签”并按 [enter] 键。将出现一个对话框,提示您选择驱动器。选择适当的驱动器并按 [enter] 键(这将与步骤 2 中选择的驱动器相同)。现在将出现磁盘标签编辑器。按 C 键创建分区。将出现一个对话框,要求您指定分区大小。要使用整个驱动器,按 [enter] 键。下一个菜单将询问您要创建什么类型的分区。选择 fs 并按 [enter] 键。下一个提示将询问您挂载点(目录名称)。输入您选择的名称(例如 /backup;不要使用已存在的目录名称,因为 sysinstall 将在它上面挂载新的分区)并按 [enter] 键。要最终确定更改,按 W 键。将出现与 FDISK 中相同的对话框。如果准备好了,选择“是”并按 [enter] 键。 -
记录分区名称和相应的挂载名称;您将在以下步骤中需要这些信息。准备好继续时,按 Q 键退出标签编辑器。您将返回到选择驱动器菜单。选择“取消”返回到配置菜单。向上滚动退出并按 [enter] 键。选择“退出安装”并按 [enter] 键。您新配置的驱动器现在应该已经挂载并准备好使用。
-
/etc/fstab 文件需要修改,以便您的新的硬盘在系统启动时能够挂载。打开 /etc/fstab:
# ee /etc/fstab添加一行新内容,并插入您在步骤 6 中记录的分区名称。您需要在分区名称前加上 /dev/。您还需要在挂载点列下插入步骤 6 中使用的挂载名称。其余列可以设置为以下所示值:
# Device Mountpoint FStype Options Dump Pass# /dev/ad0s1b none swap sw 0 0 /dev/ad0s1a / ufs rw 1 1 /dev/ad0s1e /tmp ufs rw 2 2 /dev/ad0s1f /usr ufs rw 2 2 /dev/ad0s1d /var ufs rw 2 2 /dev/acd0 /cdrom cd9660 ro,noauto 0 0 /dev/ad1s1d /backup ufs rw 2 2保存并退出。新的驱动器现在应该在启动时自动挂载。
附录 C. 管理用户账户
本节旨在让新管理员简要了解使用 FreeBSD 添加、删除和修改用户。更多信息,请参阅 FreeBSD 手册,www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/users.html。
C.1. 添加用户
FreeBSD 包含 adduser 命令,它调用一个交互式脚本,使得添加用户变得相当容易。我们将创建一个名为 John Doe 的理论用户,并给他提供 shell 或命令行访问权限。
-
在命令行中输入
**adduser**后,你将被提示输入用户名。这是登录名;你可以使用任何你喜欢的约定,但在这个例子中我们只是使用名字。请注意,用户名是大小写敏感的,这意味着 john 和 John 是不同的。# adduser Username: john -
全名提示将出现。输入用户的全名。这仅是密码数据库中的描述字段,因此允许空格,用户不需要担心大小写敏感。
Full name: John Doe -
第三个提示将询问 Uid。只需按 [enter] 键接受默认的用户识别号。
Uid (Leave empty for default): -
下一个提示将询问登录组;默认情况下将是用户名。按 [enter] 键接受默认值。
Login group [john]: -
你将被询问是否想要邀请用户加入另一个组。如果这个用户需要能够使用
su命令成为超级用户,请输入**wheel**。否则留空并按 [enter] 键。Login group is john. Invite john into other groups? []: -
下一个提示将询问登录类。按 [enter] 键继续。
Login class [default]: -
下一个提示将询问你选择用户的 shell。你可以按 [enter] 键接受默认的 sh shell。如果用户计划广泛使用命令行,考虑将 shell 更改为 tcsh,这将向用户提供命令行历史记录和自动补全功能。如果你不想给用户 shell(命令行)访问权限,可以在此处输入
nologin。Shell (sh csh tcsh nologin) [sh]: -
下一个提示将允许你指定家目录的位置。按 [enter] 键接受默认值。实际路径将以 /usr 开头,所以在这种情况下将是 /usr/home/john。
Home directory [/home/john]: -
你将被询问是否想要使用密码认证。按 [enter] 键接受默认的“是”。
Use password-based authentication? [yes]: -
下一个提示将询问你是否想要使用空密码。按 [enter] 键接受默认的“否”。
Use an empty password? (yes/no) [no]: -
随后的提示将询问你是否想要使用随机密码。按 [enter] 键输入你自己的密码。
Use a random password? (yes/no) [no]: -
下两个提示将要求你输入密码。在输入密码时,屏幕上不会显示任何内容,所以请非常小心。
Enter password: Enter password again: -
脚本将询问在创建账户后是否想要锁定账户。按 [enter] 键接受默认的“否”。
Lock out the account after creation? [no]: -
你将看到你输入的信息摘要。如果你对结果满意,请输入
**y**并按 [enter] 键。如果你想添加另一个用户,对“添加另一个用户?”提示回答“是”。Username : john Password : ***** Full Name : John Doe Uid : 1002 Class : Groups : john Home : /home/john Shell : /bin/sh Locked : no OK? (yes/no): yes
附录 C. 管理用户账户
本节旨在让新管理员简要了解使用 FreeBSD 添加、删除和修改用户。有关更多信息,请参阅 FreeBSD 手册,www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/users.html。
C.1. 添加用户
FreeBSD 包括adduser命令,它调用一个交互式脚本,使得添加用户变得相当简单。我们将创建一个名为 John Doe 的理论用户,并给他 shell 或命令行访问权限。
-
在命令行中输入
**adduser**后,您将被提示输入用户名。这是登录名;您可以使用任何您喜欢的约定,但在这个例子中我们只是使用名字。请注意,用户名是大小写敏感的,这意味着 john 与 John 不同。# adduser Username: john -
接下来将出现全名提示。输入用户的首名和姓氏。这仅是密码数据库中的描述字段,因此允许空格,用户不必担心大小写敏感。
Full name: John Doe -
第三个提示将要求输入 Uid。只需按[Enter]键接受默认的用户识别号。
Uid (Leave empty for default): -
下一个提示将要求输入登录组;默认情况下将是用户名。按[Enter]键接受默认设置。
Login group [john]: -
您将被询问是否要邀请用户加入另一个组。如果此用户需要能够使用
su命令成为超级用户,请输入**wheel**。否则留空并按[Enter]键。Login group is john. Invite john into other groups? []: -
下一个提示将要求输入登录类别。按[Enter]键继续。
Login class [default]: -
下一个提示将要求您选择用户的 shell。您可以按[Enter]键接受默认的 sh shell。如果用户计划广泛使用命令行,请考虑将 shell 更改为 tcsh,这将向用户提供命令行历史记录和自动补全功能。如果您不想给用户 shell(命令行)访问权限,可以在此处输入
nologin。Shell (sh csh tcsh nologin) [sh]: -
以下提示将允许您指定主目录位置。按[Enter]键接受默认设置。实际路径将以 /usr 开头,因此在这种情况下将是 /usr/home/john。
Home directory [/home/john]: -
您将被询问是否要使用密码认证。按[Enter]键接受默认的“是”。
Use password-based authentication? [yes]: -
下一个提示将询问您是否要使用空密码。按[Enter]键接受默认的“否”。
Use an empty password? (yes/no) [no]: -
随后的提示将询问您是否要使用随机密码。按[Enter]键输入您自己的密码。
Use a random password? (yes/no) [no]: -
下两个提示将要求您输入密码。在您输入密码时,屏幕上不会显示任何内容,因此请务必小心。
Enter password: Enter password again: -
脚本将询问您是否希望在创建后锁定账户。按[Enter]键接受默认的“否”。
Lock out the account after creation? [no]: -
您将看到您输入的信息摘要。如果您对结果满意,请输入
**y**并按[Enter]键。如果您想添加另一个用户,对“添加另一个用户?”提示回答“是”。Username : john Password : ***** Full Name : John Doe Uid : 1002 Class : Groups : john Home : /home/john Shell : /bin/sh Locked : no OK? (yes/no): yes
C.2. 修改用户
使用chpass命令可以修改用户的外壳、个人信息、密码规则、主目录等。chpass命令将使用当前用户环境变量中设置的默认编辑器。root 账户默认使用 tcsh 外壳,并将这些变量存储在/root/.cshrc 中。默认情况下,其他用户使用 sh 外壳,并将他们的环境变量存储在/usr/home/username/.profile 中。默认编辑器通常是 vi。如果你不熟悉 vi,很容易迷路,所以我们将更改默认编辑器。要确定当前外壳,请输入:
# ps | grep sh
你可以通过检查输出第一行来识别你的外壳。要设置使用 csh 或 tcsh 外壳时的默认编辑器为 ee,请输入:
# setenv EDITOR ee
如果你使用的是 sh 外壳,请输入:
# EDITOR=ee ; export EDITOR
注意: 此更改将仅在您的登录会话期间生效。下次您登录时,您的默认编辑器将恢复到您的 shell 环境变量文件中设置的值。要使更改永久生效,请将上述行添加到适当的 shell 配置文件中(/root/.cshrc 或/usr/home/username/.profile)。
以下示例说明了作为名为 john 的用户账户的超级用户(root)运行chpass时可能会看到的内容。
# chpass john
#Changing user information for john.
Login: john
Password: $1$/q2SQ1Aa$vxTRAUvI0yvdhPryn7r/L/
Uid [#]: 1002
Gid [# or name]: 1002
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/john
Shell: /bin/sh
Full Name: John Doe
Office Location:
Office Phone:
Home Phone:
Other information:
你可以更改除密码字段外的任何字段。密码是经过散列的,在此处不可编辑。如果你希望禁用账户,你可以在行的开头添加一个井号(#)来注释密码字段。更改字段用于强制用户在指定的日期更改密码。过期字段将在指定的日期禁用账户(用户的家目录将保持完整)。
注意: 如果不是 root 用户执行*chpass*命令,她将只能看到更小的可编辑字段集,并且只能修改她自己的信息。
C.3. 修改密码
使用passwd命令可以更改用户的密码。以下示例将更改名为 john 的用户的密码。你需要成为超级用户才能执行此命令。
# passwd john
Changing local password for john
New Password:
Retype New Password:
用户可以通过使用passwd命令(不指定用户名)来更改自己的密码。
C.4. 删除用户
使用rmuser命令可以从 FreeBSD 中删除用户。以下命令将删除名为 john 的用户(将*john*替换为你想要删除的用户名):
# rmuser john
Matching password entry:
john:*:1002:1002::0:0:John Doe User:/home/john:/bin/sh
Is this the entry you wish to remove?
系统将显示有关账户的一些详细信息。如果你确定要删除用户,请输入**y**然后按[回车]。
Remove john's home directory (/home/john)? y
Removing user (john): mailspool home passwd.
最终提示将询问你是否想要删除用户的主目录。如果你想要删除此目录,请输入**y**然后按[回车]。
C.5. 主目录点文件
当用户被添加到系统中时,一组点文件(隐藏配置文件)会被复制到新用户的家目录中。这组点文件包含用户 shell 设置的默认值,以及其他内容。你可以更改位于 /usr/share/skel 中的默认点文件以适应你的偏好。例如,让我们更改这些点文件中的一个,即 dot.profile 文件。我们将默认文本编辑器从 vi 更改为 ee,因为它更容易学习。使用 Easy Editor 打开 dot.profile 文件:
# ee /usr/share/skel/dot.profile
将 vi 替换为 ee (~18):
EDITOR=ee; export EDITOR
保存并退出。在此修改之后添加的用户账户将使用 Easy Editor 作为默认文本编辑器,前提是你将它们分配默认的 sh shell。
附录 D. 协议
本附录旨在提供有关常见互联网协议和网络服务器相关概念的一些基本信息。对网络拓扑的清晰理解,在出现故障时可以节省大量时间和挫折。要更全面地了解互联网协议,请查阅 Charles M. Kozierok 编著的《TCP/IP 指南》(No Starch Press,2005 年)。
本附录采用国防部网络模型组织,也称为 TCP/IP 套件。在 70 年代初,当 DARPA 开始进行互联网项目工作时,采用了四层模型,这是我们所知道的互联网的开始。层可以映射到其关联的协议,如下所示:
TCP/IP LAYER PROTOCOLS
(4) Application Layer DHCP, DNS, FTP, HTTP, IMAP, POP3, SMTP
(3) Host-to-Host Layer TCP, UDP
(2) Internetwork Layer ARP, IP, ICMP
(1) Network Access Layer ETHERNET, WIFI
数据以线性方式通过每一层。例如,来自发送系统应用层的 HTTP 数据被转发到主机到主机层,在那里 TCP 协议附加一个包含源端口、目标端口和校验和(用于错误检查)的报头。这个数据包被交给互联网层,在那里 IP 协议附加另一个包含源地址、目标地址、生存时间和报头大小的报头。然后,数据包被转移到网络访问层,在该层添加另一个报头;该层由网络硬件读取,以便正确地将数据包转发到其目标地址。
下图显示了典型 HTTP 数据包中各种报头包含的一些信息。

下面将更详细地查看每一层以及构成 TCP/IP 套件的协议。
D.1. 应用层
这一层包括负责将数据传递到用户级应用程序(程序)的协议。这些应用层协议指定客户端与服务器交互时必须使用的语法。例如,从网络浏览器到网络服务器的 HTTP 请求可能看起来像 GET /index.html。以下是应用层中最常用的协议。
DHCP [UDP 端口 67, 68] 动态主机配置协议负责自动化将设备(例如,计算机和打印机)连接到网络的过程。DHCP 服务器为每个客户端提供一个 IP 地址、默认网关和 DNS 服务器地址。
当客户端设备首次连接到网络时,它会广播一个 DHCP 发现消息。DHCP 服务器持续监听这些类型的广播,并响应一个包含各种配置参数的 DHCP 提供消息。客户端设备接受这些参数,并通过另一个广播消息通知服务器。服务器响应一个最终的确认消息并存储配置。DHCP 客户端将配置应用到其网络接口,从而使其能够访问网络资源。整个过程对用户来说是透明的,并且只需几秒钟即可完成。
DHCP 通过租约策略动态分配客户端 IP 地址。这允许服务器在客户端离开网络或未能续订其 IP 租约时重用不再使用的 IP 地址。在 DHCP 协商期间发送初始配置参数时,DHCP 服务器将指定一个过期时间。客户端设备通常在过期时间过半时续订其租约。
DNS [UDP 端口 53] 域名系统负责将 DNS 数据从服务器分发到客户端,用于主机名到 IP 地址的解析。它是一个信息分布式系统,存储诸如google.com之类的域名及其关联的 IP 地址。网络感知应用程序(如网页浏览器等)在请求服务时使用 IP 地址作为接触点。DNS 允许使用易于记忆的名称,如unorthodocs.net,而不是像 69.227.55.189 这样的繁琐 IP 地址。
FTP [TCP 端口 21, 20(如果处于主动模式)] 文件传输协议负责在 TCP/IP 网络上从服务器传输文件到客户端。一旦建立 FTP 连接,用户(客户端)还可以交互式地操作服务器上的文件。
FTP 与其他流行的互联网协议(如 HTTP)不同,因为它使用多个 TCP/IP 连接。初始连接,或控制通道,发生在端口 21 上。此通道用于向 FTP 服务器发送命令。次要连接,或数据通道,用于传输数据。数据通道可以在主动或被动模式下建立。在主动模式下,服务器告诉客户端在 1023 以上的随机端口上监听传入连接。服务器连接到客户端以建立数据通道。如果客户端位于防火墙后面,这可能会成为一个问题,因为大多数防火墙都阻止传入流量。以下是主动模式下建立初始 FTP 连接的方法:
FTP Server (port 21) <----control----- FTP Client (port 21)
FTP Server (port 20) ------data------> FTP Client (random port >1023)
在被动模式下,初始数据连接方向被反转。服务器给客户端一个服务器监听的随机端口。然后客户端启动到服务器的出站连接以建立数据通道。如果使用防火墙,服务器管理员可以打开适当的端口以允许入站连接。以下是被动模式下初始 FTP 连接的建立方式:
FTP Server (port 21) <----control----- FTP Client (port 21)
FTP Server (random port >1023) <--data-- FTP Client (random port >1023)
FTP 在明文形式下传输用户名和密码信息。这可能会带来安全风险,因为潜在的攻击者可以很容易地使用网络分析器捕获这些数据。考虑到这一点,当没有其他选择时,FTP 仅应在受信任的网络中使用。FTP 的替代方案包括 SFTP(OpenSSH 的一部分)或使用安全的隧道协议来封装 FTP 数据包(例如,OpenVPN)。
HTTP 和 HTTPS [TCP 端口 80,443 分别] 超文本传输协议负责在万维网上传输数据,这是一个基于链接的系统,用于浏览互联网站点。HTTP 是一种请求/响应协议,其中客户端向 HTTP 服务器发送特定请求以获取信息。传输的数据编码在类似于 MIME(多用途互联网邮件扩展)的格式中,该格式用于电子邮件。与 MIME 编码的电子邮件一样,HTTP 数据包包括指定传输数据内容的头信息。Web 资源使用 URL(统一资源定位符)进行寻址,例如www.nostarch.com。
HTTP 可以被加密以防止服务器和客户端之间传输的数据被窃听。URL 方案https:告诉网络浏览器在安全的 HTTP 端口 443 上使用 SSL(安全套接字层)连接。这在需要保持财务信息私密的电子商务网站上常用。
IMAP 和 IMAPS [TCP 端口 143,993 分别] 互联网消息访问协议负责在邮件服务器和客户端应用程序(如 Outlook、Thunderbird 或 Eudora)之间传输、操作和同步电子邮件消息。IMAP 是一种请求/响应协议,需要身份验证以将用户与其各自的邮箱匹配。IMAP 不支持发送电子邮件消息;它旨在仅检索消息。SMTP 用于独立于 IMAP 发送电子邮件。
IMAP 与另一种互联网电子邮件检索标准 POP3(邮局协议版本 3)不同,因为 IMAP 支持持久连接。这意味着 IMAP 连接在电子邮件客户端程序打开期间保持打开状态,允许在服务器和客户端之间不断更新电子邮件消息。使用 POP3,客户端必须重新连接到服务器以检查消息。IMAP 将电子邮件消息存储在服务器上,这提供了一个中央位置来访问消息。POP3 将所有消息下载到电子邮件客户端,并随后删除服务器副本。这意味着消息只能在下载它的计算机上查看。IMAP 还支持对同一邮箱的并发连接;POP3 不支持。并发连接允许多个客户端与同一邮箱保持同步。
IMAP 可以被加密以防止在服务器和客户端之间传输的数据被窃听。端口 993 是 SSL 加密 IMAP 会话的标准端口。
POP3 和 POP3S [TCP 端口 110 和 995 分别] 邮局协议版本 3(POP3)负责在邮件服务器和客户端应用程序(如 Outlook、Thunderbird 或 Eudora)之间检索电子邮件消息。POP3 是一种请求/响应协议,需要认证以将用户与其各自的邮箱匹配。
POP3 可能是最广泛使用的用于检索互联网电子邮件的协议。这是因为几乎所有的互联网服务提供商都支持它用于客户电子邮件账户。一个 POP3 连接开始于电子邮件客户端通过 POP3 服务器进行认证。认证后,所有用户的邮件都传输到邮件应用程序,并从服务器上删除。然后连接终止。与 IMAP(它将消息保留在服务器上)相比,POP3 在客户端检索消息后删除消息,从而减少了存储需求,因此 POP3 在互联网提供商中保持了流行。
POP3 协议可以被加密以防止在服务器和客户端之间传输的数据被窃听。端口 995 是 SSL 加密 POP3 会话的标准端口。
SMTP [TCP 端口 25] 简单邮件传输协议(SMTP)负责在 SMTP 服务器之间传递电子邮件。SMTP 是一个基于 ASCII(美国信息交换标准代码)的协议,这意味着它通过仅使用文本字符来传输数据。MIME 是为了解决使用 SMTP 邮件传输二进制数据的问题而开发的,以便允许附件。
MIME 标准定义了将二进制数据转换为 ASCII(文本)字符的规则,这些字符可以使用仅文本的 SMTP 协议发送。接收方的电子邮件客户端将 MIME 编码的文本解码回二进制数据。
一封电子邮件消息是由 Outlook、Thunderbird 或 Eudora 等电子邮件客户端构建的,然后发送到指定的 SMTP 服务器。SMTP 服务器读取 SMTP 数据包中编码的目的信息,并使用 DNS 服务器解析负责该目的域的邮件服务器的 IP 地址。然后,服务器连接到目的 SMTP 服务器以投递消息。SMTP 被设计用于从源到目的地的邮件中继;预期客户端将使用 POP3 或 IMAP 从 SMTP 服务器检索消息。
SMTP 通常以明文形式传输数据,不包含对传输数据的监听保护。SMTP 服务器可以配置为使用 SSL/TLS 提供加密服务。这允许电子邮件客户端安全地将消息传输到 SMTP 服务器。然而,在此之后,无法保证安全性,因为消息以未加密的形式存储在服务器上,并且可能通过不使用加密的其他 SMTP 服务器。
附录 D. 协议
本附录旨在提供有关网络服务器相关的一些基本互联网协议和概念信息。对网络拓扑的清晰理解,在出现故障时可以节省大量时间和挫败感。若想更全面地了解互联网协议,请查阅查尔斯·M·科齐罗克的《TCP/IP 指南》(No Starch Press,2005 年)。
本附录采用国防部网络模型组织,也称为 TCP/IP 套件。在 20 世纪 70 年代初,当 DARPA 开始进行互联网项目工作时,采用了四层模型,这是我们所知道的互联网的开始。层可以映射到其关联的协议,如下所示:
TCP/IP LAYER PROTOCOLS
(4) Application Layer DHCP, DNS, FTP, HTTP, IMAP, POP3, SMTP
(3) Host-to-Host Layer TCP, UDP
(2) Internetwork Layer ARP, IP, ICMP
(1) Network Access Layer ETHERNET, WIFI
数据以线性方式通过每一层。例如,来自发送系统应用层的 HTTP 数据被转发到主机到主机层,在那里 TCP 协议附加一个包含源端口、目的端口和校验和(用于错误检查)的头部。然后将此数据包交给互联网层,IP 协议附加另一个包含源地址、目的地址、生存时间和头部大小的头部。然后,数据包被转移到网络访问层,该层添加另一个头部;网络硬件读取此层以正确地将数据包转发到其预期目的地。
下图展示了典型 HTTP 数据包中各种头部包含的一些信息。

下面将更详细地查看每一层和构成 TCP/IP 套件的协议。
D.1. 应用层
这一层包括负责将数据传输到用户级应用程序(程序)的协议。这些应用层协议指定了客户端必须使用的语法以与服务器交互。例如,从网络浏览器到网络服务器的 HTTP 请求可能看起来像GET /index.html。以下是一些最常用的应用层协议。
DHCP [UDP 端口 67, 68] 动态主机配置协议负责自动化将设备(例如,计算机和打印机)连接到网络的过程。DHCP 服务器为每个客户端提供一个 IP 地址、默认网关和 DNS 服务器地址。
当客户端设备首次连接到网络时,它会广播一个 DHCP 发现消息。DHCP 服务器持续监听这些类型的广播,并响应一个包含各种配置参数的 DHCP 提供消息。客户端设备接受这些参数,并通过另一个广播消息通知服务器。服务器响应一个最终的确认消息并存储配置。DHCP 客户端将配置应用到其网络接口,从而使其能够访问网络资源。整个过程对用户来说是透明的,并且只需几秒钟即可完成。
DHCP 使用租约策略动态分配客户端 IP 地址。这允许服务器重用当客户端离开网络或未能续订其 IP 租约时可能不再使用的 IP 地址。在 DHCP 协商期间发送初始配置参数时,DHCP 服务器将指定一个过期时间。客户端设备通常在过期时间过半时续订其租约。
DNS [UDP 端口 53] 域名系统负责将 DNS 数据从服务器分发到客户端,用于主机名到 IP 地址的解析。它是一个信息分布式系统,存储着像google.com这样的域名及其相关的 IP 地址。网络感知应用程序(如网络浏览器等)在请求服务时使用 IP 地址作为接触点。DNS 允许使用易于记忆的名称,如unorthodocs.net,而不是像 69.227.55.189 这样的繁琐 IP 地址。
FTP [TCP 端口 21, 20(如果处于主动模式)] 文件传输协议负责在 TCP/IP 网络上从服务器传输文件到客户端。一旦建立了 FTP 连接,用户(客户端)还可以交互式地操作服务器上的文件。
FTP 与其他流行的互联网协议(如 HTTP)不同,它使用多个 TCP/IP 连接。初始连接,或称控制通道,通过端口 21 进行。此通道用于向 FTP 服务器发送命令。次要连接,或数据通道,用于传输数据。数据通道可以以主动或被动模式建立。在主动模式下,服务器告诉客户端监听一个随机端口(大于 1023)上的传入连接。服务器连接到客户端以建立数据通道。如果客户端位于防火墙后面,这可能会成为一个问题,因为大多数防火墙都会阻止传入流量。以下是主动模式下建立初始 FTP 连接的步骤:
FTP Server (port 21) <----control----- FTP Client (port 21)
FTP Server (port 20) ------data------> FTP Client (random port >1023)
在被动模式下,初始数据连接方向相反。服务器给客户端一个服务器监听的随机端口。然后客户端发起一个出站连接到服务器以建立数据通道。如果使用防火墙,服务器管理员可以打开适当的端口以允许传入连接。以下是被动模式下建立初始 FTP 连接的步骤:
FTP Server (port 21) <----control----- FTP Client (port 21)
FTP Server (random port >1023) <--data-- FTP Client (random port >1023)
FTP 在明文方式下传输用户名和密码信息。这可能会带来安全风险,因为潜在的攻击者可以很容易地使用网络分析器捕获这些数据。考虑到这一点,当没有其他选择时,FTP 只能在受信任的网络中使用。FTP 的替代方案包括 SFTP(OpenSSH 的一部分)或使用安全的隧道协议来封装 FTP 数据包(例如,OpenVPN)。
HTTP 和 HTTPS [TCP 端口 80,443 分别] 超文本传输协议负责在万维网上传输数据,这是一个基于链接的浏览互联网站点的系统。HTTP 是一种请求/响应协议,客户端向 HTTP 服务器发送特定请求以获取信息。传输的数据以类似于 MIME(多用途互联网邮件扩展)的格式编码,MIME 用于电子邮件。与 MIME 编码的电子邮件类似,HTTP 数据包包括头部信息,指定正在传输的数据内容。网络资源使用 URL(统一资源定位符)进行寻址,例如www.nostarch.com。
HTTP 可以通过加密来防止服务器和客户端之间传输的数据被窃听。URL 方案https:告诉网络浏览器在安全的 HTTP 端口 443 上使用 SSL(安全套接字层)连接。这在进行电子商务的网站上常用,其中需要保持财务信息私密。
IMAP 和 IMAPS [TCP 端口 143,993 分别] 互联网消息访问协议负责在邮件服务器和客户端应用程序(如 Outlook、Thunderbird 或 Eudora)之间传输、操作和同步电子邮件消息。IMAP 是一种请求/响应协议,需要身份验证以将用户与其各自的邮箱匹配。IMAP 不支持发送电子邮件消息;它仅设计用于检索消息。SMTP 用于在 IMAP 独立发送电子邮件。
IMAP 与其他互联网电子邮件检索标准 POP3(邮局协议第 3 版)不同,因为 IMAP 支持持久连接。这意味着 IMAP 连接在电子邮件客户端程序打开期间保持打开状态,允许服务器和客户端之间持续更新电子邮件消息。使用 POP3,客户端必须重新连接到服务器以检查消息。IMAP 在服务器上存储电子邮件消息,这提供了一个中央位置来访问消息。POP3 将所有消息下载到电子邮件客户端,并随后删除服务器副本。这意味着消息只能在下载它的计算机上查看。IMAP 还支持对同一邮箱的并发连接;POP3 不支持。并发连接允许多个客户端与同一邮箱保持同步。
IMAP 可以加密以防止服务器和客户端之间传输的数据被窃听。端口 993 是 SSL 加密 IMAP 会话的标准端口。
POP3 和 POP3S [TCP 端口 110,995 分别] 邮局协议第 3 版负责在邮件服务器和客户端应用程序(如 Outlook、Thunderbird 或 Eudora)之间检索电子邮件消息。POP3 是一种请求/响应协议,需要身份验证以将用户与其各自的邮箱匹配。
POP3 可能是用于检索互联网电子邮件最广泛使用的协议。这是因为几乎所有的互联网服务提供商都支持它用于客户电子邮件账户。当电子邮件客户端程序通过 POP3 服务器进行身份验证时,开始建立 POP3 连接。身份验证后,所有用户的邮件都传输到邮件应用程序,并从服务器上删除。然后终止连接。与 IMAP 不同,IMAP 在服务器上保留消息,而 POP3 在客户端检索消息后删除消息,这使得 POP3 在互联网提供商中保持了流行,因为删除消息减少了存储需求。
POP3 协议可以加密以防止服务器和客户端之间传输的数据被窃听。端口 995 是 SSL 加密 POP3 会话的标准端口。
SMTP [TCP 端口 25] 简单邮件传输协议负责在 SMTP 服务器之间中继电子邮件。SMTP 是基于 ASCII(美国信息交换标准代码)的协议,这意味着它通过仅使用文本字符来传输数据。MIME 的开发是为了解决使用 SMTP 邮件传输二进制数据的问题,以便允许附件。
MIME 标准定义了将二进制数据转换为 ASCII(文本)字符的规则,这些字符可以使用仅文本的 SMTP 协议发送。接收方的电子邮件客户端将 MIME 编码的文本解码回二进制数据。
电子邮件消息是通过 Outlook、Thunderbird 或 Eudora 等电子邮件客户端构建的,然后发送到指定的 SMTP 服务器。SMTP 服务器读取 SMTP 数据包中编码的目标信息,并使用 DNS 服务器解析负责该目标域的邮件服务器的 IP 地址。然后,服务器连接到目标 SMTP 服务器以发送消息。SMTP 被设计为从源到目的地中继邮件;预期客户端将使用 POP3 或 IMAP 从 SMTP 服务器检索消息。
SMTP 通常以明文形式传输数据,并且不包含对传输数据的监听保护。SMTP 服务器可以配置为使用 SSL/TLS 提供加密服务。这允许电子邮件客户端安全地将消息发送到 SMTP 服务器。然而,在此之后,无法保证安全性,因为消息以未加密的形式存储在服务器上,并且可能通过不使用加密的其他 SMTP 服务器。
D.2. 主机-主机层
此层包括 TCP 协议,该协议负责在保持错误纠正的完整性情况下打开、维护和关闭连接。该层还包括 UDP 协议,它不提供 TCP 的错误纠正和持久连接,但因其效率而有用。应用层协议专门设计为使用 TCP 或 UDP。例如,HTTP 使用 TCP,而 DHCP 使用 UDP。
PGP(非常好隐私),一个客户端程序,或 S/MIME(安全多用途互联网邮件扩展),一个基于公钥基础设施的标准,可以在需要安全时用于加密电子邮件。
为了更好地说明 TCP 的概念,可以将数据文件想象成一个完成的好拼图。为了将这个完成的拼图通过网络传输,TCP 将其拆分,依次标记每一块,将每一块放入信封(头部),发送到邮局(IP),并为每一块购买跟踪和保险。如果任何一块丢失,它们将简单地重新发送。当拼图的碎片开始到达目标系统时,目标系统上的 TCP 协议将仔细地将所有碎片按顺序放在一起,重建拼图。
UDP 用户数据报协议用于将应用层协议准备的数据传输到计算机网络。UDP 负责从应用程序传递的数据流中提取,并在将其快速传递给底层的互联网协议之前添加最少量的头部信息,该协议负责从源到目的地的数据包路由。与 TCP 不同,UDP 不提供任何排序或可靠性措施。缺乏错误纠正使得 UDP 在 TCP 的开销不太理想的应用程序中更快、更高效,例如 VoIP 和多媒体流。
TCP/UDP 端口 在创建头部信息时,TCP 和 UDP 使用所谓的端口来将数据地址指定给特定的应用程序。想象一下一条长走廊,两旁排列着数百扇编号的门,就像酒店一样。每一扇门代表一个端口。由于 Apache 网络服务器使用 TCP 端口 80 上的 HTTP,发送到网络服务器的数据会沿着这条走廊走到 80 号房间,穿过敞开的门(端口),然后能够与网络服务器通信。
IANA(互联网分配数字权威机构),现在由 ICANN(互联网名称与数字地址分配机构)运营,负责为协议和应用程序分配端口号。将端口号与特定协议配对允许网络感知应用程序通过单个物理连接与各种服务进行通信。FreeBSD 的服务名称数据库位于 /etc/services。此文件包含协议名称及其 IANA 分配的端口号的完整列表。请访问 http://www.iana.org/assignments/port-numbers 获取最新的 IANA 端口号分配。
D.3. 网络层
此层包括互联网协议(IP),它负责将数据包从源路由到目的地。IP 被设计用来携带由 TCP 和 UDP 等高级协议准备的数据包。
ARP 地址解析协议负责在以太网网络上将 IP 地址解析为 MAC(媒体访问控制)地址。MAC 地址是在制造过程中分配给以太网网络设备的硬编码(永久)标识符。一个 MAC 地址的例子是 00:0d:93:8e:b0:34;在 Unix 系统上,使用 ifconfig 命令可以查看 MAC 地址信息。
与互联网层使用的 IP 地址相比,以太网使用网络设备的 MAC 地址。例如,假设计算机 A 试图向计算机 B 发送一个 IP 数据包。如果它们位于同一个子网中,计算机 A 将传输一个包含计算机 B IP 地址的 ARP 广播。计算机 B 会回复其 MAC 地址,计算机 A 将存储这个地址以供将来通信使用。一旦这个过程(称为 ARP 解析)完成,实际的数据传输就可以通过以太网进行。如果计算机 A 和 B 位于不同的子网中,那么路由器的工作就是在两个子网之间中继数据包。以太网交换机存储 ARP 表,以便将流量路由到其他交换机或路由器。
ARP 被视为互联网层和网络访问层之间的中介。
IP 协议是负责在互联网上路由流量的网络层协议。IP 头部包含诸如 TTL(生存时间)、源 IP 地址和目标 IP 地址等信息,这些信息被路由网络硬件读取,并根据配置的规则或策略处理或转发数据包。
将互联网协议想象成网络的“邮局”是一种简单的方法。该协议规定了数据包的寻址格式和大小,就像传统邮局对邮件的处理方式一样。将路由器想象成邮件分类员,它使用寻址信息来确定每个数据包的处理方式,以便将其发送到最终目的地。
IPv4,即互联网协议的第 4 版本,在公共互联网上被广泛使用。IPv4 使用一个由四个八位字节组成的 32 位地址系统,每个字节代表 8 位。使用这个 32 位地址系统,有 4,294,967,296 个可能的唯一地址。其中一些地址被保留用于私有网络和其他管理用途。例如,192.168.x.x 和 10.x.x.x 被保留用于私有网络。127.x.x.x 被称为本地主机地址。随着唯一 IP 地址数量的逐渐减少,IPv6 的开发工作已经开始。在一定程度上,NAT 路由器的普及缓解了对 IP 地址短缺的担忧。NAT 技术将多台计算机聚集在一起,使用单个 IP 地址,而不是为每台计算机分配唯一的 IP 地址。
IP 地址:互联网协议地址是一串由点分隔的数字,代表计算机在网络上的虚拟地址。一个 IP 地址的例子是 17.254.0.91。静态 IP 地址是设置为在网络上可访问时由特定计算机使用的 IP 地址。动态 IP 地址是由 DHCP 服务器分配的租用 IP 地址。当租约到期或计算机在网络上不可达时,IP 地址可能会发生变化。
ICMP 互联网控制消息协议旨在提供有关 IP 网络上数据包传输问题的反馈。ICMP 数据包是带有错误类型和代码的头部信息的 IP 数据包。
例如,假设我们正在通过互联网在两台计算机之间传输数据。计算机 A 连接在高速光纤网络上,而计算机 B 连接在拨号调制解调器上。当计算机 A 向计算机 B 发送数据时,它发送的速度比计算机 B 的连接能够接受的速度要快。当计算机 A 开始超载计算机 B 的路由器时,会向计算机 A 发送一个 ICMP 源抑制消息,请求它降低传输速率以避免数据包丢失。
常见的网络工具 ping,利用 ICMP 回显消息来提供关于网络可达性的信息。另一个网络工具 traceroute,则使用 ICMP 超时消息来尝试追踪主机之间数据包的路径。
更多关于 ICMP 的信息,请参阅 RFC 792:tools.ietf.org/html/rfc792。
D.4. 网络访问层
此层的协议和技术负责将数据包从一台网络设备的物理拓扑结构传输到另一台。此层会给数据包添加一个数据包头部,通常称为帧,以帮助数据包在网络之间传输。每当数据包进入一个中间路由器时,都会移除额外的头部信息;路由器在将数据包传输到下一个网络时会创建一个新的帧。这个过程会一直持续到数据包到达最终目的地。
10BASE-T 10BASE-T 是一种以太网网络拓扑标准,用于使用 8 芯双绞线(UTP)电缆和 RJ-45 型连接器物理连接设备。10BASE-T 中的 10 代表传输速度为 10 Mbps。BASE 代表基带,意味着每对双绞线只有一个以太网信号。T 代表双绞线,这是一种使用绕组来最小化电磁干扰的布线方式。100BASE-T 和 1000BASE-T 是更新的标准,分别具有 100 和 1,000 Mbps 的传输速度。
电缆/DSL 调制解调器 这些设备用于将电缆和电话服务提供商传输的数据信号调制(改变)成计算机可用的信号。使用这些设备,宽带互联网接入成为可能。典型的下行速度为 1.5 到 6 Mbps,上行速度平均为 350 Kbps。
以太网 这种基于帧的联网技术是最广泛使用的局域网标准。以太网被认为是一种对等网络,最初实现了 CSMA/CD(载波侦听多路访问与碰撞检测)协议来传输数据。这也被称为半双工以太网,包括一组所有以太网设备都必须遵守的规则:
-
如果线路空闲,开始传输。
-
如果检测到冲突(两个设备同时说话),则在指定时间后停止传输,以确保其他发射器也能检测到冲突。
-
在重新传输数据之前等待随机的时间。
-
数据被重新传输。
-
如果数据发送成功,设备将退出传输模式。
第二种操作模式,称为全双工以太网,通过允许以太网设备同时发送和接收数据来绕过 CSMA/CD 协议。由于发送和接收路径是分开的,这消除了冲突问题。为了以全双工模式运行,主机必须位于交换网络中,并且具有支持全双工操作的网络接口适配器。以太网集线器仅支持半双工模式。
以太网是一种广播网络技术。每个以太网网络接口卡(NIC)都拥有一个全球唯一的 48 位标识符,称为 MAC 地址。网络设备以包含源和目标 MAC 地址的头部的小数据块(帧)形式传输数据。默认情况下,每个网络设备会持续“监听”网络,并忽略所有不包含与其自身 MAC 地址匹配的“帧”。
以太网适配器 也称为网络接口卡(NIC)或网络适配器,该组件允许计算机与以太网上的其他设备通信。大多数新型计算机系统都内置了以太网适配器。FreeBSD 原生支持大多数品牌和型号。
集线器 集线器,也称为集中器,是一种将多个设备连接在一起的设备。集线器从任何连接的设备接收传入的信号,并将信号重新广播到其他连接的设备。
以太网广播可以比作在人群中大声呼喊一个人的名字。每个人都听到公告,但只有被叫到名字的人会听随后的消息。当有大量流量时,这种持续的呼喊会导致大量无关的流量,而一个称为交换机的不同设备试图减轻这种流量。
以太网交换机 交换机,也称为智能集线器,是一种将多个网络设备连接在一起的设备。交换机被称为智能集线器,因为它使用 MAC 地址表来存储连接到它的设备的标识。当数据进入交换机时,它会检查其目标信息。然后,交换机将检查 MAC 地址表以确定目标设备的位置,并通过适当的端口转发数据,而不是向所有人广播。这减少了整体网络流量并提高了效率。
想象一下,老板在电话簿中找到员工的分机号;员工可以直接通过电话被直接联系,而不是在迷宫般的隔间中大声呼喊他的名字。
路由器这种设备将不同的网络连接在一起,就像交汇点连接不同的高速公路一样。路由器使用路由表智能地将数据包发送到它们的目的地。路由器还可以在需要时相互通信,以更新这些路由表。
将其想象成一个负责将国际电话路由到适当的国家网络的电话公司运营商。大多数销售给消费者的路由器将路由器和交换机结合成一个设备,以连接本地网络并将流量路由到互联网。这些组合设备也被称为 NAT 路由器。
NAT(网络地址转换)是将本地私有 IP 地址转换为单个公共 IP 地址的过程。大多数家庭网络路由器执行 NAT,以便多个用户可以访问互联网,而无需支付另一个 IP 地址的费用。这个过程的一个可能缺点是,从互联网到 NAT 设备后面的计算机的个体可访问性不足;例如,每台计算机不能运行自己的公开可访问的 Web 服务器。NAT 设备后面的设备可以发起到互联网上其他主机的连接,但不能接受来自 NAT 设备外部的未经请求的请求。NAT 可以被视为一个单向阀门。作为副作用,NAT 也是一个很好的安全措施,因为它可以阻止攻击和不受欢迎的流量。大多数家庭 NAT 路由器都具备端口转发功能,允许从互联网将流量转发到私有网络中的特定计算机。
Wi-Fi(无线保真度),或 801.11x,是一组 IEEE(电气和电子工程师协会)标准,用于定义无线局域网。Wi-Fi 使用 2.4 GHz 频段的短距离无线电收发器来传输数据。数据传输和碰撞的规则与半双工有线以太网(CSMA/CD)相同。
Wi-Fi 配置通常包括一个中心接入点或无线集线器,它通过类似于以太网集线器的广播与客户端通信。标准接入点会广播其标识或 SSID(服务集标识符)“信标”,以通知潜在客户端其存在。接入点可以配置为验证所有连接,或根据客户端的 MAC 地址强制执行访问规则。
802.11b 标准是 802.11 标准中最广泛部署的。它指定最大吞吐量为 11 Mbps。根据是否使用 TCP 或 UDP,802.11b 客户端可以期望的实际吞吐量为 700 到 900 KB/s。较新的 802.11g 标准指定最大吞吐量为 54 Mbps。实际吞吐量通常在 3,000 KB/s 范围内。
使用 Wi-Fi 传输数据的安全性由两种机制之一提供。第一种称为 WEP(有线等效隐私);第二种是 WPA(Wi-Fi 保护接入)。这两种机制加密客户端和接入点之间的数据。WEP 机制中的安全漏洞被发现,这促使 WPA 的开发。使用强大的共享密钥,WPA 为连接的客户端提供相对较好的安全性,但不是一些旧设备所支持的。
更新
访问 www.nostarch.com/freebsdserver.htm 获取更新、勘误和其他信息。
版权信息
在《使用 FreeBSD 7 构建服务器》中使用的字体是 New Baskerville、Futura 和 Dogma。
本书由密歇根州安阿伯的 Malloy Incorporated 印刷和装订。纸张是 Glatfelter Thor 60# Antique,由 15% 的回收内容制成。本书采用 RepKover 胶装,使其打开时可以平铺。
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
.banner
.cshrc
.lynxrc
.message
.profile
/cups/access_log
/cups/error_log
/cups/page_log
10BASE-T
386/BSD
4.4BSD-Lite
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Abela, John
Active Directory
地址解析协议 (ARP)
添加用户
Adobe Systems
别名
Apache HTTP 服务器
历史
安装
要求
测试
apache22
ARP (地址解析协议)
AT&T
Atkinson, James
auth.log, OpenSSH 服务器
authdaemonrc 文件
Axmark, David
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
备份
贝叶斯过滤 第 2 版
伯格,斯蒂芬·R·范登
伯克利软件设计公司 (BSDI)
伯克利软件发行版 (BSD)
博客 第 2 版
Boren, Ryan
BSD (伯克利软件发行版)
BSD 许可证
BSDI (伯克利软件设计公司)
公告板系统
Burry, Paul
Buytaert, Dries
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
电缆调制解调器
卡内基梅隆大学
cd
chmod
chown
丘,霍华德
CIFS (通用互联网文件系统)
CMS (内容管理系统) 第 2 版
Codding, Nathan
通用互联网文件系统 (CIFS)
config.inc.php
config.php
phpBB
phpLDAPadmin
配置脚本
内容管理系统(CMS) 2nd
Courier-authlib
安装
要求
测试
Courier-IMAP 服务器
历史
安装
要求
测试
cp
Crispin, Mark
Crocker, Lee Daniel
CUPS(通用 Unix 打印系统)
和 Gutenprint
和 HPLIP 驱动程序
配置打印客户端
历史
安装
要求
测试
cupsd.conf
Cyrus SASL
历史
安装
要求
测试
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
DARPA(国防高级研究计划局) 2nd
DCC(分布式校验和清除所)
ddclient
支持的动态 DNS 提供商
安装
要求
测试
ddclient.cache
ddclient.conf
de Raadt, Theo
debug.log
OpenLDAP
Pure-FTPd 服务器
DEC(数字设备公司) 2nd
国防高级研究计划局(DARPA) 2nd
Denis, Frank
df
动态主机配置协议 (DHCP)
dhcpd.conf
dhcpd.leases
dig (dig)
数字设备公司 (DEC) 2nd
分布式校验和清除所 (DCC)
域名系统 (DNS)
国防部 (DOD)
漂移文件
Drupal
历史
安装
要求
DSL 调制解调器
磁盘使用情况 (du)
转储 (dump) 2nd
动态 DNS 2nd 3rd
动态主机配置协议 (DHCP)
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Easy Software Products
ee (ee)
ee (Easy Editor)
埃雷斯曼,卢克
埃雷斯曼,内森
电子邮件分类器
恩格斯查尔,拉尔夫
以太网
适配器
集线器
交换机
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
法布里,罗伯特
费根鲍姆,巴里
文件 (file)
文件传输协议 (FTP) 2nd
查找 (find)
正向查找区域文件示例
FreeBSD
添加用户
以及静态 IP
更改密码
默认搜索路径设置
历史
安装
移除用户
要求
resolv.conf
更新
FTP (文件传输协议) 第 2 版
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
通用公共许可证 (GNU GPL)
通用垃圾邮件测试 (GTUBE) 第 2 版
乔治,迪恩
Gimp-Print
GNU 通用公共许可证 (GPL)
grep
格罗布,迈克尔
GTUBE (通用垃圾邮件测试) 第 2 版
古恩特,菲利普
古兰布森,阿恩特
Gutenprint
古特曼斯,安迪
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
哈利,查克
添加硬盘
赫尔辛基科技大学
惠普
主目录中的点文件
hosts 文件 第 2 版
豪斯,蒂姆
HP Linux 图像打印 (HPLIP) 驱动
HTTP (超文本传输协议) 第 2 版
httpd-access.log
httpd-error.log
httpd-ssl.conf
httpd-ssl_request.log
httpd.conf
通过加密的超文本传输协议 (HTTPS) 第 2 版
霍华德,乔丹
蒂姆·J·哈德森
超文本传输协议 (HTTP) 第 2 版
通过加密的超文本传输协议 (HTTPS) 第 2 版
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
IBM 安全邮件发送器
互联网控制消息协议 (ICMP)
ifconfig
IIS (互联网信息服务)
互联网消息访问协议 (IMAP) 第 2 版
imapd 文件
imapd-ssl 文件
加密的互联网消息访问协议 (IMAPS) 第 2 版
互联网控制消息协议 (ICMP)
互联网信息服务 (IIS)
互联网消息访问协议 (IMAP) 第 2 版
加密的互联网消息访问协议 (IMAPS) 第 2 版
互联网系统协会 (ISC)
互联网协议 (IP)
IP 地址
ipp.txt
ISC (互联网系统协会)
ISC BIND DNS 服务器
历史
安装
要求
示例区域文件
测试
ISC DHCP 服务器
历史
安装
要求
测试
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Jeftovic, Mark
Jolitz, Bill and Lynne
Joy, Bill
垃圾文件夹
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
内核
Kille, Steve
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
L2TP/IPSec (Layer 2 Tunneling Protocol with Internet Protocol Security)
Laurie, Ben
LDAP (轻量级目录访问协议) 2nd
管理
LDIF (LDAP 数据交换格式)
Lerdorf, Rasmus
less
行打印守护进程 (LPD)
Linux 2nd 3rd
Little, Mike
local.cf
LocalSettings.php
LPD (行打印守护进程)
ls
Lynx
历史
安装
要求
lynx
lynx.cfg
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
MAC (媒体访问控制) 地址
Macintosh OS X 第 2 版
邮件投递代理 (MDA) 第 2 版
Maildir 第 2 版
maildirmake
邮件日志文件
Courier-authlib
Courier-IMAP
Postfix SMTP 服务器
Procmail
SpamAssassin
SquirrelMail
main.cf
Makefiles
曼斯克,马格纳斯
手册页
马斯拉蒂,皮埃尔安杰洛
梅森,贾斯汀
master.cf
麦克科尔,罗布
MD5 (消息摘要算法 5)
MDA (邮件投递代理) 第 2 版
媒体访问控制 (MAC) 地址
MediaWiki
历史
安装
需求
消息摘要算法 5 (MD5)
消息文件
ddclient
ISC BIND DNS 服务器
ISC DHCP 服务器
NTP 服务器
OpenVPN 服务器
Pure-FTPd 服务器
Microsoft 第 2 版 第 3 版 第 4 版 第 5 版 第 6 版 第 7 版
Microsoft Access
米尔斯,大卫
mkdir
蒙图利,路易
mount
Mozilla Thunderbird
Mullenweg, Matthew
Müller, Olivier
mv
my.cnf
Myers, John
MySQL 管理
MySQL 服务器
基本命令
历史
安装
需求
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
named.conf
网络地址转换 (NAT)
NCSA (国家超级计算应用中心)
Netscape
netstat
网络地址转换 (NAT)
NTP (网络时间协议) 服务器
历史
安装
需求
测试
ntp.conf
ntp.log
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
开源,GNU GPL
OpenBSD
OpenLDAP 服务器
历史
安装
需求
测试
OpenSSH 服务器
历史
安装
需求
测试
OpenSSL
创建自签名 SSL 证书
生成 SSL 证书请求
历史
安装
需求
openssl.cnf
OpenVPN 服务器
配置客户端
历史
安装
需求
测试
openvpn-status.log
openvpn.conf
Oracle
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
pdbedit
PDP-11
Perl
php
PHP (PHP: Hypertext Preprocessor)
历史
安装
需求
测试
php.ini
phpBB
历史
安装
需求
phpLDAPadmin
安装
需求
phpMyAdmin
历史
安装
需求
ping 2nd
pkg_delete
pkg_info
波尔曼,弗兰克
点对点隧道协议 (PPTP)
POP3 (Post Office Protocol version 3)
pop3d 文件
pop3d-ssl 文件
POP3S (Post Office Protocol version 3 secured with encryption) 2nd
端口转发
portaudit
portmaster
端口集合
使用 portaudit 检查
安装
使用 cvsup 更新
使用 portmaster 更新
第三版邮局协议 (POP3)
加密的第三版邮局协议 (POP3S) 2 次
postfix
Postfix SMTP 服务器
历史
安装
消息大小限制
需求
使用 SSL 的 SASL
测试
PostgreSQL
postqueue
点对点隧道协议 (PPTP)
proc.log
Procmail
安装
需求
测试
procmailrc 文件
Pure-FTPd 服务器
添加用户
历史
安装
需求
测试
pure-ftpd.conf
pure-ftpwho
pure-pw
pureftpd.passwd
pwd
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Raadt, Theo de
Ratschiller, Tobias
rc.conf 2 次
rc.d
简单聚合内容 (RSS)
关系数据库
resolv.conf 2 次
恢复
恢复 2 次
恢复
反向查找区域文件示例
Rezac, Charles
Ritchie, Dennis
rm
rmuser
rndc
rndc.key
路由器 2 次
RSS (Really Simple Syndication)
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
sa-learn
sa-update
Samba
配置共享
历史
安装
要求
共享权限
SWAT
测试
samba 文件
Samba Web 管理工具 (SWAT)
SASL (简单身份验证和安全层) 2 次
scp
安全套接字层 (SSL) 2 次
Sendmail
森夫特,安德鲁
服务器消息块 (SMB)
服务器端脚本
settings.php, Drupal
sftp
shell
简单身份验证和安全层 (SASL) 2 次
slapd.conf
SMB (服务器消息块)
smb.conf
smbpasswd 文件
smbpasswd 实用工具
史密斯,大卫
SMTP (简单邮件传输协议) 2 次
检查端口 25 的阻塞
smtpd.conf
sockstat
垃圾邮件
SpamAssassin
历史
安装
要求
测试
SQL Server 2nd
SquirrelMail
历史记录
安装
要求
测试
ssh
ssh 配置文件
sshd 配置文件
SSL (安全套接字层) 2nd
su
Sun Microsystems
Suraski, Zeev
SWAT (Samba Web Administration Tool)
Sweet, Michael
系统要求
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
tar
TCP (传输控制协议)
端口
TCP/IP
应用层
主机到主机层
互联网层
网络访问层
Telnet
Thompson, Ken
Mozilla Thunderbird
traceroute 2nd
Tridgell, Andrew
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
UDP (用户数据报协议)
端口
umount
安特卫普大学
加州大学伯克利分校
科隆大学
特拉华大学
堪萨斯大学
密歇根大学
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
van den Berg, Stephen R.
Varshavchik, Sam
Venema, Wietse
vi 编辑器
Vibber, Brion
Vixie, Paul
VPN(虚拟专用网络)
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
网络邮件
Wi-Fi(无线保真)
Widenius, Michael
wiki
维基百科
Windows
Windows 服务器
Windows XP
Samba 延迟
Winer, David
无线保真(Wi-Fi)
WordPress
历史
安装
需求
wp-config.php
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
xferlog 文件
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Yeong, Wengyik
Ylönen, Tatu
Yonan, James
Young, Eric A.
索引
[符号] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [R] [S] [T] [U] [V] [W] [X] [Y] [Z]
Zeilenga, Kurt
Zend 引擎



浙公网安备 33010602011771号