-
Notifications
You must be signed in to change notification settings - Fork 601
Creating Profiles
Profiles are configurations defined as how Firejail will treat the application being run under it. This defines options such as what directories it has access to, what base system functionality it has access to, and so on.
Firejail's installation path depends on the package or install configuration being usually /usr/local
or /
.
Upon execution Firejail first looks in ~/.config/firejail/
for a profile and if it doesn't find one, it looks in /etc/firejail
.
There are four types of profiles:
- Full profiles (
PROGRAM_NAME.profile
)
contain a whole profile
like/etc/thunderbird.profile
. - Alias profiles (
PROGRAM_NAME.profile
)
refer to another profile
ie in/etc/thunderbird-beta.profile
usinginclude thunderbird.profile
. - Program specific profiles (
PROGRAM_NAME.local
)
add commands to an existing full profile like for allowing local features
ie in a self-created filethunderbird.local
with contentignore nodbus
. - The global profile (
globals.local
)
adds the commands to all existing full profiles
by creating such profile. Therefore the easiest way to add one or more commands to a profile, is to create a.local
file in~/.config/firejail/
and write the new commands to it.
TODO: write tests for overwrite handling of folders(noblacklist vs nowhitelist vs blacklist-nolog vs blacklist vs whitelist vs read-only).
noblacklist
permits file/location in any later blacklist, whereas nowhitelist
forbids file/location in any later blacklist. blacklist
permits everything not explicitly forbidden, whereas whitelist
forbids everything not explicitly permitted. read-only
usually involved often used program paths like /bin
.
For further flexibility we can use shell commands like firejail --whitelist=~/Downloads/thunderbird thunderbird
.
System-wide profiles for pull requests are supposed to be created in folder etc
and are based on a template in /usr/share/doc/firejail/profile.template
.
The process is fairly straightforward, given the template:
- Create a fork of the project to your own instance
- Check out that fork you created.
- Create a branch, ideally with a descriptive name
- Copy
etc/templates/profile.template
intoetc/PROGRAM.template
At this point, you can either create a symlink from your /etc/firejail/PROGRAM.template
to your copy in the repository, or you can copy your template after edits.
- Create a symlink from
/usr/local/bin/<PROGRAM>
to/usr/bin/firejail
At this point, the profile is in the most restrictive mode possible, and running the program may not launch or give errors. You can comment out lines with a #
symbol, rerun, and rinse and repeat til you get a working solution.
Alternatively, if your program acts like a similar program (e.g. an electron app is similar to Discord and teams-for-linux), you can look at their profiles to get started on your own.
The debugger options --alow-debuggers, --debug, --debug{-blacklists,-caps,-errnos,-private-lib,-protocols,-syscalls,-whitelists}
may be of use.
-
Audit your profile by calling
firejail --audit <PROGRAM>
on the according profile. -
Push your changes to your repository and create a pull request.