DEV Community

SorrelThorncroft
SorrelThorncroft

Posted on

Ente Photos self-hosting depends on keys, admin identity, and object storage

Ente Photos self-hosting depends on keys, admin identity, and object storage

Ente Photos is designed around client-side encryption and a self-hosted server that coordinates users, metadata, and encrypted objects. Encryption reduces what a stolen photo object reveals, but it does not make the service configuration irrelevant. The server holds identity, key material, and access relationships that can still be abused.

Use the title observation as a lead

At 2026-11-06T17:50:38 UTC, a count-only ZoomEye query used title="Ente Photos" with sub_type=all, page 1, and page size 1. It returned 627 matches. Title matching is a discovery signal. It does not prove that all matches are live Ente servers, nor does it distinguish the hosted service from unrelated pages that use the name.

The same series returned 36 for app="Ente" and 686 for a body phrase. Those are separate observations with different scope; this article relies on the selected title query and does not add them together.

Protect the encryption and token keys

Ente's self-hosting documentation calls out user-visible encryption keys, JWT configuration, and email-related keys. Generate values from a secure source and keep them outside the repository. Back them up with the database. Losing a key can break data access even when the encrypted object files still exist.

Separate the public application from the object store and database. The Museum server should not accept plain HTTP on its public interface. Use a reverse proxy with a valid certificate, restrict database and object-store ports, and make sure backup jobs do not expose credentials in scripts or logs.

Treat the trusted client IP header as a proxy contract

Ente's configuration exposes an internal.trusted-client-ip-header setting for deployments behind a proxy. That setting tells the server which header to trust for client IP information. A direct client that can submit the same header may influence rate limits, audit logs, or access decisions.

The reverse proxy must overwrite the header, not preserve an upstream value. The backend port must be unreachable from untrusted networks. Test the behavior with a direct request and a proxied request. If the header is not needed, leave the default rather than accepting an arbitrary client-supplied value.

Review administrators and registration

The first registered user may receive administrative status until an explicit administrator list is configured. Complete that step deliberately. Review internal.admins, disable public registration if the instance is not intended to be open, and document what happens when an administrator account is removed.

The object store is part of the trust path even though the bytes are encrypted. Restrict bucket credentials, enable versioning or backups as appropriate, and monitor unusual listing or deletion activity. Ente documentation notes that encrypted photo data may be unusable without the database because the database contains file-specific key information.

Inventory the server hostname, proxy, database, bucket, key versions, and administrator identities. Match the title observation to that inventory before investigating a host. Ente's design moves much of the plaintext away from the server, but the service and recovery plane still need a complete access review.

References

Top comments (0)