Check_MK meets Samba4

Submitted by admin on So, 11.12.2016 - 11:59

Ein kleiner Agent, um einen Samba4 Server zu monitoren. Das Skript ist für Samba4 Installationen geeignet, die die Rolle eines active directory domain controller wahrnehmen, in deren smb.conf also

server role = active directory domain controller

steht. Es muss nach ‘/usr/lib/check_mk_agent/local/’ kopiert werden.

Was macht das Skript?

  • Zunächst wird die Konsitenz der AD Datenbank geprüft
  • Im nächsten Schritt werden die ACLs für sysvol getestet
  • Logon mit Kerberos
  • LDAP Abfrage mit Kerberos Authentifizierung
  • Löschen des Kerberos Tickets

Die Tests sind sicherlich noch nicht hinreichend, so fehlt noch ein test für DNS. Dafür hat Check_MK jedoch bereits fertige Plugins, so dass man das hier nicht noch einmal machen muss.

#!/bin/bash

KRB_USER='***'
KRB_PASS='***'
LDAP_BASE='CN=Users,DC=my,DC=domain'
LDAP_HOST="dc1.my.domain"


PATH=/usr/local/samba/bin:/sbin:/usr/sbin:/bin:/usr/bin
export PATH


NAGIOS_RES=0

RES=$(samba-tool dbcheck | grep errors)
if [ $? -ne 0 ]; then
  echo "2 samba_tool objects=0; CRIT - samba-tool failed"
  exit 2
fi

DB_OBJECTS=$(echo $RES | awk '{ print $2;}')
DB_ERRORS=$(echo $RES | awk '{ print $4;}' | sed 's/(//')
if [ -z "$DB_ERRORS" ]; then
  DB_ERRORS=-1
fi

if [ -z "$DB_OBJECTS" ]; then
  echo "2 samba_dbobjects objects=0; CRIT - No objects found, Samba crashed?"
else
  echo "0 samba_dbobjects objects=${DB_OBJECTS}; OK - ${DB_OBJECTS} objects found"
fi

if [ $DB_ERRORS -ne 0 ]; then
  echo "2 samba_dbcheck errors=${DB_ERRORS}; CRIT - Samba database has errors: ${DB_ERRORS}"
else
  echo "0 samba_dbcheck errors=${DB_ERRORS}; OK - Samba database is ok"
fi

samba-tool ntacl sysvolcheck
RES=$?
if [ $RES -ne 0 ]; then
  echo "2 samba_ntacl errors=${RES}; CRIT - Samba ntacl not clean"
else
  echo "0 samba_ntacl errors=${RES}; OK - Samba ntacl is ok"
fi

echo "$KRB_PASS" | kinit "${KRB_USER}" > /dev/null 2> /dev/null
RES=$?
if [ $RES -ne 0 ]; then
  echo "2 samba_krb krb=${RES}; CRIT - Kerberos auth failed"
else
  echo "0 samba_krb krb=${RES}; OK - Kerberos auth succeeded"
fi

klist > /dev/null 2> /dev/null
RES=$?
if [ $RES -ne 0 ]; then
  echo "2 samba_klist klist=${RES}; CRIT - No Kerberos ticket found"
else
  echo "0 samba_klist klist=${RES}; OK - Kerberos ticket found"
fi

ldapsearch -h "${LDAP_HOST}" -Y GSSAPI -b "${LDAP_BASE}" "CN=${KRB_USER}" > /dev/null 2> /dev/null
RES=$?
if [ $RES -ne 0 ]; then
  echo "2 samba_ldap ldap=${RES}; CRIT - LDAP search failed"
else
  echo "0 samba_ldap ldap=${RES}; OK - LDAP search succeeded"
fi

kdestroy
RES=$?
if [ $RES -ne 0 ]; then
  echo "2 samba_kdestroy kdestroy=${RES}; CRIT - kdestroy failed"
else
  echo "0 samba_kdestroy kdestroy=${RES}; OK - kdestroy succeeded"
fi