📄 00000009.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: ruster (尘埃*星辰*领悟), 信区: Linux <BR>标 题: 第五章 局域网服务器 <BR>发信站: BBS 水木清华站 (Thu Dec 21 13:38:39 2000) <BR> <BR>第5章 局域网服务器 <BR> <BR> 本章要点: <BR> <BR> 本章介绍如何将Linux机器配置称为局域网上的文件/打印服务器或者计算服务器,同 <BR>时也介绍可能出现的问题以及解决方法。 <BR> <BR> 本章具体包括以下内容。 <BR> <BR> NFS文件服务 <BR> <BR> BSD打印服务器 <BR> <BR> Samba文件/打印服务 <BR> <BR> WINS、DHCP和NIS <BR> <BR> 图形/计算服务器 <BR> <BR> 5.1 NFS和文件/打印服务 <BR> <BR> NFS是Sun发明的用来在UNIX系统之间共享文件的一种服务协议,事实上,如果你的系 <BR>统中不是有很多的UNIX机器,我们并不建议使用NFS。因为在windows 95上访问NFS相当 <BR>困难。但是,如果你的系统中包含Sun或者SCO这样的UNIX系统,也许你除了使用NFS以外 <BR>别无选择。 <BR> <BR> 5.1.1 共享文件系统 <BR> <BR> NFS实际就是将某个UNIX机器的一个目录共享出来,由其他机器直接使用。共享的动作 <BR>称为“输出”(export)。例如,host1机器的mydoc目录可以被输出,然后host2机器的管 <BR>理员将它连接到/host1/mydoc目录下,以后host2对这个目录的操作自动转化为对host1 <BR>上相应目录的操作。技术上,通常用UDP协议来实现NFS的数据传输。 <BR> <BR> 首先我们需要来制作一个NFS服务器,由于NFS要依赖于远程过程调用(RPC),所以服 <BR>务器上必须启动SUNRPC服务,这个服务的另一个名字是port mapper,在目前版本中的L <BR>inux里面,用portmap程序来启动SUNRPC服务: <BR> <BR> $ /sbin/portmap <BR> <BR> 尽管不通过tcpd程序,但是port mapper是基于一个类似的程序tcp wrapper的运行库 <BR>,所以也可以使用host.deny和host.allow程序来限制访问。另外,通常portmap使用的端 <BR>口在/etc/services里面定义。 <BR> <BR> 为了使用NFS服务,需要启动mountd和nfsd程序,这两个程序在Linux中被称为rpc.mo <BR>untd和rpc.nfsd: <BR> <BR> $/usr/sbin/rpc.mountd <BR> <BR> $/usr/sbin/rpc.nfsd <BR> <BR> 其中,rpc.nfsd程序支持一个数字参数,用来表示启动nfsd程序的个数,例如: <BR> <BR> $rpc.nfsd 7 <BR> <BR> $ps ax|grep nfsd <BR> <BR> 606 pts/0 SW 0:00 [nfsd] <BR> <BR> 607 pts/0 SW 0:00 [nfsd] <BR> <BR> 608 pts/0 SW 0:00 [nfsd] <BR> <BR> 609 pts/0 SW 0:00 [nfsd] <BR> <BR> 610 pts/0 SW 0:00 [nfsd] <BR> <BR> 611 pts/0 SW 0:00 [nfsd] <BR> <BR> 612 pts/0 SW 0:00 [nfsd] <BR> <BR> 由于NFS是基于无连接的UDP服务,所以nfsd程序不得不在端口上等待并且处理,当nf <BR>s访问比较多的时候,增加nfsd程序的个数会有助于提高NFS的工作效率(因为避免了线 <BR>程阻塞),但是太多的nfsd程序又可能会影响CPU的处理速度。正确的数值只有自己实验 <BR>得到,不过,对于一般的系统,10-20个nfsd程序应该可以工作的很好。 <BR> <BR> 另外一个需要注意的是,按照Sun的定义,NFS是无状态的,有时这一点很讨厌,特别 <BR>是有可能发生文件访问的冲突,为此,Linux提供nfs lock功能,对NFS访问进行监控, <BR>可以用rpc.lockd和rpc.statd程序来执行这个功能: <BR> <BR> $/sbin/rpc.lockd <BR> <BR> $/sbin/rpc.statd <BR> <BR> 要想在启动的时候自动使用NFS服务,可以按照我们以前介绍的那样,编辑相应的启动 <BR>脚本,不过,有些Linux系统提供了设置程序,最常用的是NTSYSV程序,如redhat和TLC <BR>都提供了这个程序: <BR> <BR> $/usr/sbin/ntsysv <BR> <BR> 出现类似下面的界面: <BR> <BR> <BR> <BR> 将这个选单中的nfs,nfslock和portmap选中并且ok退出,系统脚本就被自动改变了。 <BR>(ntsysv程序只是建立/etc/rc.d/rc3.d下的连接而已,你也可以手工作这个连接工作, <BR>注意我们以前讲的启动脚本) <BR> <BR> 在启动了上面说的那些服务后,现在可以输出文件目录了。在Linux中有两种输出方式 <BR>,一种使用exportfs命令,另一种是使用/etc/exports文件: <BR> <BR> exportfs命令的用法是 <BR> <BR> /usr/sbin/exportfs –o [选项] [客户机器名]:[目录名] <BR> <BR> 客户机器名是可以使用你输出的文件系统的机器的域名或者IP,例如,你想让你的机 <BR>器上的/ftp目录能够被host.mydomain.com使用,可以使用命令 <BR> <BR> /usr/sbin/exportfs host.mydomain.com:/ftp <BR> <BR> 机器名字可以使用通配符,例如,*.mydomain.com表示一切mydomain.com域内的主机 <BR>,而202.112.58.0/255.255.255.0表示从202.112.58.0到202.112.58.255。 <BR> <BR> 不带参数的exportfs命令将显示当前的输出文件系统。要取消某一个输出,使用-u参 <BR>数,格式是exportfs –u [机器名]:[目录名],例如: <BR> <BR> exportfs –u host.mydomain.com:/ftp <BR> <BR> -o是一些选项,首先,在这里可以设置文件系统的输出方式,是只读(ro)还是可以读 <BR>写(rw)。另外,还有几个选项,我们下面再解释。 <BR> <BR> 在输出了目录之后,就可以在客户机器上使用NFS了,NFS客户的用法非常简单,只要 <BR>你的客户机内核编译时选定了NFS支持,那么,可以直接将输出的目录连接到客户机上: <BR> <BR> mount [服务器名]:[目录名] [连接点] <BR> <BR> 例如,在上面的例子中,假设输出文件目录的机器名字是nfs.mydomain.com,在host <BR>.mydomain.com中可以使用 <BR> <BR> mount nfs.mydomain.com:/ftp /mnt/nfs <BR> <BR> 这个目录就被连接到/mnt/nfs下面了,以后可以象使用本地文件系统那样使用它。 <BR> <BR> 关于使用这个文件系统有一个问题,如同我们所知道那样,Linux用用户权限来处理文 <BR>件访问的问题,那么,当某个目录被输出之后,对方如何设定对这个文件系统的操作权 <BR>限呢?答案是通过uid,例如,/ftp的属主是ftp,属性是644,而在服务器上的ftp的ui <BR>d是14,于是客户机器将寻找uid为14的用户,并且将/ftp解释为由这个用户所有。 <BR> <BR> 显然,这可能引起混乱,为了避免出现困难,也许必须要求所有机器的用户uid一致。 <BR>更严重的是root用户,如果你把一个目录以rw的形式输出,对方机器的root用户就可能 <BR>完全破坏这个目录。 <BR> <BR> 解决的办法之一是-o 选项的squash参数,它有几个选择,root_squash将使用正常的 <BR>uid映射关系(我们刚才讲的),除了客户机器的root用户,root用户被映射成nobody用 <BR>户,这样就避免了root操作导致系统破坏,这是缺省值。all_squash把客户机的所有用 <BR>户都映射成nobody用户。squash_uids可以映射一组用户uid为nobody,例如squash_uid <BR>s=0-40,45,50-100等等。还有一个选项,no_root_squash将完全按照我们在上一段中讲 <BR>的方式执行,包括root具有全部权限,这绝对应该避免的。 <BR> <BR> 例如,使用root_squash的rw方式输出可以使用类似这样的命令: <BR> <BR> exportfs –o root_squash,ro host.mydomain.com:/ftp <BR> <BR> -o的各个选项之间用逗号分开。 <BR> <BR> 输出文件系统的另外一种方式是使用/etc/exports文件,实际上,这是个描述文件, <BR>每一行给出一个输出目录,在rpc.nfsd启动的时候会自动去读这个文件,对每一行执行 <BR>一个exportfs命令。另外,也可以使用exportfs -r 命令自动输出其中的所有文件目录 <BR>。 <BR> <BR> /etc/exports文件每行的格式大概是这样: <BR> <BR> [目录]:[客户机器]([选项]) <BR> <BR> 例如,刚才的命令用/etc/exports文件相当于这样的行: <BR> <BR> /ftp host.mydomian.com(rw,root_squash) <BR> <BR> 每次重新启动rpc.nfsd都会重新输出/etc/exports 文件的内容,重起nfsd可以用这样 <BR>的命令完成: <BR> <BR> $killall -HUP /usr/sbin/rpc.mountd <BR> <BR> $killall -HUP /usr/sbin/rpc.nfsd <BR> <BR> 在Linux的NFS实现中,建议使用auto mount daemon(amd)程序来实现自动安装网络文 <BR>件系统,但是根据我们的实验,这种做法的唯一优点是让系统管理员忙得不可开交,我 <BR>们建议你简单地在setup中禁止amd系统服务,并且写一个启动脚本在启动时自动连接所 <BR>有nfs目录。 <BR> <BR> 要检测nfs服务的工作,使用nfsstat程序。 <BR> <BR> 关于Linux的NFS我们要说明一点,由于某些原因,Linux的NFS server通常只能支持到N <BR>FS Ver 2,而且还是一个测试中的功能,如果你重新编译了内核,记住如果一定要使用NFS <BR>,需要把核心的“使用测试中的功能”的选项打开。 <BR> <BR> 在用Linux作为NFS Server的时候有一个特殊问题,Sun Solaris支持NFS版本3,这个 <BR>是个缺省值,当用Sun去mount Linux输出的目录时会出现Linux无法正确理解Sun的NFS版 <BR>本的问题,解决的办法是在Linux启动rpc.mountd的时候明确声明不使用Version 3: <BR> <BR> rpc.mountd –N 3 <BR> <BR> 5.1.2 通过网络进行打印 <BR> <BR> 网络打印并不是NFS的功能,它是由BSD打印程序提供的,如同我们以前说的那样,打 <BR>印是通过/etc/printcap程序配置的。 <BR> <BR> 首先我们要配置一台允许其他机器通过它打印的服务器,实际上,这完全不需要更改 <BR>/etc/printcap(如果你已经按照我们说的那样设置系统使你可以在本地打印)。相反, <BR>你只要设置允许哪一台机器打印到你的打印机上就行了,这可以通过/etc/hosts.lpd实 <BR>现。例如,打印服务器的名字是openlab.asnc.edu.cn,其/etc/printcap文件是 <BR> <BR> net_lp:\ <BR> <BR> :sd=/var/spool/lpd/lp:\ <BR> <BR> :mx#0:\ <BR> <BR> :sh:\ <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -