aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/handbook/network-servers
diff options
context:
space:
mode:
authorHiroki Sato <hrs@FreeBSD.org>2004-09-26 05:20:38 +0000
committerHiroki Sato <hrs@FreeBSD.org>2004-09-26 05:20:38 +0000
commit8f1c859fcb214c414fa6913292f585a4879d7655 (patch)
treec62e773df353dd15d663bcea872797a02a9c37cb /zh_CN.GB2312/books/handbook/network-servers
parent3e941311cb2ef8bb1151068e4f8f6ab382975287 (diff)
Notes
Diffstat (limited to 'zh_CN.GB2312/books/handbook/network-servers')
-rw-r--r--zh_CN.GB2312/books/handbook/network-servers/Makefile16
-rw-r--r--zh_CN.GB2312/books/handbook/network-servers/chapter.sgml966
2 files changed, 982 insertions, 0 deletions
diff --git a/zh_CN.GB2312/books/handbook/network-servers/Makefile b/zh_CN.GB2312/books/handbook/network-servers/Makefile
new file mode 100644
index 0000000000..d1ea7b7f6e
--- /dev/null
+++ b/zh_CN.GB2312/books/handbook/network-servers/Makefile
@@ -0,0 +1,16 @@
+#
+# Build the Handbook with just the content from this chapter.
+#
+# Original Revision: 1.1
+# $FreeBSD$
+#
+
+CHAPTERS= network-servers/chapter.sgml
+
+VPATH= ..
+
+MASTERDOC= ${.CURDIR}/../${DOC}.${DOCBOOKSUFFIX}
+
+DOC_PREFIX?= ${.CURDIR}/../../../..
+
+.include "../Makefile"
diff --git a/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml
new file mode 100644
index 0000000000..08f408eb80
--- /dev/null
+++ b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml
@@ -0,0 +1,966 @@
+<!--
+ The FreeBSD Documentation Project
+ The FreeBSD Simplified Chinese Project
+
+ Original Revision: 1.29
+ $FreeBSD$
+-->
+
+<chapter id="network-servers">
+ <chapterinfo>
+ <authorgroup>
+ <author>
+ <firstname>Murray</firstname>
+ <surname>Stokely</surname>
+ <contrib>Reorganized by </contrib>
+ </author>
+ </authorgroup>
+ <!-- 23 July 2004 -->
+ </chapterinfo>
+
+ <title>Network Servers</title>
+
+ <sect1 id="network-servers-synopsis">
+ <title>概要</title>
+
+ <para>本章将覆盖某些在 &unix; 系统上常用的网络服务。话题将会涉及
+ 如何安装、配置、测试和维护多种不同类型的网络服务。本章节中将提
+ 供大量配置文件的样例,期望能够对您有所裨益。</para>
+
+ <para>在读完本章之后,您将会知道:</para>
+
+ <itemizedlist>
+
+ <listitem>
+ <para>如何管理<application>inetd</application>
+ 。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何设置运行一个网络文件系统。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何配置一个网络信息服务器以共享用户帐号。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何通过DHCP自动配置网络。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何配置一个域名服务器。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何设置<application>Apache</application> HTTP 服务器。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何设置文件传输(FTP)服务器。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何使用<application>Samba</application>为 &windows;
+ 客户端设置文件和打印服务。</para>
+ </listitem>
+
+ <listitem>
+ <para>如何同步时间和日期,以及如何设置使用NTP协议的时间服务器。</para>
+ </listitem>
+
+ </itemizedlist>
+
+ <para>在阅读此章节之前,您应当:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>理解有关<filename>/etc/rc</filename>中脚本的基本知识。</para>
+ </listitem>
+
+ <listitem>
+ <para>熟悉基本网络术语。</para>
+ </listitem>
+
+ <listitem>
+ <para>懂得如何安装额外的第三方软件(<xref linkend="ports">)。</para>
+ </listitem>
+
+ </itemizedlist>
+ </sect1>
+
+ <sect1 id="network-inetd">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Chern</firstname>
+ <surname>Lee</surname>
+ <contrib>Contributed by </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+
+ <title> <application>inetd</application> <quote>超级服务器</quote></title>
+
+ <sect2 id="network-inetd-overview">
+ <title>总览</title>
+
+ <para>&man.inetd.8; 被称为<quote>Internet
+ Super-Server</quote>, 因为它管理几个守护程序的链接。提供网络
+ 服务的程序被称为守护进程。<application>inetd</application>
+ 作为一个为其他服务的管理服务器,当一个被<application>inetd</application>
+ 收到后,它将决定连接将前往哪个程序,然后拉起对应的守护进程,
+ 并将socket转交过去。 比起来将所有守护进程以stand-alone模式
+ 运行,运行单个<application>inetd</application>实例可以降低
+ 系统开销。</para>
+
+ <para>一般说来,<application>inetd</application> 被用来拉起
+ 其他守护进程,不过有些细碎的协议被直接接管,比如<application>chargen</application>,
+ <application>auth</application>,和
+ <application>daytime</application>。</para>
+
+ <para>这一部分将通过命令行选项和<filename>/etc/inetd.conf</filename>
+ 文件来介绍配置<application>inetd</application> 的基础知识。</para>
+ </sect2>
+
+ <sect2 id="network-inetd-settings">
+ <title>设置</title>
+
+ <para><application>inetd</application> 通过 <filename>/etc/rc.conf</filename>
+ 系统进行初始化。<literal>inetd_enable</literal> 选项默认被设定为
+ <literal>NO</literal>,不过可以通过<application>sysinstall</application>打开,
+ 如果选用中等安全的模板。在<filename>/etc/rc.conf</filename>中设定:
+ <programlisting>inetd_enable="YES"</programlisting> 或
+ <programlisting>inetd_enable="NO"</programlisting>
+ 可以激活或者禁止<application>inetd</application>在启动时加载。</para>
+
+ <para>此外,可以通过<literal>inetd_flags</literal>把不同的
+ 命令行参数传给<application>inetd</application>。</para>
+ </sect2>
+
+ <sect2 id="network-inetd-cmdline">
+ <title>命令行选项</title>
+
+ <para><application>inetd</application> 语法:</para>
+
+ <para><option> inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname]
+ [-p filename] [-R rate] [configuration file]</option></para>
+
+ <variablelist>
+ <varlistentry>
+ <term>-d</term>
+
+ <listitem>
+ <para>打开调试选项。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-l</term>
+
+ <listitem>
+ <para>纪录成功的连接</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-w</term>
+
+ <listitem>
+ <para>为外部服务打开TCP Wrapping(默认)。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-W</term>
+
+ <listitem>
+ <para>为<application>inetd</application>的内置服务打开TCP Wrapping (默认)。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-c maximum</term>
+
+ <listitem>
+ <para>指定单个服务的最大并发访问数量,默认为不限。
+ 也可以在此服务的具体配置里面通过<option>max-child</option>改掉。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-C rate</term>
+
+ <listitem>
+ <para>指定单个服务一分钟内能被单个IP地址调用的最大次数,
+ 默认不限。也可以在此服务的具体配置里面通过<option>max-connections-per-ip-per-minute</option>
+ 改掉。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-R rate</term>
+
+ <listitem>
+ <para>指定单个服务一分钟内能被调用的最大次数,默认为256。
+ 设为0 则允许不限次数调用。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-a</term>
+
+ <listitem>
+ <para>指定绑定的IP地址。此外,可以使用主机名,这样系统就
+ 可以根据主机名对应的IPV4或者IPV6来选择绑定地址。通常当
+ <application>inetd</application> 在 &man.jail.8; 中运行
+ 的时候指定主机名,这种情况下主机名来自 &man.jail.8; 环
+ 境变量</para>
+
+ <para>当使用主机名方式时,如果IPV4和IPV6都会被绑定到服务,
+ 那么,需要在<filename>/etc/inetd.conf</filename>.中为该服务
+ 的每个对应协议添加一条记录。比如,一个TCP服务需要两条纪录,
+ 一条使用<literal>tcp4</literal>,另一条使用<literal>tcp6</literal>。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>-p</term>
+
+ <listitem>
+ <para>指定用来存放进程ID的文件。</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>以上选项在<filename>/etc/rc.conf</filename>中将可以
+ 被<literal>inetd_flags</literal>开关传递给<application>inetd</application>。
+ 默认情况下,<literal>inetd_flags</literal> 被置为
+ <literal>-wW</literal>,也既是对<application>inetd</application>的内置或外部服务打开TCP wrapping.
+ 对于新手,通常不用去动这些参数,就算它们出现在<filename>/etc/rc.conf</filename>里头。</para>
+
+ <note>
+ <para>对<application>inetd</application>而言,所谓外部服务是当
+ 连接请求到来时,被调用并接受连接,启动于inetd之外的守护进程。
+ 反之,内置服务则是那些<application>inetd</application>自己可
+ 以完全处理的了。</para>
+ </note>
+
+ </sect2>
+
+ <sect2 id="network-inetd-conf">
+ <title><filename>inetd.conf</filename></title>
+
+ <para><application>inetd</application>的配置通过
+ <filename>/etc/inetd.conf</filename>文件进行控制。</para>
+
+ <para>当
+ <filename>/etc/inetd.conf</filename>内容发生改变,可以
+ 对<application>inetd</application>进程发送一个HangUP信号,以强制
+ <application>inetd</application>重新读取配置文件,如下所示:</para>
+
+ <example id="network-inetd-hangup">
+ <title>对 <application>inetd</application>发送HangUP信号</title>
+
+ <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen>
+ </example>
+
+ <para>配置文件中的每一行都是一个独立服务。如果要注释掉该服务,可以在行首加上
+ <quote>#</quote>。<filename>/etc/inetd.conf</filename>的格式如下:</para>
+
+ <programlisting>service-name
+socket-type
+protocol
+{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]
+user[:group][/login-class]
+server-program
+server-program-arguments</programlisting>
+
+ <para><application>ftpd</application>使用IPv4的例子:</para>
+
+ <programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting>
+
+ <variablelist>
+ <varlistentry>
+ <term>service-name</term>
+
+ <listitem>
+ <para>指明各个服务的服务名。其服务名必须与<filename>/etc/services</filename>中列出的一致。
+ 这将决定<application>inetd</application>会监听哪个port。
+ 一旦有新的服务需要添加,必须先在<filename>/etc/services</filename>里面添加。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>socket-type</term>
+
+ <listitem>
+ <para>可以是<literal>stream</literal>、<literal>dgram</literal>、<literal>raw</literal>或者
+ <literal>seqpacket</literal>。 <literal>stream</literal>
+ 用在基于连接的,TCP 服务;而<literal>dgram</literal>被用于服务用于<acronym>UDP</acronym>传输协议。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>protocol</term>
+
+ <listitem>
+ <para>下列之一:</para>
+
+ <informaltable frame="none">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>协议</entry>
+ <entry>说明</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>tcp, tcp4</entry>
+ <entry>TCP IPv4</entry>
+ </row>
+ <row>
+ <entry>udp, udp4</entry>
+ <entry>UDP IPv4</entry>
+ </row>
+ <row>
+ <entry>tcp6</entry>
+ <entry>TCP IPv6</entry>
+ </row>
+ <row>
+ <entry>udp6</entry>
+ <entry>UDP IPv6</entry>
+ </row>
+ <row>
+ <entry>tcp46</entry>
+ <entry>Both TCP IPv4 and v6</entry>
+ </row>
+ <row>
+ <entry>udp46</entry>
+ <entry>Both UDP IPv4 and v6</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]</term>
+
+ <listitem>
+ <para><option>wait|nowait</option> 指明从<application>inetd</application>
+ 里头调用的服务是否可以自己处理socket.
+ <option>dgram</option>socket类型必须使用<option>wait</option>,
+ 而stream socket daemons, 由于通常使用多线程方式,应当使用
+ <option>nowait</option>. <option>wait</option> 通常usually
+ 把多个socket丢给单个服务进程, 而<option>nowait</option> 则
+ 会为每个新的socket生成一个子进程。</para>
+
+ <para>使用<option>max-child</option>选项可以设定针对服务,
+ <application>inetd</application>可以派生出来的最大子进程数量。
+ 如果某特定服务需要限定最高10个实例,把<literal>/10</literal>
+ 放到<option>nowait</option>后头就可以了。</para>
+
+ <para>在<option>max-child</option>之外,还有一个开关可以限制
+ 来自同一个地方,针对某个服务的最大连接数。这个开关就是:
+ <option>max-connections-per-ip-per-minute</option>。
+ 比如,设定该值为10就可以限定单个IP地址去向某服务的连接最大
+ 为每分钟十个。这个对于防止有意或者无意的资源耗尽或者拒绝服
+ 务(DoS)颇有用处。</para>
+
+ <para>在这部分,必须选择<option>wait</option>或
+ <option>nowait</option>。
+ <option>max-child</option>和
+ <option>max-connections-per-ip-per-minute</option> 则为可有可无。</para>
+
+ <para>一个stream-type多线程的服务,如果没有
+ <option>max-child</option>或者
+ <option>max-connections-per-ip-per-minute</option>需要,
+ 一般使用: <literal>nowait</literal>。</para>
+
+ <para>同样的服务,如果需要限制最大连接数,则如下:
+ <literal>nowait/10</literal>。</para>
+
+ <para>此外,如果要限制每分钟单个IP来访连接为20个,同时最多
+ 派生10个进程,可以如下:
+ <literal>nowait/10/20</literal>。</para>
+
+ <para>以上开关都默认被使用在<application>fingerd</application>服务上面,
+ 如下所示:</para>
+
+ <programlisting>finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s</programlisting>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>user</term>
+
+ <listitem>
+ <para>该开关指定服务将以什么用户身份运行。一般而言,服务运行身份是
+ <username>root</username>。基于安全目的,可以看到有些服务以
+ <username>daemon</username>身份,或者是最小特权的
+ <username>nobody</username>身份运行。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>server-program</term>
+
+ <listitem>
+ <para>当连接到来时,执行服务程序的全路径。如果服务是由
+ <application>inetd</application>内置提供的,以<option>internal</option>代替。</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>server-program-arguments</term>
+
+ <listitem>
+ <para>当<option>server-program</option>调用到时,该开关
+ 的值通过<literal>argv[0]</literal>通过传递给服务而工作。
+ 如果命令行为:<command>mydaemon -d</command>,则
+ <literal>mydaemon -d</literal>为<option>server-program-arguments</option>
+ 开关的值。同样的,如果服务是由<application>inetd</application>
+ 内置提供的,这里还是
+ <option>internal</option>。</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ <sect2 id="network-inetd-security">
+ <title>Security</title>
+
+ <para>随安装时候选择的安全模式不同,部分<application>inetd</application>的服务
+ 会被设为默认打开。如果没有确实的需要,禁止它们!只要在<filename>/etc/inetd.conf</filename>里头
+ 需要禁止的服务前头加上<quote>#</quote>,然后<link linkend="network-inetd-hangup">
+ 对inetd发送hangup信号</link>。某些服务,比如<application>fingerd</application>,
+ 由于对攻击者提供太多信息,可能对任何人都应该禁止。</para>
+
+ <para>某些服务在安全上没有考虑,并且有一些连接超时检测设得很长或没有检测机制。
+ 这回允许攻击者慢慢地发送连接,这样可以导致可用资源的消耗。在某些服务上面加上
+ <option>max-connections-per-ip-per-minute</option>和<option>max-child</option>
+ 的限制似乎不错。</para>
+
+ <para>默认情况下,TCP wrapping 是打开的。参考
+ &man.hosts.access.5; 手册,以获得更多关于在各种<application>inetd</application>
+ 调用的服务上设置TCP限制的信息。</para>
+ </sect2>
+
+ <sect2 id="network-inetd-misc">
+ <title>杂项</title>
+
+ <para><application>daytime</application>,
+ <application>time</application>,
+ <application>echo</application>,
+ <application>discard</application>,
+ <application>chargen</application>, 和
+ <application>auth</application> 都是<application>inetd</application>内置的服务。</para>
+
+ <para><application>auth</application>服务提供
+ identity (<application>ident</application>,
+ <application>identd</application>)网络服务,并且某种程度上可配置。</para>
+
+ <para>参考 &man.inetd.8; 手册获得更多信息。</para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="network-nfs">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Rhodes</surname>
+ <contrib>Reorganized and enhanced by </contrib>
+ </author>
+ </authorgroup>
+ <authorgroup>
+ <author>
+ <firstname>Bill</firstname>
+ <surname>Swingle</surname>
+ <contrib>Written by </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>网络文件系统(NFS)</title>
+
+ <indexterm><primary>NFS</primary></indexterm>
+ <para>网络文件系统是FreeBSD支持的文件系统中的一种,也被称为<acronym role="Network
+ File System">NFS</acronym>. <acronym role="Network File
+ System">NFS</acronym>允许一个系统在网络上与它人共享目录和文件。通过使用<acronym
+ role="Network File System">NFS</acronym>,用户和程序可以象访问本地文件
+ 一样访问远端系统上的文件。</para>
+
+ <para>以下是<acronym>NFS</acronym>最显而易见的好处:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>本地工作站使用更少的磁盘空间,因为通常的数据可以存放在一
+ 台机器上而且可以通过网络访问到。</para>
+ </listitem>
+
+ <listitem>
+ <para>用户不必在每个网络上机器里头都有一个home目录。Home目录
+ 可以被放在<acronym>NFS</acronym>服务器上并且在网络上处处可用。
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>诸如软驱,CDROM,和 &iomegazip; 之类的存储设备可以在网络上面被别的机器使用。
+ 这可以减少整个网络上的可移动介质设备的数量。</para>
+ </listitem>
+ </itemizedlist>
+
+ <sect2>
+ <title><acronym>NFS</acronym>是如何工作的</title>
+
+ <para><acronym>NFS</acronym>至少有两个主要部分:一台服务器和一
+ 台(或者更多)客户机。客户机远程访问存放在服务器上的数据。为了
+ 正常工作,一些进程需要被配置并运行。</para>
+
+ <note><para>在 &os; 5.X上面,<application>portmap</application>
+ 被<application>rpcbind</application>替换了。而且,在&os; 5.X上面,
+ the user is required to replace every instance of
+ <application>portmap</application> with
+ <application>rpcbind</application> in the forthcoming
+ examples。</para></note>
+
+ <para>服务器必须运行以下服务:</para>
+ <indexterm>
+ <primary>NFS</primary>
+ <secondary>server</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>file server </primary>
+ <secondary>unix clients </secondary>
+ </indexterm>
+
+ <indexterm>
+ <primary><application>portmap</application></primary>
+ </indexterm>
+ <indexterm>
+ <primary><application>mountd</application></primary>
+ </indexterm>
+ <indexterm>
+ <primary><application>nfsd</application></primary>
+ </indexterm>
+
+ <informaltable frame="none" pgwide="1">
+ <tgroup cols="2">
+ <colspec colwidth="1*">
+ <colspec colwidth="3*">
+
+ <thead>
+ <row>
+ <entry>服务</entry>
+ <entry>描述</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry><application>nfsd</application></entry>
+ <entry><acronym>NFS</acronym>,为来自<acronym>NFS</acronym>客户端的
+ 请求服务。</entry>
+ </row>
+ <row>
+ <entry><application>mountd</application></entry>
+ <entry><acronym>NFS</acronym>挂载服务,处理&man.nfsd.8;递交过来的请求。</entry>
+ </row>
+ <row>
+ <entry><application>portmap</application></entry>
+ <entry> portmap服务允许
+ <acronym>NFS</acronym>客户端查看<acronym>NFS</acronym>服务在用的端口。</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>客户端同样运行一些进程,比如
+ <application>nfsiod</application>。
+ <application>nfsiod</application>处理来自<acronym>NFS</acronym>的请求。
+ 这是可选的,而且可以提高性能,对于普通和正确的操作来说并不是必须的。
+ 参考&man.nfsiod.8;手册获得更多信息。
+ </para>
+ </sect2>
+
+ <sect2 id="network-configuring-nfs">
+ <title>配置<acronym>NFS</acronym></title>
+ <indexterm>
+ <primary>NFS</primary>
+ <secondary>configuration</secondary>
+ </indexterm>
+
+ <para><acronym>NFS</acronym>的配置过程相对简单。这个过程只需要
+ 对<filename>/etc/rc.conf</filename>文件作一些简单修改。</para>
+
+ <para>在<acronym>NFS</acronym>服务器这端,确认<filename>/etc/rc.conf</filename>
+ 文件里头以下开关都配上了:</para>
+
+ <programlisting>portmap_enable="YES"
+nfs_server_enable="YES"
+mountd_flags="-r"</programlisting>
+
+ <para>只要<acronym>NFS</acronym>服务被置为enable,<application>mountd</application>
+ 就能自动运行。</para>
+
+ <para>在客户端一侧,确认下面这个开关出现在
+ <filename>/etc/rc.conf</filename>里头:</para>
+
+ <programlisting>nfs_client_enable="YES"</programlisting>
+
+ <para><filename>/etc/exports</filename>文件指定了哪个文件系统
+ <acronym>NFS</acronym>应该输出(有时被称为<quote>共享</quote>)。
+ <filename>/etc/exports</filename>里面每行指定一个输出的文件系统和
+ 哪些机器可以访问该文件系统。在指定机器访问权限的同时,访问选项
+ 开关也可以被指定。有很多开关可以被用在这个文件里头,不过不会在这
+ 里详细谈。您可以通过阅读&man.exports.5; 手册来发现这些开关。</para>
+
+ <para>以下是一些<filename>/etc/exports</filename>的例子:</para>
+
+ <indexterm>
+ <primary>NFS</primary>
+ <secondary>export examples</secondary>
+ </indexterm>
+
+ <para>紧接着的这个例子说明了如何输出一个文件系统,尽管具体设定和您
+ 的环境以及网络配置有关。作为实例,为了输出<filename>/cdrom</filename>
+ 到三个的例子机器,它们有同样域名(因此他们的域名不大对)或者在您的
+ <filename>/etc/hosts</filename>文件里头有纪录。<option>-ro</option>
+ 标志将被输出的文件系统置为只读。由于这个标志,远程系统将无法在被输出
+ 的文件系统上写入任何变动。</para>
+
+ <programlisting>/cdrom -ro host1 host2 host3</programlisting>
+
+ <para>下面的例子可以输出<filename>/home</filename>给三个以IP地址方式表示的主机。
+ 对于在没有配置<acronym>DNS</acronym>服务器的私有网络里头,这很有用。
+ 此外,the <filename>/etc/hosts</filename> 文件也可以用以配置主机名;参看 &man.hosts.5; 。
+ <option>-alldirs</option> 标记允许子目录被作为挂载点。
+ 也就是说,客户端可以根据需要挂载需要的目录。 </para>
+
+ <programlisting>/home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4</programlisting>
+
+ <para>下面几行输出 <filename>/a</filename> ,以便两个来自不同域的客户端可以访问文件系统。
+ <option>-maproot=root</option> 标记授权远端系统上的
+ <username>root</username> 用户在被输出的文件系统上以<username>root</username>身份进行读写。
+ 如果没有特别指定 <literal>-maproot=root</literal> 标记,
+ 则即使用户在远端系统上是 <username>root</username> 身份,
+ 也不能修改被输出文件系统上的文件。 </para>
+
+ <programlisting>/a -maproot=root host.example.com box.example.org</programlisting>
+
+ <para> 为了能够访问到被输出的文件系统,客户端必须被授权。
+ 请确认客户端在您的 <filename>/etc/exports</filename> 被列出。 </para>
+
+ <para>在 <filename>/etc/exports</filename> 里头,每一行里面,输出信息和文件系统一一对应。
+ 一个远程主机每次只能对应一个文件系统。而且只能有一个默认入口。比如,假设
+ <filename>/usr</filename> 是独立的文件系统。这个 <filename>/etc/exports</filename> 就是无效的:</para>
+
+ <programlisting>/usr/src client
+/usr/ports client</programlisting>
+
+ <para>一个文件系统,<filename>/usr</filename>, 有两行指定输出到同一主机,
+ <hostid>client</hostid>.
+ 解决这一问题的正确的格式是:</para>
+
+ <programlisting>/usr/src /usr/ports client</programlisting>
+
+ <para>The properties of one filesystem exported to a given host
+ must all occur on one line. Lines without a client specified
+ are treated as a single host. This limits how you can export
+ filesystems, but for most people this is not an issue.</para>
+
+ <para>下面是一个有效输出列表的例子,
+ <filename>/usr</filename> and <filename>/exports</filename>
+ 是本地文件系统:</para>
+
+ <programlisting># Export src and ports to client01 and client02, but only
+# client01 has root privileges on it
+/usr/src /usr/ports -maproot=root client01
+/usr/src /usr/ports client02
+# The client machines have root and can mount anywhere
+# on /exports. Anyone in the world can mount /exports/obj read-only
+/exports -alldirs -maproot=root client01 client02
+/exports/obj -ro</programlisting>
+
+ <para>一旦修改 <filename>/etc/exports</filename> 了之后,
+ 为了让变动生效,您必须重启 <application>mountd</application>。
+ 可以通过对<command>mountd</command> 进程发送HUP信号重启:</para>
+
+ <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/mountd.pid`</userinput></screen>
+
+ <para>另外,系统重启动可以让FreeBSD把一切都弄好。尽管如此,重启不是必须的。
+ 以 <username>root</username> 身份执行下面的命令可以搞定一切。</para>
+
+ <para>在 <acronym>NFS</acronym> 服务器端:</para>
+
+ <screen>&prompt.root; <userinput>portmap</userinput>
+&prompt.root; <userinput>nfsd -u -t -n 4</userinput>
+&prompt.root; <userinput>mountd -r</userinput></screen>
+
+ <para>在 <acronym>NFS</acronym> 客户端:</para>
+
+ <screen>&prompt.root; <userinput>nfsiod -n 4</userinput></screen>
+
+ <para>现在每件事情都应该就绪,以备挂载一个远端文件系统。 在这些例子里头,
+ 服务器名字将是:<hostid>server</hostid> ,而客户端的名字将是: <hostid>client</hostid>。
+ 如果您只打算临时挂载一个远端文件系统或者只是打算作测试配置正确与否,
+ 只要在客户端以 <username>root</username> 身份执行下面的命令:</para>
+ <indexterm>
+ <primary>NFS</primary>
+ <secondary>mounting</secondary>
+ </indexterm>
+ <screen>&prompt.root; <userinput>mount server:/home /mnt</userinput></screen>
+
+ <para>这条命令会把服务端的 <filename>/home</filename> 目录挂载到客户端的 <filename>/mnt</filename> 上。
+ 如果配置正确,您应该可以进入客户端的 <filename>/mnt</filename> 目录并且看到所有服务端的文件。 </para>
+
+ <para>如果您打算让系统每次在重启动的时候都自动挂载远端的文件系统,把那个文件系统加到
+ <filename>/etc/fstab</filename> 文件里头去。下面是例子:</para>
+
+ <programlisting>server:/home /mnt nfs rw 0 0</programlisting>
+
+ <para> &man.fstab.5; 手册里有所有可用的开关。</para>
+ </sect2>
+
+ <sect2>
+ <title>实际应用</title>
+
+ <para><acronym>NFS</acronym> 有很多实际应用。下面是比较常见的一些:</para>
+
+ <indexterm>
+ <primary>NFS</primary>
+ <secondary>uses</secondary>
+ </indexterm>
+ <itemizedlist>
+ <listitem>
+ <para>多个机器共享一台CDROM或者其他设备。这对于在多台机器中安装软件来说更加便宜跟方便。
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>在大型网络中,配置一台中心 <acronym>NFS</acronym> 服务器用来放置所有用户的home目录可能会带来便利。
+ 这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>几台机器可以有通用的<filename>/usr/ports/distfiles</filename> 目录。
+ 这样的话,当您需要在几台机器上安装port时,您可以无需在每台设备上下载而快速访问源码。
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2 id="network-amd">
+ <sect2info>
+ <authorgroup>
+ <author>
+ <firstname>Wylie</firstname>
+ <surname>Stilwell</surname>
+ <contrib>Contributed by </contrib>
+ </author>
+ </authorgroup>
+ <authorgroup>
+ <author>
+ <firstname>Chern</firstname>
+ <surname>Lee</surname>
+ <contrib>Rewritten by </contrib>
+ </author>
+ </authorgroup>
+ </sect2info>
+ <title>使用 <application>amd</application> 自动挂载 ** 翻译进行中 **</title>
+
+ <para></para>
+ </sect2>
+
+ <sect2 id="network-nfs-integration">
+ <sect2info>
+ <authorgroup>
+ <author>
+ <firstname>John</firstname>
+ <surname>Lind</surname>
+ <contrib>Contributed by </contrib>
+ </author>
+ </authorgroup>
+ </sect2info>
+ <title>Problems Integrating with Other Systems ** 翻译进行中 **</title>
+
+ <para></para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="network-nis">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Bill</firstname>
+ <surname>Swingle</surname>
+ <contrib>Written by </contrib>
+ </author>
+ </authorgroup>
+ <authorgroup>
+ <author>
+ <firstname>Eric</firstname>
+ <surname>Ogren</surname>
+ <contrib>Enhanced by </contrib>
+ </author>
+ <author>
+ <firstname>Udo</firstname>
+ <surname>Erdelhoff</surname>
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>Network Information System (NIS/YP) ** 翻译进行中 **</title>
+
+ <sect2 id="network-netgroups">
+ <sect2info>
+ <authorgroup>
+ <author>
+ <firstname>Udo</firstname>
+ <surname>Erdelhoff</surname>
+ <contrib>Contributed by </contrib>
+ </author>
+ </authorgroup>
+ </sect2info>
+
+ <title>Using Netgroups ** 翻译进行中 **</title>
+ <para></para>
+ </sect2>
+
+ <sect2>
+ <title>Important Things to Remember ** 翻译进行中 **</title>
+
+ <para></para>
+ </sect2>
+
+ <sect2 id="network-nis-server-is-client">
+ <title>NIS Servers That Are Also NIS Clients ** 翻译进行中 **</title>
+
+ <para></para>
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="network-dhcp">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Greg</firstname>
+ <surname>Sutter</surname>
+ <contrib>Written by </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>Automatic Network Configuration (DHCP) ** 翻译进行中 **</title>
+
+ <sect2 id="network-dhcp-server">
+ <title>Installing and Configuring a DHCP Server ** 翻译进行中 **</title>
+
+ <para></para>
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="network-dns">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Chern</firstname>
+ <surname>Lee</surname>
+ <contrib>Contributed by </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>Domain Name System (DNS)</title>
+
+ <sect2 id="network-named-sandbox">
+ <title>Running <application>named</application> in a Sandbox ** 翻译进行中 **</title>
+ <indexterm>
+ <primary>BIND</primary>
+ <secondary>running in a sandbox</secondary>
+ </indexterm>
+
+ <para></para>
+ </sect2>
+ </sect1>
+
+ <sect1 id="network-apache">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Murray</firstname>
+ <surname>Stokely</surname>
+ <contrib>Contributed by </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>Apache HTTP Server ** 翻译进行中 **</title>
+
+ <indexterm><primary>web server</primary>
+ <secondary>setting up</secondary></indexterm>
+ <indexterm><primary>Apache</primary></indexterm>
+
+ <para></para>
+ </sect1>
+
+ <sect1 id="network-samba">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Murray</firstname>
+ <surname>Stokely</surname>
+ <contrib>Contributed by </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>File and Print Services for &microsoft.windows; clients (Samba) ** 翻译进行中 **</title>
+
+ <indexterm><primary>Samba server</primary></indexterm>
+ <indexterm><primary>Microsoft Windows</primary></indexterm>
+ <indexterm>
+ <primary>file server</primary>
+ <secondary>Windows clients</secondary>
+ </indexterm>
+ <indexterm>
+ <primary>print server</primary>
+ <secondary>Windows clients</secondary>
+ </indexterm>
+
+ <sect2>
+ <title>Overview ** 翻译进行中 **</title>
+
+ <para></para>
+ </sect2>
+
+ </sect1>
+
+ <sect1 id="network-ntp">
+ <sect1info>
+ <authorgroup>
+ <author>
+ <firstname>Tom</firstname>
+ <surname>Hukins</surname>
+ <contrib>Contributed by </contrib>
+ </author>
+ </authorgroup>
+ </sect1info>
+ <title>Clock Synchronization with NTP ** 翻译进行中 **</title>
+
+ <para></para>
+ </sect1>
+
+</chapter>
+
+<!--
+ Local Variables:
+ mode: sgml
+ sgml-declaration: "../chapter.decl"
+ sgml-indent-data: t
+ sgml-omittag: nil
+ sgml-always-quote-attributes: t
+ sgml-parent-document: ("../book.sgml" "part" "chapter")
+ End:
+-->
+<!-- LocalWords: config mnt www -->