環境: CentOS 7.0
Server端套件: rpcbind、ypserv、yp-tools
Client 端套件: ypbind、yp-tools
小知識:
yp = yellow page (黃頁)
黃頁源自於以前公共電話裡都會有一本可以查詢所有公司電話的名冊。
前言 :
NIS 伺服器一般會搭配 NFS伺服器 使用
Network Information Services (NIS server)
Network FileSystem Services (NFS Server)
這邊我們將重點放在NIS上面。
有了NIS,你就不需要再一台主機一台主機的建立帳號!
只需要在NIS Server上建立好你所需的帳號。
然後再NIS Client端設定相對應的套件接收訊息就可以。
簡單說,他就是一個管理帳號的伺服器。
當然現在LDAP才是主流,但LDAP的入門等級較高。
只是希望完成帳號控管的需求,建議透過NIS 搭配 NFS進行就好。
關於NIS 的相關資訊可以參考鳥哥的網站:
第十四章、帳號控管: NIS 伺服器
Server 端:
處理:
0.
# yum install ntpdate
# ntpdate [校時的伺服器網址]
1. 我們先看到Server端的設定。
我們要先安裝好相關套件。
# yum install rpcbind ypserv yp-tools
接著我們要將服務設定成開機啟用
#systemctl enable rpcbind
#systemctl enable ypserv
啟用服務
#systemctl start rpcbind
#systemctl start ypserv
開始設定檔網域名稱部分
#vim /etc/sysconfig/network
這邊是要來設定NIS的網域名稱 (添加下面行數)
NISDOMAIN=nis_server
(nis_server為自定義,使用者可以依自己的選擇修改)
YPSERV_ARGS=”-p 1011”
這邊是指定我們的YPSERV指定使用1011 port
開機後會自動加入網域中
#vim /etc/rc.d/rc.local
/bin/nisdomainname nis_server
設定主機hosts
一般來說我們會在DNS伺服器添加對應的DomainName。
但如果不想在DNS設定,或者你沒有權限設定的話。
就加在下面的設定檔當中 (儲存後就會直接啟用)
這邊是設定我們的NIS 主機是對應到哪個IP位址。
#vim /et/hosts
10.10.10.11 nis_server
例如上面,就是表示我們設定nis_server = 10.10.10.11
接著來調整NIS Server的主要設定檔
#vim /etc/ypserv.conf
這個設定檔主要在規範誰可以使用NIS服務。
設定方法不難(有點像是防火牆規則的方法,由上至下,對應到的規則就使用)
10.10.10.0/255.255.255.0 :* :* :port
上面這一行表示,
10.10.10.0/24網段內的IP,都可以使用1024以下的port進行連接NIS動作。
當然最後不免俗要加上一筆,只要都不符合就都拒絕掉
* :* :* :deny
上面這一行表示,只要是前面的規則都沒符合的話,就封鎖。
我們來了解一下這些設定值的欄位分別表示甚麼
第一個是host (這邊可以指定IP,也可以指定網段)
EXAMPLE : 10.10.10.0/255.255.255.0
第二個欄位是設定NIS Domain (這邊跟我們之前設的域名不同)
EXAMPLE :*
第三個欄位是 MAP,可以用的資料庫名稱,可以用*表示全部的資料庫
EXAMPLE :*
第四個欄位 表示Security,設定安全性的地方,要我們怎麼連接及使用。
有三種表示方式: none、port、deny
none 表示我都不阻擋
port 限制port號在1024以下的才可以連接使用
deny 拒絕
如果只是單存想測試NIS功能的可以使用
* :* :* :none
這樣子表示全部允許通過。
不然會建議設定允入IP (依需求添加)、然後最後加上deny規則
10.10.10.0/255.255.255.0 :* :* :port
* :* :* :deny
開始設定yppasswdd 設定檔
NIS服務,他的密碼驗證走的會是跟帳號串接不同的port。
我們這邊是要將它設置為1012 port
#vim /etc/sysconfig/yppasswdd
YPPASSWD_ARGS=”-p 1012”
這邊設定成下方那樣也是可以接受。
YPPASSWD_ARGS=”--port 1012”
這邊設定完成後,NIS服務設定就完成了。
設定完成後重啟NIS相關服務
#systemctl restart rpcbind
#systemctl restart ypserv
#systemctl restart yppasswdd
接著用rpcinfo確認一下服務有沒有照我們預想的去跑。
#rpcinfo –p localhost
#rpcinfo –u localhost ypserv
再來要設定防火牆牆規則!!
在CentOS7 當中,預設是使用firewalld (並非以前的netfilter)
可以簡單輸入一些指令讓他服務暢通。
# firewall-cmd --add-port 1011/tcp
# firewall-cmd --add-port 1012/tcp
# firewall-cmd --add-port 1011/udp
# firewall-cmd --add-port 1012/udp
上方的規則是臨時用的,如果你要重開服務後這個規則還在就要如下面設定
# firewall-cmd --add-port 1011/tcp --permanent
# firewall-cmd --add-port 1012/tcp --permanent
# firewall-cmd --add-port 1011/udp --permanent
# firewall-cmd --add-port 1012/udp --permanent
或者另外添加firewall規則 (直接找裡面的範本來修改比較快)
#vim /etc/firewalld/services/nissvr.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>NIS</short>
<description> NIS Server </description>
<port protocol="tcp" port="1011"/>
<port protocol="tcp" port="1012"/>
<port protocol="udp" port="1011"/>
<port protocol="udp" port="1012"/>
</service>
在上面設定完後重新載入一下設定檔
firewall-cmd --reload
firewall-cmd --permanent --add-service=nissvr
接著動作是創立帳號。
因為我們之後要讓使用者可以使用sudo功能。
所以我們要先在Server這邊建立一個可以sudo的 group
#addgroup sudogrp
在NIS伺服器端設定sudoers設定檔
#vim /etc/sudoers
添加
%sudogrp ALL=(ALL:ALL) ALL
讓屬於sudogrp群組內的帳號都可以有sudo的權限。
接著創立我們要的NIS帳號
這邊有沒有指定uid應該沒有差
#adduser –u 1001 nisclient01 -G sudogrp
#adduser –u 1002 nisclient02 -G sudogrp
#adduser –u 1003 nisclient03 -G sudogrp
如果帳號之後要配合NFS使用的話,這邊建議改一下家目錄位置。
因為會配合NFS的目的就要將家目錄也一併掛載過去使用。
這邊的rhome代表remote home的意思,rhome資料夾是要事先建立出來的。
#mkdir /rhome
裡面的帳號資料夾由創建帳號的時候由系統幫你生成就好。
#adduser –u 1001 nisclient01 -G sudogrp -d /rhome/nisclient01
#adduser –u 1002 nisclient02 -G sudogrp -d /rhome/nisclient02
#adduser –u 1003 nisclient03 -G sudogrp -d /rhome/nisclient03
設定帳號的密碼 ( | 前面的password 就是密碼,這邊建議設定自己習慣的)
下面這樣的方式就可以直接強制對該帳號設定密碼;而不用進到互動模式。
#echo password | passwd --stdin nisclient01
#echo password | passwd --stdin nisclient02
#echo password | passwd --stdin nisclient03
上面三個帳號創立完成後,我們就要來對NIS 服務做資料庫的建立及初始化。
#/usr/lib64/yp/ypinit –m
當資料庫初始化完成後,我們NIS 伺服器的建置到一段落。
未來如果有創建或更動 帳號、群組或網域的話 ,就要重新跑資料庫。
# make -C /var/yp
初始化或者重新跑資料庫完成後需要重啟一下NIS服務
#systemctl restart rpcinfo
#systemctl restart ypserv
#systemctl restart yppasswdd
Client 端:
1.我們看到NIS Client的設定。
到Client端我們也需要下載部分NIS套件來使用
#yum install ypbind yp-tools
#yum install setuptool setup
下載setup只是為了讓我們等下設定簡單些。
#setup
在setup運作完成後,很多設定檔都完成了
設定ypbind服務開機啟用。
#systemctl enable ypbind
#systemctl restart ypbind
不過設定完還是需要檢查一下
#vim /etc/sysconfg/network
NISDOMAIN=nis_server
#vim /etc/rc.d/rc.local
/bin/nisdomainname nis_server
如果你的NIS 伺服器並非用DNS對應,而是自己寫入設定檔中。
那Client端的設定檔也需要添加,否則會找不到對應的NIS伺服器。
#vim /etc/hosts
10.10.10.11 nis_server
確認一下NIS伺服器是否有正確對應到
#vim /etc/yp.conf
domain nis_server 10.10.10.11
確認一下系統認證的機制
#vim /etc/sysconfig/authconfig
USENIS=yes
#vim /etc/pam.d/system-auth
password sufficient pam_unix.so sha512 shadow nis nullok try_first_pass use_authtok
最後也是最重要的確認使用者密碼的認證順序
#vim /etc/nsseitch.conf
先找到幾個設定值【passwd】、【shadow】、【group】、【hosts】
找到這些時看一下後面帶著甚麼樣的資訊
passwd: files nis
shadow: files nis
group: files nis
hosts: files nis
這些表示如果有人要使用帳密進行登入時,系統主機應該去那裡做驗證。
files 表示本機的設定檔
nis 表示nis資料庫
如果進入設定後發現沒有nis,請自行將它加上去
不然會一直無法使用NIS服務登入
這邊設定完之後,我們應該就要重啟服務讓使用者測試連線。
但因為我們希望使用者進入後可以有sudo的權限。
所以我們在client端也要在sudoers裡面添加設定資訊。
#vim /etc/sudoers
%sudogrp ALL=(ALL:ALL) ALL
如此一來我們等等重啟服務後,登入的使用者也可以使用sudo切換root權限
#systemctl restart rpcbind
#systemctl restar ypbind
接著就找一台主機進行測試登入的動作。
但因為這個時候還沒有搭配NFS,所以登入時會找不到家目錄(如下圖)。
/usr/bin/id: cannot find name for user ID 1004
-bash-4.2$
這樣就算初步成功。
Client 端檢測方式:
如果發現一直無法登入,我們就要使用一些套件來檢查是否可以正常連線。
#yptest (正常的yptest會跑出下列大約九項的測試)
Test 1: domainname
Configured domainname is "nis_server"
Test 2: ypbind
Used NIS server: nis_server
Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody)
這邊的錯誤可以詳見鳥哥的文章,它不影響伺服器運作
Test 4: yp_first
nisclient01 nisclient01:$6$X……Z9qXJg/:1001:1001::/home/ nisclient01:/bin/bash
Test 5: yp_next
nisclient02
……………………………….
nisclient03
……………………………..
Test 6: yp_master
nis_server
Test 7: yp_order
Test 8: yp_maplist
mail.aliases
protocols.byname
protocols.bynumber
netid.byname
services.byservicename
services.byname
rpc.bynumber
rpc.byname
hosts.byaddr
hosts.byname
group.bygid
group.byname
passwd.byuid
passwd.byname
ypservers
Test 9: yp_all
會顯示所有帳號。
錯誤狀況說明:
1. Client 測試
yptest在test2就停止了
Test 2: ypbind
can't yp_bind: Reason: Domain not bound
這代表Client端無法連接到你的NIS伺服器。
原因可能有防火牆、或者連接不到你的NIS DomainName
這邊我的NIS DomainName就是 nis_server
如果你沒有在/etc/hosts設定好,是會發生這個狀況。
2. Client端測試
如果帳號一直無法sudo可能是創建帳號時的關係。
我在進行帳號創建時,是使用-g 表示非主要群組。
這個時候我要sudo完全不能用。
而變成-G設為帳號主要群組時,sudo就完全正常。
不清楚這邊的群組是否有直接的原因關係。
3 Server端測試
如果服務一直出現下面錯誤,請檢查設定檔有沒有問題。
Process: 526 ExecStartPost=/usr/libexec/ypbind-post-waitbind (code=exited, status=1/FAILURE)
NIS告一段落,接著研究NFS!
(下集待續)