update README document
All checks were successful
Test / Create distribution (push) Successful in 30s
Test / ShareFS (push) Successful in 37s
Test / Sandbox (push) Successful in 44s
Test / Sandbox (race detector) (push) Successful in 43s
Test / Hpkg (push) Successful in 45s
Test / Hakurei (push) Successful in 50s
Test / Hakurei (race detector) (push) Successful in 3m15s
Test / Flake checks (push) Successful in 1m39s
All checks were successful
Test / Create distribution (push) Successful in 30s
Test / ShareFS (push) Successful in 37s
Test / Sandbox (push) Successful in 44s
Test / Sandbox (race detector) (push) Successful in 43s
Test / Hpkg (push) Successful in 45s
Test / Hakurei (push) Successful in 50s
Test / Hakurei (race detector) (push) Successful in 3m15s
Test / Flake checks (push) Successful in 1m39s
Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
181
README.md
181
README.md
@@ -15,164 +15,51 @@
|
|||||||
<a href="https://hakurei.app"><img src="https://img.shields.io/website?url=https%3A%2F%2Fhakurei.app" alt="Website" /></a>
|
<a href="https://hakurei.app"><img src="https://img.shields.io/website?url=https%3A%2F%2Fhakurei.app" alt="Website" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
Hakurei is a tool for running sandboxed graphical applications as dedicated subordinate users on the Linux kernel.
|
Hakurei is a tool for running sandboxed desktop applications as dedicated
|
||||||
It implements the application container of [planterette (WIP)](https://git.gensokyo.uk/security/planterette),
|
subordinate users on the Linux kernel. It implements the application container
|
||||||
a self-contained Android-like package manager with modern security features.
|
of [planterette (WIP)](https://git.gensokyo.uk/security/planterette), a
|
||||||
|
self-contained Android-like package manager with modern security features.
|
||||||
|
|
||||||
## NixOS Module usage
|
Interaction with hakurei happens entirely through structures described by
|
||||||
|
package [hst](https://pkg.go.dev/hakurei.app/hst). No native API is available
|
||||||
|
due to internal details of uid isolation.
|
||||||
|
|
||||||
The NixOS module currently requires home-manager to configure subordinate users. Full module documentation can be found [here](options.md).
|
## Notable Packages
|
||||||
|
|
||||||
To use the module, import it into your configuration with
|
Package [container](https://pkg.go.dev/hakurei.app/container) is general purpose
|
||||||
|
container tooling. It is used by the hakurei shim process running as the target
|
||||||
|
subordinate user to set up the application container. It has a single dependency,
|
||||||
|
[libseccomp](https://github.com/seccomp/libseccomp), to create BPF programs
|
||||||
|
for the [system call filter](https://www.kernel.org/doc/html/latest/userspace-api/seccomp_filter.html).
|
||||||
|
|
||||||
```nix
|
Package [internal/pkg](https://pkg.go.dev/hakurei.app/internal/pkg) provides
|
||||||
{
|
infrastructure for hermetic builds. This replaces the legacy nix-based testing
|
||||||
inputs = {
|
framework and serves as the build system of Rosa OS, currently developed under
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
package [internal/rosa](https://pkg.go.dev/hakurei.app/internal/rosa).
|
||||||
|
|
||||||
hakurei = {
|
## Dependencies
|
||||||
url = "git+https://git.gensokyo.uk/security/hakurei";
|
|
||||||
|
|
||||||
# Optional but recommended to limit the size of your system closure.
|
`container` depends on:
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
outputs = { self, nixpkgs, hakurei, ... }:
|
- [libseccomp](https://github.com/seccomp/libseccomp) to generate BPF programs.
|
||||||
{
|
|
||||||
nixosConfigurations.hakurei = nixpkgs.lib.nixosSystem {
|
|
||||||
system = "x86_64-linux";
|
|
||||||
modules = [
|
|
||||||
hakurei.nixosModules.hakurei
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
This adds the `environment.hakurei` option:
|
`cmd/hakurei` depends on:
|
||||||
|
|
||||||
```nix
|
- [acl](https://savannah.nongnu.org/projects/acl/) to export sockets to
|
||||||
{ pkgs, ... }:
|
subordinate users.
|
||||||
|
- [wayland](https://gitlab.freedesktop.org/wayland/wayland) to set up
|
||||||
|
[security-context-v1](https://wayland.app/protocols/security-context-v1).
|
||||||
|
- [xcb](https://xcb.freedesktop.org/) to grant and revoke subordinate users
|
||||||
|
access to the X server.
|
||||||
|
|
||||||
{
|
`cmd/sharefs` depends on:
|
||||||
environment.hakurei = {
|
|
||||||
enable = true;
|
|
||||||
stateDir = "/var/lib/hakurei";
|
|
||||||
users = {
|
|
||||||
alice = 0;
|
|
||||||
nixos = 10;
|
|
||||||
};
|
|
||||||
|
|
||||||
commonPaths = [
|
- [fuse](https://github.com/libfuse/libfuse) to implement the filesystem.
|
||||||
{
|
|
||||||
src = "/sdcard";
|
|
||||||
write = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
extraHomeConfig = {
|
New dependencies will generally not be added. Patches adding new dependencies
|
||||||
home.stateVersion = "23.05";
|
are very likely to be rejected.
|
||||||
};
|
|
||||||
|
|
||||||
apps = {
|
## NixOS Module (deprecated)
|
||||||
"org.chromium.Chromium" = {
|
|
||||||
name = "chromium";
|
|
||||||
identity = 1;
|
|
||||||
packages = [ pkgs.chromium ];
|
|
||||||
userns = true;
|
|
||||||
mapRealUid = true;
|
|
||||||
dbus = {
|
|
||||||
system = {
|
|
||||||
filter = true;
|
|
||||||
talk = [
|
|
||||||
"org.bluez"
|
|
||||||
"org.freedesktop.Avahi"
|
|
||||||
"org.freedesktop.UPower"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
session =
|
|
||||||
f:
|
|
||||||
f {
|
|
||||||
talk = [
|
|
||||||
"org.freedesktop.FileManager1"
|
|
||||||
"org.freedesktop.Notifications"
|
|
||||||
"org.freedesktop.ScreenSaver"
|
|
||||||
"org.freedesktop.secrets"
|
|
||||||
"org.kde.kwalletd5"
|
|
||||||
"org.kde.kwalletd6"
|
|
||||||
];
|
|
||||||
own = [
|
|
||||||
"org.chromium.Chromium.*"
|
|
||||||
"org.mpris.MediaPlayer2.org.chromium.Chromium.*"
|
|
||||||
"org.mpris.MediaPlayer2.chromium.*"
|
|
||||||
];
|
|
||||||
call = { };
|
|
||||||
broadcast = { };
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"org.claws_mail.Claws-Mail" = {
|
The NixOS module is in maintenance mode and will be removed once planterette is
|
||||||
name = "claws-mail";
|
feature-complete. Full module documentation can be found [here](options.md).
|
||||||
identity = 2;
|
|
||||||
packages = [ pkgs.claws-mail ];
|
|
||||||
gpu = false;
|
|
||||||
capability.pulse = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
"org.weechat" = {
|
|
||||||
name = "weechat";
|
|
||||||
identity = 3;
|
|
||||||
shareUid = true;
|
|
||||||
packages = [ pkgs.weechat ];
|
|
||||||
capability = {
|
|
||||||
wayland = false;
|
|
||||||
x11 = false;
|
|
||||||
dbus = true;
|
|
||||||
pulse = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"dev.vencord.Vesktop" = {
|
|
||||||
name = "discord";
|
|
||||||
identity = 3;
|
|
||||||
shareUid = true;
|
|
||||||
packages = [ pkgs.vesktop ];
|
|
||||||
share = pkgs.vesktop;
|
|
||||||
command = "vesktop --ozone-platform-hint=wayland";
|
|
||||||
userns = true;
|
|
||||||
mapRealUid = true;
|
|
||||||
capability.x11 = true;
|
|
||||||
dbus = {
|
|
||||||
session =
|
|
||||||
f:
|
|
||||||
f {
|
|
||||||
talk = [ "org.kde.StatusNotifierWatcher" ];
|
|
||||||
own = [ ];
|
|
||||||
call = { };
|
|
||||||
broadcast = { };
|
|
||||||
};
|
|
||||||
system.filter = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
"io.looking-glass" = {
|
|
||||||
name = "looking-glass-client";
|
|
||||||
identity = 4;
|
|
||||||
useCommonPaths = false;
|
|
||||||
groups = [ "plugdev" ];
|
|
||||||
extraPaths = [
|
|
||||||
{
|
|
||||||
src = "/dev/shm/looking-glass";
|
|
||||||
write = true;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
extraConfig = {
|
|
||||||
programs.looking-glass-client.enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
```
|
|
||||||
Reference in New Issue
Block a user