前言

  上一篇博客中我们讲了如何搭建一个简单的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

最新文章

  1. 告别IT,出售多年自己研发的股票分析系统源码
  2. qt 设置等待事件
  3. Android---闪频页和倒计时
  4. [ActionScript 3.0] AS3.0和AS2.0的相互通信
  5. asp - Session
  6. Microsoft Azure News(2) 在Microsoft Azure上运行SAP应用程序
  7. 安装window服务
  8. Java流的正确关闭方式
  9. [cocos2d]场景切换以及切换进度显示
  10. 最新选择Godaddy主机方案美国数据中心教程指导
  11. Android中的windowSoftInputMode属性详解
  12. bug经验
  13. 制作自己的web字体
  14. Memcache(1)
  15. 使用filter方法过滤集合元素
  16. IT类非开发面试总结--2
  17. js正则验证特殊字符
  18. PC响应式、固宽布局思想
  19. xgboost 非官方每天编译
  20. mysql性能优化分析 --- 上篇

热门文章

  1. JavaScript中call,apply,bind方法的总结。
  2. [C语言]一个很实用的服务端和客户端进行UDP通信的实例
  3. 理解IEnumerator+IEnumerable这种接口思想
  4. 谈谈关于Python里面小数点精度控制的问题
  5. GBDT(MART) 迭代决策树简介
  6. Kernel Methods (1) 从简单的例子开始
  7. 【转】Timer还是Handler
  8. static关键字总结
  9. [poj2406] Power Strings
  10. Leetcode House Robber II