commit:     bdf41eb2ecb9a7a72e3024d088e63edff2ddc0e5
Author:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Mon Aug 17 22:18:39 2015 +0000
Commit:     Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Thu Aug 20 14:38:38 2015 +0000
URL:        https://gitweb.gentoo.org/proj/pax-utils.git/commit/?id=bdf41eb2

security: lock down privs a bit via prctl

Should prevent accidentally running set*id programs less of a problem.

 porting.h  | 4 ++++
 security.c | 9 +++++++++
 2 files changed, 13 insertions(+)

diff --git a/porting.h b/porting.h
index 9dea528..c93f0f8 100644
--- a/porting.h
+++ b/porting.h
@@ -42,6 +42,10 @@
 #if !defined(__FreeBSD__) && !defined(__OpenBSD__)
 # include <alloca.h>
 #endif
+#if defined(__linux__)
+# include <sys/prctl.h>
+# include <linux/securebits.h>
+#endif
 #if defined(__GLIBC__) || defined(__UCLIBC__)
 # include <byteswap.h>
 # include <endian.h>

diff --git a/security.c b/security.c
index 9b48a9a..3012212 100644
--- a/security.c
+++ b/security.c
@@ -69,6 +69,15 @@ void security_init(bool allow_forking)
        if (!ALLOW_PIDNS)
                allow_forking = true;
 
+       /* Drop all possible caps for us and our children.  */
+       prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0);
+       prctl(PR_SET_SECUREBITS,
+               SECBIT_KEEP_CAPS_LOCKED |
+               SECBIT_NO_SETUID_FIXUP |
+               SECBIT_NO_SETUID_FIXUP_LOCKED |
+               SECBIT_NOROOT |
+               SECBIT_NOROOT_LOCKED, 0, 0, 0);
+
        /* None of the pax tools need access to these features. */
        flags = CLONE_NEWIPC | CLONE_NEWUTS;
        /* Would be nice to leverage mount/net ns, but they're just way too 
slow. */

Reply via email to