📄 局域网服务器.htm
字号:
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>:af=/var/log/lpc:<BR><BR>:lp=/dev/lp0:<BR><BR>其中定义了某一台打印机的名字是net_lp,net_lp直接连接到openlab.asnc.edu.cn上<BR>,想允许myhost.asnc.edu.cn打印到net_lp,那么可以直接在/etc/hosts.lpd中写上:<BR><BR>myhost.asnc.edu.cn<BR><BR>然后重新启动lpd程序,就可以允许myhost上的用户打印了。<BR><BR>必须注意的一个问题是,实际存在两个文件,都可以用来允许远程打印,一个是我们<BR>刚才说的/etc/hosts.lpd,另一个比较微妙,它是/etc/hosts.equiv。关于后者的详细<BR>情况,我们在研究远程X的时候讨论。<BR><BR>为了使myhost能够自动将打印作业发向openlab,需要设置myhost上的/etc/printcap<BR>文件,主要是提供rp和rm变量,它们分别代表远程打印机和远程机器,例如,可以将my<BR>host的/etc/printcap设置成<BR><BR>lp:<BR><BR>:sd=/var/spool/lpd/lp:<BR><BR>:mx#0:<BR><BR>:sh:<BR><BR>:lp=:<BR><BR>:rm=openlab.asnc.edu.cn:rp=net_lp:<BR><BR>:if=/var/spool/lpd/lp/filter:<BR><BR>这里将本地打印机设置为空,远地服务器设置为openlab,远程打印机设置为openlab<BR>上的打印机名字,于是就可以使用openlab上的net_lp进行打印了。<BR><BR>通常打印用lpr命令实现,在前面我们已经介绍了这个命令的用法。在打印服务器的情<BR>况下,经常会有大量的打印事务需要处理,为此,BSD打印系统使用一些命令进行打印队<BR>列的管理,主要的是lpq,lprm和lpc。<BR><BR>lpq命令可以显示当前的打印队列:<BR><BR>[root@mail
/etc]# lpq<BR><BR>Rank Owner Job Files Total
Size<BR><BR>1st root 21 mail.rc 112
bytes<BR><BR>2nd root 22 ftphosts 104
bytes<BR><BR>注意job一栏的数值,这个值是打印作业号,你可以用lprm命令将某个作业删除:<BR><BR>[root@mail
/etc]# lprm 21<BR><BR>dfA021A7xsgvf
dequeued<BR><BR>cfA021linux.asnc.edu.cn
dequeued<BR><BR>lprm后面跟作业号,注意lprm命令非常奇怪,它正常完成是要输出信息的。<BR><BR>可以使用lpc程序对打印队列进行更精细的管理,输入lpc之后会出现lpc>,这是lpc的<BR>提示符,可以输入各种命令,用help命令可以获得帮助,quit命令退出。<BR><BR>$lpc<BR><BR>lpc>
help<BR><BR>Commands may be abbreviated.
Commands are:<BR><BR><BR>abort enable disable
help restart status topq ?<BR><BR>clean exit
down quit start stop
up<BR><BR>lpc><BR><BR>注意lpc是一个很恶心的程序,个人看来一般还是使用lpq和lprm,killall
lpd的办法<BR>比较好,如果你一定要使用lpc,那就慢慢研究吧,:PP。<BR><BR>5.2
Samba服务器<BR><BR>实际上,NFS的用处并不多,一般,当我们要建立一个庞大的服务器集群来对付email<BR>或者www服务时,我们用NFS来实现目录的共享。在一般情况下,我们的客户机器总是wi<BR>ndows,这种情况下,可以用samba来实现集成。<BR><BR>samba是一个免费的UNIX应用程序,用来使一台UNIX机器可以象Windows
NT一样为win<BR>dows
9x机器提供文件和打印服务。不过,确实它还不能完全提供NT的功能,然而它非常<BR>小巧而高效。<BR><BR>要使用samba,你必须安装跟samba相关的软件包,软件包通常包括几个,即samba、s<BR>amba-common和samba-client,后者用于从Linux访问windows
9x的共享文件。你可以到<BR>自己的发行版本里去查找对应的文件并且安装。当然,如果你按照我们的建议那样安装<BR>了所有的程序,那么就无需再手工安装了。<BR><BR>5.2.1
在windows环境中集成Linux<BR><BR>现在我们来解释如何将Samba做成一个可以被windows
9x访问的文件服务器。这是通过<BR>/usr/sbin/smbd守护进程实现的。smbd可以直接从命令行启动,但是在这之前必须先设<BR>置一些内容。<BR><BR>smbd的控制文件是/etc/smb.conf,这个文件的内容很长,是一个文本文件,与普通的<BR>配置文件不同的是它使用分号为注释行,通常在/etc下已经有了一个smb.conf的例子,<BR>如果你不小心把它删除了,那么在/usr/doc/samba-2.0.3/examples下还有一个名叫smb<BR>.conf.default的例子(2.0.3是版本号)。<BR><BR>现在我们自己来构做一个最简单的smb.conf,你可以先备份缺省的/etc/smb.conf,然<BR>后按照下面的例子构做一个/etc/smb.conf文件,也可以按照我们下面解释的那样对缺省<BR>的smb.conf进行编辑:<BR><BR>下面是这个文件的内容:<BR><BR>#
cat
smb.conf<BR><BR>[global]<BR><BR>workgroup=ASNC<BR><BR>load
printers = no<BR><BR>encrypt
passwords=no<BR><BR>security=share<BR><BR>[public]<BR><BR>comment
= public files<BR><BR>public = yes<BR><BR>path =
/ftp<BR><BR>browseable = yes<BR><BR>writable =
no<BR><BR>然后你需要启动smbd和nmbd,后者用来在网络上广播机器的名字,首先察看/etc/ser<BR>vices文件,看看是否有类似这样的内容:<BR><BR>netbios-ns137/tcp#
NETBIOS Name
Service<BR><BR>netbios-ns137/udp<BR><BR>netbios-dgm138/tcp#
NETBIOS Datagram
Service<BR><BR>netbios-dgm138/udp<BR><BR>netbios-ssn139/tcp
# NETBIOS session
service<BR><BR>netbios-ssn139/udp<BR><BR>如果没有就加上去,然后,启动smbd和nmbd:<BR><BR>smbd
–D<BR><BR>nmbd
–D<BR><BR>-D选项用于将这两个程序设置成daemon服务进程。<BR><BR>现在,就可以从windows
9x客户机访问Linux的共享目录了,由于netbios广播机器名<BR>字需要一定的时间,可能不能马上在网络邻居看到,这时你可以用windows
9x的“查找<BR>计算机”功能查询一下Linux机器的IP,就可以找到了。例如:<BR><BR><BR><BR>图5.1
查找到的samba机器<BR><BR>以后的操作就象操作一台windows机器的共享目录一样。要注意的是,由于smbd程序按<BR>照客户连接的身份将请求提交给服务器,所以除了在[public]段落中设置的共享属性之<BR>外,要使得这个共享真正生效,还要把对应目录(/ftp)的属性设置成755,只有同时满<BR>足smb的共享权限和UNIX用户权限的目录和文件才能真正被网络邻居访问。<BR><BR>下面我们来解释一下smb.conf中设置的这些内容,smb.conf文件被分成了若干段落,<BR>用方括号扩住的一行标志着一个段落的开始,段落有两种,一种是[global]段落,用来<BR>设置一些基本参数,另一种就是用来共享某个路径的段落,例如刚才的[public]。<BR><BR>[global]段落中可以设置许多信息,详细的内容可以参考samba的文档,对我们来说,<BR>最重要的是这样一些设置:<BR><BR>workgroup
=<BR><BR>这个选项用来设置你的windows系统的工作组名字或者NT域的名字。<BR><BR>netbios
name
=<BR><BR>设置在网上邻居里面看到的机器名,如果没有,将使用机器的DNS名字。<BR><BR>security和身份验证<BR><BR>security
=
<BR><BR>这个选项设置身份验证机制,即如何对用户验证身份,目前版本支持四个选项,即sh<BR>are,user,server和domain选项。<BR><BR>share选项就是我们刚才使用的,windows
9x客户可以直接访问共享目录,不需要给出<BR>密码。另外几种选项都需要提供用户名和密码。<BR><BR>如果security
=
user方式,那么系统将使用类似UNIX的账号管理机制来处理这个问题<BR>,你需要同时定义一个口令文件,用来存放samba的用户。<BR><BR>例如,与上面的配置相同,但是需要验证用户身份的smb.conf中的golobal段落是(注<BR>意加粗部分):<BR><BR>[global]<BR><BR>workgroup
= ASNC<BR><BR>load printers = no<BR><BR>encrypt
passwords=yes<BR><BR>smb passwd file =
/etc/smbpasswd<BR><BR>security=user<BR><BR>username
map = /etc/smbusers<BR><BR><BR>这里需要注意的是encrypt
passwords选项,这个选项表示登录过程中以加密方式传递<BR>口令,对于windows
98和windows NT
4.0,这个选项必须置成yes,对于windows95正好<BR>相反,要设置成no,因为windows
95直接传递明文的口令。如果你的系统中同时有wind<BR>ows 95和windows
98,需要将windows
98设置成传递明文,例子可以参考/usr/doc/sam<BR>ba-2.0.3/docs下的几个reg文件(其实只要双击正确的reg文件就OK了)。<BR><BR>username
map提供一个用户名字映像的功能,即将客户机提供的名字映象成UNIX账号<BR>,例如,这里给出的文件是:<BR><BR>#
Unix_name = SMB_name1 SMB_name2 ...<BR><BR>root
= administrator admin<BR><BR>nobody = guest
pcguest smbguest<BR><BR>root =
adm<BR><BR>也就是由客户提供的administrator登录名将自动由Linux解释为root账号。<BR><BR>smb
passwd
files提供了检验用户口令的文件。<BR><BR>smbusers和smbpasswd文件都可以通过smbadduser命令来设置,smbadduser的格式是:<BR><BR>smbadduser
[UNIX账号]:[windows
账号]<BR><BR>例如,要建立一个名叫test的windows登录账号,对应的UNIX账号是guest,执行<BR><BR>smbadduser
guest:test<BR><BR>然后会让你输入windows登录口令,确认后,这个账号就可以使用了。如果需要更改s<BR>amba口令,使用smbpasswd
[UNIX账号]就可以了。<BR><BR>另一个常用的security选项是security
=server,这个选项告诉系统应该到另外一台<BR>NT
server上做身份验证,例如,类似于刚才的形式,但是使用ASNT_1服务器进行口令验<BR>证的配置应该是:<BR><BR>[global]<BR><BR>workgroup
= ASNC<BR><BR>load printers =
no<BR><BR>security=server<BR><BR>password server
= ASNT_1<BR><BR>最后的password
server选项给出了口令服务器的名字,注意这里用的是netbios名字<BR>,也就是网络邻居中的名字,如果netbios名字和DNS名字不一致,你需要修改/etc/lmh<BR>osts文件,加入正确的netbios名字。(lmhosts文件的格式参考联机手册)。<BR><BR>最后一个可能的方式是security=domain选项,实际上,在用户看来,它和security=<BR>user几乎是一样的。区别在于,现在在本地建立的samba用户可以被加入到由NT的域控制<BR>器里面去。即使这样,仍然要求samba用户的本地映射(由NT用户到UNIX用户的对照)存<BR>在,因此,我们将不多讨论这个问题了。<BR><BR>其他重要的全局设置<BR><BR>在global段落里还有其他一些重要的参数,主要的有下面一些:<BR><BR>printing
=
<BR><BR>这个选项设置打印系统类型,由于Linux使用BSD打印系统,所以应该设置成printing<BR>=bsd。<BR><BR>printcap
name =<BR><BR>设置本地打印控制文件,例如printcap name =
/etc/printcap。<BR><BR>load printers
=<BR><BR>这个选项设置是否提供打印服务,如果你希望windows客户可以使用你的打印机,设置<BR>为load
printers = yes,否则为no。<BR><BR>guest account
=<BR><BR>guest用户的映射用户名字,通常总是设置为nobody。<BR><BR>lock
directory=<BR><BR>设置文件共享锁定使用的目录,例如lock directory
=
/var/lock/samba,这个目录<BR>在启动samba之前应该存在,而且属性要设置为755。<BR><BR>share
mode=<BR><BR>是否使用文件的共享锁定机制,应该设定为share mode =
yes以避免文件完整性遭到<BR>破坏。<BR><BR>password
level=<BR><BR>username level
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -