Puppet Class: selinux::config
- Defined in:
- manifests/config.pp
Summary
Configure the system to use SELinux on the system.Overview
It is included in the main class ‘selinux`
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'manifests/config.pp', line 10
class selinux::config (
Optional[Enum['enforcing', 'permissive', 'disabled']] $mode = undef,
Optional[Enum['targeted', 'minimum', 'mls']] $type = undef,
) {
assert_private()
if ($mode == 'enforcing' and !$facts['os']['selinux']['enabled']) {
# lint:ignore:140chars
notice('SELinux is disabled. Forcing configuration to permissive to avoid problems. To disable this warning, explicitly set selinux::mode to permissive or disabled.')
# lint:endignore
$_real_mode = 'permissive'
} else {
$_real_mode = $mode
}
if $_real_mode {
if $facts['os']['family'] == 'Debian' and !$facts['os']['selinux']['enabled'] {
# Debian-based OSes also need to change the kernel boot parameters in the
# appropriate version of GRUB.
# See: https://wiki.debian.org/SELinux/Setup.
exec { 'activate-selinux':
command => '/usr/sbin/selinux-activate',
unless => shell_join(['/usr/bin/grep', '-q', '^GRUB_CMDLINE_LINUX=.*security=selinux', '/etc/default/grub']),
provider => 'shell',
}
}
file_line { "set-selinux-config-to-${_real_mode}":
path => '/etc/selinux/config',
line => "SELINUX=${_real_mode}",
match => '^SELINUX=\w+',
}
case $_real_mode {
'permissive', 'disabled': {
$sestatus = 'permissive'
if $_real_mode == 'disabled' and $facts['os']['selinux']['current_mode'] == 'permissive' {
notice('A reboot is required to fully disable SELinux. SELinux will operate in Permissive mode until a reboot')
}
}
'enforcing': {
$sestatus = 'enforcing'
}
default : {
fail('You must specify a mode (enforced, permissive, or disabled) for selinux operation')
}
}
# a complete relabeling is required when switching from disabled to
# permissive or enforcing. Ensure the autorelabel trigger file is created.
if $_real_mode in ['enforcing','permissive'] and !$facts['os']['selinux']['enabled'] {
file { '/.autorelabel':
ensure => 'file',
owner => 'root',
group => 'root',
# The contents of the file are interpreted on most OSes (at least EL7
# and Debian 10) as extra options for fixfiles. Anything else causes an
# argument error and a failure to relabel.
content => '',
}
}
exec { "change-selinux-status-to-${_real_mode}":
command => "setenforce ${sestatus}",
unless => "getenforce | grep -Eqi '${sestatus}|disabled'",
path => '/bin:/sbin:/usr/bin:/usr/sbin',
}
}
if $type {
file_line { "set-selinux-config-type-to-${type}":
path => '/etc/selinux/config',
line => "SELINUXTYPE=${type}",
match => '^SELINUXTYPE=\w+',
}
}
}
|