1. NIS 基本概念
在一個大型的網域中,若是有多部Linux主機,並且須要每臺主機都設定相同的賬號與密碼時,是十分麻煩的。此時,若是可以有一臺NIS主控制服務器(master server)來管理該網域中全部主機的賬號密碼,當其餘的主機有用戶登陸的需求時,纔到這臺服務器上請求相關的賬號密碼等使用者資料,這樣一來,若是想要增長、修改、刪除用戶的資料,只須要到這臺服務器上面處理便可,這樣就可以大大下降重複設定用戶賬號密碼的步驟,便於管理。NIS(Network Information Services) Server就能夠實現這樣的功能。NIS早期爲Sun Yellow Pages 簡稱YP 黃頁的意思。
2. NIS服務器端組件結構
NIS的組件結構分爲配置文件、主要服務以及相關指令。shell
NIS服務器主要提供信息以下表:
/etc/passwd 提供用戶賬號、 UID、 GID、家目錄所在、登陸shell等信息
/etc/group 提供羣組信息以及GID的對應,還有該羣組成員等信息
/etc/hosts 提供主機名與IP地址的對應關係信息
/etc/services 提供每一種服務( daemons)所對應的端口( port number)信息
/etc/protocols 基礎的TCP/IP封包協議,如TCP, UDP, ICMP等
/etc/netgroup 網絡羣組的定義與使用
/etc/rpc RPC服務器信息
NIS服務器端的配置文件以下表所示:
/etc/ypserv.conf 關鍵配置文件,規範NIS客戶端登陸權限等
/etc/hosts 在其中配置IP地址與主機名對應關係
/etc/sysconfig/network 指定NIS的域名名稱(nisdomainname)
/var/yp/Makefile 帳號數據轉換爲數據庫文件。
/etc/netgroup 設定信任主機組數據庫
/etc/sysconfig/yppasswdd 設置 如:端口YPPASSWDD_ARGS="-p 1002"vim
NIS服務器端的主要服務以下表所示:
/usr/sbin/ypserv NIS服務器提供的主要服務
/usr/sbin/rpc.ypxfrd 用來做爲master/slave主機之間傳輸資料庫的服務
/usr/sbin/rpc.yppasswdd 經過此服務,NIS客戶端登陸的用戶能夠直接修改在NIS服務器上的密碼(跟服務器上的帳號密碼不同是能夠的,二者沒有關聯。)
/var/yp/Makefile 與創建資料庫有關的配置文件centos
NIS服務器端的主要指令以下表所示:
/usr/sbin/yppush master主機將資料庫直接送至slave主機的指令
/usr/lib64/yp/ypinit 創建資料庫的指令 /usr/lib/yp/ypinit
/usr/lib/yp/ypxfr 傳送資料庫的指令
/usr/bin/yppasswdd 與NIS客戶端有關,主要讓用戶修改服務器上的密碼。
3.NIS客戶端組件結構
NIS的組件結構分爲配置文件、相關指令。
NIS客戶端配置文件以下表所示:
/etc/hosts 主機名與IP地址對應關係
/etc/yp.conf ypbind的主要配置文件,設定NIS Server
/etc/nsswitch.conf 重要的配置文件,設定賬號密碼等信息
/var/yp/Makefile 與創建資料庫有關的配置文件的查詢順序安全
/etc/sysconfig/authconfig:規範賬號登入時的容許認證機制;
/etc/pam.d/system-auth :這個最容易忘記!因為賬號一般由 PAM 模組所管理, 因此你必需要在 PAM 模組內加入 NIS 的支持才行
NIS客戶端的主要指令以下表所示:
/usr/bin/yppasswd 更改客戶端登陸用戶在NIS服務器上的密碼
/usr/bin/ypchsh 更改客戶端登陸用戶默認登陸shell
/usr/bin/ypchfn 更改客戶端登陸用戶的finger信息
4.NIS服務器端工做流程
NIS Server包括Master和Slave兩類服務器:
Nis Master Server:將文件建成數據庫,並提供給Slave Server來更新;
Nis Slave Server:以Master Server的數據庫做爲自己的數據庫來源;
流程以下:
1.Nis Master先將賬號密碼相關文件製做成數據庫文件;
2.Nis Master能夠主動告訴Nis Slave來更新;
3.Nis Slave亦能夠主動前往Nis Master取得更新;
4.如有賬號密碼變更時,須要從新制做數據庫文件並從新同步Master/Slave。
5 NIS Client 登陸查詢流程
NIS Client向Master/Slave 請求登錄者的驗證數據。
流程以下:
1.NIS client 如有登入需求時,會先查詢其本機的 /etc/passwd, /etc/shadow 等檔案;
2.若在 NIS Client 本機找不到相關的帳號數據,纔開始向整個 NIS 網域的主機廣播查詢;
3.每一個 NIS server (不論 master/slave) 均可以響應,基本上是『先響應者優先』。
6.各個角色應該具有的軟件要求
NIS 服務器端須要安裝的組件以下:(通常狀況下,NIS服務器也要起到客戶端的做用,因此客戶端軟件也要安裝)
yp-tools 提供NIS相關的查詢指令功能
ypbind NIS Client端的服務進程
ypserv NIS Server端的服務進程
rpcbind 提供RPC服務bash
NIS 客戶端須要安裝的組件以下:
yp-tools 提供NIS相關的查詢指令功能 。
ypbind NIS Client端的服務進程,與服務器互相溝通的軟件。
服務器
7.安裝軟件網絡
[root@cnetos68 桌面]# yum install yp-tools ypbind ypserv rpcbind -y
架構
[root@cnetos68 桌面]# yum install ypserv -yapp
已加載插件:fastestmirror, refresh-packagekit, security
設置安裝進程
Loading mirror speeds from cached hostfile
解決依賴關係
--> 執行事務檢查
---> Package ypserv.x86_64 0:2.19-31.el6 will be 安裝
--> 完成依賴關係計算
依賴關係解決
================================================================================
軟件包 架構 版本 倉庫 大小
================================================================================
正在安裝:
ypserv x86_64 2.19-31.el6 c6-media 131 k
事務概要
================================================================================
Install 1 Package(s)
總下載量:131 k
Installed size: 319 k
下載軟件包:
運行 rpm_check_debug
執行事務測試
事務測試成功
執行事務
正在安裝 : ypserv-2.19-31.el6.x86_64 1/1
Verifying : ypserv-2.19-31.el6.x86_64 1/1
已安裝:
ypserv.x86_64 0:2.19-31.el6
完畢!
8.端口設置
因爲 NIS 服務器主要是提供用戶登入的信息給客戶端主機來查詢之用,因此, NIS 服務器所提供的數據固然就須要用到傳輸與讀寫比較快速的 "數據庫" 文件系統, 而 不是傳統的純文本數據。爲了要達到這個目的,因此 NIS 服務器就必需要將前面 提到的那些文件製做成爲數據庫文件, 而後使用網絡協議讓客戶端主機來查詢。(所使用的通信協議與前一章的 NFS 相同,都使用遠程過程調用 (RPC) 端口爲111. 再就是NIS的一些ypseerv yppassswdd 等daemons向RPC清冊生成的端口。
[root@cnetos68 桌面]# vim /etc/sysconfig/network YPSERV_ARGS="-p 1001" #新增,啓動ypserv服務的端口
[root@cnetos68 桌面]# vim /etc/sysconfig/yppasswdd #(實例中會設置到)
YPPASSWDD_ARGS="--port 1002" #yppasswdd服務的端口
[root@cnetos68 桌面]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100004 2 udp 1001 ypserv
100004 1 udp 1001 ypserv
100004 2 tcp 1001 ypserv
100004 1 tcp 1001 ypserv
100009 1 udp 1002 yppasswdd
9.防火牆設置
iptables -I INPUT 1 -p tcp --dport 111 -j ACCEPT
iptables -I INPUT 1 -p upd --dport 111 -j ACCEPT
iptables -I INPUT 1 -p tcp --dport 1001:1002 -j ACCEPT
iptables -I INPUT 1 -p upd--dport 1001:1002 -j ACCEPT
實例操做:
NIS 的域名zzhz
NIS server 的 IP 爲 192.168.80.150 ,主機名cnetos68
NIS client 的 IP 爲 192.168.80.100,主機名 localhost.localdomain
1.設定NIS域名(NIS domain name)
2.設置主配置文件 /etc/ypserv.conf
3.設置hosts
5.啓動服務和開機自動啓動
[root@cnetos68 桌面]# /etc/init.d/rpcbind restart 注意 這個先啓動
中止 rpcbind: [肯定]
正在啓動 rpcbind: [肯定]
[root@cnetos68 桌面]# /etc/init.d/ypserv restart (注意:服務啓動前要設置好/etc/sysconfig/network的
NISDOMAIN,不然yppasswdd沒法啓動)
中止 YP 服務器的服務: [肯定]
設置 NIS 域名 zzhz: [肯定]
啓動 YP 服務器的服務: [肯定]
[root@cnetos68 桌面]# /etc/init.d/yppasswdd restart
中止 YP 口令服務: [肯定]
啓動 YP 口令服務: [肯定]
[root@cnetos68 桌面]# chkconfig ypserv on
[root@cnetos68 桌面]# chkconfig rpcbind on
[root@cnetos68 桌面]# chkconfig yppasswdd on
[root@cnetos68 桌面]# chkconfig --list | grep yp
ypbind 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉
yppasswdd 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
ypserv 0:關閉 1:關閉 2:啓用 3:啓用 4:啓用 5:啓用 6:關閉
ypxfrd 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉
6.創建帳號和密碼 把帳號和密碼的數據轉成數據庫
[root@cnetos68 桌面]# useradd nisuser
[root@cnetos68 桌面]# /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. cnetos68 is in the list of NIS server hosts. Please continue to add
the names for the other hosts, one per line. When you are done with the
list, type a <control D>. 提示安ctrl+D
next host to add: cnetos68
next host to add:
The current list of NIS servers looks like this:
cnetos68
Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/zzhz/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/zzhz'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory `/var/yp/zzhz'
cnetos68 has been set up as a NIS master server.
Now you can run ypinit -s cnetos68 on all slave server.
PS:若是你的用戶密碼有變更過(不是nis用戶密碼),那麼你就得要從新制做數據庫,從新啓動 ypserv 及 yppasswdd;
7.NIS客戶端設置
安裝 軟件 yum install ypbind yp-tools -y
[root@localhost nfs1]# setup #修改的是/etc/sysconfig/network /etc/nsswitch.conf 等文件
中止 portmap: [肯定]
啓動 portmap: [肯定]
關閉 NIS 服務: [肯定]
打開 allow_ypbind 的 SELinux 布爾值
關聯到 NIS 域: [肯定]
監聽 NIS 域服務器。.
[root@localhost nfs1]# su nisuser
bash-3.2$ whoami
nisuser
bash-3.2$ id nisuser
uid=501(nisuser) gid=501(nisuser) groups=501(nisuser) context=root:system_r:unconfined_t:SystemLow-SystemHigh
通常建議使用setup來調整,若是要手動處理。就要修改下面的文件。
/etc/sysconfig/network (加入 NISDOMAIN 項目)
/etc/nsswitch.conf (修改許多主機驗證功能的順序)
/etc/sysconfig/authconfig (主機 的認證機制)
/etc/pam.d/system-auth (許多登入所須要的 PAM 認證過程)
/etc/yp.conf (ypbind 的設定檔)
=================================================================================================================
客戶端相碰命令
yptest:驗證數據庫文件
[root@localhost ~]# yptest
Test 1: domainname
Configured domainname is "zzhz"
Test 2: ypbind
Used NIS server: centos68
Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody) 說明:早期的nobody UID是65534 centos的UID是99. 這時提示找不到nobody.
省略··························
Test 9: yp_all
zzhz zzhz:$6$om6rWtFEIHnbChd7$bc/7Wtas.8nhOMxXdCXIssHziyGHyC.27.IU9NuEvOJk6TuzsD4a8vgCY.yGkPa5/LEwyqpEvESpWDKsupjtJ1:500:500:zjolzzhz:/home/zzhz:/bin/bash
nisuser nisuser:rUNG98oaGJG4s:501:501::/home/nisuser:/bin/bash
nisuser2 nisuser2:YyEavjeg1Ym0Q:502:502::/home/nisuser2:/bin/bash 列出帳號信息
1 tests failed
檢查數據庫名稱和數據庫相關文件。
[root@localhost ~]# ypwhich
centos68
[root@localhost ~]# ypwhich -x
Use "ethers" for map "ethers.byname"
Use "aliases" for map "mail.aliases"
Use "services" for map "services.byname"
Use "protocols" for map "protocols.bynumber"
Use "hosts" for map "hosts.byname"
Use "networks" for map "networks.byaddr"
Use "group" for map "group.byname"
Use "passwd" for map "passwd.byname" 數據庫的文件在/var/yp/zzhz/*
讀取數據庫內容
[root@localhost ~]# ypcat passwd.byname
zzhz:$6$om6rWtFEIHnbChd7$bc/7Wtas.8nhOMxXdCXIssHziyGHyC.27.IU9NuEvOJk6TuzsD4a8vgCY.yGkPa5/LEwyqpEvESpWDKsupjtJ1:500:500:zjolzzhz:/home/zzhz:/bin/bash
nisuser:rUNG98oaGJG4s:501:501::/home/nisuser:/bin/bash
nisuser2:YyEavjeg1Ym0Q:502:502::/home/nisuser2:/bin/bash
yppasswd:修改nis帳戶 密碼: 修改nis帳戶密碼要注意:服務器的名稱不能是IP地址。而且要在客戶端上添加host記錄。 由於服務器沒有DNS作解析。
[root@localhost ~]# su - nisuser
su: warning: cannot change directory to /home/nisuser: 提示沒有家目錄。
-bash-3.2$
有兩種方法。一種是直接建立家目錄 。這個方法工做量大。
另外一種是,把服務器帳戶的家目錄使用NFS功能自動掛載到客戶端。參數博客另外一文章說明。