Ubuntu 服务器指南
目录[隐藏 ]
|
本文档将使用下列记号: 备注,一般表示一段有趣的,有时是技术性的,并和上下文相关的信息。 提示,提供有完成某件事情的建议或捷径。 警示,提醒读者可能面临的问题,并给出避免这些问题的帮助信息。 警告,告知读者在特定情形下可能出现的风险。
用于打印的交叉引用排版约定效果如下:
PDF、HTML 以及 XHTML 版本的文档将使用超链接来处理交叉引用。
输入内容的排版约定效果如下:
command to type
菜单选择、鼠标动作及键盘快捷键:
文件(F) → 打开(O)
Ctrl+N 。根据惯例,“Control”、“Shift” 以及 “Alternate” 按键将以 Ctrl、Shift 以及 Alt 来表示,需要特别指出的是,其中第一个按键在按下第二个键的过程中应该一直被按住。
本文档由 Ubuntu 文档小组 编写。您可以通过 Ubuntu 文档小组的邮件列表发送自己的意见或评论来完善本文档。欲知该小组的信息、其邮件列表、项目等等详情,您可以访问 Ubuntu 文档小组官方网站 。本文档的简体中文版由 UbuntuChina 文档组 翻译,欲知更多信息或加入我们,请访问 Ubuntu 中文 Wiki 。
如果您发现了文档中存在的问题,或者想提些建议,您可以直接在Ubuntu Bug 跟踪系统上提交一份bug报告。您的帮助是这些文档成功的关键![翻译相关的 bug 可以联系UbuntuChina 文档组 成员。]
非常感谢
- 您的 Ubuntu 文档小组
欢迎阅读 Ubuntu 服务器指南!
Ubuntu 服务器指南 包括了在您的 Ubuntu 系统中如何安装和配置满足您需要的不同服务器的相关信息。它是一个循序渐进、面向任务的配置和定制您系统的指南。本手册讨论的主题如下所示:
本手册主要分为以下几块:
本指南假定您已经对您的 Ubuntu 系统有个基本的了解。如果您需要安装 Ubuntu 的详细帮助,将参考 Ubuntu 安装指南。
本手册的 HTML 和 PDF 版本可以在 Ubuntu 文档网站 在线获得。
您可以在our Lulu store 上购买到本指南的纸质品,只需支付打印和邮寄费用。
本章提供了安装 Ubuntu 6.06 LTS Server Edition(服务器版)的快速入门。更多细节说明,请参见 Ubuntu 安装指南。
准备安装,本部分内容说明在开始安装之前要考虑的各个方面。
Ubuntu 6.06 LTS Server Edition (服务器版)支持三种主要的体系架构: Intel x86、AMD64 和 PowerPC。下表列出了被推荐硬件明细表。您可以根据需要使用比这更少的(硬件)进行管理。然而,大多数用户不应当忽略这些建议,否则风险自负。 表 2-1 最小建议配置
安装类型 | RAM | 硬盘空间 |
服务器 | 64 MB | 500 MB |
Ubuntu 6.06 LTS Server Edition (服务器版)的默认自述文档已经在下面列出了。当然,安装的尺寸大小极大程序上取决于您在安装过程中安装服务的多少。对于大多数管理员来说,默认的服务对于服务器一般的使用已经足够了。
服务器
这是一个小型服务器服务列表,它为各种服务器应用程序提供了一个通用基础。它是最低限度的并被设计成可以在其上添加想要的服务,如文件/打 印服务、web 主机、邮件主机等。要满足这些服务至少需要 500 MB 的磁盘空间,但考虑添加更多的空间是要取决于在您服务器上您想要提供的服务。
记住这些尺寸并不包括其他的素材如用户文件、邮件、日志和数据。当为您自己的文件和数据考虑空间时最好能留足。
如果您是想把电脑做成多重引导的系统,请先确定您手头上有电脑里已经存在的这些操作系统的安装介质。特别是当您把启动盘重新分区以后,您可能会发现必须重新安装原有操作系统的启动引导程序,某些情况下,还得重新安装该操作系统并恢复受影响分区上的文件。
将您的安装 CD 插入 您的 CD-ROM 设备并重启计算机。当从 CD-ROM 重启时安装系统将立即开始。一旦初始化之后,您的第一个安装屏幕将出现。
此时,阅读屏幕上的文字。您也许想看看安装程序提供的帮助屏。如果您想这么做的话,请按 F1 键。
要执行缺省的服务器安装程序,选择 “安装到硬盘” 并按 回车 键。安装过程将开始。简单地根据屏幕上的指示,您的 Ubuntu 系统将被安装。
或者,您要安装一个 LAMP 服务器 (Linux, Apache, MySQL, PHP/Perl/Python),选择 “安装 LAMP 服务器”,并根据指示进行安装。施文
Ubuntu 提供一套全面的包管理系统用于软件的安装、升级、配置和卸载。除了让您 Ubuntu 计算机可以访问组织好的超过 17,000 个软件包的软件库之外,包管理工具还可以解决依赖关系并提供软件更新检查。
一些工具可以和 Ubuntu 包管理系统进行交互,从便于系统管理员做自动化处理的简单命令行工具到便于 Ubuntu 新手使用的简单图形界面。
Ubuntu 的包管理系统是从 Debian GNU/Linux 发行版中洐生出来的。包文件包括在您 Ubuntu 系统中实现特定功能或软件所必需的文件、元数据和指令。
Debian 包文件一般用 '.deb' 作后缀,而且位于建立在不同介质上由包组成的 软件库 中,这些介质包括 CD-ROM 光盘和网站。包通常是预编译的二进制形式,因此安装速度快而且软件也无需编译。
许多复杂的包使用 依赖包 这一概念,依赖包是主包为实现完整功能而要求的附加包。例如,语音合成包 Festival 依赖 festvox-kalpc16k 包,该依赖包提供被应用程序使用的众多声音之一。为了能使 Festival 正常运行,所有依赖包都必须与 Festival 主包同时安装。Ubuntu 软件管理工具将会自动完成这一切。 ff
apt-get 命令是一个强大的命令行工具,用于同 Ubuntu 的 Advanced Packaging Tool (APT) 一起执行诸如安装新软件包、升级已有软件包、更新包列表索引,甚至是升级整个 Ubuntu 系统等功能。
作为一个简单的命令行工具,apt-get 对于服务器管理员来说比 Ubuntu 中的其他软件包管理工具有着相当多的优点。这些优点包括便于在简单终端连接 (SSH) 中使用,同时能够用于系统管理脚本中,以便能被cron 动作计划工具自动运行。
apt-get 工具的一些常见用法示例:
关于 APT 用法的更多信息,可阅读全面的Debian APT 用户手册 或输入:
apt-get help
Aptitude 是一个菜单驱动,基于文本的 Advanced Packaging Tool (APT) 系统前端。包管理的许多常用功能,如安装,卸载和升级,可以在Aptitude 中单键执行命令,它通常是小写字母。
Aptitude 最适用于非图形的终端环境,确保命令关键字的适当功能。您可以作为一个普遍用户在终端提示符后用以下命令开始运行 Aptitude:
sudo aptitude
当 Aptitude 开始之后,你将看在屏幕顶部的一个菜单条,其下有两个窗,顶窗包含包的类别,如 新软件包 和 未安装软件包 。底窗包含包和包类别的相关信息。
使用 Aptitude 作包管理相对直观,用户界面便于执行常用任务。下面是在 Aptitude 中进行包管理时常见用法如下:
当实际查看软件时列出软件包当前状态,在顶窗软件包列表中显示信息的第一列使用下列关键字来描述软件包状态:
要退出 Aptitude,只需简单按 q 键并确认您想退出即可。在 Aptitude 菜单中按 F10 键可以列出其他许多功能。
Advanced Packaging Tool (APT) 系统软件库的配置被保存在 /etc/apt/sources.list 文件中。这儿有个该文件的示例,
[file:///usr/share/ubuntu-docs/ubuntu/serverguide/sample/sources.list 这里] 是一个典型的 /etc/apt/sources.list 文件范例。
您可以编辑该文件来使软件库生效或失效。举个例子,要不想无论何时在发生文件包操作都会引起要求插入 Ubuntu CD-ROM ,只需要简单地将在文件顶部的 CD-ROM 相应行注释掉即可:
==== 其他软件库 ==== 除了可以使用官方支持的 Ubuntu 软件包库之外,还存在拥有几千个潜在软件包的由其它社区维护的软件库。这些软件库中最流行的两个是 Universe 和 Multiverse 软件库。这些软件库并不被 Ubuntu 官方支持,这就是它们为什么在缺省时不能的原因,但它们提供的包通常是可以在您的 Ubuntu 计算机上安全使用的。 在 Multiverse 软件库中的包通常有许可证的问题,这使得它们不能和自由操作系统一起分发,它们在您所在的地区可能是违法的。 建议不要在 Universe 或 Multiverse 软件库中包含官方支持的软件包。尤其是在升级这些包时可能会不安全。 许多其他软件包源也是可用的,有时甚至只提供一个软件包,这种情况主要发生在由单个应用程序的开发人员所提供软件包源上。然而当您在使用非标准软件包源时您应该非常小心谨慎,在执行任何安装之前仔细考查源和软件包,因为有些软件包源和其中的软件包可能会使您的系统在某些方面运行不稳定或不正常。 要使 Universe 和 Multiverse 库可用,编辑/etc/apt/sources.list 文件并将去掉相关行的注释:deb http://archive.ubuntu.com/ubuntu dapper universe multiverse deb-src http://archive.ubuntu.com/ubuntu dapper universe multiverse
[编辑 ] 3.5.1. 引用
如何添加软件库(Ubuntu Wiki)
[编辑 ] 联网
网络是由两个或两个以上的设备通过物理线缆或无线连接而成并在连接设备之间共享和分发信息。这些设备包括计算机系统、打印机或用有线或无线连接起来的其它相关设备。
Ubuntu 服务器指南的这部分提供与联网相关的一般和特定信息,包括网络概念的简介以及对常用网络协议及服务器应用程序的详细讨论。
[编辑 ] 网络配置
Ubuntu 提供了许多图形化工具来配制您的网络设备。本文适用于服务器管理员并聚焦在命令行中管理您的网络。
[编辑 ] 4.1.1. 以太网
大多数以太网配置都集中在单个文件 /etc/network/interfaces 中。如果您没有以太网设备,那么在该文件中将只出现环回口,该文件看上去类似这样:
auto lo iface lo inet loopback address 127.0.0.1 netmask 255.0.0.0如果您只有一个以太网设备 eth0,被配置成从 DHCP 服务器得到设置,并且在引导时自动激活,那么只需要再添加两行:
auto eth0↵ iface eth0 inet dhcp第一行说明 eth0 将会在您启动时自动激活。第二行说明该接口 (“iface”) eth0 将有得到一个 IPv4 地址空间 (如果是一个 IPv6 的设备将须将 “inet” 用 “inet6” 代替) 并且它将自动从 DHCP 中自动获得它的配置。假定您的网络和 DHCP 服务都已经被正确配置,该机的网络将不需要更多的配置。DHCP 服务器将提供默认网关 (通过 route 命令来实现) 、设备的 IP 地址 (通过 ifconfig 命令来实现)以及网络使用的 DNS 服务器 (在 /etc/resolv.conf 文件中实现)。
要把您的以太网设备配置成静态 IP 地址和自定义配置的话,则要求更多的信息。假设您想指定 IP 地址 192.168.0.2 给设备 eth1,其掩码是 255.255.255.0。您的默认网关的 IP 地址是 192.168.0.1。您可以在 /etc/network/interfaces 中输入类似下面的语句:
iface eth1 inet static address 192.168.0.2 netmask 255.255.255.0 gateway 192.168.0.1在这个例子中,您将需要在 /etc/resolv.conf 中手工指定您的DNS服务器,看起来如下:
search mydomain.com nameserver 192.168.0.1 nameserver 4.2.2.2search 语句在试图解析网络名时把 mydomain.com 添到主机名查询中。举个例子,如果您的网络域名是 mydomain.com 并且您试图去 ping 主机 “mybox”,DNS 查询将在解析时改为 “mybox.mydomain.com”。nameserver 语句指定用于将主机名解析成 IP 地址的的 DNS 服务器。如果您使用自己的名称服务器,在这里输入它。否则询问您的 Internet 服务供应商要使用的主、辅 DNS 服务器,并把它们如上所示输入到 /etc/resolv.conf 中。
配置更多的接口是可能的,包括拨号的 PPP 接口、IPv6 网络、VPN 设备等。更多信息和支持选项请参考 man 5 interfaces。记住 ifup/ifdown 脚本使用的/etc/network/interfaces 是比其他一些 Linux 发行版更高级的配置模式。传统的低级工具如ifconfig、route 和 dhclient 也为了 ad hoc 配置对您来说也是可用的。
[编辑 ] 4.1.2. 管理 DNS 记录
本部分说明如何配置用来将IP地址解析成主机名或相反功能的名称服务,而不是说如何将整个系统配置成一个名称服务器。
要管理 DNS 条目,您可以在 /etc/resolv.conf 文件中添加、编辑或删除 DNS 名称服务器。一个 范例文件 在下面给出:
search com nameserver 204.11.126.131 nameserver 64.125.134.133 nameserver 64.125.134.132 nameserver 208.185.179.218search 关键字指字为未完成主机名添加的字符串,在这里我们使用com。因此当我们运行:ping ubuntu 时它被理解成 ping ubuntu.com。
nameserver 关键字指定名称服务器的 IP 地址,它将被用来解析 IP 地址或主机名。该文件可以有多个名称服务器记录。名称服务器将按相同顺序进行网络查询。
如果 DNS 服务器名称是通过 DHCP 或 PPPOE 动态取回的(从您 ISP 取回),那么不要在该文件中添加名称服务器记录。它将被自动更新。
[编辑 ] 4.1.3. 管理主机
要管理主机,您可以在 /etc/hosts 文件中添加、编辑或删除主机。该文件包括 IP 地址和相对应的主机名。当您的系统要解析一个主机到 IP 地址或从一个 IP 地址获取主机名时,它将在使用名称服务器之前参考 /etc/hosts 文件。如果该 IP 地址已经在 /etc/hosts 文件中被列出,那么将不再使用名称服务器。这一动作可以通过编辑 /etc/nsswitch.conf 来改变,不过后果自负。
如果您网络所包含计算机的 IP 地址没有在 DNS 中列出,建议您将它们加入到 /etc/hosts 文件中。
[编辑 ] TCP/IP
传输控制协议和网际协议 (TCP/IP) 是在 20世纪70年代被美国国防部高级研究规划局 (DARPA)作为在不同类型计算机及计算机网络之间的通信手段而被开发的一个标准协议簇。TCP/IP 是 Internet 的驱动力,因此它是全球最流行的网络协议簇。
[编辑 ] 4.2.1. TCP/IP 介绍
TCP/IP 的两个协议组件处理计算机网络的不同方面。网际协议,TCP/IP 中的 "IP" 是一个连接协议,只处理使用 IP 数据报 作为网络信息基本单元的网络包路由。IP 数据报由报头和其后的消息组成。传输控制协议 是 TCP/IP 中的 "TCP",可以使网络主机之间建立用于交换数据流的连接。TCP 也保证连接之间的数据传送以及其在网络主机上的接收顺序与其从另一台网络主机上的发送顺序一致。
[编辑 ] 4.2.2. TCP/IP 配置
TCP/IP 协议配置由必须设置的几个元素组成,可以通过编辑相应的配置文件或配置方案如动态主机配置协议 (DHCP) 来设置,它可以配置成提供适当的 TCP/IP 配置来自动设置网络客户机。这些配置值必须正确设置,以便于您的 Ubuntu 系统进行相应网络操作。
TCP/IP 常用配置元素及其作用如下所示:
IP 地址、掩码、网络地址、广播地址以及网关地址一般都是在文件 /etc/network/interfaces 中通过相应的语句来指定的。名称服务器地址一般是在文件 /etc/resolv.conf 中通过 nameserver 语句来指定的。更多详情,请分别查阅 interfaces 或 resolv.conf 的系统手册页。
查阅 interfaces 系统手册页,可用以下命令:
man interfaces
查阅 resolv.conf 系统手册页,用以下命令:
man resolv.conf
IP 路由是在 TCP/IP 网络上为可能发送的网络数据指明或发现路径。路由使用一组路由表来指示网络数据包从源地址转发到目的地,经常是通过许多叫做路由器的网络节点做中转。IP 路由是 Internet 上路径发现的主要方式。IP 路由分为两种形式:静态路由 和 动态路由。
静态路由包含向系统路由表中手工添加的 IP 路由,一般是通过 route 命令来向路由表手工添加的。静态路由与动态路由相比有许多优点,如在小网络中实施简单,有可预测性 (路由表总是事先算好,因此路由在每次使用时都相当一致),在其它路由器和网络链路处理上比动态路由协议开销小。然而,静态路由也有一些缺点。如静态路由 只限于小网络而且不能很好地进行调整。静态路由由于路由固定的特性,因此根本无法根据路由来适应网络中断和故障。
动态路由有赖于从一个源到目的有多条可用 IP 路由的大型网络,利用特定的路由协议,如路由信息协议 (RIP),可以自动调整路由表以生成可能的动态路由。动态路由相对静态路由有几个优点,如拥有较大的伸缩性和能根据网络路由来适应网络中断和故障。另 外,几乎无须手工配置路由表,因为路由器可以相互学到其他已有并且可用的路由器。这一特性也消除了由于人为错误而在路由表中引入错误的可能。然而,动态路 由也并不完美,其表现出来的缺点如相当复杂以及由于路由器通讯所带来的额外的网络开销,并不能使最终用户由此获益,并却一直消耗着网络带宽。
TCP 是一个基于连接的协议,提供纠错并通过 流量控制 来传输数据。流量控制决定什么时间一个数据流需要停止,例如在出现诸如 冲突 等问题时重发先前发送的数据包,以确保完整和准确的数据传输。TCP 常用于重要信息的交换,如数据库传输。
另一方面,用户数据报协议 (UDP) 是一个 无连接 协议,很少用于重要数据的传输,因为缺乏流量控制或其他一些确保可靠数据传输的方法。UDP 常用在如音视频流这样的应用程序,由于它缺少纠错和流控,因此相对于 TCP 来说更快,而且丢失少量包通常也不会造成灾难性的后果。
Internet 控制消息协议是在Request For Comments (RFC) #792 中定义的,是对网际协议 (IP) 的一个扩充。支持的网络包包括控制、错误和信息的消息。ICMP 常被用在诸如判断一台网络主机或设备可用性的 ping 工具这样的网络应用程序。在网络主机和设备如路由器之间使用 ICMP 所返回的错误消息示例包括 Destination Unreachable 和 Time Exceeded。
守护程序是特殊的系统应用程序,一般常驻在后台并等待来自其他应用程序请求其所提供的功能。许多守护程序都是网络中心;在 Ubuntu 系统后台执行的许多守护程序都可以提供网络的相关功能。这些网络守护程序包括 超文本传输协议守护程序 (httpd),用于提供网站服务器功能;Secure SHell 守护程序 (sshd),用于提供安全远程登录 shell 和文件传输功能;Internet Message Access Protocol 守护程序 (imapd),用于提供 E-Mail 服务。
Linux 内核包括 Netfilter 子系统,用来处理或决定网络传输头部进入或穿过你的服务器,目前所有的 Linux 防火墙都用该系统来做包过滤。
内核的包过滤系统如果没有一个用户态 (userspace) 界面来管理它的话对管理员来说几乎没有用。这正是 iptables 的目的。当一个包到达您的服务器,它从用户态 (userspace) 通过 iptables 传给 Netfilter 子系统,然后基于提供的规则去接受、操作或拒绝。因此,如果你能熟悉它的话,那么 iptables 就是您管理您防火墙所需的全部。
IP 伪装的目的是为了允许您网络上那些有着私有的、不可路由的 IP 地址的机器可以通过做伪装的机器访问 Internet。来自您私有网络并要访问 Internet 的传输必须是可以操作的,也就是说回复要可以被路由回来以送到发出请求的机器上。要做到这一点,内核必须修改每个包 源 IP 地址以便回复能被路由回它这里,而不是发出请求的私有 IP 地址,因为它们对于 Internet 来说是不存在的。Linux 使用 Connection Tracking (conntrack) 来保持那个连接是属于哪个机器的,并相应地对每个返回包重新做路由。发自您私有网络的流量就这样被伪装成源于您的网关机器。这一过程在 Microsoft 文档中被称为 Internet 连接共享。
这可以用单条 iptables 规则来完成,也许基于您网络配置来说会有一些小的差异:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE
上述命令假设您的私有地址空间是192.168.0.0/16,您与 Internet 相连的设备是 ppp0。语法分解如下所示:
在过滤表 (缺省表,在那里有着大多数或全部包过滤指令) 中的每条链 (chain) 都有一个默认的 ACCEPT 策略,但如果您还在网关设备上设置防火墙,那么您也许还要设置 DROP 或 REJECT 策略,这时您被伪装过的流量还需要被 FORWARD 链 (chain) 中的规则允许才能正常工作:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT sudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT
上述命令将允许通过从您局域网到 Internet 的所有连接,这些连接所有的相关流量也都返回到发起它们的机器。
有很多工具可以帮助您构建一个完整的防火墙,而不需要 iptables 的专业知识。偏好图形界面的,Firestarter 非常流行也易于使用,fwbuilder 则非常强大而且其界面对于用过诸如 Checkpoint FireWall-1 商业防火墙工具的管理员来说相当熟悉。如果您偏好有着纯文本配置文档的命令行工具,Shorewall 是个非常强大的解决方案,可以帮您为任何网络配置一个高级防火墙。如果您的网络相对简单,或如果您没有网络,那么 ipkungfu 将给您一个无需配置就可以工作的防火墙,也允许您通过编辑简单友好的配置文件来轻松设置更高级的防火墙。另一个感兴趣的工具就是fireflier,被设 计成桌面防火墙应用程序。它由一个服务器 (fireflier-server) 和可选的 GUI 客户端 (GTK 或 QT) 组成,操作就象 Windows 中许多流行的交互式防火墙应用程序一样。
防火墙日志主要是为了确认攻击、找出并解决您防火墙规则的问题以及注意您网络中不正常的活动。您必须在您防火墙中包含这些日志规则以便生成相应日 志,虽然,日志规则必须优先于任何可应用的最终规则 (那些决定其目的包命运的规则,如ACCEPT、DROP 或 REJECT) 。
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "
一个从本机发起的对 80 端口的请求将会在 dmesg 中生成一条日志,如下所示:
[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0
上面的日志也会出现在/var/log/messages、/var/log/syslog 和 /var/log/kern.log 中。这一过程可以通过适当编辑 /etc/syslog.conf 或安装配置 ulogd 并用 ULOG 代替 LOG 来进行改变。ulogd 守护程序是一种用户态服务器可以监听来自内核的防火墙日志指令,并且能够将其写到任何您希望的文件中,甚至是 PostgreSQL 或 MySQL 数据库。使用诸如 fwanalog、fwlogwatch 或 lire 日志分析工具将会很轻松地弄懂您的防火墙日志。
Ubuntu 服务器指南的这部分内容介绍一个强大的远程控制网络计算机和在它们之间传输数据的工具集 OpenSSH。您也可以学到一些 OpenSSH 服务器应用程序的配置以及如何在您 Ubuntu 系统修改它们。
OpenSSH 是Secure Shell (SSH) 协议工具集中的一个自由可用的版本,用以远程控制一台计算机或在计算机之间传输文件。完成这些功能的传统工具,如 telnet 或 rcp 等,是不安全的,它们在使用时用明文来传输用户的密码。OpenSSH 提供一个服务器守护程序和客户端工具来保障安全、加密的远程控制和文件传输操作,以有效地取代传统的工具。
OpenSSH 服务器组组件 sshd 持续监听来自任何客户端工具的连接请求。当一个连接请求发生时,sshd 根据客户端连接的类型来设置当前连接。例如,如果远程计算机是通过 ssh 客户端应用程序来连接的话,OpenSSH 服务器将在认证之后设置一个远程控制会话。如果一个远程用户通过 scp 来连接 OpenSSH 服务器,OpenSSH 服务器将在认证之后开始服务器和客户机之间的安全文件拷贝。OpenSSH 可以支持多种认证模式,包括纯密码、公钥以及Kerberos 票据。
OpenSSH 客户端及服务器应用程序的安装是简单的。要在您 Ubuntu 系统中安装 OpenSSH 客户端应用程序,可以在终端提示符后使用以下命令:
sudo apt-get install openssh-client
要安装 OpenSSH 服务器应用程序及相关的支持文件,可以在终端提示符后使用以下命令:
sudo apt-get install openssh-server
您可以通过编辑 /etc/ssh/sshd_config 文件来配置 OpenSSH 服务器应用程序的缺省过程。关于该文件中使用的配置语句信息,您可以在终端提示符后运行下列命令来查阅相应的手册页:
man sshd_config
在 sshd 配置文件中有许多语句来控制那些诸如通信设置和认证模式。下面是一个通过编辑 /etc/ssh/ssh_config 文件来改变配置语句的例子。
在编辑配置文件之前,您应该生成一个原始文件的拷贝并对其写保护,以便您可以参考原始文件并在必要时重用它。
拷贝 /etc/ssh/sshd_config 文件并对其写保护可以通过在终端提示符后运行下列命令:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original sudo chmod a-w /etc/ssh/sshd_config.original
以下是您可能更改配置语句的范例:
Port 2222
PubkeyAuthentication yes
到 /etc/ssh/sshd_config 文件中。如果已经存在,确保该行语句没有被注释。
Banner /etc/issue.net
到 /etc/ssh/sshd_config 文件中即可。
在修改 /etc/ssh/sshd_config 文件之后,保存该文件并重启 sshd 服务器应用程序以使之生效。可以在终端提示符后使用下列命令:
sudo /etc/init.d/ssh restart
许多其他的 sshd 配置语句可以使服务器应用程序按您的要求运行。然而,给您一个忠告,如果您访问服务器的唯一方法就是使用 ssh,而且您在通过 /etc/ssh/sshd_config 文件来配置 sshd 时犯了一个错误,那么在重启该服务之后您可能会发现您被锁在服务器外面了,或者是 sshd 服务在处理一个不正确的配置语句时拒绝启用。因此当在远程服务器上编辑该文件时要格外的小心。
OpenSSH 网站
高级 OpenSSH 维基页
文件传输协议 (FTP) 是一个 TCP 协议,用于在计算机之间上传和下载文件。FTP 工作在客户端/服务器模式下。服务器组件被称为 FTP 守护程序。它持续不断地监听来自远程客户端的 FTP 请求。当一个请求到达时,它管理登录和建立连接。在整个会话期间它执行 FTP 客户端发送来的任何命令。
可以通过两种方式来管理 FTP 服务器的访问:
在匿名模式中,远程客户端可以使用 "anonymous" 或 "ftp" 缺省用户帐号并通过发送一个邮件地址做为密码来访问 FTP 服务器。在授权模式下一个用户必须拥有帐号和密码。用户所访问 FTP 服务器中目录和文件的权限是根据登录时所用帐号来定义的。一般来说,FTP 守护程序将隐藏在 FTP 服务器的根目录中并将其改到 FTP 家目录。这样就可以向远程传话隐藏文件系统的其他部分。
vsftpd 是可在 Ubuntu 中使用的 FTP 守护程序之一。它在安装、设置和维护方面十分方便。要安装 vsftpd 您可以使用下列命令:
sudo apt-get install vsftpd
你可以编辑 vsftpd 配置文件,/etc/vsftpd.conf,来配置缺省设置。缺省状态下只允许匿名 FTP。如果您希望禁用该选项,您可以将下面这行:
anonymous_enable=YES
改为
anonymous_enable=NO
一旦您配置好了 vsftpd 您就可以运行该守护程序了。您可以执行下列命令来运行vsftpd 守护进程:
sudo /etc/init.d/vsftpd start
请注意在配置文件中缺省的设置主要是出于安全考虑。上面每一个改变都会使系统的安全性更小,所以请只在您需要时才改变他们。
NFS 允许系统将其目录和文件共享给网络上的其他系统。通过 NFS,用户和应用程序可以访问远程系统上的文件,就象它们是本地文件一样。
NFS 最值得注意的优点有:
在终端提示符后键入以下命令安装 NFS 服务器:
sudo apt-get install nfs-kernel-server
您可以配置要输出的目录,您可以在 /etc/exports 文件中添加该目录。例如:
/ubuntu *(ro,sync,no_root_squash) /home *(rw,sync,no_root_squash)
您可以用主机名来代替 *。尽量指定主机名以便使那些不想其访问的系统访问 NFS 挂载的资源。
您可以在终端提示符后运行以下命令来启动 NFS 服务器:
sudo /etc/init.d/nfs-kernel-server start
使用 mount 命令来挂载其他机器共享的 NFS 目录。可以在终端提示符后输入以下类似的命令:
sudo mount example.hostname.com:/ubuntu /local/ubuntu
挂载点 /local/ubuntu 目录必须已经存在。而且在 /local/ubuntu 目录中没有文件或子目录。
另一个挂载其他机器的 NFS 共享的方式就是在 /etc/fstab 文件中添加一行。该行必须指明 NFS 服务器的主机名、服务器输出的目录名以及挂载 NFS 共享的本机目录。
以下是在 /etc/fstab 中的常用语法:
example.hostname.com:/ubuntu /local/ubuntu nfs rsize=8192,wsize=8192,timeo=14,intr
Linux NFS 常见问答
动态主机配置协议 (DHCP) 是一种网络服务,相对于手工为每台网络主机配置,它使网络主机可能自动被服务器指定设置。被配置成 DHCP 客户端的计算机并不能控制其从 DHCP 服务器得到的设置,且该配置对于计算机用户来说是透明的。
由 DHCP 服务器提供给 DHCP 客户端最常用的设置包括:
然而,一个 DHCP 服务器也支持配置如下属性,如:
使用 DHCP 的好处在于当网络发生改变如 DNS 服务器地址改变时,只需要在 DHCP 服务器中改变即可,所有网络主机将在其 DHCP 客户端下一次轮询 DHCP 服务器时被重新配置。另一个好处就是,它在将新计算机整合到网络时也更容易,因为不需要再检查 IP 地址的有效性。同时也减少 IP 地址的冲突。
一个 DHCP 服务器可以用两个模式来提供配置设置
该模式需要用 DHCP 去标明连接到网上的每块网卡唯一的硬件地址,然后在 DHCP 客户端每次使用该网络设备发送给 DHCP 服务器请求时提供给它一个固定的配置。
该模式需要定义一个 IP 地址池 (有时也叫范围或作用域) ,以便 DHCP 客户端可以被动态提供它们的配置from which DHCP clients are supplied their configuration properties dynamically and on a fist come first serve basis。当一个 DHCP 客户端有段时间不再在网络上时,该配置将过期并释放回地址池以便为其他 DHCP 客户端使用。
ubuntu 提供 DHCP 服务器及其客户端。服务器叫 dhcpd (动态主机配置协议守护程序)。Ubuntu 提供的客户端叫 dhclient,应该安装在所有自动配置的计算机上。这两个程序很容易安装和配置,并可在系统引导时自动启用。
要安装 dhcpd,可以在终端提示符后输入以下命令:
sudo apt-get install dhcpd
您将看到下面的输出,说明接下来做什么:
Please note that if you are installing the DHCP server for the first time you need to configure. Please stop (/etc/init.d/dhcp stop) the DHCP server daemon, edit /etc/dhcpd.conf to suit your needs and particular configuration, and restart the DHCP server daemon (/etc/init.d/dhcp start). You also need to edit /etc/default/dhcp to specify the interfaces dhcpd should listen to. By default it listens to eth0. NOTE: dhcpd's messages are being sent to syslog. Look there for diagnostics messages. Starting DHCP server: dhcpd failed to start - check syslog for diagnostics.
安装结束后的错误消息可能会带来小小的困惑,不过下面几步将帮助您配置服务: 通常,您想做的是随机指定一个 IP 地址。这可以通过以下设置来实现:
default-lease-time 600; max-lease-time 7200; option subnet-mask 255.255.255.0; option broadcast-address 192.168.1.255; option routers 192.168.1.254; option domain-name-servers 192.168.1.1, 192.168.1.2; option domain-name "mydomain.org"; subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.10 192.168.1.100; range 192.168.1.150 192.168.1.200; }
这将导致 DHCP 服务器从 192.168.1.10-192.168.1.100 或 192.168.1.150-192.168.1.200 范围中分配客户端一个 IP 地址。如果客户端没有要求一个特定的时间帧的话它将租用 600秒的 IP 地址。否则最大 (允许) 租用时间为 7200 秒。服务器也 "建议" 客户端使用 255.255.255.0 做为它的子网掩码,192.168.1.255 作为它的广播地址,192.168.1.254 作为路由器/网关,同时将 192.168.1.1 和 192.168.1.2 作为它的 DNS 服务器。
如果您需要为您的 Windows 客户机指定一个 WINS 服务器,您需要包含 netbios-name-servers 选项,如:
option netbios-name-servers 192.168.1.1;
Dhcpd 配置设置可以从 DHCP 快速指南中得到,该指南可以在 这里 找到。
DHCP 常见问答
域名解析服务 (DNS) 是一个 Internet 服务,相互映射 IP 地址和完全限定域名 (FQDN) 。通过这种方式,使用 DNS 将不再需要记住 IP 地址。运行 DNS 的计算机称为 名称服务器。Ubuntu 提供 BIND (伯克利 Internet 名称守护程序),一个在 GNU/Linux 上最常用的维护名称服务器的程序。
在终端提示符后输入以下命令来安装 dns:
sudo apt-get install bind
DNS 配置文件被保存在 /etc/bind 目录中。主配置文件叫 /etc/bind/named.conf。缺省配置文件的内容如下所示:
// This is the primary configuration file for the BIND DNS server named. // // Please read /usr/share/doc/bind/README.Debian for information on the // structure of BIND configuration files in Debian for BIND versions 8.2.1 // and later, *BEFORE* you customize this configuration file. // include "/etc/bind/named.conf.options"; // reduce log verbosity on issues outside our control logging { category lame-servers { null; }; category cname { null; }; }; // prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; // add local zone definitions here include "/etc/bind/named.conf.local";
include 行指定包含 DNS 选项的文件名。在选项文件中的directory 行告诉 DNS 在哪儿寻找文件。所有 BIND 用到的文件都与该目录相关。 名为 /etc/bind/db.root 的文件描述世界上的根名称服务器。这些服务器按时更新并不时被维护。
zone 部分定义一个主服务器,并将其保存在 file 标签所指定的文件中。每个 zone 文件包括 3 个资源记录 (RRs):一个 SOA RR、一个 NS RR 以及一个 PTR RR。SOA 是授权开始的缩写。"@" 符是一个特定的符号表示原点。NS 是名称服务器 RR。PTR 是域名指针。要开始 DNS 服务器,可以在终端提示符后运行以下命令:
sudo /etc/init.d/bind start
详情您可以参考在参考部分所提及的文档。
DNS 指南
Ubuntu 打印及打印服务主要是 通用 UNIX 打印服务 (CUPS)。该打印系统是自由可用、可移植的打印层,正在成为绝大多数 GNU/Linux 发行版新的打印标准。
CUPS 管理打印作业和队列,并使用标准的 Internet 打印协议 (IPP) 提供网络打印,该协议提供最大范围的打印机支持,从点阵打印机到激光打印机以及位于两者之间的许多打印机。CUPS 也支持 PostScript Printer Description (PPD) 和网络打印机的自动检测,以及提供基于 Web 的简单配置和管理工具。
在您 Ubuntu 计算机上安装 CUPS,只需简单使用 sudo 和apt-get 命令并将要安装包作为第一个参数即可。一个完全的 CUPS 安装需要安装许多从属包,但它们也可以在同一个命令行指定。在终端提示符后输入以下命令以安装 CUPS:
sudo apt-get install cupsys cupsys-client
认证您的用户密码之后,这些包将被下载并正确安装。在安装结束之后,CUPS 服务器将自动开始。为了发现并修复问题,您可以通过错误日志文件 /var/log/cups/error_log 来查看 CUPS 服务器的错误。如果错误日志并没有显示足够的用于找到和解决您所遇问题的信息,通过将配置文件 (下面要讨论) 中将LogLevel 语句从缺省的 "info" 改为 "debug" 甚至是记录每件事的 "debug2",以获得 CUPS 日志的详细信息。
可以通过 /etc/cups/cupsd.conf 文件中的指令来配置通用 UNIX 打印系统服务器的行为的。CUPS 配置文件与 Apache HTTP 服务器的主配置文件语法相同,因此熟悉编辑 Apache 配置文件的用户在编辑 CUPS 配置文件时会感到相当容易。在这里将显示一些您可能想要改变初始值的设置范例。
在编辑配置文件之前,您应该将原始文件做个副本并将其写保护,以便您可以将原始文件作为参考并在必要时重用它。
拷贝 /etc/cups/cupsd.conf 文件并对其写保护,可以在终端提示符后执行以下命令:
sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.original sudo chmod a-w /etc/cups/cupsd.conf.original
ServerAdmin [email protected]
关于 CUPS 服务器配置文件中配置语句的更多范例,通过在终端提示符后输入以下命令可以查阅相关的系统手册页:
man cupsd.conf
无论您在什么时间修改了 /etc/cups/cupsd.conf 配置文件,您都需要重启 CUPS 服务,在终端提示符后键入以下命令:
sudo /etc/init.d/cupsys restart
CUPS 服务器的其它一些配置在文件 /etc/cups/cups.d/ports.conf 中:
Listen 127.0.0.1:631 # existing loopback Listen Listen /var/run/cups/cups.sock # existing socket Listen Listen 192.168.10.250:631 # Listen on the LAN interface, Port 631 (IPP)
在上面的例子里,如果您不想 cupsd 监听环回地址 (127.0.0.1) ,您可能注释或删除了相关语句。但最好保留它以监听局域网 (LAN) 的以太网接口。为了能监听一个特定主机名所绑定的所有的网络接口,您可以为 socrates 主机名创建一个 Listen 条目,如下所示:
Listen socrates:631 # Listen on all interfaces for the hostname 'socrates'
或者忽略 Listen 语句并使用 Port 来代替,如:
Port 631 # Listen on port 631 on all interfaces
CUPS 网络
Apache 是在 GNU/Linux 系统中最常用的 Web 服务器。Web 服务器为客户机所提交的网页请求服务。客户机一般通过网页浏览器如 Firefox、Opera、Mozilla或IE来请求和查看网页。
用户输入统一资源定位器 (URL) 来指向一个 Web 服务器,并通过完全限定域名 (FQDN) 和路径来请求资源。例如,要查看 Ubuntu 网站 的主页,用户只需要输入 FQDN 即可。如果要请求关于 有偿技术支持 的特定信息,用户将在 FQDN 后输入路径。
用于传输网页的最常用协议就是超文本传输协议 (HTTP)。也支持诸如基于安全套接层的超文本传输协议 (HTTPS) 以及用于上传和下载文件的文件传输协议 (FTP) 等协议。
Apache Web 服务器常与 MySQL 数据库引擎、超文本处理器 (PHP) 脚本语言及其他流行的脚本语言如Python 和 Perl 组合在一起。这一组合被称为 LAMP (Linux, Apache, MySQL and Perl/Python/PHP) ,并形成一个强大健壮的开发基于 Web 应用程序的开发平台。
Apache2 web 服务器在 Ubuntu Linux 中是可用的。要安装 Apache2:
sudo apt-get install apache2
Apache 可以在纯文本配置文件中通过 语句 来配置的。主配置文件叫 apache2.conf。此外,其外配置文件可以用 Include 语句来添加,也可以使用通配符来包含多个配置文件。任何语句都可能被放在这些配置文件的任何一个文件中。修改过的主配置文件只在 Apach2 启动或重启时才能被其识别。
服务器也查看包含 mime 文档类型的文件;该文件名通过 TypesConfig 设置,缺省情况下是mime.types。
缺省的 Apache2 配置文件是 /etc/apache2/apache2.conf。您可以编辑该文件以配置 Apache2 服务器。您可以配置端口号、文档根目录、模块、日志文件及虚拟主机等。
本部分内容说明 Apache2 服务器基本的配置参数。详情请参阅 Apache2 文档
您也可能要您的网站响应 www.ubunturocks.com 的请求,因为许多用户会假定 www 前缀是适当的。可以使用 ServerAlias 语句来解决这个问题。您也可以在 ServerAlias 中使用通配符。例如,ServerAlias *.ubunturocks.com 将使您的网站响应任何域名以 .ubunturocks.com 结尾的请求。
/etc/apache2/sites-available 目录并 不会 被 Apache2 解析。在 /etc/apache2/sites-enabled 的软链接指向 "可用的" 站点。使用 a2ensite (Apache2 启用站点) 工具可以创建这些软链接,如:sudo a2ensite mynewsite 这里您站点的配置文件是 /etc/apache2/sites-available/mynewsite。同样,a2dissite 工具将用来禁用站点。
这部分内容说明 Apache2 服务器缺省设置的配置。举个例子,如果您添加一个虚拟主机,您为该虚拟主机配置的设置将优先于缺省虚拟主机。如果在该虚拟主机的设置中有个语句没有定义,那么将使用缺省值。
例如,当一个用户请求 http://www.example.com/this_directory/ 页时,他或她要么得到 DirectoryIndex 页,如果它存在的话;要么得到一个服务器生成的目录列表,如果它不存在且设置了 Indexes 选项的话;要么就得到一个无权访问页,如果它不存在且没有设置 Indexes 选项的话。服务器尝试找到在 DirectoryIndex 语句中所列文件之一,并返回它所找到的第一个。如果它没有找到任何一个文件且该目录设置了 Indexes 选项,服务器将生成并返回一个 HTML 格式的列表,包括该目录中的子目录和文件。缺省值可以在 /etc/apache2/apache2.conf 文件中找到,是 " index.html index.cgi index.pl index.php index.xhtml"。因此,如果 Apache2 在所请求的目录中找到任何一个匹配这些名字的文件,第一个将被显示。
...
在 Directory 段中的 Options 语句接受一个或更多下面的用空格分隔的值 (包括其它):
大多数文件不会作为 CGI 脚本运行的。这是非常危险的。CGI 脚本应该位于您 DocumentRoot 目录以外与之分开的目录中,并且只能该目录才有 ExecCGI 选项设置。缺省状态下,CGI 脚本默认位于 /usr/lib/cgi-bin。
虚拟主机允许您在同一台机器上相对不同的 IP 地址、主机名或不同端口号运行不同的服务器。例如,您可以运行使用虚拟主机在同一个 Web 服务器上运行网站 http://www.example.com 和 http://www.anotherexample.com。这一选项适用于缺省虚拟主机和基于 IP 的虚拟主机的
虚拟主机的语句设置仅应用于特定的虚拟主机。如果一个语句在服务器范围中设置而没有在虚拟主机设置中定义,那么将使用缺省设置。例如,您可以定义网络管理员的邮件地址而无需为每个虚拟主机都分别定义邮件地址。
为虚拟主机设置 DocumentRoot 语句到包含根文档 (如 index.html) 目录。缺省的 DocumentRoot 是 /var/www。
在 VirtualHost 段中的 ServerAadmin 语句是指用于错误页的页脚中的邮件地址,如果您想在错误页的页脚显示邮件地址的话。
这部分内容说明如何配置基本的服务器设置。
LockFile - 当服务器编译时使用了 USE_FCNTL_SERIALIZED_ACCEPT 或 USE_FLOCK_SERIALIZED_ACCEPT 参数时,使用 LockFile 语句来设置 lockfile 的路径。它必须保存在本地磁盘上,它应该设置成缺省值,除非日志目录被定位在 NFS 共享上。如果是这种情况,缺省值应该被改为本地磁盘的位置并且其目录只对 root 用户可读。
PidFile - PidFile 语句设置服务器记录其进程 ID (pid) 的文件。该文件只对 root 用户可读。在大多数情况下,应该保留其缺省值。
User - 用户语句设置被服务器用于回应请求的用户 ID。该设置决定服务器的权限。一些该用户无法访问的文件也无法被您网站的访问者访问。用户缺省值是 www-data。
除非您的确知道您在做什么,否则请不要将 User 设为 root 用户。用 root 作为 User 的值将会在您的 Web 服务器中产生极大的安全漏洞。
Group 语句同 User 语句相似。Group 设置被服务器用于回应请求的用户组。缺省的组也是 www-data。
Apache 是一个模块化的服务器。这就意味着在核心服务器中只包括最基本的功能。扩展功能可以通过被引导进 Apache 的模块来实现。缺省情况下,基本模块是在编译时被包含进服务器的。如果服务器编译成可以动态引导模块,那么模块可以单独编译,并在任何时候使用 LoadModule 语句来添加。否则,Apache 必须在添加或删除模块时重新编译。Ubuntu 编译 Apache2 时是允许动态引导模块的。配置语句通过将已有模块放置
sudo apt-get install libapache2-mod-auth-mysql
一旦您安装了模块,模块将出现在 /etc/apache2/mods-available 目录中。您可以使用 a2enmod 命令来启用模块。您也可以使用 a2dismod 命令来禁用模块。一旦您启用该模块,该模块将在 /etc/apache2/mods-enabled 目录中出现。
The mod_ssl 模块为 Apache2 服务器添加了一个重要的功能 - 通讯加密的能力。因此,当您的浏览器要用 SSL 加密通讯时,需要在浏览器导航栏中在输入的统一资源定位器 (URL) 的开始处使用 https:// 前缀。
mod_ssl 模块已经包含在 apache2-common 软件包中。如果您安装该软件包,您可以在终端提示符之后执行下列命令启用 mod_ssl 模块:
sudo a2enmod ssl
要设置您的安全服务器,使用公共钥创建一对公钥私钥对。大多数情况下,您发送您的证书请求 (包括您的公钥),您公司证明材料以及费用到一个证书颁发机构 (CA)。CA 检证证书请求及您的身份,然后将证书发回您的安全服务器。
还有种办法就是您可以创建您自己签署的证书。然而请注意自己签置的证书不应该用于生产环境。自已签署的证书不会被用户浏览器自动接受。浏览器将提示用户接受证书并创建一个安全的连接。
一旦您有一个自己签署的证书或一个您选择的 CA 签署的证书,您需要将它安装在您的安全服务器上。
您需要一个钥匙和一个证书来操作您的安全服务器,这意味着您可以生成自己签署的证书或购买 CA 签署的证书。由 CA 签署的证书为您的服务器提供两个重要的功能:
多数支持 SSL 的 Web 浏览器都有一个 CA 列表,它们的证书会被自动接受。如果一个浏览器遇到一个其授权 CA 并不在列表中的证书,浏览器将询问用户是否接受或拒绝连接。
您可以为您的安全服务器生成一个自己签署的证书,但要知道自己签署的证书并不提供与 CA 签署的证书相同的功能。自己签署的证书不会被多数 Web 浏览器自动识别,而且自己签署的证书也不为任何提供网站的组织提供担保。CA 签署的证书为安全服务器提供所有这些重要的功能。从 CA 得到证书的过程相当容易。下面简要介绍一下:
一旦您选定一家 CA,您需要根据他们所提供的规程来从他们那里获得证书。
无论您是从一家 CA 那儿获得证书或是生成您自己签署的证书,第一步就是生成钥匙。
要生成证书签署请求 (CSR),您应该创建您自己的钥匙。您可以在终端提示符后运行以下命令以创建钥匙:
openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus .....................++++++ .................++++++ unable to write 'random state' e is 65537 (0x10001) Enter pass phrase for server.key:
您现在可以输入您的 passphrase。为了最大程度的安全,它至少应该包含八个字符。当指定 -des3 时最小长度为四个字符。它应该包含数字和/或标点符号,并且不应该是字典中的单词。也请记住您的 passphrase 是大小写敏感的。
再次输入 passphrase 核对。一旦您再次输入正确的话,服务器密钥就生成了并保存在 server.key 文件中。
您也可以不用 passphrase 来运行您的安全 Web 服务器。这样比较方便,因为在您启动您的安全 Web 服务器时您不需要每次都输入 passphrase。但它也是相当不安全的,钥匙的风险也同样意味着服务器的风险。
在任何情况下,您都可以选择不用 passphrase 来运行您的安全 Web 服务器,这可以通过在生成时不带 -des3 参数来实现或者通过在终端提示符后执行以下命令:
openssl rsa -in server.key -out server.key.insecure
一旦您运行上述命令,不安全的钥匙将被保存在 server.key.insecure 文件中。您可以使用该文件来生成没有 passphrase 的 CSR。
要创建 CSR,可以在终端提示符后运行以下命令:
openssl req -new -key server.key -out server.csr
它将提示您输入 passphrase。如果您输入正确的 passphrase,它将提示您输入公司名、站点名、邮件ID等。一旦您输入了所有内容,您的 CSR 将被创建并被保存在 server.csr 文件中。您可以提交该 CSR 文件给一家 CA 去处理。CA 将使用该 CSR 并颁发证书。但是,您也可以使用该 CSR 生成自己签署的证书。
要创建自己签署的证书,在终端提示符下运行以下命令:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
上述命令将提示您输入 passphrase。一旦您输入正确的 passphrase,您的证书将被创建并将保存在 server.crt 文件中。
如果您的安全服务器被用在生产环境中,你也许需要 CA 签署的证书。并不推荐使用自己签署的证书。
您可以安装钥匙文件 server.key 和证书文件 server.crt 或由您的 CA 颁发的证书文件,在终端提示符后运行以下命令:
sudo cp server.crt /etc/ssl/certs sudo cp server.key /etc/ssl/private
您要添加以下四行到 /etc/apache2/sites-available/default 文件或您安全虚拟主机的配置文件。您要将它们放在 VirtualHost 部分。他们应该放在 DocumentRoot 行下面:
SSLEngine on SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire SSLCertificateFile /etc/ssl/certs/server.crt SSLCertificateKeyFile /etc/ssl/private/server.key
HTTPS 在 443 端口监听。您可以将下面一行添加到 /etc/apache2/ports.conf 文件中:
Listen 443
一旦您安装了您的证书,您应该重启您的 Web 服务器。您可以在终端提示符后运行以下命令以重启您的 web 服务器:
sudo /etc/init.d/apache2 restart
您应该记住并在每次您启动您的安全 web 服务器时输入 passphrase。
您将被提示输入 passphrase。一旦您输入正常的 passphrase,将启动安全 web 服务器。您可以通过在您的浏览器地址栏上输入 https://your_hostname/url/ 来访问安全服务器的页面。
Apache2 文档
Mod SSL 文档
Squid 是一个全功能的 web 代理与缓存服务器应用程序,它为超文本传输协议 (HTTP)、文件传输协议 (FTP) 以及其他流行网络协议提供代理和缓存服务。Squid 可以实现安全套接层 (SSL) 请求的缓存和代理、域名服务器 (DNS) 的缓存以及进行传输缓存。Squid 也支持大量不同的缓存协议,如 Internet 缓存协议 (ICP)、超文本缓存协议 (HTCP)、缓存阵列路由协议 (CARP) 以及 Web 缓存协同协议 (WCCP)。
Squid 代理缓存服务器对于不同的代理和缓存服务器需求来说是一个极好的解决方案,它适用于从分支机构到企业级的网络,访问控制机制的粒度以及通过简单网络管理协 议 (SNMP) 对临界参数的监视。当选择计算机系统用于 Squid 代理或缓存服务器时,请确保您的系统配置大量的物理内存以便 Squid 可以使用内存进行缓存以提高性能。
在终端提示符后输入下列命令安装 Squid 服务器:
sudo apt-get install squid squid-common
Squid 可以通过编辑在 /etc/squid/squid.conf 配置文件中的语句来进行配置。下面的范例说明一些语句的修改可能对 Squid 服务器的影响。更多 Squid 的配置可以参阅参考章节。
在编辑配置文件之前,您应该生成一份原始文件副本并对其进行写保护,以便您可以将原始文件作为参考并在必要时重用它。
要拷贝 /etc/squid/squid.conf 文件并对其进行写保护,可以在终端提示符后使用以下命令:
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original sudo chmod a-w /etc/squid/squid.conf.original
http_port 8888
visible_hostname weezie
将下列语句添加到您 /etc/squid/squid.conf 文件 ACL 部分的 底部: acl fortytwo_network src 192.168.42.0/24
然后添加下列语句到你 /etc/squid/squid.conf 文件 http_access 部分的 顶部: http_access allow fortytwo_network
将下列语句添加到您 /etc/squid/squid.conf 文件 ACL 部分的 底部: acl biz_network src 10.1.42.0/24 acl biz_hours time M T W T F 9:00-17:00
然后添加下列语句到你 /etc/squid/squid.conf 文件 http_access 部分的 顶部: http_access allow biz_network biz_hours
在修改 /etc/squid/squid.conf 文件后,保存该文件并重启 squid 服务器应用程序以使改动生效。可以在终端提示符后使用下列命令:
sudo /etc/init.d/squid restart
Squid 网站
版本控制是管理改动信息的技术。它对于程序员而言一直是重要的工具,他们经常花时间对程序进行小改动之后又在第二天改回来。但版本控制软件的用途却远远超出了软件开发的界线。无论何处您可以发现人们使用计算机去管理那些经常变动的信息,那里都有使用版本控制的空间。
Subversion 是一个开源的版本控制系统。使用 Subversion,您可以记录源文件和文档的历史。它管理文件和目录。文件树被放入了中心库中。库更象是一个普通的文件服务器,除了它可以记住对文件和目录的每次改变。
要通过 HTTP 协议来访问 Subversion 库,您必须安装和配置一个 web 服务器。Apache2 被证明可以和 Subversion 一起工作。请参考 Apache2 章节的 HTTP 小节以安装和配置 Apache2。要使用 HTTPS 协议访问 Subversion 库,您必须在您的 Apache2 web 服务器上安装和配置数字证书。请参考 Apache2 章节的 HTTPS 小节以安装和配置数据证书。
要安装 Subversion,可以在终端提示符后运行以下命令:
sudo apt-get install subversion libapache2-svn
这一步假定您已经在您的系统上安装了上面提及的包。本部分内容说明如何创建一个 Subversion 库和访问项目。 创建 Subversion 库
Subversion 库可以在终端提示符后使用以下命令创建:
svnadmin create /path/to/repos/project
Subversion 库可以通过许多不同的方式如通过在本地磁盘或不同的网络协议来访问 (checked out)。然而,库的位置经常是一个 URL。下表描述了不同的URL模式如何映射相应的访问方式。 表 4-1 访问方式
模式 | 访问方式 |
file:// | 直接访问库 (在本地磁盘) |
http:// | 通过 WebDAV 协议访问带有 Subversion 的 Apache2 web 服务器。 |
https:// | 与 http:// 相同,但有 SSL 加密 |
svn:// | 通过自身协议访问 svnserve 服务 |
svn+ssh:// | 与 svn:// 一样,但使用 SSH 遂道 |
在本部分,我们将看到如何为所有这些访问方式来配置 Subversion。这里,我们只介绍基本用法。更多详细、高级用法请参阅svn 书
这是所有访问方式中最简单的。它不要求运行任何 Subversion 服务器进程。该访问方式用于在同一台机器上访问 Subversion。在终端提示符后输入的命令如下所示:
svn co file:///path/to/repos/project
或
svn co file://localhost/path/to/repos/project
如果您没有指定主机名,则需要三个斜杠 (///) -- 其中两个是协议的 (这里是 file),另一个是路径前的。如果您指定了主机名,那么您必须使用双个斜杠 (//)。
库权限依赖于文件系统的权限。如果用户有读/写权限,他可以从库中检出或者提交到库。
要通过 WebDAV 协议访问 Subversion,您必须配置您的 Apache2 web 服务器。您必须在您的 /etc/apache2/apache2.conf 文件中添加下面一小段:
DAV svn SVNPath /path/to/repos AuthType Basic AuthName "Your repository name" AuthUserFile /etc/subversion/passwd Require valid-user
接下来,您必须创建 /etc/subversion/passwd 文件。该文件包含用户认证细节。要添加一个条目,如添加一个用户,您可以在终端提示符后运行下列命令:
htpasswd2 /etc/subversion/passwd user_name
该命令将提示您输入密码。一旦您输入密码。该用户将被添加。现在您可以运行下列命令来访问库:
svn co http://servername/svn
该密码是以纯文本传输的。如果您担心密码被截取,建议您使用 SSL 加密。相关细节,请参考下一章节。
通过带 SSL 加密的 WebDAV 协议 (https:// ) 访问也使用 http:// 类似,只是您必须在您的 Apache2 web 服务器中安装和配置数字证书。
您可以安装由证书签署机构如 Verisign 颁发的数字证书。或者,您也可以安装自己签署的证书。
这一步假设您已经在您的 Apache2 web 服务器中安装和配置了数字证书。现在要访问 Subversion 库,请参考上一章节!除了所用协议之外访问方式完全相同。您必须使用 https:// 来访问 Subversion 库。
一旦 Subversion 库被创建,您就可以配置访问控制了。您可以通过编辑 /path/to/repos/project/conf/svnserve.conf 文件来配置访问控制了。例如,要设置认证,您可以在配置文件中反注释下列行:
在反注释上面几行之后,您可以在 passwd 文件中维护用户列表。因此编辑同一目录中的文件 passwd 并添加新用户。其语法如下:username = password 更多细节,请参考该文件。
现在要从本机或不同机器通过 svn:// 自身协议来访问 Subversion,您可以使用 svnserve 命令来运行 svnserver。其语法如下:
$ svnserve -d --foreground -r /path/to/repos For more usage details, please refer to: $ svnserve --help一旦您运行该命令,将启动 Subversion 并在缺省端口 (3690) 监听。要访问项目库,您必须在终端提示符后运行下列命令:
svn co svn://hostname/project project --username user_name根据服务器的配置,出现密码提示。一旦您认证通过,将从 Subversion 库检出代码。要让本地副本同步项目库,您可以运行 update 子命令。在终端提示符后的命令语法如下所示:
cd project_dir ; svn update关于 Subversion 子命令的更多细节,您可以参考手册。如为了学到关于 co (checkout) 命令的细节,请在终端提示符后运行下列命令:
svn co help
[编辑 ] = 4.12.1.3.5. 通过带有 SSL 加密的自身协议 (svn+ssh://) 访问 =
配置和服务器处理与用 svn:// 方式是相同的。详情请参考上面的章节。这一步假定您已经完成了上面的步骤并用 svnserve 命令启动了 Subversion 服务器。
它也假定 ssh 服务器已经在该机上运行并允许连接。为了确认,请尝试使用 ssh 登录该机器。如果您可以登录,一切就绪。如果不能登录,请在继续之前解决它。
svn+ssh:// 协议使用 SSL 加密来访问 Subversion 库。使用这种方式进行的数据传输是加密的。要访问项目库 (如 checkout),您必须使用下面的命令语法:
svn co svn+ssh://hostname/var/svn/repos/project使用这种访问方式您必须使用全路径 (/path/to/repos/project) 来访问 Subversion 库。
根据服务器配置,它将提示输入密码。在使用 ssh 登录时您必须输入密码。一旦您被认证通过之后,它将从 Subversion 库中检出代码。
[编辑 ] 4.12.2. CVS 服务器
CVS 是一个版本控制系统。您可以使用它来记录源文件的历史。
[编辑 ] 4.12.2.1. 安装
在终端提示符后输入下列命令来安装 cvs:
sudo apt-get install cvs在您安装 cvs之后,您将安装 xinetd 来启动和停用 cvs 服务器。在提示符后输入下列命令以安装 xinetd:
sudo apt-get install xinetd
[编辑 ] 4.12.2.2. 配置
一旦您安装 cvs,将会自动初始化库。缺省状态下,库存放在 /var/lib/cvs 目录下。您可以通过运行以下命令来改变该路径:
cvs -d /your/new/cvs/repo init一旦库开始建立,您可以配置 xinetd 来启动 CVS 服务器。您可以拷贝以下行到 /etc/xinetd/cvspserver 文件。
service cvspserver { port = 2401 socket_type = stream protocol = tcp user = root wait = no type = UNLISTED server = /usr/bin/cvs server_args = -f --allow-root /var/lib/cvs pserver disable = no }如果你改变缺省的库目录 (/var/lib/cvs) 那么您必须要编辑库。
一旦您配置好 xinetd ,您就可以运行以下命令来启动 cvs 服务器了:
sudo /etc/init.d/xinetd start您可以执行以下命令来确定 CVS 服务器正在运行:
sudo netstat -tap | grep cvs当您运行该命令时,您可以看到类似下面的行:
tcp 0 0 *:cvspserver *:* LISTEN在这里您可以继续添加用户,添加新的项目以及管理 CVS 服务器
CVS 允许用户添加独立于 OS 安装的用户。也许最容易的方式就是让 CVS 使用 Linux 的用户,虽然它有潜在的安全隐患。详细请参考 CVS 手册。
[编辑 ] 4.12.2.3. 添加项目
本部分内容说明如何在 CVS 库中添加新项目。创建目录以及该目录所需的文档和源文件。现在运行下列命令将该项目添加到 CVS 库中:
cd your/project cvs import -d :pserver:[email protected]:/var/lib/cvs -m "Importing my project to CVS repository" . new_project start您可以使用 CVSROOT 环境变量来保存 CVS 根目录。一旦您导出 CVSROOT 环境变量,您可以在上面的 cvs 命令中避免使用 -d 选项。
字符串 new_project 是一个 vendor 标签,start 是一个版本标签。它们在此没有任何用处,但由于 CVS 要求要有它们,所以它们必须出现。
当您新添项目时,您所用的 CVS 用户必须对 CVS 库 (/var/lib/cvs) 有写权限。缺省状态下,src 组有对 CVS 库的写权限,因此,您可以添加用户到该组,然后就该用户就可以在 CVS 库中添加和管理项目了。
[编辑 ] 4.12.3. 引用
Subversion 主页
Subversion 书 (使用Subversion进行版本控制)
CVS 手册
[编辑 ] 数据库
Ubuntu 提供两个数据库服务器。它们是:
它们位于主软件库中。该部分内容说明如何安装和配置这些数据库服务器。
MySQL 是一个快速、多线程、多用户、强大的 SQL 数据库服务器。它旨在成为能用于大型应用、高负载的生产系统以及大规模部署的软件。
要安装 MySQL,可以在终端提示符后运行下列命令:
sudo apt-get install mysql-server mysql-client
一旦安装完成,MySQL 服务器应该自动启动。您可以在终端提示符后运行以下命令来检查 MySQL 服务器是否正在运行:
sudo netstat -tap | grep mysql
当您运行该命令时,您可以看到类似下面的行:
tcp 0 0 localhost.localdomain:mysql *:* LISTEN -
如果服务器不能正常运行,您可以通过下列命令启动它:
sudo /etc/init.d/mysql restart
缺省状态下,管理员密码是没有设置的。一旦您安装了 MySQL,您必须要做的第一件事就是配置 MySQL 的管理员密码。要做到这一点,可以运行以下命令:
sudo mysqladmin -u root password newrootsqlpassword sudo mysqladmin -u root -h localhost password newrootsqlpassword
您可以编辑 /etc/mysql/my.cnf 文件来进行基本设置 -- 日志文件、端口号等。详情请参考 /etc/mysql/my.cnf 文件。
PostgreSQL 是一个面向对象的数据库系统,它有着传统商业数据库系统和下一代 DBMS 系统所增进的功能。
要安装 PostgreSQL,可以在命令提示符后运行下列命令:
sudo apt-get install postgresql
一旦安装完成,您就要按您的需要配置 PostgreSQL 服务器,尽管缺省配置已经可以使它可以正常运行了。
缺省状态下,通过 TCP/IP 的连接是被禁用的。PostgreSQL 支持多客户认证方式。其中 IDENT 认证方式被默认使用。请参考 PostgreSQL 管理员指南。
接下来的讨论假定您希望启用 TCP/IP 连接并对客户认证使用 MD5 模式。PostgreSQL 配置文件被保存在 /etc/postgresql/
要配置 ident 认证,请在 /etc/postgresql/7.4/main/pg_ident.conf 文件中添加。
要启用 TCP/IP 连接,编辑文件 /etc/postgresql/7.4/main/postgresql.conf。
找到 #tcpip_socket == false 行并将其改为 tcpip_socket == true。如果您知道您正在做什么,那么您也可以编辑其他所有参数。详情请参考配置文件或 PostgreSQL 文档。
缺省状态下,没有为 MD5 客户端认证设置用户证书。因此,首先必须将 PostgreSQL 服务器配置成使用 trust 客户端认证,用以连接数据库。配置密码并将配置恢复成使用 MD5 客户端认证。要启用 trust 客户端认证,可编辑文件 /etc/postgresql/7.4/main/pg_hba.conf
注释所有使用 ident 和 MD5 客户端认证的行并添加下列行:
local all postgres trust sameuser
然后运行下列命令启动 PostgreSQL 服务器:
sudo /etc/init.d/postgresql start
一旦 PostgreSQL 服务器成功启动,在终端提示符后运行下面的命令以连接缺省的 PostgreSQL 模板数据库。
psql -U postgres -d template1
上面的命令是以用户 postgres 的身份连接 PostgreSQL 的 template1 数据库。一旦您连到 PostgreSQL 服务器,您将会在 SQL 提示符下。您可以在 psql 提示符中运行下列命令来为用户 postgres 配置密码。
template1=# ALTER USER postgres with encrypted password 'your_password';
在配置密码后,编辑文件 /etc/postgresql/7.4/main/pg_hba.conf 以使用 MD5 认证:
注释掉最近添加的 trust 行并添加下面行:
local all postgres md5 sameuser
无论如何上面配置并不完整。更多的配置参数请参考 PostgreSQL 管理员指南。
在网络或 Internet 上从一个人得到邮件给另一个人的处理过程包含许多系统的协同工作。这些系统中的每一个都必须配置正确以便可以正常工作。发送者使用一个 邮件用户代理 (MUA),或邮件客户端通过一个或多个 邮件传输代理 (MTA) 来发送信息,最后一个将信息送到 邮件投递代理 (MDA) 以便将其投递到接受者的收件箱中。该信息将会被接受者邮件客户端检索到,通常是通过 POP3 或 IMAP 服务器。
Postfix 是 Ubuntu 中缺省的邮件传输代理 (MTA)。它试图变得快捷、易于管理和安全。它与 MTA sendmail 兼容。这部分内容说明如何安装和配置 postfix。还说明如何将它设置成使用安全连接的 SMTP 服务器 (为了安全发送邮件)。
要安装带有 SMTP-AUTH 和 传输层安全 (TLS) 的 postfix,运行下列命令:
sudo apt-get install postfix
当安装进程提问时简单地按回车,下面将详细说明相关配置。
要配置 postfix,运行下列命令:
sudo dpkg-reconfigure postfix
用户界面将显示。在每一屏中,选择下列值:
**** Ok **** Internet 站点 **** NONE **** mail.example.com **** mail.example.com, localhost.localdomain, localhost **** No **** 127.0.0.0/8 **** Yes **** 0 **** + **** 全部
把 mail.example.com 作为您的邮件服务器的主机名。
下一步是为 postfix 的 SMTP AUTH 配置使用 SASL。与其直接编辑配置,不如使用 postconf 命令配置所有 postfix 参数。配置参数被保存在 /etc/postfix/main.cf 文件中。如果您希望更新配置一项参数,您可以运行命令或手工在文件中修改。
postconf -e 'smtpd_sasl_local_domain =' postconf -e 'smtpd_sasl_auth_enable = yes' postconf -e 'smtpd_sasl_security_options = noanonymous' postconf -e 'broken_sasl_auth_clients = yes' postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination' postconf -e 'inet_interfaces = all' echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf
openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 chmod 600 smtpd.key openssl req -new -key smtpd.key -out smtpd.csr openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt openssl rsa -in smtpd.key -out smtpd.key.unencrypted mv -f smtpd.key.unencrypted smtpd.key openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650 mv smtpd.key /etc/ssl/private/ mv smtpd.crt /etc/ssl/certs/ mv cakey.pem /etc/ssl/private/ mv cacert.pem /etc/ssl/certs/
您可以从证书颁发机构得到数字证书。或者您可以创建您自己的证书。详情参考 第4.10.3.4节 ― 创建一个自己签署的证书。
postconf -e 'smtpd_tls_auth_only = no' postconf -e 'smtp_use_tls = yes' postconf -e 'smtpd_use_tls = yes' postconf -e 'smtp_tls_note_starttls_offer = yes' postconf -e 'smtpd_tls_key_file = /etc/ssl/private/smtpd.key' postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt' postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem' postconf -e 'smtpd_tls_loglevel = 1' postconf -e 'smtpd_tls_received_header = yes' postconf -e 'smtpd_tls_session_cache_timeout = 3600s' postconf -e 'tls_random_source = dev:/dev/urandom' postconf -e 'myhostname = mail.example.com'
在您运行所有命令之后,postfix 的 SMTP AUTH 将被配置。将为 TLS 创建自己签署的证书并与 postfix 一起配置。
现在文件 /etc/postfix/main.cf 看上去就象 这样。
postfix 初始配置完成。运行下列命令以开始 postfix 守护程序:
sudo /etc/init.d/postfix start
现在 postfix 已经被安装、配置及成功运行。Postfix 支持在 RFC2554 中定义的 SMTP AUTH。它基于 SASL。无论如何在您使用 SMTP 之前必须设置 SASL 认证。
libsasl2、sasl2-bin 和 libsasl2-modules 对于使用 SASL 的 SMTP AUTH 是必需的。如果您没有安装它们的话,您可以安装这些应用程序。
apt-get install libsasl2 sasl2-bin
要让其正常工作的话做一些改动是必须的。因为 Postfix 是被 chroot 在 /var/spool/postfix 中运行,SASL 需要被配置在假根目录中运行 (从 /var/run/saslauthd 到 /var/spool/postfix/var/run/saslauthd):
mkdir -p /var/spool/postfix/var/run/saslauthd rm -rf /var/run/saslauthd
要激活 saslauthd,编辑文件 /etc/default/saslauthd,并修改或添加 START 变量。为了将 saslauthd 配置成在假根目录中运行,添加 PWDIR、PIDFILE 和 PARAMS 变量。最终,随您所好配置 MECHANISMS 变量。该文件看起来象这样:
START=yes PWDIR="/var/spool/postfix/var/run/saslauthd" PARAMS="-m ${PWDIR}" PIDFILE="${PWDIR}/saslauthd.pid" MECHANISMS="pam"
如果您喜欢,您可以使用 shadow 代替 pam。这将使用 MD5 哈希密码传输并更为安全。需要认证的用户名和密码将是您正在服务器上使用系统的那些用户。
接下来更新 /var/spool/portfix/var/run/saslauthd 的 dpkg "state"。saslauthd 初始化脚本将使用该设置来创建有着适当权限和所有权的目录:
dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd
SMTP AUTH 配置完成。现在是启动并测试设置的时候了。您可以运行下列命令来启动 SASL 守护程序:
sudo /etc/init.d/saslauthd start
要查看 SMTP-AUTH 和 TLS 是否正常工作,运行下列命令:
telnet mail.example.com 25
在您建立到 postfix 邮件服务器连接之后,输入:
ehlo mail.example.com
如果您看到包括下列行时,那么一切工作正常。输入 quit 退出。
250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250 8BITMIME
Exim4 是另一个由剑桥大学开发的用于连接 Internet 的 Unix 系统上的消息传输代理 (MTA)。安装Exim可以代替 sendmail,虽然 exim 的配置与 sendmail 是非常不同。
要安装 exim4,运行下列命令:
sudo apt-get install exim4 exim4-base exim4-config
要配置 exim4,运行下列命令:
sudo dpkg-reconfigure exim4-config
用户界面将显示。该用户界面让您配置许多参数。例如,在 exim4 中配置文件被分成多个文件。如果您希望将它们放在一个文件中,您可以根据该用户界面进行配置。
您在用户界面配置的所有参数被保存在 /etc/exim4/update-exim4.conf.conf 文件。如果您希望重新配置,您可以重新运行配置向导或用您喜欢的编辑器手工编辑该文件。一旦您配置好了,您可以运行下列命令来生成主配置文件:
sudo update-exim4.conf
生成主配置文件且被保存在 /var/lib/exim4/config.autogenerated.
在任何时候,你都不要手工编辑主配置文件 /var/lib/exim4/config.autogenerated。它在每次您运行 update-exim4.conf 之后会自动更新。
您可以运行下列命令以启动 exim4 守护程序。
sudo /etc/init.d/exim4 start
TODO: 该内容将覆盖 exim4 的 SMTP AUTH 配置。
Dovecot 是一个主要出于安全考虑编写的邮件投递代理。它支持主要收件箱格式:mbox 或 Maidir。这部分说明如何将它设为一个 imap 或 pop3 服务器。
要安装 dovecot,在命令提示符中运行下列命令:
sudo apt-get install dovecot-common dovecot-imapd dovecot-pop3d
要配置 dovecot,您可以编辑文件 /etc/dovecot/dovecot.conf。您可以选择您所使用的协议。它可以是 pop3、pop3 (安全 pop3)、imap 和 imaps (安全 imap)。对这些协议的说明是超出该指南范围的。更多信息请参考 wikipedia 关于 POP3 和 IMAP 的文章。
IMAPS 和 POP3S 比简单 IMAP 和 POP3 更安全,因为他们使用 SSL 加密连接。一旦您选择了协议,修改在文件 /etc/dovecot/dovecot.conf 中的下列行:
protocols = pop3 pop3s imap imaps
当 dovecot 启动时协议开始生效。接下来在文件 /etc/dovecot/dovecot.conf 的 pop3 部分添加下列行:
pop3_uidl_format = %08Xu%08Xv
然后选择您所用的收件箱。Dovecot 支持 maildir 和 mbox 格式。大多数通常使用 mailbox 格式。它们都有自己的优点,并且在 dovecot 网站 上讨论。
一旦您选择了您的收件箱格式后,就可以编辑文件 /etc/dovecot/dovecot.conf 并修改下列行:
default_mail_env = maildir:~/Maildir # (for maildir)
或
default_mail_env = mbox:~/mail:INBOX=/var/spool/mail/%u # (for mbox)
如果接收到的邮件类型与您已经配置不同,那么您要配置您的邮件传输代理 (MTA) 用来将该邮件传输到这种类型的收件箱中。
一旦您已经配置好了 dovecot,启动 dovecot 守护程序以测试您的设置:
sudo /etc/init.d/dovecot start
如果您启用 imap 或 pop3,您也可以试着用命令 telnet localhost pop3 或 telnet localhost imap2 登录。如果您看到类似下面的东西,那么安装就成功了:
bhuvan@rainbow:~$ telnet localhost pop3 Trying 127.0.0.1... Connected to localhost.localdomain. Escape character is '^]'. +OK Dovecot ready.
要配置 dovecot 使用 SSL,您可以编辑文件 /etc/dovecot/dovecot.conf 并修改下列行:
ssl_cert_file = /etc/ssl/certs/dovecot.pem ssl_key_file = /etc/ssl/private/dovecot.pem ssl_disable = no disable_plaintext_auth = no
当您安装 dovecot 时,会通过它自动创建 cert 和 key 文件。请注意这些钥匙没被签名并会在客户端连接时给出 "bad signature" 的错误。要避免这一点,您可以使用商业证书,甚至更好,使用您自己签署的 SSL 证书。
要从另一台计算机访问您的邮件服务器,您必须配置您的防火墙以允许连接服务器必要的端口。
**** IMAP - 143 **** IMAPS - 993 **** POP3 - 110 **** POP3S - 995
Mailman 是一个管理电子邮件讨论及电子通讯列表的开源程序。许多开源的邮件列表 (包括所有的 Ubuntu 邮件列表)使用 Mailman 作为他们的邮件列表软件。它是强大的且易于安装和维护。
Mailman 为管理员和用户提供一个 web 界面。因此,它要求 apache 要有 mod_perl 的支持。Mailman 使用外部邮件服务器来发送和接收邮件。它可以与下列邮件服务器很好的工作:
我们将看到如何安装 mailman、apache web 服务器和 Exim 邮件服务器。如果您希望安装 mailman 和一个不同的邮件服务器,请参考参考部分。
要安装 apache2 您可以参考 第4.10.1节 ― 安装。
要安装 Exim4 您可以在终端提示符后运行下列命令:
sudo apt-get install exim4 sudo apt-get install exim4-base sudo apt-get install exim4-config
一旦安装好 exim4,配置文件被保存在 /etc/exim4 目录中。缺省情况下,在 ubuntu 中,exim4 配置文件被分成不同的文件。您可以通过配置 /etc/exim4/update-exim4.conf 中的下列变量来改变这一现状:
要安装 Mailman,在终端提示符后运行下列命令:
sudo apt-get install mailman
它复制安装文件到 /var/lib/mailman 目录,将 CGI 脚本安装到 /usr/lib/cgi-bin/mailman目录,创建 list linux 用户,创建 list linux 用户组。mailman 进程将以该用户运行。
本节假定您已经成功安装 mailman、apache2 和exim4。现在您只需要配置它们。
一旦 apache2 安装之后,您可以在 /etc/apache2/apache2.conf 文件添加下列行:
Alias /images/mailman/ "/usr/share/images/mailman/" Alias /pipermail/ "/var/lib/mailman/archives/public/"
Mailman 使用 apache2 来运行它的 CGI 脚本。mailman 的 CGI 脚本被安装在 /usr/lib/cgi-bin/mailman 目录中。因此 mailman 的 url 将是 http://hostname/cgi-bin/mailman/。如果您希望改变这一状况,您可以修改 /etc/apache2/apache2.conf 文件。
一旦 Exim4 安装之后,您可以在终端提示符后使用下列命令启动 Exim 服务器:
sudo apt-get /etc/init.d/exim4 start
为了使 mailman 可以和 exim4 一起工作,您需要配置 exim4。正如先前所说的那样,在缺省状态下 exim4 使用不同类型的多个配置文件。详情请参考 Exim 网站。要运行 mailman,我们可以新建一个配置文件到下列配置类型:
Exim 按这些小的配置文件顺序创建出一个主配置文件。因此这些配置文件的顺序是非常重要的。
所有隶属于主类别的配置文件都被保存在 /etc/exim4/conf.d/main/ 目录中。您可以将下面的内容添加到一个名为 04_exim4-config_mailman 的新文件中:
MM_HOME=/var/lib/mailman MM_UID=list MM_GID=list domainlist mm_domains=hostname.com↵ MM_WRAP=MM_HOME/mail/mailman MM_LISTCHK=MM_HOME/lists/${lc::$local_part}/config.pck
所有隶属于传输类型的文件被保存在 /etc/exim4/conf.d/transport/ 目录中。您可以将下面的内容添加到一个名为 40_exim4-config_mailman 的新文件中:
mailman_transport: driver = pipe command = MM_WRAP / '${if def:local_part_suffix / {${sg{$local_part_suffix}{-(//w+)(//+.*)?}{/$1}} } / {post}}' / $local_part current_directory = MM_HOME home_directory = MM_HOME user = MM_UID group = MM_GID
所有隶属于路由类的所有配置文件都被保存在 /etc/exim4/conf.d/router/ 目录中。您可以将下列内容添加到名为 101_exim4-config_mailman 的新文件中:
mailman_router: driver = accept require_files = MM_HOME/lists/$local_part/config.pck local_part_suffix_optional local_part_suffix = -bounces : -bounces+* : / -confirm+* : -join : -leave : / -owner : -request : -admin transport = mailman_transport
主类和传输类的配置文件的顺序可以随意。但路由类的配置文件的顺序必须相同。该文件必须在 200_exim4-config_primary 文件之前出现。如果两个配置文件包含相同类型的信息。第一个文件优先。详情请参阅参考部分。
安装 mailman 之后,您可以使用下列命令来运行它:
sudo /etc/init.d/mailman start
一旦 mailman 安装,您必须创建缺省的邮件列表。运行下列命令以创建邮件列表:
sudo /usr/sbin/newlist mailman Enter the email address of the person running the list: bhuvan at ubuntu.com Initial mailman password: To finish creating your mailing list, you must edit your /etc/aliases (or equivalent) file by adding the following lines, and possibly running the `newaliases' program: ## mailman mailing list mailman: "|/var/lib/mailman/mail/mailman post mailman" mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman" mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman" mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman" mailman-join: "|/var/lib/mailman/mail/mailman join mailman" mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman" mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman" mailman-request: "|/var/lib/mailman/mail/mailman request mailman" mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman" mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman" Hit enter to notify mailman owner... #
我们已经把 exim 配置成可以识别所有来自 mailman 的邮件。因此并不需要在 /etc/aliases 中添加任何新的条目。如果您对配置文件做了改动,请确保您在进入下一章节之前重启了这些服务。
我们假定您已经进行了缺省安装。mailman 的 cgi 脚本应该在 /usr/lib/cgi-bin/mailman/ 目录中。Mailman 提供了一个基于 web 管理工具。可以在您的浏览器输入下列 url 访问该页:
http://hostname/cgi-bin/mailman/admin
缺省的邮件列表 mailman 将出现在屏幕上。如果您点击邮件列表名,它将询问您的认证密码。如果您输入了正确的密码,您将可以改变该邮件列表的管理设置。您可以使用命令行工具 (/usr/sbin/newlist) 创建一个新的邮件列表,您也可以使用 web 界面来创建新的邮件列表。
Mailman 为用户提供了一个 web 界面,可以在您的浏览器中输入下列 url 来访问该页:
http://hostname/cgi-bin/mailman/listinfo
缺省邮件列表 mailman 将出现在屏幕上。如果您点击邮件列表名,它将显示订阅表单。您可以输入您的邮件地址、姓名 (可选)及密码来订阅。一个邀请邮件将发送给您。您可以根据该邮件的指示完成订阅。
GNU Mailman - 安装手册
指南 - 一起使用 Exim 4 和 Mailman 2.1
计算机网络通常包含不同的系统,虽然使用全由 Ubuntu 桌面计算机和服务器计算机构成的网络是有趣的,但一些网络环境还是需要 Ubuntu 和 Microsoft® Windows® 这两个系统协同工作。Ubuntu 服务器指南中的这部分内容介绍配置你 Ubuntu 服务器的原理及所用工具,以便同 Windows 计算机共享网络资源。
将你的 Ubuntu 系统与 Windows 客户机成功连网包括为 Windows 环境提供和整合常用服务。这些服务有助于网络中计算机和用户的数据和信息共享,可以将它们按功能划分为以下三大类:
幸运的是,你的 Ubuntu 系统可以给 Windows 客户机提供上述所有的服务并且在它们之间共享网络资源。你的 Ubuntu 系统中用来和 Windows 网络互连的一个基本软件是包含 SMB 服务器应用程序及其工具。Ubuntu 服务器指南的这部分将简要介绍一下 SAMBA 套件中服务器应用程序及工具的安装和简单配置。此外,SAMBA的详细文档和信息已超出了本文档的编制范围,您可以在 SAMBA 网站 上找到。
欲安装 SAMBA 服务器应用程序,请在提示符里输入如下命令:
sudo apt-get install samba
您可以通过编辑 /etc/samba/smb.conf 文件来配置 SAMBA 服务:用以改变缺省设置或新增设置。可用设置项的更多信息可以查看 /etc/samba/smb.conf 文件中的注释,或在终端提示符后输入以下命令查看 /etc/samba/smb.conf 手册来获得:
man smb.conf
在编辑配置文件之前,您应该保留一份原文件的副本,不对其作修改,以便今后必要时可参考和重用这份原始配置。
备份 /etc/samba/smb.conf 文件:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.original
然后编辑 /etc/samba/smb.conf 文件,进行相应的修改。
除了文件及打印共享服务器应用程序 SAMBA 之外,Ubuntu 还包括了其他强大的服务器应用程序,它们设计成象真正的 Windows 服务器一样,可以向 Windows 客户端提供相同的网络附加服务功能。例如,Ubuntu 可以提供统一的网络资源,如使用目录服务的计算机和用户,方便的身份识别,以及通过认证服务来获得授权的计算机和用户。
下一节将讨论 SAMBA 及其支持技术,如 Lightweight Directory Access Protocol (LDAP) 服务器和 Kerberos 认证服务器的更多细节。你也可以学到SAMBA配置文件中的一些有用的指令,以方便同 Windows 客户机和服务器集成。
Active Directory 是 Microsoft 专用的目录服务实现,用来提供网络资源和用户的共享信息。除了提供这些信息的统一源之外,Active Directory 也担任网络统一身份安全认证的角色。Active Directory 融合了通常独立、专用的目录系统中简单集成,管理和网络资源安全等功能。SAMBA 软件包可以被配置成使用由 Windows 域控制器提供的 Active Directory 服务。
LDAP 服务器应用程序给 Windows 计算机提供了与 Microsoft Active Directory 服务非常相似的目录服务功能。这些服务包括管理加入网络的计算机、用户、计算机组和用户组的身份和关系,为描述、定位和管理这些资源提供一个统一的方法。 在你的 Ubuntu 系统中所使用的是 LDAP 的一个自由有效的实现,名为OpenLDAP,这个名为slapd 和 slurpd的服务守护程序负责处理 OpenLDAP 目录请求和 LDAP 服务器与另一个 Ubuntu 服务器之间的目录数据传送。只要 SAMBA编译时加上LDAP 支持,OpenLDAP 与 SAMBA 一起就可以和Windows域服务器一样以相同的方式提供文件、打印和目录服务。
Kerberos 安全认证系统是一个通过一台集中的服务器给计算机和用户提供认证的标准服务,它允许从其他任何使用 Kerberos 的计算机那里接受加密的授权票据。Kerberos 验证的好处包括相互验证,委派验证,互操作性和简单信任管理。在 Ubuntu 中处理 Kerberos 验证和 Kerberos 数据库管理的主要服务器守护程序是 krb5kdc 和 kadmin。相对于 Windows 域控制器SAMBA 可以使用 Kerberos 作为一个用来给计算机和用户授权的机制。为了做到这些,Ubuntu 系统必须安装 Kerberos,同时 /etc/samba/smb.conf 也需要修改以选择适当的realm 和 security 模式。举个例子,编辑/etc/samba/smb.conf文件,并将下列语句:
realm = DOMAIN_NAME security = ADS
添加到文件中并保存
请确定上面示例中的 DOMAIN_NAME 已经被你的 Windows 域名所代替。
你需要重启 SAMBA 进程以使改变产生作用。重启 SAMBA 进程可以在终端提示符后输入以下命令:
sudo /etc/init.d/samba restart
目录服务中计算机帐号唯一指定网络中的计算机系统,甚至在安全方面就象对待用户一样。计算机账号可以象用户账号一样有密码,同样也象用户账号一样访 问网络资源受授权影响。举个例子,如果一个在特定网络中有着合法账号网络用户,企图给一个没有合法计算机账号的计算机上的网络资源授权时,根据网络策略, 如果用户企图验证的计算机是未经授权的计算机,则用户也许会被拒绝访问资源。
计算机帐号可以会被添加到 SAMBA 的密码文件中,首先该计算机的名字在本地密码库中做为一个合法用户帐号被添加。添加一个计算机或机器帐号到 SAMBA 的密码文件可以在终端提示符后使用 smbpasswd 命令,如下所示:
sudo smbpasswd -a -m COMPUTER_NAME
请确定示例中的 COMPUTER_NAME 被那台你希望添加机器账号的计算机实际名字所代替。
文件权限清楚地定义计算机和用户对指定的目录、文件或一组文件的权力。这些权限可以通过编辑/etc/samba/smb.conf 来定义并明确被定义文件共享的权限。举个例子,如果你定义了一个叫 sourcedocs 的 SAMBA 共享,并希望给 planning 用户组以 read-only 只读权限,但允许叫 authors 的用户组和名为 richard 的用户可以写该共享,那么你可以编辑/etc/samba/smb.conf 文件,并将下列条目放在 [sourcedocs] 条目下:
read list = @planning write list = @authors, richard
将其保存在 /etc/samba/smb.conf中,以使其生效。
另一个适合的权限就是对特定的共享资源声明 administrative 权限。有着administrative 权限的用户可以读、写或修改任何包含在用户已明确给予 administrative 权限的资源里的任何信息。举个例子,如果你想给用户 melissa 在示例 sourcedocs 共享上的 administrative 权限,你可以编辑/etc/samba/smb.conf 文件,并将下面一行添加到 [sourcedocs] 条目下:
admin users = melissa
将其保存在 /etc/samba/smb.conf中,以使其生效。
Ubuntu 中包括客户端应用以及通过 SMB 协议远程访问网络资源的能力。例如,一个名为 smbclient 的工具就可以以一种类似文件传输协议(FTP)客户端的方式访问远程共享的文件系统。以使用 smbclient 来访问在名为 bill 远程 Windows 计算机中的共享文件夹资源 documents 来做示范,在提示符后输入类似下面的命令:
smbclient //bill/documents -U
然后你将被提示输入相对于 -U 参数之后用户名的密码,当成功验证后,将出现一个提示符,在那里我们可以使用与非图形化 FTP 客户端类似的语法来操作和传输文件。smbclient 工具的详细信息可以输入以下命令来查阅该工具的手册页:
使用 SMB 协议的远程网络资源在本地挂载也可以使用 mount 命令。例如,要挂载在一个名为 development 的Windows 服务器上的一个名为 project-code 共享文件夹,并使用 dlightman 用户名挂载到你的 Ubuntu 系统的 /mnt/pcode 挂载点上,你可以在提示符后运行以下命令:
mount -t smbfs -o username=dlightman //development/project-code /mnt/pcode
然后你将被提示输入用户密码,在成功验证之后,共享资源的内容就可以通过 mount 命令中的最后一个参数所指定的本地挂载点来访问了。要卸载该共享资源,就象其他被挂载的文件系统一样只需简单的使用 umount 命令即可。例如:
umount /mnt/pcode
用户帐号定义了有一些授权来使用指定计算机和网络资源的人。通常,在网络环境中,用户帐号被提供给每个允许访问计算机或网络的人,然后这些计算机或 网络根据策略和权限来明确用户帐号拥有多大的权力。要在你的 Ubuntu 系统中定义 SAMBA 网络用户,你可能使用smbpasswd 命令。如要为你 Ubuntu 系统上名为jseinfeld 的用户添加一个 SAMBA 用户,你可以在提示符后输入命令:
smbpasswd -a jseinfeld
然后 smbpasswd 应用程序将提示你为该用户输入密码:
New SMB password:
输入你想为用户设置的密码,smbpasswd 会要求你确认密码:
Retype new SMB password:
确认密码之后,smbpasswd 将为用户在 SAMBA 密码文件中添加一个条目。
组定义了对指定网络资源拥有共同访问级别的一组计算机或用户,并提供对这些资源的访问控制粒度级别。举个例子,如果定义一个 qa 组并包含用户 freda、danika 和 rob,再定义第二个组 support 并包含 danika、jeremy 和 vincent。那么某个网络资源被配置为允许 qa 组访问时,则其可以被 freda、danika 和 rob访问,而不是 jeremy 或 vincent。因为用户 danika 属于 qa 和 support 两个组,所以她能够访问配置为两个组访问的资源,而所有其他用户则只能访问明确允许其所属组访问的资源。
当在 SAMBA 配置文件 /etc/samba/smb.conf 中定义组时,被认可的写法是在用“@”符作为组名的开始。例如,如果你希望在 /etc/samba/smb.conf 某段中定义一个名为 sysadmin 的组,那么你需要输入 @sysadmin 来作为组名。
组策略为 SAMBA 服务器定义属于域或工作组计算机帐号的 SAMBA 配置设置及其他全局设置。举个例子,如果 SAMBA 服务器属于一个名为 LEVELONE 的 Windows 计算机工作组,那么 /etc/samba/smb.conf 可以相应改成下面的值:
workgroup = LEVELONE
保存文件并重启 SAMBA 守护程序以使改变生效。
其它重要的全局策略设置包括 server string,定义了 Ubuntu 系统向基于 Windows 网络上其它机器所宣称的 NETBIOS 服务器名称。该名称也使你的 Ubuntu 系统被 Windows 客户端及其它使用 SMB 协议浏览网络的计算机所识别。而且用户还可以通过 /etc/samba/smb.conf 文件中的 log file 指令来指定 SAMBA 服务器日志文件的名称和所在位置。
还有一些可以管理全局组策略的附加指令包括对所有共享资源全局性能的说明。例如在 /etc/samba/smb.conf 中 [global] 标题下面的指令将影响所有共享资源,除非在某些共享资源标题下有覆盖全局设置的指令。你可以通过 browseable 指令来使网络中所有的客户机都能浏览全部共享。该指令使用一个布尔值,位于 /etc/samba/smb.conf 文件的 [global] 标题中。编辑该文件,并添加下面一行:
browseable = true
到 /etc/samba/smb.conf 文件的 [global] 节的下面。这样所有你 Ubuntu 系统中的共享将通过 SAMBA 被授权客户机浏览,除非该共享包含了覆盖全局指令的 browseable = false 指令。
相同方式运作的其他例子还有 public 和 writeable 指令。public 指令接受一个布尔值并决定特定的共享资源对所有客户是否可见,而无论其被授权与否。writeable 指令也采用布尔值以定义特定共享资源是否对部分或所有网络客户可写。