| Commit message (Collapse) | Author | Age |
| |
|
| |
|
|\
| |
| | |
DHCP client support
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
dhclient -6 fails if the interface to be configures has no link-local address.
This is especially problematic when only DHCPv6 is used
(e.g., --ip=none --ip6=dhcp), because the wait for a DHCPv4 lease is usually
ample time for the LL address to become available on the IPv6 link.
The LL address must not be tenative.
Therefore, this patch implements waiting for a non-tentative link-local
address in fnet for DHCPv6 configured interfaces.
The command fnet waitll <if> waits for an LL address on the interface <if>.
Currently, the maximum waiting time is 30 seconds,
and the kernel is polled through rtnetlink every 500 milliseconds.
These values seem sufficient for virtual bridged networks,
e.g., libvirt NAT networks.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* In order to ensure that network interfaces are already configured when
the sandboxed launches, we run dhclient in forking mode (no -d switch),
which makes the dhclient command exit when it successfully acquired a lease.
The dhclient daemon process keeps running in the background.
* We read the pid file for dhclient to find out the pid of the daemon process.
Because dhclient only writes the pid file in the child process potentially
after the forking parent process exits, there is some handling for possible
race conditions.
* All lease files and pid files are under /run/firejail/dhclient/
* The v4 and v6 dhclient has a separate lease as recommended.
* The v4 client is set to generate a DUID, which is also used by the v6 client
so that the server can associate the two leases if needed.
* /etc/resolv.conf is created in the sandbox just like with the --dns option,
by mirroring /etc. When DHCP is used, /etc/resolv.conf is normally empty so
that dhclient can overwrite it the nameservers from the DHCP server.
Current limitations:
* The dhclient processes in the background are not terminated properly
(by SIGTERM or dhclient -x), nor is the DHCP lease released (by dclient -r).
The reason for this is that firejail drops all capabilities and privileges
before the application in the sandbox is launched, which makes it impossible
to launch dhclient to release the lease or kill the dhclient processes still
running with the effective user id of root. Instead the dhclient daemons
die with the sandbox. According to the dhclient man page, releasing the lease
is not required by the DHCP specification, so this is not a problem, however
some ISPs may require releasing leases.
A possible workaround would be to fork another process upon sandbox
initialization that invokes dhclient -r when the sandbox is ready to exit.
This would require communication with the main firejail process through
a pipe, while keeping and required privileges. As this would add some
complexity but the benefits have limited applicability (compatibility with
esoteric DHCP server configurations), I chose not to implement this.
* When only an IPv6 address is requested, the interface may possible not have
a link-local address when we run dhclient. This causes dhclient -6 fail,
since DHCPv6 uses link-local addressing instead of layer 2 addressing,
see e.g., https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=783387
In a future commit, waiting for a link-local address will be added.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The new capability filter SBOX_CAPS_NET_SERVICE allows forked processes
to bind to low ports (privileged network services).
Because dhcp clients require both low ports and network administration
privileges, this patch also allows (bitwise) combination of capability filters
(except SBOX_CAPS_NONE, which completely drops any capabilities)
to grant both SBOX_CAPS_NETWORK and SBOX_CAPS_NET_SERVICE to a dhcp client.
This way, fnet and fnetfilter calls still do not get CAP_NET_BIND_SERVICE.
|
| |
| |
| |
| |
| |
| |
| | |
Refactored sbox_run to pass the varargs argument list as an array to an
auxiliary function.
The auxiliary function allows running programs with dynamically built
argument lists.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When dhclient is used to assign and IP to the container,
it should be able to overwrite resolv.conf
Therefore, we do the /etc mirroring similarly to the situation with
manually configured nameservers.
When both DHCP and manually set nameservers are in use,
warn that the manual ones will be overwritten
|
| |
| |
| |
| |
| |
| |
| | |
If the container has no IP address (because it will be assigned via DHCP later),
setting up a default route fails with a warning message.
While this is harmless, the default route should be omitted instead.
|
| |
| |
| |
| |
| | |
Currently, --ip=dhcp is equivalent to --ip=none
and --ip6=dhcp does nothing either, except for parsing correctly
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Add barrier.profile
* Add newline before special options
* Modify description
* Add disable mount to barrier.profile
* Address feedback from rusty-snake
* Remove stray carriage return
* Add noexec for /home/user and /tmp
* Don't blacklist openssl
* Remove redundant rules
|
|/ |
|
|
|
| |
More research/testing is needed to make CLI-based archivers work on Arch (based distributions). See ongoing discussion in #3095.
|
|\
| |
| | |
add join timeout and make it configurable
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
fixes #2139
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
* Create ephemeral.profile
* Add ephemeral.profile
* Add ephemeral.profile
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Allow user access to /proc/config.gz
* Fix Brave's native sandbox
* Move /proc/config.gz to disable-common.inc
* Move /proc/config.gz to disable-common.inc
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Add more brave redirects to firecfg.config
These redirects are found on Debian/Ubuntu when enabling the official Brave repositories cfr. https://brave-browser.readthedocs.io/en/latest/installing-brave.html#linux
* Create brave-browser-beta.profile
* Create brave-browser-dev.profile
* Create brave-browser-nightly.profile
* Create brave-browser-stable.profile
|
| | |
|
| | |
|
| | |
|
| |
| |
| | |
Fixes #3068.
|
| | |
|
| | |
|
| |
| |
| |
| | |
apparently on x86 and on other platforms like aarch64 a 16 byte aligned stack is expected
todo: replace this with a generic check
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
* Create gist.profile
* Add gist config to disable-programs.inc
* Add gist to firecfg.config
* Update RELNOTES
* Update README.md
|
| |
| |
| |
| |
| |
| | |
* Create unf.profile
* Add unf to firecfg.config
|
| |
| |
| |
| |
| |
| |
| |
| | |
* Create gmpc.profile
* Add gmpc config to disable-programs.inc
* Add gmpc to firecfg.config
|
| |
| |
| |
| |
| |
| |
| |
| | |
* Create drawio.profile
* Add drawio config to disable-programs.inc
* Add drawio to firecfg.config
|
| |
| |
| |
| |
| |
| | |
* Create ddgtk.profile
* Add ddgtk to firecfg.config
|
| |
| |
| |
| |
| |
| | |
* Create cameramonitor.profile
* Add cameramonitor to firecfg.config
|
| |
| |
| |
| |
| |
| | |
* Create audio-recorder.profile
* Add audio-recorder to firecfg.config
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
* Create electron-mail.profile
* Add electron-mail to disable-programs.inc
* Add electron-mail to firecfg.config
|
| | |
|
| | |
|
|/ |
|
|
|
|
|
| |
get previous commit acbf707889ae241bfd476f5371df4599103b6606
in line with treatment of other directories in /run/firejail/mnt
|
|
|
|
|
| |
as far as possible avoid creating locations in the file system
that are both writable and executable
|