Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ynetd: add nixos module #391184

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Conversation

haylinmoore
Copy link
Contributor

Introduces a nixos module for setting up ynetd instances. Bear with me this is my first nixos module.

I'm not 100% sure about my way of modeling it with multiple instances. I firmly believe that however it is made should allow for multiple instances since it's more akin to NGINX with multiple virtual hosts, than a service that would just have one instance running per host-machine, I'm just not sure if this is the best way to model it.

It might also make sense to have a toggle to specify what user the systemd service will be running as (or maybe tighten it down to be a non-root user, but then give it all the privileges needed. For this case CAP_SETUID and CAP_SETGID come to mind, but for ynetd.hardened/ctf-ynetd it would also need the ability to manage cgroups and I don't know the proper permissions for that besides CAP_SYS_ADMIN which just basically becomes root. That being said I imagine most users of this where security is a concern (like CTFs where the aim is to pwn a binary) will do it inside of a nix container/vm anyways.

Things done

  • Built on platform(s)
    • x86_64-linux
    • aarch64-linux
    • x86_64-darwin
    • aarch64-darwin
  • For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)
    • sandbox = relaxed
    • sandbox = true
  • Tested, as applicable:
  • Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
  • Tested basic functionality of all binary files (usually in ./result/bin/)
  • 25.05 Release Notes (or backporting 24.11 and 25.05 Release notes)
    • (Package updates) Added a release notes entry if the change is major or breaking
    • (Module updates) Added a release notes entry if the change is significant
    • (Module addition) Added a release notes entry if adding a new NixOS module
  • Fits CONTRIBUTING.md.

Add a 👍 reaction to pull requests you find important.

@github-actions github-actions bot added 6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: changelog 8.has: module (update) This PR changes an existing module in `nixos/` 8.has: documentation This PR adds or changes documentation labels Mar 19, 2025
@haylinmoore haylinmoore requested a review from philiptaron March 19, 2025 05:32
@github-actions github-actions bot added 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10 labels Mar 19, 2025
@toastal
Copy link
Contributor

toastal commented Mar 19, 2025

I don’t think this is the place/time to run the formatter on the all-test.nix file unfortunately.

@haylinmoore
Copy link
Contributor Author

oops, I completely missed how much that formatted. I'll undo that in the morning !

${instanceCfg.extraFlags} \
"${instanceCfg.command}"
'';
User = "root";
Copy link
Contributor

Choose a reason for hiding this comment

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

Does this need to be root? Can a systemd user or whatever not be used?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is the bit I feel a little uneasy regarding, I have a little explanation in the second paragraph of my PR, like we could set it to a less powerful user, but then for cgroups I believe it would need CAP_SYS_ADMIN at which point it's basically root just under another name.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I think if I go through and model more of the flags I can dynamically apply some of the CAP for the unhardened ynetd. I'll go through and see how this looks

@h7x4 h7x4 added 8.has: module (new) This PR adds a module in `nixos/` 8.has: tests This PR has tests labels Mar 22, 2025
Copy link
Contributor

@awwpotato awwpotato left a comment

Choose a reason for hiding this comment

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

avoid using with at the top of modules, per nix docs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
6.topic: nixos Issues or PRs affecting NixOS modules, or package usability issues specific to NixOS 8.has: changelog 8.has: documentation This PR adds or changes documentation 8.has: module (new) This PR adds a module in `nixos/` 8.has: module (update) This PR changes an existing module in `nixos/` 8.has: tests This PR has tests 10.rebuild-darwin: 0 This PR does not cause any packages to rebuild on Darwin 10.rebuild-linux: 1-10
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants