NFS 和 NIS 发挥网络功能
时间:2006-03-03 来源:panzifei
作者未知[如果知道的弟兄请来电子邮件告之]
本篇文章来自一张D版光盘
当您的 Linux 主机安装好并连上网络之后﹐那么很自然会进行远程操作吧。最常用的服务就是 telnet 了﹐它可以让您从一台机器登录到另外一台机器﹐然后完成所有远程的作业。使用 telnet ﹐有点像“网络基础”中的“Telecommunication”那里所说的 remote control ﹐也就是﹐您可以利用其它机器键盘和荧幕远程使用 Linux 主机。如果您使用 Windows 98 连接 Linux 的话﹕
按 ‘开始’--> ‘执行’--> 然后输入﹕ telnet 192.168.100.23 (如果 dns 或 hosts 档案设定好了﹐可以输入机器名称)﹐您就会看到一个登录画面了﹐不过﹐先别急着输入您的大名和密码﹐做做下面的动作﹕
联机 --> 中断
联机 --> 远程系统 --> Term Type:
选择 DEC-VT100
按‘联机’
然后再进行登录不迟。为什么这样做﹖我也不知道啦﹐本来我用以前的 Redhat 好好的﹐但后来换了 Redhat 6.0 之后﹐只要进入 vi 等文书编辑器﹐方向键就不听使唤了﹐只有做了上面动作才可以。后来发现﹐只要在 /etc/bashrc 档案里面加下面这一行就解决了﹕
export TERM=vt100
然而﹐在 RH7.1 上面预设是将 telnet 功能关闭的﹐您得修改 /etc/xinetd.d/telnet 里面的设定﹐设定 disable = no 才可以提供 telnet 服务。不过﹐系统之所以要关闭 telnet ﹐是因为它在网络上使用明码(clear text) 方式传送数据的缘故。为此﹐在 RH7.1 上面使用 ssh 服务来取代 telnet 服务﹐只是再提醒您一次﹕能用 ssh 就不要用 telnet ﹗
Okay﹐不管您使用 telnet 还是 ssh﹐所使用的档案系统和资源都在远程系统上面﹐如果您要将资料回存在本地计算机上面就不那么方便了。除了用 ftp 之外﹐您有否想过将远程的资料 mount 进本地的档案系统中呢﹖那么﹐NFS(Network File System) 就可以帮到你了。
另外﹐在网络环境中﹐理想的情况下是让使用者能够从网络上任何一台系统进行登录﹐也只有这样﹐您才能在登录之后使用 telnet 服务。然而﹐为了让使用者能够在网络上登录﹐您就必须为每一个使用者在所有 Linux 机器上建立独立的帐号。是否太麻烦了呢﹖您是否希望 Linux 能像 NT 那样有一个中央的 DOMAIN 登录数据库呢﹖有此念头完全正确﹐而好消息是﹕您在 Linux 上面使用 NIS (Network InFORMation Service) 就能做到﹗
或许﹐在一些大型的网络服务器设计上﹐例如设定多台 email server 来进行 load balancing 服务﹐除了前端需要 DNS 和其它一些负载分流技术之外﹐在后端﹐也不能避免的碰到帐号同步和资料同步的需求。前端的技术我们留代日后慢慢探讨﹐至于后端的技术﹐完全可以用 NFS 和 NIS 来做到。这也是我们这章的重点﹐假如您是一个 windows 用户﹐在看完下面的文章后﹐肯定让您震撼于 Linux 的强大网络功能而目瞪口呆﹗
先将我的网络环境说说吧(您可以参考上一章所介绍的环境)﹕
系统
主机名称
IP 地址
伺服端
RedHat 7.1
rh71.siyongc.domain
192.168.100.23
客户端
Mandrak 8.0
mdk.siyongc.domain
192.168.100.24
设定 NFS
请先确定 nfs-utils 套件有装起来(rpm -qa | grep nfs)﹐如果没有﹐请用 rpm 安装。假如需要在一开机的时候就激活 nfs 服务的话﹐那就用 ntsysv 将 nfs 选起来吧。喜欢的话﹐把 nfslock 也一并开启也无妨(请 man lockd)。
事实上﹐要设定 NFS 一点都不难﹐关键是 server 那端﹕/etc/exports 这个档案。在真正动手设定之前﹐我建议您先看看它的 manual ﹕
man 5 exports
请小心设定这个档﹐如果设定错误了﹐以后重新开机的时候您可就得非常不耐烦了。我是这样设定﹕﹕
/tmp *(rw,no_root_squash)
/usr/src *.siyongc.domain(ro,insecure) 192.168.100.*(ro,insecure)
/var/ftp/pub/incoming 192.168.100.24(rw,all_squash,anonuid=50,anongid=50)
第一行﹐我将 /tmp 这个目录完全分享出去了﹐不管客户端来自哪里。在括号里面的‘rw’就是 Read&Write 的意思﹐而‘no_root_squash’呢﹐则是允许让使用者具备 root 的权限﹐在某些特殊情况下﹐例如使用 bootp 登录的无磁盘工作站﹐是相当好用的。因为预设情况下 NFS 会将 root 的身份 squash 为权限最低的 anonymous (nobody) 身份﹐而其它身份则以 client 端机器上当时拥有的 User ID 和 Group ID (指号码的值)来建立档案。注意哦﹐在进权限判断的时候﹐ 不是以 UserName 来作为身份依据哦﹐UID 和 GID 的号码最后必须对应到 server 端的 /etc/passwd ﹐而非 client 那边的。
第二行﹐我将 /usr/src 这个目录分享给以 siyongc.domain 这个 domain 做结尾或是以 192.168.100 开头的所有机器﹐而无需使用 secure port (insecure)﹐但只具备只读权限(ro)。这里﹐您要留意 " * " 的使用﹐在一些旧版本的 NFS 您不能用在 IP 上。不过﹐我这里的测试却是可行的。
第三行﹐我将 /var/ftp/pub/incoming 这个目录只分享给 192.168.0.22 这台机器﹐且具备了读和写的权限(rw)﹐但在 server 上写入的档案﹐必须换成 anonymous 身份进行。但是其后的设定又将所有 anonymous 换成设定的 UID 和 GID (这里都是 ftp)﹐这样的安排是要确定所有存取都按指定身份进行。这个 incoming 目录预设是不存在的﹐日后在讨论到 FTP 服务设定时候会提到﹐但您可以自行用 mkdir 建立﹐而且为 group 和 others 加上 +w 权限以及 sgid 和 sticky bit (3777)。
Tips﹕如果您不知道或不想直接修改 /etc/exports 档案﹐您可以使用 netconf 然后选择‘Exported file system (NFS)’来进行设定。
完成 exports 设定后﹐就是重新激活 nfsd ﹕
service nfs stop
service nfs start
哦﹐我不建议您用 restart 来进行﹐最好用 stop 和 start ﹐并且重复两次﹐确定在第二次 stop 的时候﹐没看到红色的 [ FAILED ] 信息。因为我发现如果设定不正确﹐就算您执行 start ﹐也看到了四个 [ OK] ﹐但事实上未必真的成功跑起来﹐只能在 stop 的时候才能发现。另外一个原因是﹕如果设定错误﹐很可能导致 nfs 在激活的时候要等非常久的时间﹐这是不胜其烦的﹐尤其在开机的时候。所以﹐当您每次修改完 nfs 的设定﹐一定要 stop 再 start 看看﹐没问题才关机﹐否则下次开机可要培养耐性了。
Tips﹕如果您确定 /etc/exports 档设定无误﹐要重新读取其设定﹐只需输入如下命令就可以了﹕
exportfs -rv
假如有错误的话﹐应该会得到提示的。
为求确定﹐您最好执行﹕
showmount -e localhost
如果这个命令不能正确显示您所 export 的内容﹐那就重新检查设定步骤吧。
测试 NFS
一但 server 设定好之后﹐您只需在 client 端建立 mount point﹐然后用 mount 命令来挂载即可。不过﹐mount 之前最好用 showmount 来确定一下﹕
showmount -e rh71
Tips﹕假如在 server 那边 showmount -e localhost 有结果﹐而在 client 这边 showmount -e server 却不成功﹐那可能是防火墙或是 xinetd 的问题(参考后面的说明)。当然﹐前提是要确定联机是通的啦﹐ping 一下就知道了。
当 showmount 能顺利找到 server 的 exports 之后﹐那就可以放心 mount 了﹕
mkdir /mnt/nfs
mount -t nfs -o bg,soft,intr rh71:/tmp /mnt/nfs
然后﹐就好象自己的硬盘一样使用~~ 要卸载它﹐用 umount 命令就可以。不过﹐如果没有那些 -o 参数﹐然后在卸载之前您将 server 的 nfs 关闭了﹐或是网络联机出了问题﹐这时候再进行 umount 的话﹐很可能将您的机器‘定格’在那里哦﹗﹗小心小心~~~ 所以﹐最好在 mount 的时候加上 soft 参数﹐并且在关闭 nfs 服务器端之前﹐一定要先将所有的 client 所挂载的 mount point 进行 umount 才好进行。
Tips﹕如果 client 机器在激活的时候能连上网络﹐您还可以直接将挂载写进 /etc/fstab 檔中呢﹗
如果您遇到问题﹐通常最常见的错误信息是﹕
mount: xxxxx:/yyyyyyyy, reason given by server: Permission denied
造成这样的原因多数是 /etc/exports 档案没设定好的缘故﹐也就是在分享目录后面的“( )”里面的权限设定﹐建议从简单的设定测试起﹐例如 "/tmp *(ro)"。或是从 /var/log/messages 这个档案找找原因﹐检查一下被拒绝的原因。
还有﹐您最好确定 client 和 server 的机器名称已经在 /etc/hosts 被“正确”的设定起来﹐或者能够通过 DNS 查询得到(包括正反两解)。
在我的实践中﹐‘link_relative’有时候会造成‘Unknown keyword’﹐这样会引至 nfsd 无法正常激活﹐测试的时候请留意。
如果您碰到 rpc 相关的错误信息﹐例如﹕
mount: RPC: Unable to receive; errno = Connection refused
可能出现的问题很多﹐首先确定 portmap 服务是否有跑起来﹐可以用 rpcinfo 来检查﹕
rpcinfo -p rh71
如果没发现用 portmapper 的服务﹐您可以试试将之重新激活﹕
service portmap restart
不过﹐执行之后﹐请重新激活 nfs ﹐以及其它所有和 portmap 相关的服务(因为它们会因为 portmap 重启而失效(最好用 rpcinfo 来确认)。
还有另外的情形﹐可能是 portmap (tcp & udp port 111) 的联机被防火墙挡掉了。或是 xinetd 那边没开放 portmap 服务﹐例如在 /etc/hosts.deny 中设定了 "ALL: ALL"﹐那您可以修改 /etc/hosts.allow ﹕
portmap: 192.168.100., .siyongc.domain
还有﹐就是可能 nfs 还没起来﹐请确定服务能正确跑起来﹐可以用 stop 和 start 或是 rpcinfo 来判断。
另外﹐当您升级 server 的 kernal 之后﹐最好也将 client 的 kernal 一起同步。否则您会遇到 mount version 的警告﹐不过﹐您还是可以成功的实现 nfs mount 这动作。
有时候﹐您或许会突发兴致给计算机改改主机名称或转换 domain﹐这样也容易造成 NFS 在激活的时候延迟﹐而且是延迟得难以忍受﹗造成这样的问题可能有多方面的﹐如 hostsname 设定不正确﹐或 DNS 那里有误。不过﹐有一个地方您可以考虑的﹐就是把这个档案内容清一清﹕/var/lib/nfs/rmtab
如果还有问题﹐先熟读一下 exports 的 man page (man 5 exports)﹐更详细的就请参考 NFS 的帮助 文件。
设定 NIS
设定 NIS 一点都不难~~ 嘿嘿﹐又来了~~~
难的是当它不工作的时候却不知道问题出在哪里﹖哈哈﹐废话~~
好了﹐言归正传。我们只需指定某一台 Linux 机器做 NIS 服务器﹐然后其它机器就老实的当 NIS 客户就好了。如果您的网络较大﹐也可以考虑安装 Slave NIS 服务器来分担 Master NIS 的工作。不过﹐我们这里只说说 NIS Server 和 Client 的设定﹐Slave NIS 则留给您自己去研究了﹐若有成果的话﹐最好能回来和大家分享分享。
或许﹐您还听说过 NIS+ 这个名称﹐它是 NIS 增强版本﹐尤其在网络安全方面有所改善。不过﹐这里不针对 NIS+ 说明了。
首先﹐让我们架设好中央的 NIS 服务器吧。
在设定之前﹐您必须确定网络工作正常﹐例如联机﹑hosts﹑xined﹑诸如此类的﹐这应该不用多提了吧。
再来确定 ypserv 套件有安装起来(rpm -qa | grep yp)﹐否则用 rpm 安装。
执行 ntsysv 将 ypserv 和 yppasswdd 选择起来﹐确定在开机的时候就能抓取到。
修改 /etc/xined.d 目录下面的 time 和 time-udp 两个档案﹐确定 "disable = no" 。﹕
重新激活 xinetd﹕
service xinetd restart
修改 /var/yp/securenets﹐确定有这样的叙述(请针对您的网络设定做适当修改)﹕
# Always allow access for localhost
255.0.0.0 127.0.0.0
# This line gives access to everybody. PLEASE ADJUST!
#0.0.0.0 0.0.0.0
255.255.255.0 192.168.100.0
接下来﹐输入﹕
rpcinfo -u localhost ypserv
6. 确定 ypserv 是工作的﹐您应该会看到这样的信息﹕
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
7. 如果您没看到﹐那就执行﹕
service ypserv start
8. 重复同样的步骤﹐确定 yppasswdd 也是工作的。并且用 rpcinfo -p localhost 确定 ypserv 和 yppasswdd 均列其上。
接下来﹐建立这下面两个档案(如果它们不存在的话)﹕
设定 NIS 的domain name﹕
nisdomainname chen
注﹕最好起一个有别于目前 domain 的名字﹐这主要是出于安全考量。 您可以将上面这行命令加进 /etc/rc.d/rc.local 里面。 (不过我在实作上﹐发现 server 端不设定 nisdomainname 也可以的﹐不知道是否真的﹖)
touch /etc/gshadow /etc/netgroup
然后初始设定 NIS 服务﹕
/usr/lib/yp/ypinit -m
11.记住要用 Ctrl + D 来结束﹐不是用 Ctrl + C 哦﹐切记切记﹗
12.然后输入 y 按 Enter 。
13.注﹕每次您新增了帐号﹐或修改过 /etc/passwd 档﹐都要重复这个动作。
14.留意一下有否错误﹐有则根据信息做适当修改﹐无则继续。例如﹐如果它响应说 "No rule to mak target xxxxxx, needed by yyyyyyyy."﹐通常是在 /etc 下面找不到档案而已﹐用 touch /etc/xxxxxxx 就可以解决之。
重新激活 ypserver 和 yppasswdd﹕
service ypserv restart
service yppasswdd restart
为求保险﹐最好用 rpcinfo 命令来确认一下。就这样﹐NIS 的 server 就设定好了﹗很容易~~ 没骗您吧﹖^_^
设定 NIS client
接下来﹐是设定 NIS Client 。这里是在 mdk.siyongc.domain (192.168.100.24) 这台机器上面设定﹕
先确定 ypbind 和 yp-tools 套件有安装起来(rpm -qa | grep yp)﹐否则用 rpm 安装。并执行 ntsysv﹐确定 ypbind 被选择了。
再来执行﹕
/bin/nisdomainname chen
然后修改 /etc/yp.conf﹐加进这两行﹕
domain chen
ypserver redhat52.siyongc.domain
注﹕必须确定 client 和 server 的 nisdomain 一致。并修改 /etc/sysconfig/network 檔中的句子(不存在则自行建立)﹕
NISDOMAIN=chen
修改 /etc/passwd﹐在末尾加入﹕
+:::::: # 就是 + 号后带六个小数点﹐之间没空格键。
然后激活 ypbind﹕
service ypbind restart
如果顺利这命令很快就完成﹐要不然要检查 server 和 client 双方的设定和联机了。
测试 NIS
接下来﹐就是检验劳动成果的时候了。先以 root 身份登入 server﹐并新增一个测试帐号﹕
useradd ypu1
passwd ypu1
然后转到客户端上面以 root 身份登录﹐并输入﹕
ypcat passwd
如果顺利的话﹐ server 端 UID 大于 500 的帐号都会被列出来。您也可以执行下面命令来确定某帐号是否出现在 NIS 登录之中﹕
getent passwd ypu1
假如您看不到任何信息响应﹐那么﹐很可能是前面的步骤(包括服务器和客户端)还没正确完成﹐您则需要找出原因所在。
如果您能得到信息响应﹐例如﹕
ypu1:$1$BzYQtUua$n68UwKiNVDjWS/UJGHFU4/:1001:1001::/home/ypu1:/bin/bash
那是好消息﹗否则您得从头进行 debug 方好继续。
当上一步骤过关之后﹐如果您觉得有需要﹐那您可以再修改帐号的 yp 密码。但这步不是必须的﹐如果您能够从另外的机器用 NIS 帐号登录就可以略过此步骤(我建议您不必修改 yp 密码)。﹕
yppasswd ypu1
Please enter root passwd:
Please enter new passwd:
Please retype password:
注意﹕第一行是 root 密码﹐最后两行是设定 yp 的 NIS password。最好和原来的密码一致﹐因为原来的密码也会被更改为 nis 的密码﹐小心﹗(请参考后面的说明)
接着请在本地主机上面建立起该使用者的家目录﹕
cp -a /etc/skel /home/ypu1
chown -R ypu1.ypu1 /home/ypu1
这样﹐您就可以使用 NIS 登录了﹗
当然﹐您也可以设定 Linux 在开机的时候通过 NFS 挂载到使用者原本的家目录(tips﹕修改 /etc/fstab)。但如何做﹖您自己去尝试吧﹐这里暂时卖个关子。不过﹐下面我有更好的提议﹐请不要错过了哦~~
在使用 NIS 的时候﹐您需要注意的地方大致有如下这些﹕
当您有新的使用者增加之后﹐或是执行过 usermod﹐或是修改过 /etc/passwd 檔﹐您要 cd /var/yp 然后执行 make (或重新执行 /usr/lib/yp/ypinit -m) 以更新 nis 资料。但这样做的结果﹐会将 yp 密码同步为系统的密码。如果在 client 端以 root 身份执行 yppasswd 来重设 NIS 帐号的密码的话﹐新帐号必须已经设定过系统密码﹐但执行 yppasswd 之后﹐会将系统密码同步为 yp 密码。然而有趣的是﹐之后您再于 server 主机上更改原帐号的密码﹐却不会影响 NIS 的哦﹐不过 user 在 client 端却只能用 yppasswd 而不能用 passwd 来修改密码。
但这似乎是个矛盾﹕修改了 yp 密码会改变系统密码﹐修改系统密码却不改变 yp 密码﹐然后新增帐号后需要同步 nis 帐号﹐却又把 yp 密码变回系统密码﹗真是有点乱~~ 所以﹐所有 NIS 帐号﹐最好避免修改系统密码。
如果登录失败﹐用 rpcinfo 来确定服务﹐可以先在 server 测试 localhost﹐然后到 client 上测试 server 。如果 server 可以而 client 不可以﹐那可能又是防火墙或 xinetd ﹐或是联机的问题了。
其中﹐portmap 也是一个很重要的服务(有些系统会显示为 rpcbind)﹐在您执行 ypserv 和 yppasswdd 之前﹐要确定它已经被激活了。如果您需要重启 portmap ﹐要确定所有基于它的服务也要重新激活。
同时留意一下 client 和 server 的 NIS domain name 是否一致。
设定 NIS﹐在 server 端牵涉的档案和服务比较多﹐诸如 rpc﹑portmap﹑yp﹑nsswitch 等等﹐请用 man 命令看看它们的用法﹐例如每个 manual 最后的 SEE ALSO 也不要漏了看。
我曾经试过一直尝试 client 那边的 ypbind 都连不上 server ﹐总得到什么 "Domain not bound" 的信息。后来也没改什么﹐吃完中午饭回来再试一次竟然可以了﹗百思不得其解﹐只是将经验告诉您﹕有时候﹐退一步海阔天空。
设定 autofs
当您按照前面的步骤完成了 NFS 和 NIS 一定很兴奋吧﹗(有没有冲动要来信和我分享这份喜悦啊﹖^_^ ) 然而﹐这里我再教您一个法子﹐让您 high 到最高点﹗
您在前面的实作中﹐您脑海中是否闪过这些疑问呢﹕
是否觉得要在 client 上面替使用者建立帐号是非常笨拙的动作﹖没错﹗这样做的话﹐很容易造成使用者资料到处乱放﹐给管理上带来极大的不方面。
您是否想将 user 的 home 也 mount 在 NIS server 上呢﹖好提议﹗或许您已经想到 NFS 了吧。
如何做呢﹖因为 nfs 需要 root 在能执行 mount ﹐要不然还要弄 sudo 让使用者自己 mount 呢。
有没更方便的办法啊﹖哈哈﹐当然有啦﹐就是用 autofs 来解决。
Okay﹐说了这么多﹐赶快介绍如何设定吧﹕
首先我们得修改一下 server 那边的帐号设定﹐其中最重要是关于 home dir 的设定。先让我们停掉 NFS 服务并且退出所有 NIS 登录﹐并建立新的 NIS 帐号专用目录﹕
service yppasswdd stop
service ypserv stop
service nfs stop
mkdir /home/yphome
再将 NIS 帐号的 home dir 搬到新的目录去﹐并修改帐号的内容﹕
mv /home/ypu1 /home/yphome
usermod -d /home/yphome/ypu1 ypu1
3. 其它 NIS 帐号也如法泡制。如果您需要新增加 NIS 帐号﹐请指定其 home dir 的路径﹐例如﹕
useradd -d /home/yphome/ypu2 ypu2
passwd ypu2
当所有 NIS 帐号修改完毕之后﹐不要忘记更新 NIS 数据库﹕
cd /var/yp
make
5. 修改 /etc/exports 文件﹐输出 yphome 目录﹕
/home/yphome *.siyongc.domain(rw,no_root_squash) 192.168.100.*(rw,no_root_squash)
完成后重新激活 nfs 和 nis 服务﹕
service nfs start
service ypserv start
service yppasswdd start
接下来转到 client 端。先确定 autofs 套件有安装起来﹐否则请用 rpm 来解决。然后还要执行 ntsysv 确定 autofs 能在开机的时候被激活。
然后修改 /etc/auto.master ﹐加入如下句子﹕
/home/yphome /etc/auto.yphome --timeout=60
根据上面句子中的第二栏设定﹐再建立 /etc/auto.yphome 档案﹕
* -fstype=nfs,bg,soft,intr rh71:/home/yphome/&
接下来建立 /etc/auto.master 所指定的 mount point ﹕
mkdir /home/yphome
最后重新执行 autofs 和 ypbind 服务﹕
servcie autofs restart
service ypbind restart
没错﹐就酱子而已~~~ 然后您用原来的 ypu1 和新增的 ypu2 帐号登录﹐看看是否成了﹖
如果您的系统从安装到核心编译到网络设定都是根据我的步骤进行的话﹐应该不会有困难。如果有问题﹐那可能是您打错字(或是我这里打错字)的关系而已。不过﹐如果发现 autofs 不成功的话﹐建议先用手工执行 mount 来测试 NFS 联机。
有了以上经验﹐假如您要将所有 yp user 的邮件信箱也集中在相同的位置上(例如做 mail server load balancing)﹐也不会难倒您才对。具体步骤我不详说了﹐只点出关键要注意的地方﹕
设定 NFS 主机﹐输出 /var/spool/mail 目录。
设定所有的 client 主机﹐将 /var/spool/mail 挂载到 NFS 主机上(可以修改 /etc/fstab 设定)。
如果您要将整个 client 系统的帐号都转用 NIS 帐号的话﹐那可以将整个 /home 和 /var/spool/mail 挂到 NFS 上﹐那就无需建什么 yphome 了。
不过﹐有些关于主机本身的资料﹐例如 root 邮件 ﹐就不知道如何独立出来了。或许需要修改 email 程序﹐但我暂时还找不到好方法。
事实上﹐善用 NFS﹑NIS﹑和 autofs 可以营造的网络空间是非常广阔的﹐这些需要您自己发挥创意了。
本篇文章来自一张D版光盘
当您的 Linux 主机安装好并连上网络之后﹐那么很自然会进行远程操作吧。最常用的服务就是 telnet 了﹐它可以让您从一台机器登录到另外一台机器﹐然后完成所有远程的作业。使用 telnet ﹐有点像“网络基础”中的“Telecommunication”那里所说的 remote control ﹐也就是﹐您可以利用其它机器键盘和荧幕远程使用 Linux 主机。如果您使用 Windows 98 连接 Linux 的话﹕
按 ‘开始’--> ‘执行’--> 然后输入﹕ telnet 192.168.100.23 (如果 dns 或 hosts 档案设定好了﹐可以输入机器名称)﹐您就会看到一个登录画面了﹐不过﹐先别急着输入您的大名和密码﹐做做下面的动作﹕
联机 --> 中断
联机 --> 远程系统 --> Term Type:
选择 DEC-VT100
按‘联机’
然后再进行登录不迟。为什么这样做﹖我也不知道啦﹐本来我用以前的 Redhat 好好的﹐但后来换了 Redhat 6.0 之后﹐只要进入 vi 等文书编辑器﹐方向键就不听使唤了﹐只有做了上面动作才可以。后来发现﹐只要在 /etc/bashrc 档案里面加下面这一行就解决了﹕
export TERM=vt100
然而﹐在 RH7.1 上面预设是将 telnet 功能关闭的﹐您得修改 /etc/xinetd.d/telnet 里面的设定﹐设定 disable = no 才可以提供 telnet 服务。不过﹐系统之所以要关闭 telnet ﹐是因为它在网络上使用明码(clear text) 方式传送数据的缘故。为此﹐在 RH7.1 上面使用 ssh 服务来取代 telnet 服务﹐只是再提醒您一次﹕能用 ssh 就不要用 telnet ﹗
Okay﹐不管您使用 telnet 还是 ssh﹐所使用的档案系统和资源都在远程系统上面﹐如果您要将资料回存在本地计算机上面就不那么方便了。除了用 ftp 之外﹐您有否想过将远程的资料 mount 进本地的档案系统中呢﹖那么﹐NFS(Network File System) 就可以帮到你了。
另外﹐在网络环境中﹐理想的情况下是让使用者能够从网络上任何一台系统进行登录﹐也只有这样﹐您才能在登录之后使用 telnet 服务。然而﹐为了让使用者能够在网络上登录﹐您就必须为每一个使用者在所有 Linux 机器上建立独立的帐号。是否太麻烦了呢﹖您是否希望 Linux 能像 NT 那样有一个中央的 DOMAIN 登录数据库呢﹖有此念头完全正确﹐而好消息是﹕您在 Linux 上面使用 NIS (Network InFORMation Service) 就能做到﹗
或许﹐在一些大型的网络服务器设计上﹐例如设定多台 email server 来进行 load balancing 服务﹐除了前端需要 DNS 和其它一些负载分流技术之外﹐在后端﹐也不能避免的碰到帐号同步和资料同步的需求。前端的技术我们留代日后慢慢探讨﹐至于后端的技术﹐完全可以用 NFS 和 NIS 来做到。这也是我们这章的重点﹐假如您是一个 windows 用户﹐在看完下面的文章后﹐肯定让您震撼于 Linux 的强大网络功能而目瞪口呆﹗
先将我的网络环境说说吧(您可以参考上一章所介绍的环境)﹕
系统
主机名称
IP 地址
伺服端
RedHat 7.1
rh71.siyongc.domain
192.168.100.23
客户端
Mandrak 8.0
mdk.siyongc.domain
192.168.100.24
设定 NFS
请先确定 nfs-utils 套件有装起来(rpm -qa | grep nfs)﹐如果没有﹐请用 rpm 安装。假如需要在一开机的时候就激活 nfs 服务的话﹐那就用 ntsysv 将 nfs 选起来吧。喜欢的话﹐把 nfslock 也一并开启也无妨(请 man lockd)。
事实上﹐要设定 NFS 一点都不难﹐关键是 server 那端﹕/etc/exports 这个档案。在真正动手设定之前﹐我建议您先看看它的 manual ﹕
man 5 exports
请小心设定这个档﹐如果设定错误了﹐以后重新开机的时候您可就得非常不耐烦了。我是这样设定﹕﹕
/tmp *(rw,no_root_squash)
/usr/src *.siyongc.domain(ro,insecure) 192.168.100.*(ro,insecure)
/var/ftp/pub/incoming 192.168.100.24(rw,all_squash,anonuid=50,anongid=50)
第一行﹐我将 /tmp 这个目录完全分享出去了﹐不管客户端来自哪里。在括号里面的‘rw’就是 Read&Write 的意思﹐而‘no_root_squash’呢﹐则是允许让使用者具备 root 的权限﹐在某些特殊情况下﹐例如使用 bootp 登录的无磁盘工作站﹐是相当好用的。因为预设情况下 NFS 会将 root 的身份 squash 为权限最低的 anonymous (nobody) 身份﹐而其它身份则以 client 端机器上当时拥有的 User ID 和 Group ID (指号码的值)来建立档案。注意哦﹐在进权限判断的时候﹐ 不是以 UserName 来作为身份依据哦﹐UID 和 GID 的号码最后必须对应到 server 端的 /etc/passwd ﹐而非 client 那边的。
第二行﹐我将 /usr/src 这个目录分享给以 siyongc.domain 这个 domain 做结尾或是以 192.168.100 开头的所有机器﹐而无需使用 secure port (insecure)﹐但只具备只读权限(ro)。这里﹐您要留意 " * " 的使用﹐在一些旧版本的 NFS 您不能用在 IP 上。不过﹐我这里的测试却是可行的。
第三行﹐我将 /var/ftp/pub/incoming 这个目录只分享给 192.168.0.22 这台机器﹐且具备了读和写的权限(rw)﹐但在 server 上写入的档案﹐必须换成 anonymous 身份进行。但是其后的设定又将所有 anonymous 换成设定的 UID 和 GID (这里都是 ftp)﹐这样的安排是要确定所有存取都按指定身份进行。这个 incoming 目录预设是不存在的﹐日后在讨论到 FTP 服务设定时候会提到﹐但您可以自行用 mkdir 建立﹐而且为 group 和 others 加上 +w 权限以及 sgid 和 sticky bit (3777)。
Tips﹕如果您不知道或不想直接修改 /etc/exports 档案﹐您可以使用 netconf 然后选择‘Exported file system (NFS)’来进行设定。
完成 exports 设定后﹐就是重新激活 nfsd ﹕
service nfs stop
service nfs start
哦﹐我不建议您用 restart 来进行﹐最好用 stop 和 start ﹐并且重复两次﹐确定在第二次 stop 的时候﹐没看到红色的 [ FAILED ] 信息。因为我发现如果设定不正确﹐就算您执行 start ﹐也看到了四个 [ OK] ﹐但事实上未必真的成功跑起来﹐只能在 stop 的时候才能发现。另外一个原因是﹕如果设定错误﹐很可能导致 nfs 在激活的时候要等非常久的时间﹐这是不胜其烦的﹐尤其在开机的时候。所以﹐当您每次修改完 nfs 的设定﹐一定要 stop 再 start 看看﹐没问题才关机﹐否则下次开机可要培养耐性了。
Tips﹕如果您确定 /etc/exports 档设定无误﹐要重新读取其设定﹐只需输入如下命令就可以了﹕
exportfs -rv
假如有错误的话﹐应该会得到提示的。
为求确定﹐您最好执行﹕
showmount -e localhost
如果这个命令不能正确显示您所 export 的内容﹐那就重新检查设定步骤吧。
测试 NFS
一但 server 设定好之后﹐您只需在 client 端建立 mount point﹐然后用 mount 命令来挂载即可。不过﹐mount 之前最好用 showmount 来确定一下﹕
showmount -e rh71
Tips﹕假如在 server 那边 showmount -e localhost 有结果﹐而在 client 这边 showmount -e server 却不成功﹐那可能是防火墙或是 xinetd 的问题(参考后面的说明)。当然﹐前提是要确定联机是通的啦﹐ping 一下就知道了。
当 showmount 能顺利找到 server 的 exports 之后﹐那就可以放心 mount 了﹕
mkdir /mnt/nfs
mount -t nfs -o bg,soft,intr rh71:/tmp /mnt/nfs
然后﹐就好象自己的硬盘一样使用~~ 要卸载它﹐用 umount 命令就可以。不过﹐如果没有那些 -o 参数﹐然后在卸载之前您将 server 的 nfs 关闭了﹐或是网络联机出了问题﹐这时候再进行 umount 的话﹐很可能将您的机器‘定格’在那里哦﹗﹗小心小心~~~ 所以﹐最好在 mount 的时候加上 soft 参数﹐并且在关闭 nfs 服务器端之前﹐一定要先将所有的 client 所挂载的 mount point 进行 umount 才好进行。
Tips﹕如果 client 机器在激活的时候能连上网络﹐您还可以直接将挂载写进 /etc/fstab 檔中呢﹗
如果您遇到问题﹐通常最常见的错误信息是﹕
mount: xxxxx:/yyyyyyyy, reason given by server: Permission denied
造成这样的原因多数是 /etc/exports 档案没设定好的缘故﹐也就是在分享目录后面的“( )”里面的权限设定﹐建议从简单的设定测试起﹐例如 "/tmp *(ro)"。或是从 /var/log/messages 这个档案找找原因﹐检查一下被拒绝的原因。
还有﹐您最好确定 client 和 server 的机器名称已经在 /etc/hosts 被“正确”的设定起来﹐或者能够通过 DNS 查询得到(包括正反两解)。
在我的实践中﹐‘link_relative’有时候会造成‘Unknown keyword’﹐这样会引至 nfsd 无法正常激活﹐测试的时候请留意。
如果您碰到 rpc 相关的错误信息﹐例如﹕
mount: RPC: Unable to receive; errno = Connection refused
可能出现的问题很多﹐首先确定 portmap 服务是否有跑起来﹐可以用 rpcinfo 来检查﹕
rpcinfo -p rh71
如果没发现用 portmapper 的服务﹐您可以试试将之重新激活﹕
service portmap restart
不过﹐执行之后﹐请重新激活 nfs ﹐以及其它所有和 portmap 相关的服务(因为它们会因为 portmap 重启而失效(最好用 rpcinfo 来确认)。
还有另外的情形﹐可能是 portmap (tcp & udp port 111) 的联机被防火墙挡掉了。或是 xinetd 那边没开放 portmap 服务﹐例如在 /etc/hosts.deny 中设定了 "ALL: ALL"﹐那您可以修改 /etc/hosts.allow ﹕
portmap: 192.168.100., .siyongc.domain
还有﹐就是可能 nfs 还没起来﹐请确定服务能正确跑起来﹐可以用 stop 和 start 或是 rpcinfo 来判断。
另外﹐当您升级 server 的 kernal 之后﹐最好也将 client 的 kernal 一起同步。否则您会遇到 mount version 的警告﹐不过﹐您还是可以成功的实现 nfs mount 这动作。
有时候﹐您或许会突发兴致给计算机改改主机名称或转换 domain﹐这样也容易造成 NFS 在激活的时候延迟﹐而且是延迟得难以忍受﹗造成这样的问题可能有多方面的﹐如 hostsname 设定不正确﹐或 DNS 那里有误。不过﹐有一个地方您可以考虑的﹐就是把这个档案内容清一清﹕/var/lib/nfs/rmtab
如果还有问题﹐先熟读一下 exports 的 man page (man 5 exports)﹐更详细的就请参考 NFS 的帮助 文件。
设定 NIS
设定 NIS 一点都不难~~ 嘿嘿﹐又来了~~~
难的是当它不工作的时候却不知道问题出在哪里﹖哈哈﹐废话~~
好了﹐言归正传。我们只需指定某一台 Linux 机器做 NIS 服务器﹐然后其它机器就老实的当 NIS 客户就好了。如果您的网络较大﹐也可以考虑安装 Slave NIS 服务器来分担 Master NIS 的工作。不过﹐我们这里只说说 NIS Server 和 Client 的设定﹐Slave NIS 则留给您自己去研究了﹐若有成果的话﹐最好能回来和大家分享分享。
或许﹐您还听说过 NIS+ 这个名称﹐它是 NIS 增强版本﹐尤其在网络安全方面有所改善。不过﹐这里不针对 NIS+ 说明了。
首先﹐让我们架设好中央的 NIS 服务器吧。
在设定之前﹐您必须确定网络工作正常﹐例如联机﹑hosts﹑xined﹑诸如此类的﹐这应该不用多提了吧。
再来确定 ypserv 套件有安装起来(rpm -qa | grep yp)﹐否则用 rpm 安装。
执行 ntsysv 将 ypserv 和 yppasswdd 选择起来﹐确定在开机的时候就能抓取到。
修改 /etc/xined.d 目录下面的 time 和 time-udp 两个档案﹐确定 "disable = no" 。﹕
重新激活 xinetd﹕
service xinetd restart
修改 /var/yp/securenets﹐确定有这样的叙述(请针对您的网络设定做适当修改)﹕
# Always allow access for localhost
255.0.0.0 127.0.0.0
# This line gives access to everybody. PLEASE ADJUST!
#0.0.0.0 0.0.0.0
255.255.255.0 192.168.100.0
接下来﹐输入﹕
rpcinfo -u localhost ypserv
6. 确定 ypserv 是工作的﹐您应该会看到这样的信息﹕
program 100004 version 1 ready and waiting
program 100004 version 2 ready and waiting
7. 如果您没看到﹐那就执行﹕
service ypserv start
8. 重复同样的步骤﹐确定 yppasswdd 也是工作的。并且用 rpcinfo -p localhost 确定 ypserv 和 yppasswdd 均列其上。
接下来﹐建立这下面两个档案(如果它们不存在的话)﹕
设定 NIS 的domain name﹕
nisdomainname chen
注﹕最好起一个有别于目前 domain 的名字﹐这主要是出于安全考量。 您可以将上面这行命令加进 /etc/rc.d/rc.local 里面。 (不过我在实作上﹐发现 server 端不设定 nisdomainname 也可以的﹐不知道是否真的﹖)
touch /etc/gshadow /etc/netgroup
然后初始设定 NIS 服务﹕
/usr/lib/yp/ypinit -m
11.记住要用 Ctrl + D 来结束﹐不是用 Ctrl + C 哦﹐切记切记﹗
12.然后输入 y 按 Enter 。
13.注﹕每次您新增了帐号﹐或修改过 /etc/passwd 档﹐都要重复这个动作。
14.留意一下有否错误﹐有则根据信息做适当修改﹐无则继续。例如﹐如果它响应说 "No rule to mak target xxxxxx, needed by yyyyyyyy."﹐通常是在 /etc 下面找不到档案而已﹐用 touch /etc/xxxxxxx 就可以解决之。
重新激活 ypserver 和 yppasswdd﹕
service ypserv restart
service yppasswdd restart
为求保险﹐最好用 rpcinfo 命令来确认一下。就这样﹐NIS 的 server 就设定好了﹗很容易~~ 没骗您吧﹖^_^
设定 NIS client
接下来﹐是设定 NIS Client 。这里是在 mdk.siyongc.domain (192.168.100.24) 这台机器上面设定﹕
先确定 ypbind 和 yp-tools 套件有安装起来(rpm -qa | grep yp)﹐否则用 rpm 安装。并执行 ntsysv﹐确定 ypbind 被选择了。
再来执行﹕
/bin/nisdomainname chen
然后修改 /etc/yp.conf﹐加进这两行﹕
domain chen
ypserver redhat52.siyongc.domain
注﹕必须确定 client 和 server 的 nisdomain 一致。并修改 /etc/sysconfig/network 檔中的句子(不存在则自行建立)﹕
NISDOMAIN=chen
修改 /etc/passwd﹐在末尾加入﹕
+:::::: # 就是 + 号后带六个小数点﹐之间没空格键。
然后激活 ypbind﹕
service ypbind restart
如果顺利这命令很快就完成﹐要不然要检查 server 和 client 双方的设定和联机了。
测试 NIS
接下来﹐就是检验劳动成果的时候了。先以 root 身份登入 server﹐并新增一个测试帐号﹕
useradd ypu1
passwd ypu1
然后转到客户端上面以 root 身份登录﹐并输入﹕
ypcat passwd
如果顺利的话﹐ server 端 UID 大于 500 的帐号都会被列出来。您也可以执行下面命令来确定某帐号是否出现在 NIS 登录之中﹕
getent passwd ypu1
假如您看不到任何信息响应﹐那么﹐很可能是前面的步骤(包括服务器和客户端)还没正确完成﹐您则需要找出原因所在。
如果您能得到信息响应﹐例如﹕
ypu1:$1$BzYQtUua$n68UwKiNVDjWS/UJGHFU4/:1001:1001::/home/ypu1:/bin/bash
那是好消息﹗否则您得从头进行 debug 方好继续。
当上一步骤过关之后﹐如果您觉得有需要﹐那您可以再修改帐号的 yp 密码。但这步不是必须的﹐如果您能够从另外的机器用 NIS 帐号登录就可以略过此步骤(我建议您不必修改 yp 密码)。﹕
yppasswd ypu1
Please enter root passwd:
Please enter new passwd:
Please retype password:
注意﹕第一行是 root 密码﹐最后两行是设定 yp 的 NIS password。最好和原来的密码一致﹐因为原来的密码也会被更改为 nis 的密码﹐小心﹗(请参考后面的说明)
接着请在本地主机上面建立起该使用者的家目录﹕
cp -a /etc/skel /home/ypu1
chown -R ypu1.ypu1 /home/ypu1
这样﹐您就可以使用 NIS 登录了﹗
当然﹐您也可以设定 Linux 在开机的时候通过 NFS 挂载到使用者原本的家目录(tips﹕修改 /etc/fstab)。但如何做﹖您自己去尝试吧﹐这里暂时卖个关子。不过﹐下面我有更好的提议﹐请不要错过了哦~~
在使用 NIS 的时候﹐您需要注意的地方大致有如下这些﹕
当您有新的使用者增加之后﹐或是执行过 usermod﹐或是修改过 /etc/passwd 檔﹐您要 cd /var/yp 然后执行 make (或重新执行 /usr/lib/yp/ypinit -m) 以更新 nis 资料。但这样做的结果﹐会将 yp 密码同步为系统的密码。如果在 client 端以 root 身份执行 yppasswd 来重设 NIS 帐号的密码的话﹐新帐号必须已经设定过系统密码﹐但执行 yppasswd 之后﹐会将系统密码同步为 yp 密码。然而有趣的是﹐之后您再于 server 主机上更改原帐号的密码﹐却不会影响 NIS 的哦﹐不过 user 在 client 端却只能用 yppasswd 而不能用 passwd 来修改密码。
但这似乎是个矛盾﹕修改了 yp 密码会改变系统密码﹐修改系统密码却不改变 yp 密码﹐然后新增帐号后需要同步 nis 帐号﹐却又把 yp 密码变回系统密码﹗真是有点乱~~ 所以﹐所有 NIS 帐号﹐最好避免修改系统密码。
如果登录失败﹐用 rpcinfo 来确定服务﹐可以先在 server 测试 localhost﹐然后到 client 上测试 server 。如果 server 可以而 client 不可以﹐那可能又是防火墙或 xinetd ﹐或是联机的问题了。
其中﹐portmap 也是一个很重要的服务(有些系统会显示为 rpcbind)﹐在您执行 ypserv 和 yppasswdd 之前﹐要确定它已经被激活了。如果您需要重启 portmap ﹐要确定所有基于它的服务也要重新激活。
同时留意一下 client 和 server 的 NIS domain name 是否一致。
设定 NIS﹐在 server 端牵涉的档案和服务比较多﹐诸如 rpc﹑portmap﹑yp﹑nsswitch 等等﹐请用 man 命令看看它们的用法﹐例如每个 manual 最后的 SEE ALSO 也不要漏了看。
我曾经试过一直尝试 client 那边的 ypbind 都连不上 server ﹐总得到什么 "Domain not bound" 的信息。后来也没改什么﹐吃完中午饭回来再试一次竟然可以了﹗百思不得其解﹐只是将经验告诉您﹕有时候﹐退一步海阔天空。
设定 autofs
当您按照前面的步骤完成了 NFS 和 NIS 一定很兴奋吧﹗(有没有冲动要来信和我分享这份喜悦啊﹖^_^ ) 然而﹐这里我再教您一个法子﹐让您 high 到最高点﹗
您在前面的实作中﹐您脑海中是否闪过这些疑问呢﹕
是否觉得要在 client 上面替使用者建立帐号是非常笨拙的动作﹖没错﹗这样做的话﹐很容易造成使用者资料到处乱放﹐给管理上带来极大的不方面。
您是否想将 user 的 home 也 mount 在 NIS server 上呢﹖好提议﹗或许您已经想到 NFS 了吧。
如何做呢﹖因为 nfs 需要 root 在能执行 mount ﹐要不然还要弄 sudo 让使用者自己 mount 呢。
有没更方便的办法啊﹖哈哈﹐当然有啦﹐就是用 autofs 来解决。
Okay﹐说了这么多﹐赶快介绍如何设定吧﹕
首先我们得修改一下 server 那边的帐号设定﹐其中最重要是关于 home dir 的设定。先让我们停掉 NFS 服务并且退出所有 NIS 登录﹐并建立新的 NIS 帐号专用目录﹕
service yppasswdd stop
service ypserv stop
service nfs stop
mkdir /home/yphome
再将 NIS 帐号的 home dir 搬到新的目录去﹐并修改帐号的内容﹕
mv /home/ypu1 /home/yphome
usermod -d /home/yphome/ypu1 ypu1
3. 其它 NIS 帐号也如法泡制。如果您需要新增加 NIS 帐号﹐请指定其 home dir 的路径﹐例如﹕
useradd -d /home/yphome/ypu2 ypu2
passwd ypu2
当所有 NIS 帐号修改完毕之后﹐不要忘记更新 NIS 数据库﹕
cd /var/yp
make
5. 修改 /etc/exports 文件﹐输出 yphome 目录﹕
/home/yphome *.siyongc.domain(rw,no_root_squash) 192.168.100.*(rw,no_root_squash)
完成后重新激活 nfs 和 nis 服务﹕
service nfs start
service ypserv start
service yppasswdd start
接下来转到 client 端。先确定 autofs 套件有安装起来﹐否则请用 rpm 来解决。然后还要执行 ntsysv 确定 autofs 能在开机的时候被激活。
然后修改 /etc/auto.master ﹐加入如下句子﹕
/home/yphome /etc/auto.yphome --timeout=60
根据上面句子中的第二栏设定﹐再建立 /etc/auto.yphome 档案﹕
* -fstype=nfs,bg,soft,intr rh71:/home/yphome/&
接下来建立 /etc/auto.master 所指定的 mount point ﹕
mkdir /home/yphome
最后重新执行 autofs 和 ypbind 服务﹕
servcie autofs restart
service ypbind restart
没错﹐就酱子而已~~~ 然后您用原来的 ypu1 和新增的 ypu2 帐号登录﹐看看是否成了﹖
如果您的系统从安装到核心编译到网络设定都是根据我的步骤进行的话﹐应该不会有困难。如果有问题﹐那可能是您打错字(或是我这里打错字)的关系而已。不过﹐如果发现 autofs 不成功的话﹐建议先用手工执行 mount 来测试 NFS 联机。
有了以上经验﹐假如您要将所有 yp user 的邮件信箱也集中在相同的位置上(例如做 mail server load balancing)﹐也不会难倒您才对。具体步骤我不详说了﹐只点出关键要注意的地方﹕
设定 NFS 主机﹐输出 /var/spool/mail 目录。
设定所有的 client 主机﹐将 /var/spool/mail 挂载到 NFS 主机上(可以修改 /etc/fstab 设定)。
如果您要将整个 client 系统的帐号都转用 NIS 帐号的话﹐那可以将整个 /home 和 /var/spool/mail 挂到 NFS 上﹐那就无需建什么 yphome 了。
不过﹐有些关于主机本身的资料﹐例如 root 邮件 ﹐就不知道如何独立出来了。或许需要修改 email 程序﹐但我暂时还找不到好方法。
事实上﹐善用 NFS﹑NIS﹑和 autofs 可以营造的网络空间是非常广阔的﹐这些需要您自己发挥创意了。
相关阅读 更多 +
排行榜 更多 +