繁体   English   中英

Cacti通过自定义脚本扩展snmp

[英]Cacti extend snmp by a custom script

我在Cacti上创建了一个关于使用cacti和net-snmp访问基础架构上特定页面的时间的图表。

我已经在文件/etc/snmp/snmpd.conf中添加了两个新行来扩展功能:

extend stat_page1 /usr/local/bin/cacti/access_page.sh context1
extend stat_page2 /usr/local/bin/cacti/access_page.sh context2

我已重新启动守护进程snmpd以加载此配置。

调用的脚本在下面描述,带有其他值,因为出于某种原因,我可以显示这个。

#!/bin/bash

domain="mydomain"
cookie_name="myCookie"
token="myToken"
if [ $# -eq 1 ]
    then

        if [ "$1" = "context1" ]
                then

                        target_url="https://${domain}/${1}/page1.html"
                        TIME=$(curl  -s -w "%{time_total}" -o /dev/null  --cookie \"${cookie_name}=${token}\" ${target_url})
        echo "$TIME"
        elif [ "$1" = "context2" ]
                then
                        target_url="https://${domain}/${1}/page2.html"
                        TIME=$(curl  -s -w "%{time_total}" -o /dev/null  --cookie \"${cookie_name}=${token}\" ${target_url})
        echo "$TIME"
        fi

如果我手动启动脚本,我有这个

$ /usr/local/bin/cacti/access_page.sh context2
0.061
$ /usr/local/bin/cacti/access_page.sh context1
0.041

当我使用snmpget启动脚本时,我得到了以下结果:

snmpwalk -v2c -c myCommunity localhost NET-SNMP-EXTEND-MIB::nsExtendOutput2Table 
NET-SNMP-EXTEND-MIB::nsExtendOutLine."stat_page1".1 = STRING: 0.000
NET-SNMP-EXTEND-MIB::nsExtendOutLine."stat_page2".1 = STRING: 0.000

所有时间,我通过snmp命令获得0.000值并手动获得实际值。

你能帮我解决一下吗?

最近我遇到了snmp和调用curl命令的执行脚本的问题。

当我搜索一些解决方案时,这篇文章是最接近的问题。

我找到了一个没有禁用SELinux的解决方案。

我是SELinux的新手,但我用一些SELinux配置解决了这个问题,将来可能会引起别人的兴趣。

背景:

  • Centos 7

  • SNMP /etc/snmp/snmpd.conf配置文件的内容:


#       sec.name    source      community
com2sec myuser      default     public
#       groupName   securityModel   securityName
group   mygroup     v2c     pad
#       name        incl/excl   subtree         mask(optional)
view    systemview  included    .1.3.6.1.4
view    systemview  included    .1.3.6.1.4.1
view    systemview  included    .1.3.6.1.4.1.1234
view    systemview  included    .1.3.6.1.4.1.1234.1
#       group   context sec.model   sec.level   prefix  read        write   notif
access  mygroup ""  any     noauth      exact   systemview  none    none
perl do "/appli/snmp_scripts/agent.pl"

  • SNMAP代理agent.pl:

#!/usr/bin/perl

use NetSNMP::agent (':all');
use NetSNMP::ASN qw(ASN_OCTET_STR ASN_INTEGER);

sub handler {
  my ($handler, $registration_info, $request_info, $requests) = @_;
  my $request;

  for($request = $requests; $request; $request = $request->next()) {
    my $oid = $request->getOID();
    if ($request_info->getMode() == MODE_GET) {
      if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.1581.1.6.2.1.5")) {
    $request->setValue(ASN_OCTET_STR,`/path/to/myscript`);
      }
    }
  }
}

my $AGENT_OID = ".1.3.6.1.4.1.1234";
$agent->register("MYAGENT", ".1.3.6.1.4.1.1234",
                 \&handler);

解:

当我查找执行的跟踪时,使用sudo systemctl status snmpd ,会显示一些卷曲痕迹:

snmpd: curl: (7) Failed to connect to 127.0.0.1:8081 Permission denied

但是,服务器在此端口运行良好,并且在SNMP外部执行的脚本运行良好。

审计日志中生成了SELinux错误:

$> sudo grep snmp /var/log/audit/audit.log | audit2allow -w -a
type=AVC msg=audit(1528188940.802:2025): avc:  denied  { name_connect } for  pid=26809 comm="curl" dest=8081 scontext=system_u:system_r:snmpd_t:s0 tcontext=system_u:object_r:transproxy_port_t:s0 tclass=tcp_socket
    Was caused by:
        Missing type enforcement (TE) allow rule.

        You can use audit2allow to generate a loadable module to allow this access.

$> sudo grep snmp /var/log/audit/audit.log | audit2allow -M mysnmpmodule

******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i snmpdcanopensocket.pp

按照audit2allow comm告诉的步骤向SELinux申请新创建的snmp_t模块。 audit2allow -M命令在当前目录中生成了两个文件snmpdcanopensocket.pp snmpdcanopensocket.te。 SELinux需要.pp文件来重新映射它的安全规则。

$> semodule -i snmpdcanopensocket.pp

使用sudo systemctl restart snmp重新启动SNMP服务

现在,由SNMP执行的脚本中的curl表现良好,并且不会退出(7)错误代码。

我做了这个测试,当我调用脚本时,我有权限被拒绝,当我这样做时:第34行:/ tmp / echo-curl:权限被拒绝,我做了一个只有id的脚本,以确保以特权启动用户。

我找到了问题的根源,这可能是由于SELinux的强制执行 - user3249935

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM