VPS & Server audit fixes
Application Security: fixing all 5 checks
The application security audit covers what sits on top of the operating system: certificate expiry and renewal, end-of-life runtimes, and databases that answer without credentials.
Every check here is conditional on the thing it audits being present, which makes this the audit that skips most on a perfectly healthy host: no /etc/letsencrypt/live directory, no certbot binary, no recognised application stack, and no MySQL, PostgreSQL, MongoDB or Redis each produce a skip rather than a pass. TLS terminated at a CDN or load balancer, an ACME client that is not certbot, and a containerised database all land in that category, so the certificates and engines are fine and the audit simply could not see them.
Transcribed from the vps-security-application-security audit script. For what the audit covers rather than how to fix it, see the Application Security checklist.
Find your finding
Listed in the order the audit runs them. Take the check name from the third field of the result line and open its page.
SSL Certificate Expiry
SoonChecks Let's Encrypt certificates for upcoming expiry
HighNeeds root3 resultsSSL Certificate Auto-Renewal
SoonChecks whether certbot renewal is automated via timer or cron
MediumNo root3 resultsEnd-of-Life Runtimes
SoonDetects installed web/app/database stack versions for CVE review
MediumNo root3 resultsDatabase Account Exposure
SoonDetects the database engines present, then checks each for accounts reachable without credentials or from any host
HighNeeds root4 resultsHost Resources
SoonReports virtualization platform, CPU, memory and disk allocation
LowNo root2 results
A SKIP is never a pass
A skipped check verified nothing at all. The most common cause is privilege: 2 of the 5 checks in this audit need root for a complete result. Before every run, each script works out which of four privilege modes it is in.
| Mode | How it is reached | What it means for your results |
|---|---|---|
root | The audit runs as UID 0. | Every privileged branch runs directly. No check skips for lack of permission. |
nopass | sudo -n true succeeds, so the account has passwordless sudo. | Privileged commands run through sudo -n. |
pass | A sudo password was supplied in the CtrlOps audit settings and accepted. | Privileged commands run through sudo -S. |
none | None of the above worked. | CAN_ROOT=0. Every privileged branch returns SKIP with a "Need root" message rather than guessing. |
If many checks skip with a “need root” message, run the audit as root, grant the audit account sudo (with or without NOPASSWD), or supply the sudo password in the CtrlOps audit settings.
Application Security questions
Run all 5 Application Security checks, in one click
CtrlOps runs this audit over your existing SSH connection - no agents, no scripts to manage. $7/user/month after a 1 month free trial - no credit card required.
✓ Start instantly·✓ No credit card·✓ No sneaky autorenewals