zoukankan      html  css  js  c++  java
  • 网络存储(四)之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

  • 相关阅读:
    非常高兴,“万能数据库查询分析器”中英文3.01版本测试完成,会尽快完成发布,敬请等待
    OpenGL学习入门之VS2010环境配置
    服务器异常处理:Java Logger
    从3.01版本开始,“万能数据库查询分析器”中英文版本将全部免费
    java算法:顺序查找(有监视哨和无监视哨)
    DELPHI第三方控件及组件大全(安装方法与使用)
    Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程分析
    非常高兴,《彻底删除文件》2.01版本也测试完成,会尽快完成发布,敬请等待
    无Dll插入进程,下载者VC源代码
    剖析WININIT.INI文件与Windows病毒
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/6047550.html
Copyright © 2011-2022 走看看