在 SNMPv3 中创建用户

此场景说明如何通过手动编辑 /etc/snmpdv3.conf/etc/clsnmp.conf 文件在 SNMPv3 中创建用户。

在此情形中将会创建用户 u1。 用户 u1 可以得到认证密钥但是不会得到专用密钥(只有您已经安装了 snmp.crypto 文件集,专用密钥才可用)。 ul 的认证密钥要使用 HMAC-MD5 协议来创建。 在配置好 ul 以后,它会被放到一个组里,然后我们会给那个组定义查看和访问许可权。 最后创建 u1 的陷阱条目。

/etc/snmpdv3.conf/etc/clsnmp.conf 文件中所用的每个单独的值都不能超过 32 个字节。

要考虑的事项
  • 本指南中的信息是通过使用特定版本的AIX® 进行测试的。您获得的结果可能会因版本和AIX 级别的不同而有很大差异。

步骤 1. 创建用户

  1. 请确定您希望使用哪种安全性协议,是 HMAC-MD5 还是 HMAC-SHA。 此情形中使用 HMAC-MD5。
  2. 使用 pwtokey 命令生成认证密钥。 根据您使用的认证协议以及是否使用专用密钥,您的输出看上去会有所不同。 这些密钥将在 /etc/snmpdv3.conf /etc/clsnmp.conf 文件中使用。 用户 u1 使用的命令如下:
    pwtokey -p HMAC-MD5 -u auth anypassword 9.3.230.119
    所指定的 IP 地址是运行代理的 IP 地址。 密码可以是任意密码,但是务必要把它保存在一个安全的地方以供将来使用。 输出看上去应该类似于以下:
    Display of 16 byte HMAC-MD5 authKey:          
      63960c12520dc8829d27f7fbaf5a0470            
                                                  
    Display of 16 byte HMAC-MD5 localized authKey:
      b3b6c6306d67e9c6f8e7e664a47ef9a0                        
  3. 通过 root 权限,用您首选的文本编辑器打开 /etc/snmpdv3.conf 文件。
  4. 按照文件中给定的格式添加一条 USM_USER 条目来创建一个用户。 authKey 值将是使用 pwtokey 命令生成的本地化认证密钥。 用户 u1 的此条目如下所示:
    #---------------------------------------------------------------------------
    # USM_USER entries
    #    Defines a user for the User-based Security Model (USM).
    # Format is:
    #  userName engineID authProto authKey privProto privKey keyType storageType
    #
    USM_USER u1 - HMAC-MD5 b3b6c6306d67e9c6f8e7e664a47ef9a0 - - L -
    #----------------------------------------------------------------------------
    • userName 是用户名。 在该例中就是 u1
    • authProto 必须是您创建这些密钥时所用的协议。 在该例中就是 HMAC-MD5
    • authKey 是使用 pwtokey 命令创建的本地化的认证密钥。
    • 未指定 privProtoprivkey ,因为在此场景中我们未使用隐私密钥。
    • keyTypeL,因为我们使用本地化的认证密钥。
  5. 保存然后关闭 /etc/snmpdv3.conf 文件。
  6. 使用您最喜欢的文本编辑器打开 SNMP 管理器上的 /etc/clsnmp.conf 文件。
  7. 按照文件中给定的格式添加新用户。 u1 的条目如下:
    #----------------------------------------------------------------------------------------------------
    #
    # Format of entries:
    # winSnmpName targetAgent admin secName password context secLevel authProto authKey privProto privKey 
    #
    user1  9.3.230.119  SNMPv3  u1  -  -  AuthNoPriv  HMAC-MD5  63960c12520dc8829d27f7fbaf5a0470  -  -
    #----------------------------------------------------------------------------------------------------
    • winSnmpName 可以是任何值。 当使用 clsnmp 命令发出 SNMP 请求时,将使用此值。
    • targetAgent 是运行代理的 IP 地址,创建认证密钥时也曾使用过此 IP 地址。
    • admin 设成 SNMPv3,因为要发送 SNMPv3 请求。
    • secName 是要创建的用户名。 在该例中就是 u1
    • seclevel 设置为 AuthNoPriv ,因为它配置为使用认证但不使用隐私 (因此,没有 privProtoprivKey的值)。
    • authproto 设成创建认证密钥时所使用的认证协议。
    • authKeypwtokey 命令生成的非本地化密钥。
  8. 保存然后关闭 /etc/clsnmp.conf 文件。

步骤 2. 配置组

现在必须把用户放到一个组中。 如果您已经有一个组,已经配置好所有您希望赋予用户的查看和访问许可权,那么您就可以把此用户放在那个组中。 如果您想给此用户一些其他的组都没有的查看和访问许可权,或者如果您根本没有配置任何组,那么就请创建一个组然后把此用户添加进去。

要将用户添加到新组,请在 /etc/snmpdv3.conf 文件中创建新的 VACM_GROUP 条目。 u1 的组条目如下:
#--------------------------------------------------------------
# VACM_GROUP entries
#    Defines a security group (made up of users or communities)
#    for the View-based Access Control Model (VACM).
# Format is:
#  groupName securityModel securityName storageType
VACM_GROUP group1 USM u1 -
#--------------------------------------------------------------
  • groupName 可以是任何名称。 它成为了您的组名称。 在该例中就是 group1
  • securityModel 设为 USM,利用 SNMPv3 的安全功能。
  • securityName 是用户名。 在该例中就是 u1

步骤 3. 配置视图和访问许可权

必须给刚创建的新组设置查看和访问许可权。 这些许可权是通过将 VACM_VIEWVACM_ACCESS 条目添加到 /etc/snmpdv3.conf 文件中进行设置的。

  1. 确定您想让新组拥有哪些查看和访问许可权。
  2. VACM_VIEW 条目添加到 /etc/snmpdv3.conf 文件中以定义该组可访问哪些 MIB 对象。 在此场景中, group1 将有权访问 interfacestcpicmpsystem MIB 子树。 但是,我们将限制 group1对系统 MIB 子树中的 sysObjectID MIB 变量的访问。
    #----------------------------------------------------------------
    # VACM_VIEW entries
    #    Defines a particular set of MIB data, called a view, for the
    #    View-based Access Control Model.
    # Format is:
    #  viewName viewSubtree viewMask viewType storageType
    VACM_VIEW group1View		interfaces	   - included -
    VACM_VIEW group1View		tcp		      - included -
    VACM_VIEW group1View		icmp		      - included -
    VACM_VIEW group1View		system		   - included -
    VACM_VIEW group1View		sysObjectID	   - excluded -
    #----------------------------------------------------------------
    • viewName 是查看的名称。 在该例中就是 group1View
    • viewSubtree 是您想要授予访问权的 MIB 子树。
    • viewType 决定查看中是否包括所定义的 MIB 子树。 在这种情况下,将包括所有子树,但将排除 MIB 变量 sysObjectID(它是 system 子树的一部分)。
  3. VACM_ACCESS 条目添加到 /etc/snmpdv3.conf 文件中以定义该组对上面所指定的 MIB 对象的许可权。 给 group1 的是只读访问权。
    #-----------------------------------------------------------------------------------------------------------
    # VACM_ACCESS entries
    #    Identifies the access permitted to different security groups
    #    for the View-based Access Control Model.
    # Format is:
    # groupName contextPrefix contextMatch securityLevel securityModel readView writeView notifyView storageType
    VACM_ACCESS  group1 - - AuthNoPriv USM group1View - group1View -
    #-----------------------------------------------------------------------------------------------------------
    • groupName 是组名。 在该例中就是 group1
    • securityLevel 是所用的安全级别。 在此情形中,使用的是认证密钥而不是专用密钥。 因此此值被设为 AuthNoPriv
    • securityModel 是您使用的安全模型(SNMPv1、SNMPv2c 或 USM)。 在此场景中,它设为 USM 以允许使用 SNMPv3 安全性功能。
    • readView 确定组对哪些 VACM_VIEW 拥有读访问权。 在此场景中,将提供 group1View ,这将授予 group1group1View VACM_VIEW 条目的读访问权。
    • writeView 确定组对哪些 VACM_VIEW 拥有写访问权。 在此情形中,没有给 group1 写访问权。
    • notifyView 指定了在由访问表中的条目控制来执行陷阱时所适用的查看名称。
    注: 在某些情况下,可能需要一个组的多个 VACM_ACCESS 条目。 如果组中的用户具有不同的认证和隐私设置 (noAuthNoPrivAuthNoPrivAuthPriv) ,那么需要相应设置 securityLevel 参数的多个 VACM_ACCESS 条目。

步骤 4. 为用户配置陷阱条目

SNMPv3 中的陷阱条目是通过将 NOTIFYTARGET_ADDRESSTARGET_PARAMETERS 条目添加到 /etc/snmpdv3.conf 文件中创建的。 TARGET_ADDRESS 条目将指定您希望把陷阱发送到哪里,而 TARGET_PARAMETERS 条目将会使 TARGET_ADDRESS 信息映射到 group1

NOTIFY 条目是按缺省配置的。 缺省的 NOTIFY 条目如下所示:
NOTIFY notify1 traptag trap -
在此情形中,我们使用缺省条目中指定的值 traptag
  1. 添加 TARGET_ADDRESS 条目来指定您想把陷阱发送到哪里。
    #-------------------------------------------------------------------------------------
    # TARGET_ADDRESS
    #    Defines a management application's address and parameters
    #    to be used in sending  notifications.
    # Format is:
    #  targetAddrName tDomain tAddress tagList targetParams timeout retryCount storageType
    #-------------------------------------------------------------------------------------
    TARGET_ADDRESS Target1 UDP 9.3.207.107     traptag trapparms1 - - - 
    
    • targetAddrName 可以是任何名称。 在此情形中,我们使用了 Target1
    • tAddress 是组的陷阱应该发送到的 IP 地址。
    • tagListNOTIFY 条目中配置的名称。 在该例中就是 traptag
    • targetParams 可以是任何值。 我们使用的是 trapparms1,将在 TARGET_PARAMETERS 条目中使用。
  2. 添加 TARGET_PARAMETERS 条目。
    #------------------------------------------------------------------------- 
    # TARGET_PARAMETERS
    #    Defines the message processing and security parameters
    #    to be used in sending notifications to a particular management target.
    # Format is:
    #  paramsName mpModel securityModel securityName securityLevel storageType
    #-------------------------------------------------------------------------
    TARGET_PARAMETERS trapparms1 SNMPv3  USM     u1        AuthNoPriv -
    • paramsNameTARGET_ADDRESS 条目中的 targetParams 值相同,在本例中为 trapparms1
    • mpModel 是所用的 SNMP 的版本。
    • securityModel 是您使用的安全模型(SNMPv1、SNMPv3 或 USM)。 在此场景中,它设为 USM 以允许使用 SNMPv3 安全性功能。
    • securityNameUSM_USER 条目中指定的用户名,在该例中就是 u1
    • securityLevel 设置为 AuthNoPriv ,因为我们使用的是认证密钥,而不是隐私密钥。

第 5 步: 停止并启动 snmpd 守护程序

更改 /etc/snmpdv3.conf 文件之后,停止 snmpd 守护程序,然后再将其启动。

  1. 输入以下命令以停止 snmpd 守护程序:
    stopsrc -s snmpd
  2. 输入以下命令以启动 snmpd 守护程序:
    startsrc -s snmpd

新的设置现在生效了。

注: 使用 refresh -s snmpd 简单刷新 SNMPv3 代理将无法像在 SNMPv1中那样工作。 如果更改了 /etc/snmpdv3.conf 文件,那么必须如上所述停止然后再启动该守护程序。 SNMPv3 中支持的动态配置功能不允许刷新。

步骤 6. 测试配置

要验证您的配置是正确的,您可以在 SNMP 管理器上运行以下命令。
clsnmp -h user1 walk mib
其中,mib 是用户能访问的 MIB 子树。 在此场景中,可以是 interfacestcpicmpsystem。 如果配置是正确的,那么您就会在指定的子树中看到信息。

如果您没有得到正确的输出,那么请重温一遍本文档中的各步骤,并验证您正确的输入了所有的信息。