簡易NIS——搭建一個客戶端/伺服器模式的網路認證環境
背景知識
NIS(Network Information Service網路資訊系統)是美國Sun公司開發的一套開源的網上身份認證系統。NIS基於RPC,是由一個伺服器、一個客戶端庫以及幾個管理工具組成。起初,NIS被稱作黃頁(Yellow Pages),或YP,現在仍然使用這個名稱來非正式地指這項服務。另一方面,Yellow Pages是英國電信的商標,英國電信一直要求Sun更換這個名字。隨著事態的發展,某些名稱已與人們分不開了,所以YP一直以與NIS相關命令的字首形式繼續存在著,比如ypserv、ypbind等等。
環境
兩臺聯網且安裝了Ubuntu的主機,通過安裝和配置NIS服務,一臺作Master Server,一臺作Client。
工作原理
(1)網路環境下使用者身份認證的過程
① NIS客戶機與伺服器所需完成的任務
客戶機:需提供登入介面,將使用者輸入的賬戶資訊和口令資訊打包為一個身份認證請求,發給伺服器;接收伺服器發過來的認證結果並顯示給使用者。
伺服器:登入服務程式是一直執行的,不斷響應不同客戶機發出的身份認證請求:接收客戶機發過來的身份認證請求,把使用者的賬戶資訊和口令資訊從資料包中解析出來,和身份認證資訊庫進行比對,判斷是否通過了身份認證,把判斷結果打包,發給客戶機。
② 網路環境下使用者身份認證的過程
用於身份認證的資訊儲存在伺服器的身份認證資訊庫中,使用者在客戶機輸入賬戶資訊和口令,客戶機將它們打包為一個身份認證請求,發給伺服器。伺服器接收客戶機發過來的身份認證請求,把使用者的賬戶資訊和口令從資料包中解析出來,和身份認證資訊庫進行比對,判斷是否通過了身份認證,把判斷結果打包,發給客戶機。客戶機接收認證結果並顯示給使用者。如果通過認證,則登入成功,如果沒有通過認證,則要求重新輸入賬戶資訊和口令。
③ 優缺點
優點:NIS簡化了客戶機的使用者管理工作,客戶端可以使用中心伺服器的管理檔案,而無需在每個客戶機為每個使用者建立/etc/passwd,節約了儲存空間也降低了安全風險;使用者的資訊都儲存在中心伺服器中,利於實現使用者的集中管理。
缺點:在沒有網路的情況下,因為無法連線伺服器,使用者將無法登入客戶機的系統;客戶機與伺服器間傳輸的資訊是明文,一旦被嗅探將造成使用者資訊的洩露;使用者的賬戶資訊和口令均存在伺服器的資訊庫中,一旦伺服器被攻擊,將造成使用者資訊的洩露。
(2)NIS基本概念和工作原理
① 為什麼要使用NIS?它的主要功能是什麼?
使用NIS的原因(必要性):如果沒有NIS,在一個網域中有多臺客戶機和多個使用者,為了使每個使用者都可以登入所有的客戶機,需要在每臺客戶機為每個使用者都建立/etc/passwd檔案。而一旦一個使用者的資訊發生改變(或者是要增加/刪除一個使用者),需要修改每臺客戶機的/etc/passwd檔案,非常不方便,且增大了使用者資訊洩露的概率。所以需要使用NIS來實現使用者的集中管理。
NIS的主要功能:實現使用者的集中管理。將所有使用者的賬戶資訊和口令資訊都儲存在中心伺服器的身份認證資訊庫中,當用戶資訊發生改變時(或者是要增加/刪除一個使用者),只需在伺服器資訊庫進行修改即可。使用者需要登入某一臺客戶機時,與伺服器連線進行身份認證即可。
② NIS伺服器相關配置檔案及作用
配置檔案 |
作用 |
/etc/passwd |
提供使用者賬號、UID、GID、目錄、Shell 等等 |
/etc/group |
提供群組資料以及 GID 的對應,還有該群組的加入人員 |
/etc/hosts |
主機名與 IP 的對應 |
/etc/services |
每一種服務所對應的埠 |
/etc/protocols |
基礎的 TCP/IP 封包協定,如 TCP, UDP, ICMP 等 |
/etc/rpc |
每種 RPC 伺服器所對應的程式號碼 |
/etc/ypserv.conf |
關鍵配置檔案,規範NIS客戶端登入許可權等 |
/etc/netgroup |
設定信任主機組 |
/var/yp/Makefile |
與建立資料庫有關的配置檔案 |
表1(NIS伺服器相關配置檔案及作用)
③ NIS系統架構和工作流程
圖1(NIS系統架構)
伺服器端:
NIS Server包括Master和Slave兩類伺服器,Nis Master Server將檔案建成資料庫,並提供給Slave Server來更新;Nis Slave Server以Master Server的資料庫作為本身的資料庫來源。
流程如下:
Nis Master先將帳號密碼相關檔案製作成資料庫檔案,然後Nis Master主動告訴Nis Slave來更新或者Nis Slave主動前往Nis Master取得更新。若有帳號密碼變動時,需要重新制作資料庫檔案並重新同步Master/Slave。身份認證資訊庫更新完成後,即可接收客戶機資料包並返回認證結果。
客戶機端:
NIS Client向Master/Slave請求登陸者的驗證資料。
流程如下:
NIS client 若有登入需求時,會先查詢其本機的 /etc/passwd, /etc/shadow 等檔案,若在 NIS Client 本機找不到相關的賬號資料,才開始向整個 NIS 網域的主機廣播查詢; 每個 NIS server (不論 master/slave) 都可以響應,基本上是『先響應者優先』。
*身份認證具體流程見(1)②
搭建環境
(1)安裝並配置NIS服務,搭建一個客戶端/伺服器模式的網路認證環境
在大型環境中才會使用到複雜的 NIS master/slave 架構。本文只完成最簡單的NIS master server 與 NIS client 兩個元件安裝。
① 安裝和配置NIS伺服器端
- 輸入sudo apt-get install nis rpcbind,選擇yes,安裝過程中設定自己的NIS域名(不要和主機名相同)並記住它。博主設定域名為Irene。
圖2(安裝rpcbind)
- 輸入sudo vi /etc/hosts.allow,加上如下四行:(下面四行的域名需與你的ip對應,這裡假設博主的ip是192.168.80.cde)
ALL: 192.168.80.
portmap ypserver ypbind: 192.168.80.
sshd: 192.168.80.
mountd: 192.168.80.
圖3(修改hosts.allow檔案)
- 輸入sudo vi /etc/default/nis,將NISSERVER=false改為=master。
圖4(修改nis檔案)
輸入sudo vi /etc/yp.conf,新增domain Irene server 192.168.80.cde(這裡的Irene要改為你自己之前設定的域名噢~ip也要與你的ip對應!)
圖5(修改yp.conf檔案)
輸入sudo vi /etc/ypserv.securenets,修改為255.255.255.0 192.168.80.0。(這裡的ip要與你自己的ip對應噢~)
圖6(修改ypserv.securenets檔案)
輸入sudo /usr/lib/yp/ypinit -m,初始化資料庫。
圖7(初始化資料庫)
輸入sudo service ypserv restart和sudo make -C /var/yp,重啟nis服務。
圖8(重啟nis服務)
② 安裝和配置NIS客戶端
輸入sudo apt-get install nis rpcbind,選擇yes,安裝過程中設定NIS域名為之前設定的伺服器的域名。(博主的域名是Irene)
圖9(安裝過程中設定NIS域名)
輸入sudo vi /etc/hosts.allow,新增portmap:192.168.80.cde。(這裡的ip要與你自己的域名對應噢~)
圖10(修改hosts.allow檔案)
輸入sudo vi /etc/passwd,新增+::::::。
圖11(修改passwd檔案)
輸入sudo vi /etc/group,新增+:::。
圖12(修改group檔案)
輸入sudo vi /etc/shadow,新增+::::::::。
圖13(修改shadow檔案)
輸入sudo vi /etc/nsswitch.conf
新增如下三行:
passwd: nis compat
group: nis compat
shadow: nis compat
圖14(修改nsswitch.conf檔案)
輸入sudo vi /etc/yp.conf,新增domain Irene server 192.168.80.cde。(again...域名和ip與你自己對應~)
圖15(修改yp.conf檔案)
輸入sudo service ypserv restart和sudo make -C /var/yp重啟nis服務。
圖16(重啟nis服務)
③ NIS 客戶端的檢驗
A. yptest檢驗資料庫測試
在客戶端輸入yptest檢驗資料庫測試,結果如下:
圖17(客戶端yptest)
由test 9顯示的內容列出了NIS server 上的所有帳戶資訊,可見設定成功。
【注:比較有問題的是第三步驟,他會出現在 passwd.byname 當中找不到 nobody 的字樣。這是因為早期的 nobody 之 UID 都設定在 65534 ,但 CentOS 則將 nobody 設定為系統賬號的 99 ,所以當然不會被記錄,也就出現這一個警告。】
B. ypwhich -x檢驗資料庫數量
由客戶端輸入ypwhich -x,顯示NIS Client 與 Server 之間溝通的資料庫有哪些:
圖18(客戶端ypwhich -x)
C. ypcat讀取資料庫內容
由客戶端輸入ypcat passwd.byname即可檢視該資料庫內容,如下圖:
圖19(客戶端ypcat)
每一行的格式為:
使用者名稱:口令:使用者標識號:組標識號:註釋性描述:主目錄:登入Shell
各個欄位代表的意義如表2所示:
使用者名稱 |
代表使用者賬號的字串。 |
口令 |
一些系統中,存放著加密後的使用者口令字。但現在許多Linux系統(如SVR4)都使用了shadow技術,把真正的加密後的使用者口令字存放到/etc/shadow檔案中,而在/etc/passwd檔案的口令欄位中只存放一個特殊的字元,例如“x”或者“*”。 |
使用者 標識號 |
系統內部用它來標識使用者。0是超級使用者root的標識號,1-99由系統保留,作為管理賬號,普通使用者的標識號從100開始。在Linux系統中,這個界限是500。 |
組標識號 |
使用者所屬的使用者組。 |
註釋性 描述 |
使用者的一些個人情況,例如使用者的真實姓名、電話、地址等。 |
主目錄 |
使用者的起始工作目錄,它是使用者在登入到系統之後所處的目錄。在大多數系統中,各使用者的主目錄都被組織在同一個特定的目錄下,而使用者主目錄的名稱就是該使用者的登入名。 |
登入 Shell |
使用者登入後,要啟動一個程序,負責將使用者的操作傳給核心,這個程序是使用者登入到系統後執行的命令直譯器或某個特定的程式,即Shell。 |
表2(每一欄位的意義)
圖19中,使用者名稱是xiuxiu,x用來代替口令,第一個1000是使用者xiuxiu的id,第二個1000是使用者xiuxiu所屬的使用者組id,“xiuxiu,,,”是註釋性描述,主目錄為/home/xiuxiu即使用者xiuxiu登陸到系統後所處的目錄,登入shell為/bin/bash,是使用者xiuxiu登陸到系統後預設啟動的程序。
④ 使用NIS服務
以修改密碼為例:在客戶端輸入yppasswd,分別輸入舊密碼和新密碼即可更改密碼。
圖20(客戶端修改密碼)
噹噹!完成!
*參考資料
http://cn.linux.vbird.org/linux_server/0430nis.php#nis_client_check
https://blog.csdn.net/younger_china/article/details/53010366
https://blog.csdn.net/yilovexing/article/details/50636068