namespaces: Enable USER_NS (Closes: #712870)
Restrict creation of user namespaces to root (CAP_SYS_ADMIN) by default (sysctl: kern.unprivileged_userns_clone) svn path=/dists/trunk/linux/; revision=20773
This commit is contained in:
parent
92935f7937
commit
d98e00eda6
|
@ -1,3 +1,11 @@
|
|||
linux (3.12~rc7-1~exp2) UNRELEASED; urgency=low
|
||||
|
||||
* namespaces: Enable USER_NS (Closes: #712870)
|
||||
- Restrict creation of user namespaces to root (CAP_SYS_ADMIN) by
|
||||
default (sysctl: kern.unprivileged_userns_clone)
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Fri, 01 Nov 2013 23:36:11 +0000
|
||||
|
||||
linux (3.12~rc7-1~exp1) experimental; urgency=low
|
||||
|
||||
* New upstream release candidate
|
||||
|
|
|
@ -4389,8 +4389,7 @@ CONFIG_BLK_CGROUP=y
|
|||
CONFIG_NAMESPACES=y
|
||||
CONFIG_UTS_NS=y
|
||||
CONFIG_IPC_NS=y
|
||||
#. Do not enable this without discussion of the security implications
|
||||
# CONFIG_USER_NS is not set
|
||||
CONFIG_USER_NS=y
|
||||
CONFIG_PID_NS=y
|
||||
CONFIG_NET_NS=y
|
||||
CONFIG_SCHED_AUTOGROUP=y
|
||||
|
|
93
debian/patches/debian/add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by-default.patch
vendored
Normal file
93
debian/patches/debian/add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by-default.patch
vendored
Normal file
|
@ -0,0 +1,93 @@
|
|||
From: Serge Hallyn <serge.hallyn@canonical.com>
|
||||
Date: Fri, 31 May 2013 19:12:12 +0000 (+0100)
|
||||
Subject: add sysctl to disallow unprivileged CLONE_NEWUSER by default
|
||||
Origin: http://kernel.ubuntu.com/git?p=serge%2Fubuntu-saucy.git;a=commit;h=5c847404dcb2e3195ad0057877e1422ae90892b8
|
||||
|
||||
add sysctl to disallow unprivileged CLONE_NEWUSER by default
|
||||
|
||||
This is a short-term patch. Unprivileged use of CLONE_NEWUSER
|
||||
is certainly an intended feature of user namespaces. However
|
||||
for at least saucy we want to make sure that, if any security
|
||||
issues are found, we have a fail-safe.
|
||||
|
||||
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
|
||||
[bwh: Remove unneeded binary sysctl bits]
|
||||
---
|
||||
--- a/kernel/fork.c
|
||||
+++ b/kernel/fork.c
|
||||
@@ -83,6 +83,11 @@
|
||||
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/task.h>
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#else
|
||||
+#define unprivileged_userns_clone 0
|
||||
+#endif
|
||||
|
||||
/*
|
||||
* Protected counters by write_lock_irq(&tasklist_lock)
|
||||
@@ -1144,6 +1149,10 @@ static struct task_struct *copy_process(
|
||||
if ((clone_flags & (CLONE_NEWUSER|CLONE_FS)) == (CLONE_NEWUSER|CLONE_FS))
|
||||
return ERR_PTR(-EINVAL);
|
||||
|
||||
+ if ((clone_flags & CLONE_NEWUSER) && !unprivileged_userns_clone)
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ return ERR_PTR(-EPERM);
|
||||
+
|
||||
/*
|
||||
* Thread groups must share signals as well, and detached threads
|
||||
* can only be started up within the thread group.
|
||||
@@ -1831,6 +1840,12 @@ SYSCALL_DEFINE1(unshare, unsigned long,
|
||||
if (unshare_flags & CLONE_NEWNS)
|
||||
unshare_flags |= CLONE_FS;
|
||||
|
||||
+ if ((unshare_flags & CLONE_NEWUSER) && !unprivileged_userns_clone) {
|
||||
+ err = -EPERM;
|
||||
+ if (!capable(CAP_SYS_ADMIN))
|
||||
+ goto bad_unshare_out;
|
||||
+ }
|
||||
+
|
||||
err = check_unshare_flags(unshare_flags);
|
||||
if (err)
|
||||
goto bad_unshare_out;
|
||||
--- a/kernel/sysctl.c
|
||||
+++ b/kernel/sysctl.c
|
||||
@@ -104,6 +104,9 @@ extern int core_uses_pid;
|
||||
extern char core_pattern[];
|
||||
extern unsigned int core_pipe_limit;
|
||||
#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+extern int unprivileged_userns_clone;
|
||||
+#endif
|
||||
extern int pid_max;
|
||||
extern int pid_max_min, pid_max_max;
|
||||
extern int percpu_pagelist_fraction;
|
||||
@@ -482,6 +485,15 @@ static struct ctl_table kern_table[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = proc_dointvec,
|
||||
},
|
||||
+#endif
|
||||
+#ifdef CONFIG_USER_NS
|
||||
+ {
|
||||
+ .procname = "unprivileged_userns_clone",
|
||||
+ .data = &unprivileged_userns_clone,
|
||||
+ .maxlen = sizeof(int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = proc_dointvec,
|
||||
+ },
|
||||
#endif
|
||||
#ifdef CONFIG_PROC_SYSCTL
|
||||
{
|
||||
--- a/kernel/user_namespace.c
|
||||
+++ b/kernel/user_namespace.c
|
||||
@@ -23,6 +23,9 @@
|
||||
#include <linux/projid.h>
|
||||
#include <linux/fs_struct.h>
|
||||
|
||||
+/* sysctl */
|
||||
+int unprivileged_userns_clone;
|
||||
+
|
||||
static struct kmem_cache *user_ns_cachep __read_mostly;
|
||||
|
||||
static bool new_idmap_permitted(const struct file *file,
|
|
@ -73,3 +73,4 @@ bugfix/m68k/ethernat-kconfig.patch
|
|||
bugfix/all/crypto-ansi_cprng-Fix-off-by-one-error-in-non-block-.patch
|
||||
features/all/mvsas-Recognise-device-subsystem-9485-9485-as-88SE94.patch
|
||||
bugfix/all/kbuild-use-nostdinc-in-compile-tests.patch
|
||||
debian/add-sysctl-to-disallow-unprivileged-CLONE_NEWUSER-by-default.patch
|
||||
|
|
Loading…
Reference in New Issue