电脑技术学习

NFS 和 NIS

dn001
使用;Telnet;之後您就无需再要在荧幕和键盘之间跑来跑去了。不过通过;Telnet;连接所使用的档案系统都是远端系统如果您要将资料回存在本地电脑上面就不那麽方便了。您有否想过将远端的资料;mount;进本地的档案系统中呢那麽NFS(Network;File;System);就可以帮到你了。;

另外使用;telnet;的时候您有否发觉到一个麻烦现在的;telnet;已经禁止使用;root;进行登录了您如果要使用到;root;的权限您得使用其他帐号登录然後用;su;切换到;root;的身份去。这样在使用;telnet;之前您就必须为每一个使用者在每一台Linux机器上建立独立的帐号。您是否希望好像;NT;那样有一个中央的;DOMAIN;登录资料库呢有此念头完全正确而好消息是您也可以在;Linux;上面使用;NIS;(Network;Information;Service);来做到;

我们只需指定某一台;Linux;机器做;NIS;伺服器而其他则可以做为;NIS;客户使用。如果您的网路较大也可以考虑安装;Slave;NIS;伺服器来分担;Master;NIS;的工作。这里我只说说;NIS;Server;和;Client;的设定Slave;NIS;则留给您自己去研究了。;

设定NFS

要设定;NFS关键是在;server;那端/etc/exports;这个档案。在下建议您先输入;man;exports


看一下如何设定这个档案。如果这个档案设定错误了以後重新开机的时候您可等得非常不耐烦了。下面是我这里的设定;/tmp;(rw,no_root_squash)
/home/public/sw;*.siyongc.domain(ro,insecure)
/home/public/upload;192.168.0.22(rw,all_squash,anonuid=2043,anongid=2044)




这里您可以看到我将;/tmp;这个目录完全分享出去了在括号里面的‘rw’就是;Read&Write;的意思而‘no_root_squash’呢则是允许让使用者具备;root;的权限在某些特殊情况下例如使用;bootp;登录的无磁碟工作站是相当好用的。因为预设情况下;NFS;会将;root;的身份;squash;为权限较低的;anonymous;(nobody);身份而其它身份则以;client;端机器上当时拥有的;User;ID;和;Group;ID;来建立档案。;

第二行我将;/home/public/sw;这个目录分享给以;siyongc.domain;这个;domain;做结尾的所有机器而无需使用;secure;port;(insecure)但只具备唯读权限(ro)。;

第三行我将;/home/public/upload;这个目录只分享给;192.168.0.22;这台机器且具备了读和写的权限(rw)但在;server;上写入的档案必须换成;anonymous;身份进行。但是其後的设定又将所有;anonymous;换成设定的;UID;和;GID这样的安排是要确定所有写入都按指定身份进行。;

如果您不知道或不想直接修改;/etc/exports;档案您可以使用;netconf;然後选择‘Exported;file;system;(NFS)’来进行设定。;

然後就是重新启动;nfsd;;/etc/rc.d/init.d/nfs;restart


测试;NFS

一但;server;设定好了您只需在;client;端输入;mount;-t;nfs;redhat52:/tmp;/mnt


就可以将伺服器端的分享目录;mount;进自己的机器了。;

通常最常见的错误信息是:;mount:;redhat52:/tmp,;reason;given;by;server:;Permission;denied;




造成这样的原因多数是因为;/etc/exports;档案没设定好也就是在分享目录後面的“(;)”里面的权限设定建议从简单的设定测试起。或是从;/var/log/messages;这个档案找找原因检查一下被拒绝的原因例如可能会发现客户主机的名称不怎麽对那您就必须要确定;client;的机器名称已经在;/etc/hosts;被“正确”的建立起来或者能够通过;DNS;查询得到(包括正反两解)。;

在我的实践中‘link_relative’有时候会造成‘Unknown;keyword’这样会引至;nfsd;无法正常启动。所以当你修改过;NFS;设定最好用下面的;script;来确定;nfsd;能够正常启动才好关机;/etc/rc.d/init.d/nfs;stop;
/etc/rc.d/init.d/nfs;start


确定没有;failure;信息才好继续。切记;

如果您碰到;rpc;相关的错误信息可能是您的;portmap;问题了您可以试试将之重新启动:;/etc/rc.d/init.d/portmap;restart


不过执行之後请重新启动;nfsd;以及其它所有和;portmap;相关的服务(因为它们会因为;portmap;重启而失效。;

另外当您升级;server;的;kernal;之後最好也将;client;的;kernal;一起同步。否则您会遇到;mount;version;的警告管您还是可以成功的实现;nfs;mount;。;

有时候您或许会突发兴致给电脑改改名称或转换;domain这样也容易造成;NFS;在启动的时候延迟而且是延迟非常厉害的那种造成这样的问题可能有多方面的如;hostsname;设定不正确或;DNS;那里有误。不过有一个地方您可以考虑的就是把下面这个档案内容清一下;
/var/lib/nfs/rmtab;

如果还有问题先熟读一下;exports;的;man;page;(man;exports)更详细的就请参考;NFS;的;HOWTO;文章。;

设定NIS

首先让我们架设好中央的;NIS;伺服器吧。在设定之前您必须确定网路工作正常。;(以下步骤是本人实践之作或许会有更好的方法的。如果您有更好的主意欢迎告诉网中人。);

修改;/etc/inetd.conf确定下两行的解(‘#’)给拿掉;time;;;;stream;;tcp;;;;;nowait;;root;;;;internal
time;;;;dgram;;;udp;;;;;wait;;;;root;;;;internal





重新启动;inetd;/etc/rc.d/init.d/inet;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!
255.255.255.0;;;192.168.0.0





修改;/etc/ypserv.conf或许会有这样的叙述(但不是很确定是否必须如此);dns:;no
*;;;;;:;passwd.byname;;;;:;port;;;;;;;:;yes





然後输入;rpcinfo;-u;localhost;ypserv


确定;YP;server;是工作的您应该会看到这样的信息;program;100004;version;1;ready;and;waiting
program;100004;version;2;ready;and;waiting




如果您没看到那就执行;/etc/rc.d/init.d/ypserv;start


同时确定;setup;-->;System;services;-->
[;*;];yppasswdd;和;[;*;];ypserv;。;

然後再重;rpcinfo;确定服务正确的跑起来了。;


建立这两个档案(如果它们不存在的话);touch;/etc/gshadow;/etc/netgroup


设定;NIS;的domain;name;/bin/nisdomainname;chen


最好起一个有别於目前;domain;的名字这主要是出於安全考量。如果以後测试成功的话您可以将这行加进;/etc/rc.d/rc.local;里面同时在;/etc/sysconfig/network;档案里面修改这行;NISDOMAIN=chen





然後初始设定;NIS;服务;/usr/lib/yp/ypinit;-m


记住要用;Ctrl;+;D;来结束不是用;Ctrl;+;C;哦切记切记;

留意一下有否错误有则根据信息做适当修改无则继续。例如如果它回应说;"No;rule;to;mak;target;xxxxxx,;needed;by;yyyyyyyy."通常是在;/etc;下面找不到档案而已用;touch;/etc/xxxxxxx;就可以解决之。;


重新启动;ypserver;和;yppasswdd;/etc/rc.d/init.d/ypserv;restart;
/etc/rc.d/init.d/yppasswdd;restart



然後是设定;NIS;Client;。这里是在;redhat62.siyongc.domain;(192.168.0.22);这台机器上面设定;
执行;netconf;然後选择;‘Network;Information;System;(NIS);再按;Enter进入後设定好;NIS;domain(如chen要和;server;那端一致)和NIS;server(如redhat52.siyongc.domain要确定该;server;在;/etc/hosts;里面指定正确)。如果您的系统没有;netconf;也不要紧可以自己修改後面提到的档案(如;/etc/yp.conf;和;/etc/sysconfig/network)。;


接着执行;/bin/nisdomainname;chen



然後修改;/etc/yp.conf加进这行;domain;chen;
ypserver;redhat52.siyongc.domain





然後执行;setup;选择‘System;Services’确定;[*]ypbind;被选择了。;


修改;/etc/passwd在末尾加入;+





然後启动;ypbind:;ypbind;
(或者/etc/rc.d/init.d/ypbind;restart)


测试;NIS

在客户端上面以;root;身份登录之後请输入;ypcat;passwd


看看;server;端的帐号是否被列出来了。;

您也可以执行;getent;passwd;netman


这里的‘netman’是在;NIS;伺服器上面的一个使用者帐号名称请改成您欲查询的帐号。这个命令的作用是让我们确定该帐号出现在;NIS;登录之中。如果您看不到任何信息回应那麽好可能上面的步骤(包括伺服器和客户端)还没正确完成您则需要找出原因所在。;

如果您能得到信息回应例如;netman:x:1001:1001::/home/netman:/bin/bash




那是好消息否则您得从头进行;debug;方好继续。;

然後输入;yppasswd;netman;
Please;enter;root;passwd:;
Please;enter;new;passwd:;
Please;retype;password:
(#注意:;最後两行是设定;netman;的;NIS;password。最好和原来的密码一致因为原来的密码也会被更改为;nis;的密码。);

其实上面这步不是必须的如果您能够从另外的机器用;NIS帐号登录就可以略过此步骤。;

接着请在本地主机上面建立起该使用者的家目录;mkdir;/home/netman;
chown;netman:netman;/home/netman


当然了您也可以设定;Linux;在开机的时候通过;NFS;挂载到使用者原本的家目录(tips修改;/etc/fstab)。但如何做您自己去尝试吧这里暂时卖个关子。;

如果该使用者需要使用到本机上面的邮件系统也请为之建立信箱;touch;/var/spool/mail/netman;
chown;netman:mail;/var/spool/mail/netman;
chmod;660;/var/spool/mail/netman


这样您就可以使用;NIS;登录了。;

当您有新的使用者增加之後欲加入;NIS;中的话您要先;cd;/var/yp;然後执行;make;来更新;nis;资料。如果登录失败重新启动;yppasswdd;服务然後用;yppasswd;来设定他/她的;NIS;密码但要注意一点原使用者帐号必须已经设定过密码管此时可以取而代之为新的密码。然而有趣的是之後您再於原来主机上更改原帐号的密码却不会影响;NIS;的哦。;

如果还有问题您要检查一下;server;端的;ypserv;和;yppasswdd以及;client;端的;ypbind;是否被启动成功(tips执行rpcinfo;-p尤其注意;yppasswdd)。其中portmap;是一个很重要的服务(有些系统会显示为;rpcbind)在您执行;ypserv;和;yppasswdd;之前要确定它已经被启动了。如果您需要重启;portmap;要确定所有基於它的服务也要重新启动。;

同时留意一下;client;和;server;的;NIS;domain;name;是否一致。必要时您或许要执行/usr/lib/yp/ypinit;-m重新建立;ypserv;资料但这样您就需要重新执行;yppasswd;来设定使用者的;NIS;密码了。;

设定;NIS在;server;端牵涉的档案比较多诸如;rpcportmapypnsswitch等等。您可以看一下关於;NIS;的HOWTO;文章或相关的;manuals。;

另有一篇和网友的讨论文章我也觉得蛮值得参考一下的:

wkhuang;;wrote;in;message
news:3aZSaR$GvO@bbs.cis.nctu.edu.tw...
>;==>;在;"网中人";;的文章中提到:
>;>;2000/05/28
>;>;网中人今天对;NIS;系统再进行测试。对原来的文章做了小小修改主要是针对测
试过
>;>;程中需要注意的地方增加了说明。希望读者留意和共同参与测试。
>;>;http://pds.nchu.edu.tw/study_area/linux/linux_nfs.htm
>
>;不知您可否测试一下redhat6.2上yp之後,finger有个小bug。
>;比如同一台电脑是yp;server,;也是yp;client.

抱歉因为弟还的;RH6.2;还没安装或许过两天再测试吧。

>;在建立yp帐号时,若依照你的方法,你的yp;map;database的来源,应该是在
>;/etc下的一些档案,;主要就是/etc/passwd,/etc/shadow,;/etc/group,
/etc/gshadow

嗯的确如此修改;/var/yp/Makefile;里面的参数可以改变预设内容。

>;(其实这样不太好,因为这样root,和一些根本不该上yp的帐号都跟着进去了,建议去
>;改/var/yp/Makefile中更改YPPWDDIR;=;/etc改为某个另外的目录,并将几个
>;档,;如passwd,;shadow,;group,;gshadow拷过去,并只留你想让他上yp的帐号和
>;group)

您的建议非常好。不过在弟的;RH6.0;上面;(後面的测试相同)
ypcat;passwd;只会显示;uid;500;以上的使用者不知道是否正常呢

>
>;我遇到的finger的bug(或是linux;yp的bug,描述如下)
>
>;若yp;map;database的来源仍如网中人例中的/etc目录
>;1.;首先先在/etc/passwd和/etc/shadow中建立一个使用者帐号user1,
>;试着把他的fullname;栏位设为空白,就是::

这可以用;useradd;来做。

>;2.;之後让他进入yp的map;database,若是已在yp;server跑起来之後,应该是
>;到/var/yp下执行make以更新yp;map;database(这才是正确的)

对。如果是第一次可以执行;/usr/lib/yp/ypinit;-m;。

>;3.;要砍掉原本/etc/passwd和/etc/shadow中的user1帐号记录,确定local端
>;无此帐号,由YP;Server取得。

只要执行过;make;就可以这样做了。
但风险是假如日後增加使用者重新执行;make;的话
这个帐号在;NIS;中也会消失掉。

使用您刚才的建议(即另设;YPPWDDIR;)
在技术上可以化解这个顾虑
但必须手工的修改;passwd;档而不能单纯的;copy;了。

>;4.;测试user1帐号确定可以登入

嗯在我的测试中还必须使用;yppasswd;user1;设定密码之後才行
而且原帐号也必须已经经过密码设定。

>;5.;但在这台server兼client上执行finger;user1,竟会造成Segmentation
>;;;;fault;(core;dumped),跑不出正确结果

在我的测试中这个在;client;端执行会出现。
但在;sever;端则工作正常当然了我这台;server;并没有作为其它;server;的
client;。
但测试过;ypbind;向自己(从;ypwhich;可以确定)也没问题。

>
>;後来我依上述方式重建user1帐号,但是full;name栏位这次填字进去。
>;finger;user1命令就正常了。

这个在我的测试中并没有什麽影响和以前的测试一样
client;端出现;Segmentation;fault;(core;dumped)。

>;我试过solaris;2.6,;7,;没这个问题..;:)
>;也试着抓gun;finger;1.37.tar.gz要下来装看看,;无奈功力不足,;就是
>;make;不成
>
>;有否高手能指点一二呢

对不起小弟绝非高手。
对;NIS;也不熟许多测试还是看到您的回应才(会得)进行。

不过倒非常乐意有其它更有经验的朋友一起来探讨一下。

非常多谢您的;feedback

标签: