# 14.1 NIS 的由來與功能
## 14.1 NIS 的由來與功能
在一個大型的網域當中,如果有多部 Linux 主機,萬一要每部主機都需要設定相同的賬號與密碼時,你該怎么辦?復制 /etc/passwd ?應該沒有這么呆吧?如果能夠有一部賬號主控服務器來管理網域中所有主機的賬號, 當其他的主機有用戶登入的需求時,才到這部主控服務器上面要求相關的賬號、密碼等用戶信息, 如此一來,如果想要增加、修改、刪除用戶數據,只要到這部主控服務器上面處理即可, 這樣就能夠降低重復設定使用者賬號的步驟了。
這樣的功能有很多的服務器軟件可以達成,這里我們要介紹的則是 Network Information Services (NIS server) 這個服務器軟件喔!底下就先來談一談這個 NIS 的相關功能吧!
**Tips:** NIS 主要提供的是用戶的賬號、密碼、家目錄文件名、UID等信息,但 NIS 并沒有提供文件系統。同時, NIS 同樣使用前一章談到的 RPC 服務器,因此在本章開始前,你還是得要認識一下[第十三章談到的 NFS 與 RPC](http://linux.vbird.org/linux_server/0330nfs.php), 同時你還得要知道基礎學習篇第三版里面的[第十四章賬號管理](http://linux.vbird.org/linux_basic/0410accountmanager.php), 同時也得了解一下基礎學習篇[第二十二章 make/Makefile](http://linux.vbird.org/linux_basic/0520source_code_and_tarball.php) 的信息才好。

- - - - - -
### 14.1.1 NIS 的主要功能:管理帳戶信息
通常我們都會建議,一部 Linux 主機的功能越單純越好,也就是說,一部 Linux 就專門進行一項服務。這樣有許多的好處,這包含功能單純所以系統資源得以完整運用, 并且在發生入侵或者是系統產生狀況的時候,也比較容易追查問題所在。因此,一個公司內部常常會有好幾部 Linux 主機,有的專門負責 WWW 、有的專門負責 Mail 、有的專門負責 SAMBA 等等的服務。
不過,這樣雖然有分散風險、容易追蹤問題的好處,但是,由于是同一個公司內的多部主機,所以事實上所有的 Linux 主機的賬號與密碼都是一樣的!哇!那如果公司里面有 100 的人的話, 我們就需要針對這么多部的主機去設定賬號密碼了!而且,如果未來還有新進員工的話, 那么光是設定密碼就會使系統管理員抓狂了!
這個時候,讓我們換一個角度來思考:如果我設計了一部專門管理賬號與密碼的服務器,而其他的 Linux 主機當有客戶端要登入的時候,就必須要到這部管理密碼的服務器來查尋用戶的賬號與密碼, 如此一來,我要管理所有的 Linux 主機的賬號與密碼,只要到那部主服務器上面去進行設定即可! 包括新進人員的設定,反正其他的 Linux 主機都是向它查尋的嘛!沒錯!真是好~這個就是 Network Information Service, NIS 服務器的主要功能啦!
事實上,Network Information Service 最早應該是稱為 Sun Yellow Pages (簡稱 yp),也就是 Sun 這家公司出的一個名為 Yellow Pages 的服務器軟件,請注意, NIS 與 YP 是一模一樣的咚咚喔!這個 Yellow Pages 名字取的真是好!怎么說呢?知道黃頁 (Yellow Pages) 是什么嗎?就是我們家里的電話簿啦! 今天如果你要查尋一家廠商的電話號碼,通常就是直接去查黃頁上面的紀錄來取得電話號碼啊!而這個 NIS 也一樣,當使用者要登入時, Linux 系統就會到 NIS 服務器上面去找尋這個使用的賬號與密碼信息來加以比對, 以提供使用者登入之用的檢驗啊!很棒吧! ^\_^
那么 NIS 服務器提供了哪些信息呢?還記得賬號與密碼放置在哪里吧?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/rpc 每種 RPC 服務器所對應的程序號碼/var/yp/ypservers NIS 服務器所提供的數據庫至少可以提供上述這些功能,當然啦,你也可以自行定義哪些數據庫需要,哪些數據庫不需要!
- - - - - -
### 14.1.2 NIS 的運作流程:透過 RPC 服務
由于 NIS 服務器主要是提供用戶登入的信息給客戶端主機來查詢之用,所以, NIS 服務器所提供的數據當然就需要用到傳輸與讀寫比較快速的 "數據庫" 文件系統, 而不是傳統的純文本數據。為了要達到這個目的,所以 NIS 服務器就必須要將前一小節提到的那些檔案制作成為數據庫檔案, 然后使用網絡協議讓客戶端主機來查詢啰。至于所使用的通訊協議與前一章的 [NFS](http://linux.vbird.org/linux_server/0330nfs.php) 相同,都使用遠程過程調用 (RPC) 這個玩意兒喔!
此外,如果在一個很大型的網域里面,萬一所有的 Linux 主機都向同一部 NIS 服務器要求用戶數據時, 這部 NIS 服務器的負載 (loading) 可能會過大。甚至如果考慮到數據使用的風險, 要是這單一的一部 NIS 服務器掛點時,那其他的 Linux 主機還要不要讓 users 登入啊? 所以啰,在較為大型的企業環境當中, NIS 服務器可以使用 master/slave (主控/輔助服務器) 架構的。
Master NIS 服務器提供系統管理者制作的數據庫, slave 則取得來自 master 的數據,并藉以提供其他客戶端的查詢。 客戶端可以向整個網域要求用戶資料的響應,master 與 slave 皆可回答, 由于 slave 的數據來自于 master ,所以用戶賬號數據本身是同步的! 如此一方面可以分散 NIS 服務器的負載,而且也可以避免因 NIS 服務器掛點而導致的無法登入的風險。

圖 14.1-1、NIS 服務器與客戶端的運作與查詢方式示意圖
整個 NIS 的運作就如同上圖,首先必須要有 NIS server 的存在,之后才會有 NIS Client 的存在。 那么當使用者有登入的需求時,整個 NIS 的運作程序是:
- 關于 NIS Server (master/slave) 的運作程序:
1. NIS Master 先將本身的賬號密碼相關檔案制作成為數據庫檔案;
2. NIS Master 可以主動的告知 NIS slave server 來更新;
3. NIS slave 亦可主動的前往 NIS master server 取得更新后的數據庫檔案;
4. 若有賬號密碼的異動時,需要重新制作 database 與重新同步化 master/slave。
- 關于當 NIS Client 有任何登入查詢的需求時:
1. NIS client 若有登入需求時,會先查詢其本機的 /etc/passwd, /etc/shadow 等檔案;
2. 若在 NIS Client 本機找不到相關的賬號數據,才開始向整個 NIS 網域的主機廣播查詢;
3. 每部 NIS server (不論 master/slave) 都可以響應,基本上是『先響應者優先』。
從上面的流程當中,你會發現 NIS client 還是會先針對本機的賬號數據進行查詢,若本機查不到時才到 NIS server 上頭尋找。因此,如果你的 NIS client 本身就有很多一般使用者的賬號時,那跟 NIS server 所提供的賬號就可能產生一定程度的差異啰!所以,一般來說,在這樣的環境下,NIS client 或 NIS slave server 會主動拿掉自己本機的一般使用者賬號,僅會保留系統所需要的 root 及系統賬號而已。 如此一來,一般使用者才都會經由 NIS master server 所控管啊! ^\_^
根據上面[圖 14.1-1](#fig14.1-1) 的說明,我們的 NIS 環境大致上需要設定的基本組件就有:
- NIS Master server :將檔案建置成數據庫,并提供 slave server 來更新;
- NIS Slave server :以 Master server 的數據庫作為本身的數據庫來源;
- NIS client :向 master/server 要求登入者的驗證數據。
就如同上面提到的,在大型環境中才會使用到這么復雜的 NIS master/slave 架構。因此,本章僅會介紹 NIS Master 的建置, 以及 NIS client 的設定而已。其實,NIS 服務使用的環境大概越來越僅局限在學術數值模式仿真的叢集計算機架構中 (PC cluster), 在那樣的架構中,老實說,鳥哥認為僅要學會 NIS master 即可。如果還有其他賬號方面的要求,例如跨平臺的帳戶信息提供, 那可能就得要參考 Samba 或更進階的 LDAP 才好呦!這里我們不談啦~現在,就讓我們開始來玩一玩這個 NIS 的設定吧!
- - - - - -
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀