Checks Reference
Complete reference of all 287 security checks. Each entry describes what is validated, why it matters, and the security consequences of a failed check.
AUTH — Users & Authentication
Validates user accounts, SSH configuration, sudo policies, and file permissions that control who can access the system and how they authenticate.
AUTH-001 SSH root login disabled CRITICAL
Verifies that PermitRootLogin is set to no in /etc/ssh/sshd_config and drop-in configs.
References: CIS Benchmark 5.2.10, DISA STIG V-72247
AUTH-002 SSH password authentication disabled HIGH
Checks that PasswordAuthentication is set to no, requiring key-based authentication only.
References: CIS Benchmark 5.2.15
AUTH-003 Only root has UID 0 CRITICAL
Scans /etc/passwd for any account besides root with UID 0.
References: CIS Benchmark 6.2.2
AUTH-004 No users with empty password CRITICAL
Reads /etc/shadow to find accounts with an empty password hash field.
References: CIS Benchmark 6.2.1
AUTH-005 System accounts have nologin shell HIGH
Verifies that system accounts (UID < 1000) use /sbin/nologin or /bin/false as their shell.
www-data, mysql, or nobody exist to run services with limited privileges. If these accounts have a real login shell, an attacker who compromises a service can pivot to an interactive session, install tools, and establish persistence. Nologin shells prevent this lateral movement.References: CIS Benchmark 5.5.2
AUTH-006 No excessive NOPASSWD in sudoers HIGH
Scans /etc/sudoers and /etc/sudoers.d/ for NOPASSWD directives.
NOPASSWD entries allow users to execute commands as root without re-authenticating. If an attacker compromises a user session (stolen SSH key, session hijacking), they inherit passwordless root access. Every NOPASSWD entry is a potential privilege escalation path that should be minimized and audited.References: CIS Benchmark 5.3.4
AUTH-007 Sensitive auth files have correct permissions HIGH
Validates /etc/passwd (644), /etc/shadow (640), and /etc/group (644).
/etc/shadow contains password hashes — if world-readable, any user can copy the hashes and crack them offline at their leisure. Incorrect permissions on /etc/passwd could allow modification of user accounts. These files are the foundation of Linux authentication.References: CIS Benchmark 6.1.2–6.1.4
AUTH-008 su restricted via pam_wheel MEDIUM
Checks /etc/pam.d/su for an active pam_wheel.so requirement.
pam_wheel.so, any user who knows root's password can use su to become root. Restricting su to the wheel group limits who can even attempt to escalate, adding a layer of defense even if root's password is leaked.References: CIS Benchmark 5.6
PAM — Password Policies
Validates PAM (Pluggable Authentication Modules) configuration for password strength, reuse prevention, and account lockout policies.
PAM-001 Password quality enforced via pam_pwquality MEDIUM
Verifies pam_pwquality is enabled and configured with minlen ≥ 14 and minclass ≥ 4.
References: CIS Benchmark 5.4.1
PAM-002 Password reuse prevention configured MEDIUM
Checks pam_pwhistory or pam_unix with remember ≥ 5.
References: CIS Benchmark 5.4.3
PAM-003 Account lockout after failed attempts HIGH
Validates pam_faillock is configured with deny ≤ 5 and unlock_time ≥ 900 seconds.
References: CIS Benchmark 5.4.2, DISA STIG V-71943
PAM-004 PAM module ordering correct MEDIUM
Ensures pam_faillock appears before pam_unix in the auth stack.
pam_unix processes the authentication attempt before pam_faillock, the lockout mechanism is bypassed entirely — failed attempts are never counted. This is a subtle misconfiguration that completely negates account lockout protection.References: CIS Benchmark 5.4.2
PAM-005 Password expiration configured LOW
Validates /etc/login.defs: PASS_MAX_DAYS ≤ 365, PASS_MIN_DAYS ≥ 1, PASS_WARN_AGE ≥ 7.
PASS_MIN_DAYS prevents users from cycling through passwords to return to their favorite.References: CIS Benchmark 5.5.1
NET — Network & Firewall
Evaluates network security: firewall status, exposed ports, IP forwarding, DNS security, and SNMP configuration.
NET-001 Firewall is active CRITICAL
Detects active firewall via ufw, nftables, or iptables with loaded rules.
References: CIS Benchmark 3.5.1, DISA STIG V-72315
NET-002 No unnecessary open ports HIGH
Parses /proc/net/tcp and /proc/net/tcp6 to list all listening TCP ports.
References: CIS Benchmark 3.5.4
NET-003 IP forwarding disabled MEDIUM
Checks net.ipv4.ip_forward and net.ipv6.conf.all.forwarding are 0.
References: CIS Benchmark 3.2.1
NET-004 Services not bound to 0.0.0.0 MEDIUM
Identifies services listening on all interfaces (0.0.0.0) instead of localhost or specific IPs.
NET-005 DNS resolvers configured LOW
Verifies nameserver entries exist in /etc/resolv.conf.
NET-006 DNSSEC validation enabled LOW
Checks DNSSEC=yes in systemd-resolved or presence of Unbound resolver.
NET-007 DNS over TLS/HTTPS configured LOW
Verifies DNSOverTLS=yes or opportunistic in systemd-resolved.
NET-008 IPv6 disabled or properly configured MEDIUM
Checks if IPv6 is disabled or, if enabled, that Router Advertisements are rejected (accept_ra=0).
NET-009 SNMP v1/v2c disabled HIGH
Checks /etc/snmp/snmpd.conf for rocommunity/rwcommunity directives (v1/v2c).
References: CIS Benchmark 3.6
NET-010 Default SNMP community strings removed CRITICAL
Checks for public and private community strings in snmpd.conf.
rwcommunity private, an attacker can modify device configurations remotely. This is one of the most common and easily exploited misconfigurations in network devices.References: CVE-2002-0012, CVE-2002-0013
NET-011 SNMP removed if unused LOW
Verifies snmpd is not installed or not running when not needed.
SVC — Services & Processes
Audits running services and daemons — identifies insecure protocols, validates time synchronization, checks critical security services, and reviews mail server configuration.
SVC-001 No insecure services running CRITICAL
Detects telnet, rsh, rlogin, xinetd, tftp, and vsftpd services.
References: CIS Benchmark 2.2.x, DISA STIG V-72239
SVC-002 SSH ciphers and timeouts hardened HIGH
Checks for weak ciphers (3DES, Blowfish, Arcfour), weak MACs (MD5, SHA1-96), and idle session timeouts.
SVC-003 NTP/chrony synchronized MEDIUM
Verifies system clock is NTP synchronized via timedatectl.
SVC-004 NTP daemon not running as root LOW
Checks that chrony/ntpd runs as a dedicated user, not root.
_chrony) limits the blast radius of a compromise to the NTP service only. This follows the principle of least privilege.
SVC-005 NTS enabled LOW
Checks chrony for Network Time Security (NTS) authentication.
SVC-006 Time sources are trusted LOW
Verifies NTP sources are reachable and selected via chronyc sources.
SVC-007 Critical services active HIGH
Ensures sshd and intrusion prevention (fail2ban/crowdsec) are running.
SVC-008 No unnecessary root processes MEDIUM
Lists processes running as UID 0 that are not in the expected set (systemd, sshd, cron, etc.).
SVC-009 MTA configured as local-only HIGH
Verifies Postfix inet_interfaces = loopback-only.
SVC-010 MTA is not an open relay CRITICAL
Checks Postfix mynetworks does not include 0.0.0.0/0.
SVC-011 Root mail forwarded LOW
Verifies root mail alias in /etc/aliases forwards to a monitored account.
SVC-012 No desktop environment installed MEDIUM
Detects GDM, LightDM, SDDM, or graphical.target as default.
SVC-013 Automount disabled MEDIUM
Checks that autofs is not running.
FS — Filesystem & Permissions
Validates filesystem permissions, SUID/SGID binaries, mount options, and partition layout to prevent privilege escalation and unauthorized access.
FS-001 No unnecessary SUID/SGID files HIGH
Finds SUID/SGID binaries not in the known-safe list (sudo, passwd, mount, etc.).
References: CIS Benchmark 6.1.13–6.1.14
FS-002 No world-writable files outside /tmp HIGH
Searches the filesystem for files with world-write permission (mode 0002) outside temporary directories.
References: CIS Benchmark 6.1.10
FS-003 Sticky bit on /tmp and /var/tmp HIGH
Verifies the sticky bit is set on world-writable directories.
/tmp, this enables symlink attacks — an attacker replaces a temporary file with a symlink to a critical system file, causing a privileged process to overwrite or corrupt it.References: CIS Benchmark 1.1.22
FS-004 Sensitive partitions have restrictive mount options MEDIUM
Validates nodev, nosuid, noexec on /tmp, /var/tmp, /home.
noexec prevents execution of binaries from the partition, blocking attackers from running downloaded malware. nosuid prevents SUID elevation from user-writable areas. nodev prevents creation of device files that could access hardware directly. Together, these mount options significantly limit post-exploitation capabilities.
FS-005 /dev/shm mounted with nodev,nosuid,noexec MEDIUM
Validates shared memory tmpfs mount options.
/dev/shm is a world-writable tmpfs commonly used by attackers to stage and execute malware because it resides in RAM and leaves no disk trace. Adding noexec prevents direct execution from shared memory, forcing attackers to use more detectable techniques.
FS-006 Home directories not world-readable MEDIUM
Checks /home/* for world-readable/writable permissions.
FS-007 No orphaned files LOW
Finds files without a valid owner or group in /usr, /etc, /var.
FS-008 Separate partitions for key directories MEDIUM
Verifies /tmp, /var, /var/log, /var/log/audit, /var/tmp, /home are separate mount points.
/var/log) from consuming all space and crashing the entire system. They also enable per-partition mount options (noexec, nosuid) and quotas for fine-grained security control.References: CIS Benchmark 1.1.x
FS-009 /tmp on separate partition or tmpfs MEDIUM
Checks if /tmp is a dedicated mount point.
/tmp partition allows enforcing noexec,nosuid,nodev and prevents temporary file abuse from affecting the root filesystem. Using tmpfs also ensures temporary files are cleared on reboot.FS-010 /var/tmp with nodev,nosuid,noexec MEDIUM
Validates /var/tmp mount options.
/tmp, /var/tmp persists across reboots. Attackers use it to stash tools and maintain persistence. Restrictive mount options limit what can be done from this location.FS-011 systemd tmp.mount enabled LOW
Checks if tmp.mount is active when /tmp is not a separate partition.
tmp.mount creates a tmpfs for /tmp, ensuring temporary files are RAM-backed, size-limited, and cleared on reboot — even without a dedicated partition.FS-012 Temporary file cleanup configured LOW
Verifies systemd-tmpfiles-clean.timer is active.
LOG — Logging & Auditing
Validates that system logging, audit trails, and file integrity monitoring are properly configured. Logging is the foundation of incident detection and forensic investigation.
LOG-001 Syslog/journald active CRITICAL
Verifies rsyslog, syslog-ng, or systemd-journald is running.
References: CIS Benchmark 4.2.1, DISA STIG V-72077
LOG-002 auditd installed and running HIGH
Checks the auditd service is active.
References: CIS Benchmark 4.1.1, DISA STIG V-72081
LOG-003 Audit rules for sensitive files HIGH
Verifies audit rules watch /etc/passwd, /etc/shadow, and /etc/sudoers.
LOG-004 Log rotation configured MEDIUM
Checks /etc/logrotate.conf exists.
LOG-005 Log files not world-readable MEDIUM
Verifies files in /var/log are not world-readable.
LOG-006 AIDE or file integrity tool installed HIGH
Detects AIDE, Tripwire, Samhain, or OSSEC.
/usr/bin/ssh with a backdoored version goes undetected. FIM is required by PCI DSS Requirement 11.5 and most security frameworks.References: CIS Benchmark 1.3.1
LOG-007 AIDE database initialized MEDIUM
Checks for /var/lib/aide/aide.db.
LOG-008 AIDE checks scheduled MEDIUM
Looks for AIDE cron jobs in /etc/cron.daily or /etc/crontab.
LOG-009 AIDE covers critical paths MEDIUM
Verifies AIDE config monitors /bin, /sbin, /lib, /etc, /boot.
PKG — Packages & Updates
Ensures the system is patched against known vulnerabilities and uses secure package repositories.
PKG-001 No pending security updates HIGH
Checks apt or dnf for pending security patches.
References: CIS Benchmark 1.9
PKG-002 Package repositories use HTTPS MEDIUM
Validates apt sources and yum repos use https://.
PKG-003 Kernel is up to date HIGH
Checks for /var/run/reboot-required indicating a pending kernel update.
PKG-004 Automatic security updates enabled MEDIUM
Verifies unattended-upgrades or dnf-automatic is active.
HARD — Kernel Hardening
Validates kernel security parameters, module restrictions, and exploit mitigations that harden the system against common attack techniques.
HARD-001 Login banner configured LOW
Checks /etc/issue and /etc/issue.net have warning content.
HARD-002 Core dumps disabled MEDIUM
Verifies core dumps are disabled via kernel configuration or limits.conf.
HARD-003 ASLR enabled HIGH
Checks kernel.randomize_va_space = 2 (full randomization).
References: CIS Benchmark 1.6.2
HARD-004 dmesg restricted MEDIUM
Verifies kernel.dmesg_restrict = 1.
HARD-005 ptrace restricted MEDIUM
Checks kernel.yama.ptrace_scope ≥ 1.
ptrace allows a process to inspect and modify another process's memory. Without restrictions, any user can attach to other users' processes to steal credentials, inject code, or bypass security controls. Yama ptrace scope limits this to parent processes only.HARD-006 /proc hardened MEDIUM
Verifies /proc is mounted with hidepid option.
hidepid, any user can see every process running on the system — including command-line arguments that may contain passwords, API keys, or other secrets passed as arguments. hidepid=2 hides processes owned by other users.HARD-007 Swap encrypted or absent LOW
Checks if swap uses dm-crypt/LUKS encryption.
HARD-008 Unused filesystem modules blacklisted MEDIUM
Verifies cramfs, freevxfs, hfs, hfsplus, jffs2, squashfs, udf are blocked.
HARD-009 USB storage disabled MEDIUM
Checks usb-storage module is blacklisted.
HARD-010 Wireless modules disabled LOW
Checks for wireless interfaces in /sys/class/net/.
HARD-011 Firewire/Thunderbolt DMA disabled MEDIUM
Verifies firewire-core and thunderbolt modules are blacklisted.
HARD-012 Bluetooth disabled LOW
Checks bluetooth service is not active.
BOOT — Boot Security & MAC
Validates bootloader protection, Secure Boot, and mandatory access control (SELinux/AppArmor) that protect the system during startup and enforce security policies at runtime.
BOOT-001 GRUB password set HIGH
Checks grub.cfg for password_pbkdf2 or set superusers.
BOOT-002 Bootloader config permissions HIGH
Verifies grub.cfg is mode 0600 owned by root.
grub.cfg is readable, users can see the GRUB password hash and attempt offline cracking. If writable, they can modify boot parameters to gain root access on next reboot.BOOT-003 Secure Boot enabled MEDIUM
Checks Secure Boot status via mokutil or EFI variables.
BOOT-004 Single-user mode requires authentication HIGH
Verifies root has a password set in /etc/shadow.
BOOT-005 SELinux or AppArmor installed HIGH
Detects AppArmor or SELinux availability.
References: CIS Benchmark 1.7.1, DISA STIG V-71989
BOOT-006 MAC in enforcing mode HIGH
Checks SELinux is Enforcing or AppArmor has profiles in enforce mode.
BOOT-007 No unconfined processes MEDIUM
Runs aa-unconfined to find processes without MAC profiles.
BOOT-008 No MAC denials in logs LOW
Checks dmesg for AppArmor DENIED or SELinux AVC denial messages.
CRON — Scheduled Jobs
Audits cron and at job permissions, reviews scheduled tasks for suspicious activity, and ensures access control uses whitelists.
CRON-001 Cron daemon enabled LOW
Verifies cron service is running.
CRON-002 /etc/crontab permissions MEDIUM
Validates /etc/crontab is mode 0600.
/etc/crontab is readable, attackers learn the schedule of security tasks (when AIDE runs, when backups happen) and can time their activities to avoid detection. If writable, they can add jobs that execute as root.CRON-003 Cron directories permissions MEDIUM
Checks /etc/cron.{hourly,daily,weekly,monthly} are mode 0700.
CRON-004 cron.allow exists, cron.deny removed MEDIUM
Verifies whitelist approach for cron access control.
CRON-005 at.allow exists, at.deny removed MEDIUM
Same whitelist verification for the at scheduler.
at command schedules one-time jobs. Without access control, any user can schedule commands — potentially for malicious purposes like time-bomb attacks or delayed data exfiltration.CRON-006 No suspicious cron jobs HIGH
Scans cron jobs for curl, wget, nc, bash -i, and similar patterns.
CRON-007 User crontabs reviewed LOW
Lists users with personal crontabs in /var/spool/cron/.
CRYPTO — TLS/SSL & Cryptography
Validates cryptographic configuration: certificates, TLS versions, cipher suites, private key protection, and hash algorithms.
CRYPTO-001 System crypto policy is not LEGACY HIGH
Checks RHEL/Fedora system-wide crypto policy via update-crypto-policies.
CRYPTO-002 No expired or expiring certificates HIGH
Scans PEM/CRT files in /etc/ssl/certs and /etc/pki/tls/certs for expiration.
CRYPTO-003 No self-signed certificates MEDIUM
Detects snakeoil and localhost certificates.
CRYPTO-004 TLS 1.0 and 1.1 disabled HIGH
Checks OpenSSL MinProtocol in /etc/ssl/openssl.cnf.
CRYPTO-005 No weak cipher suites HIGH
Lists OpenSSL ciphers and flags RC4, DES, 3DES, NULL, EXPORT, and anonymous suites.
CRYPTO-006 Certificate chains complete MEDIUM
Verifies CA certificates bundle is installed.
CRYPTO-007 Private key file permissions CRITICAL
Checks key files in /etc/ssl/private and /etc/pki/tls/private are mode ≤ 0600.
References: CIS Benchmark 1.8
CRYPTO-008 FIPS mode enabled MEDIUM
Checks /proc/sys/crypto/fips_enabled.
CRYPTO-009 No MD5/SHA1 in authentication HIGH
Scans /etc/shadow for $1$ (MD5) password hashes.
SEC — Secrets & Credentials
Detects exposed credentials in environment files, shell history, and configuration files with insecure permissions.
SEC-001 No secrets in environment variables HIGH
Scans /etc/environment and /etc/profile.d/ for PASSWORD=, API_KEY=, SECRET=, etc.
/proc/<pid>/environ. Secrets stored this way are trivially extractable. Use a secrets manager (Vault, AWS SSM) or file-based secrets with restrictive permissions instead.SEC-002 No passwords in shell history HIGH
Checks .bash_history and .zsh_history for password-like commands.
mysql -u root -pMyPassword are recorded in shell history in cleartext. Anyone who gains access to the user's account (or their home directory) can read these credentials. History files should be regularly cleared and HISTCONTROL=ignorespace set so sensitive commands prefixed with a space are not recorded.SEC-003 No credentials in world-readable files CRITICAL
Checks /etc/shadow, /etc/gshadow, /etc/security/opasswd permissions.
SEC-004 Credential file permissions correct HIGH
Verifies .pgpass, .my.cnf, .netrc, .aws/credentials are mode ≤ 0600.
CTR — Container Security
Audits Docker/Podman configuration, running containers, and container runtime security settings.
CTR-001 Docker/Podman detected INFO
Detects if a container runtime is installed.
CTR-002 Docker daemon configuration MEDIUM
Verifies /etc/docker/daemon.json exists.
CTR-003 Docker socket permissions HIGH
Checks /var/run/docker.sock is not world-accessible.
References: CIS Docker Benchmark 3.15
CTR-004 No containers running as root HIGH
Inspects running containers for User: "" or User: "0".
References: CIS Docker Benchmark 4.1
CTR-005 No privileged containers CRITICAL
Checks HostConfig.Privileged flag for all running containers.
References: CIS Docker Benchmark 5.4
CTR-006 Container resource limits MEDIUM
Verifies memory and CPU limits are set for running containers.
CTR-007 Docker content trust enabled MEDIUM
Checks DOCKER_CONTENT_TRUST=1 environment variable.
CTR-008 Inter-container communication restricted MEDIUM
Checks "icc": false in daemon.json.
CTR-009 Read-only root filesystem LOW
Checks HostConfig.ReadonlyRootfs for running containers.
CTR-010 Docker logging driver configured LOW
Verifies logging driver is not none.
CTR-011 Images from trusted registries MEDIUM
Lists container images and flags those from unknown registries.
RLIM — Resource Limits
Monitors system resource limits and disk usage to prevent denial of service and resource exhaustion.
RLIM-001 Open files limit LOW
Checks fs.file-max ≥ 65536.
RLIM-002 Max user processes limit MEDIUM
Verifies nproc is configured in /etc/security/limits.conf.
:(){ :|:& };:) that creates processes exponentially until the system crashes. Process limits contain the blast radius to a single user session.RLIM-003 Stack size limits LOW
Checks stack size configuration in limits.conf.
RLIM-004 No wildcard unlimited entries MEDIUM
Scans limits.conf for * ... unlimited entries.
RLIM-005 Root filesystem below 85% HIGH
Checks disk usage of /.
RLIM-006 Key directories have space MEDIUM
Checks /var, /var/log, and /tmp usage.
/var/log silently stops logging — the perfect cover for an attack. A full /tmp breaks applications that depend on temporary files. Monitoring individual directory usage catches problems before they cascade.RLIM-007 Inode usage not exhausted HIGH
Runs df -i and checks for usage above 85%.
NFS — Network Filesystems
Audits NFS exports, Samba shares, and related services to prevent unauthorized file access across the network.
NFS-001 NFS exports reviewed HIGH
Checks /etc/exports for world exports (*) and no_root_squash.
no_root_squash allows the remote root user to have root privileges on the NFS share, enabling them to create SUID binaries, modify sensitive files, and escalate privileges on the NFS server.NFS-002 NFSv3 disabled MEDIUM
Checks vers3=no in /etc/nfs.conf.
NFS-003 Samba config reviewed MEDIUM
Checks /etc/samba/smb.conf for guest ok = yes.
NFS-004 rpcbind disabled if unused MEDIUM
Checks if rpcbind runs without an active NFS server.
MAL — Rootkits & Malware
Verifies rootkit detection tools and antimalware solutions are installed and scheduled.
MAL-001 Rootkit scanner installed MEDIUM
Detects rkhunter or chkrootkit.
MAL-002 Rootkit scans scheduled MEDIUM
Looks for rootkit scanner cron jobs.
MAL-003 ClamAV installed LOW
Detects clamscan or clamdscan.
MAL-004 Antimalware definitions updated MEDIUM
Checks clamav-freshclam service or rkhunter version.
BAK — Backups
Validates that backup solutions are configured, encrypted, secured, and stored off-site — the last line of defense against data loss and ransomware.
BAK-001 Backup schedule exists HIGH
Detects backup tools (restic, borg, duplicity) and cron/timer schedules.
BAK-002 Backups are encrypted MEDIUM
Verifies backup tool supports encryption (borg, restic encrypt by default).
BAK-003 Backup files not world-readable HIGH
Checks permissions on common backup directories.
BAK-004 Off-site backup exists MEDIUM
Warns to verify backup repository is on a remote host.