# Server和Client設定NIS域名 nisdomainname nis_server echo 'NISDOMAIN=nis_server' >> /etc/sysconfig/network # Server寫入ypserv組態檔 echo -e '127.0.0.0/255.255.255.0:*:*:none\n192.168.2.0/255.255.255.0:*:*:none\n*:*:*:deny'>> /etc/ypserv.conf # 資料庫初始化 /usr/lib64/yp/ypinit -m # Server涉及的服務 systemctl start rpcbind systemctl start yppasswdd systemctl start ypserv # Clinet設定 authconfig-tui # Client涉及的服務 systemctl start rpcbind systemctl start ypbind
當我們擁有多臺Linux伺服器時,賬號管理就成為一個比較頭大的問題了,比如在全部的伺服器上新建、刪除賬戶和修改密碼,一臺一臺ssh登入去操作顯然不是個好主意,賬戶同步是個大問題。為此NIS誕生了。
NIS全稱Network Information Service,主要功能是對主機賬號系統等系統資訊提供集中的管理。
NIS有兩種角色,Server和Client
Server會將自己的以下檔案作成為DBM資料庫檔案:
當這些檔案發生改變時候,需要在Client中生效,要再重新生成DBM資料庫。
Client在有使用者登入時,會先驗證本機儲存的使用者,如果沒有記錄,會再向Server搜尋資料庫裡面資料做為驗證用。
一般情況下我們一臺Server對應為若干臺Client服務,當我們有大量的伺服器需要為大量Client服務的時候,一臺Server可能從響應的服務質量可能就不是那麼美好了的。這個時候我們可以額外設定臺Slave作為從伺服器。Server和Slave之間會進行資料的同步,從而再為Client提供服務。
不過除非有超過一百臺的Linux主機,不然其實一個Server也是沒問題的。
Server需要安裝的軟體有rpcbind、ypserv、yp-tools。ypbind為Client使用的,可以選擇性安裝。
#rpm系列的linux sudo yum -y install ypserv yp-tools rpcbindypbind
# 這個方法是隻下載,如果你的Server設定過nfs,可以很方便的為Clinent伺服器安裝吧哈哈
# yumdownloader --resolve --destdir=/root/yum ypserv ypbind yp-tools rpcbind
# deb系列的linux
sudo apt -y install nis
直接用nisdomainname命令來設定
# 後面nisdomainname+域名,設定域名 [root@server_197 ~]# nisdomainname nis_server # 單純nisdomainname為返回當前域名 [root@server_197 ~]# nisdomainname
系統重新啟動後也生效需要/etc/sysconfig/network中追加NISDONAIN=<name>
[root@server_197 ~]# echo 'NISDOMAIN=nis_server' >> /etc/sysconfig/network [root@server_197 ~]# cat /etc/sysconfig/network # Created by anaconda NISDOMAIN=nis_server
相關的許可權組態檔在/etc/ypserv.conf。可以先看一下里面的內容。
[root@server_197 ~]# cat /etc/ypserv.conf | grep -v '#' files: 30 #這裡的代表會讀到記憶體中的資料庫數量,一般情況30個是足夠 xfr_check_port: yes
# 與master/slave 有關,將同步更新的資料庫比對所使用的埠,放置於<1024內
# Host(允許的主機或者ip) : Domain(NIS域): Map(可用的資料庫名字) : Security(安全限制)
* : * : shadow.byname : port * : * : passwd.adjunct.byname : port
重點介紹一下後面查詢的許可權格式,使用冒號隔成四部分:
Host:Domain:Map:Security
# Host : Domain : Map : Security # # * : * : passwd.byname : port # * : * : passwd.byuid : port # Not everybody should see the shadow passwords, not secure, since # under MSDOG everbody is root and can access ports < 1024 !!! * : * : shadow.byname : port * : * : passwd.adjunct.byname : port
依據具體情況我們可以這樣寫。
# 本機可以存取全部domain、map(資料庫)、none(沒有限制) 127.0.0.0/255.255.255.0 :* :* :none # 192.168.2.0/24可以存取全部domain、map(資料庫)、none(沒有限制) 192.168.2.0/255.255.255.0 :* :* :none # 其他ip全部deny(拒絕),和防火牆規則,這條規則是至關重要的,相當於是預設規則吧 * :* :* :deny
偷懶就echo加上去吧哈哈。
echo -e '127.0.0.0/255.255.255.0:*:*:none\n192.168.2.0/255.255.255.0:*:*:none\n*:*:*:deny'>> /etc/ypserv.conf
需要啟動rpcbind、yppasswd、ypserv,切記,先啟動rpcbind。隨便來個開機自啟動啦
systemctl start rpcbind && systemctl enable rpcbind
systemctl start yppasswdd && systemctl enable yppasswdd
systemctl start ypserv && systemctl enable ypserv
既然NIS的初衷的共用使用者的,在生成資料庫之前,先要把新建使用者刪除使用者之類的操作完成,再生成資料庫。每一次操作都要重新生成資料庫和重新啟動服務。
[root@server_197 ~]# adduser -s /bin/bash -g test -d /home/test test2022 # 建立個使用者隨便複習一下adduser # -s 指定shell路徑 # -g 所在組 # -d 設定home目錄位置 [root@server_197 ~]# passwd test2022 Changing password for user test2022. New password: Retype new password: passwd: all authentication tokens updated successfully.
執行/usr/lib64/yp/ypinit -m初始化(如果你安裝的軟體包是32位元,對應的應該是/usr/lib/yp/ypinit -m),其中會等待我們輸入next host to add,直接Ctrl+D跳過即可,再y確認
[root@server_197 ~]# /usr/lib64/yp/ypinit -m At this point, we have to construct a list of the hosts which will run NIS servers. server_197 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>. next host to add: server_197 next host to add: The current list of NIS servers looks like this: server_197 Is this correct? [y/n: y] y We need a few minutes to build the databases... Building /var/yp/nis_server/ypservers... Running /var/yp/Makefile... gmake[1]: Entering directory `/var/yp/nis_server' 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/nis_server' server_197 has been set up as a NIS master server. Now you can run ypinit -s server_197 on all slave server.
確保目前的rpcbind、yppasswdd、ypserv服務已經在正常的工作了。沒有就systemctl啟動一下。
更新後再重新啟動一次吧
systemctl start rpcbind
systemctl start yppasswdd
systemctl start ypserv
現在來設定Client。
和Server不相同,不需要安裝ypserv。
安裝rpcbind、yp-tools、ypbind
# rpm yum -y install ypbind yp-tools rpcbind # 其實我沒有在deb上跑過,不太確定是不是 apt -y install nis
這裡和Server設定一樣,domain要一致,否則無法使用。
直接用nisdomainname命令來設定
# 後面nisdomainname+域名,設定域名
[root@server_149 ~]# nisdomainname nis_server
# 單純nisdomainname為返回當前域名
[root@server_149 ~]# nisdomainname
系統重新啟動後也生效需要/etc/sysconfig/network中追加NISDONAIN=<name>
[root@server_149 ~]# echo 'NISDOMAIN=nis_server' >> /etc/sysconfig/network [root@server_149 ~]# cat /etc/sysconfig/network # Created by anaconda NISDOMAIN=nis_server
在目錄含中輸入,可以進入半圖形化的設定介面。
authconfig-tui
上下或tab鍵可以控制遊標移動,在NIS位置選擇,即按空格。
F12下一頁,遊標移動到Next選擇也可以。
輸入一下Domain和Server,即之前設定的nisdomainname和NIS_Server的IP地址。
完成設定後
重新啟動一下服務即可。
systemctl start rpcbind
systemctl start ypbind
在Client中嘗試登入之前的新建的test2022使用者
[root@client_149 ~]# su test2022 bash: /home/test/.bashrc: Permission denied bash-4.2$
當然目前要注意HOME目錄是Server自己的HOME目錄,Client自然是沒有啦,可以使用NFS來掛載,具體可以看我主頁的另外一篇文章。