FreeBSD是类似于UNIX的一种功能强大的操作系统,其正在为全球最大的一些Internet站点如Yahoo等提供“动力”。本书详细讲解了如何安装最新版本的FreeBSD,如何配置和自定义操作系统,如何自定义和使用X-Windows系统,如何在FreeBSD上设置网络服务(包括Web、电子邮件和FTP服务器),如何安装一个基于FreeBSD的文件服务器以便同Microsoft Windows客户机共享文件;本书还将讲解FreeBSD网络安全的有关细节。\r\n\r\n
\r\n
\r\n第一部分 FreeBSD入门\r\n第1章 什么是FreeBSD 1\r\n1.1 为什么要选用FreeBSD 1\r\n1.2 FreeBSD能做什么 2\r\n1.3 FreeBSD和UNIX简史 3\r\n1.3.1 BSD的诞生 3\r\n1.3.2 Intel x86平台上的BSD 4\r\n1.3.3 FreeBSD的诞生 4\r\n1.4 UNIX的设计思路 4\r\n1.5 FreeBSD同其他操作系统的对比 6\r\n1.5.1 Windows 2000 6\r\n1.5.2 Linux 7\r\n1.6 FreeBSD的吉祥物 8\r\n第2章 安装FreeBSD 9\r\n2.1 检查硬件 9\r\n2.2 制作启动盘 10\r\n2.2.1 从DOS或Windows系统制作启动盘 10\r\n2.2.2 从另一个FreeBSD或UNIX系统制作\r\n 启动盘 11\r\n2.3 启动以安装程序 11\r\n2.4 FreeBSD sysinstall程序简介 13\r\n2.5 在sysinstall程序中漫游 13\r\n2.6 创建分区和分配装入点 14\r\n2.6.1 选择硬盘 14\r\n2.6.2 为硬盘分区 15\r\n2.6.3 磁盘标签编辑器 17\r\n2.6.4 创建分区和磁盘标签 18\r\n2.6.5 优化性能 20\r\n2.6.6 根分区 20\r\n2.6.7 交换分区 21\r\n2.6.8 创建其余的分区 23\r\n2.6.9 SoftUpdates注意事项 23\r\n2.7 选择套装发行版本 24\r\n2.8 选择安装介质 25\r\n2.9 后期安装 25\r\n2.9.1 配置网络 26\r\n2.9.2 自定义控制台 28\r\n2.9.3 设置时区 28\r\n2.9.4 Linux兼容性 28\r\n2.9.5 配置鼠标 29\r\n2.9.6 配置X-Server 29\r\n2.9.7 选择默认桌面 37\r\n2.9.8 安装附加软件包 37\r\n2.9.9 添加一名用户 39\r\n2.9.10 设置根密码 41\r\n2.10 退出安装并重启系统 41\r\n2.11 首次启动FreeBSD 41\r\n2.12 关闭FreeBSD 42\r\n第3章 高级安装问题 43\r\n3.1 备份现有文件系统 43\r\n3.2 使用FIPS进行非破坏性硬盘分区 44\r\n3.2.1 运行Scandisk和Defragmenter 44\r\n3.2.2 获取FIPS并创建一张启动盘 44\r\n3.3 操作FIPS 45\r\n3.4 双重引导系统的潜在问题以及限制 46\r\n3.4.1 双重引导DOS. Windows 95. \r\n Windows 98或Windows Me 47\r\n3.4.2 双重引导Linux 47\r\n3.5 FreeBSD 引导管理程序 47\r\n3.6 从LILO启动FreeBSD 48\r\n3.7 其他安装方法 48\r\n3.7.1 通过FTP安装FreeBSD 48\r\n3.7.2 执行NFS安装 51\r\n第二部分 使用FreeBSD\r\n第4章 同FreeBSD的第一次会话 53\r\n4.1 FreeBSD启动过程 53\r\n4.2 BIOS 53\r\n4.3 引导 54\r\n4.3.1 boot0 54\r\n4.3.2 boot1 54\r\n4.3.3 boot2 54\r\n4.3.4 boot3 54\r\n4.4 内核 55\r\n4.5 init 56\r\n4.5.1 文件系统一致性检查 56\r\n4.5.2 系统配置脚本 57\r\n4.5.3 getty和登录 57\r\n4.6 登录进入FreeBSD 57\r\n4.7 启动X-Windows系统 59\r\n4.8 Gnome桌面环境简介 59\r\n4.9 停止X-Windows系统 60\r\n4.10 从FreeBSD注销 61\r\n4.11 关闭FreeBSD系统 61\r\n4.11.1 使用shutdown命令 61\r\n4.11.2 使用halt和reboot时的注意事项 63\r\n第5章 操作Gnome桌面环境 64\r\n5.1 窗口管理器 64\r\n5.2 Gnome桌面环境 65\r\n5.3 在桌面漫游 66\r\n5.4 Gnome面板 68\r\n5.5 操作窗口 69\r\n5.5.1 虚拟工作空间 70\r\n5.5.2 窗口菜单的Toggle选项 71\r\n5.5.3 窗口菜单的In Group选项 72\r\n5.5.4 窗口发送到 72\r\n5.5.5 深度 72\r\n5.5.6 框架类型 72\r\n5.5.7 框架样式 72\r\n5.5.8 历史 72\r\n5.6 探索Gnome和X-Windows小程序 72\r\n5.6.1 gedit 73\r\n5.6.2 Eye of Gnome 74\r\n5.6.3 CD 播放器 74\r\n5.6.4 Gnome Terminal 75\r\n5.6.5 xcalc 75\r\n5.6.6 xmag 75\r\n5.6.7 xman 75\r\n5.6.8 xclock 75\r\n5.6.9 xfontsel 75\r\n5.7 用Gnome文件管理器管理文件和目录 76\r\n5.8 在Gnome中获取帮助 76\r\n第6章 自定义Gnome桌面环境 78\r\n6.1 在桌面添加新图标 78\r\n6.2 自定义Gnome面板 80\r\n6.2.1 操作面板图标 80\r\n6.2.2 自定义“开始”菜单 81\r\n6.2.3 操作面板小程序 82\r\n6.2.4 在面板上添加启动器和抽屉 82\r\n6.3 添加和删除面板 84\r\n6.4 自定义Gnome文件管理器 85\r\n6.4.1 File Display标签 85\r\n6.4.2 Caching标签 86\r\n6.4.3 Desktop标签 87\r\n6.4.4 Custom View标签 87\r\n6.5 操作Gnome控制中心 87\r\n6.5.1 改变背景 88\r\n6.5.2 面板 89\r\n6.5.3 主题选择器 90\r\n6.5.4 窗口管理器 90\r\n6.5.5 文档处理器 90\r\n6.6 自定义Sawfish窗口管理器选项 93\r\n第7章 使用应用程序 95\r\n7.1 处理文字 95\r\n7.1.1 gedit 96\r\n7.1.2 ee 100\r\n7.1.3 vi编辑器 103\r\n7.2 图形和图像 107\r\n7.2.1 GIMP 107\r\n7.2.2 GQview 118\r\n7.3 StarOffice办公套件 120\r\n7.3.1 StarOffice桌面 121\r\n7.3.2 打开一个新文档 121\r\n7.3.3 文档模板 121\r\n7.3.4 StarOffice集成Web浏览器 122\r\n7.3.5 StarOffice电子邮件 124\r\n7.3.6 StarOffice资源管理器 129\r\n7.3.7 StarOffice中的帮助 131\r\n7.4 多媒体 134\r\n7.4.1 检查声音支持 134\r\n7.4.2 创建设备节点 134\r\n7.4.3 混音器 135\r\n7.4.4 用XMMS听MP3 136\r\n7.4.5 用mpg123听MP3 137\r\n7.4.6 基于X窗口的图形化混音器 137\r\n7.5 网络应用 138\r\n7.5.1 配置Netscape 138\r\n7.5.2 Lynx Web浏览器 139\r\n7.5.3 FTP 140\r\n7.5.4 电子邮件程序 142\r\n第8章 使用shell 149\r\n8.1 shell入门 149\r\n8.2 可用的shell类型 149\r\n8.2.1 Bourne shell(sh) 150\r\n8.2.2 C shell(csh) 150\r\n8.2.3 Korn shell(ksh或pdksh) 150\r\n8.2.4 Bourne Again shell(bash) 151\r\n8.2.5 Tcsh shell(tcsh) 151\r\n8.2.6 选择哪一个shell 151\r\n8.3 改变shell 151\r\n8.4 在shell中获取帮助 152\r\n8.4.1 搜索手册页 152\r\n8.4.2 命令总结 153\r\n8.4.3 手册部分 153\r\n8.5 基本shell文件操作 154\r\n8.5.1 FreeBSD如何保存文件 154\r\n8.5.2 至关重要的home目录 155\r\n8.5.3 列出目录内容 155\r\n8.5.4 在文件系统中移动 156\r\n8.5.5 在文件系统中不知身在何处 157\r\n8.5.6 复制文件和目录 157\r\n8.5.7 移动和重命名文件及目录 158\r\n8.5.8 删除文件和目录 158\r\n8.5.9 删除目录 159\r\n8.5.10 touch命令 159\r\n8.5.11 创建链接 159\r\n8.5.12 统一选项 161\r\n8.5.13 元字符和通配符 161\r\n8.5.14 有关文件名的注意事项 162\r\n8.5.15 处理歧义的文件名 163\r\n8.6 和文本相关的命令 164\r\n8.6.1 行. 单词和字符计数 164\r\n8.6.2 查看文本文件more或less 164\r\n8.6.3 搜索模式 165\r\n8.6.4 对文件中的文本排序 165\r\n8.6.5 用tr替换字符串 166\r\n8.6.6 只显示文本文件中特定部分的行 166\r\n8.6.7 用fmt格式化文本 167\r\n8.7 管道和输入/输出重定向 168\r\n8.8 命令完成和历史编辑 169\r\n第三部分 管理FreeBSD\r\n第9章 FreeBSD文件系统 171\r\n9.1 FreeBSD目录结构 171\r\n9.2 监视文件系统的使用 174\r\n9.2.1 df命令 175\r\n9.2.2 du命令 175\r\n9.3 装入和卸载FreeBSD文件系统 176\r\n9.3.1 mount命令 176\r\n9.3.2 umount命令 177\r\n9.4 装入和卸载来自其他操作系统\r\n 的文件系统 178\r\n9.4.1 装入一个Windows/MS-DOS\r\n 文件系统 179\r\n9.4.2 装入一个Linux文件系统 180\r\n9.5 装入和卸载基于CD-ROM和软盘\r\n 的文件系统 181\r\n9.5.1 装入CD和软盘 181\r\n9.5.2 卸载CD和软盘 182\r\n9.5.3 其他可移动介质 182\r\n9.6 理解/etc/fstab文件 182\r\n9.7 使用fsck检查和修复文件系统 184\r\n9.7.1 日志文件系统和软件更新 186\r\n9.7.2 使用fsck命令恢复被损坏的超级块 186\r\n9.8 设置和强制使用用户文件系统配额 188\r\n第10章 用户. 用户组和权限 192\r\n10.1 用户和用户组简介 193\r\n10.2 用户组的重要性 194\r\n10.3 文件所有权 195\r\n10.3.1 使用chown改变文件所有权 196\r\n10.3.2 使用chgrp改变文件组所有权 197\r\n10.4 文件和目录权限 198\r\n10.4.1 文件和目录权限之间的关系 198\r\n10.4.2 用chmod更改文件和目录权限 199\r\n10.5 访问控制列表 201\r\n10.5.1 配置内核以支持ACL 201\r\n10.5.2 配置文件系统以使用ACL 201\r\n10.5.3 获取与当前ACL设置有关的信息 202\r\n10.5.4 设置最大权限掩码 202\r\n10.5.5 在ACL中添加用户或用户组 203\r\n10.5.6 用ACL拒绝访问 205\r\n10.5.7 删除ACL条目 205\r\n10.5.8 删除所有ACL条目 205\r\n10.6 添加和删除用户 205\r\n10.6.1 /etc/passwd和/etc/master.passwd\r\n 文件 208\r\n10.6.2 /etc/group文件 209\r\n10.6.3 管理用户组 209\r\n第11章 系统配置和启动脚本 211\r\n11.1 理解FreeBSD启动过程 211\r\n11.2 资源配置脚本 214\r\n11.2.1 /etc/defaults/rc.conf文件 215\r\n11.2.2 /etc/rc.conf文件 216\r\n11.2.3 /usr/local/etc和/usr/local/X11R6/etc\r\n 目录 218\r\n11.2.4 创建脚本以便在启动时运行程序 219\r\n11.3 inetd守护进程和inetd.conf配置文件 219\r\n11.4 系统记录器(syslogd)和syslog.conf\r\n 文件 221\r\n11.5 有关/etc/rc.local的注意事项 222\r\n第12章 自定义shell 224\r\n12.1 什么是shell 224\r\n12.2 将shell添加到系统并使其可用 226\r\n12.2.1 从ports或packages安装shell 226\r\n12.2.2 /etc/shells文件 227\r\n12.3 使用其他shell 228\r\n12.3.1 登录时更改shell 229\r\n12.3.2 更改默认shell 229\r\n12.3.3 非shell程序作为shell使用 230\r\n12.4 shell初始化文件 232\r\n12.4.1 tcsh/csh文件:.cshrc. .login\r\n 和.logout 232\r\n12.4.2 bash文件:.profile. .shrc和\r\n .bash_logout 234\r\n12.5 自定义shell环境 235\r\n12.5.1 自定义tcsh 235\r\n12.5.2 自定义bash 237\r\n12.6 shell和环境变量 237\r\n12.6.1 环境变量 238\r\n12.6.2 shell变量 239\r\n第13章 shell编程 240\r\n13.1 一个简单的shell程序 241\r\n13.2 变量 244\r\n13.2.1 变量赋值 244\r\n13.2.2 变量名 245\r\n13.3 与用户的交互 245\r\n13.3.1 控制命令行参数 246\r\n13.3.2 命令替换 247\r\n13.4 shell程序中的数学运算 248\r\n13.5 循环 250\r\n13.5.1 while循环 250\r\n13.5.2 until循环 251\r\n13.5.3 while循环和until循环中的逻辑\r\n “与”/“或”语句 251\r\n13.5.4 for循环 252\r\n13.5.5 shift 253\r\n13.5.6 true和false语句 254\r\n13.5.7 中断循环 254\r\n13.6 条件语句 256\r\n13.6.1 if语句 256\r\n13.6.2 case语句 259\r\n13.6.3 逻辑“与”/“或”条件 261\r\n13.7 退出状态码 261\r\n13.7.1 设置退出状态码 263\r\n13.7.2 退出陷阱 264\r\n13.8 函数 265\r\n13.9 文件描述符 265\r\n13.10 调试shell脚本 267\r\n13.11 Korn shell脚本的高级特性 267\r\n13.11.1 获取和安装Korn shell 268\r\n13.11.2 内建数学运算函数 268\r\n13.11.3 数组 269\r\n13.11.4 命令替换 272\r\n13.11.5 使用getopts 272\r\n第14章 性能监视. 过程控制和作业\r\n 自动化 273\r\n14.1 用top进行性能监视 273\r\n14.2 对top输出信息的解释 274\r\n14.3 用ps进行进程监视 276\r\n14.4 对ps输出信息的解释 277\r\n14.5 中断表现不正常的进程 277\r\n14.5.1 kill命令 278\r\n14.5.2 kill命令的选项 278\r\n14.6 改变进程的优先级 279\r\n14.7 作业自动化简介 280\r\n14.8 cron 守护进程 280\r\n14.8.1 对一个crontab文件的剖析 280\r\n14.8.2 创建和编辑crontab文件 282\r\n14.9 用at命令创建运行一次的作业 282\r\n14.10 控制对cron和at命令的访问 283\r\n第15章 安装附加软件 284\r\n15.1 packages简介 285\r\n15.1.1 共享库和依赖关系 285\r\n15.1.2 获取与已安装的packages有关\r\n 的信息 286\r\n15.2 安装packages 288\r\n15.2.1 从sysinstall安装 289\r\n15.2.2 使用pkg_add 290\r\n15.3 删除packages 292\r\n15.4 更新packages 292\r\n15.5 ports简介 292\r\n15.6 FreeBSD的ports树 293\r\n15.7 安装ports 296\r\n15.8 删除已安装的ports 297\r\n15.9 升级ports 297\r\n15.10 确定你的ports树是最新的 297\r\n15.10.1 有关被禁止ports的注意事项 299\r\n15.10.2 收回由ports构建进程使用的\r\n 硬盘空间 300\r\n15.10.3 一个ports不能构建时的对策 300\r\n15.11 Fresh ports网站 301\r\n第16章 打印 303\r\n16.1 lpd和后台打印 304\r\n16.2 内核. 设备和通信模式的配置 304\r\n16.3 创建后台打印目录 305\r\n16.4 过滤器 306\r\n16.4.1 文本过滤器 306\r\n16.4.2 在非PostScript打印机上打印\r\n PostScript文件 308\r\n16.4.3 lpf打印过滤器 310\r\n16.5 转换过滤器 310\r\n16.6 配置/etc/printcap 311\r\n16.7 启用lpd 312\r\n16.8 基本的命令行打印 312\r\n16.9 从X-Windows中打印 314\r\n16.10 在StarOffice中打印 314\r\n16.11 检查打印作业的状态 315\r\n16.12 从队列中删除作业 316\r\n16.13 控制打印机 317\r\n16.13.1 交互模式下的lpc 317\r\n16.13.2 队列状态 318\r\n16.13.3 禁止打印和停止守护进程 318\r\n16.13.4 在非交互模式中使用lpc 322\r\n16.13.5 控制谁能使用lpc 322\r\n16.14 基本网络打印 323\r\n16.15 疑难解答 323\r\n16.15.1 打印机不能接收数据, 作业\r\n 停在队列中 323\r\n16.15.2 打印机数据灯闪烁, 但不能打印 323\r\n16.15.3 打印GIMP或Web页中的图形文件, \r\n 但导致大量垃圾页打印出来 323\r\n16.15.4 打印机太慢 323\r\n16.15.5 打印出阶梯状效果 323\r\n16.15.6 所有文字都打印在一行上, 造成混\r\n 乱, 并重叠在现有的文字上打印 324\r\n第17章 内核配置 325\r\n17.1 内核所扮演的角色 325\r\n17.2 为何要配置自定义内核 326\r\n17.3 内核配置文件 328\r\n17.3.1 GENERIC配置文件 329\r\n17.3.2 设备提示 330\r\n17.3.3 LINT文件 331\r\n17.4 创建一个自定义内核配置文件 331\r\n17.5 编译和安装自定义内核 332\r\n17.6 将设备节点添加到/dev目录\r\n (如有必要) 333\r\n17.7 出现问题后进行恢复 333\r\n第18章 更新FreeBSD 335\r\n18.1 跟踪FreeBSD源码 335\r\n18.1.1 对STABLE和CURRENT源码\r\n 分支的解释 336\r\n18.1.2 选择升级目标 336\r\n18.2 何谓make world 337\r\n18.3 make world之前要考虑的问题 338\r\n18.4 make world之前的任务 339\r\n18.4.1 将源码树同STABLE或CURRENT\r\n 树或者一个RELEASE同步 340\r\n18.4.2 UPDATING文本文件 342\r\n18.4.3 合并/etc/group和/etc/passwd 342\r\n18.4.4 合并/etc/make.conf 343\r\n18.5 根据源码重新构建系统 343\r\n18.5.1 清除/usr/obj 344\r\n18.5.2 启动一个输出日志 344\r\n18.5.3 make buildworld 345\r\n18.5.4 升级内核 346\r\n18.5.5 make installworld 347\r\n18.6 用mergemaster检查改动过的配置文件 348\r\n18.7 升级后重启 350\r\n第19章 理解硬盘和文件系统 351\r\n19.1 IDE/ATA存取模式 351\r\n19.1.1 PIO模式 352\r\n19.1.2 DMA模式 352\r\n19.1.3 Ultra DMA(UDMA)模式 352\r\n19.2 SCSI磁盘 353\r\n19.3 理解硬盘参数 354\r\n19.3.1 LBA和528MB的限制 355\r\n19.3.2 Extended INT13模式和8.4GB\r\n 的限制 356\r\n19.3.3 实际影响 357\r\n19.4 硬盘分区 357\r\n19.4.1 BIOS分区(slice) 357\r\n19.4.2 BSD分区 357\r\n19.4.3 sysinstall中的slice 编辑器(fdisk) 359\r\n19.5 创建磁盘标签 360\r\n19.5.1 创建一个完整的FreeBSD分区布局 360\r\n19.5.2 添加新的磁盘 361\r\n19.5.3 写入变化并格式化磁盘 362\r\n19.6 使文件系统就绪以便使用 362\r\n第20章 FreeBSD快速指南 363\r\n20.1 迁移到FreeBSD 363\r\n20.1.1 从Windows NT/2000迁移 364\r\n20.1.2 从Linux迁移 367\r\n20.2 “应该”和“不应该”(常规准则) 370\r\n20.3 性能调节 372\r\n20.3.1 内核设置 372\r\n20.3.2 Soft Updates和异步写入 373\r\n20.3.3 磁盘参数的问题 374\r\n20.3.4 一些sysctl调节措施 374\r\n20.3.5 有帮助的手册页 375\r\n20.4 未雨绸缪:备份和制作镜像 375\r\n20.4.1 创建“种子”文件 375\r\n20.4.2 备份 376\r\n20.4.3 恢复 377\r\n20.4.4 镜像 378\r\n第21章 Perl编程入门 381\r\n21.1 什么是Perl 381\r\n21.2 FreeBSD中的Perl 381\r\n21.2.1 Perl的强项 382\r\n21.2.2 Perl的弱项 382\r\n21.3 Perl脚本编程基础 383\r\n21.3.1 变量和运算符 384\r\n21.3.2 标量. 数组和关联数组 385\r\n21.3.3 流程控制 387\r\n21.3.4 命令行参数 389\r\n21.4 一个简单的Perl脚本 389\r\n21.5 高级Perl技术 390\r\n21.5.1 文字处理 390\r\n21.5.2 文件处理 393\r\n21.5.3 函数 395\r\n21.5.4 Perl模块 396\r\n21.6 有用的Perl资源 398\r\n21.6.1 Web站点 398\r\n21.6.2 参考书籍 399\r\n21.6.3 CPAN网站 399\r\n第四部分 FreeBSD连网\r\n第22章 连网入门 401\r\n22.1 连网概述 402\r\n22.2 网络拓扑 402\r\n22.3 网络组件 405\r\n22.3.1 电缆 405\r\n22.3.2 集线器 408\r\n22.3.3 交换机 409\r\n22.3.4 网桥 410\r\n22.3.5 路由器 410\r\n22.4 网络协议 411\r\n22.4.1 TCP:传输控制协议 411\r\n22.4.2 UDP:用户数据报协议 411\r\n22.4.3 ICMP:网际控制消息协议 412\r\n22.5 TCP/IP 412\r\n22.6 IP地址 413\r\n22.6.1 ARP和MAC地址 415\r\n22.6.2 arp命令 417\r\n22.7 子网和网络掩码 417\r\n22.8 路由 419\r\n22.9 主机名和域名 421\r\n22.10 DHCP 422\r\n第23章 配置基本连网服务 423\r\n23.1 配置网卡 423\r\n23.2 用sysinstall配置网络设置 424\r\n23.3 不用sysinstall配置网络设置 427\r\n23.3.1 用ifconfig应用网络设置 427\r\n23.3.2 用route设置网关路由器 429\r\n23.3.3 使用hostname 430\r\n23.3.4 /etc/rc.conf中的网络设置 430\r\n23.3.5 使用/etc/netstart 431\r\n23.4 创建IP别名 432\r\n23.5 使用/etc/hosts文件将名称映射成\r\n IP地址 433\r\n23.6 用ping测试网络连接 433\r\n23.7 用/etc/resolv.conf文件配置DNS 434\r\n23.8 其他网络配置文件一瞥 435\r\n第24章 用PPP方式连接Internet 437\r\n24.1 选择一家ISP 437\r\n24.2 收集所需信息 437\r\n24.3 用户PPP与内核PPP的对比 438\r\n24.4 配置内核PPP 438\r\n24.4.1 /etc/resolv.conf 438\r\n24.4.2 /etc/ppp/options 438\r\n24.4.3 chat脚本 439\r\n24.4.4 启动pppd 守护进程 440\r\n24.4.5 PAP和CHAP身份验证 441\r\n24.4.6 pap-secrets和chap-secrets 441\r\n24.4.7 按需拨号和持久性连接 442\r\n24.4.8 连接和断开时运行命令 443\r\n24.5 用户PPP 443\r\n24.5.1 /etc/ppp/ppp.conf文件 443\r\n24.5.2 启动用户PPP 445\r\n24.5.3 允许普通用户启动用户PPP 445\r\n24.5.4 按需拨号和持久性连接 445\r\n24.5.5 连接和断开时运行命令 446\r\n24.6 PPP疑难解答 447\r\n24.7 最后的思考 447\r\n第25章 配置电子邮件 448\r\n25.1 SMTP简介 448\r\n25.2 邮件传输代理和邮件用户代理 450\r\n25.2.1 常用MTA 451\r\n25.2.2 常用MUA 451\r\n25.3 用sendmail配置基本电子邮件服务 452\r\n25.3.1 sendmail文件布局 452\r\n25.3.2 配置文件 453\r\n25.3.3 DNS解析问题 456\r\n25.3.4 控制sendmail 457\r\n25.4 中转的注意事项 458\r\n25.5 POP3简介 460\r\n25.6 用qpopper配置一个POP3服务器 461\r\n25.6.1 qpopper基本安装和配置 462\r\n25.6.2 启用单机模式 462\r\n25.6.3 启用服务器模式 463\r\n25.6.4 启用SSL加密 464\r\n25.6.5 寻求更多的信息 465\r\n25.7 用IMAP-UW配置一个IMAP服务器 465\r\n25.8 单机工作站的电子邮件 467\r\n25.8.1 用Fetchmail从POP3和IMAP\r\n 服务器收取电子邮件 467\r\n25.8.2 单机工作站的sendmail配置 470\r\n25.9 sendmail的一些替用品 471\r\n25.9.1 Postfix 471\r\n25.9.2 Qmail 471\r\n25.9.3 Exim 471\r\n25.9.4 Smail 472\r\n第26章 配置Web服务器 473\r\n26.1 HTTP协议简介 473\r\n26.2 获取和安装Apache 477\r\n26.3 配置Apache 478\r\n26.3.1 使用httpd.conf 479\r\n26.3.2 使用.htaccess文件和覆盖问题 480\r\n26.4 启动和停止HTTP守护进程 481\r\n26.5 Apache的基本访问控制 483\r\n26.5.1 依据地址的访问控制 483\r\n26.5.2 依据密码的访问控制 484\r\n26.5.3 依据地址和密码的访问控制 486\r\n26.6 虚拟主机 487\r\n26.7 Apache模块简介 489\r\n26.7.1 内建模块 489\r\n26.7.2 动态加载的模块 489\r\n26.7.3 第三方模块 490\r\n26.8 服务器端包含 491\r\n26.9 CGI简介 493\r\n26.9.1 在Apache中启用CGI 493\r\n26.9.2 编写CGI程序 494\r\n第27章 配置FTP服务器 498\r\n27.1 FTP协议简介 498\r\n27.2 FTP目录结构概述 501\r\n27.3 配置FTP服务器 501\r\n27.4 控制FTP访问 503\r\n27.4.1 /etc/ftpusers文件 503\r\n27.4.2 /etc/shells文件 504\r\n27.4.3 /var/run/nologin文件 504\r\n27.5 允许匿名FTP访问 505\r\n27.6 虚拟主机 505\r\n27.7 使用其他FTP服务器 506\r\n27.7.1 WU-FTPD 506\r\n27.7.2 ProFTPD 507\r\n第28章 配置Internet网关 508\r\n28.1 什么是路由器 508\r\n28.1.1 什么是网关 510\r\n28.1.2 什么是NAT 510\r\n28.2 在FreeBSD中配置NAT网关 510\r\n28.3 启用NAT 512\r\n28.3.1 使用用户PPP 512\r\n28.3.2 使用内核PPP或专用以太网连接 512\r\n28.3.3 配置和启用natd 512\r\n28.3.4 启用和配置防火墙 513\r\n28.4 配置客户机以使用新网关 514\r\n28.4.1 配置Windows 95/98客户机 514\r\n28.4.2 配置Mac OS和Mac OS X客户机 515\r\n28.4.3 FreeBSD 516\r\n28.4.4 配置Linux客户机 516\r\n28.5 配置无线Internet访问 517\r\n28.6 在三个或更多的网络中路由 517\r\n28.7 动态路由 519\r\n第29章 网络安全 521\r\n29.1 安全模型 522\r\n29.2 密码策略 523\r\n29.2.1 用Crack强制使用安全密码 523\r\n29.2.2 密码过期 524\r\n29.2.3 分配初始密码 526\r\n29.2.4 用S/Key实现一次性密码 526\r\n29.2.5 Kerberos 528\r\n29.3 明文服务的问题 529\r\n29.4 终端通信安全(OpenSSH) 531\r\n29.5 电子邮件服务安全(POP3和IMAP) 532\r\n29.6 FTP安全 533\r\n29.7 Apache安全 533\r\n29.7.1 Apache-SSL 534\r\n29.7.2 Apache与mod_ssl 534\r\n29.7.3 运行一个安全的Web服务器 535\r\n29.7.4 编写不当的CGI脚本 535\r\n29.7.5 用CGIwrap使CGI脚本更安全 536\r\n29.8 系统安全配置文件和内\r\n 核安全(securelevel) 536\r\n29.9 使用防火墙 538\r\n29.9.1 启用防火墙 539\r\n29.9.2 配置IPFW 540\r\n29.10 防范入侵和破坏 541\r\n29.10.1 使用PortSentry 542\r\n29.10.2 使用/etc/hosts.allow 544\r\n29.10.3 使用Tripwire 545\r\n29.10.4 认为被“黑”了该怎么办 547\r\n29.11 拒绝服务攻击 549\r\n29.11.1 限制服务器分叉 549\r\n29.11.2 防范跳板攻击 550\r\n29.12 物理安全 551\r\n29.13 其他安全资源 551\r\n29.13.1 man security页 551\r\n29.13.2 邮件列表 551\r\n29.13.3 FreeBSD安全顾问 552\r\n29.13.4 Web资源 552\r\n29.13.5 相关书籍 553\r\n第30章 域名服务器 554\r\n30.1 BIND简介 554\r\n30.1.1 DNS的结构 554\r\n30.1.2 区域 555\r\n30.1.3 BIND文件和程序 556\r\n30.2 启用名称服务器守护进程 556\r\n30.3 BIND配置文件(named.conf) 557\r\n30.3.1 使用转发器 559\r\n30.3.2 主从配置 560\r\n30.3.3 其他区域类型 561\r\n30.3.4 限制DNS访问 561\r\n30.4 创建一个区域文件 563\r\n30.4.1 预编译指令 564\r\n30.4.2 SOA记录 565\r\n30.4.3 NS记录 566\r\n30.4.4 A记录 567\r\n30.4.5 CNAME记录 567\r\n30.4.6 MX记录 567\r\n30.4.7 PTR记录 568\r\n30.4.8 反向DNS区域文件 568\r\n30.4.9 制作一个localhost区域文件 569\r\n30.5 配置缓存名称服务器 569\r\n第31章 网络文件系统(NFS) 571\r\n31.1 NFS简介 571\r\n31.2 配置NFS服务器 573\r\n31.2.1 NFS 守护进程(nfsd) 573\r\n31.2.2 NFS“装入”守护进程(mountd) 574\r\n31.2.3 用/etc/exports文件决定要共享什么 574\r\n31.2.4 启动NFS服务而不用重启 576\r\n31.3 配置NFS客户机 576\r\n31.3.1 “NFS输入/输出”守护\r\n 进程(nfsiod) 576\r\n31.3.2 装入远程文件系统 576\r\n31.3.3 系统引导时自动装入远程文件\r\n 系统 577\r\n31.4 “自动装入”守护进程(amd) 578\r\n第32章 同Windows进行文件和打印共享 580\r\n32.1 Samba简介 580\r\n32.2 对SMB/CIFS的解释 580\r\n32.2.1 浏览 581\r\n32.2.2 安全. 工作组和域 582\r\n32.3 安装和配置Samba 583\r\n32.3.1 smbd和nmbd 守护进程 583\r\n32.3.2 smb.conf和SWAT 584\r\n32.3.3 共享目录 585\r\n32.3.4 共享打印机 586\r\n32.3.5 访问控制 587\r\n32.3.6 Samba日志文件 589\r\n32.3.7 Samba变量 590\r\n32.4 其他Samba组件 590\r\n32.5 未来的Samba开发 591\r\n32.6 smbfs文件系统 591\r\n第33章 DHCP 593\r\n33.1 DHCP是如何工作的 593\r\n33.2 DHCP胜于静态IP地址的优点 594\r\n33.3 DHCP的内核配置 594\r\n33.4 启用DHCP 595\r\n33.4.1 通过sysinstall使用DHCP 595\r\n33.4.2 手工配置DHCP 596\r\n33.5 dhclient程序 596\r\n33.5.1 /sbin/dhclient-script 597\r\n33.5.2 /etc/dhclient.conf 597\r\n33.6 “DHCP服务器”守护进程 598\r\n33.7 dhcpd配置文件 599\r\n第五部分 X-Windows\r\n第34章 高级X-Windows配置 603\r\n34.1 从3.3.6升级到4.x 603\r\n34.2 使用SuperProbe 604\r\n34.3 用xf86config脚本配置X-Windows 605\r\n34.3.1 配置鼠标 606\r\n34.3.2 选择键盘 607\r\n34.3.3 配置显示器 608\r\n34.3.4 配置显示卡 610\r\n34.4 理解XF86Config文件 617\r\n34.4.1 XF86Config语法 617\r\n34.4.2 “module”节 618\r\n34.4.3 “Files”节 618\r\n34.4.4 “ServerFlags”节 618\r\n34.4.5 “InputDevice”节 620\r\n34.4.6 “Monitor”节 623\r\n34.4.7 “Device”节 623\r\n34.4.8 “Screen”节 624\r\n34.4.9 “Display”子节 625\r\n34.4.10 “ServerLayOut”子节 625\r\n34.5 测试X-Windows设置 626\r\n34.6 你的个人.xinitrc文件 627\r\n34.6.1 更改窗口管理器 627\r\n34.6.2 自动启动应用程序 629\r\n34.6.3 设置背景色或背景图 629\r\n34.7 使用字体 631\r\n34.7.1 检查XF86Config文件 631\r\n34.7.2 创建目录和安装字体 631\r\n34.8 使用远程X-Windows客户机 632\r\n34.8.1 使用xhost允许远程应用程序显示 633\r\n34.8.2 启动一个远程应用程序 634\r\n34.8.3 其他客户机访问控制 635\r\n34.9 xdm 635\r\n第六部分 附 录\r\n附录A 命令参考和配置文件参考 637\r\n附录B 硬件兼容性列表 641\r\n附录C 安装疑难解答 663\r\n附录D 寻求更多信息 668 \r\n
\r\n
20年前, 当第一台个人计算机售出时, 有谁能准确预测到自己在世纪之交时使用的是什么机器呢?有人会猜到微软会变成像那时的IBM一样的计算机工业霸主吗?有任何迹象显示开放源码软件最终会兴起, 并开始同微软争抢市场份额吗?有谁想到在2001年, IBM竟会赞助Linux的开发, 间接与微软对抗呢?
即使在今天, 由于技术开发正在快速进行, 因此仍然无法很容易地看清“庐山真面目”. 要想预测哪些产品和哪些公司将在未来的20年间与我们同在, 以及哪些会由于失误而被淘汰, 其实是徒劳无益的. 另外, 对于任何形式的调查机制来讲, 在其调查Internet上实际使用的东西时, 由于其与生俱来的局限性, 因此会使这样的预测显得更加困难. 不过, 根据最近的趋势来看, 一个比较明显的事实是, 采用商业UNIX操作系统的Internet服务器正在逐渐变少, 相应增加的是各个版本的Microsoft Windows, 以及越来越多的开放源码UNIX系统或类似的通用软件. 其中, 有机会在行业新闻头条上频频亮相的非Linux莫属, 它以其多样化的变体而闻名于世. Linux是在越来越多的公司近几年来的大力援助下, 从最基层开发出来的. 借助其在市场上取得的巨大成功, 以及在可靠性和性能上取得的良好名声, 甚至借助了微软最近对它发起的几次猛烈抨击(说它是“知识产权最大的敌人”), Linux顺利地“登堂入室”, 成为时下最红火的一个话题. 不管你是爱它还是恨它, 像Linux这样的开放源码软件都已顺利地“修正成果”, 这成为一个不争的事实.
然而, 一个常被人忽略的事实是:Linux不是UNIX, 或许叫它“类UNIX”才更合适吧?因为它尽管在功能上同大多数商业的UNIX变体是一样的, 但却完全是由自己的用户群体开发出来的. 这个项目的指导原则准确地反映在GPL中 ( GNU General Public License, GNU通用公共许可协议), 它指出在其下面开发的任何代码都必须免费发放. 这也扩展至商业软件开发实体, 对于它们用一些早期素材开发出来的任何软件, 都必须重新发布免费的源码.
如果说开放源码和商业软件之间存在严重分歧的话, 那便是这份表面上清白无辜的许可协议了. 问题是许多公司不愿意遵守它的条款, 因为对它们来讲, 假如开放由自己开发的源码, 就等于公开自己的商业秘密. 基于GPL的软件想要达到这样一个理想:软件由人编写, 为人编写, 无人拥有它的所有权, 以及无人对其进行管制. 这绝对是和商业的. 封闭源码的软件对立的, 这些软件往往由一家公司以编译好的. 可执行的形式出售. Linux通过一系列重要的方式来支持这一理想, 但由于商家对GPL的精神缺乏兴趣, 因此造成它的发展缓慢.
再来看看FreeBSD, 作为另一种免费的. 基于UNIX的操作系统, 它的问世时间同GNU/ Linux一样悠久. 而且要再追根溯源的话, 它的历史甚至要悠久得多.
FreeBSD也是开放源码的, 只是采取了不同的形式. 它的基础并不是在GPL下开发出来的软件, 而是BSD开放源码许可协议, 它允许早期在加州大学伯克利分校开发的代码(以及后来的商业代码)能在当前的软件开发中使用, 无论结果是否以源码形式发布. 这正是苹果(以及更早的NeXT)选择用免费的BSD(Berkeley Software Design)操作系统内核来搭建NeXTSTEP平台的原因, 它后来演变成了Mac OS X, 也正是微软后来似乎对FreeBSD“青眼有加”, 而对Linux“横眉冷对”的原因. 在其最近宣布的计划中, 已决定将C#编程环境移植到FreeBSD. 同GPL相比, BSD许可协议对于商业软件开发公司来说显得更加友好. 它一方面鼓励来自广大用户的基层援助, 另一方面又不对那些真正有实力的公司施加不恰当的限制, 使它们能利用手边的强大资源, 放心大胆地将BSD许可软件开发成为真正出色的产品.
自然有人会认为Linux和FreeBSD是竞争对手. 从部分意义上说, 或至少就一些人的判断来看, 事实的确是这样的. 在当前使用的开放源码操作系统中, 在Linux之后就是FreeBSD占统治地位. 但所谓的“统治”地位目前也只不过对应约15%的市场份额. 不管从哪方面讲, 都算不上“主流”. 即使FreeBSD有一些著名公司在为其摇旗呐喊—比如Yahoo!. Apache Project以及Walnut Creek CD-ROM等—但数量并不足以将FreeBSD提升到同Linux等同的地位. 这其实既有好处, 也有弊端.
FreeBSD同Linux最大的一处差异或许便是广告. 相比之下, FreeBSD极少为自己宣传. 在FreeBSD的世界中, 听不到像Linux世界中那种雄辩的声音. 从某种角度来看, 这似乎也是正常的, Linux是开放源码理想中一个比较“极端”的例子, 而FreeBSD是开放源码的热情同公司保守做法之间的一个适度折衷. Linux的活跃主要是由于它具有更大的透明度, 但也意味着它是一个更加混乱的平台. FreeBSD 努力使自己在传统人士面前更具吸引力, 因此它不那么浮华, 考察它的许多方面, 你会发现它更加稳健和更具有可操纵性—它是真正的UNIX, 采用的是原始的商业UNIX代码, 具有同商业版“强健”UNIX变体一样的稳定性. 很难说Linux与FreeBSD到底哪一个更“先进”, 或者谁具有更现代的特性. 但从许多方面来讲, FreeBSD都不是一个像Linux那样的“展示性”平台, 它缺乏最新的用于挑战Windows的一些特性, 这些特性试图使开放源码进军桌面市场. 这并不是FreeBSD所感兴趣的!
如果你在阅读本书, 表明你可能是一名Linux用户, 希望尝试一下更加稳定的平台, 以便搭建可靠的公司网络服务器, 你也可能是一名商业UNIX用户, 希望搭建一个自己早就熟悉了操作. 但却非常便宜的服务器的工作站, 或者你是一名Windows管理员, 希望为完全封闭的Microsoft服务器产品寻找一个替代物. 只要你有这些方面的需求之一, 那么FreeBSD必然是一种出色的选择.
我首次接触FreeBSD是在1997年, 那时的版本是2.2.2. 当时吸引我的是, 即使在其早期的开发阶段, Yahoo!仍然选择它作为自己的运行平台, 而不是选择Linux. 另外还有Hotmail(在它被Microsoft收购之前), 也混合使用FreeBSD和Solaris机器, 以控制其巨大的“Web邮件”用户负载(Microsoft在2000年终于将大多数的Hotmail功能转移到Windows 2000上, 但众所周知FreeBSD仍被广泛用在一些重要的功能上). 我认为这些都是颇有说服力的证据. 最后, 了解到它基于软盘的“全新安装”(net install)特性, 我终于下定了决心要用它.
自那时起, FreeBSD便开始经历一场重大的革命. 系统的布局越来越有条件, 安全模型不断完善和改进, 革命性的“ports collection”取得了相当大的成功, 被移植到NetBSD. OpenBSD和Mac OS X中, 同时一个Linux二进制兼容模块使那些为Linux商业开发的软件(比如RealPlayer和StarOffice)也能在FreeBSD上运行. 中心配置文件和一个得到紧密控制的文件系统结构加强了平台的可预测性, 而且更易管理. 在这个方面, 它做得可能比其他广泛使用的UNIX还要出色. FreeBSD几乎提供了同运行Linux时一样的所有实质性的优点, 而且许多优点是FreeBSD所独有的.
在谈到开放源码的操作系统时, Linux成为世人瞩目的明星. 而且在可以预见的将来, 它会继续保持这一殊荣. 然而, FreeBSD会变得越来越流行. 原因很简单, 一些公司急于摆脱微软的霸权, 同时又讨厌Linux的策略或者不喜欢其令人无从选择的多种发行版本, 那么FreeBSD作为一种完整的替代物是最好的选择. 其他由BSD许可的操作系统紧紧地抓住它们狭小的市场不放:OpenBSD的重点放在提供最安全的操作系统(OS)上, 而NetBSD则声称自己能够在大量不同的硬件平台上运行, 从Intel的x86架构, 到Motorola PowerPC, 一直到Sega Dreamcast. FreeBSD并非仅在常规意义上具有吸引力, 它同样在当今这个时代可以扮演一个非常重要的角色—作为全功能的Internet服务器或工作站使用. 任何人只要花几百美元便可架设一个Web站点或者家庭网络, 可在上面写软件, 运行小型公司, 或者在全世界范围内共享思想和见解. 它的运行不需要多高的专业技术, 也不会产生如此高的行政费用, 这对公司的财务主管来说是颇具吸引力的. 它在两个极端之间扮演了一个中性化的角色, 在未来几年的时间里, 随着越来越多的用户发现FreeBSD的潜力, 它会变得越来越流行, 而且会赢得越来越响亮的名声.
20年, 或者10年, 甚至5年前, 很少有人能够准确预测出今天的计算机业界现状. 同样, 我们在此不想预测未来10年或20年的发展情况, 但假如FreeBSD迄今为止逐渐取得成功的历史是某种迹象的话, 那么只要开放源码运动坚持不懈地开展下去, 它就会一直伴我们同行. 某一天, 一旦开放源码同商业保证之间达成某种妥协, 那么FreeBSD就可能是任何人惟一想使用的平台.
本书的约定
本书的特色段落包括:
注意 为你提供一些注解和评论, 补充当前讨论的主题, 同时完整解释特定的主题.
提示 提供好用的快捷方法和建议, 讲解如何在FreeBSD中更有效率地编程.
警告 提醒你避开一些会令人痛苦的陷阱, 并帮助你避免编程时的错误.
配套光盘说明
CD1提供FreeBSD操作系统版本5.0-RELEASE.
CD2包括:
mkpasswd.pl—一个Perl脚本, 帮助将Linux用户数据库迁移至FreeBSD格式(参见第20章).
simpledemo.pl—一个简单的Perl程序, 展示了基本编程技术(参见第21章).
sendcomments.cgi—一个CGI Perl示例程序, 演示了服务器端编程的常规用途(参见第26章).
portsentry.sh—一个shell脚本, 帮助自动启动PortSentry程序, 并提供了用于其他此类程序的一个例子(参见第29章).
StarOffice 5.2—Sun公司针对Linux环境提供的办公套装软件, 也可很好地在FreeBSD上运行, 其中包括字处理. 电子表格. 演示文稿. 绘图程序等等.
如何与原出版社及作者联系
作为本书的读者, 你是我们最重要的批评家和评论员. 我们尊重你的意见, 想知道我们哪些地方做得好, 哪些地方可以做得更好, 你希望我们出版哪个领域的书籍以及你希望传递给我们的其他意见.
你可直接传真. 发电子邮件或者写信给我们, 让我们知道你喜欢或不喜欢本书的什么地方—以及我们怎么做可以使这本书变得更好.
请注意, 我不能帮你回答与本书的主题有关的技术问题, 那会使我收到过多的邮件, 而我不可能回复每一封邮件.
在你写信时, 请注意注明本书的书名和作者, 同时还有你的姓名和电话(传真)号码. 我会仔细地阅读你的意见, 并同本书的作者和编辑进行沟通.
原书名:FreeBSD Unleashed (ISBN 0-672-32206-4)
原出版社网址:www.samspublishing.com
传真:317-581-4770
电子邮件地址:feedback @samspublishing.com
邮寄地址:
Jeff Koch, Associate Publisher
Sams Publishing
201 West 103rd Street
Indianapolis, IN 46290 USA
无封面