SuiteCRM security hardening

A practical guide to hardening a self-hosted SuiteCRM 8 server, covering supported runtime versions, patch handling, access control, login policy and API credentials, with the build sequence and checks.

On this page

How do you harden a SuiteCRM 8 server without breaking it?

If your team runs SuiteCRM 8 and holds customer and sales records that you must later prove are protected, hardening means fixing the runtime stack, the patch process, the login path, role and security group design, and API credentials together, not one at a time. The work is hard because your customizations and your patch cadence interact: every security release you apply can touch code you have changed, so a hardening change that is safe on a stock instance can break a custom module or a workflow on the next update. Sort the work into three groups before you touch production. The first group is configuration: PHP and database versions, the Apache 2.4 setup, file permissions, the administrator account, password rules and session behavior. These changes are usually reversible and can be checked with a short test script. The second group needs a staging test: anything that changes how users sign in, moves the database or web server, or modifies files you have customized. Run these against a copy of production data before a change window, and confirm the staging copy matches production's code and configuration first. The third group needs an owner decision: who may see which records, whether API clients can write to modules, whether local accounts remain allowed once single sign-on is live, and how long session and password policies apply. Start by checking your runtime against the SuiteCRM 8 compatibility matrix for your target release, since the supported PHP, Apache, MariaDB and MySQL versions are listed there and change between releases. Then confirm which minor and patch release you are on. SuiteCRM minor 8.x releases arrive roughly every eight weeks, and patch releases carry only security and bug fixes with no database changes, so a patch is the fastest way to close a known issue. Ask your implementation partner or internal team to write down a fixed rule for how quickly each release class is tested and applied, and who signs off. Finally, decide the owner questions early and record the answers. Name the person accountable for role and security group reviews, for rotating API credentials, and for approving any change that affects login. If you are also planning a move from SuiteCRM 7, note that the 7 to 8 path is a migration rather than an in-place upgrade, so the hardening baseline for the new environment should be set before data is loaded. Confirm the details with your SuiteCRM admin, your security team and the SuiteCRM documentation for your version before scheduling the change.

Which hardening decisions to settle before changing anything

This table compares the four decisions to settle before hardening: login method, release line, hosting model and review ownership. Read each row for when an option fits and what it costs your team to run day to day. The main takeaway is that login and release line choices shape every later control, so settle them first.

DecisionOptionWhen it fitsOperational cost
Login methodLocal accountsSmall teams with few users and no central identity providerPassword policy, resets and offboarding are handled inside SuiteCRM by admins
Login methodLDAP (AUTH_TYPE=ldap)Organizations running Active Directory or LDAP for staff accountsDirectory dependency; confirm group mapping and account disable flow with your directory team
Login methodSAML (AUTH_TYPE=saml)Organizations standardizing sign-in on a SAML identity providerIdP dependency; logout at the IdP does not end the SuiteCRM session, so plan session controls
Release lineTrack 8.x minor releasesTeams that can test and apply a release about every eight weeksRecurring test and upgrade effort; customizations must be retested each cycle
Release lineStay on 7.15 with security fixesTeams with a 7 instance that cannot migrate yet, until January 2028Migration is still needed later; confirm the 7.15 fix schedule and plan the exit date
Hosting modelSelf-hostedTeams that must control data location, network and server configurationYour team or partner owns patching, PHP and database versions, backups and monitoring
Hosting modelSuiteCRM HostedTeams that want the vendor to run the platform and prefer less server administrationVendor-run hosting; confirm which hardening controls you can configure and what evidence you receive
Role and group reviewNamed internal ownerOrganizations with an admin who can review roles and security groups on a set scheduleRecurring admin time for access reviews and change approvals
Role and group reviewExternal partner on retainerTeams without spare admin capacity or with many custom modulesRecurring retainer cost; confirm review frequency and who signs off changes

How patch and minor releases change the hardening work

Patch releases and minor releases play different roles in a SuiteCRM hardening plan, so they should run on separate schedules. SuiteCRM 8 minor 8.x releases arrive roughly every eight weeks and can add features and database changes. Patch releases contain only security and bug fixes, with no new features and no database changes. That makes a patch a narrower change that a team can schedule sooner than a minor upgrade, usually once the fix has been reviewed and tested against its own environment. The practical result is two tracks: a short, pre-approved path for security patches and a planned, tested path for minor upgrades that bring new behavior.

A patch is still a change to a live CRM, so it needs a staging test. Deploy the patch to a copy of production that includes your custom modules, fields, layouts, logic hooks, workflows, and any SAML or LDAP settings. Then run the checks that matter most for hardening: login as each role, confirm that security group restrictions still hide records from users who should not see them, confirm that API clients still authenticate, and confirm that scheduler jobs still run. Take a file and database backup before the change, and record the version and configuration you rolled back to, so a failed patch can be reversed quickly.

The longer-term risk is the support gap. SuiteCRM 8 has no named extended support release yet. The SuiteCRM LTS page states that no SuiteCRM 8 extended support release has been nominated, and that SuiteCRM expects to name one by Q3 2027. Until then, the 8.x line you run is the line that receives fixes, so the team must keep moving within it. Sites still running SuiteCRM 7 have a different position: the 7.15 extended support release receives security fixes until January 2028. Ask your partner or internal owner to document which line you run, who receives release alerts, and what happens when that line stops receiving fixes.

Confirm the current release before you plan any window. SuiteCRM 8.10.2 and SuiteCRM 7.15.2 were both published on July 31, 2026. Newer releases may have shipped since then, so check the SuiteCRM-Core and SuiteCRM releases pages on GitHub before setting a date. For each release you consider, read the notes for security fixes, check whether PHP, Apache, or MariaDB and MySQL versions have changed against the SuiteCRM 8 compatibility matrix, and decide whether the release belongs on the fast patch track or the planned minor track.

Build sequence for a SuiteCRM hardening project

This sequence moves a SuiteCRM server from an unknown state to a supported, documented and tested configuration. Each step ends with a check, so the team knows what is finished before the next step starts.

  1. Inventory the current version and stack

    Record the installed SuiteCRM version, PHP version, web server, database engine and version, and how users sign in today, including any LDAP or SAML settings and any local accounts. Note custom modules, extensions and files changed from the release package. The DeployOpen team and your administrator do this together, usually on a read-only review of the server and its configuration. The step is done when the inventory is written down and every item has an owner who can confirm it.

  2. Move the runtime to a supported combination

    Check the exact SuiteCRM release against the compatibility matrix and select a PHP, web server and database combination listed for it. For SuiteCRM 8.10, the matrix lists PHP 8.2, 8.3 and 8.4, Apache 2.4, MariaDB 10.6, 10.11, 11.4 and 11.8, and MySQL 8.0 and 8.4 on Linux, Unix or macOS. Confirm the matrix for your release before you plan the change. Apply the runtime change in staging first. The step is done when the staging instance runs on a listed combination and the application loads without errors.

  3. Restrict the web root and review files

    Configure the web server so only the public entry point is served and the application source, configuration and cache directories are not reachable by URL. Compare the deployed files with the release package to find unexpected files. Review anything under public/legacy before changing it, because the SuiteCRM migration documentation warns that non-core files in that folder may be removed. Customizations there need a documented review first. The step is done when direct requests to protected paths return denial responses and the file comparison is signed off.

  4. Configure HTTPS and Apache 2.4 controls

    Enforce HTTPS with a current certificate and redirect plain HTTP. Set the security headers your policy requires, such as content security and frame controls, and restrict administrative paths by network address where your environment allows it. Confirm each directive against the Apache 2.4 documentation for your build, since syntax and module availability vary. Test each rule with a request from an allowed and a disallowed location. The step is done when the test results show the expected allow and deny behavior for each rule.

  5. Set the login method and password policy

    Choose the sign-in method: LDAP is enabled with AUTH_TYPE=ldap and SAML with AUTH_TYPE=saml, based on the SuiteCRM configuration references. Define the password, lockout and session timeout rules that apply to local accounts. Note that the SAML implementation in SuiteCRM 8.7.0 and later does not support IdP-initiated logout or POST binding to the logout service, so signing out at the identity provider does not end the SuiteCRM session. Plan a compensating control for that. The step is done when a test user can sign in, fail and be locked out as designed, and sign out.

  6. Review roles and security groups against duties

    Export the current roles, security groups and module access, then compare each grant with the job the person actually performs. Remove access that was granted for past projects, and separate duties where one person can both create and approve records. Business owners for sales, service and marketing confirm the result, since only they know what each team needs. Record the approved access matrix. The step is done when the matrix is signed off and the staging instance matches it.

  7. Lock down and rotate API client credentials

    List every API client, integration account and token that calls SuiteCRM, including those used by ERP, marketing, telephony and web form connections. Confirm the minimum permissions each one needs, disable unused clients, and move secrets out of source code and shared documents. Rotate each credential, update the integration, and revoke the old value. Confirm the current authentication method and token lifetime in the SuiteCRM API documentation for your release. The step is done when every client is listed, owned and rotated, and old credentials fail.

  8. Run staging tests and record the baseline

    Run the functional tests for sign-in, roles, workflows, integrations and key customizations on the hardened staging instance. Repeat the web checks from the earlier steps and run an authenticated security scan if your team has one approved. Record the versions, configuration settings, test results and open findings as the baseline for the next review. Keep the record with the backup and rollback plan for the production change. The step is done when the baseline document is approved and any open findings have an owner and a decision.

Which PHP, Apache and database versions SuiteCRM 8.10 supports

Running a SuiteCRM 8.10 server on a PHP, Apache or database version outside the published compatibility matrix is a hardening gap in its own right, and it should be closed with a planned upgrade rather than left to the next maintenance window. The matrix for SuiteCRM 8.10 lists PHP 8.2, 8.3 and 8.4, Apache 2.4, MariaDB 10.6, 10.11, 11.4 and 11.8, and MySQL 8.0 and 8.4, running on Linux, Unix or macOS. Any server that falls outside those combinations should be recorded in the security review as a finding with an owner and a target date.

Start by inventorying what is actually running. Check the PHP version the web process uses, not only the command-line binary, because mod_php, PHP-FPM pools and scheduler jobs can point at different installations. Confirm the Apache release and the database engine and version on every node, including any replica and any host that runs cron or the SuiteCRM scheduler. In a load-balanced setup, a single node on an older PHP build can keep an otherwise compliant environment outside the matrix, so the inventory should cover every host that serves or processes SuiteCRM traffic.

Plan the change as a version upgrade with a rollback path. Take a full backup of the file tree and the database before touching anything, and confirm that the restore has been tested rather than assumed. Build a staging copy from the production backup, apply the PHP, Apache or database change there, and run login, role-based record access, scheduled jobs, email sending, and any custom modules or integrations. Customizations are the most common source of breakage after a PHP minor version change, so the test list should be drawn from your own customization inventory, not from a generic checklist.

Confirm the matrix for the exact release you are targeting before you commit to a stack. The compatibility matrix changes as SuiteCRM releases arrive, and a version that is supported on 8.10 may not be listed for a later 8.x release, or the reverse. Record the matrix version you checked, the release number, and the date of the check in your change record. If you are still on a SuiteCRM 7 instance, the matrix for SuiteCRM 8 does not apply to it, and the move to 8 is a migration planned separately.

Ask your SuiteCRM partner or internal platform team to confirm three things in writing: which PHP and database versions the target release supports, whether any extension or library your customizations rely on has its own version limits, and how the upgrade will be tested before cutover. A fixed-scope plan should name who performs the staging tests, who signs off, and how the rollback is executed if a test fails. Treat any stack version that is end-of-life for its vendor as a risk to be scheduled, not as an acceptable exception.

What makes SuiteCRM hardening take longer

This table lists the factors that expand SuiteCRM hardening work and the practical steps that keep each one contained. Read each row as a question to answer about your own instance before requesting a quote. The main takeaway is that most of the effort comes from undocumented roles, custom code and unclear environments, so those are the areas to settle first.

DriverWhy it changes effortHow to keep it down
Roles and security groupsEach role and group needs a documented purpose, a field and module access check, and a test that it grants nothing extra. Inherited or overlapping groups multiply review time.Document each role's business purpose and owner before the review starts, then remove duplicate or unused groups.
Custom modulesCustom modules add fields, views and access rules that sit outside the core security model and must be reviewed one by one.Limit customizations to supported extension points and keep a list of every custom module with its owner and data classification.
Logic hooks and API-touching codeHooks and integrations that read or write through the API run with their own credentials and can bypass screen-level controls, so each one needs tracing.Inventory every hook and integration, record which credential it uses, and move shared logic into one reviewed place.
Environments (production, staging, development)Each environment needs the same configuration baseline, separate credentials, and its own verification, so drift between them adds rework.Build one configuration baseline, keep environments on matching versions, and script the settings that must match.
Identity provider work (LDAP or SAML)Directory group mapping, attribute mapping, and session and logout behavior must be verified against the identity provider. SAML logout limits need extra compensating controls.Agree the group-to-role mapping and attribute names with the identity team before configuration, and confirm the logout behavior in a test.
Evidence for compliance assessmentAssessors expect dated configuration records, access reviews, patch history and change approvals. Producing them after the fact is slow.Collect evidence continuously from the start, such as configuration exports, access review sign-offs and patch logs. Confirm the exact evidence list with your assessor.
PHP, database and web server versionsAn instance on versions outside the SuiteCRM 8 compatibility matrix needs a platform upgrade before hardening can be verified. Moving to a supported platform first avoids testing on an unsupported stack.Check the compatibility matrix for your SuiteCRM release, confirm your PHP, database and Apache versions, and plan any platform upgrade as a separate, tested step.

Which SuiteCRM hardening controls matter most

Most SuiteCRM exposure comes from four areas: how the web server presents the application, who holds which roles, how people sign in, and how integrations authenticate. Each card below names what to check and where to confirm the setting for your release.

Web server configuration

Serve SuiteCRM only over HTTPS and confirm that the web root points to the public directory, so configuration, logs and source files are not reachable by URL. Review the Apache 2.4 access rules that block direct requests to internal folders and remove installer files and unused sample or legacy files from the server. The migration documentation warns that moving from SuiteCRM 7 may remove non-core files under the public/legacy folder, so check that folder after any move. Confirm the exact directives against the SuiteDocs reference for your release.

Role and security group review

Start from least privilege: each user should hold only the modules, fields and record visibility their job needs, and the administrator role should belong to a small, named group. Identify shared or generic admin accounts and replace them with individual accounts that can be traced. Set a recurring recertification, where a business owner confirms each person and group every quarter or on a schedule you choose, and remove access for leavers and role changes. Check the current role permission settings in the SuiteDocs reference for your release before you change them.

Password and login policy

Where possible, move sign-in to the LDAP or SAML path so that password length, complexity, lockout and expiry are governed by your directory or identity provider. SuiteCRM 8 enables LDAP with AUTH_TYPE=ldap and SAML with AUTH_TYPE=saml. Do not assume that local SuiteCRM password rules match your policy: confirm each rule in the product for your release and document any gap. Note that SAML sessions in the 8.7.0 and later implementation do not end when a user signs out at the identity provider, so plan for that in your access reviews.

API credential handling

Give each integration its own dedicated account with only the scopes and modules the integration needs, so that a compromised connector cannot reach the whole CRM. Store client secrets and database credentials in a secret manager or environment configuration outside the codebase and version control. Set a rotation schedule and record who owns each credential. Remove OAuth clients and integration accounts that no longer have an active consumer, and confirm the authentication settings for your release in the SuiteDocs reference before you issue new credentials.

Why logging out at the identity provider does not end a SuiteCRM session

When SuiteCRM uses SAML for login, signing out at the identity provider does not end the SuiteCRM session. The SuiteCRM 8.7.0+ SAML configuration reference states that IdP-initiated logout and POST binding to the logout service are not supported. A user who signs out of the Microsoft Entra ID or Keycloak dashboard still holds a live SuiteCRM session in the browser until that session expires or the user signs out of SuiteCRM itself. Treat this as a fixed property of the login design and build your controls around it. Confirm the current behavior against the exact SuiteCRM 8 release you plan to run, because the configuration reference is the authoritative statement of what is supported.

The risk is greatest on shared, kiosk or unattended workstations, such as call center desks, branch terminals or meeting-room PCs. A colleague who sits down at a browser that a previous user only signed out of at the identity provider may reach customer records, pipeline data and email activity without a password prompt. The same exposure applies to laptops left open in public places or at home. Your risk assessment should record which roles use shared devices, what data those roles can see through their security groups and roles, and whether exports or API tokens stay usable from a session that should have ended. Those answers decide how strict the timeout and education controls need to be.

Plan three mitigations together. First, shorten session lifetimes in the web server, PHP and SuiteCRM configuration. Confirm the exact setting names and supported values in the SuiteCRM 8 release documentation for your version, because this page does not give a default. Second, teach users that signing out of SuiteCRM, and closing the browser on a shared device, is part of ending their work. Signing out of the identity provider alone is not enough. Third, write an offboarding procedure. Disabling the account in the directory stops new logins, but confirm whether that change also ends an open SuiteCRM session or whether the session runs until it expires. The procedure should then check for active SuiteCRM sessions for the leaving user and end them.

LDAP is the alternative login path, enabled with AUTH_TYPE=ldap and built on the Symfony Security LDAP authenticators. It changes the hardening baseline in two ways. SuiteCRM binds to the directory, so the bind account's password, its read scope and how it is stored become part of your controls. Account disablement also works differently from a federated logout: a user disabled in the directory cannot authenticate again, but you should check the LDAP configuration reference for how existing sessions and cached user records are handled. Choose LDAP or SAML for each environment deliberately. The detailed SSO design, including attribute mapping, certificates and the full logout limitations, belongs to the SuiteCRM SSO with SAML and LDAP topic.

How hardening changes by deployment model

On a single self-hosted server, the web server, PHP runtime, database and SuiteCRM application share one host, so most hardening steps happen in one place. The patch window is the simplest of the three models because one node restarts and each patch release is applied to one set of files. The main risk is that every control sits in one configuration, so drift goes unnoticed unless someone checks it on a schedule.

Hardening changes in these ways:

  • Apache 2.4 configuration: Serve only the public application folder, disable directory listing and block web access to configuration, log and backup paths on the same host.
  • PHP version: Run a PHP version from the set supported for SuiteCRM 8.10 (8.2, 8.3 or 8.4), and confirm the current list with the vendor before you fix the runtime.
  • Database access: Bind MariaDB or MySQL to localhost or a private interface, and give the SuiteCRM database account only the privileges the application needs.
  • Patch cadence: Run each patch release as one change window, with a verified backup taken immediately beforehand.

Confirm with the vendor which patch releases carry security fixes for your minor line, and confirm in your environment that the host firewall, TLS termination and backup location meet your policy before go-live.

Questions teams ask before hardening SuiteCRM

Can our internal team harden SuiteCRM without a partner?

Yes, if your team has Linux, PHP and identity skills and time to test changes in staging before they reach production. The work covers the web server configuration, PHP and database versions, file permissions, role and security group review, password policy and API credential handling. SuiteCRM 8.10 supports PHP 8.2, 8.3 and 8.4, Apache 2.4, MariaDB 10.6, 10.11, 11.4 and 11.8, and MySQL 8.0 and 8.4 on Linux, Unix or macOS, so confirm your current stack against that matrix first. Teams with no staging environment, or with a SuiteCRM 7 instance that still needs to move to SuiteCRM 8, often find the testing and migration steps take the most effort. A partner is most useful where internal capacity or identity expertise is missing.

How much does SuiteCRM hardening cost and what drives the fee?

The fee follows from a written scope, so the main cost drivers are the scope itself, the number of environments, the integrations that touch the CRM, identity work and any compliance evidence you need. Environments matter because production, staging and any test copies each need configuration, verification and documentation. Identity work, such as connecting login to LDAP or a SAML identity provider, adds design and testing time. Hardening is largely a one-time cost, but patch releases and minor releases that arrive about every eight weeks need recurring testing, so ask whether a retainer or support package is part of the quote. Ask for a line-item quote that separates the one-time work from any recurring items. DeployOpen does not publish prices, and most engagements are fixed-scope and agreed in writing before work starts.

How long does a SuiteCRM hardening project take?

There is no fixed duration. The timeline depends on the drivers that set the scope, such as the number of environments, integrations and identity connections, and on the gap between your current version and a supported release. A system already on a current SuiteCRM 8 minor release with a staging copy will usually move faster than one that needs a SuiteCRM 7 to 8 migration first, because the migration docs require bringing the 7 instance to the latest 7.14.x or later and testing customizations on staging. SuiteCRM 8 minor releases arrive roughly every eight weeks, so a schedule that spans a release date may need an extra test cycle. Ask for a timeline with milestones in the written scope, and confirm any change freeze windows with your own change board before work starts.

What does our team need to provide for a hardening engagement?

Four things make the work predictable. First, access to a staging environment that matches production closely enough to test web server, PHP and database changes. Second, an inventory of roles, security groups and the integrations that use API credentials, so the review starts from what exists. Third, a named owner for the identity provider, such as the Active Directory, LDAP or SAML team, because login changes depend on their configuration and approval. Fourth, a sign-off owner who accepts the hardening baseline and the test results and decides when a change goes live. Teams that also hold backup files and database copies ready before testing reduce the risk of a failed change. Confirm who holds each role in your organization before the scope is signed.

Does SuiteCRM Hosted change the hardening work?

It can change which layers your team controls, so confirm this with the hosting provider before you scope the work. SuiteCRM Hosted is a paid service from SuiteCRM Ltd, so the answer depends on what the service exposes to you, such as web server settings, PHP configuration, identity integration, backups and API credentials. Where the provider manages the infrastructure, the hardening scope may shift toward application roles, password and SSO policy, integration credentials and evidence collection. Where you self-host, the full stack is your responsibility, including patching the operating system and database. Ask the provider in writing which settings you can change, how patches are applied, and how backups and restore tests are handled, then build the scope from those answers.

Does hardening make SuiteCRM compliant with audit standards?

No. Hardening prepares the system, its controls and the evidence that supports them, but compliance is decided by an independent auditor or certification body. A hardened system can make an assessment easier to prepare for, because access reviews, configuration baselines, patch records and login settings are documented and repeatable. Engineers should also understand the limits of the product. For example, the SuiteCRM 8.7.0 and later SAML implementation does not support IdP-initiated logout or POST binding to the logout service, so ending a session at the identity provider does not end the SuiteCRM session. Document that limitation and any compensating control in your evidence, and ask your assessor which controls they expect you to show.

How DeployOpen scopes, hardens and hands over SuiteCRM security work

DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside the client's own infrastructure, and SuiteCRM security work follows the same path. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before any hardening starts.

How we scope

  • We review your current SuiteCRM version, PHP, database and web server versions against the compatibility matrix before agreeing any changes.
  • We inventory roles, security groups, admin accounts and API credentials so the written scope names exactly what gets reviewed.
  • We confirm your login model, whether LDAP, SAML or local accounts, and record its known logout limitations in the scope document.

How we build

  • We apply hardening changes on a staging instance first, with file and database backups taken before any configuration change.
  • We review customizations and non-core files before patching, since migrations and upgrades can remove files under public/legacy.
  • We test role permissions, password and SSO policy, and API credential handling against the agreed scope and record each result.

How we hand over

  • We document the final configuration, including web server settings, role and group definitions, password policy and API credential ownership.
  • We deliver a patching runbook that names the release channel you follow, such as the eight-week 8.x minor cycle or the 7.15 extended support line.
  • We walk your administrators through the restore test results and the steps to repeat the security review after each upgrade.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers, scoped separately from the initial hardening work.
  • Retainer work can cover reviewing each SuiteCRM patch release for security fixes and applying them to staging before production.
  • Ask in your quote which items recur, such as access reviews and credential rotation, and which are one-time configuration work.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.