Linux的NIS設定

2022-08-31 18:01:43

快速命令

 

# 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

 

NIS

當我們擁有多臺Linux伺服器時,賬號管理就成為一個比較頭大的問題了,比如在全部的伺服器上新建、刪除賬戶和修改密碼,一臺一臺ssh登入去操作顯然不是個好主意,賬戶同步是個大問題。為此NIS誕生了。

NIS全稱Network Information Service,主要功能是對主機賬號系統等系統資訊提供集中的管理。

Server和Client

NIS有兩種角色,Server和Client

Server會將自己的以下檔案作成為DBM資料庫檔案:

  • /etc/passwd使用者基本資訊:使用者名稱、UID、GID、$HOME、$SHELL
  • /etc/group使用者組資訊:GID和群內成員
  • /etc/hosts域名:域名和IP解析
  • /etc/services守護行程所對應的埠
  • /etc/protocolsTCP/IP封包協定
  • /etc/rpc每種RPC服務所對應的程式號碼
  • /var/yp/ypserversNIS伺服器所提供的資料庫。 

當這些檔案發生改變時候,需要在Client中生效,要再重新生成DBM資料庫。

Client在有使用者登入時,會先驗證本機儲存的使用者,如果沒有記錄,會再向Server搜尋資料庫裡面資料做為驗證用。

  • yp-tools :提供 NIS 相關的查尋指令功能
  • ypbind :Client提供繫結設定套件,系統中獲取 NIS 域名,並使用 RPC 連線到伺服器上
  • ypserv :為Server提供NIS響應
  • rpcbind :NIS和NFS類似的,也需要rpc來作為中轉

Slave和Server架構

一般情況下我們一臺Server對應為若干臺Client服務,當我們有大量的伺服器需要為大量Client服務的時候,一臺Server可能從響應的服務質量可能就不是那麼美好了的。這個時候我們可以額外設定臺Slave作為從伺服器。Server和Slave之間會進行資料的同步,從而再為Client提供服務。

不過除非有超過一百臺的Linux主機,不然其實一個Server也是沒問題的。

NIS_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

設定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

新增NIS授權

相關的許可權組態檔在/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
  • Host為Client的ip或者網段,用來劃分服務物件的
    • 127.0.0.0/255.255.255.0
  • Domain為NIS域名
    • 一般情況都直接寫*號以用來代表全部
  • Map為可用資料庫
    • 就是由NIS製作出來的資料庫名稱
  • Security為許可權限制
    • 沒有限制(none)、僅能使用<1024 (port)及拒絕(deny)

依據具體情況我們可以這樣寫。

# 本機可以存取全部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

NIS_Client

現在來設定Client。

安裝軟體

和Server不相同,不需要安裝ypserv。

安裝rpcbind、yp-tools、ypbind

# rpm
yum -y install ypbind yp-tools  rpcbind

# 其實我沒有在deb上跑過,不太確定是不是
apt -y install nis

設定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來掛載,具體可以看我主頁的另外一篇文章。