說明:這里是Linux服務綜合搭建文章的一部分,本文可以作為單獨搭建Kerberos和NTP時鍾服務的參考。
注意:這里所有的標題都是根據主要的文章(Linux基礎服務搭建綜合)的順序來做的。
如果需要查看相關軟件版本和主機配置要求,請根據目錄自行查看。
Linux服務綜合搭建的文章目錄
====================================================
5、foundation通過Rsyslog搭建集中日志服務器
8、rhel7 JAVA web環境搭建(使用Tomcat8整合httpd)
10、foundation配置kerberos和NTP服務以及安全的NFS掛載
====================================================
主機角色說明
10、foundation配置kerberos
注意:先搭建好時鍾同步服務器(這里介紹兩種方案,當然,也可以直接使用國內一些現成的時鍾服務器,比如阿里雲的)然后再開始搭建kerberos
10.1一些概念
10.1.1 什么是NTP?
NTP(Network Time Protocol,網絡時間協議)是用來使網絡中的各個計算機時間同步的一種協議。它的用途是把計算機的時鍾同步到世界協調時UTC,其精度在局域網內可達0.1ms,在互聯網上絕大多數的地方其精度可以達到1-50ms。NTP服務器就是利用NTP協議提供時間同步服務的。
10.1.2 為什么要做時間同步?
時間同步有很多好處,這里我們必須讓時間同步的原因就是我們使用的kerberos它依賴時間的准確性。在kerberos官方文檔中有如下的信息:
kerberos官方文檔:https://web.mit.edu/kerberos/krb5-latest/doc/admin/install.html
(雖然是英文,但是技術文檔一般都不會有很難的單詞,實在不行可以使用瀏覽器的翻譯插件看,千萬不要抵觸英文)
同步時鍾最大的好處就是相關系統上日志文件中的數據,如果網絡中使用中央日志主機集中管理日志,
得到的日志結果就更能反映真實情況。在同步了時鍾的網絡中,集中式的性能監控、服務監控系統能實時的反應系統信息,
系統管理員可以快速的檢測和解決系統錯誤。如果時間不同步,很多應用將無法正常運行,
同時大數據系統也是對時間很敏感的,時間同步才能使得大數據處理更加精確。
10.1.3 ntpd、ntpdate和chronyd的區別
ntpd和chronyd都可以作為時間同步服務器,同時ntpd和chronyd不僅僅是時間同步服務器,它還可以做客戶端與標准時間服務器進行同步時間,並且是平滑同步。而ntpdate並是立即同步,並不是平滑同步,在生產環境中慎用ntpdate,也正如此兩者不可同時運行。
ntpdate依賴於NTP服務器的安全,如果ntpdate被攻擊,時間同步則會有問題,並且NTP服務器一旦宕機,跟隨它的服務器也就無法同步,另外使用ntpdate也不夠優雅,它是立即同步,時間是跳變,依賴於時間的應用就會出問題。
所以在這里我們僅僅使用ntpdate來做測試。
10.1.4 kerberos
Kerberos協議主要用於計算機網絡的身份鑒別(Authentication), 它的特點是用戶只需輸入一次身份驗證信息就可以憑借此驗證獲得的票據(ticket-granting ticket)訪問多個服務,即SSO(Single Sign On)。由於在每個Client和Service之間建立了共享密鑰,使得該協議具有相當的安全性。
Kerberos協議分為兩個部分:
1.Client向KDC發送自己的身份信息,KDC從Ticket Granting Service得到TGT(ticket-granting ticket),並用協議開始前Client與KDC之間的密鑰將TGT加密回復給Client。
此時只有真正的Client才能利用它與KDC之間的密鑰將加密后的TGT解密,從而獲得TGT。
(此過程避免了Client直接向KDC發送密碼,以求通過驗證的不安全方式)
2.Client利用之前獲得的TGT向KDC請求其他Service的Ticket,從而通過其他Service的身份鑒別。
用對話場景來解釋kerbeors的設計過程請參考:
https://blog.csdn.net/dog250/article/details/5468741
kerberos認證原理請參考:
https://blog.csdn.net/wulantian/article/details/42418231
kerberos認證簡易流程:這里就不詳解kerberos的原理和搭建設計思路了。
概念補充:
1、principal
認證的主體,簡單來說就是"用戶名"
2、realm
realm有點像編程語言中的namespace。在編程語言中,變量名只有在某個"namespace"里才有意義。同樣的,一個principal只有在某個realm下才有意義。
所以realm可以看成是principal的一個"容器"或者"空間"。相對應的,principal的命名規則是"what_name_you_like@realm"。
在kerberos, 大家都約定成俗用大寫來命名realm, 比如"EXAMPLE.COM"
3、password
某個用戶的密碼,對應於kerberos中的master_key。password可以存在一個keytab文件中。所以kerberos中需要使用密碼的場景都可以用一個keytab作為輸入。
4、credential
credential是“證明某個人確定是他自己/某一種行為的確可以發生”的憑據。在不同的使用場景下, credential的具體含義也略有不同:
對於某個principal個體而言,他的credential就是他的password。
在kerberos認證的環節中,credential就意味着各種各樣的ticket。
10.2 使用ntp搭建NTP時間服務器
10.2.1 安裝軟件包
在我們RHEL7.4的ISO鏡像文件中有ntp的包,所以直接yum安裝即可。
1 [root@foundation ~]# yum install ntp
10.2.2 配置
#簡化配置文件,去掉所有注釋,可以使用egrep -v [root@foundation ~]# grep -v -E "^$|#" /etc/ntp.conf driftfile /var/lib/ntp/drift restrict default nomodify notrap nopeer noquery restrict 172.25.0.55 nomodify notrap nopeer noquery restrict 127.0.0.1 restrict ::1 server 127.127.1.0 fudge 127.127.1.0 stratum 10 includefile /etc/ntp/crypto/pw keys /etc/ntp/keys disable monitor
配置參數的解釋
#以下是配置項的解釋 [root@foundation ~]# cat /etc/ntp.conf # For more information about this file, see the man pages # ntp.conf(5), ntp_acc(5), ntp_auth(5), ntp_clock(5), ntp_misc(5), ntp_mon(5). driftfile /var/lib/ntp/drift #預定義的時間差異分析檔案存放的路徑,一般不作更改 # Permit time synchronization with our time source, but do not # permit the source to query or modify the service on this system. restrict default nomodify notrap nopeer noquery #拒絕IPV4的用戶 #restrict -6 default kod nomodify notrap nopeer noquery #拒絕 IPv6 的用戶 restrict 172.25.0.55 nomodify notrap nopeer noquery #當前節點的IP地址 # Permit all access over the loopback interface. This could # be tightened as well, but to do so would effect some of # the administrative functions. #放行局域網用戶來源,也可以單獨列出IP地址 restrict 172.25.0.0 mask 255.255.255.0 nomodify #一般是局域網中網關的IP或者直接是網段 #單獨列出IP放行主機(上游主機)進入本NTP源的格式如下 restrict 172.25.0.11 #下面的是默認值,放行本機來源 restrict 127.0.0.1 restrict ::1 # Hosts on local network are less restricted. #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # Use public servers from the pool.ntp.org project. # Please consider joining the pool (http://www.pool.ntp.org/join.html). #設置上游主機來源,一般會先注釋掉默認的幾個 #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 172.25.0.77 prefer #加上prefer表示這台主機優先 #默認當上游主機找不到,我們就使用本機的時間作為時間服務 server 127.127.1.0 fudge 127.127.1.0 stratum 10 #broadcast 192.168.1.255 autokey # broadcast server #broadcastclient # broadcast client #broadcast 224.0.1.1 autokey # multicast server #multicastclient 224.0.1.1 # multicast client #manycastserver 239.255.254.254 # manycast server #manycastclient 239.255.254.254 autokey # manycast client # Enable public key cryptography. #crypto includefile /etc/ntp/crypto/pw # Key file containing the keys and key identifiers used when operating # with symmetric key cryptography. keys /etc/ntp/keys # Specify the key identifiers which are trusted. #trustedkey 4 8 42 # Specify the key identifier to use with the ntpdc utility. #requestkey 8 # Specify the key identifier to use with the ntpq utility. #controlkey 8 # Enable writing of statistics records. #statistics clockstats cryptostats loopstats peerstats # Disable the monitoring facility to prevent amplification attacks using ntpdc # monlist command when default restrict does not include the noquery flag. See # CVE-2013-5211 for more details. # Note: Monitoring will not be disabled with the limited restriction flag. disable monitor
restrict [ 客戶端IP ] mask [ IP掩碼 ] [參數]
“客戶端IP” 和 “IP掩碼” 指定了對網絡中哪些范圍的計算機進行控制,如果使用default關鍵字,則表示對所有的計算機進行控制,參數指定了具體的限制內容,常見的參數如下:
◆ ignore:拒絕連接到NTP服務器
◆ nomodiy: 客戶端不能更改服務端的時間參數,但是客戶端可以通過服務端進行網絡校時。
◆ noquery: 不提供客戶端的時間查詢
◆ notrap: 不提供trap遠程登錄功能,trap服務是一種遠程時間日志服務。
◆ notrust: 客戶端除非通過認證,否則該客戶端來源將被視為不信任子網 。
◆ nopeer: 提供時間服務,但不作為對等體。
◆ kod: 向不安全的訪問者發送Kiss-Of-Death報文。
server host [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ] 其中host是上層NTP服務器的IP地址或域名,隨后所跟的參數解釋如下所示: ◆ key: 表示所有發往服務器的報文包含有秘鑰加密的認證信息,n是32位的整數,表示秘鑰號。 ◆ version: 表示發往上層服務器的報文使用的版本號,n默認是3,可以是1或者2。 ◆ prefer: 如果有多個server選項,具有該參數的服務器有限使用。 ◆ mode: 指定數據報文mode字段的值。 ◆ minpoll: 指定與查詢該服務器的最小時間間隔為2的n次方秒,n默認為6,范圍為4-14。 ◆ maxpoll: 指定與查詢該服務器的最大時間間隔為2的n次方秒,n默認為10,范圍為4-14。 ◆ iburst: 當初始同步請求時,采用突發方式接連發送8個報文,時間間隔為2秒
啟動服務並設置服務為自啟動並配置防火牆放行123端口
1 [root@foundation ~]# systemctl restart ntpd 2 [root@foundation ~]# systemctl enable ntpd 3 [root@foundation ~]# firewall-cmd --permanent --add-service=ntp && firewall-cmd --reload 4 [root@foundation ~]# ntpq -p #服務端檢查ntp同步是否正常 5 [root@foundation ~]# netstat -lntup|grep 123 #查看端口監聽情況
注意:ntpq -p 命令在服務端檢查ntp同步是否正常時,一般有輸出不報錯就沒問題的,
但是也可能遇到當所有遠程服務器的jitter值都為4000,並且reach和dalay的值是0時,就表示時間同步有問題。
主要原因有兩個,一是服務端防火牆沒有允許123端口通過,而是NTP服務重啟后和客戶端建立連接一般需要3-5分鍾,
這個時間段可能不會正常同步。(下圖為正常情況,圖中的*LOCAL()表示正在使用本機時間作為NTP的時間服務)。
10.2.3 測試(在rhel7這台主機)
這里我們使用chronyd作為客戶端,也可以使用ntpd作為客戶端
1 [root@rhel7 /]# systemctl restart chronyd 2 [root@rhel7 /]# systemctl enable chronyd 3 [root@rhel7 /]# vim /etc/chrony.conf 4 注釋掉以前的上游服務器地址,然后添加我們的foudation.mei.com主機
注意,剛配置完服務器端,馬上就用chronyc測試,可能會一直同步不到,
當然也可能是之前配置時服務器端忘記了防火牆放行123端口,建議直接使用ntpdate命令來測試。
如果ntpdate測試出現no server suitable for synchronization found錯誤提示,前面防火牆也沒問題,
那么可能是每次重啟ntp服務器之后,大約3-5分鍾客戶端才能與服務端建立連接,
建立連接之后才能進行時間同步,這段時間內可能客戶端確實還沒有和服務端連接,所以就報錯。
出現這種情況稍等片刻再測試就行。
使用ntpdate測試
1 [root@rhel7 ~]# date 2 Mon Jul 8 06:10:22 CST 2019 3 [root@rhel7 ~]# date -s 2017-09-01 4 Fri Sep 1 00:00:00 CST 2017 5 [root@rhel7 ~]# ntpdate 172.25.0.55 #這里是NTP服務器的地址,可以是域名 6 8 Jul 06:10:41 ntpdate[13649]: step time server 172.25.0.55 offset 58342229.655396 sec 7 [root@rhel7 ~]# date #再次獲取時間能夠看到時間已經同步 8 Mon Jul 8 06:21:59 CST 2019
10.3 使用chronyd搭建NTP時間服務器
10.3.1 安裝
因為RHEL7默認安裝了chronyd的,所以我們直接就可以使用了,如果沒有直接yum安裝即可。
10.3.1 配置
直接編輯配置文件如下
[root@foundation ~]# grep -v -E "^$|#" /etc/chrony.conf 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 stratumweight 0 driftfile /var/lib/chrony/drift rtcsync makestep 10 3 allow 172.25.0.0/16 bindcmdaddress 127.0.0.1 bindcmdaddress ::1 bindcmdaddress 172.25.0.55 local stratum 10 keyfile /etc/chrony.keys commandkey 1 generatecommandkey noclientlog logchange 0.5 logdir /var/log/chrony
配置選項(參數)解釋
# 用於添加時鍾服務器,可以添任意多個 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 # Ignore stratum in source selection. # stratumweight指令設置當chronyd從可用源中選擇同步源時,每個層應該添加多少距離到同步距離。默認情況下,設置為0,讓chronyd在選擇源時忽略源的層級。 stratumweight 0 # Record the rate at which the system clock gains/losses time. # chronyd程序的主要行為之一,就是根據實際時間計算出計算機增減時間的比率,將它記錄到一個文件中是最合理的,它會在重啟后為系統時鍾作出補償,甚至可能的話,會從時鍾服務器獲得較好的估值。 driftfile /var/lib/chrony/drift # Enable kernel RTC synchronization. # rtcsync指令將啟用一個內核模式,在該模式中,系統時間每11分鍾會拷貝到實時時鍾(RTC)。 rtcsync # In first three updates step the system clock instead of slew # if the adjustment is larger than 10 seconds. 通常,chronyd將根據需求通過減慢或加速時鍾,使得系統逐步糾正所有時間偏差。在某些特定情況下,系統時鍾可能會漂移過快,導致該調整過程消耗很長的時間來糾正系統時鍾。該指令強制chronyd在調整期大於某個閥值時步進調整系統時鍾,但只有在因為chronyd啟動時間超過指定限制(可使用負值來禁用限制),沒有更多時鍾更新時才生效。 makestep 10 3 # Allow NTP client access from local network. # 這里你可以指定一台主機、子網,或者網絡以允許或拒絕NTP連接到扮演時鍾服務器的機器。 #allow 172.25.0.0/24 #deny 172.25.0.11 # Listen for commands only on localhost. # 該指令允許你限制chronyd監聽哪個網絡接口的命令包(由chronyc執行)。該指令通過cmddeny機制提供了一個除上述限制以外可用的額外的訪問控制等級。 bindcmdaddress 127.0.0.1 bindcmdaddress ::1 # Serve time even if not synchronized to any NTP server. #local stratum 10 keyfile /etc/chrony.keys # Specify the key used as password for chronyc. commandkey 1 # Generate command key if missing. generatecommandkey # Disable logging of client accesses. noclientlog # Send a message to syslog if a clock adjustment is larger than 0.5 seconds. logchange 0.5 logdir /var/log/chrony #log measurements statistics tracking
重啟服務並且防火牆放行123端口通過
1 [root@foundation ~]# systemctl restart chronyd && systemctl enable chronyd 2 [root@foundation ~]# firewall-cmd --permanent --add-service=ntp 3 [root@foundation ~]# firewall-cmd --reload
10.3.2 客戶端配置和測試(在rhel7這台主機)
配置:
在上游服務器的配置參數中添加我們剛才創建的服務器地址,可以是域名,也可以直接是IP地址。
然后測試:
注意,剛配置完服務器端,馬上就用chronyc測試,可能會一直同步不到,當然也可能是之前配置時服務器端忘
記了防火牆放行123端口,建議直接使用ntpdate命令來測試。
如果ntpdate測試出現no server suitable for synchronization found錯誤提示,前面防火牆也沒問題,
那么可能是每次重啟ntp服務器之后,大約3-5分鍾客戶端才能與服務端建立連接,建立連接之后才能進行時間同步,
這段時間內可能客戶端確實還沒有和服務端連接,所以就報錯。
出現這種情況稍等片刻再測試就行。
使用ntpdate測試
1 [root@rhel7 ~]# date 2 Mon Jul 8 06:10:22 CST 2019 3 [root@rhel7 ~]# date -s 2017-09-01 4 Fri Sep 1 00:00:00 CST 2017 5 [root@rhel7 ~]# ntpdate 172.25.0.55 #這里是NTP服務器的地址,可以是域名 6 8 Jul 06:10:41 ntpdate[13649]: step time server 172.25.0.55 offset 58342229.655396 sec 7 [root@rhel7 ~]# date #再次獲取時間能夠看到時間已經同步 8 Mon Jul 8 06:21:59 CST 2019
10.4 kerberos搭建
10.4.1 安裝軟件包
1 [root@foundation ~]# yum install krb5-server krb5-libs krb5-workstation -y
10.4.2 編輯配置文件
配置文件的具體含義和配置參數請直接參考官方文檔(雖然是英文,但是技術文檔一般都不會有很難的單詞
,實在不行可以使用瀏覽器的翻譯插件看,千萬不要抵觸英文)。
https://web.mit.edu/kerberos/krb5-latest/doc/admin/conf_files/index.html
[root@foundation ~]# cat /etc/krb5.conf # Configuration snippets may be placed in this directory as well includedir /etc/krb5.conf.d/ [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 = false # default_realm = EXAMPLE.COM default_realm = MEI.COM default_ccache_name = KEYRING:persistent:%{uid} [realms] # EXAMPLE.COM = { # kdc = kerberos.example.com # admin_server = kerberos.example.com # } MEI.COM = { kdc = foundation.mei.com admin_server = foundation.mei.com } [domain_realm] # .example.com = EXAMPLE.COM # example.com = EXAMPLE.COM .mei.com = MEI.COM
[root@foundation ~]# cat /var/kerberos/krb5kdc/kdc.conf [kdcdefaults] kdc_ports = 88 kdc_tcp_ports = 88 [realms] MEI.COM = { kadmind_port = 749 max_life = 12h 0m 0s max_renewable_life = 7d 0h 0m 0s #master_key_type = aes256-cts #master_key_type = aes256-cts acl_file = /var/kerberos/krb5kdc/kadm5.acl dict_file = /usr/share/dict/words admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal }/var/kerberos/krb5kdc/kadm5.acl
[root@foundation ~]# cat /var/kerberos/krb5kdc/kadm5.acl */admin@MEI.COM *
10.4.3創建數據庫
1 kdb5_util create -s -r MEI.COM #如果有多個realm這樣就很有必要
10.4.4 添加數據庫的管理員
添加database administrator 我們需要為Kerberos database添加administrative principals (即能夠管理database的principals) —— 至少要添加1個principal來使得Kerberos的管理進程kadmind能夠在網絡上與程序kadmin進行通訊。: kadmin.local -q "addprinc admin/admin" 或者: [root@foundation ~]# kadmin.local Authenticating as principal root/admin@MEI.COM with password. kadmin.local: addprinc admin/admin WARNING: no policy specified for admin/admin@MEI.COM; defaulting to no policy Enter password for principal "admin/admin@MEI.COM": Re-enter password for principal "admin/admin@MEI.COM": Principal "admin/admin@MEI.COM" created.
10.4.4 啟動服務並添加防火牆策略
1 [root@foundation ~]# systemctl restart krb5kdc kadmin 2 [root@foundation ~]# systemctl enable krb5kdc kadmin 3 [root@foundation ~]# firewall-cmd --permanent --add-service=kerberos 4 [root@foundation ~]# firewall-cmd --reload
10.4.5 添加principal
使用下面這種語法添加用戶的同時添加密碼(密碼會顯示在命令行輸出中): kadmin.local -q "addprinc -pw <password> <username>" 或者下面這種語法,交互式輸入密碼 kadmin.local -q "addprinc <username>" 再或者交互式添加和設置密碼(建議使用): [root@foundation ~]# kadmin.local Authenticating as principal host/admin@MEI.COM with password. kadmin.local: addprinc host/rhel7 ---中間輸出省略--- 按照此方法依次添加principal: nfs/rhel7 host/rhel6 nfs/rhel6 host/foundation nfs/foundation 后面如果有需要就按上面的方式添加principal即可 #下面為查看KDC的principal(簡單說就是用戶名)配置: kadmin.local: listprincs K/M@MEI.COM admin/admin@MEI.COM host/foundation@MEI.COM host/rhel6@MEI.COM host/rhel7@MEI.COM kadmin/admin@MEI.COM kadmin/changepw@MEI.COM kadmin/foundation@MEI.COM kiprop/foundation@MEI.COM krbtgt/MEI.COM@MEI.COM nfs/foundation@MEI.COM nfs/rhel6@MEI.COM nfs/rhel7@MEI.COM
10.4.6 服務端驗證principal是否添加成功
1 可使用下面命令驗證我們添加的principal,這里只驗證一個作為例子。 2 [root@foundation ~]# kinit host/foundation 3 Password for host/foundation@MEI.COM: 4 [root@foundation ~]#
10.4.7 導出keytab文件並且不修改密碼
kadmin:xst -norandkey -k /path/to/name.keytab <username> 或者: ktadd -norandkey -k /path/to/name.keytab <username> 我們需要導出為某台主機添加的所有相關principal的keytab文件(即host/rhel7和nfs/rhe7) 例如: [root@foundation ~]# kadmin.local Authenticating as principal root/admin@MEI.COM with password. kadmin.local: ktadd -norandkey -k /root/rhel7.keytab host/rhel7 ---輸出信息省略--- kadmin.local: ktadd -norandkey -k /root/rhel7.keytab nfs/rhel7 ---輸出信息省略--- 注意:如果每次導出keytab文件的路徑指向同一個文件,它將自動追加,這也正是我們需要的(讓keytab存儲多個信息)。 查看keytab文件 klist -kt /ptah/to/name.keytab [root@foundation ~]# klist -kt /root/rhel7.keytab Keytab name: FILE:/root/rhel7.keytab KVNO Timestamp Principal ---輸出信息省略---
10.4.6 客戶端配置
1 安裝軟件包: 2 [root@rhel7 ~]# yum install krb5-workstation krb5-libs 3 拷貝服務端的krb5.conf文件替換客戶端的krb5.conf文件,並保持隨時同步。 4 使用scp 等方式拷貝即可。
10.5 配置安全的NFS來測試kerberos
這里我們使用NFS的安全掛載來測試,安全方式使用kerb5p,NFS的搭建和客戶端配置這里就不贅述了,並且這里我們使用前面搭建好的NFS環境即可。
注意,全程要保證時鍾能夠正常同步
10.5.1 NFS配置服務端
1 [root@foundation ~]# mkdir /nfssecure 2 [root@foundation ~]# grep "nfssecure" /etc/exports 3 [root@foundation ~]# vim /etc/sysconfig/nfs
從kerberos導出foudation這台主機相關的keytab文件,放到/etc/目錄下面,並且重命名為krb5.keytab。
1 [root@foundation ~]# systemctl enable nfs-secure 2 3 [root@foundation ~]# systemctl restart nfs-secure
10.5.2 NFS客戶端配置
從kerberos導出客戶端這台主機的相關的keytab文件,放到/etc/目錄下面,並且重命名為krb5.keytab。
編輯/etc/fstab文件
添加如下內容
1 foundation.mei.com:/nfssecure/ /mnt/ nfs defaults,v4.2,sec=krb5p 0 0
然后 mount -a 掛載
10.5.3 kerberos故障排除
掛載過程中可能會遇到下面的問題
1 [root@rhel7 ~]# mount -a 2 mount.nfs: access denied by server while mounting foundation.mei.com:/nfssecure/
排除故障的思路:
1、使用kinit -kt /path/to/name.keytab <username> 確認能不能初始化
2、如果不能初始化,看服務端krb5kdc kdamin服務是否啟動,防火牆是否允許kerberos通過;
3、在防火牆和服務都沒有問題的情況下看/var/log/krb5kdc.log 里面的錯誤日志信息。
4、下面是查看日志排錯過程:
[root@foundation ~]# tail -f /var/log/krb5kdc.log #實時查看錯誤日志信息
然后在客戶端執行mount -a
返回到foundation看剛才的實時日志,這里我的錯誤如下:
Jul 09 19:05:26 foundation krb5kdc[11244](info): TGS_REQ (4 etypes {18 17 16 23}) 172.25.0.15: LOOKING_UP_SERVER: authtime 0, host/rhel7@MEI.COM for nfs/www.mei.com@MEI.COM, Server not found in Kerberos database
顯然,客戶端在認證是它要驗證的是nfs/www.mei.com@MEI.COM,而我們的kerberos數據庫中確實沒有,
這里我們直接使用kadmin.local命令添加一個這樣的用戶,然后導出它的keytab文件並追加到之前導出
的foundation相關的keytab文件中即可,注意,這里指的追加是指導出時直接指定同一個文件,而不是控制台的追加重定向。
10.6 kerberos相關的一些命令介紹
服務端可以使用kadmin.local直接登錄kerberos交互式進行管理,能補全,也可以非交互式的方式管理,但不能補全。 1、生成keytab:使用xst命令或者ktadd命令 不加/path/to/name.keytab(路徑)和-k參數就存儲到/etc/krb5.keytab kadmin:xst -k /path/to/name.keytab username 或者 kadmin.local -q "ktadd -norandkey -k /path/to/name.keytab <username>" 2、查看當前的認證用戶 klist 3、刪除當前的認證的緩存 kdestroy 4、驗證用戶 kinit -kt /path/to/name.keytab username #使用keytab文件加用戶名 kinit username #直接使用用戶名驗證 5、創建principal kadmin.local -q "addprinc -pw <password> <username>" 或者: kadmin.local -q "addprinc <username>" 6、查詢keytab文件內容 klist -kt /path/to/name.keytab 7、查詢KDC用戶列表 kadmin.local: listprincs 8、刪除用戶 kadmin.local -q "delprinc -force <username>" 9、修改密碼 kpasswd 用戶名 10、klist命令 klist 命令顯示 Kerberos 憑證高速緩存或密鑰表的內容。具體可以看man幫助 12、kadmin.local命令 具體可以看幫助或者shell執行kadmin.local然后進入后輸入問號,能夠顯示命令的用法。
最后希望大家提意見、轉發、評論和交流!!!