aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2016-07-05 10:13:25 -0400
committerLibravatar netblue30 <netblue30@yahoo.com>2016-07-05 10:13:25 -0400
commit73ce1000234e0910bc77f424e481a47c6da55dbb (patch)
tree4756996183560b6ec401d8fc35e1c4d15ce972de /src
parentaudit feature (diff)
downloadfirejail-73ce1000234e0910bc77f424e481a47c6da55dbb.tar.gz
firejail-73ce1000234e0910bc77f424e481a47c6da55dbb.tar.zst
firejail-73ce1000234e0910bc77f424e481a47c6da55dbb.zip
audit feature
Diffstat (limited to 'src')
-rw-r--r--src/firejail/firejail.h1
-rw-r--r--src/firejail/main.c16
-rw-r--r--src/firejail/sandbox.c20
-rw-r--r--src/man/firejail.txt3
4 files changed, 34 insertions, 6 deletions
diff --git a/src/firejail/firejail.h b/src/firejail/firejail.h
index 39013de56..ddc37e203 100644
--- a/src/firejail/firejail.h
+++ b/src/firejail/firejail.h
@@ -261,6 +261,7 @@ extern int arg_writable_etc; // writable etc
261extern int arg_writable_var; // writable var 261extern int arg_writable_var; // writable var
262extern int arg_appimage; // appimage 262extern int arg_appimage; // appimage
263extern int arg_audit; // audit 263extern int arg_audit; // audit
264extern char *arg_audit_prog; // audit
264 265
265extern int parent_to_child_fds[2]; 266extern int parent_to_child_fds[2];
266extern int child_to_parent_fds[2]; 267extern int child_to_parent_fds[2];
diff --git a/src/firejail/main.c b/src/firejail/main.c
index 34cc38cd5..ac554ca2a 100644
--- a/src/firejail/main.c
+++ b/src/firejail/main.c
@@ -101,6 +101,7 @@ int arg_writable_etc = 0; // writable etc
101int arg_writable_var = 0; // writable var 101int arg_writable_var = 0; // writable var
102int arg_appimage = 0; // appimage 102int arg_appimage = 0; // appimage
103int arg_audit = 0; // audit 103int arg_audit = 0; // audit
104char *arg_audit_prog; // audit
104 105
105int parent_to_child_fds[2]; 106int parent_to_child_fds[2];
106int child_to_parent_fds[2]; 107int child_to_parent_fds[2];
@@ -1831,8 +1832,21 @@ int main(int argc, char **argv) {
1831 //************************************* 1832 //*************************************
1832 // command 1833 // command
1833 //************************************* 1834 //*************************************
1834 else if (strcmp(argv[i], "--audit") == 0) 1835 else if (strcmp(argv[i], "--audit") == 0) {
1836 if (asprintf(&arg_audit_prog, "%s/firejail/faudit", LIBDIR) == -1)
1837 errExit("asprintf");
1835 arg_audit = 1; 1838 arg_audit = 1;
1839 }
1840 else if (strncmp(argv[i], "--audit=", 8) == 0) {
1841 if (strlen(argv[i] + 8) == 0) {
1842 fprintf(stderr, "Error: invalid audit program\n");
1843 exit(1);
1844 }
1845 arg_audit_prog = strdup(argv[i] + 8);
1846 if (!arg_audit_prog)
1847 errExit("strdup");
1848 arg_audit = 1;
1849 }
1836 else if (strcmp(argv[i], "--appimage") == 0) 1850 else if (strcmp(argv[i], "--appimage") == 0)
1837 arg_appimage = 1; 1851 arg_appimage = 1;
1838 else if (strcmp(argv[i], "--csh") == 0) { 1852 else if (strcmp(argv[i], "--csh") == 0) {
diff --git a/src/firejail/sandbox.c b/src/firejail/sandbox.c
index 8cf2486b3..d384d6fa0 100644
--- a/src/firejail/sandbox.c
+++ b/src/firejail/sandbox.c
@@ -272,16 +272,27 @@ static int monitor_application(pid_t app_pid) {
272#endif 272#endif
273} 273}
274 274
275void start_audit(void) {
276 char *audit_prog;
277 if (asprintf(&audit_prog, "%s/firejail/faudit", LIBDIR) == -1)
278 errExit("asprintf");
279 execl(audit_prog, audit_prog, NULL);
280 perror("execl");
281 exit(1);
282}
275 283
276static void start_application(void) { 284static void start_application(void) {
277 //**************************************** 285 //****************************************
278 // audit 286 // audit
279 //**************************************** 287 //****************************************
280 if (arg_audit) { 288 if (arg_audit) {
281 char *audit_prog; 289 assert(arg_audit_prog);
282 if (asprintf(&audit_prog, "%s/firejail/faudit", LIBDIR) == -1) 290 struct stat s;
283 errExit("asprintf"); 291 if (stat(arg_audit_prog, &s) != 0) {
284 execl(audit_prog, audit_prog, NULL); 292 fprintf(stderr, "Error: cannot find the audit program\n");
293 exit(1);
294 }
295 execl(arg_audit_prog, arg_audit_prog, NULL);
285 } 296 }
286 //**************************************** 297 //****************************************
287 // start the program without using a shell 298 // start the program without using a shell
@@ -305,6 +316,7 @@ static void start_application(void) {
305 printf("Child process initialized\n"); 316 printf("Child process initialized\n");
306 317
307 execvp(cfg.original_argv[cfg.original_program_index], &cfg.original_argv[cfg.original_program_index]); 318 execvp(cfg.original_argv[cfg.original_program_index], &cfg.original_argv[cfg.original_program_index]);
319 exit(1);
308 } 320 }
309 //**************************************** 321 //****************************************
310 // start the program using a shell 322 // start the program using a shell
diff --git a/src/man/firejail.txt b/src/man/firejail.txt
index a523e51cb..e4505754e 100644
--- a/src/man/firejail.txt
+++ b/src/man/firejail.txt
@@ -1741,12 +1741,13 @@ Running the default audit program:
1741 1741
1742Running a custom audit program: 1742Running a custom audit program:
1743.br 1743.br
1744 $ firejail --audit=~/sandbox-test transmission-gtk\n\n"); 1744 $ firejail --audit=~/sandbox-test transmission-gtk
1745 1745
1746In the examples above, the sandbox configures transmission-gtk profile and 1746In the examples above, the sandbox configures transmission-gtk profile and
1747starts the test program. The real program, transmission-gtk, will not be 1747starts the test program. The real program, transmission-gtk, will not be
1748started. 1748started.
1749 1749
1750Limitations: audit feature is not implemented for --x11 commands.
1750 1751
1751.SH MONITORING 1752.SH MONITORING
1752Option \-\-list prints a list of all sandboxes. The format 1753Option \-\-list prints a list of all sandboxes. The format