Skip to content

Document daemon IPC privilege requirements and the Windows named pipe - #894

Merged
lixmal merged 5 commits into
mainfrom
daemon-ipc-privileges
Jul 30, 2026
Merged

Document daemon IPC privilege requirements and the Windows named pipe#894
lixmal merged 5 commits into
mainfrom
daemon-ipc-privileges

Conversation

@lixmal

@lixmal lixmal commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Documents the local daemon IPC authorization added in client v0.76.0, and corrects the Windows daemon address, which is now a named pipe rather than loopback TCP.

  • Add a "Privileged Operations" section to the gRPC socket page: which operations require root or an administrator, how the daemon identifies a local caller on each platform, and the PRIVILEGE_REQUIRED error detail an integration should render instead of the raw error
  • Replace the Windows default address tcp://127.0.0.1:41731 with npipe://netbird, explain the protected-namespace and fallback pipe paths, and note that existing installations are migrated automatically
  • Warn that a TCP daemon or gateway socket carries no caller identity, so privileged operations are refused on it whoever runs the client
  • Note on the JSON socket page that the gateway forwards its HTTP client's identity, and that a refusal arrives as HTTP 403 with the same detail
  • Use sudo in the SSH server examples on the SSH, CLI and setup-key pages, since enabling the SSH server, root login or the auth bypass now requires privileges
  • Explain on the SSH and desktop app pages that the app cannot change those switches on Linux and macOS, where it runs as your own user, and shows the equivalent command instead
  • Add troubleshooting entries for a refused call on both socket pages

Screenshots

Full-page captures of the changed pages are local PNGs from the dev server, in
/tmp/claude-1000/-home-vma-dev-netbird/ca53bbcd-1c59-460f-a74f-e719b663a766/scratchpad/shots/
(docs-grpc-socket, docs-json-socket, docs-peers-ssh), taken at 1920px.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

Summary by CodeRabbit

  • Documentation
    • Clarified that enabling SSH server access, root login, and SSH authentication changes require elevated privileges (while disabling may remain usable in some cases), including managed workstation guidance.
    • Updated CLI/automation examples to use elevated netbird down / netbird up --allow-server-ssh.
    • Added Windows named-pipe (npipe://netbird) support and refreshed default address guidance.
    • Expanded security and troubleshooting for privileged-operation denials over TCP/HTTP (including PRIVILEGE_REQUIRED), plus grpcurl testing notes.
    • Added warnings for debug bundle uploads, including root/admin and secure URL requirements.

@vercel

vercel Bot commented Jul 30, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
docs Ready Ready Preview Jul 30, 2026 10:20am

Request Review

@coderabbitai

coderabbitai Bot commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The documentation updates clarify elevated SSH configuration requirements, add Windows named-pipe daemon addresses, document caller identity and privileged-operation refusal behavior for gRPC and JSON sockets, and explain debug bundle upload privilege and transport requirements.

Changes

Daemon access and privilege documentation

Layer / File(s) Summary
SSH privilege guidance
src/pages/client/desktop-app.mdx, src/pages/manage/peers/ssh.mdx, src/pages/get-started/cli.mdx, src/pages/manage/peers/access-infrastructure/...
SSH GUI, CLI, and automation instructions identify operations requiring root or administrator privileges and use elevated commands.
Daemon address formats
src/pages/client/grpc-socket.mdx, src/pages/get-started/cli.mdx
Daemon address documentation adds Windows named-pipe defaults and schemes, and updates TCP testing guidance.
Privileged operation semantics
src/pages/client/grpc-socket.mdx, src/pages/client/json-socket.mdx
Socket documentation describes caller identity, privileged-operation refusal responses, forwarding metadata behavior, and troubleshooting for PermissionDenied and HTTP 403 responses.
Debug bundle upload guidance
src/pages/get-started/cli.mdx, src/pages/help/troubleshooting-client.mdx
Debug bundle documentation adds the insecure upload flag and documents root or administrator requirements for custom endpoints and non-HTTPS connections.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • netbirdio/docs#858: Introduced related JSON socket privileged-operation and HTTP 403 documentation.
  • netbirdio/docs#859: Introduced related socket address and privileged-operation documentation.
  • netbirdio/docs#881: Updated related SSH enablement guidance and privilege behavior.

Suggested reviewers: sunsetdrifter

Poem

I’m a rabbit with SSH keys bright,
Elevated commands hop just right.
Named pipes stream through Windows dreams,
TCP guards privileged schemes.
Upload flags now tell permissions’ tale—
Clearer docs leave fewer trails.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly reflects the main documentation changes: daemon IPC privilege requirements and the Windows named pipe address.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch daemon-ipc-privileges

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

src/pages/client/desktop-app.mdx

Oops! Something went wrong! :(

ESLint: 9.39.2

TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Object'
| property 'configs' -> object with constructor 'Object'
| property 'flat' -> object with constructor 'Object'
| ...
| property 'plugins' -> object with constructor 'Object'
--- property 'react' closes the circle
Referenced from:
at JSON.stringify ()
at file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:308:45
at Array.map ()
at ConfigValidator.formatErrors (file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:299:23)
at ConfigValidator.validateConfigSchema (file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:330:84)
at ConfigArrayFactory._normalizeConfigData (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:676:19)
at ConfigArrayFactory._loadConfigData (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:641:21)
at ConfigArrayFactory._loadExtendedShareableConfig (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:946:21)
at ConfigArrayFactory._loadExtends (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:814:25)
at ConfigArrayFactory._normalizeObjectConfigDataBody (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:752:25)

src/pages/client/grpc-socket.mdx

Oops! Something went wrong! :(

ESLint: 9.39.2

TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Object'
| property 'configs' -> object with constructor 'Object'
| property 'flat' -> object with constructor 'Object'
| ...
| property 'plugins' -> object with constructor 'Object'
--- property 'react' closes the circle
Referenced from:
at JSON.stringify ()
at file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:308:45
at Array.map ()
at ConfigValidator.formatErrors (file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:299:23)
at ConfigValidator.validateConfigSchema (file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:330:84)
at ConfigArrayFactory._normalizeConfigData (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:676:19)
at ConfigArrayFactory._loadConfigData (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:641:21)
at ConfigArrayFactory._loadExtendedShareableConfig (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:946:21)
at ConfigArrayFactory._loadExtends (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:814:25)
at ConfigArrayFactory._normalizeObjectConfigDataBody (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:752:25)

src/pages/get-started/cli.mdx

Oops! Something went wrong! :(

ESLint: 9.39.2

TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Object'
| property 'configs' -> object with constructor 'Object'
| property 'flat' -> object with constructor 'Object'
| ...
| property 'plugins' -> object with constructor 'Object'
--- property 'react' closes the circle
Referenced from:
at JSON.stringify ()
at file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:308:45
at Array.map ()
at ConfigValidator.formatErrors (file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:299:23)
at ConfigValidator.validateConfigSchema (file:///node_modules/@eslint/eslintrc/lib/shared/config-validator.js:330:84)
at ConfigArrayFactory._normalizeConfigData (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:676:19)
at ConfigArrayFactory._loadConfigData (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:641:21)
at ConfigArrayFactory._loadExtendedShareableConfig (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:946:21)
at ConfigArrayFactory._loadExtends (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:814:25)
at ConfigArrayFactory._normalizeObjectConfigDataBody (file:///node_modules/@eslint/eslintrc/lib/config-array-factory.js:752:25)

  • 2 others

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/pages/client/desktop-app.mdx`:
- Around line 79-89: Update the SSH privilege wording in
src/pages/client/desktop-app.mdx lines 79-89 and src/pages/manage/peers/ssh.mdx
lines 70-78 to state that only disabling SSH authentication requires elevation;
enabling it remains allowed without elevated privileges. Preserve the existing
guidance for Enable SSH Server and Enable Root Login.

In `@src/pages/client/grpc-socket.mdx`:
- Around line 228-231: Complete the introductory sentence before the grpcurl
limitation by adding the missing subject and verb, clearly stating what the
custom loopback TCP listener is used or configured for. Keep the existing
Windows named-pipe and privileged-operations guidance unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: f755f278-af50-4731-b476-68a0b6c1e24c

📥 Commits

Reviewing files that changed from the base of the PR and between 0977b7e and 015edd9.

📒 Files selected for processing (6)
  • src/pages/client/desktop-app.mdx
  • src/pages/client/grpc-socket.mdx
  • src/pages/client/json-socket.mdx
  • src/pages/get-started/cli.mdx
  • src/pages/manage/peers/access-infrastructure/setup-keys-add-servers-to-network.mdx
  • src/pages/manage/peers/ssh.mdx

Comment thread src/pages/client/desktop-app.mdx
Comment thread src/pages/client/grpc-socket.mdx Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/pages/help/troubleshooting-client.mdx`:
- Around line 312-314: Update the Note describing --upload-bundle-insecure to
explicitly warn that it can expose debug-bundle logs and system/network
information over HTTP or untrusted TLS. State that the flag should only be used
with a trusted endpoint, preferably only for troubleshooting.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 83550045-2b1d-40aa-94dc-16eb19b946d3

📥 Commits

Reviewing files that changed from the base of the PR and between 015edd9 and 0d2cfd0.

📒 Files selected for processing (5)
  • src/pages/client/desktop-app.mdx
  • src/pages/client/grpc-socket.mdx
  • src/pages/get-started/cli.mdx
  • src/pages/help/troubleshooting-client.mdx
  • src/pages/manage/peers/ssh.mdx
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/pages/client/grpc-socket.mdx
  • src/pages/get-started/cli.mdx
  • src/pages/client/desktop-app.mdx
  • src/pages/manage/peers/ssh.mdx

Comment on lines +312 to +314
<Note>
Uploading to a custom endpoint with `--upload-bundle-url` (for example a self-hosted upload server) requires root/administrator and an `https` URL. To upload to a server that uses `http` or an untrusted TLS certificate, add `--upload-bundle-insecure`.
</Note>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Warn about the security impact of --upload-bundle-insecure.

This permits uploading debug bundles over HTTP or with untrusted TLS, potentially exposing logs and system/network information. State that it should be used only with a trusted endpoint, and preferably only for troubleshooting.

Suggested wording
 <Note>
-  Uploading to a custom endpoint with `--upload-bundle-url` (for example a self-hosted upload server) requires root/administrator and an `https` URL. To upload to a server that uses `http` or an untrusted TLS certificate, add `--upload-bundle-insecure`.
+  Uploading to a custom endpoint with `--upload-bundle-url` (for example a self-hosted upload server) requires root/administrator and an `https` URL. To upload to a trusted server that uses `http` or an untrusted TLS certificate, add `--upload-bundle-insecure`; this reduces transport security and may expose bundle contents.
 </Note>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Note>
Uploading to a custom endpoint with `--upload-bundle-url` (for example a self-hosted upload server) requires root/administrator and an `https` URL. To upload to a server that uses `http` or an untrusted TLS certificate, add `--upload-bundle-insecure`.
</Note>
<Note>
Uploading to a custom endpoint with `--upload-bundle-url` (for example a self-hosted upload server) requires root/administrator and an `https` URL. To upload to a trusted server that uses `http` or an untrusted TLS certificate, add `--upload-bundle-insecure`; this reduces transport security and may expose bundle contents.
</Note>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/help/troubleshooting-client.mdx` around lines 312 - 314, Update the
Note describing --upload-bundle-insecure to explicitly warn that it can expose
debug-bundle logs and system/network information over HTTP or untrusted TLS.
State that the flag should only be used with a trusted endpoint, preferably only
for troubleshooting.

@lixmal
lixmal merged commit cb6aa7b into main Jul 30, 2026
5 checks passed
@lixmal
lixmal deleted the daemon-ipc-privileges branch July 30, 2026 11:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants