天天看點

linux之NIS服務搭建及案例應用

本文系統:Centos6.0

介紹:

NIS(Network Information Services)最早是 Sun Yellow Pages (簡稱yp);

在一個大型的網域當中,如果有多部 Linux 主機,萬一要每部主機都需要設定相同的帳号與密碼時,怎麼辦?如果能夠有一部帳号服器來管理網域中所有主機的帳号, 當其他的主機有使用者登入的需求時,到伺服器上查找相關的帳号、密碼等使用者資訊, 如此一來,如果想要增加、修改、删除使用者資料,隻要到伺服器上面處理即可, 這樣就能夠降低重複設定使用者帳号的步驟;

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 伺服器主要是提供使用者登入的資訊給使用者端主機來查詢之用,是以, NIS 伺服器所提供的資料當然就需要用到傳輸與讀寫比較快速的 "資料庫" 檔案系統, 而不是傳統的純文字資料。為了要達到這個目的,是以 NIS 伺服器就必須要将前一小節提到的那些檔案制作成為資料庫檔案, 然後使用網路通訊協定讓使用者端主機來查詢。至于所使用的通訊協定是使用遠端程式呼叫 (RPC) 這個玩意兒;

<a href="http://blog.51cto.com/attachment/201309/215031290.jpg" target="_blank"></a>

從上面的流程當中,你會發現 NIS client 還是會先針對本機的帳号資料進行查詢,若本機查不到時才到 NIS server 上頭尋找。是以,如果你的 NIS client 本身就有很多一般使用者的帳号時,那跟 NIS server 所提供的帳号就可能産生一定程度的差異!是以,一般來說,在這樣的環境下,NIS client 僅會保留系統所需要的 root 及系統帳号而已。

伺服器端配置:

由于 NIS 伺服器需要使用 RPC 協定,且 NIS 伺服器同時也可以當成使用者端,是以它需要的軟體就有底下這幾個:

1

2

3

4

<code>yp-tools :提供 NIS 相關的查尋指令功能</code>

<code>ypbind   :提供 NIS Client 端的設定軟體</code>

<code>ypserv   :提供 NIS Server 端的設定軟體</code>

<code>rpcbind  :就是 RPC 需要的資料</code>

在 NIS 伺服器上最重要的就是 ypserv ,由于 NIS 設定時還會使用到其他網路參數設定資料, 是以在設定檔方面需要有底下這些資料

   /etc/ypserv.conf:這是最主要的 ypserv 軟體所提供的設定檔,可以規範 NIS 使用者端是否可登入的權限。

   /etc/hosts:由于 NIS server/client 會用到網路主機名稱與 IP 的對應,是以這個主機名稱對應檔就顯的相當重要!每一部主機名稱與 IP 都需要記錄才行!

   /etc/sysconfig/network:可以在這個檔案内指定 NIS 的網域 (nisdomainname)。

   /var/yp/Makefile:前面不是說帳号資料要轉成資料庫檔嗎? 這就是與建立資料庫有關的動作設定檔;

至于 NIS 伺服器提供的主要服務方面有底下兩個:

   /usr/sbin/ypserv:就是 NIS 伺服器的主要提供服務;

   /usr/sbin/rpc.yppasswdd:提供額外的 NIS 使用者端之使用者密碼修改服務, 透過這個服務, NIS 使用者端可以直接修改在 NIS 伺服器上的密碼。相關的使用程式則是 yppasswd 指令;

與帳号密碼的資料庫有關的指令方面有底下幾個:

   /usr/lib64/yp/ypinit:建立資料庫的指令,非常常用 (在 32 位元的系統下,檔名則是 /usr/lib/yp/ypinit );

   /usr/bin/yppasswd:與 NIS 使用者端有關,主要在讓使用者修改伺服器上的密碼。

案例:

NIS 的域名 lansgg

NIS server 的 IP 為 192.168.182.132 ,主機名 www.server.lansgg.com

安裝服務端:

<code>[root@Server lansgg]# yum install yp-tools ypbind ypserv rpcbind -y</code>

設定NIS域名(NIS domain name)

<code>[root@Server lansgg]# vim /etc/sysconfig/network</code>

<code>NISDOMAIN=lansgg               #新增,NIS域名</code>

<code>YPSERV_ARGS=</code><code>"-p 1001"</code>       <code>#新增,啟動ypserv服務的端口</code>

設定主配置檔案 /etc/ypserv.conf

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<code>[root@Server lansgg]# vim /etc/ypserv.conf</code>

<code>dns: no   # NIS 伺服器大多使用于内部區域網路絡,隻要有 /etc/hosts 即可,不用 DNS 啦,我們在這裡使用hosts</code>

<code>files: </code><code>30</code>   <code># 預設會有 </code><code>30</code> <code>個資料庫被讀入記憶體當中</code>

<code>xfr_check_port: yes #與 master/slave 有關,将同步更新的資料庫比對所使用的端口,放置于 &lt;</code><code>1024</code> <code>内</code>

<code># 底下則是設定限制用戶端或 slave server 查詢的權限,利用冒号隔成四部分:</code>

<code># [主機名/IP] : [NIS域名] : [可用資料庫名稱] : [安全限制]</code>

<code># [主機名/IP]   :可以使用 network/netmask 如 </code><code>192.168</code><code>.</code><code>100.0</code><code>/</code><code>255.255</code><code>.</code><code>255.0</code>

<code># [NIS域名]   :例如本案例中的 lansgg</code>

<code># [可用資料庫名稱]:就是由 NIS 制作出來的資料庫名稱;</code>

<code># [安全限制]      :包括沒有限制 (none)、僅能使用 &lt;</code><code>1024</code> <code>(port) 及拒絕 (deny)</code>

<code># 一般來說,你可以依照我們的網域來設定成為底下的模樣:</code>

<code>127.0</code><code>.</code><code>0.0</code><code>/</code><code>255.255</code><code>.</code><code>255.0</code>     <code>: * : * : none</code>

<code>192.168</code><code>.</code><code>182.0</code><code>/</code><code>255.255</code><code>.</code><code>255.0</code> <code>: * : * : none</code>

<code>*                           : * : * : deny</code>

<code># 星号 (*) 代表任何資料都接受的意思。上面三行的意思是,開放 lo 内部接口、</code>

<code># 開放内部 LAN 網域,且杜絕所有其他來源的 NIS 要求的意思。</code>

<code># 還有一個簡單作法,你可以先将上面三行批注,然後加入底下這一行即可:</code>

<code>*                         : * : * : none</code>

設定hosts

<code>[root@Server lansgg]# vim /etc/hosts</code>

<code>192.168</code><code>.</code><code>182.132</code> <code>www.server.lansgg.com</code>

<code>192.168</code><code>.</code><code>182.133</code> <code>www.client.lansgg.com</code>

設定相關服務服務

<code>[root@Server lansgg]# vim /etc/sysconfig/yppasswdd</code>

<code>YPPASSWDD_ARGS=</code><code>"--port 1002"</code> <code>#yppasswdd服務的端口</code>

啟動相關服務

<a href="http://blog.51cto.com/attachment/201309/221214624.jpg" target="_blank"></a>

設定測試帳号并建立資料庫

[root@Server lansgg]# echo 123 |passwd --stdin testuser1

<code>[root@Server lansgg]# useradd testuser1</code>

<code>[root@Server lansgg]# useradd testuser2</code>

<code>[root@Server lansgg]# useradd testuser3</code>

<code>[root@Server lansgg]# echo </code><code>123</code> <code>|passwd --stdin testuser1</code>

<code>[root@Server lansgg]# echo </code><code>123</code> <code>|passwd --stdin testuser2</code>

<code>[root@Server lansgg]# echo </code><code>123</code> <code>|passwd --stdin testuser3</code>

<code>[root@Server lansgg]# /usr/lib/yp/ypinit -m</code>

<a href="http://blog.51cto.com/attachment/201309/222314647.jpg" target="_blank"></a>

PS:如果你的使用者密碼有變動過,那麼你就得要重新制作資料庫,重新啟動 ypserv 及 yppasswdd;

NIS client設定

<code>[root@centos ~]# yum install ypbind yp-tools -y</code>

yp-tools 是提供查詢的軟體,ypbind 是 ypserv 溝通橋梁 另外,在 CentOS 當中我們還有很多設定檔是與認證有關的,包含 ypbind 的設定檔時, 在設定 NIS client 你可能需要動到底下的檔案:

   /etc/sysconfig/network:就是 NIS 的域名

   /etc/hosts:至少需要有各個 NIS 伺服器的 IP 與主機名對應;

   /etc/yp.conf:這個則是 ypbind 的主要設定檔,裡面主要設定 NIS 伺服器

   /etc/sysconfig/authconfig:規範帳号登入時的允許認證機制;

   /etc/pam.d/system-auth :這個最容易忘記!因為帳号通常由 PAM 模組所管理, 是以你必須要在 PAM 模組内加入 NIS 的支援才行

   /etc/nsswitch.conf :這個檔案可以規範帳号密碼與相關資訊的查詢順序,預設是先找 /etc/passwd 再找 NIS 資料庫;

另外, NIS 還提供了幾個有趣的程式給 NIS 使用者端來進行帳号相關參數的修改,例如密碼、shell 等等, 主要有底下這幾個指令:

   /usr/bin/yppasswd :更改你在 NIS database (NIS Server 所制作的資料庫) 的密碼

   /usr/bin/ypchsh   :同上,但是是更改 shell

   /usr/bin/ypchfn   :同上,但是是更改一些使用者的訊息

如果一個個修改上面的配置檔案太麻煩了;這裡我們使用他的圖形化工具:執行setup

當然首先配置hosts

<code>[root@centos ~]# vim /etc/hosts</code>

<a href="http://blog.51cto.com/attachment/201309/224503109.jpg" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201309/224505382.jpg" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201309/224508116.jpg" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201309/224510808.jpg" target="_blank"></a>

我們看看執行完這個都修改了那些檔案

<a href="http://blog.51cto.com/attachment/201309/224904366.jpg" target="_blank"></a>

<a href="http://blog.51cto.com/attachment/201309/224906652.jpg" target="_blank"></a>

總的來說:

<code>/etc/sysconfig/network (加入 NISDOMAIN 項目)</code>

<code>/etc/nsswitch.conf (修改許多主機驗證功能的順序)</code>

<code>/etc/sysconfig/authconfig (主機 的認證機制)</code>

<code>/etc/pam.d/system-auth (許多登入所需要的 PAM 認證過程)</code>

<code>/etc/yp.conf (ypbind 的設定檔)</code>

NIS client 端的檢驗: yptest, ypwhich, ypcat

利用 yptest 檢驗資料庫

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<code>[root@centos ~]# yptest    #下面是輸出的資訊</code>

<code>Test </code><code>1</code><code>: domainname</code>

<code>Configured domainname </code><code>is</code> <code>"lansgg"</code>

<code>Test </code><code>2</code><code>: ypbind</code>

<code>Used NIS server: www.server.lansgg.com</code>

<code>Test </code><code>3</code><code>: yp_match</code>

<code>WARNING: No such key </code><code>in</code> <code>map (Map passwd.byname, key nobody)</code>

<code>#此處的warning可以忽略;因為早期的 nobody 之 UID 都設定在 </code><code>65534</code> <code>,但 現在将 nobody 設定為系統帳号的 </code><code>99</code> <code>,是以不會被記錄,也就出現這一個警告。</code>

<code>Test </code><code>4</code><code>: yp_first</code>

<code>testuser1 testuser1:$</code><code>6</code><code>$hCf0HKoZ$G/SwK1ecB8oDpwcQNDmMMulDP3FNef13WMwB.AdAMFLNo1FAZQ0DRzhIyA2M5OThWzeB2OZyCIVcZm7XC5Qxp0:</code><code>501</code><code>:</code><code>501</code><code>::/home/testuser1:/bin/bash</code>

<code>Test </code><code>5</code><code>: yp_next</code>

<code>leo leo:$</code><code>6</code><code>$TCro9XvftUiuBuRK$U7OpDgBACvZdI2YS1IPYsBzi6KZjSfp1S5bpQ2PSGpJADlygN03i.XKsbDy7Vm24KsPIKienMA/y6U.fG.Bjp1:</code><code>500</code><code>:</code><code>500</code><code>:leo:/home/leo:/bin/bash</code>

<code>testuser3 testuser3:$</code><code>6</code><code>$JcJY9UZF$b8KRXlgMhCKK6k.QSK6t.FcBoU7FETHAkLggMOC3oScq/n.7FHm5pVdFfaXj8UvUo5fBLFJKzR7DNNN071RmW.:</code><code>503</code><code>:</code><code>503</code><code>::/home/testuser3:/bin/bash</code>

<code>testuser2 testuser2:$</code><code>6</code><code>$jOAUXAIi$DoDRVX1YVB0MMCfHGpvaE3mgLzmWUs6QP/Fh0Dic7ppc9j9OhXLjlBuAgHfqplO7PiqAQKoyM9JKMY0WXhE4M0:</code><code>502</code><code>:</code><code>502</code><code>::/home/testuser2:/bin/bash</code>

<code>Test </code><code>6</code><code>: yp_master</code>

<code>www.server.lansgg.com</code>

<code>Test </code><code>7</code><code>: yp_order</code>

<code>1374645119</code>

<code>Test </code><code>8</code><code>: yp_maplist</code>

<code>mail.aliases</code>

<code>netid.byname</code>

<code>services.byservicename</code>

<code>hosts.byname</code>

<code>passwd.byuid</code>

<code>hosts.byaddr</code>

<code>rpc.byname</code>

<code>group.bygid</code>

<code>passwd.byname</code>

<code>group.byname</code>

<code>services.byname</code>

<code>ypservers</code>

<code>protocols.byname</code>

<code>rpc.bynumber</code>

<code>protocols.bynumber</code>

<code>Test </code><code>9</code><code>: yp_all</code>

<code>#此處為重點:yp_all 必須要有列出你 NIS server 上頭的所有帳号資訊,如果有出現帳号相關資料的話,那麼應該就算驗證成功了!</code>

<code>1</code> <code>tests failed</code>

利用 ypwhich 檢驗資料庫數量

<a href="http://blog.51cto.com/attachment/201309/225606779.jpg" target="_blank"></a>

由上面我們可以很清楚的就看到相關的檔案啦!這些資料庫檔案則是放置在我的 NIS Server 的 /var/yp/lansgg/下面

利用 ypcat 讀取資料庫内容

除了 yptest 之外,你還可以直接利用 ypcat 讀取資料庫的内容;一般作法是這樣

<code>[root@www ~]# ypcat [-h nisserver] [資料庫名稱]</code>

<code>選項與參數:</code>

<code>-h nisserver :如果有設定的話,指向某一部特定的 NIS 伺服器,</code>

<code>               </code><code>如果沒有指定的話,就以 ypbind 之設定為主;</code>

<code>資料庫名稱:亦即在 /</code><code>var</code><code>/yp/vbirdnis/ 内的檔名啊!例如 passwd.byname</code>

<code># 讀出 passwd.byname 的資料庫内容</code>

<code>[root@www ~]# ypcat passwd.byname</code>

<code>testuser1:$</code><code>6</code><code>$hCf0HKoZ$G/SwK1ecB8oDpwcQNDmMMulDP3FNef13WMwB.AdAMFLNo1FAZQ0DRzhIyA2M5OThWzeB2OZyCIVcZm7XC5Qxp0:</code><code>501</code><code>:</code><code>501</code><code>::/home/testuser1:/bin/bash</code>

<code>testuser3:$</code><code>6</code><code>$JcJY9UZF$b8KRXlgMhCKK6k.QSK6t.FcBoU7FETHAkLggMOC3oScq/n.7FHm5pVdFfaXj8UvUo5fBLFJKzR7DNNN071RmW.:</code><code>503</code><code>:</code><code>503</code><code>::/home/testuser3:/bin/bash</code>

<code>testuser2:$</code><code>6</code><code>$jOAUXAIi$DoDRVX1YVB0MMCfHGpvaE3mgLzmWUs6QP/Fh0Dic7ppc9j9OhXLjlBuAgHfqplO7PiqAQKoyM9JKMY0WXhE4M0:</code><code>502</code><code>:</code><code>502</code><code>::/home/testuser2:/bin/bash</code>

使用者參數修改: yppasswd, ypchfn, ypchsh  (這裡不在示範)

   yppasswd :與 passwd 指令相同功能;

   ypchfn :與 chfn 相同功能;

   ypchsh :與 chsh 相同功能。

下面開始測試:

在client端su到testuser1;原來我們本地是沒有該賬戶的;

<code>[root@www ~]# su - testuser1</code>

<code>su: 警告:無法切換到目錄/home/testuser1: 沒有那個檔案或目錄</code>

可以發現切換成功,可是提示沒有家目錄;

因為 testuser1 的家目錄是在伺服器端的 /home ,而你在使用者端登入時, 在使用者端的 /home 底下根本不可能有 testuser1 的家目錄嘛!那怎辦?很簡單,将伺服器端的 /home 挂載到使用者端上面即可啊!

案例2;

1、建立三個使用者u1、u2、u3,他們的家目錄都是/uhome(與本地使用者的家目錄分開)

2、NFS 伺服器:分享了 /uhome 給 192.168.182.0/24 這個網域,且預計将所有程式放置于 /uuse 目錄中。 此外,假設所有使用者端都是很幹淨的系統,是以不需要壓縮使用者端 root 的身份。

<code>[root@Server ~]# mkdir /uhome</code>

<code>[root@Server ~]# useradd -u </code><code>1001</code> <code>-d /uhome/u1 u1</code>

<code>[root@Server ~]# useradd -u </code><code>1002</code> <code>-d /uhome/u2 u2</code>

<code>[root@Server ~]# useradd -u </code><code>1003</code> <code>-d /uhome/u3 u3</code>

<code>[root@Server ~]# echo </code><code>123</code> <code>|passwd --stdin u1</code>

<code>[root@Server ~]# echo </code><code>123</code> <code>|passwd --stdin u2</code>

<code>[root@Server ~]# echo </code><code>123</code> <code>|passwd --stdin u3</code>

啟動服務

<code>[root@Server ~]# /etc/init.d/ypserv restart</code>

<code>[root@Server ~]# /etc/init.d/yppasswdd restart</code>

<code>[root@Server ~]# /usr/lib/yp/ypinit -m</code>

nfs設定

<code>[root@Server ~]# mkdir /uuse</code>

<code>[root@Server ~]# vim /etc/exports</code>

<code>/uhome  </code><code>192.168</code><code>.</code><code>182.0</code><code>/</code><code>24</code><code>(rw,no_root_squash)</code>

<code>/uuse   </code><code>192.168</code><code>.</code><code>182.0</code><code>/</code><code>24</code><code>(rw,no_root_squash)</code>

<a href="http://blog.51cto.com/attachment/201309/232407994.jpg" target="_blank"></a>

client設定

<code>[root@www ~]# mkdir /uhome /uuse</code>

<code>[root@www ~]# mount -t nfs </code><code>192.168</code><code>.</code><code>182.132</code><code>:/uhome /uhome</code>

<code>[root@www ~]# mount -t nfs </code><code>192.168</code><code>.</code><code>182.132</code><code>:/uuse /uuse</code>

<code>#以上正确,可以寫入fstab 或rc.local</code>

現在你去su - u1發現不再提示沒有家目錄了;

到此yp黃頁服務完畢;

本文轉自 西索oO 51CTO部落格,原文連結:http://blog.51cto.com/lansgg/1289648