網絡存儲(四)之ISCSI的進階


前言

  上一篇博客中我們講了如何搭建一個簡單的iscsi網絡存儲系統,這塊有個安全問題就是,任何知道target name的客戶端都可以隨意連接ISCSI服務器。但是很多時候,通過授權認證連接共享磁盤或者分區是必須的,例如 只允許客戶端主機A連接target共享出來的磁盤分區1,而客戶端主機b只運行連接target分享的磁盤分區2,在這種情況下,就需要在ISCSI target主機上進行授權設定了。
  ISCSI在授權訪問和安全管理方面很有優勢,它能夠以主機為基礎,也就是以IP地址為基礎來設定允許或者拒絕,也可以通過賬戶名密碼認證來設定允許或者拒絕存取。
下面通過一套實驗環境來配置看看情況

客戶端/服務端 IP 共享的磁盤
服務器端 172.16.22.142 /dev/sdb下的兩個分區
客戶端 172.16.160.191 /dev/sdb1
客戶端 172.16.160.192 /dev/sdb2
  1. 通過ip來限定客戶端連接不同的磁盤或者分區
  2. 通過用戶名密碼連接不同的磁盤或分區

通過ip來限定

首先更改配置文件,我在服務器端(172.16.22.142)配置文件如下:

[root@salt etc]# tail /etc/tgt/targets.conf 
#</target>
<target iqn.2016.11.09.com.server:test.target1>
    backing-store /dev/sdb5
    initiator-address 172.16.160.191   # 這個參數就是限定了哪個ip能夠過來訪問,詳情可以看配置文件的樣例
</target>

<target iqn.2016.11.09.com.server:test.target2>
    backing-store /dev/sdb5
    initiator-address 172.16.160.192
</target>

改為重啟服務

[root@salt etc]# /etc/init.d/tgtd restart
Stopping SCSI target daemon: initiators still connected    [FAILED]
Starting SCSI target daemon:                               [  OK  ]

此時在客戶端 172.16.160.191 查看:

[root@localhost ~]# iscsiadm -m discovery  -t sendtargets -p 172.16.22.142
172.16.22.142:3260,1 iqn.2016-11.com.ljf:server.target1   # 共享的,所有人可以查看,未作限定
172.16.22.142:3260,1 iqn.2016.11.09.com.server:test.target1  # 191只能查看target1這塊盤

在另一個客戶端 172.16.160.192 查看:

[root@linux-node1 ~]# iscsiadm -m discovery -t sendtargets -p 172.16.22.142
172.16.22.142:3260,1 iqn.2016-11.com.ljf:server.target1 # 共享的,所有人可以查看,未作限定
172.16.22.142:3260,1 iqn.2016.11.09.com.server:test.target2   # 192只能查看target2這塊盤

自此,通過ip來限定客戶端連接不同的磁盤或者分區。

通過用戶名密碼

iscsi target以賬戶名密碼方式認證分為兩階段
第一階段是discovery查詢認證所使用的賬戶和密碼(即sendTarget用的)
第二階段是登陸target /iqn 所使用的賬戶密碼(即login登陸時使用的)
這種方式復雜點,需要在Initiator主機和iscsi target服務器上進行簡單配置。

配置ISCSI target

我們在172.16.22.142上配置tgtd,配置文件內容如下:

[root@salt ~]# tail /etc/tgt/targets.conf 
<target iqn.2016.11.com.server:test.target_191haha>
    backing-store /dev/sdb2 
    incominguser user191 user191    # 第一個user191是用戶名,第二個user191是密碼
</target>

<target iqn.2016.11.com.server:test.target192>
    backing-store /dev/sdb1
    incominguser user192 user192
</target>

配置完成后重啟服務:

[root@salt ~]# service  tgtd restart

然后我們在iscsi Initiator 172.16.160.191上配置用戶名和密碼,命令如下:

[root@localhost ~]# grep ^[a-Z]  /etc/iscsi/iscsid.conf   # 增加下面6行
node.session.auth.authmethod = CHAP
node.session.auth.username = user191     # 登陸連接的時候驗證身份
node.session.auth.password = user191
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = user191   # discovery 的時候驗證身份
discovery.sendtargets.auth.password = user191
[root@localhost ~]# /etc/init.d/iscsi restart   #改完后重啟服務

[root@localhost ~]# iscsiadm -m discovery -t sendtargets -p 172.16.22.142 
iscsiadm: This command will remove the record [iface: default, target: iqn.2016.11.09.com.server:test.target191, portal: 172.16.22.142,3260], but a session is using it. Logout session then rerun command to remove record.
172.16.22.142:3260,1 iqn.2016.11.com.server:test.target192
172.16.22.142:3260,1 iqn.2016.11.com.server:test.target_191haha
[root@localhost ~]# iscsiadm -m node  -p 172.16.22.142  -l   # 登陸服務器

iscsi Initiator 172.16.160.192同理可得,同樣的操作,我就不演示了。

錯誤總結

在這沒有成功之前,我這邊出現了一個奇怪的情況,就是在iscsi Initiator端死活discovery不了我剛才設定的
通過用戶名密碼來訪問的磁盤,服務端tgtd程序和客戶端iscsi重啟N回都沒有改變這症狀,突然我在iscsi服務器端ps -ef |grep tgtd發現了啟動了多個程序,導致客戶端發現不了。於是,殺死進程重啟服務就好使了。

[root@salt ~]# /etc/init.d/tgtd stop
Stopping SCSI target daemon:                               [  OK  ]
[root@salt ~]# netstat -lnpt        #奇怪的是,明明stop掉了進程,為什么還有tgtd進程呢?
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1538/sshd           
tcp        0      0 0.0.0.0:4505                0.0.0.0:*                   LISTEN      1704/python2.6      
tcp        0      0 0.0.0.0:4506                0.0.0.0:*                   LISTEN      1833/python2.6      
tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      2953/tgtd           
tcp        0      0 :::22                       :::*                        LISTEN      1538/sshd           
tcp        0      0 :::3260                     :::*                        LISTEN      2953/tgtd           
[root@salt ~]# /etc/init.d/tgtd stop
Stopping SCSI target daemon: not running                   [FAILED]
[root@salt ~]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1538/sshd           
tcp        0      0 0.0.0.0:4505                0.0.0.0:*                   LISTEN      1704/python2.6      
tcp        0      0 0.0.0.0:4506                0.0.0.0:*                   LISTEN      1833/python2.6      
tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      2953/tgtd           
tcp        0      0 :::22                       :::*                        LISTEN      1538/sshd           
tcp        0      0 :::3260                     :::*                        LISTEN      2953/tgtd           
[root@salt ~]# ps -ef |grep tgt   
root       2953      1  0 Nov08 ?        00:00:00 tgtd
root       2956   2953  0 Nov08 ?        00:00:00 tgtd
root       5233   2915  0 00:09 pts/0    00:00:00 grep tgt

[root@salt ~]# kill 2956              #干掉他們后啟動服務器就好了
[root@salt ~]# kill 2953
[root@salt ~]# kill -9 2953
[root@salt ~]# kill -9 2953
-bash: kill: (2953) - No such process
[root@salt ~]# kill -9 2956
-bash: kill: (2956) - No such process
[root@salt ~]# kill -9 2956
-bash: kill: (2956) - No such process
[root@salt ~]# 
[root@salt ~]# /etc/init.d/tgtd start
Starting SCSI target daemon:                               [  OK  ]

有問題請隨時與我聯系,18500777133@sina.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM