12 Commits

Author SHA1 Message Date
tomFlowee c0f579ff6d add VPN feature
This allows a jail to have a VPN config associated and as a result we start
a new net namespace, completely isolating the jails networking.
We then start an openVPN client to route between the main network and the
jails' network.

The main limitation here is that we don't setup DNS, which basically means
that the VPN will route DNS calls to the other side, but since we don't
remount resolv.conf this depends on the vpn provider actually mapping the
nameserver we use. For people that use a nameserver like 192.168.100.1,
this most of the time works just fine.

Improvement is possible.
2026-04-11 15:06:44 +02:00
tomFlowee d046c171f6 New feature; add encrypt-at-rest
When a jail is encryted at rest using 'encfs' we detect that and ask for
a password upon starting the jail.

This sounded like a neat little idea which ended up taking nearly 4 days
to do...
EncFS needs to be running as root, as it is a FUSE system and it will
actually stop root from reading/writing files if it is running as a
user. It also is very picky about not running in a namespace, it manages
to hang indefinitely otherwise where a shutdown can't complete because
the process doesn't want to die :-)

So, it runs as root, takes the password via a pipe and we have a
watchdog proces to kill it when the jail is shut down.
2024-05-20 22:21:03 +02:00
tomFlowee f7c9347c4c Process data sent from runner to listener
The pipe was always there, but we didn't really use it so far.
This now uses the pipe to send back the PID of the 'jailer' which we
store in a 'state' file.
2024-02-25 19:22:08 +01:00
tomFlowee b826503d86 Add init-script feature
When the profile has an init-script, we execute that with bash _before_
the actual executable is started.

This allows things like preparing the jail for a fresh run every time.

Notice that adding a second app in the same running jail skips the init
script.
2024-02-24 11:40:42 +01:00
tomFlowee e75359bcbe Rename the 'middle' process to dispatcher 2024-02-20 22:15:20 +01:00
tomFlowee 1df8778a60 Close pipes
The child runner isn't supposed to use the pipes its parent
owned, so simply close them and avoid everyone inheriting them.
2024-02-20 21:57:25 +01:00
tomFlowee 735abb7c1f Make a start with /run
this improves rbind to create the target dirs, if needed.
We also detect if the source is a socket and instead create a file to
mount on top of.
2024-02-19 12:22:45 +01:00
tomFlowee de6162b149 Do the backend work for env-vars cleanup 2024-02-17 01:03:43 +01:00
tomFlowee 089c74ad01 Add copy and fix lots of issues 2024-02-16 16:54:09 +01:00
tomFlowee f3870aec3f Redirect to namespaces
Instead of using a new user to run something secure, we now use
namespaces in order to isolate an application.
2021-05-25 14:24:44 +02:00
tomFlowee bf53034748 Finish Proof of concept.
Starting this tool will now allow one to
- use dbus to request the running of an executable
- the tool creates assigns a userId and creates
  a dir in like /data/1100
- a tiny priviledged part changes ownerhip of that dir
  to the chosen userId.
- it also runs the executable in that dir with this uid.

The effect is that no applications or users (without root)
can read the private files from those apps and they can't
read them from each other.

Running them as different users additionally means all the
standard protections apply and RPC is private between
components of one app.
For instance useful if you have a neochat daemon that listens to the
network while the main app may or may not be running. All using the same
UID naturally.
2021-05-20 19:18:55 +02:00
tomFlowee 4d1e913d01 Make communication work better 2021-05-19 12:08:57 +02:00