You are viewing a potentially older version of this package. View all versions.
Chazman-RunicSentinel-1.3.2 icon

RunicSentinel

Secure a modded server with approved mod profiles, admission enforcement, authenticated admins, bans, backups, reports, and an in-game F3 panel.

Date uploaded a week ago
Version 1.3.2
Download link Chazman-RunicSentinel-1.3.2.zip
Downloads 377
Dependency string Chazman-RunicSentinel-1.3.2

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
denikson-BepInExPack_Valheim

BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.

Preferred version: 5.4.2350
Chazman-RunicSafety-1.0.2 icon
Chazman-RunicSafety

Protect valuable items and world state with contextual confirmations, protected-item rules, recovery safeguards, verified backups, and compatibility checks.

Preferred version: 1.0.2

README

Runic Sentinel 1.3.2

Running a private or modded Valheim server requires more than a password and a request that everyone install the right files. Server owners need to know who may enter, which mod profile is acceptable, who has administrative authority, and what happens when a client does not match.

Runic Sentinel: Raven's Gate gives the server an enforceable admission and administration layer. Define the approved mod environment, authenticate administrators, manage bans and roles, investigate evidence, and operate the system through a secure in-game F3 panel.

Major features

  • Define required, optional, allowed, and forbidden mod rules.
  • Enforce admission against signed server policy.
  • Manage authenticated administrators, roles, and banned identities.
  • Detect relevant runtime changes and record bounded security evidence.
  • Create transition backups, generate support reports, and administer in-game.

How it feels in-game

Players receive a bounded admission result through Runic Sentinel Client, while administrators manage routine policy from Valheim instead of treating every change like a command-line incident. Raven's Gate stays mostly invisible when the server and client agree.

Safety and compatibility

The signed server policy is authoritative; client file claims are treated as compatibility evidence, not impossible-to-forge proof. Consequential requests remain server-validated against transport identity, permission, bounds, and replay state. A new server begins in Optional admission mode to avoid accidental lockout. Admission uses the exact connection's direct ZRpc, before routed world networking exists.

What Raven's Gate enforces

  • Plugin ID, version, and SHA-256 rules from the signed passport.
  • Deny-by-default unknown plugins when unknownMods is Forbidden.
  • Signed administrator and banned-user lists bound to authenticated platform identity, not a changeable character name.
  • A bounded server-initiated compatibility exchange on the exact direct connection; Required mode withholds Valheim's native handshake and gates RPC_PeerInfo world admission until the client report passes signed policy.
  • Server request blocking, bounded evidence, and graduated disconnects for repeated high-confidence or conclusive violations.
  • Low-frequency runtime detection when a loaded plugin DLL or active passport asset changes.
  • A verified Runic Safety world backup before a server loads an existing world under a different signed policy or plugin snapshot.
  • Clear client denial explanations, a bounded persistent security flight recorder, and a bounded support report.

A client controls its own process and can falsify self-reported file evidence. The signed server policy is authentic; a client's DLL claim is compatibility evidence, not unforgeable proof. The authoritative protection is that consequential Runic requests are revalidated by the server against transport identity, permissions, bounds, replay state, and durable transaction rules.

Runtime enforcement coverage

  • Sentinel rejects malformed, stale, oversized, replay-conflicting, and profile-incompatible reports. In Required mode a missing responder also reaches a finite deadline and is disconnected.
  • Runic Portals keeps its feature-owned server checks for exact peer identity, group authority, ward access, source distance, endpoint revision, and destination permission. Malformed envelopes, unbound identities, and conflicting request replays are additionally reported to Sentinel after they have already been rejected.
  • Production, Crafting, Agriculture, Storage, Inventory, Interaction, Safety, and precision-building mutations do not expose a general client-to-server command channel: their changes retain native local ZDO ownership, range, ward, inventory, or transaction checks. Sentinel admission still requires their exact configured plugin hashes.
  • Awareness, Exploration, Build Camera, Velocity, and the observatory portion of World Engine are client-local or read-only and do not create a server gameplay mutation request to authorize.

Ordinary gameplay mistakes—such as lacking a ward permission—are denied but are not treated as cheating. Automatic disconnection is reserved for repeated high-confidence protocol violations or conclusive evidence.

Administrator setup

  1. Install Sentinel Server 1.0.2 on the dedicated server and full Sentinel 1.3.2 on the administrator's client. A listen host uses full Sentinel only. Start with Remote Admission > Policy = Optional.

  2. Add your account ID to the server's adminlist.txt, one ID per line. For Steam, use V_<SteamID64> on Valheim 1.0; Sentinel also recognizes raw SteamID64 and Steam_<SteamID64>. A local listen host is recognized automatically. These are account IDs, not character names.

  3. Join and press F3, then click Set Up Sentinel once. The server verifies your account, creates its private signing key, backs up the loaded world, and registers your signed Sentinel role. No server-console bootstrap command is needed. Setup can take a moment; it does not change admission mode or copy the server's mods into a client allowlist. Existing policies and keys are preserved; already-configured servers open the normal panel instead.

  4. Use the panel to manage required/optional/gray/forbidden mods, administrators, banned users, runtime checks, graduated disconnection thresholds, transition backups, support reports, and administrator-only production/portal network snapshots. The Mods tab shows both the server inventory and the most recent bounded client report; only the latter is a useful starting point for client rules. The panel reports the effective admission mode; change that startup setting in the server configuration and restart before admitting more players.

  5. Select Apply & Sign Policy. The server validates all fields, creates a verified world backup when a world is loaded, generates the next sequence and issue time, signs with its private key, archives the prior public policy assets, and reloads the verified policy.

  6. Install Runic Sentinel Client 1.0.1 in ordinary player profiles. It reports only plugin GUID, version, and SHA-256 evidence and does not need any policy or key file. A remote F3 administrator installs full Sentinel alongside it; collision-safe registration leaves one active v2 responder. Never distribute BepInEx/config/RunicSentinel/server-private/RunicSentinel.private.key.

  7. Verify independently with the optional external Forge if desired:

    RunicSentinel.Forge verify <policy> <signature> <public-key> <public-key-pin>
    
  8. Confirm runic_sentinel status, then use Required admission for the group.

Server administrators inherit Sentinel access by default. Set [Administrator Access] UseServerAdminList = false on the server to require only signed Sentinel roles. Signed roles are independent: removing someone from adminlist.txt does not remove a separately granted signed role; remove that role in the People tab too. Signed bans take precedence. Valheim refreshes the adminlist on permission checks at roughly ten-second intervals; close/reopen F3 after editing it. Sentinel access does not itself enable another mod's devcommands.

Every intentional policy update must increase sequence. A lower sequence or different signed payload at an already accepted sequence is rejected for that process lifetime.

Lists and meaning

  • requiredMods: must be present and match version/hash.
  • optionalMods: may be absent; if present, version/hash must match.
  • grayListMods: explicitly known and allowed, while remaining named policy evidence.
  • forbiddenMods: denied when present.
  • unknownMods: normally Forbidden; Unmanaged permits unknown entries and is not recommended for Raven's Gate.
  • administrators and bannedUsers: { "authority": "steam", "subject": "<SteamID64>" } or another transport authority/subject pair supported by Sentinel's Valheim transport binding.

Commands

  • runic_sentinel status shows integrity, policy profile/sequence, admission transport, and the last bounded denial code.
  • runic_sentinel report writes a maximum 512 KiB report under BepInEx/config/RunicSentinel/reports. Reports include plugin IDs/versions/hashes, Runic integrity and bounded evidence. They omit paths, passwords, tokens, private keys, and raw chat.
  • Accepted security evidence is also written automatically under BepInEx/config/RunicSentinel/flight-recorder. The recorder keeps only a 512 KiB current file and one 512 KiB previous file. An audit-write failure is logged once and never disables request blocking or interrupts gameplay.
  • runic_sentinel networks is accepted only by the authoritative server/host console. It writes a bounded point-in-time topology snapshot of loaded Runic portal endpoints and production links; it is not a continuously running overlay and is never broadcast to ordinary clients.

Performance and bounds

  • The first DLL snapshot starts in Unity Start, after BepInEx finishes plugin Awake loading, so later-loaded plugins are included. Hashing then runs on a background worker, not every frame.
  • Runtime integrity checks compare stable file metadata every 5–300 seconds (15 by default).
  • Required compatibility evaluation runs before the native server handshake and RPC_PeerInfo world admission are released. A client has 20 seconds and at most three challenge/report attempts, then 10 seconds to deliver the approved native-handshake resume and up to two minutes to finish Valheim's password prompt and reach PeerInfo.
  • Remote admission mode is sampled at startup. The F3 workflow reports the effective value and rejects mode changes until the server is restarted, avoiding half-released handshakes.
  • Evidence is fixed at 32 providers with eight entries each (256 total).
  • Persistent flight-recorder storage is capped at two 512 KiB files.
  • Policy is capped at 1 MiB; at most 512 plugins are observed; each DLL is capped at 512 MiB and total unique DLL input is capped at 4 GiB.
  • No continuous chest, production, portal, player, or world-object scan is performed. The administrator topology command scans at most 16,384 already-loaded ZDOs only when requested.

Runic Sentinel 1.3.2 requires Runic Safety 1.0.2 for verified legacy and Valheim 1.0 chunked-world transition backups. It targets Valheim 1.0.7 and BepInExPack Valheim 5.4.2350, and has no Runic Core or Runic Persistence dependency. In the F3 workflow the private RSA-3072 key is server-managed and never sent through the panel or network. Offline-key operators may continue using the separate Forge workflow instead.

CHANGELOG

Changelog

1.4.2 - 2026-09-14

  • Fixed administrator connection recognition with ServerSync and Conditional Config Sync buffering sockets, including nested wrappers.
  • Preserved native Steam and PlayFab identity verification without changing configuration-sync queues or permissions.
  • Added specific diagnostics for unsupported socket wrappers and mismatched connections.

1.4.1 - 2026-09-14

  • Fixed administrator setup rejecting Steam session-authenticated players when a connection certificate is unavailable.
  • Kept authentication tied to the current connection, with session revocation and disconnect cleanup.
  • Added specific connection-verification details to administrator error messages.

1.4.0 - 2026-09-12

  • Added an F3 Server Cap tab for RunicWorldEngine 1.2.x, showing connected players, the running cap, saved settings, and restart status.
  • Added administrator-verified controls to enable the cap override and save a 2–64 player limit for the next server restart.
  • Added configuration backups and stale-edit protection without changing the live cap, disconnecting players, or modifying admission policy.
  • Added clear guidance when the host needs an updated Sentinel or enabled World Engine.

1.3.2 - 2026-09-10

  • Added one-click Set Up Sentinel in the F3 panel for verified server administrators and local listen hosts.
  • Added server-controlled administrator access through adminlist.txt, including Steam raw, Steam_, and Valheim 1.0 V_ ID formats.
  • Preserved existing signed roles, bans, policies, and keys; first-time setup does not change admission mode.
  • Added clearer administrator access guidance and an option to require signed Sentinel roles only.
  • Recheck administrator access before returning cached panel responses.

1.3.1 - 2026-09-09

  • Updated the exact native admission seam for Valheim 1.0.7's two-argument server handshake and preserved the invite secret through the one approved Required-mode resume.
  • Moved the fail-closed transition gate to the common server world-load boundary, covering both legacy saves and Valheim 1.0 chunked saves.
  • Backed up the complete active World.GetSavePaths() set, including recursively verified chunked directories with a hard 1,024-file ceiling; Steam Cloud staging no longer deletes source files.
  • Updated the release dependency floor to BepInExPack Valheim 5.4.2350 and Runic Safety 1.0.2.

1.3.0 - 2026-09-07

  • Fixed Optional-mode retries so every new observation uses a fresh challenge and reset attempt budget, and retained a full-client responder across the pre-PeerInfo connection phase.
  • Added the server half of the direct, server-initiated Sentinel admission protocol used by the separate Runic Sentinel Client package.
  • Required mode now withholds Valheim's native server handshake until a bounded client report is received, so a client with no Sentinel responder can no longer pass silently.
  • Gated RPC_PeerInfo at the actual native world-admission boundary, started the deadline for every accepted transport, and bounded both the approved-handshake resume and follow-on PeerInfo windows while allowing two minutes for Valheim's password prompt.
  • Made direct RPC registration collision-safe and ownership-checked during cleanup.
  • Switched connection-duration deadlines to a monotonic clock so host wall-clock corrections cannot stretch or prematurely expire an admission window.
  • Delayed the first full plugin snapshot until Unity Start, after BepInEx finishes loading plugin components, so later-loaded plugins cannot escape the inventory.
  • Made the effective Remote Admission mode explicit and reject F3 mode changes until restart, so a transition cannot strand an intercepted native handshake.
  • Bound every admission report to the exact direct ZRpc connection and a fresh server nonce; routed sender IDs and client-supplied peer IDs are not admission authority.
  • Moved remote F3 administrator requests and responses to exact direct peer connections so routed sender IDs cannot select another player's authenticated administrator identity.
  • Made the server reconstruct and evaluate the reported client plugin inventory against its own verified signed policy. Client and server plugin sets may now differ intentionally.
  • Kept remote inventory claims explicitly self-reported compatibility evidence, not proof that a hostile client is running unmodified code.
  • Aligned the package, plugin, file, and informational versions and updated the Runic Safety pin.

1.2.5 - 2026-09-05

  • Reworked the Thunderstore description and README opening to lead with the player problem, the mod's core benefit, major features, in-game feel, and then safety and compatibility details.
  • Description-only package update. The plugin DLL and gameplay behavior are byte-for-byte unchanged from 1.2.4.

1.2.4 - 2026-09-01

  • Made the F3 administrator panel fully modal: it keeps the OS cursor visible and unlocked, prevents the game camera from reclaiming mouse capture, and blocks local movement/use input while open.
  • Suppressed every local combat/build path that could consume a panel click, including queued attack processing, new StartAttack calls, placement actions, and build-menu input. F3 and Escape still close the panel normally.

1.2.3 - 2026-09-01

  • Rebuilt the authenticated F3 administrator panel with an opaque Valheim-style carved-wood frame, dark inset content wells, cream/gold text, selected wooden tabs, higher-contrast fields, and a compact action footer patterned after the native F2 connection panel.
  • Kept the administrator transport, per-request server re-authorization, policy validation, signing, backup, and tool behavior unchanged; this release changes presentation only.

1.2.2 - 2026-09-01

  • Fixed dedicated-server bootstrap failing with rsa-3072-unavailable when Unity/Mono ignored a KeySize = 3072 assignment on the provider returned by RSA.Create().
  • Added a validated RSACryptoServiceProvider(3072) fallback with CSP persistence disabled, and reused the same provider fallback when importing the managed private key for later signing.
  • Kept exact RSA-3072 requirements: a 384-byte modulus, exponent 65537, private-key export, SHA-256, PKCS#1 v1.5 signatures, and immediate verification of the generated policy.

1.2.1 - 2026-09-01

  • Added bounded stdin handling for the real batch-mode dedicated-server window, making runic_sentinel status, bootstrap, report, and networks directly typeable there.
  • Kept all command execution on Unity's main thread with a 32-line queue, 1,024-character line bound, and eight-command per-frame drain limit.

1.2.0 - 2026-08-31

  • Added a ConfigManager-style F3 administrator panel with signed mod lists, administrators, bans, admission policy, runtime integrity, and graduated enforcement controls.
  • Added server-side backend-account authorization on every panel read and mutation; ordinary players receive no policy document and cannot invoke reports, maps, backups, or signing.
  • Added one-time server-console bootstrap and a server-managed RSA-3072 key kept under the non-package server-private directory; the key is never returned to the client panel.
  • Added panel actions for bounded support reports, administrator-only production/portal maps, and immediate verified Runic Safety world backups.
  • Made the high/very-high escalation counts and rolling enforcement window effective server settings.
  • Preserved Runic Sentinel as a standalone plugin: no Runic Core or Runic Persistence package, project, manifest, or assembly dependency. The F3 channel uses Valheim's routed networking and exact current Steam/PlayFab peer identity.

1.1.0 - 2026-08-31

  • Kept the first-run Optional/monitor-only workflow usable when no signed passport exists yet; transition backup enforcement now fails closed only when Raven's Gate admission is Required.
  • Added explicit player explanations for expired passports and protected transition-backup failures.
  • Added a crash-surviving bounded security flight recorder with one 512 KiB current file and one 512 KiB previous file; recorder I/O is isolated from request blocking and gameplay.
  • Hardened the standalone routed profile comparison and Required-mode disconnection behavior.
  • Added signed v3 plugin lists, administrators, and banned identities.
  • Added runtime integrity monitoring, automatic request enforcement, support reports, clear denial UI, offline Forge tooling, current-profile export, and verified transition backups.
  • Added an authoritative-server-only, on-demand bounded portal and production topology snapshot.

1.0.0 - 2026-08-22

  • Added a private bounded standalone compatibility exchange with explicit Disabled, Optional-default, and Required outcomes. Required enforces the server's verified signed policy digest/sequence/profile; all client snapshot/hash/disposition values remain explicitly self-reported compatibility evidence.

  • Added timestamp freshness, bounded current-peer validation, and replay/equivocation/rollback detection without a remote-administration claim.

  • Replaced the forgeable same-process HMAC design with strict RSA-3072/SHA-256 PKCS#1 v1.5 verification of exact RUNIC-SENTINEL/2 bytes. Sentinel loads only a public key whose exact canonical-file SHA-256 is pinned in configuration.

  • Added strict public-key and signature-file canonicalization, policy sequence/issue/expiry fields, and in-process rollback/equivocation rejection.

  • Kept attestation, admission, and evidence contracts private to Runic Sentinel and corrected the canonical capability from security.attestation to security.attest.

  • Renamed the public nonce digest to an unauthenticated nonce binding and explicitly reports that it is neither client-authenticity proof nor an authoritative transport.

  • Added exact local-lease evidence-provider registration, per-provider fair queues, immutable reads, requested/effective action, policy sequence, and saturating accepted/drop counters.

  • Made worker publication generation-safe, cancellation-gated, platform-path-correct, and deduplicated so multiple plugin descriptors sharing one path hash that file only once.

  • Made Enabled = false startup-inert: no worker, network handler, or service is created.

0.1.0

  • Hardened plugin and signed-policy input reads against size-check/read races: hashing consumes the exact admitted length through one reusable bounded buffer, and policy/signature/key streams must remain byte-exact and metadata-stable through EOF before verification.

  • Added bounded signed-policy parsing and HMAC-SHA256 verification with fail-closed monitor-only fallback.

  • Added deterministic loaded-plugin attestation, fresh-nonce response, admission policy, and a 256-entry evidence ledger.

  • Published security.attestation, security.admission, and security.evidence protocol 1.0 services.

  • Deliberately deferred connection enforcement until an authenticated server/client transport exists.