aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--RELNOTES1
-rw-r--r--etc/server.profile1
-rw-r--r--src/firejail/caps.c11
-rw-r--r--src/firejail/firejail.h1
-rw-r--r--src/firejail/join.c3
-rw-r--r--src/firejail/sandbox.c6
6 files changed, 19 insertions, 4 deletions
diff --git a/RELNOTES b/RELNOTES
index 0c59364c5..5add1b48e 100644
--- a/RELNOTES
+++ b/RELNOTES
@@ -4,6 +4,7 @@ firejail (0.9.47) baseline; urgency=low
4 please use ~/Downloads directory for saving files 4 please use ~/Downloads directory for saving files
5 * modifs: AppArmor made optional; a warning is printed on the screen 5 * modifs: AppArmor made optional; a warning is printed on the screen
6 if the sandbox fails to load the AppArmor profile 6 if the sandbox fails to load the AppArmor profile
7 * feature: drop discretionary access control capabilities by default
7 * feature: added /etc/firejail/globals.local for global customizations 8 * feature: added /etc/firejail/globals.local for global customizations
8 * feature: profile support in overlayfs mode 9 * feature: profile support in overlayfs mode
9 * new profiles: vym, darktable, Waterfox, digiKam, Catfish 10 * new profiles: vym, darktable, Waterfox, digiKam, Catfish
diff --git a/etc/server.profile b/etc/server.profile
index 31a81b88f..2d79fa1c8 100644
--- a/etc/server.profile
+++ b/etc/server.profile
@@ -18,6 +18,7 @@ blacklist /tmp/.X11-unix
18no3d 18no3d
19nosound 19nosound
20seccomp 20seccomp
21caps
21 22
22private 23private
23private-dev 24private-dev
diff --git a/src/firejail/caps.c b/src/firejail/caps.c
index d45ba20ce..883e8015e 100644
--- a/src/firejail/caps.c
+++ b/src/firejail/caps.c
@@ -248,10 +248,17 @@ void caps_print(void) {
248 } 248 }
249} 249}
250 250
251// drop discretionary access control capabilities by default in all sandboxes
252void caps_drop_dac_override(void) {
253 if (prctl(PR_CAPBSET_DROP, CAP_DAC_OVERRIDE, 0, 0, 0));
254 else if (arg_debug)
255 printf("Drop CAP_DAC_OVERRIDE\n");
251 256
257 if (prctl(PR_CAPBSET_DROP, CAP_DAC_READ_SEARCH, 0, 0, 0));
258 else if (arg_debug)
259 printf("Drop CAP_DAC_READ_SEARCH\n");
260}
252 261
253
254// enabled by default
255int caps_default_filter(void) { 262int caps_default_filter(void) {
256 // drop capabilities 263 // drop capabilities
257 if (prctl(PR_CAPBSET_DROP, CAP_SYS_MODULE, 0, 0, 0)) 264 if (prctl(PR_CAPBSET_DROP, CAP_SYS_MODULE, 0, 0, 0))
diff --git a/src/firejail/firejail.h b/src/firejail/firejail.h
index 6f0a5aa7b..8224b5012 100644
--- a/src/firejail/firejail.h
+++ b/src/firejail/firejail.h
@@ -533,6 +533,7 @@ void caps_check_list(const char *clist, void (*callback)(int));
533void caps_drop_list(const char *clist); 533void caps_drop_list(const char *clist);
534void caps_keep_list(const char *clist); 534void caps_keep_list(const char *clist);
535void caps_print_filter(pid_t pid); 535void caps_print_filter(pid_t pid);
536void caps_drop_dac_override(void);
536 537
537// syscall.c 538// syscall.c
538const char *syscall_find_nr(int nr); 539const char *syscall_find_nr(int nr);
diff --git a/src/firejail/join.c b/src/firejail/join.c
index b5b45a3bf..d7328a91b 100644
--- a/src/firejail/join.c
+++ b/src/firejail/join.c
@@ -242,6 +242,9 @@ void join(pid_t pid, int argc, char **argv, int index) {
242 if (child < 0) 242 if (child < 0)
243 errExit("fork"); 243 errExit("fork");
244 if (child == 0) { 244 if (child == 0) {
245 // drop discretionary access control capabilities by default
246 caps_drop_dac_override();
247
245 // chroot into /proc/PID/root directory 248 // chroot into /proc/PID/root directory
246 char *rootdir; 249 char *rootdir;
247 if (asprintf(&rootdir, "/proc/%d/root", pid) == -1) 250 if (asprintf(&rootdir, "/proc/%d/root", pid) == -1)
diff --git a/src/firejail/sandbox.c b/src/firejail/sandbox.c
index b22a4c651..0a32393a2 100644
--- a/src/firejail/sandbox.c
+++ b/src/firejail/sandbox.c
@@ -99,6 +99,9 @@ static void set_caps(void) {
99 caps_keep_list(arg_caps_list); 99 caps_keep_list(arg_caps_list);
100 else if (arg_caps_default_filter) 100 else if (arg_caps_default_filter)
101 caps_default_filter(); 101 caps_default_filter();
102
103 // drop discretionary access control capabilities by default
104 caps_drop_dac_override();
102} 105}
103 106
104void save_nogroups(void) { 107void save_nogroups(void) {
@@ -896,8 +899,7 @@ int sandbox(void* sandbox_arg) {
896 // set security filters 899 // set security filters
897 //**************************** 900 //****************************
898 // set capabilities 901 // set capabilities
899// if (!arg_noroot) 902 set_caps();
900 set_caps();
901 903
902 // set rlimits 904 // set rlimits
903 set_rlimits(); 905 set_rlimits();