updated for 2.2+
This commit is contained in:
parent
f012c67877
commit
da01bd0474
@ -1,13 +1,20 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Check SELinux status
|
||||
# SELinux has three modes:
|
||||
# - permissive
|
||||
# - enforcing
|
||||
# - disabled
|
||||
# -*- encoding: utf-8; py-indent-offset: 4 -*-
|
||||
# 2024 Marius Pana <mp@spearhead.systems>
|
||||
|
||||
# we are not looking at SELINUXPOLICY - although it may be of interest
|
||||
# in the future
|
||||
# Reason for this no-op: shellcheck disable=... before the first command disables the error for the
|
||||
# entire script.
|
||||
:
|
||||
|
||||
# SELinux status: enabled
|
||||
# SELinuxfs mount: /sys/fs/selinux
|
||||
# SELinux root directory: /etc/selinux
|
||||
# Loaded policy name: targeted
|
||||
# Current mode: permissive
|
||||
# Mode from config file: permissive
|
||||
# Policy MLS status: enabled
|
||||
# Policy deny_unknown status: allowed
|
||||
# Max kernel policy version: 31
|
||||
|
||||
if command sestatus > /dev/null ; then
|
||||
# Selinux status
|
||||
|
@ -1,42 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
#
|
||||
# Author: Marius Pana <mp@spearhead.systems>
|
||||
|
||||
factory_settings["selinux_default_levels"] = {
|
||||
"modedisabled" : 2,
|
||||
"curmodepermissive" : 1,
|
||||
"filemodepermissive" : 2,
|
||||
}
|
||||
|
||||
def inventory_selinux(info):
|
||||
inventory = []
|
||||
for line in info:
|
||||
yield None, {}
|
||||
|
||||
def check_selinux(item, params, info):
|
||||
for line in info:
|
||||
state = 0
|
||||
if line[0] == 'disabled':
|
||||
state = params["modedisabled"]
|
||||
return (state, "SELinux is disabled")
|
||||
elif line[1] == "enforcing" and line[2] == "enforcing":
|
||||
return(state, "SELinux is enabled and enforcing.")
|
||||
elif line[1] == "enforcing" and line[2] == "permissive":
|
||||
return(state, "SELinux is enforcing but config file is in permissive mode.")
|
||||
elif line[1] == "permissive" and line[2] == "enforcing":
|
||||
state = params["curmodepermissive"]
|
||||
return (state, "SELinux is in permissive mode but config file is enforcing.")
|
||||
elif line[2] == "permissive":
|
||||
state = params["filemodepermissive"]
|
||||
return (state, "SELinux is in permissive mode.")
|
||||
else:
|
||||
return(3, "SELinux not found in agent output")
|
||||
|
||||
check_info["selinux"] = {
|
||||
"inventory_function" : inventory_selinux,
|
||||
"check_function" : check_selinux,
|
||||
"has_perfdata" : False,
|
||||
"service_description" : "SELinux state",
|
||||
"default_levels_variable" : "selinux_default_levels",
|
||||
'group': 'selinux',
|
||||
}
|
22
info
22
info
@ -1,18 +1,14 @@
|
||||
{'author': 'Marius Pana',
|
||||
'description': 'Check SELinux status',
|
||||
'download_url': 'https://code.spearhead.cloud/Spearhead/check_mk-check-selinux',
|
||||
'files': {'agents': ['plugins/selinux'],
|
||||
'bin': [],
|
||||
'checkman': ['selinux'],
|
||||
'checks': ['selinux'],
|
||||
'doc': [],
|
||||
'inventory': [],
|
||||
'lib': [],
|
||||
'notifications': [],
|
||||
'pnp-templates': [],
|
||||
'web': ['plugins/wato/selinux_check_parameters.py']},
|
||||
'files': {'agent_based': ['selinux.py'],
|
||||
'agents': ['plugins/selinux'],
|
||||
'lib': ['python3/cmk/base/cee/plugins/bakery/selinux_bakery.py'],
|
||||
'web': ['plugins/wato/selinux_parameters.py',
|
||||
'plugins/wato/selinuxbakery_bakery.py']},
|
||||
'name': 'selinux',
|
||||
'title': 'Check SELinux',
|
||||
'version': '1.0',
|
||||
'version.min_required': '1.2.8p27',
|
||||
'version.packaged': '1.2.8p27'}
|
||||
'version': '1.1.0',
|
||||
'version.min_required': '2.2.0p0',
|
||||
'version.packaged': '2.2.0p8',
|
||||
'version.usable_until': None}
|
30
lib/python3/cmk/base/cee/plugins/bakery/selinux_bakery.py
Normal file
30
lib/python3/cmk/base/cee/plugins/bakery/selinux_bakery.py
Normal file
@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# 2024 Marius Pana <mp@spearhead.systems>
|
||||
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from .bakery_api.v1 import (
|
||||
OS,
|
||||
DebStep,
|
||||
RpmStep,
|
||||
SolStep,
|
||||
Plugin,
|
||||
PluginConfig,
|
||||
SystemBinary,
|
||||
WindowsConfigEntry,
|
||||
register,
|
||||
FileGenerator,
|
||||
ScriptletGenerator,
|
||||
WindowsConfigGenerator,
|
||||
quote_shell_string,
|
||||
)
|
||||
|
||||
def get_selinux_files(conf: Any) -> FileGenerator:
|
||||
yield Plugin(base_os=OS.LINUX, source=Path("selinux"))
|
||||
|
||||
register.bakery_plugin(
|
||||
name="selinux",
|
||||
files_function=get_selinux_files,
|
||||
)
|
35
lib/python3/cmk/base/plugins/agent_based/selinux.py
Normal file
35
lib/python3/cmk/base/plugins/agent_based/selinux.py
Normal file
@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- encoding: utf-8; py-indent-offset: 4 -*-
|
||||
# 2024 Marius Pana <mp@spearhead.systems>
|
||||
|
||||
from .agent_based_api.v1 import *
|
||||
|
||||
def discover_selinux(section):
|
||||
#for line in info:
|
||||
# yield None, {}
|
||||
#print(Service)
|
||||
yield Service()
|
||||
|
||||
def check_selinux(params, section):
|
||||
for line in section:
|
||||
if line[0] == 'disabled':
|
||||
yield Result(state=State(params["modedisabled"]), summary="SELinux is disabled")
|
||||
elif line[1] == "enforcing" and line[2] == "enforcing":
|
||||
yield Result(state=State.OK, summary="SELinux is enabled and enforcing")
|
||||
elif line[1] == "enforcing" and line[2] == "permissive":
|
||||
yield Result(state=State.WARN, summary="SELinux is enforcing but config file is in permissive mode.")
|
||||
elif line[1] == "permissive" and line[2] == "enforcing":
|
||||
yield Result(state=State(params["curmodepermissive"]), summary="SELinux is in permissive mode but config file is enforcing.")
|
||||
elif line[2] == "permissive":
|
||||
yield Result(state=State(params["curmodepermissive"]), summary="SELinux is in permissive mode.")
|
||||
else:
|
||||
yield Result(state=State.WARN, summary="SELinux not found in agent output")
|
||||
|
||||
register.check_plugin(
|
||||
name="selinux",
|
||||
service_name="SELinux state",
|
||||
discovery_function=discover_selinux,
|
||||
check_function=check_selinux,
|
||||
check_ruleset_name="selinux",
|
||||
check_default_parameters = {"modedisabled": 2, "curmodepermissive" : 1, "filemodepermissive" : 2}
|
||||
)
|
@ -1,12 +1,24 @@
|
||||
#!/usr/bin/python
|
||||
# -*- encoding: utf-8; py-indent-offset: 4 -*-
|
||||
# 2018 Marius Pana <mp@spearhead.systems>
|
||||
# 2024 Marius Pana <mp@spearhead.systems>
|
||||
|
||||
register_check_parameters(
|
||||
subgroup_os,
|
||||
"selinux",
|
||||
_("SELinux"),
|
||||
Dictionary(
|
||||
from cmk.gui.i18n import _
|
||||
from cmk.gui.valuespec import (
|
||||
Dictionary,
|
||||
# Integer,
|
||||
# TextInput,
|
||||
)
|
||||
from cmk.gui.plugins.wato.utils import (
|
||||
CheckParameterRulespecWithoutItem,
|
||||
rulespec_registry,
|
||||
RulespecGroupCheckParametersOperatingSystem,
|
||||
)
|
||||
|
||||
#def _item_valuespec_selinux():
|
||||
# return TextInput(title="SELinux state", help="SELinux state configuration")
|
||||
|
||||
def _parameter_valuespec_selinux():
|
||||
return Dictionary(
|
||||
elements = [
|
||||
( "modedisabled",
|
||||
MonitoringState(
|
||||
@ -23,8 +35,15 @@ register_check_parameters(
|
||||
title = _("State when SELinux file mode is permissive"),
|
||||
default_value = 2,
|
||||
)),
|
||||
]
|
||||
),
|
||||
None,
|
||||
match_type = "dict",
|
||||
)
|
||||
],
|
||||
)
|
||||
|
||||
rulespec_registry.register(
|
||||
CheckParameterRulespecWithoutItem(
|
||||
check_group_name="selinux",
|
||||
group=RulespecGroupCheckParametersOperatingSystem,
|
||||
match_type="dict",
|
||||
#item_spec=_item_valuespec_selinux,
|
||||
parameter_valuespec=_parameter_valuespec_selinux,
|
||||
title=lambda: _("SELinux states"),
|
||||
))
|
31
web/plugins/wato/selinuxbakery_bakery.py
Normal file
31
web/plugins/wato/selinuxbakery_bakery.py
Normal file
@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- encoding: utf-8; py-indent-offset: 4 -*-
|
||||
# 2024 Marius Pana <mp@spearhead.systems>
|
||||
|
||||
from cmk.gui.i18n import _
|
||||
from cmk.gui.plugins.wato import (
|
||||
HostRulespec,
|
||||
rulespec_registry,
|
||||
)
|
||||
from cmk.gui.cee.plugins.wato.agent_bakery.rulespecs.utils import RulespecGroupMonitoringAgentsAgentPlugins
|
||||
from cmk.gui.valuespec import (
|
||||
DropdownChoice
|
||||
)
|
||||
|
||||
|
||||
def _valuespec_agent_config_selinux():
|
||||
return DropdownChoice(
|
||||
title=_("Deploy SELinux (Linux)"),
|
||||
help=_("Hosts configured via this rule get the <tt>selinux</tt> plugin " "deployed."),
|
||||
choices=[
|
||||
(True, _("Deploy selinux plugin")),
|
||||
(None, _("Do not deploy selinux plugin")),
|
||||
],
|
||||
)
|
||||
|
||||
rulespec_registry.register(
|
||||
HostRulespec(
|
||||
group=RulespecGroupMonitoringAgentsAgentPlugins,
|
||||
name="agent_config:selinux",
|
||||
valuespec=_valuespec_agent_config_selinux,
|
||||
))
|
Loading…
Reference in New Issue
Block a user