Linux iSCSI CHAP 身分驗證

Loading

iSCSI 除了指定 IP 做 ACL https://benjr.tw/15652 ,還可以透過 user / password CHAP (Challenge Handshake Authentication Protocol) 使用 MD5 的加密驗證做身分驗證.

CHAP (Challenge Handshake Authentication Protocol) 有下列幾種.

  1. 單向 CHAP 驗證 – 在此安全性等級,只有目標 Target 會做驗證
  2. 相互 CHAP 驗證 – 在此安全性等級,目標 Target 與啟動器 Initiator 皆會被彼此做驗證.
  3. Reverse CHAP – 一般的 CHAP 使用 one-way hash,密碼檔無法回朔,但是使用 Reverse CHAP 是可以的.關於 Reverse CHAP 目前網路上我還查不太到很多的資料所以無法做說明.

單向 CHAP 驗證

先來說明第一種 單向 CHAP 驗證CHAP(Challenge Handshake Authentication Protocol)

預設 iSCSI 採用了 單向 CHAP(Challenge Handshake Authentication Protocol) 的身分驗證方式,基本上是一種以 MD5 的加密驗證方式.方式如下:

  1. 在雙方(Target / Initiator) 建立連線後,Target 送出 "challenge" 的訊息告知 Initiator 要做身分驗證.
  2. Initiator 會將使用者密碼使用 md5 做 one-way hash 並送出去給 Target 端.
    假如使用者密碼是 :123456 ,md5 做過 one-way hash 之後變成 : f447b20a7fcbf53a5d5be013ea0b15af
  3. Target 端將以經過 md5 的密碼和 Initiator 做比對,如果比對正確,這身份驗證及成立要不然就會將此次連結做中斷.
    Target 端並沒有將原先密碼儲存下來,而是將密碼紀錄成做過 one-way hash  的 f447b20a7fcbf53a5d5be013ea0b15af.如果兩邊的 md5 一樣即代表成立.
  4. 在正常連線過程中會不時重復做 1~3 的 CHAP 身分驗證.

為什麼身分驗證會採用 One Way Hashes 其優點是原資料已經不存在,傳送在網路上不需怕密碼檔被盜取.

One Way Hashes 主要會產生一組固定長度字串(fingerprint or message digests),這組字串用來比對原資料是否遭到修改,它的特性如下

  1. 原資料輸入長度為可變
  2. 輸出的 fingerprint 為固定長度
  3. 當資料任何 byte 改變時, fingerprint 也會變的完全不同
  4. 我們無法依據 fingerprint 來回推成原資料,這也是為什麼稱為 One Way hash(單方向的資料運算,函數多對一的特性)

既然無法回推成原資料,那怎知資料是否正確, One Way hash 會再將資料再做一次 One Way hash 然後直接比對 fingerprint 是否一樣.

不過所有的連線還是會受到 ACL 的限制, CHAP 只是多加上一層保護.先將之前設定先取消,將 ACL 改成 ALL.

[root@benjr ~]# tgtadm –lld iscsi –op unbind –mode target –tid 1 -I 192.8.1.121
[root@benjr ~]# tgtadm –lld iscsi –op unbind –mode target –tid 1 -I 192.8.1.0/24
[root@benjr ~]# tgtadm –lld iscsi –op unbind –mode target –tid 1 -I ALL

iSCSI 的帳號跟本地端的 Linux 帳號密碼無關,所以必須透過 "tgtadm" 來建立.

[root@benjr ~]# tgtadm –lld iscsi –op new –mode account –user benjr –password benjr
[root@benjr ~]# tgtadm –lld iscsi –op show –mode account
Account list:
    benjr

帳號是建立好了還要將他指定到哪一個 target.

[root@benjr ~]# tgtadm –lld iscsi –op bind –mode account –tid 1 –user benjr
[root@benjr ~]# tgtadm –lld iscsi –op show –mode target
Target 1: iqn.2009-4.tw.benjr:storage
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
        I_T nexus: 4
            Initiator: iqn.1994-05.com.redhat:116f23e2ef8
            Connection: 0
                IP Address: 192.8.1.121
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf1:0
            SCSI SN: beaf10
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf1:1
            SCSI SN: beaf11
            Size: 9G
            Backing store: /dev/sdb1
    Account information:
        benjr
    ACL information:
        ALL

iSCSI initiator 如要使用 CHAP 登入 Target,我們需要修改 /etc/iscsi/iscsid.conf, node.session.auth.username 和 node.session.auth.password 都要修改剛剛設定好的 –user benjr –password benjr
incoming 或是 outgoing 的 password 和 username 的最大限制是 256 字元.

[root@benjr ~]# cat /etc/iscsi/iscsid.conf
node.session.auth.username = benjr
node.session.auth.password = benjr

相互 CHAP 驗證

相互的 CHAP 的認證端可為 Target(Incoming Authentication) 或是 Initiator (Outgoing Authentication) 任一端來認證.也就是說 Target(Incoming Authentication)

  1. 由 Target 端為 Initiator 認證.這樣的認證方式可以允許多個 Initiator 來連接到 Target.
  2. 而 Initiator(Outgoing Authentication) 是由 Initiator 來認證 Target 端.

之前我們都是在 Target 端設定帳號密碼,這就是使用 Incoming Authentication 是由 Target 端為 Initiator 認證.要同時使用 Outgoing Authentication 也很簡單.只要指定 outgoing 的 user 和 password

剛剛已經設定過 Incoming 的認證方式,現在要透過 "tgtadm" 來建立 Outgoing 的認證.

[root@benjr ~]# tgtadm –lld iscsi –op new –mode account –user in_benjr –password in_benjr –outgoing
[root@benjr ~]# tgtadm –lld iscsi –op show –mode account
Account list:
    benjr
    in_benjr

帳號是建立好了還要將他指定到哪一個 target.

[root@benjr ~]# tgtadm –lld iscsi –op bind –mode account –tid 1 –user benjr –outgoing
[root@benjr ~]# tgtadm –lld iscsi –op show –mode target
Target 1: iqn.2009-4.tw.benjr:storage
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
        I_T nexus: 4
            Initiator: iqn.1994-05.com.redhat:116f23e2ef8
            Connection: 0
                IP Address: 192.8.1.121
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf1:0
            SCSI SN: beaf10
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf1:1
            SCSI SN: beaf11
            Size: 9G
            Backing store: /dev/sdb1
    Account information:
        benjr
        in_benjr  (outgoing)
    ACL information:
        ALL

iSCSI initiator 如要使用 Outgoing CHAP ,我們需要修改 /etc/iscsi/iscsid.conf, node.session.auth.username_in 和 node.session.auth.password_in 都要修改剛剛設定好的

[root@benjr ~]# cat /etc/iscsi/iscsid.conf
node.session.auth.username = benjr
node.session.auth.password = benjr
node.session.auth.username_in = in_benjr
node.session.auth.password _in= in_benjr
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料