Browse code

Merge pull request #36587 from justincormack/unpriv-caps

If container will run as non root user, drop permitted, effective caps early

Vincent Demeester authored on 2018/03/22 22:51:29
Showing 2 changed files
... ...
@@ -255,7 +255,7 @@ func setCapabilities(s *specs.Spec, c *container.Container) error {
255 255
 	if c.HostConfig.Privileged {
256 256
 		caplist = caps.GetAllCapabilities()
257 257
 	} else {
258
-		caplist, err = caps.TweakCapabilities(s.Process.Capabilities.Effective, c.HostConfig.CapAdd, c.HostConfig.CapDrop)
258
+		caplist, err = caps.TweakCapabilities(s.Process.Capabilities.Bounding, c.HostConfig.CapAdd, c.HostConfig.CapDrop)
259 259
 		if err != nil {
260 260
 			return err
261 261
 		}
... ...
@@ -264,6 +264,12 @@ func setCapabilities(s *specs.Spec, c *container.Container) error {
264 264
 	s.Process.Capabilities.Bounding = caplist
265 265
 	s.Process.Capabilities.Permitted = caplist
266 266
 	s.Process.Capabilities.Inheritable = caplist
267
+	// setUser has already been executed here
268
+	// if non root drop capabilities in the way execve does
269
+	if s.Process.User.UID != 0 {
270
+		s.Process.Capabilities.Effective = []string{}
271
+		s.Process.Capabilities.Permitted = []string{}
272
+	}
267 273
 	return nil
268 274
 }
269 275
 
... ...
@@ -105,7 +105,7 @@ Loop:
105 105
 		}
106 106
 		if len(call.Excludes.Caps) > 0 {
107 107
 			for _, c := range call.Excludes.Caps {
108
-				if inSlice(rs.Process.Capabilities.Effective, c) {
108
+				if inSlice(rs.Process.Capabilities.Bounding, c) {
109 109
 					continue Loop
110 110
 				}
111 111
 			}
... ...
@@ -117,7 +117,7 @@ Loop:
117 117
 		}
118 118
 		if len(call.Includes.Caps) > 0 {
119 119
 			for _, c := range call.Includes.Caps {
120
-				if !inSlice(rs.Process.Capabilities.Effective, c) {
120
+				if !inSlice(rs.Process.Capabilities.Bounding, c) {
121 121
 					continue Loop
122 122
 				}
123 123
 			}