|
@@ -17,17 +17,21 @@ import (
|
|
var deviceCgroupRuleRegex = regexp.MustCompile("^([acb]) ([0-9]+|\\*):([0-9]+|\\*) ([rwm]{1,3})$")
|
|
var deviceCgroupRuleRegex = regexp.MustCompile("^([acb]) ([0-9]+|\\*):([0-9]+|\\*) ([rwm]{1,3})$")
|
|
|
|
|
|
// SetCapabilities sets the provided capabilities on the spec
|
|
// SetCapabilities sets the provided capabilities on the spec
|
|
-// All capabilities are added if privileged is true
|
|
|
|
|
|
+// All capabilities are added if privileged is true.
|
|
func SetCapabilities(s *specs.Spec, caplist []string) error {
|
|
func SetCapabilities(s *specs.Spec, caplist []string) error {
|
|
- s.Process.Capabilities.Effective = caplist
|
|
|
|
- s.Process.Capabilities.Bounding = caplist
|
|
|
|
- s.Process.Capabilities.Permitted = caplist
|
|
|
|
- s.Process.Capabilities.Inheritable = caplist
|
|
|
|
// setUser has already been executed here
|
|
// setUser has already been executed here
|
|
- // if non root drop capabilities in the way execve does
|
|
|
|
- if s.Process.User.UID != 0 {
|
|
|
|
- s.Process.Capabilities.Effective = []string{}
|
|
|
|
- s.Process.Capabilities.Permitted = []string{}
|
|
|
|
|
|
+ if s.Process.User.UID == 0 {
|
|
|
|
+ s.Process.Capabilities = &specs.LinuxCapabilities{
|
|
|
|
+ Effective: caplist,
|
|
|
|
+ Bounding: caplist,
|
|
|
|
+ Permitted: caplist,
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ // Do not set Effective and Permitted capabilities for non-root users,
|
|
|
|
+ // to match what execve does.
|
|
|
|
+ s.Process.Capabilities = &specs.LinuxCapabilities{
|
|
|
|
+ Bounding: caplist,
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|