Linux

Linux ksu(kerberized 超級使用者)命令無法使用記憶體的服務(主機)票證

  • December 4, 2017

問題在最後

關於我的環境

我在兩種不同的環境中嘗試過:(i)在 Active Directory(Microsoft)域中註冊的 Linux Ubuntu 16.04LTS 伺服器和(ii)在 FreeIPA 領域中註冊的 Linux Ubuntu 16.04LTS 伺服器。

Krb5 二進製版本:

$ strings libkrb5.so | grep BRAND
KRB5_BRAND: krb5-1.13.2-final 1.13.2 2015050

我喜歡做什麼

我正在嘗試使用ksu命令以另一個使用者身份登錄目前主機(authdemo4.addemo.it ): kservice。具體來說,我正在嘗試(i)為主機authdemo4.addemo.it獲取使用者**kservice的服務票證,(ii)將票證保存在 MIT 記憶體文件*/media/public/krb_kservice和(iii)提供ksu命令的這張票,以便以kservice*身份登錄。

它應該是可能的

ksu MIT 文件指出,可以使用記憶體文件中的服務票證,讓我們引用*:*

否則,ksu 會在源記憶體中查找適當的 Kerberos 票證。票證可以是用於終端伺服器的票證,也可以是用於目標主體領域的票證授予票證 (TGT)。如果終端伺服器的票證已經在記憶體中,它會被解密和驗證。如果它不在記憶體中但 TGT 在,則 TGT 用於獲取端伺服器的票證。然後驗證終端伺服器票證。

我的實驗和結果

當使用 TGT Kerberos 票時.. 它就像一個魅力:

$ kinit -c /media/public/krb_kservice  kservice
Password for kservice@ADDEMO.IT:
$ ksu kservice -n kservice@ADDEMO.IT -c FILE:/media/public/krb_kservice
Authenticated kservice@ADDEMO.IT
Account kservice: authorization for kservice@ADDEMO.IT successful
Changing uid to kservice (50006)
groups: cannot find name for group ID 50024
kservice@authdemo4:/home/userlab$ 

這是記憶體內容,只有 TGT:

$ klist -c /media/public/krb_kservice
Ticket cache: FILE:/media/public/krb_kservice
Default principal: kservice@ADDEMO.IT

Valid starting       Expires              Service principal
11/08/2017 11:44:07  11/08/2017 21:44:07  krbtgt/ADDEMO.IT@ADDEMO.IT
       renew until 11/09/2017 11:44:03

當嘗試使用終端伺服器 Kerberos 票證(服務票證)失敗時,ksu忽略記憶體的票證並詢問使用者密碼:

$ kinit   -S HOST/authdemo4@ADDEMO.IT  -c /media/public/krb_kservice  kservice
Password for kservice@ADDEMO.IT:
$ ksu kservice -n kservice@ADDEMO.IT -c FILE:/media/public/krb_kservice
WARNING: Your password may be exposed if you enter it here and are logged in remotely using an unsecure (non-encrypted) channel.
Kerberos password for kservice@ADDEMO.IT: :

請注意,我已經嘗試了所有這些服務主體:host/authdemo4.addemo.it@ADDEMO.ITHOST/authdemo4.addemo.it@ADDEMO.IThost/authdemo4@ADDEMO.ITHOST/authdemo4@ADDEMO.IT

這是記憶體內容,只有服務票:

$ klist -f -c /media/public/krb_kservice
Ticket cache: FILE:/media/public/krb_kservice
Default principal: kservice@ADDEMO.IT

Valid starting       Expires              Service principal
11/08/2017 13:51:05  11/08/2017 23:51:05  HOST/authdemo4@ADDEMO.IT
       renew until 11/09/2017 13:51:02, Flags: FPRIA

它是 proxiable-forwardable-renewable-initial-preauthenticated 票證。

簡而言之:我對終端伺服器服務票的嘗試不起作用

我通過 Wireshark 檢查了對 DC 的ksu Kerberos 請求,以找出與我請求的服務票證的差異。服務名稱是相同的“ host/authdemo4 ”,ksucanonizable標誌添加到票證中,並在**kinit將請求發送到 AS時向TGS 詢問票證:-(

更新,使用 kvno 命令(失敗)

我用 Wireshark 深入檢查了ksu執行的 TGS 請求/響應,我發現正確的服務是:host/authdemo4@ADDEMO.IT

我嘗試使用kvno將服務票證插入記憶體:

插入 TGT:

$ kinit kservice -c ./prova.cc
Password for kservice@ADDEMO.IT:

插入服務票:

$ kvno host/authdemo4@ADDEMO.IT -c ./prova.cc
host/authdemo4@ADDEMO.IT: kvno = 17

檢查記憶體內容:

$ klist -c ./prova.cc
Ticket cache: FILE:./prova.cc
Default principal: kservice@ADDEMO.IT

Valid starting       Expires              Service principal
11/09/2017 15:18:53  11/10/2017 01:18:53  krbtgt/ADDEMO.IT@ADDEMO.IT
       renew until 11/10/2017 15:18:48
11/09/2017 15:19:07  11/10/2017 01:18:53  host/authdemo4@ADDEMO.IT
       renew until 11/10/2017 15:18:48

呼叫 ksu:

$ ksu kservice -n kservice@ADDEMO.IT -c FILE:./prova.cc
Authenticated kservice@ADDEMO.IT
Account kservice: authorization for kservice@ADDEMO.IT successful
Changing uid to kservice (50006)
groups: cannot find name for group ID 50024

它似乎有效,但它總是忽略服務票證並從頭開始再次執行對主機 / authdemo4****的 TGS 請求。我還檢查了(使用 Wireshark)ksukvno請求的響應之間的差異,->I<- 沒有發現任何差異(見附圖): kvno 和 ksu 的 Kerberos 響應看起來相同 我也嘗試過多次使用ksu而不清除記憶體和每次都會再次執行 TGS 請求。

簡而言之:這種使用終端伺服器服務票證的嘗試不起作用(總是重新請求服務票證)。

問題

它們有點重疊:-)

  • 有沒有辦法用與ksu兼容的服務票證填充 Kerberos 記憶體文件?
  • 為了向 TGS 執行服務票證請求,是否有kvno命令的替代方法?
  • 難道我做錯了什麼?任何提示?
  • 你認為這是一個 ksu 錯誤嗎?:-)

問候

答案

有沒有辦法用與 ksu 兼容的服務票證填充 Kerberos 記憶體文件?

不,因為版本 1.13 ksu沒有利用記憶體的服務票證

為了向 TGS 執行服務票證請求,是否有 kvno 命令的替代方法?

我的搜尋並沒有找到替代品,但之前的答案使這對我來說不那麼重要

難道我做錯了什麼?任何提示?

不,看來我工作正常,問題是改變(未記錄)的 ksu行為

你認為這是一個 ksu 錯誤嗎?:-)

ABOUT YES,這是一個 ksu 錯誤或文件錯誤,開發人員更改了行為但忘記與文件同步

我送出了錯誤報告並獲得了回饋(感謝 ksu 維護者 Greg Hudson 的及時支持)。他們聲明之前的錯誤修復從版本 1.13 更改了 ksu 行為,並且他們沒有註意到/沒有更新文件。

送出的錯誤報告: http: //krbdev.mit.edu/rt/Ticket/Display.html ?id=8619

目前的 ksu 行為不符合文件(關於記憶體中的服務票證)。

在 ksu 版本 >= 1.13情況下,不會從記憶體文件中讀取/驗證端伺服器服務票證,僅驗證記憶體的 TGT。當呼叫 ksu 時,會執行對 TGS 的服務票證請求,以驗證記憶體的 TGT。

此刻,他們還在思考該怎麼做。我建議恢復記錄的行為,我將在未來用他們的最終決定更新這個問題。

更新:他們在錯誤請求中回复並決定恢復記錄的行為,但ksu在 Krb5 項目中不是高優先級,他們不能保證工作的時間表。

引用自:https://serverfault.com/questions/882476