🚨 CMMC Phase One started November 10! Here's everything you need to know →

How to Build a Least-Functionality Configuration Checklist for Windows and Linux to Meet NIST SP 800-171 REV.2 / CMMC 2.0 Level 2 - Control - CM.L2-3.4.6

Step-by-step guidance to create and implement a least-functionality configuration checklist for Windows and Linux systems that satisfies NIST SP 800-171 Rev.2 / CMMC 2.0 Level 2 (CM.L2-3.4.6).

April 09, 2026
5 min read

Share:

Schedule Your Free Compliance Consultation

Feeling overwhelmed by compliance requirements? Not sure where to start? Get expert guidance tailored to your specific needs in just 15 minutes.

Personalized Compliance Roadmap
Expert Answers to Your Questions
No Obligation, 100% Free

Limited spots available!

This post explains how to create a practical least-functionality configuration checklist for Windows and Linux hosts to satisfy NIST SP 800-171 Rev.2 / CMMC 2.0 Level 2 control CM.L2-3.4.6, and shows how a small business can implement, document, and evidence the configuration changes with low overhead.

Understanding CM.L2-3.4.6 and the Compliance Framework objective

CM.L2-3.4.6 requires configuring systems to provide only essential capabilities, reducing attack surface and limiting opportunities for adversaries — "least functionality." For Compliance Framework mapping, treat this control as a configuration baseline requirement: create a documented baseline, apply it consistently, and retain artifacts showing compliant state (configuration files, GPOs, automation playbooks, output of discovery scans, and exception records).

Step 1 — Discovery and build an inventory baseline

Start with a discovery phase: enumerate installed packages, enabled services, listening ports, and installed Windows features across endpoints and servers. For small businesses (10–100 endpoints), this can be done with lightweight tools and scripts and then centrally recorded in your Compliance Framework. Evidence items: CSV/XLS inventory, output from network scans, and a justification matrix that ties each installed capability to business need.

Practical discovery commands and actions

  • Windows: run PowerShell inventory - Get-WindowsOptionalFeature -Online; Get-Service | Where-Object {$_.StartType -ne 'Disabled'}; Get-WmiObject -Class Win32_Product (careful: can be slow) or use Inventory from Intune/SCCM.
  • Linux: use package queries and systemd - dpkg-query -l or rpm -qa; systemctl list-unit-files --state=enabled; ss -tulnp to list listening sockets.
  • Network: run a credentialed Nessus/OpenVAS or Nmap scan to discover open ports and services.

Step 2 — Create the least-functionality checklist (Windows & Linux)

Translate discovery into a checklist of “allowed” capabilities and a separate list of “disallowed/removed/disabled” items. The checklist should include: packages to remove, services to disable, optional OS features to turn off, firewall rules to implement, and application execution controls to enforce. For each item record: rationale, owner, test plan, rollback steps, and evidence artifact name and location in Compliance Framework.

Windows-specific checklist items (examples)

  • Remove or disable unused Windows Features (example commands: Get-WindowsOptionalFeature -Online; use Disable-WindowsOptionalFeature -Online -FeatureName <name> or DISM /Online /Disable-Feature /FeatureName:<name>).
  • Disable unnecessary services: review Get-Service and use Set-Service -Name <svc> -StartupType Disabled; stop with Stop-Service <svc>.
  • Enable application control: implement AppLocker or Windows Defender Application Control (WDAC) with a default-deny policy for unknown binaries.
  • Harden remote access: disable Telnet/SMBv1, turn off RDP if not needed, or restrict RDP with NLA and firewall rules; use GPOs to manage settings centrally.
  • Use Controlled Folder Access, Defender Exploit Guard, and limit PowerShell usage (constrained language mode or logging and script block logging enabled).

Linux-specific checklist items (examples)

  • Remove unnecessary packages: apt-get purge --auto-remove <pkg> or yum/dnf remove <pkg>; prioritize removing compilers and development tools from production systems.
  • Disable unused services: systemctl disable --now <service>; mask units if necessary to prevent re-enablement (systemctl mask <service>).
  • Harden SSH: in /etc/ssh/sshd_config set PermitRootLogin no, PasswordAuthentication no, UsePAM yes, and use AllowUsers or Match blocks to restrict logins; restart sshd and test access from a separate session before disconnecting.
  • Enable local firewall: ufw default deny incoming; ufw allow from <trusted> to any port 22 proto tcp (or use firewalld/iptables with explicit deny-by-default).
  • Enforce Mandatory Access Control: install and enforce SELinux (Enforcing) or AppArmor profiles for key services.

Step 3 — Automate, enforce, and document

For sustainable compliance, automate enforcement with configuration management (Ansible, Puppet, Chef) or endpoint management (Intune/SCCM). Create playbooks that: remove listed packages, disable services, deploy firewall rules, and push application control policies. Store playbooks and GPO backups in your Compliance Framework repository as evidence. For small businesses without a full CM toolchain, use scripted PowerShell remoting or SSH scripts executed from a management host and log output to a centralized SFTP or logging service.

Validation, monitoring, and evidence collection

Validation is critical: schedule periodic scans and compare current state to the baseline checklist. Evidence to collect for auditors and Contracting Officers' Representatives (CORs): baseline configuration documents, output of discovery commands (CSV or JSON), automation playbooks, change-control approvals for exceptions, and periodic scan reports. Implement continuous monitoring: alert when a disabled service is re-enabled, when new listening ports appear, or when new packages are installed.

Risks, real-world small-business scenarios, and compliance tips

Risk of not implementing least functionality includes larger attack surface (unneeded services providing remote entry), easier lateral movement, greater probability of data exfiltration, and failing CMMC/NIST assessments which can jeopardize DoD contracts. Example: a 25-person contractor left development tools and an SSH server enabled on a production workstation; a compromised user executed a reverse shell using the available tooling. To avoid this, document exceptions (why an item is allowed), require time-boxed approvals, and include compensating controls (network segmentation, jump hosts, MFA) where removal isn't immediately possible.

Compliance tips and best practices: align your checklist to CIS Benchmarks and NIST STIGs where applicable, use templates and profiles to speed implementation, run change control and maintenance windows before applying removals, keep backups and test rollback plans, and include owners and review cadence (quarterly). For evidence, use screenshots of GPO settings, output files (systemctl list-unit-files --state=enabled, Get-WindowsOptionalFeature -Online), and Ansible run logs placed in the Compliance Framework repository.

Summary: Build a least-functionality checklist by discovering current state, defining allowed capabilities, automating enforcement, and continuously validating. Map each checklist item to CM.L2-3.4.6 in your Compliance Framework, keep clear evidence and exception records, and prioritize low-cost automation for a small business — this reduces risk, supports audits, and helps maintain eligibility for contracts requiring NIST SP 800-171 / CMMC Level 2 compliance.

 

Quick & Simple

Discover Our Cybersecurity Compliance Solutions:

Whether you need to meet and maintain your compliance requirements, help your clients meet them, or verify supplier compliance we have the expertise and solution for you

 CMMC Level 1 Compliance App

CMMC Level 1 Compliance

Become compliant, provide compliance services, or verify partner compliance with CMMC Level 1 Basic Safeguarding of Covered Contractor Information Systems requirements.
 NIST SP 800-171 & CMMC Level 2 Compliance App

NIST SP 800-171 & CMMC Level 2 Compliance

Become compliant, provide compliance services, or verify partner compliance with NIST SP 800-171 and CMMC Level 2 requirements.
 HIPAA Compliance App

HIPAA Compliance

Become compliant, provide compliance services, or verify partner compliance with HIPAA security rule requirements.
 ISO 27001 Compliance App

ISO 27001 Compliance

Become compliant, provide compliance services, or verify partner compliance with ISO 27001 requirements.
 FAR 52.204-21 Compliance App

FAR 52.204-21 Compliance

Become compliant, provide compliance services, or verify partner compliance with FAR 52.204-21 Basic Safeguarding of Covered Contractor Information Systems requirements.
 
Hello! How can we help today? 😃

Chat with Lakeridge

We typically reply within minutes