目錄
NIS
一、簡介
1.1NIS的產生
正所謂有需求纔會有產品,有問題纔會有方法去解決,那麼NIS是怎麼產生的呢?
在一個大型的網域中,如果有多部Linux主機,而且需要每臺主機都設定相同的帳號與密碼時,是十分麻煩的。此時,如果能夠有一臺NIS主控制服務器(master server)來管理該網域中所有主機的帳號密碼,當其他的主機有用戶登錄的需求時,纔到這臺服務器上請求相關的帳號密碼等使用者資料,這樣一來,如果想要增加、修改、刪除用戶的資料,只需要到這臺服務器上面處理即可,這樣就能夠大大降低重複設定用戶帳號密碼的步驟,便於管理。NIS(Network Information Services) Server就可以實現這樣的功能。
1.2什麼是NIS?
網絡信息服務(Network Information Service)是集中控制幾個系統管理數據庫的網絡用品。NIS簡化了UNIX和LINUX桌面客戶的管理工作,客戶端利用它可以使用中心服務器的管理文件。桌面系統的用戶無需建立他們自己的/etc/passwd,他們只簡單的使用維護在NIS服務器的文件即可。用戶只需要在nis服務器上面創建,客戶端加入nis域,直接可以使用Nis域上的用戶來登錄客戶端。
二、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 服務器所提供的數據庫 |
/etc/netgroup |
網絡羣組的定義與使用 |
2.1服務端
2.1.1配置文件
配置文件名 |
文件內容 |
/etc/ypserv.conf |
這是最主要的 ypserv 軟件所提供的配置文件,可以規範 NIS 客戶端是否可登入的權限。 |
/etc/hosts |
由於 NIS server/client 會用到網絡主機名與IP的對應,因此這個主機名對應檔就顯的相當重要!每一部主機名與 IP 都需要記錄才行! |
/etc/netgroup |
提供組數據及GID的對應。 |
/etc/sysconfig/network |
可以在這個檔案內指定 NIS 的網域 (nisdomainname)。 |
/var/yp/Makefile |
這就是與建立數據庫有關的動作配置文件; |
2.1.2主要服務
主要服務名 |
功能 |
/usr/sbin/ypserv |
就是 NIS 服務器的主要提供服務 |
/usr/sbin/rpc.ypxfrd |
用於Master/Slave主機之間的傳輸數據庫的服務。 |
/usr/sbin/rpc.yppasswd |
提供額外的 NIS 客戶端之用戶密碼修改服務, 通過這個服務, NIS 客戶端可以直接修改在 NIS 服務器上的密碼。相關的使用程序則是 yppasswd 指令;(修改密碼時,NIS客戶端與NIS服務器端之前通過這個服務來通信) |
2.1.3數據庫相關指令
相關指令位置 |
功能 |
/usr/lib64/yp/ypinit |
建立數據庫的指令,非常常用 (在 32 位的系統下,文件名則是 /usr/lib/yp/ypinit ); |
/usr/sbin/yppush |
master 主機將數據庫直接送至 slave 的指令; |
/usr/lib/yp/ypxfr |
傳送數據庫的指令,在該目錄下尚有 ypxfr_1perday, ypxfr_1perhour, ypxfr_2perday 等等。 |
2.2客戶端
2.2.1配置文件
配置文件名 |
文件內容 |
/etc/hosts |
主機名與IP地址對應關係 |
/etc/yp.conf |
ypbind的主要配置文件,設定NIS Server |
/etc/nsswitch.conf |
重要的配置文件,設定帳號密碼等信息 |
/var/yp/Makefile |
與建立資料庫有關的配置文件的查詢順序 |
2.2.2主要指令
相關指令名 |
功能 |
/usr/bin/yppasswd |
更改客戶端登錄用戶在NIS服務器上的密碼 |
/usr/bin/ypchsh |
更改客戶端登錄用戶默認登錄shell |
/usr/bin/ypchfn |
更改客戶端登錄用戶的finger信息 |
三、NIS環境
3.1 NIS所需的軟件包
- yp-tools :提供 NIS 相關的查尋指令功能
- ypbind :提供 NIS Client 端的設定軟件
- ypserv :提供 NIS Server 端的設定軟件
- portmap :這是 RPC必須的軟件!
什麼是RPC?請點這裏
相關端口:portmap :111,因爲NIS、NFS 都是依賴於portmap服務 6.0/7.0 版本用rpcbind取代portmap服務
相關包:ypserv(NIS服務器必需的),ypbind(NIS客戶端必需的,默認已安裝),yp-tools(NIS的常用工具,默認已安裝)
3.2 NIS Server (Master/Slave)
NIS服務器包括主從服務器兩種,從的作用就是備份,即當主服務器出現故障後,從能直接使用
主(Master):將文件建成數據庫,並提供給Slave來更新;
從(Slave):以Master的數據庫作爲本身的數據庫來源;
詳細:
1. Master先將帳號密碼相關文件製作成數據庫文件;
2. Master可以主動告訴Slave來更新;
3. Slave亦可以主動前往Master取得更新;
4.若有帳號密碼變動時,需要重新制作數據庫文件並重新同步Master/Slave。
3.3 NIS Client
1.NIS client 若有登入需求時,會先查詢其本的 /etc/passwd, /etc/shadow 等檔案;
2.若在 NIS Client 本機找不到相關的賬號數據,纔開始向整個 NIS 網域的主機廣播查詢.
3.每個 NIS server (不論 master/slave) 都可以響應,基本上是『先響應者優先』。
四、搭建NIS
4.1服務器端
1.安裝ypserv服務相關的包
2、建立一個Nis專用用戶目錄文件夾
3、建立多個NIS用戶,併爲其配置密碼
4、標明NIS服務器,並啓動ypserv服務
a.編輯/etc/sysconfig/network爲NIS服務器指定NIS網域名,,可以不用寫www這個主機名,直接聲明成二級域名也行。
b. 使當前主機識別NIS域名 當前生效,重啓後不生效; 若要開機自動生效(永久生效),進入這個配置文件(開機就會運行這個配置文件),當然還是需要輸入nisdomainname www.example.com來使當前主機識別NIS域名
5.將服務器上的用戶文件加載成數據庫文件(該服務器上的所有用戶名都將用作客戶端身份認證),先關閉防火牆,開啓ypserv服務後加載數據庫
注意,每次添加用戶之後,都需要重新生成nis數據庫
備註:提示輸入NIS服務器主機名,有多個可以輸入多個,按Y確認。
配置完以上命令後在/var/yp下檢查有沒有生成一個NIS域名命名的目錄,這是NIS用戶數據庫,如果沒有則刪除該目錄下的’”(none)”目錄,再重新生成數據庫。
[root@NIS-Server ~]# yum install ypserv -y
[root@NIS-Server ~]# mkdir /nishome
[root@NIS-Server ~]# useradd -d /nishome/user1 user1
[root@NIS-Server /]# useradd -d /nishome/user2 user2
[root@NIS-Server /]# useradd -d /nishome/user3 user3
[root@NIS-Server /]# useradd -d /nishome/user4 user4
[root@NIS-Server user1]# echo 123123 | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@NIS-Server /]# echo 123123 | passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.
[root@NIS-Server /]# echo 123123 | passwd --stdin user3
Changing password for user user3.
passwd: all authentication tokens updated successfully.
[root@NIS-Server /]# echo 123123 | passwd --stdin user4
Changing password for user user4.
passwd: all authentication tokens updated successfully.
[root@NIS-Server /]# vim /etc/sysconfig/network
[root@NIS-Server /]# cat /etc/sysconfig/network
# Created by anaconda
nisdomain=www.example.com
[root@NIS-Server /]# nisdomainname www.example.com
[root@NIS-Server /]# nisdomainname
www.example.com
[root@NIS-Server /]# systemctl stop firewalld
[root@NIS-Server /]# setenforce 0
[root@NIS-Server /]# systemctl start ypserv.service
[root@NIS-Server /]# systemctl status ypserv.service
● ypserv.service - NIS/YP (Network Information Service) Server
Loaded: loaded (/usr/lib/systemd/system/ypserv.service; disabled; vendor preset: disabled)
Active: active (running) since Wed 2020-05-06 12:17:08 ULAST; 5s ago
Main PID: 6862 (ypserv)
Status: "Processing requests..."
CGroup: /system.slice/ypserv.service
└─6862 /usr/sbin/ypserv -f
May 06 12:17:08 NIS-Server systemd[1]: Starting NIS/YP (Network Information Service) Server...
May 06 12:17:08 NIS-Server ypserv[6862]: WARNING: no securenets file found!
May 06 12:17:08 NIS-Server systemd[1]: Started NIS/YP (Network Information Service) Server.
[root@NIS-Server /]# /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS
servers. NIS-Server 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: NIS-Server
next host to add:
The current list of NIS servers looks like this:
NIS-Server
Is this correct? [y/n: y] y
We need a few minutes to build the databases...
Building /var/yp/www.example.com/ypservers...
gethostbyname(): Success
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/www.example.com'
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/www.example.com'
NIS-Server has been set up as a NIS master server.
Now you can run ypinit -s NIS-Server on all slave server.
4.2客戶端
1.裝包,ypbind(NIS客戶端必需的,默認已安裝),yp-tools(NIS的常用工具,默認已安裝),安裝ypbind時,也把yp tools安裝了
2.利用setup進入圖形化界面
a)驗證配置
b)使用nis
c)標明nis域
[root@NIF-Client ~]# yum install ypbind -y
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package ypbind.x86_64 3:1.37.1-7.el7 will be installed
--> Processing Dependency: yp-tools for package: 3:ypbind-1.37.1-7.el7.x86_64
--> Running transaction check
---> Package yp-tools.x86_64 0:2.14-3.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===================================================================================================================
Package Arch Version Repository Size
===================================================================================================================
Installing:
ypbind x86_64 3:1.37.1-7.el7 base 62 k
Installing for dependencies:
yp-tools x86_64 2.14-3.el7 base 79 k
Transaction Summary
===================================================================================================================
Install 1 Package (+1 Dependent package)
Total download size: 141 k
Installed size: 299 k
Downloading packages:
-------------------------------------------------------------------------------------------------------------------
Total 1.5 MB/s | 141 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : 3:ypbind-1.37.1-7.el7.x86_64 1/2
Installing : yp-tools-2.14-3.el7.x86_64 2/2
base/productid | 1.6 kB 00:00:00
Verifying : yp-tools-2.14-3.el7.x86_64 1/2
Verifying : 3:ypbind-1.37.1-7.el7.x86_64 2/2
Installed:
ypbind.x86_64 3:1.37.1-7.el7
Dependency Installed:
yp-tools.x86_64 0:2.14-3.el7
Complete!
[root@NIF-Client ~]#
[root@NIF-Client ~]# setup
4.3驗證測試:
客戶端本地並沒有user1這個用戶,但是id一下卻能查詢出來uid、gid等信息,這是因爲NFS環境下的客戶端查詢用戶的方式是
1.NIS client 若有登入需求時,會先查詢其本的 /etc/passwd, /etc/shadow 等檔案;
2.若在 NIS Client 本機找不到相關的賬號數據,纔開始向整個 NIS 網域的主機廣播查詢.
3.每個 NIS server (不論 master/slave) 都可以響應,基本上是『先響應者優先』。
客戶端切換進NIS域用戶,不能正常顯示是因爲沒有服務器的這三個隱藏文件
[root@NIF-Client ~]# su - user1
su: warning: cannot change directory to /nishome/user1: No such file or directory
-bash-4.2$ whoami
user1
-bash-4.2$
解決:
使用NFS將服務端的nishome目錄共享出去,在客戶端將NFS的服務端共享的目錄掛載到本地即可,這裏我採用自動掛載
- 服務端開啓NFS,並共享/nishome目錄
- 客戶端安裝autofs包,使用通配符的方式,將服務端的nishome下的用戶都掛載到客戶端
服務端的NFS服務的配置
[root@NIS-Server ~]# systemctl stop firewalld
[root@NIS-Server ~]# setenforce 0
[root@NIS-Server ~]# systemctl start nfs
[root@NIS-Server ~]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since Wed 2020-05-06 12:46:26 ULAST; 7s ago
Process: 7803 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 7802 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 7803 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nfs-server.service
May 06 12:46:25 NIS-Server systemd[1]: Starting NFS server and services...
May 06 12:46:26 NIS-Server systemd[1]: Started NFS server and services.
[root@NIS-Server ~]# vim /etc/exports
[root@NIS-Server ~]# cat /etc/exports
/nishome *(ro)
[root@NIS-Server ~]# exportfs -rv
exporting *:/nishome
[root@NIS-Server ~]# showmount -e
clnt_create: RPC: Unknown host
[root@NIS-Server ~]# showmount -e 192.168.211.133
Export list for 192.168.211.133:
/nishome *
[root@NIS-Server ~]#
客戶端的NFS服務的掛載配置
第一步 裝包
第二步 在autofs的主配置文件中定義掛載點根目錄的子配置文件
第三步 配置子配置文件(掛載點目錄,觸發目錄,即需要的時候自動掛載產生),這裏利用通配符的方式,將服務器端對應的用戶掛載到客戶端的通配符(用戶名都是相同的)用戶上;重啓服務
[root@NIF-Client ~]# systemctl stop firewalld
[root@NIF-Client ~]# setenforce 0
[root@NIF-Client ~]# systemctl start autofs
[root@NIF-Client ~]# vim /etc/auto.master
/home /etc/auto.nis
[root@NIF-Client ~]# vim /etc/auto.nis
[root@NIF-Client ~]# cat /etc/auto.nis
* -fstype=nfs 192.168.211.133:/nishome/&
[root@NIF-Client ~]# systemctl restart autofs
驗證查看:
由於是自動掛載,即需要觸發掛載點目錄纔會生成文件目錄,所以沒有觸發時是沒有文件目錄的,如下
現在開始觸發服務端共享的/nishome目錄下的user1目錄,權限被拒絕是因爲服務端的這個文件對於其他用戶是沒有執行操作的,注意,這裏是目錄權限的拒絕,並不是文件系統層的拒絕
解決:
在服務端更改/nishome目錄的權限
現在去客戶端觸發掛載點目錄,可見是可以成功的,隱藏文件也被共享了過來,現在客戶端就可以正常的在本地去切換NIS域中的用戶了