mirror of
https://github.com/containers/podman.git
synced 2025-09-27 00:34:32 +08:00
Merge pull request #3777 from rhatdan/vendor
Add support & documentation to run containers with different file types
This commit is contained in:
@ -375,18 +375,18 @@ to podman build, the option given would be `--runtime-flag log-format=json`.
|
|||||||
|
|
||||||
Security Options
|
Security Options
|
||||||
|
|
||||||
"label=user:USER" : Set the label user for the container
|
- `apparmor=unconfined` : Turn off apparmor confinement for the container
|
||||||
"label=role:ROLE" : Set the label role for the container
|
- `apparmor=your-profile` : Set the apparmor confinement profile for the container
|
||||||
"label=type:TYPE" : Set the label type for the container
|
|
||||||
"label=level:LEVEL" : Set the label level for the container
|
|
||||||
"label=disable" : Turn off label confinement for the container
|
|
||||||
"no-new-privileges" : Not supported
|
|
||||||
|
|
||||||
"seccomp=unconfined" : Turn off seccomp confinement for the container
|
- `label=user:USER` : Set the label user for the container processes
|
||||||
"seccomp=profile.json : White listed syscalls seccomp Json file to be used as a seccomp filter
|
- `label=role:ROLE` : Set the label role for the container processes
|
||||||
|
- `label=type:TYPE` : Set the label process type for the container processes
|
||||||
|
- `label=level:LEVEL` : Set the label level for the container processes
|
||||||
|
- `label=filetype:TYPE` : Set the label file type for the container files
|
||||||
|
- `label=disable` : Turn off label separation for the container
|
||||||
|
|
||||||
"apparmor=unconfined" : Turn off apparmor confinement for the container
|
- `seccomp=unconfined` : Turn off seccomp confinement for the container
|
||||||
"apparmor=your-profile" : Set the apparmor confinement profile for the container
|
- `seccomp=profile.json` : White listed syscalls seccomp Json file to be used as a seccomp filter
|
||||||
|
|
||||||
**--shm-size**=*size*
|
**--shm-size**=*size*
|
||||||
|
|
||||||
|
@ -640,19 +640,20 @@ of the container is assumed to be managed externally.
|
|||||||
|
|
||||||
Security Options
|
Security Options
|
||||||
|
|
||||||
"apparmor=unconfined" : Turn off apparmor confinement for the container
|
- `apparmor=unconfined` : Turn off apparmor confinement for the container
|
||||||
"apparmor=your-profile" : Set the apparmor confinement profile for the container
|
- `apparmor=your-profile` : Set the apparmor confinement profile for the container
|
||||||
|
|
||||||
"label=user:USER" : Set the label user for the container
|
- `label=user:USER` : Set the label user for the container processes
|
||||||
"label=role:ROLE" : Set the label role for the container
|
- `label=role:ROLE` : Set the label role for the container processes
|
||||||
"label=type:TYPE" : Set the label type for the container
|
- `label=type:TYPE` : Set the label process type for the container processes
|
||||||
"label=level:LEVEL" : Set the label level for the container
|
- `label=level:LEVEL` : Set the label level for the container processes
|
||||||
"label=disable" : Turn off label confinement for the container
|
- `label=filetype:TYPE` : Set the label file type for the container files
|
||||||
|
- `label=disable` : Turn off label separation for the container
|
||||||
|
|
||||||
"no-new-privileges" : Disable container processes from gaining additional privileges
|
- `no-new-privileges` : Disable container processes from gaining additional privileges
|
||||||
|
|
||||||
"seccomp=unconfined" : Turn off seccomp confinement for the container
|
- `seccomp=unconfined` : Turn off seccomp confinement for the container
|
||||||
"seccomp=profile.json : White listed syscalls seccomp Json file to be used as a seccomp filter
|
- `seccomp=profile.json` : White listed syscalls seccomp Json file to be used as a seccomp filter
|
||||||
|
|
||||||
Note: Labeling can be disabled for all containers by setting label=false in the **libpod.conf** (`/etc/containers/libpod.conf`) file.
|
Note: Labeling can be disabled for all containers by setting label=false in the **libpod.conf** (`/etc/containers/libpod.conf`) file.
|
||||||
|
|
||||||
|
@ -665,11 +665,12 @@ Security Options
|
|||||||
- `apparmor=unconfined` : Turn off apparmor confinement for the container
|
- `apparmor=unconfined` : Turn off apparmor confinement for the container
|
||||||
- `apparmor=your-profile` : Set the apparmor confinement profile for the container
|
- `apparmor=your-profile` : Set the apparmor confinement profile for the container
|
||||||
|
|
||||||
- `label=user:USER` : Set the label user for the container
|
- `label=user:USER` : Set the label user for the container processes
|
||||||
- `label=role:ROLE` : Set the label role for the container
|
- `label=role:ROLE` : Set the label role for the container processes
|
||||||
- `label=type:TYPE` : Set the label type for the container
|
- `label=type:TYPE` : Set the label process type for the container processes
|
||||||
- `label=level:LEVEL` : Set the label level for the container
|
- `label=level:LEVEL` : Set the label level for the container processes
|
||||||
- `label=disable` : Turn off label confinement for the container
|
- `label=filetype:TYPE` : Set the label file type for the container files
|
||||||
|
- `label=disable` : Turn off label separation for the container
|
||||||
|
|
||||||
- `no-new-privileges` : Disable container processes from gaining additional privileges
|
- `no-new-privileges` : Disable container processes from gaining additional privileges
|
||||||
|
|
||||||
|
2
go.mod
2
go.mod
@ -69,7 +69,7 @@ require (
|
|||||||
github.com/opencontainers/runc v1.0.0-rc8
|
github.com/opencontainers/runc v1.0.0-rc8
|
||||||
github.com/opencontainers/runtime-spec v0.1.2-0.20190618234442-a950415649c7
|
github.com/opencontainers/runtime-spec v0.1.2-0.20190618234442-a950415649c7
|
||||||
github.com/opencontainers/runtime-tools v0.9.0
|
github.com/opencontainers/runtime-tools v0.9.0
|
||||||
github.com/opencontainers/selinux v1.2.2
|
github.com/opencontainers/selinux v1.3.0
|
||||||
github.com/opentracing/opentracing-go v1.1.0
|
github.com/opentracing/opentracing-go v1.1.0
|
||||||
github.com/pelletier/go-toml v1.4.0 // indirect
|
github.com/pelletier/go-toml v1.4.0 // indirect
|
||||||
github.com/pkg/errors v0.8.1
|
github.com/pkg/errors v0.8.1
|
||||||
|
4
go.sum
4
go.sum
@ -394,6 +394,8 @@ github.com/opencontainers/selinux v0.0.0-20190118194635-b707dfcb00a1 h1:V8Icxoi2
|
|||||||
github.com/opencontainers/selinux v0.0.0-20190118194635-b707dfcb00a1/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs=
|
github.com/opencontainers/selinux v0.0.0-20190118194635-b707dfcb00a1/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs=
|
||||||
github.com/opencontainers/selinux v1.2.2 h1:Kx9J6eDG5/24A6DtUquGSpJQ+m2MUTahn4FtGEe8bFg=
|
github.com/opencontainers/selinux v1.2.2 h1:Kx9J6eDG5/24A6DtUquGSpJQ+m2MUTahn4FtGEe8bFg=
|
||||||
github.com/opencontainers/selinux v1.2.2/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs=
|
github.com/opencontainers/selinux v1.2.2/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs=
|
||||||
|
github.com/opencontainers/selinux v1.3.0 h1:xsI95WzPZu5exzA6JzkLSfdr/DilzOhCJOqGe5TgR0g=
|
||||||
|
github.com/opencontainers/selinux v1.3.0/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs=
|
||||||
github.com/openshift/imagebuilder v1.1.0 h1:oT704SkwMEzmIMU/+Uv1Wmvt+p10q3v2WuYMeFI18c4=
|
github.com/openshift/imagebuilder v1.1.0 h1:oT704SkwMEzmIMU/+Uv1Wmvt+p10q3v2WuYMeFI18c4=
|
||||||
github.com/openshift/imagebuilder v1.1.0/go.mod h1:9aJRczxCH0mvT6XQ+5STAQaPWz7OsWcU5/mRkt8IWeo=
|
github.com/openshift/imagebuilder v1.1.0/go.mod h1:9aJRczxCH0mvT6XQ+5STAQaPWz7OsWcU5/mRkt8IWeo=
|
||||||
github.com/opentracing/opentracing-go v0.0.0-20190218023034-25a84ff92183 h1:kwFCLTA0DYhH0JpGMBOZtVVhyRL5ec+unn4mnoJhQI0=
|
github.com/opentracing/opentracing-go v0.0.0-20190218023034-25a84ff92183 h1:kwFCLTA0DYhH0JpGMBOZtVVhyRL5ec+unn4mnoJhQI0=
|
||||||
@ -440,6 +442,8 @@ github.com/prometheus/procfs v0.0.2 h1:6LJUbpNm42llc4HRCuvApCSWB/WfhuNo9K98Q9sNG
|
|||||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||||
github.com/prometheus/tsdb v0.8.0/go.mod h1:fSI0j+IUQrDd7+ZtR9WKIGtoYAYAJUKcKhYLG25tN4g=
|
github.com/prometheus/tsdb v0.8.0/go.mod h1:fSI0j+IUQrDd7+ZtR9WKIGtoYAYAJUKcKhYLG25tN4g=
|
||||||
|
github.com/rhatdan/oci-selinux v0.0.0-20190809194358-225b95ae1d0b h1:9CE1lDQ/YC1deOJE/elAI+nbE1OzOxSvrs6JXwyn+1s=
|
||||||
|
github.com/rhatdan/oci-selinux v0.0.0-20190809194358-225b95ae1d0b/go.mod h1:T/CPBeRZLtTvck9OtpX3PGw/uDABnTuRPhyTacu5aSo=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
|
@ -153,4 +153,16 @@ var _ = Describe("Podman run", func() {
|
|||||||
Expect(match).Should(BeTrue())
|
Expect(match).Should(BeTrue())
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman run selinux file type setup test", func() {
|
||||||
|
session := podmanTest.Podman([]string{"run", "-it", "--security-opt", "label=type:spc_t", "--security-opt", "label=filetype:container_var_lib_t", fedoraMinimal, "ls", "-Z", "/dev"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
match, _ := session.GrepString("container_var_lib_t")
|
||||||
|
Expect(match).Should(BeTrue())
|
||||||
|
|
||||||
|
session = podmanTest.Podman([]string{"run", "-it", "--security-opt", "label=type:spc_t", "--security-opt", "label=filetype:foobar", fedoraMinimal, "ls", "-Z", "/dev"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(127))
|
||||||
|
})
|
||||||
|
|
||||||
})
|
})
|
||||||
|
18
vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go
generated
vendored
18
vendor/github.com/opencontainers/selinux/go-selinux/label/label_selinux.go
generated
vendored
@ -13,11 +13,12 @@ import (
|
|||||||
|
|
||||||
// Valid Label Options
|
// Valid Label Options
|
||||||
var validOptions = map[string]bool{
|
var validOptions = map[string]bool{
|
||||||
"disable": true,
|
"disable": true,
|
||||||
"type": true,
|
"type": true,
|
||||||
"user": true,
|
"filetype": true,
|
||||||
"role": true,
|
"user": true,
|
||||||
"level": true,
|
"role": true,
|
||||||
|
"level": true,
|
||||||
}
|
}
|
||||||
|
|
||||||
var ErrIncompatibleLabel = fmt.Errorf("Bad SELinux option z and Z can not be used together")
|
var ErrIncompatibleLabel = fmt.Errorf("Bad SELinux option z and Z can not be used together")
|
||||||
@ -51,13 +52,16 @@ func InitLabels(options []string) (plabel string, mlabel string, Err error) {
|
|||||||
return "", mountLabel, nil
|
return "", mountLabel, nil
|
||||||
}
|
}
|
||||||
if i := strings.Index(opt, ":"); i == -1 {
|
if i := strings.Index(opt, ":"); i == -1 {
|
||||||
return "", "", fmt.Errorf("Bad label option %q, valid options 'disable' or \n'user, role, level, type' followed by ':' and a value", opt)
|
return "", "", fmt.Errorf("Bad label option %q, valid options 'disable' or \n'user, role, level, type, filetype' followed by ':' and a value", opt)
|
||||||
}
|
}
|
||||||
con := strings.SplitN(opt, ":", 2)
|
con := strings.SplitN(opt, ":", 2)
|
||||||
if !validOptions[con[0]] {
|
if !validOptions[con[0]] {
|
||||||
return "", "", fmt.Errorf("Bad label option %q, valid options 'disable, user, role, level, type'", con[0])
|
return "", "", fmt.Errorf("Bad label option %q, valid options 'disable, user, role, level, type, filetype'", con[0])
|
||||||
|
|
||||||
}
|
}
|
||||||
|
if con[0] == "filetype" {
|
||||||
|
mcon["type"] = con[1]
|
||||||
|
}
|
||||||
pcon[con[0]] = con[1]
|
pcon[con[0]] = con[1]
|
||||||
if con[0] == "level" || con[0] == "user" {
|
if con[0] == "level" || con[0] == "user" {
|
||||||
mcon[con[0]] = con[1]
|
mcon[con[0]] = con[1]
|
||||||
|
14
vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go
generated
vendored
14
vendor/github.com/opencontainers/selinux/go-selinux/selinux_linux.go
generated
vendored
@ -18,6 +18,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -392,6 +393,14 @@ func SetExecLabel(label string) error {
|
|||||||
return writeCon(fmt.Sprintf("/proc/self/task/%d/attr/exec", syscall.Gettid()), label)
|
return writeCon(fmt.Sprintf("/proc/self/task/%d/attr/exec", syscall.Gettid()), label)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
SetTaskLabel sets the SELinux label for the current thread, or an error.
|
||||||
|
This requires the dyntransition permission.
|
||||||
|
*/
|
||||||
|
func SetTaskLabel(label string) error {
|
||||||
|
return writeCon(fmt.Sprintf("/proc/self/task/%d/attr/current", syscall.Gettid()), label)
|
||||||
|
}
|
||||||
|
|
||||||
// SetSocketLabel takes a process label and tells the kernel to assign the
|
// SetSocketLabel takes a process label and tells the kernel to assign the
|
||||||
// label to the next socket that gets created
|
// label to the next socket that gets created
|
||||||
func SetSocketLabel(label string) error {
|
func SetSocketLabel(label string) error {
|
||||||
@ -403,6 +412,11 @@ func SocketLabel() (string, error) {
|
|||||||
return readCon(fmt.Sprintf("/proc/self/task/%d/attr/sockcreate", syscall.Gettid()))
|
return readCon(fmt.Sprintf("/proc/self/task/%d/attr/sockcreate", syscall.Gettid()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PeerLabel retrieves the label of the client on the other side of a socket
|
||||||
|
func PeerLabel(fd uintptr) (string, error) {
|
||||||
|
return unix.GetsockoptString(int(fd), syscall.SOL_SOCKET, syscall.SO_PEERSEC)
|
||||||
|
}
|
||||||
|
|
||||||
// SetKeyLabel takes a process label and tells the kernel to assign the
|
// SetKeyLabel takes a process label and tells the kernel to assign the
|
||||||
// label to the next kernel keyring that gets created
|
// label to the next kernel keyring that gets created
|
||||||
func SetKeyLabel(label string) error {
|
func SetKeyLabel(label string) error {
|
||||||
|
13
vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go
generated
vendored
13
vendor/github.com/opencontainers/selinux/go-selinux/selinux_stub.go
generated
vendored
@ -96,6 +96,14 @@ func SetExecLabel(label string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
SetTaskLabel sets the SELinux label for the current thread, or an error.
|
||||||
|
This requires the dyntransition permission.
|
||||||
|
*/
|
||||||
|
func SetTaskLabel(label string) error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
SetSocketLabel sets the SELinux label that the kernel will use for any programs
|
SetSocketLabel sets the SELinux label that the kernel will use for any programs
|
||||||
that are executed by the current process thread, or an error.
|
that are executed by the current process thread, or an error.
|
||||||
@ -109,6 +117,11 @@ func SocketLabel() (string, error) {
|
|||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// PeerLabel retrieves the label of the client on the other side of a socket
|
||||||
|
func PeerLabel(fd uintptr) (string, error) {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
// SetKeyLabel takes a process label and tells the kernel to assign the
|
// SetKeyLabel takes a process label and tells the kernel to assign the
|
||||||
// label to the next kernel keyring that gets created
|
// label to the next kernel keyring that gets created
|
||||||
func SetKeyLabel(label string) error {
|
func SetKeyLabel(label string) error {
|
||||||
|
2
vendor/modules.txt
vendored
2
vendor/modules.txt
vendored
@ -365,7 +365,7 @@ github.com/opencontainers/runtime-tools/generate/seccomp
|
|||||||
github.com/opencontainers/runtime-tools/filepath
|
github.com/opencontainers/runtime-tools/filepath
|
||||||
github.com/opencontainers/runtime-tools/specerror
|
github.com/opencontainers/runtime-tools/specerror
|
||||||
github.com/opencontainers/runtime-tools/error
|
github.com/opencontainers/runtime-tools/error
|
||||||
# github.com/opencontainers/selinux v1.2.2
|
# github.com/opencontainers/selinux v1.3.0
|
||||||
github.com/opencontainers/selinux/go-selinux/label
|
github.com/opencontainers/selinux/go-selinux/label
|
||||||
github.com/opencontainers/selinux/go-selinux
|
github.com/opencontainers/selinux/go-selinux
|
||||||
# github.com/openshift/imagebuilder v1.1.0
|
# github.com/openshift/imagebuilder v1.1.0
|
||||||
|
Reference in New Issue
Block a user