mirror of
https://github.com/containers/podman.git
synced 2025-08-06 11:32:07 +08:00
Merge pull request #4806 from vrothberg/seccomp
policy for seccomp-profile selection
This commit is contained in:
@ -2,6 +2,7 @@ package createconfig
|
||||
|
||||
import (
|
||||
"os"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
@ -106,19 +107,63 @@ type NetworkConfig struct {
|
||||
PublishAll bool //publish-all
|
||||
}
|
||||
|
||||
// SeccompPolicy determines which seccomp profile gets applied to the container.
|
||||
type SeccompPolicy int
|
||||
|
||||
const (
|
||||
// SeccompPolicyDefault - if set use SecurityConfig.SeccompProfilePath,
|
||||
// otherwise use the default profile. The SeccompProfilePath might be
|
||||
// explicitly set by the user.
|
||||
SeccompPolicyDefault SeccompPolicy = iota
|
||||
// SeccompPolicyImage - if set use SecurityConfig.SeccompProfileFromImage,
|
||||
// otherwise follow SeccompPolicyDefault.
|
||||
SeccompPolicyImage
|
||||
)
|
||||
|
||||
// Map for easy lookups of supported policies.
|
||||
var supportedSeccompPolicies = map[string]SeccompPolicy{
|
||||
"": SeccompPolicyDefault,
|
||||
"default": SeccompPolicyDefault,
|
||||
"image": SeccompPolicyImage,
|
||||
}
|
||||
|
||||
// LookupSeccompPolicy looksup the corresponding SeccompPolicy for the specified
|
||||
// string. If none is found, an errors is returned including the list of
|
||||
// supported policies.
|
||||
// Note that an empty string resolved to SeccompPolicyDefault.
|
||||
func LookupSeccompPolicy(s string) (SeccompPolicy, error) {
|
||||
policy, exists := supportedSeccompPolicies[s]
|
||||
if exists {
|
||||
return policy, nil
|
||||
}
|
||||
|
||||
// Sort the keys first as maps are non-deterministic.
|
||||
keys := []string{}
|
||||
for k := range supportedSeccompPolicies {
|
||||
if k != "" {
|
||||
keys = append(keys, k)
|
||||
}
|
||||
}
|
||||
sort.Strings(keys)
|
||||
|
||||
return -1, errors.Errorf("invalid seccomp policy %q: valid policies are %+q", s, keys)
|
||||
}
|
||||
|
||||
// SecurityConfig configures the security features for the container
|
||||
type SecurityConfig struct {
|
||||
CapAdd []string // cap-add
|
||||
CapDrop []string // cap-drop
|
||||
LabelOpts []string //SecurityOpts
|
||||
NoNewPrivs bool //SecurityOpts
|
||||
ApparmorProfile string //SecurityOpts
|
||||
SeccompProfilePath string //SecurityOpts
|
||||
SecurityOpts []string
|
||||
Privileged bool //privileged
|
||||
ReadOnlyRootfs bool //read-only
|
||||
ReadOnlyTmpfs bool //read-only-tmpfs
|
||||
Sysctl map[string]string //sysctl
|
||||
CapAdd []string // cap-add
|
||||
CapDrop []string // cap-drop
|
||||
LabelOpts []string //SecurityOpts
|
||||
NoNewPrivs bool //SecurityOpts
|
||||
ApparmorProfile string //SecurityOpts
|
||||
SeccompProfilePath string //SecurityOpts
|
||||
SeccompProfileFromImage string // seccomp profile from the container image
|
||||
SeccompPolicy SeccompPolicy
|
||||
SecurityOpts []string
|
||||
Privileged bool //privileged
|
||||
ReadOnlyRootfs bool //read-only
|
||||
ReadOnlyTmpfs bool //read-only-tmpfs
|
||||
Sysctl map[string]string //sysctl
|
||||
}
|
||||
|
||||
// CreateConfig is a pre OCI spec structure. It represents user input from varlink or the CLI
|
||||
|
Reference in New Issue
Block a user