Linux網絡服務——NIS全攻略

NIS簡介
NIS(Network Information Service)是一個爲網絡中所有的機器提供網絡信息的系統,包括用戶名、密碼、主目錄、組信息等。如果某個用戶的用戶名以及密碼保存在了NIS密碼數據庫中,NIS允許此用戶在網絡當中的任何一臺運行有NIS客戶程序的機器上登陸。這使得整個網絡看起來象一個獨立系統,在所有的主機上有着相同的帳號。

NIS是由SUN公司開發的,所以最初被叫做Sun Yellow Page。另一方面,Yellow Pages是英國電信的商標,英國電信一直要求Sun更換這個名字。隨着NIS被人們越來越廣泛的使用,某些名稱已與人們分不開了,所以YP一直以與NIS相關命令的前綴形式繼續存在着,比如ypserv、ypbind等等。
NIS是基於RPC的,是一個客戶機/服務器系統,ypbind是定義NIS服務器的客戶端進程。一旦確定了服務器位置,客戶機綁定到了服務器上,所以客戶端的住處查詢都發往服務器。ypserv是回答客戶端查詢的服務器進程。你可以以同樣的方式通過NIS向網絡上的所有機器同步/etc/hosts中的主機名信息。
NIS在所謂的包含“鍵-值對”的maps中保存數據庫信息。Maps被存儲於運行NIS服務器的中央主機中,從該主機中,客戶可以通過各種RPC調用檢索信息。

NIS服務一覽
服務類型:SystemV
後臺進程:ypserv,ypbind,yppasswdd
使用端口:由portmap (111)分配
所需RPM包:ypserv,ypbind,yp-tools
相關RPM包:portmap
服務端配置文件:/etc/ypserv.conf /var/yp/*


NIS所需軟件包
ypserv-*.rpm:NIS服務的主程序包,提供NIS服務端的設定軟件包
yp-tools-*.rpm:提供NIS相關查詢指令的軟件包
ypbind-*.rpm:提供NIS客戶端設定功能的功能的軟件包
portmap-*.rpm:管理RPC連接、啓動RPC必需的軟件包


NIS相關文檔
* /etc/ypserv.conf:這是最主要的設定檔, 可以規範 NIS 客戶端是否可登入的權限。
* /etc/hosts:非常重要!每一部主機都需要記錄纔行!!
* /etc/netgroup:設定信任的主機與網域;
* /var/yp/Makefile:與建立數據庫有關的動作設定文件;
* /etc/sysconfig/network:可以在這個檔案內指定 NIS 的網域 (nisdomainname)。


服務器提供的主要服務方面:

* /usr/sbin/ypserv:就是 NIS 服務器的主要提供服務;
* /usr/sbin/rpc.ypxfrd:用來作爲 master/slave 主機之間傳輸數據庫的服務;
* /usr/sbin/rpc.yppasswdd:提供額外的 NIS 客戶端之使用者密碼修改服務, 透過這個服務, NIS 客戶端可以直接修改在 NIS 服務器上的密碼。相關的使用程序則是 yppasswd 指令;

與數據庫有關的指令方面:

* /usr/sbin/yppush:master 主機將數據庫直接送至 slave 的指令;
* /usr/lib/yp/ypinit:建立數據庫的指令,非常常用;
* /usr/lib/yp/ypxfr:傳送數據庫的指令,在該目錄下尚有 ypxfr_1perday, ypxfr_1perhour, ypxfr_2perday 等等


NIS客戶端基礎
NIS客戶端工具ypbind可以通過兩種方式獲知其域內的服務器是誰
一是在NIS域內廣播
二是通過/etc/yp.conf讀取本域內NIS服務器的位置

配置NIS服務端:由於NIS基於RPC協議,所以事先應打開portmap服務。

在/etc/sysconfig/network中設定一個NIS domain:NISDOMAIN=mydomain
修改/var/yp/Makefile決定需共享的數據
在/var/yp/securenets中指定許可共享的網段
執行/usr/lib/yp/ypinit -m
執行service ypbind start
執行service ypserv start


配置NIS從服務器
將所有從服務器名放在/var/yp/ypservers文件中
在每一個從服務器上安裝ypserv
使用以下指令:
/usr/lib/yp/ypinit –s 主服務器ip地址或主機名

NIS工具
ypcat:列出來自NIS server的map信息
ypinit:建立並安裝NIS database
ypwhich:列出NIS server的名稱
ypset:強制指定某臺機器當NIS server
makedbm:創造NIS map的dbm檔


NIS提供的數據

服務器端文件名稱 檔案內容
/etc/passwd 提供使用者賬號、UID、GID、家目錄所在、Shell 等等
/etc/group 提供羣組數據以及 GID 的對應,還有該羣組的加入人員
/etc/hosts 主機名稱與 IP 的對應,常用於 private IP 的主機名稱對應
/etc/services 每一種服務 (daemons) 所對應的埠口 (port number)
/etc/protocols 基礎的 TCP/IP 封包協定,如 TCP, UDP, ICMP 等
/etc/netgroup 網絡羣組的定義與使用 (NIS 可能會需要)
/etc/rpc 每種 RPC 服務器所對應的程序號碼
/var/yp/ypservers NIS 服務器所提供的數據庫

【NIS服務器端配置】

第一步:安裝相關軟件
ypserv-*.rpm:NIS服務的主程序包,提供NIS服務端的設定軟件包
yp-tools-*.rpm:提供NIS相關查詢指令的軟件包
ypbind-*.rpm:提供NIS客戶端設定功能的功能的軟件包
portmap-*.rpm:管理RPC連接、啓動RPC必需的軟件包

第二步:配置服務器端
① 設置NIS域名爲nis.test
第一種方法:
通過以下命令:
#nisdomainname nis.test
爲了系統啓動後自動執行此操作,可以將此命令添加到文件/etc/rc.local中。
命令爲:echo "/bin/nisdomainname nis.test" >> /etc/rc.local

第二種方法
在/etc/sysconfig/network文件中,最後加入
NISDOMAIN=nistest
然後啓動ypserv服務,就會開啓NIS域名了

② 配置服務器端主配置文件

/etc/ypserv.conf主配置文件

在整個ypserv.conf主配置文件中,最爲重要的就是限制客戶端或從服務器的查詢權限。
格式爲:
Host : Domain : Map : Security
Host:指定客戶端,可以指定具體IP地址,也可以指定一個網段
Domain:設置NIS域名,這裏的NIS域名和DNS中的域名並沒有關係,兩者是兩套不同系統,在同一個NIS域中,客戶端可以從NIS服務器上查詢用戶名和密碼,從NIS服務器可以與主服務器同步數據庫內容
Map:設置可用數據庫名稱,可以用“*”代替所有數據庫

Security:安全性設置。主要有none、port和deny三種參數設置。
none:沒有任何安全限制,可以連接NIS服務器。
port:只允許小於1024以下的端口連接NIS服務器。
deny:拒絕連接NIS服務器。

通常設置思路是允許所有內網客戶端連接NIS服務器,除此之外的客戶端都拒絕連接

ypserv.conf文件是逐行解釋執行,所以要注意設置順序
127.0.0.1/255.0.0.0:*:*:none
192.168.8.0/255.255.255.0:*:*:none
*:*:*:deny
其它參數保持默認值即可!

③ 初始化NIS數據庫
首先要啓動ypserv服務,否則建立NIS數據庫會報錯“failed to send 'clear' to local ypserv: RPC: Program not registeredUpdating passwd.byuid...”。我也在網上GOOGLE了半天沒有找到答案,無意中發現這個問題,所以在這裏也提醒一下大家,很多一些小問題,折騰人啊!!

運行命令:/usr/lib/yp/ypinit -m ,然後設置主數據庫存儲主機的名稱,然後按CTRL+D鍵,最後按Y確認,最後程序將創建初始化
的NIS數據庫,創建完成後,在目錄/var/yp下會有相應的文件記錄設置。

④ 建立信任羣(可以省略)
可以使用/etc/netgroup文件來建立NIS服務器所信任的客戶端
格式:host,user,domain
如果這個文件沒有內容,則代表所有的主機、帳號和域名都接受哈~因爲已經在/etc/ypserv.conf中設置好了關於安全的項目,默認此文件不存在,所以這個文件只要建立就可以了

⑤ 修改/var/yp/ypservers配置文件
添加NIS域中NIS服務器名稱

⑥ 啓動服務

當NIS數據庫被建立之後,需要通知ypserv和yppasswdd這兩個服務,以告知NIS數據庫被更新過
啓動服務器端的相關服務包括portmap和ypserv,yppasswdd,命令如下:
service portmap restart
service ypserv restart
service yppasswdd restart

此外爲了使主/從NIS服務器完成數據庫同步,我們需要在NIS主服務器上啓動ypxfrd服務
如果是從服務器,要使用/usr/lib/yp/ypinit -s NIS服務器ip或主機名 來同步數據

當主NIS服務器更新數據並使用ypinit -m命令重新生成數據庫後,從NIS服務器上的數據就會不一致,這時候我們可以在從NIS服務器上使用ypxfr命令同步數據庫信息保持數據狀態爲最新
命令格式如下
ypxfr -h NIS主服務器IP或主機名 數據庫文件
ypxfr -h nis passwd.byname
ypxfr -h nis passwd.byuid


附:

NIS固定端口配置
NIS和NFS服務相似,同樣使用隨機端口,我們可以配置固定端口加強NIS的可管理性
(1)修改/etc/sysconfig/network
添加YPSERV_ARGS和YPXFRD_ARGS字段,可以設置NIS的ypserv和ypxfrd兩個進程使用固定端口號,而對於yppasswd則不提供支持,我們可以使用參數-p指定固定端口
格式如下:
YPSERV_ARGS="-p 666"
YPXFRD_ARGS="-p 667"

修改後,重啓服務並測試
修改network配置文件後我們需要重啓network、ypserv和ypxfrd服務,然後可以使用rpcinfo -p查看端口使用情況


【NIS客戶端配置】
第一步:安裝NIS客戶端程序

安裝NIS的客戶端程序包portmap,ypbind和yp-tools。


第二步:設置NIS域名爲

通過以下命令:
#nisdomainname nis.test

通過以下命令:
#echo "NISDOMAIN=nis.test" >> /etc/sysconfig/network

第三步:修改/etc/yp.conf文件
在客戶端/etc/yp.conf文件中設置NIS服務器的主機名和NIS域名
如:
ypserver nis
domain nisdomain


第四步:修改/etc/hosts文件
如果沒有DNS服務器,那我們必須確保/etc/hosts文件中有NIS服務器的記錄

第五步:更改密碼驗證方式。

可以用兩種方法

第一種方法:字符界面修改下面這四個文件
* /etc/nsswitch.conf (修改許多主機驗證功能的順序)
* /etc/sysconfig/authconfig (CentOS/RHEL 的認證機制)
* /etc/pam.d/system-auth (許多登入所需要的 PAM 認證過程)
* /etc/yp.conf ( ypbind 的設定文檔)

/etc/nsswitch.conf
# 這個檔案的內容有相當多,不過如果你只想要進行登入驗證,可以這樣:
passwd: files nis
shadow: files nis
group: files nis
hosts: files nis dns
# 亦即只要加入 nis 即可!這幾個設定的意義是:
# 1. passwd: 就是使用者相關信息查尋,分別爲 /etc/passwd, nis
# 2. shadow: 就是使用者密碼的查尋, /etc/shadow, nis
# 3. group: 就是使用者的羣組信息查尋, /etc/group, nis
# 4. hosts: 就是主機名稱與IP對應的查尋,/etc/hosts, nis 及 /etc/resolv.conf

nsswitch.conf記錄了系統查詢用戶密碼、組、主機名等資源的遵循順序
確定nsswitch.conf文件中需要向服務器查詢數據的資源順序中包含NIS項
查詢資源可以是:
files:本地文件
dns:域名服務器
nis/nisplus:NIS服務器
ldap:ldap服務器db:數據庫


/etc/sysconfig/authconfig
USENIS=no
# 這個檔案的內容很好修改!只要將上面 NIS 部分改成 yes 即可:
USENIS=yes

/etc/pam.d/system-auth
# 這個部分也很重要!很容易忘記啦!修改 PAM 的設定檔找到如下一行:
password sufficient pam_unix.so md5 shadow nullok try_first_pass use_authtok
# 上面可是同一行喔!將他改成:
password sufficient pam_unix.so md5 shadow nis nullok try_first_pass use_authtok

/etc/yp.conf
# 這個是 ypbind 的主要設定文件,主要語法是這樣的:
# domain [NIS領域] server [主機名稱]
# 或者是透過廣播,適合用於大網域有多部 NIS 服務器時:
# domain [NIS領域] broadcast
domain testnis broadcast

這樣設定完成後,再給他啓動 ypbind 即可

第二種方法:圖形界面
使用命令:authconfig-tui


第六步:啓動服務portmap,ypbind
#/etc/init.d/portmap start
#/etc/init.d/ypbind start

第七步:測試nis客戶端
通過以下命令:ypcat passwd,如果能夠輸出服務器上普通用戶的帳戶信息,則說明NIS配置成功。其它測試命令還有yptest,ypwhich -x等。
(1)yptest
yptest命令測試數據庫內容等所有與NIS相關的信息
(2)ypwhich
ypwhich命令主要測試NIS客戶端與服務器之間通信使用的是哪些數據庫文件
只使用ypwhich命令只顯示NIS主機名
ypwhich -x則顯示NIS客戶端與服務器通信使用了哪些數據庫文件
(3)ypcat
ypcat命令可以查看NIS服務器上使用者帳號及密碼信息,也可以查看NIS服務器上的/etc/hosts文件記錄哪些主機信息
ypcat passwd:查看NIS服務器上帳號密碼等信息
ypcat hosts:查看NIS服務器上的/etc/hosts文件記錄哪些主機信息
(4)ypmatch
ypmatch teamadmin passwd:查詢指定用戶帳號密碼信息
(5)yppasswd
客戶端可以使用yppasswd命令修改帳號和密碼
注意:密碼長度不能少於6位哈~此外使用yppasswd命令可以自動更新NIS數據庫中內容。


NIS輔助服務器配置(與上面基本上差不多,所以就簡略了)

第一步:安裝NIS服務器相關軟件

第二步:設置ypserv.conf文件

第三步:數據同步
可以在從NIS服務器上使用ypxfr命令同步數據庫信息保持數據狀態爲最新
命令如下
ypxfr -h NIS主服務器IP或主機名 數據庫文件
ypxfr -h nis passwd.byname
ypxfr -h nis passwd.byuid

第四步:啓動服務進行測試

案例詳解

公司準備在nis.test區域中放置多臺服務器,服務器包括samba服務器、郵件服務器、WEB服務器、代理服務器等等。爲了方便日常的服務器管理工作,再搭建一臺NIS服務器,其IP地址爲192.168.85.128,從NIS服務器,其IP地址爲192.168.85.129爲了方便管理,所有nisdomain區域內的服務器都可以使用admin帳號以及其他管理帳號登錄。

裏面涉及到NFT+NIS+AUTOFS三者的聯合使用,實現用戶家目錄的自動掛載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章