Hakoniwa.d

June 15, 2025 ยท View on GitHub

Hakoniwa profiles for the desktop applications. It uses container-type sandboxes to isolate applications and increase desktop system security. By default, the applications have limited access to the host resources. This includes:

  • A slimmed-down host file system with read-only access.
  • A separate HOME directory only contains the application's data.
  • No access to the network.
  • No access to unnecessary devices.
  • No access to unnecessary host services.

Most desktop applications require access to some host resources to function properly. For example, they need X11 for the user interface, PulseAudio for audio playback, and D-Bus to send notifications. Document applications.md lists all available applications and their respective permissions.

Warning

Running untrusted code is never safe, sandboxing cannot change this.

Requirements

  • Linux kernel 6.7 or later
  • Rust 1.85 or later

Installation

# Clone repository
git clone https://github.com/souk4711/hakoniwa.d.git && cd hakoniwa.d

# Install hakoniwa to /usr/bin/hakoniwa
sudo make install_hakoniwa

# Install hakoniwa profiles to /etc/hakoniwa.d/
sudo make install_hakoniwa_d

# OPTIONAL: Generate a specified binary wrapper in /usr/local/bin/
sudo make binwrappers bin=firefox

# OPTIONAL: Generate a set of binary wrappers in /usr/local/bin/
sudo make binwrappers group=browser

Usage

Launch application /usr/bin/firefox with a hakoniwa profile:

hakoniwa run -c /etc/hakoniwa.d/firefox.toml -- /usr/bin/firefox

If you have installed binary wrappers, then use the binwrapper:

/usr/local/bin/firefox

Or just type firefox if the /usr/local/bin is set in the PATH environment:

firefox

You can temporarily disable the profile and run the original version with HAKONIWAD=0:

HAKONIWAD=0 firefox

Want to see what profiles are enabled, use HAKONIWAD_LOG=TRACE to display the logging output:

HAKONIWAD_LOG=TRACE firefox

Want to enter the sandbox interactively, use HAKONIWAD_CONSOLE=1 to open a shell:

HAKONIWAD_LOG=TRACE HAKONIWAD_CONSOLE=1 firefox

By default, the sandboxed browser can only access ports 80 and 443, as well as the folder ~/Downloads. To allow access to more host resources, create a file called /etc/hakoniwa.d/local/firefox.toml with the following contents:

# Allow connections on HTTP-ALT/8080, FTP/22, etc.
{% include "abstractions/network/connect/any.toml" %}

# Grant  read-only permission to HOME directory.
# Grant read-write permission to Downloads directory.
{% include "abstractions/filesystem/rdonly/media.toml" %}
{% include "abstractions/filesystem/rdonly/u-home-slim.toml" %}
{% include "abstractions/filesystem/rdonly/u-trash.toml" %}
{% include "abstractions/filesystem/xdg-downloads.toml" %}

Development

Makefile

CommandDescription
sudo make binwrappersGenerate binary wrappers in /usr/local/bin/
sudo make install_hakoniwaInstall hakoniwa to /usr/bin/hakoniwa
sudo make install_hakoniwa_dInstall hakoniwa profiles to /etc/hakoniwa.d/
sudo make uninstallUninstall hakoniwa stuff
make lintRun lints
make testRun test suites
make helpPrint help

License

Licensed under the GPL-3.0-only.