security

The trust boundary, in detail.

MihraOps is a desktop client, not a hosted panel. This page describes exactly where your data goes — and where it does not.

Two connections, no bridge between them
Your computerMihraOps desktop appSSH keysserver passwordsregistry tokensHTTPS — licence and consented usageSSH — direct, from your machineMihraOps license backendLicence · consented usage · updatesYour VPSDocker · Compose · Caddy

There is no connection between the license backend and your server.

What stays on your computer

Server records (servers.json)

Host, user, SSH key or password. The whole file is encrypted with the operating system secure storage (Electron safeStorage — Keychain on macOS, DPAPI on Windows, the desktop secret service on Linux). If secure storage is unavailable, the app refuses to save the record rather than writing it in plain text.

Known host fingerprints (known-hosts.json)

Public SSH fingerprints only, one per server. No secret material, so the file is stored unencrypted.

Everything your server sends back

Container lists, logs, metrics, terminal output and environment values travel over your SSH connection and stay in the app. They are never uploaded anywhere.

What can reach the MihraSoft backend

Only Pro licensing sends data to our backend; these are all fields it can send:

  • The licence key you entered (encrypted at rest on our side)
  • A one-way SHA-256 hash of the machine identifier — the raw value never leaves your device
  • A one-way hash of the installation identifier
  • The device label you can edit yourself
  • Platform, operating system version and app version

The Free plan makes no licence calls; its only trip to the backend is the update check. Whether the app is being used is inferred from that check as an anonymous daily tally: the app sends nothing extra for it, no per-installation record is kept, and all the database stores is “N installations ran on day D on platform P”. There is no behavioural-advertising or crash-reporting SDK.

SSH host key verification

MihraOps uses trust-on-first-use. The first time you connect, the server fingerprint is recorded. Every later connection compares against it, and a mismatch aborts the connection instead of asking you to click through a warning. If you legitimately rebuilt the server, you can forget the stored fingerprint from the app.

When you uninstall the app

Removing MihraOps from your computer deletes the local records, not the server-side resources — your containers keep running, which is usually what you want. To clear the server too, remove the mihraops-agent and mihraops-caddy containers and delete the directories listed above.

What MihraOps creates on your server

Only what the feature you used needs. Nothing runs as a control panel, and nothing listens on a port unless you asked for it:

~/.mihraops/

Compose projects, app definitions and encrypted secrets you asked the app to remember.

~/.config/mihraops/keys/master.key

The key that encrypts those saved secrets. It stays on your server; our backend never sees it.

/opt/mihraops/caddy

Caddy configuration plus the mihraops-caddy container — created when you bind your first domain.

/opt/mihraops/sites

Static site content, when you publish one.

/opt/mihraops/agent

The webhook, host/Docker monitoring, incident and SMTP notification Agent. Capabilities are off by default; it can be installed or removed from Webhook or Notifications.

Report a security issue

Contact us privately first and give us a chance to fix it. We answer every report ourselves.

Contact us