If container will run as non root user, drop permitted, effective caps early
| ... | ... |
@@ -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 |
} |