Enable Only Necessary Services
PCI DSS 4.0.1 Requirement 2.2.4 expects you to run systems in the cardholder data environment (CDE) with only the services, protocols, daemons, and functions required for business purpose, and to remove or disable everything else (PCI DSS v4.0.1 Requirement 2.2.4). To operationalize it quickly, you need an authoritative inventory of enabled functionality, a standard for what is “necessary,” and evidence that unnecessary items are disabled with change control.
Key takeaways:
- Define “necessary” per system role, then enforce it through hardened baselines and build standards.
- Prove compliance with artifacts: service/port listings, configuration baselines, and change records showing disablement/removal.
- Auditors look for drift control: how you detect re-enabled services and keep images/templates aligned.
“Enable only necessary services” is an attack-surface control disguised as a configuration hygiene requirement. In PCI terms, it applies wherever you have system components in scope for PCI DSS, especially inside or connected to the CDE. The practical question a QSA (or internal audit) will ask is simple: “Show me what runs on this system, why it needs to run, and how you prevent anything else from being turned on.”
This requirement is easy to misunderstand because it is not a single setting. It is an operating model: define allowed services and functions per asset role, implement them through standard builds, and continuously prevent configuration drift. If your organization uses cloud services, containers, endpoints, network devices, or virtual appliances in the CDE, each needs the same treatment: identify what is enabled by default, disable what you do not need, and retain proof.
If you need to move fast, focus on three outcomes: (1) a role-based “allowed list,” (2) technical enforcement (gold images, config management, GPO/MDM, Kubernetes admission controls, firewall rules), and (3) repeatable evidence you can hand to an assessor without scrambling.
Regulatory text
Requirement: “Only necessary services, protocols, daemons, and functions are enabled, and all unnecessary functionality is removed or disabled.” (PCI DSS v4.0.1 Requirement 2.2.4)
Operator interpretation: For every in-scope system, you must be able to demonstrate:
- What network services and host functions are enabled today.
- Which of those are required for the system’s documented business purpose.
- That anything not required has been removed (uninstalled) or disabled (stopped and prevented from starting), with controls to keep it that way.
This is broader than “close unused ports.” It also includes software components and functions that expand the attack surface (for example, web admin consoles, sample apps, remote management services, legacy protocols, file-sharing services, and debugging features) even if they are not currently “used.”
Plain-English requirement: what “necessary” means in practice
“Necessary” means required for the system’s role and approved data flows. If a service is merely convenient, “sometimes used,” or enabled “just in case,” treat it as unnecessary unless you can justify it with a defined use case and owner approval.
A workable rule: If you cannot name the business function, the technical dependency, and the owner for a service, you should disable it (and document that decision).
Who it applies to
Entity types: Merchants, service providers, payment processors (PCI DSS v4.0.1 Requirement 2.2.4).
Operational scope (typical):
- Servers (Windows/Linux), VMs, cloud instances, managed database hosts where you control configuration.
- Network devices in or segmenting the CDE (firewalls, routers, load balancers) where “services/protocols” includes management planes and routing services.
- Container hosts and Kubernetes nodes, plus container images used for CDE workloads.
- Bastions/jump hosts and administrative workstations used to administer CDE components.
- Appliances where you can configure enabled modules, web consoles, and management interfaces.
Important boundary: If you truly cannot control the underlying services (some fully managed SaaS), you still need to show you have restricted exposed functionality where configuration is available, and that you selected/contracted the service with appropriate security features. Keep your focus on the systems you administer directly.
What you actually need to do (step-by-step)
1) Define “system roles” and allowed functionality per role
Create a short list of roles for in-scope components, such as:
- Payment application server
- Web server / reverse proxy
- Database server
- Bastion/jump host
- Logging/monitoring collector
- Network security device
- Kubernetes node / container base image
For each role, document an allowed list:
- Host services/daemons allowed (by name).
- Network protocols allowed (for example, SSH, TLS, SNMPv3) and explicitly disallowed legacy protocols.
- Administrative functions allowed (local admin tools, remote management interfaces) and how they are restricted (source IP, MFA, separate admin network).
- Any “optional” components that require an explicit exception.
Output artifact: Role-based hardening standard mapped to build templates.
2) Build an authoritative inventory of what is enabled today
You need evidence at the system level, not assumptions. Pick collection methods that fit your environment:
- Windows: service inventory and startup type; installed roles/features.
- Linux: systemd unit enablement, open ports/listening sockets, installed packages of concern.
- Network devices: enabled management services, routing protocols, APIs, web UI.
- Containers: base image packages, exposed ports, entrypoints, running processes.
Practical tip: auditors prefer repeatable commands/tools and a central export (CSV, CMDB attachment, ticket evidence) over screenshots.
3) Perform a “necessary vs. unnecessary” review with accountable approvals
For each in-scope system (or a representative sample if your assessor allows it), review:
- Business justification: what requires this service.
- Data flow dependency: what talks to it, from where, on what port/protocol.
- Security constraints: authentication method, admin access restrictions, encryption requirements.
Then decide:
- Keep (documented justification).
- Disable (stop service, prevent auto-start).
- Remove (uninstall packages/features/modules).
- Replace (swap insecure protocol/service for a secure alternative).
Output artifacts:
- Service justification matrix (system/role → service → necessity rationale → approval).
- Exception register for anything kept that is not in the baseline.
4) Disable/remove unnecessary functionality with change control
Make the remediation auditable:
- Track work in tickets with before/after evidence.
- Record which services were disabled vs. removed.
- Include rollback considerations (especially for shared libraries or components used by multiple apps).
Technical implementation patterns that scale:
- Hardened images/templates (golden VM images, AMIs).
- Configuration management (Ansible, Puppet, SCCM, Intune, Group Policy).
- CIS-aligned internal build scripts (even if you do not formally adopt CIS benchmarks).
- Kubernetes: minimal base images, block privileged containers, restrict host networking, admission policies for disallowed ports/processes.
5) Prevent drift: detect and correct re-enabled services
This is where many programs fail. Add ongoing controls:
- Configuration monitoring to alert on service enablement changes.
- Scheduled compliance checks comparing runtime state to baselines.
- Change approval gates for enabling new services (security review tied to firewall rule request and data flow update).
- Periodic re-attestation of role baselines when apps change.
If you have Daydream in your GRC stack, use it to tie each system role baseline to a control record, attach recurring evidence exports, and route exceptions through a consistent approval workflow so the next assessment is evidence retrieval, not archaeology.
Required evidence and artifacts to retain
Keep evidence in a way you can produce quickly per in-scope component:
Policy/standards
- Secure configuration standard defining “only necessary services” for CDE systems (PCI DSS v4.0.1 Requirement 2.2.4).
- Role-based baseline documents (allowed/disallowed lists).
System-level evidence
- Service/daemon inventory outputs (dated, attributable to the system).
- Port/listening service outputs where applicable.
- Installed package/feature lists (especially for web servers, databases, remote admin tools).
- Configuration files showing disablement (service startup set to disabled; modules removed).
Governance and change
- Tickets/changes approving enablement of any new service.
- Exception approvals with expiration/review date and compensating controls.
- Build pipeline artifacts (image hardening scripts, CI/CD logs showing removal of packages).
Ongoing monitoring
- Drift reports, alerts, and remediation tickets.
- Attestation records from system owners for role baseline changes.
Common exam/audit questions and hangups
Expect questions like:
- “Show me how you determine which services are necessary for this server’s role.” (They want criteria, not opinions.)
- “How do you know a new service wasn’t enabled last week?” (They want drift detection.)
- “Do your templates/images match what is running in production?” (They want consistency between build and runtime.)
- “What about management interfaces on appliances?” (They include web UIs, SSH, APIs.)
- “How do you handle exceptions?” (They want approvals, scope, compensating controls, and review cadence.)
Hangups that slow audits:
- No single “source of truth” for enabled services.
- Evidence scattered across emails, chats, and screenshots.
- Justifications written after the fact.
Frequent implementation mistakes (and how to avoid them)
-
Relying on firewall rules alone. A blocked port does not remove the vulnerable service. Disable or remove it at the host/device level.
-
Treating defaults as acceptable. Many platforms ship with extra services enabled. Your baseline must explicitly address defaults.
-
Ignoring “functions” and “modules.” Web admin consoles, sample apps, database extensions, and remote management plugins count. Remove them if not required.
-
No owner for the decision. Every allowed service should map to an application/service owner who will defend the need during assessment.
-
No drift control. A one-time hardening project fails the next time an engineer enables a troubleshooting service. Add monitoring and enforce change gates.
Enforcement context and risk implications
This requirement reduces your attack surface. Practically, it limits the number of remotely reachable services and the amount of code exposed to attackers. For PCI programs, failing it commonly triggers deeper scrutiny of configuration management and segmentation because assessors infer weak operational control. Keep the story tight: defined baselines, controlled exceptions, and evidence of ongoing enforcement (PCI DSS v4.0.1 Requirement 2.2.4).
Practical 30/60/90-day execution plan
First 30 days (triage and standard-setting)
- Identify in-scope system categories and owners for the CDE.
- Draft role-based allowed lists for the highest-risk roles (internet-facing CDE components and admin access paths).
- Collect current-state service inventories for a targeted subset to find obvious removals (unused web consoles, legacy protocols, remote access tools).
- Stand up an exception workflow (even if manual) so engineers have a path other than “just enable it.”
By 60 days (remediation and evidence readiness)
- Remediate unnecessary services for prioritized systems; capture before/after evidence in tickets.
- Convert role baselines into build standards (gold images or config management).
- Create an assessment-ready evidence bundle: baseline + inventories + change records + exceptions.
By 90 days (drift control and operationalization)
- Implement automated checks for service enablement drift (tooling depends on your environment).
- Require security review for any new service/protocol enablement tied to data flow updates.
- Schedule recurring owner attestation for role baselines and exceptions; store outputs centrally (Daydream works well as the system for evidence, exceptions, and control-to-asset mapping).
Frequently Asked Questions
Do I have to remove services, or is disabling enough?
The requirement allows “removed or disabled,” so disabling can satisfy it if the service cannot run and cannot be started without approved change (PCI DSS v4.0.1 Requirement 2.2.4). Remove components when disablement is fragile or when the software adds unnecessary code paths.
How do we define “necessary” without endless debates?
Tie necessity to system role and documented data flows. If a service is not required to deliver the role’s function or administer it through approved channels, treat it as unnecessary and route any disagreement through the exception process.
Does this apply to cloud managed services (PaaS/SaaS)?
Apply it where you have configuration control (enabled endpoints, admin interfaces, network exposure, optional modules). For fully managed services with limited control, document what you can configure and keep evidence of secure configuration choices.
What evidence is strongest for a PCI assessor?
Dated command outputs or centralized configuration reports that show enabled services and startup states, plus tickets demonstrating disablement/removal with approvals. Baseline documents and exception records help you explain “why,” not just “what.”
We need temporary services for troubleshooting. Are we noncompliant?
Temporary enablement can be compliant if it is approved, time-bound, monitored, and reverted, with evidence. Treat it as an exception with an owner and an explicit end condition.
How do containers fit this requirement?
Treat container images and Kubernetes nodes as systems with “services and functions.” Use minimal images, remove debug tooling, restrict exposed ports, and keep build logs and image manifests as evidence of what is included and enabled.
Frequently Asked Questions
Do I have to remove services, or is disabling enough?
The requirement allows “removed or disabled,” so disabling can satisfy it if the service cannot run and cannot be started without approved change (PCI DSS v4.0.1 Requirement 2.2.4). Remove components when disablement is fragile or when the software adds unnecessary code paths.
How do we define “necessary” without endless debates?
Tie necessity to system role and documented data flows. If a service is not required to deliver the role’s function or administer it through approved channels, treat it as unnecessary and route any disagreement through the exception process.
Does this apply to cloud managed services (PaaS/SaaS)?
Apply it where you have configuration control (enabled endpoints, admin interfaces, network exposure, optional modules). For fully managed services with limited control, document what you can configure and keep evidence of secure configuration choices.
What evidence is strongest for a PCI assessor?
Dated command outputs or centralized configuration reports that show enabled services and startup states, plus tickets demonstrating disablement/removal with approvals. Baseline documents and exception records help you explain “why,” not just “what.”
We need temporary services for troubleshooting. Are we noncompliant?
Temporary enablement can be compliant if it is approved, time-bound, monitored, and reverted, with evidence. Treat it as an exception with an owner and an explicit end condition.
How do containers fit this requirement?
Treat container images and Kubernetes nodes as systems with “services and functions.” Use minimal images, remove debug tooling, restrict exposed ports, and keep build logs and image manifests as evidence of what is included and enabled.
Authoritative Sources
Operationalize this requirement
Map requirement text to controls, owners, evidence, and review workflows inside Daydream.
See Daydream