1. 程式人生 > >CentOS 7 設定Kerberos 認證的NFS共享

CentOS 7 設定Kerberos 認證的NFS共享

Kerberos 認證的NFS共享

RHCE 考試其中有一道題是需要配置kerberos 認證的nfs 檔案共享,設定nfs共享比較簡單,但是keberos伺服器的設定雖然不在考點之內,確是需要完成這個實驗搭建的重要一環,其實通過幾天的資料查詢和試驗,我發現kerberos的搭建過程並不是很複雜,但是也遇到了一些讓人抓耳撓腮的bug, 所以這裡將整個過程跟大家分享一下,本文使用的OS版本為 RHEL 7.0, 有問題的地方也請批評指正。

試驗的環境共有三臺虛擬機器構成,其名稱和IP 配置如下:
- Kerberos 伺服器:
hostname : remote.exmaple.com
IP: 192.168.57.2
- NFS 伺服器:


hostname :server.exmaple.com
IP: 192.168.57.3
- 客戶端:
hostname : client.exmaple.com
IP: 192.168.57.204

Kerberos 伺服器端設定

1.安裝軟體

yum -y install krb5-server krb5-workstation 

2.編輯 /etc/krb5.conf 檔案, 取消註釋所有行,並替換kdc, admin server的設定,這裡用default realm EXAMPLE.COM , 最後配置檔案如下:

[logging]
 default = FILE:/var/log/krb5libs.log
 kdc = FILE:/var/log/krb5kdc.log
 admin_server = FILE:/var/log/kadmind.log

[libdefaults]
 dns_lookup_realm = false
ticket_lifetime = 24h renew_lifetime = 7d forwardable = true rdns = falsei default_realm = EXAMPLE.COM default_ccache_name = KEYRING:persistent:%{uid} [realms] EXAMPLE.COM = { kdc = remote.example.com admin_server = remote.example.com } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM

3. 修改 /etc/hosts 檔案

192.168.57.3 server.example.com remote
192.168.57.2 remote.example.com server
192.168.57.204 client.example.com client

4.修改 /var/kerberos/krb5kdc/kdc.conf 檔案
由於我們使用default realm 所以無需修改此檔案,若用另外的realm,需替換此檔案中的EXAMPLE.COM

5. 執行命令以下命令建立資料庫,並按照提示設定資料庫密碼

[[email protected] ~]# kdb5_util create  -s
Loading random data
Initializing database '/var/kerberos/krb5kdc/principal' for realm 'EXAMPLE.COM',
master key name 'K/[email protected]'
You will be prompted for the database Master Password.
It is important that you NOT FORGET this password.
Enter KDC database master key:

6. 啟動kerberos

 systemctl start kerberos  kadmin 
 systemctl enable kerberos kadmin 

7. 允許防火牆

firewall-cmd  --permanent  --add-service=kerberos
firewall-cmd --reload 

8. 執行kadmin.local 來管理kdc 並新增nfs server 和 client的 主機資訊

[[email protected] ~]# kadmin.local
Authenticating as principal root/[email protected] with password.
kadmin.local:  addprinc -randkey host/server.example.com
WARNING: no policy specified for host/[email protected]; defaulting to no policy
Principal "host/[email protected]" created.
kadmin.local:  addprinc -randkey host/client.example.com
WARNING: no policy specified for host/[email protected]; defaulting to no policy
Principal "host/[email protected]" created.

9. 新增nfs server 和 client的 nfs 服務主機和客戶端

kadmin.local:  addprinc -randkey nfs/server.example.com
WARNING: no policy specified for nfs/[email protected]; defaulting to no policy
Principal "nfs/[email protected]" created.
kadmin.local:  addprinc -randkey nfs/client.example.com
WARNING: no policy specified for nfs/[email protected]; defaulting to no policy
Principal "nfs/[email protected]" created.

10. 執行 listprincs 來檢查kdc設定

kadmin.local:  listprincs
K/[email protected]
host/[email protected]
host/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
krbtgt/[email protected]
nfs/[email protected]
nfs/[email protected]
[[email protected] ~]#

11. 為伺服器和客戶端生成各自的祕鑰檔案,並儲存在/tmp資料夾下, quit退出 kadmin

kadmin.local:  ktadd -k /tmp/server.keytab nfs/server.example.com
[以下省略輸出]
kadmin.local:  ktadd -k /tmp/client.keytab nfs/client.example.com
[以下省略輸出]
kadmin.local:  quit

12. 配置時間伺服器
為了保證kerberos 認證能夠進行,需要在三臺裝置統一時間, 現在設定kdc 為ntp server, 另外兩臺同步kdc的時間。
- 安裝npt服務

 yum -y install ntp 
  • 配置 npt服務 /etc/ntp.conf
    第15行新增:

    restrict 192.168.57.0 mask 255.255.255.0 
    

    21 行到26行,設定伺服器為自己:

    #server 0.rhel.pool.ntp.org iburst
    #server 1.rhel.pool.ntp.org iburst
    #server 2.rhel.pool.ntp.org iburst
    #server 3.rhel.pool.ntp.org iburst
    server 127.127.1.0
    fudge 127.127.1.0 stratum 11
    
  • 啟動ntp並開機啟動

    systemctl restart ntpd
    systemctl enable ntpd
    

NFS 伺服器端設定

1. 安裝軟體

 yum -y install nfs-utils krb5-workstation pam_krb5

2.編輯/etc/hosts檔案,新增三臺裝置的dns資訊

192.168.57.3 server.example.com remote
192.168.57.2 remote.example.com server
192.168.57.204 client.example.com client

3. 從kdc伺服器拷貝配置檔案和keytab祕鑰檔案並儲存在/etc目錄下

 scp remote:/etc/krb5.conf /etc/krb5.conf   
 scp remote:/tmp/server.keytab /etc/krb5.keytab 

4.設立共享目錄 /nfs1

 mkdir /nfs1 

5. 編輯/etc/exports 檔案如下

 /nfs1  *.example.com(ro,sec=krb5p) 

6. 修改 /etc/sysconfig/nfs, 第13行的位置以下條目新增 -V 4.2

 RPCNFSDARGS="-V 4.2" 

7. 開啟nfs,nfs-secure並設為開機啟動

systemctl restart nfs nfs-secure 
systemctl enable nfs nfs-secure 

8. 設定防火牆

 firewall-cmd  --permanent  --add-service=kerberos
 firewall-cmd --reload 

9. 設定時間同步

  • 安裝chrony

    yun -y install chrony
    
  • 配置 /etc/chrony.conf
    第3行到第7行 修改設定kdc為ntp伺服器

    #server 0.rhel.pool.ntp.org iburst
    #server 1.rhel.pool.ntp.org iburst
    #server 2.rhel.pool.ntp.org iburst
    #server 3.rhel.pool.ntp.org iburst
    server 192.168.57.2 iburst
    
  • 啟動/開機啟動chronyd

    systemctl restart chronyd
    
  • 檢視同步狀態, 顯示 NTP synchronized: yes 表示同步成功
    時間同步肯能需要幾分鐘的時間,這裡可能要等待以下。

    timedatectl status
    

NFS 客戶端設定

1. 安裝軟體

 yum -y install nfs-utils krb5-workstation pam_krb5

2.編輯/etc/hosts檔案,新增三臺裝置的dns資訊

192.168.57.3 server.example.com remote
192.168.57.2 remote.example.com server
192.168.57.204 client.example.com client

3. 從kdc伺服器拷貝配置檔案和keytab祕鑰檔案並儲存在/etc目錄下

scp remote:/etc/krb5.conf /etc/krb5.conf    
scp remote:/tmp/client.keytab /etc/krb5.keytab 

4. 建立掛載點/mnt/nfs1

mkdir /mnt/nfs1 

5.編輯/etc/fstab 檔案實現自動掛載

 remote:/nfs1 /mnt/nfs1 nfs defaults,v4.2,sec=krb5p 0 0 

6.啟動 nfs-secure ,這裡注意nfs-server這個服務不要啟動,否則可能掛載不了

 systemctl restart nfs-secure
mount -a

常見問題及注意事項

1.注意事項

  • 防火牆的新增,建議三臺虛擬機器firewall新增kerberos, nfs服務
  • NFS server 端啟用 nfs-secure 和nfs-server , 客戶端只啟用 nfs-secure
  • 注意 /etc/hosts 檔案的設定,三臺虛擬機器都需要設定且保障長名字在前面,例如 remote.example.com 在remote的前面

     192.168.57.2 remoete.example.com remote 
    
  • 檢視日誌資訊:
    kdc 日誌: /var/log/krb5kdc.log
    nfs server和client的日誌顯示在: /var/log/messages

2.常見問題

nfs client 報錯: No such file or directory
mount.nfs: mounting remote:/nfs1 failed, reason given by server: No such file or directo
ry

Debug方法

  • 確認/nfs1共享目錄確實存在
  • 修改nfs server的共享設定(/etc/exports)為如下

         /nfs1  *(ro,sync,sec=krb5p) 
    

    重新mount 客戶端,如果問題解決,可能是域名解析錯誤或此處填寫錯誤。

nfs client 報錯: access denied

mount.nfs: access denied by server while mounting remote:/nfs1
Debug方法

  • 檢視 NFS server端日誌,若顯示:
Aug 24 07:54:32 remote rpc.svcgssd[5833]: ERROR: GSS-API: error in handle_nullreq: 
gss_accept_sec_context(): GSS_S_FAILURE (Unspecified GSS failure.  
Minor code may provide more information) - Ticket not yet valid

或者

Aug 24 12:43:37 remote rpc.svcgssd[5833]: ERROR: GSS-API: error in handle_nullreq: 
gss_accept_sec_context(): GSS_S_FAILURE (Unspecified GSS failure.  
Minor code may provide more information) - Key table file '/etc/krb5.keytab' not found

是由於NFS Server端的keytab檔案有問題,請根據前文介紹重新拷貝keytab檔案

nfs client 報錯: access denied 且nfs server端無報錯
mount.nfs: access denied by server while mounting remote:/nfs1
Debug方法

  • 檢視kdc伺服器的日誌 /var/log/krb5kdc.log
    正常情況應有類似以下輸出:

    Aug 25 00:23:45 remote.example.com krb5kdc[3464](info): TGS_REQ (6 etypes {18 17 16 23 25 26}) 
    192.168.57.204: ISSUE: authtime 1535127825, etypes {rep=18 tkt=18 ses=18}, nfs/[email protected] for nfs/[email protected]

    nfs client 報錯: access denied 且nfs server端無報錯並且kdc日誌顯示正常
    mount.nfs: access denied by server while mounting remote:/nfs1
    這個Bug也是困擾了我三天的bug,確實很難Debug,嘗試了各種方法仍找不到原因,因為原因出現在一個很容易被忽略的細節.
    Debug方法

    • 重新命名NFS server端的keytab檔案

      mv /etc/krb5.keytab /etc/krb5.keytab.bak
      這一步是強迫NFS server報錯,無keytab檔案,如果此時仍無報錯(我遇到的情況),(最後才意識到)由於這個報錯是由rpc.svcgssd 這個服務產生的,如上文所示。如果沒有報錯那原因是因為rpc.svcgssd 沒有啟動, 至於為什麼沒有啟動我也沒有弄清楚。進一步確認的話可以執行命令:

      ps -aux | grep rpc.svcgssd
      

      輸出應該有以下一行:

      root      5833  0.0  0.4  46752  4676 ?        Ss   Aug24   0:00 /usr/sbin/rpc.svcgssd

      如果沒有執行以下命令開啟:

    /usr/sbin/rpc.svcgssd

    nfs客戶端重新 mount, 這下應該可以從nfs server看到久違的報錯資訊了。

相關推薦

CentOS 7 設定Kerberos 認證NFS共享

Kerberos 認證的NFS共享 RHCE 考試其中有一道題是需要配置kerberos 認證的nfs 檔案共享,設定nfs共享比較簡單,但是keberos伺服器的設定雖然不在考點之內,確是需要完成這個實驗搭建的重要一環,其實通過幾天的資料查詢和試驗,我發現k

Centos 7設定默認運行級別

centos 7設定默認運行級別Centos 7設定默認運行級別Centos7 中不再是使用 /etc/inittab 來配置運行級別,而是使用 systemd 來進行管理[[email protected]/* */ ~]# ll /lib/systemd/system/runlevel3.ta

centos 7設定limit,不生效問題

1:記錄未修改之前的ulimit值   [[email protected] ~]# ulimit -a   2:修改配置檔案 vim  /etc/security/limits.conf   在後面新增 *    &

CentOS 7設定iptables

CentOS 7預設使用的是firewall作為防火牆,使用iptables必須重新設定一下 1.接關閉防火牆systemctl stop firewalld.service           #停止firewall sy

CentOS 7 設定 svn 開機啟動

出處 安裝好 svn 服務後,預設是沒有隨系統啟動自動啟動的, CentOS 7 的 /etc/rc.d/rc.local 是沒有執行許可權的, 系統建議建立 systemd service 啟動服務 於是檢視 systemd 裡 svn 的配置檔案 /lib/systemd/system/

CentOS 7設定靜態ip

1) Linux網路配置 # vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 TYPE=Ethernet BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=

Centos 7 設定ip地址

(一)動態獲取ip:前提是路由器已經開啟了DHCP (1)修改網絡卡配置檔案/etc/sysconfig/network-scripts/ifcfg-ens33 (最後一個為網絡卡名稱): BOOTPROTO=dhcp ONBOOT=yes (2)重啟網路服務 systemctl re

CentOS 7設定開機CLI模式

systemctl get-default //檢視當前模式,預設是5 cat /etc/inittab //檢視3、5模式對應的名稱 multi-user.target: analogous to runlevel 3 graphical.target

Centos 7 squid 使用者認證

一、安裝安裝過程十分簡便,只需要安裝一下squid,一條命令搞定yum install squidrpm -qa | grep squidsquid-3.5.20-2.el7_3.2.x86_64 二、配置修改squid的配置檔案 /etc/squid/squid.conf主要就是配置一下埠,快取,日誌和訪

Centos 7 設定 SFTP

近期要給伺服器設定一個SFTP使用者,可以上傳刪除修改的SFTP,但是禁止該使用者SSH登入。這裡記錄下來 先升級 yum update fox.風 建立使用者組 sftp 使用者組名為sftp groupadd sftp 建立

CentOS 7設定ssh服務自動啟動

實驗環境:CentOS7 Minimal安裝,安裝過程及軟體包見http://blog.csdn.net/capricorn90/article/details/52556174 SSH的英文全稱是Secure SHell。通過使用SSH,你可以把所有傳輸的資

Centos 7 設定系統預設執行級別

1. 執行級別表如下:init級別systemctl target0shutdown.target1emergency.target2rescure.target3multi-user.target4無5graphical.target6無2. 設定預設執行級別,例如:   

CentOS 7設定開機啟動服務,新增自定義系統服務

CentOS 7設定開機啟動服務 建立服務檔案 儲存目錄 設定開機自啟動 其他命令 1.建立服務檔案 檔案路徑 vim /usr/lib/systemd/system/nginx.service 服務檔案內容 1.nginx.servi

linux(centos) 7 設定執行模式

發現熟悉的/etc/inittab中沒有了修改預設執行級別,開啟inittab如下 [root@localhost init.d]# vi /etc/inittab  # inittab is no longer used when using systemd. #

[CentOS 7系列]使用密鑰認證機制遠程登錄

private 用戶名 輸入密碼 服務器 操作系統 當服務器操作系統沒有配置遠程密鑰認證時,默認需要手動輸入密碼口令。以下用putty為例:1、使用putty遠程ssh登錄192.168.137.100這臺主機2、第一次登錄選擇“是(Y)”,信任該主機,緩存該主機登錄信息。3、登錄時,要輸

CentOS 7中一些參數的設定

linux1、設置時區timedatectl list-timezones #列出所有時區 timedatectl set-local-rtc 1 #將硬件時鐘調整為與本地時鐘一致,0為設置為UTC時間 timedatectl set-timezone Asia/Shan

CentOS 7 使用Google-Authenticator進行多因素認證

linux centos mfa 多因素認證什麽是多因素認證(Multi-Factor Authentication, MFA)? MFA,顧名思義使用多種獨立的驗證機制,對用戶進行身份驗證,只有全部通過時才能授權訪問。MFA的目的是建立一個多層次的防禦,使未經授權的人訪問計算機系統或網絡更加困難。驗證機制可

CentOS 7 使用PuTTY、Xshell遠程連接和密鑰認證登錄

linux 教程 1.9 使用PuTTY遠程連接Linux下載putty客戶端,可以直接訪問https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html這個鏈接進行下載選擇網頁的 Package files 下面的 MSI(‘Window

VirtualBox 下 CentOS 7.2 設置共享文件夾

服務器 centos7 kernel jdk emctl sha ons vbox 軟件 安裝virtualBox工具包 virtualBox有如下功能: 共享文件 共享剪貼板內容 無縫窗口 – 實現虛擬機和主機間的鼠標平滑移動 自動登錄 目前要安裝一些軟件,主要需要用

CentOS 7.3 NFS服務器的安裝與配置

nfs nfs服務器 nfs配置 nfs安裝 nfs server 一、NFS服務簡介? ? ? ?NFS 是Network File System的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由Sun公司開發,於1984年向外公布。功能是通過網絡讓不同的機器、不同的操作系統能夠