402 lines
16 KiB
INI
402 lines
16 KiB
INI
|
#
|
||
|
# SELinux Reference policy validation checks
|
||
|
#
|
||
|
# Note to users: This file is a good starting point for tightening your own
|
||
|
# policy. However, these checks are for the entire Reference Policy, i.e.,
|
||
|
# all modules are included in the policy. If you are using a subset of the
|
||
|
# modules, the best starting place is to review each of the checks and remove
|
||
|
# the types in the exempt lists that are not in your policy. Types that are
|
||
|
# in these lists but not in your policy will *NOT* cause sechecker to fail.
|
||
|
#
|
||
|
# Note to developers: In general, please avoid using attributes in the
|
||
|
# exempt lists. This will make it less likely for unexpected types to pass.
|
||
|
#
|
||
|
|
||
|
[PRIVILEGE-load_policy]
|
||
|
check_type = assert_te
|
||
|
desc = Verify only the load_policy program can load a SELinux policy update.
|
||
|
tclass = security
|
||
|
perms = load_policy
|
||
|
exempt_source = kernel_t # Kernel thread loading policy at boot
|
||
|
load_policy_t # SELinux policy loading tool
|
||
|
|
||
|
[PRIVILEGE-setbool]
|
||
|
check_type = assert_te
|
||
|
desc = Verify SELinux Booleans can be changed only by expected domains.
|
||
|
tclass = security
|
||
|
perms = setbool
|
||
|
exempt_source = cloud_init_t # VM configuration on initial boot
|
||
|
init_t
|
||
|
load_policy_t # Persist Boolean state across policy loads
|
||
|
puppet_t # Puppet can configure Booleans
|
||
|
secadm_t # Security admin role
|
||
|
semanage_t # SELinux management tool, including Booleans
|
||
|
sysadm_t # System admin role
|
||
|
|
||
|
[PRIVILEGE-setenforce]
|
||
|
check_type = assert_te
|
||
|
desc = Verify only expected domains can change SELinux to permissive mode.
|
||
|
tclass = security
|
||
|
perms = setenforce
|
||
|
exempt_source = cloud_init_t # VM configuration on initial boot
|
||
|
secadm_t # Security admin role
|
||
|
sysadm_t # System admin role
|
||
|
|
||
|
[PRIVILEGE-CAP_SYS_MODULE]
|
||
|
check_type = assert_te
|
||
|
desc = Verify only expected domains have CAP_SYS_MODULE (kernel module capability)
|
||
|
tclass = capability
|
||
|
perms = sys_module
|
||
|
exempt_source = init_t
|
||
|
kernel_t
|
||
|
kmod_t
|
||
|
spc_t
|
||
|
systemd_modules_load_t
|
||
|
udev_t
|
||
|
|
||
|
[PRIVILEGE-module_load]
|
||
|
check_type = assert_te
|
||
|
desc = Verify only expected domains can directly load kernel modules
|
||
|
tclass = system
|
||
|
perms = module_load
|
||
|
# This list should match the above PRIVILEGE-CAP_SYS_MODULE exempt_source list.
|
||
|
exempt_source = init_t
|
||
|
kernel_t
|
||
|
kmod_t
|
||
|
spc_t
|
||
|
systemd_modules_load_t
|
||
|
udev_t
|
||
|
|
||
|
[PRIVILEGE-CAP_SYS_ADMIN]
|
||
|
check_type = assert_te
|
||
|
desc = Verify only expected domains have CAP_SYS_ADMIN
|
||
|
tclass = capability
|
||
|
perms = sys_admin
|
||
|
# CAP_SYS_ADMIN is a kitchen sink of privileges, which means many privileged domains need it.
|
||
|
exempt_source = acpi_t
|
||
|
acpid_t
|
||
|
afs_t
|
||
|
auditadm_sudo_t # Conditional access (allow_polyinstantiation)
|
||
|
automount_t
|
||
|
bluetooth_t
|
||
|
bootloader_t # Install bootloader
|
||
|
cachefilesd_t
|
||
|
cgclear_t # Move processes out of cgroups
|
||
|
cgconfig_t # Configure cgroups
|
||
|
cgmanager_t # Container cgroup manager
|
||
|
cgred_t # Move processes to cgroups based on configurable rules
|
||
|
chromium_sandbox_t
|
||
|
cockpit_session_t
|
||
|
container_engine_t
|
||
|
consoletype_t
|
||
|
container_t # Conditional access (container_use_sysadmin or container_use_host_all_caps)
|
||
|
corosync_t
|
||
|
crio_t
|
||
|
crond_t # Conditional access (allow_polyinstantiation)
|
||
|
cryfs_t
|
||
|
cupsd_t
|
||
|
devicekit_disk_t
|
||
|
devicekit_power_t
|
||
|
disk_munin_plugin_t
|
||
|
dmesg_t # Clear kernel printk buffer/set kernel log level
|
||
|
dockerd_t # Container engine (namespacing)
|
||
|
dockerd_user_t # Container engine (namespacing)
|
||
|
dphysswapfile_t # Configure swap files
|
||
|
entropyd_t # Add entropy to the system
|
||
|
fapolicyd_t
|
||
|
fsadm_t
|
||
|
fsdaemon_t
|
||
|
ftpd_t
|
||
|
getty_t # Configure tty devices
|
||
|
glusterd_t
|
||
|
gpm_t
|
||
|
hostname_t # Set hostname
|
||
|
hypervvssd_t
|
||
|
ifconfig_t
|
||
|
init_t
|
||
|
initrc_t
|
||
|
iscsid_t
|
||
|
kdump_t
|
||
|
kernel_t # Kernel threads have all caps
|
||
|
klogd_t
|
||
|
kubeadm_t
|
||
|
lircd_t
|
||
|
local_login_t # Conditional access (allow_polyinstantiation)
|
||
|
lvm_t # Configure logical volumes
|
||
|
mcelog_t # Decode and log CPU machine check exceptions
|
||
|
mdadm_t # Configure software RAID
|
||
|
modemmanager_t
|
||
|
mon_local_test_t
|
||
|
mount_t # (un)mount filesystems
|
||
|
nagios_checkdisk_plugin_t
|
||
|
newrole_t # Conditional access (allow_polyinstantiation)
|
||
|
nfsd_t
|
||
|
ntop_t
|
||
|
plymouthd_t
|
||
|
podman_t
|
||
|
podman_user_t
|
||
|
postgresql_t
|
||
|
pppd_t
|
||
|
quota_t # Configure filesystem quotas
|
||
|
remote_login_t # Conditional access (allow_polyinstantiation)
|
||
|
resmgrd_t
|
||
|
rlogind_t # Conditional access (allow_polyinstantiation)
|
||
|
rngd_t
|
||
|
rootlesskit_t # Container engine (namespacing)
|
||
|
rpcd_t
|
||
|
rpm_script_t # Package manager post-install scripts
|
||
|
rshd_t # Conditional access (allow_polyinstantiation)
|
||
|
secadm_sudo_t # Conditional access (allow_polyinstantiation)
|
||
|
seunshare_t # Create new flesystem namespaces
|
||
|
shorewall_t
|
||
|
smbd_t
|
||
|
smbmount_t # Mount SMB and CIFS filesystems
|
||
|
sosreport_t
|
||
|
spc_t
|
||
|
sshd_t # Conditional access (allow_polyinstantiation)
|
||
|
sssd_t
|
||
|
staff_sudo_t # Conditional access (allow_polyinstantiation)
|
||
|
sulogin_t
|
||
|
sysadm_t # System admin role
|
||
|
sysadm_sudo_t # Conditional access (allow_polyinstantiation)
|
||
|
syslogd_t
|
||
|
sysstat_t
|
||
|
systemd_generator_t
|
||
|
systemd_homework_t # Mount home directory images
|
||
|
systemd_hostnamed_t # Set hostname
|
||
|
systemd_logind_t
|
||
|
systemd_machine_id_setup_t
|
||
|
systemd_nspawn_t
|
||
|
systemd_sysctl_t
|
||
|
systemd_tmpfiles_t
|
||
|
systemd_user_runtime_dir_t
|
||
|
tuned_t
|
||
|
udev_t
|
||
|
user_sudo_t # Conditional access (allow_polyinstantiation)
|
||
|
vbetool_t
|
||
|
virtd_t # libvirt virtualization manager
|
||
|
virtd_lxc_t # libvirt LXC container engine (namespacing)
|
||
|
vmware_t # VMWare virtualization manager
|
||
|
watchdog_t
|
||
|
xserver_t
|
||
|
zed_t # ZFS events daemon (filesystem event monitoring)
|
||
|
zfs_t # ZFS filesystem tools
|
||
|
|
||
|
[PRIVILEGE-CAP_SYS_RAWIO]
|
||
|
check_type = assert_te
|
||
|
desc = Verify only expected domains can use CAP_SYS_RAWIO
|
||
|
tclass = capability
|
||
|
perms = sys_rawio
|
||
|
exempt_source = abrt_t # Conditional access (allow_raw_memory_access)
|
||
|
blkmapd_t
|
||
|
bootloader_t # Install bootloader, raw disk access
|
||
|
cdrecord_t # Burn optical media
|
||
|
container_t # Conditional access (container_use_host_all_caps)
|
||
|
cpucontrol_t
|
||
|
cupsd_t
|
||
|
devicekit_disk_t
|
||
|
disk_munin_plugin_t
|
||
|
dmidecode_t
|
||
|
fsadm_t
|
||
|
fsdaemon_t
|
||
|
hddtemp_t
|
||
|
hwclock_t
|
||
|
init_t
|
||
|
initrc_t
|
||
|
kernel_t # Kernel threads have all caps
|
||
|
kdump_t
|
||
|
klogd_t # Conditional access (allow_raw_memory_access)
|
||
|
lvm_t
|
||
|
mcelog_t # Conditional access (allow_raw_memory_access)
|
||
|
mount_t
|
||
|
munin_t
|
||
|
nagios_checkdisk_plugin_t
|
||
|
rasdaemon_t # Monitors ECC errors
|
||
|
resmgrd_t # Device resource manager
|
||
|
rpm_script_t # Package manager post-install scripts
|
||
|
smbmount_t
|
||
|
sosreport_t # Conditional access (allow_raw_memory_access)
|
||
|
spc_t
|
||
|
sysadm_t # System admin role
|
||
|
udev_t
|
||
|
vbetool_t # Conditional access (allow_raw_memory_access)
|
||
|
vmware_t
|
||
|
xdm_t
|
||
|
xserver_t
|
||
|
zfs_t
|
||
|
|
||
|
[PRIVILEGE-CAP_NET_ADMIN]
|
||
|
check_type = assert_te
|
||
|
desc = Verify only expected domains can use CAP_NET_ADMIN.
|
||
|
tclass = capability
|
||
|
perms = net_admin
|
||
|
exempt_source = arpwatch_t
|
||
|
asterisk_t
|
||
|
avahi_t
|
||
|
bird_t
|
||
|
blueman_t
|
||
|
bluetooth_t
|
||
|
brctl_t
|
||
|
cgred_t
|
||
|
chronyd_t # Conditional access (chronyd_hwtimestamp)
|
||
|
condor_startd_t
|
||
|
container_engine_t
|
||
|
container_t # Conditional access (container_use_host_all_caps)
|
||
|
crio_t
|
||
|
ctdbd_t
|
||
|
devicekit_disk_t
|
||
|
devicekit_power_t
|
||
|
dhcpc_t
|
||
|
dnsmasq_t
|
||
|
dockerd_t
|
||
|
dockerd_user_t
|
||
|
dpkg_script_t
|
||
|
drbd_t
|
||
|
fcoemon_t
|
||
|
firewalld_t
|
||
|
hostapd_t
|
||
|
hypervkvpd_t
|
||
|
hypervvssd_t
|
||
|
ifconfig_t
|
||
|
ifplugd_t
|
||
|
init_t
|
||
|
initrc_t
|
||
|
iodined_t
|
||
|
ipsec_t
|
||
|
ipsec_mgmt_t
|
||
|
ipsec_supervisor_t
|
||
|
iptables_t
|
||
|
iscsid_t
|
||
|
kernel_t
|
||
|
kismet_t
|
||
|
krb5kdc_t
|
||
|
kubeadm_t
|
||
|
kubelet_t
|
||
|
l2tpd_t
|
||
|
lldpad_t
|
||
|
lvm_t
|
||
|
minissdpd_t
|
||
|
modemmanager_t
|
||
|
ncftool_t
|
||
|
ndc_t
|
||
|
netlabel_mgmt_t
|
||
|
netutils_t
|
||
|
NetworkManager_t
|
||
|
nsd_t
|
||
|
ntop_t
|
||
|
openvpn_t
|
||
|
openvswitch_t
|
||
|
pegasus_t
|
||
|
podman_t
|
||
|
podman_user_t
|
||
|
portslave_t
|
||
|
pppd_t
|
||
|
pptp_t
|
||
|
psad_t
|
||
|
racoon_t
|
||
|
radvd_t
|
||
|
rkhunter_t
|
||
|
rootlesskit_t
|
||
|
rpm_script_t
|
||
|
setkey_t
|
||
|
shorewall_t
|
||
|
snmpd_t
|
||
|
snort_t
|
||
|
sosreport_t
|
||
|
spc_t
|
||
|
squid_t # Conditional access (squid_use_tproxy)
|
||
|
sssd_t
|
||
|
sysadm_t
|
||
|
syslogd_t # Conditional network config (logging_syslog_can_network)
|
||
|
system_cronjob_t
|
||
|
system_munin_plugin_t
|
||
|
systemd_cgroups_t
|
||
|
systemd_networkd_t
|
||
|
systemd_nspawn_t
|
||
|
systemd_sysctl_t
|
||
|
systemd_tmpfiles_t
|
||
|
traceroute_t
|
||
|
udev_t
|
||
|
ulogd_t
|
||
|
virt_bridgehelper_t
|
||
|
virtd_t
|
||
|
virtd_lxc_t
|
||
|
vpnc_t
|
||
|
watchdog_t
|
||
|
wireguard_t
|
||
|
wireshark_t
|
||
|
xm_t
|
||
|
zebra_t
|
||
|
|
||
|
[PRIVILEGE-setcurrent]
|
||
|
check_type = assert_te
|
||
|
desc = Verify only the expected domains can change their process label.
|
||
|
tclass = process
|
||
|
perms = setcurrent
|
||
|
exempt_source = chromium_t # Changes MCS level for each tab
|
||
|
kernel_t # When systemd loads the policy it has the kernel_t label and changes context to init_t
|
||
|
sepgsql_ranged_proc_t # Changes MCS level
|
||
|
|
||
|
[NONTRANQUILITY-systemd]
|
||
|
check_type = assert_te
|
||
|
desc = Verify dynamic transition allowed by PRIVILEGE-setcurrent test can only
|
||
|
go from kernel_t to init_t (systemd)
|
||
|
source = kernel_t
|
||
|
tclass = process
|
||
|
perms = dyntransition
|
||
|
# kernel_t -> kernel_t and kernel_t -> init_t
|
||
|
exempt_target = init_t kernel_t
|
||
|
|
||
|
[INTEGRITY-readonly-executables]
|
||
|
check_type = ro_execs
|
||
|
#
|
||
|
# This is an expensive check, but this security goal is important to verify.
|
||
|
# To tighten your policy, first try to remove entries from exempt_file, as it
|
||
|
# is very broad in terms of this check, as the type is simply ignored both for
|
||
|
# write checks and for execute checks.
|
||
|
#
|
||
|
# Next, try to remove entries from exempt_write_domain. These are domains that
|
||
|
# are accepted as able to write executables.
|
||
|
#
|
||
|
# If you don't have unconfined domains, you should remove the
|
||
|
# exempt_exec_domain option. The only purpose for this option is because all
|
||
|
# file types would be considered executable otherwise.
|
||
|
#
|
||
|
# When you have a failure on this test, first verify that the file type is
|
||
|
# supposed to be executable; if not, remove the exec access. If it is supposed
|
||
|
# to be executable, verify domains that have write access are legitimate
|
||
|
# writers. If the access is legitimate, e.g. by a package manager, add the
|
||
|
# domain to exempt_write_domain. If not, remove the write access.
|
||
|
#
|
||
|
desc = Enforce executable files (including libraries) are not writable
|
||
|
except from expected domains, such as package managers.
|
||
|
exempt_file = container_file_t # Container files don't distinguish executables.
|
||
|
container_ro_file_t # Container files don't distinguish executables.
|
||
|
gstreamer_orcexec_t # OIL Runtime Compiler code optimizer is used by pulseaudio
|
||
|
httpd_script_exec_type # Web admin can edit scripts
|
||
|
httpdcontent # Web admin can edit scripts, webalizer output, etc.
|
||
|
noxattrfs # Filesystem does not support xattrs; executable by users, can't distinguish executables
|
||
|
user_home_content_type # User home content, users can install apps in own home, write scripts, etc. JIT compiles, and libFFI use.
|
||
|
exempt_write_domain = cloud_init_t # Can conditionally manage all non-auth files (cloudinit_manage_non_security)
|
||
|
dpkg_t # Package manager
|
||
|
dpkg_script_t # Package manager
|
||
|
gcc_config_t # Gentoo compiler chooser
|
||
|
init_t # Systemd can create file mountpoints
|
||
|
ftpd_t # Can conditionally manage all non-auth files (allow_ftpd_full_access)
|
||
|
kernel_t # Can conditionally manage all non-auth files (nfs_export_all_rw)
|
||
|
nfsd_t # Can conditionally manage all non-auth files (nfs_export_all_rw)
|
||
|
nmbd_t # Can conditionally manage all non-auth files (samba_export_all_rw)
|
||
|
prelink_t # Prelinking executables
|
||
|
portage_t # Package manager
|
||
|
puppet_t # Can conditionally manage all non-auth files (puppet_manage_all_files)
|
||
|
rpm_t # Package manager
|
||
|
rpm_script_t # Package manager
|
||
|
sftpd_t # Can conditionally manage all non-auth files (sftpd_full_access)
|
||
|
smbd_t # Can conditionally manage all non-auth files (samba_export_all_rw)
|
||
|
systemd_tmpfiles_t # Can conditionally manage all non-auth files (systemd_tmpfiles_manage_all)
|
||
|
sysadm_t # Privileged admin domain
|
||
|
files_unconfined_type
|
||
|
# files_unconfined_type: Unconfined; can execute anything; muddies the water on what is
|
||
|
# intended to be executable by constrained domains.
|
||
|
exempt_exec_domain = files_unconfined_type
|