iScsi CHAT 认证

iScsi CHAT Authentication

foreversmart write on 2023-01-25

What

CHAP 认证是 iSCSI 协议中最主要的认证方式,现有的开源 iSCSI 实现(包括 initiator 和 target 实现)基本上都只支持 CHAP 认证
CHAP 协议 CHAP[1]的全称是 Challenge-Handshake Authentication Protocol,协议细节由 RFC 1994 进行定义。CHAP 最初应用在 Point to Point Protocol(PPP)中,用于实 现 PPP 服务器对客户端的身份认证,但也可以应用在其它需要对用户或主机进 行身份认证的场合,如 iSCSI 协议就规定使用 iSCSI 协议进行通信的设备必须 (MUST)实现 CHAP 认证
CHAP 分为:
initiator连接target时进行认证
initiator 和 target 都进行认证

单向配置

在 iScsi 中 认证分为两种模式 discover 模式和 session 方式
Target 上设置
设置 discover 认证
Shell
Copy
/iscsi> set discovery_auth enable=1 userid=hello password=xxxx
设置 session 认证
Shell
Copy
# 到具体的 acl client 下设置 userid 和 password /> cd iscsi/iqn.2022-11.rio-csi.srv:rio.xs2298/tpg1/acls/iqn.1993-08.org.debian:01:219b5d4f819a/ /iscsi/iqn.19...219b5d4f819a> set auth userid=hello Parameter userid is now 'hello'. /iscsi/iqn.19...219b5d4f819a> set auth password=xxxx Parameter password is now 'xxxx'. /iscsi/iqn.19...219b5d4f819a> cd / /> saveconfig Configuration saved to /etc/target/saveconfig.json
只通过 discover 认证,也需要在 acls 里面加上 client 的 iniatorname 否则也不会登录不上
Initiator 设置
修改配置文件/etc/iscsi/iscsi/iscsid.conf 开启并配置CHAP
Shell
Copy
# ************* # CHAP Settings # ************* # To enable CHAP authentication set node.session.auth.authmethod # to CHAP. The default is None. node.session.auth.authmethod = CHAP # To set a CHAP username and password for initiator # authentication by the target(s), uncomment the following lines: node.session.auth.username = hello node.session.auth.password = xxxx # To set a CHAP username and password for target(s) # authentication by the initiator, uncomment the following lines: #node.session.auth.username_in = hello #node.session.auth.password_in = xxxx # To enable CHAP authentication for a discovery session to the target # set discovery.sendtargets.auth.authmethod to CHAP. The default is None. discovery.sendtargets.auth.authmethod = CHAP # To set a discovery session CHAP username and password for the initiator # authentication by the target(s), uncomment the following lines: discovery.sendtargets.auth.username = hello discovery.sendtargets.auth.password = xxxx # To set a discovery session CHAP username and password for target(s) # authentication by the initiator, uncomment the following lines: #discovery.sendtargets.auth.username_in = hello #discovery.sendtargets.auth.password_in = xxxx
注意这里面也分为 session 和 discovery 两种方式
改好以后重启 systemctl restart iscsid open-iscsi
或者命令方式传入 CHAT
iscsiadm -m discoverydb -t sendtargets -p 0.0.0.0:3260 -I default -o update -n discovery.sendtargets.auth.authmethod -v CHAP -n discovery.sendtargets.auth.username -v hello -n discovery.sendtargets.auth.password -v xxxx
需要先执行 discover 找到存储
连接:
Shell
Copy
# 找到存储 iscsiadm -m discoverydb -t sendtargets -p 0.0.0.0:3260 -I default --discover # 会在 /etc/iscsi/sendtargets 存储信息 # 为这个 sendtargets 添加认证方式这样就可以不将用户密码配置在 配置文件中 # 清除配置 iscsiadm -m discoverydb -t sendtargets -p 10.34.34.36:3260 -I default -o delete # 新建配置 iscsiadm -m discoverydb -t sendtargets -p 10.34.34.36:3260 -I default -o new
登录指定存储
iscsiadm --mode node --portal 0.0.0.0 3260 --login
iscsiadm -m session -T iqn -p 0.0.0.0:3260 -l
iscsiadm -m node -T iqn -p 0.0.0.0:3260 -l
iscsiadm -m discovery -p 0.0.0.0:3260 -l
登录后会在 /etc/iscsi/nodes 存储信息以便后面登录

双向认证

Target 上设置
Shell
Copy
/> iscsi/ set discovery_auth enable=1 userid=client password=client123 mutual_userid=server mutual_password=server123
Initiator 设置
/etc/iscsi/iscsi/iscsid.conf 上增加了 target 到 initiator 的检查,也就是 上面的 mutual 里面设置的内容
Shell
Copy
discovery.sendtargets.auth.username_in = server discovery.sendtargets.auth.password_in = server123
参考:

「真诚赞赏,手留余香」

Foreversmart

真诚赞赏,手留余香

使用微信扫描二维码完成支付