mirror of
https://github.com/containers/podman.git
synced 2025-06-19 00:06:43 +08:00
sysfs should be mounted rw for privileged
sysfs should be mounted rw for a privileged container. Signed-off-by: baude <bbaude@redhat.com> Closes: #279 Approved by: rhatdan
This commit is contained in:
@ -156,12 +156,24 @@ func addDevice(g *generate.Generator, device string) error {
|
|||||||
|
|
||||||
// Parses information needed to create a container into an OCI runtime spec
|
// Parses information needed to create a container into an OCI runtime spec
|
||||||
func createConfigToOCISpec(config *createConfig) (*spec.Spec, error) {
|
func createConfigToOCISpec(config *createConfig) (*spec.Spec, error) {
|
||||||
|
cgroupPerm := "ro"
|
||||||
g := generate.New()
|
g := generate.New()
|
||||||
|
if config.Privileged {
|
||||||
|
cgroupPerm = "rw"
|
||||||
|
g.RemoveMount("/sys")
|
||||||
|
sysMnt := spec.Mount{
|
||||||
|
Destination: "/sys",
|
||||||
|
Type: "sysfs",
|
||||||
|
Source: "sysfs",
|
||||||
|
Options: []string{"nosuid", "noexec", "nodev", "rw"},
|
||||||
|
}
|
||||||
|
g.AddMount(sysMnt)
|
||||||
|
}
|
||||||
cgroupMnt := spec.Mount{
|
cgroupMnt := spec.Mount{
|
||||||
Destination: "/sys/fs/cgroup",
|
Destination: "/sys/fs/cgroup",
|
||||||
Type: "cgroup",
|
Type: "cgroup",
|
||||||
Source: "cgroup",
|
Source: "cgroup",
|
||||||
Options: []string{"nosuid", "noexec", "nodev", "relatime", "ro"},
|
Options: []string{"nosuid", "noexec", "nodev", "relatime", cgroupPerm},
|
||||||
}
|
}
|
||||||
g.AddMount(cgroupMnt)
|
g.AddMount(cgroupMnt)
|
||||||
g.SetProcessCwd(config.WorkDir)
|
g.SetProcessCwd(config.WorkDir)
|
||||||
|
39
test/e2e/privileged_test.go
Normal file
39
test/e2e/privileged_test.go
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
package integration
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
. "github.com/onsi/ginkgo"
|
||||||
|
. "github.com/onsi/gomega"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = Describe("Podman privileged container tests", func() {
|
||||||
|
var (
|
||||||
|
tempdir string
|
||||||
|
err error
|
||||||
|
podmanTest PodmanTest
|
||||||
|
)
|
||||||
|
|
||||||
|
BeforeEach(func() {
|
||||||
|
tempdir, err = CreateTempDirInTempDir()
|
||||||
|
if err != nil {
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
podmanTest = PodmanCreate(tempdir)
|
||||||
|
podmanTest.RestoreAllArtifacts()
|
||||||
|
})
|
||||||
|
|
||||||
|
AfterEach(func() {
|
||||||
|
podmanTest.Cleanup()
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
It("podman privileged make sure sys is mounted rw", func() {
|
||||||
|
session := podmanTest.Podman([]string{"run", "--privileged", "busybox", "mount"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
ok, lines := session.GrepString("sysfs")
|
||||||
|
Expect(ok).To(BeTrue())
|
||||||
|
Expect(lines[0]).To(ContainSubstring("sysfs (rw,"))
|
||||||
|
})
|
||||||
|
})
|
@ -45,7 +45,7 @@ var _ = Describe("Podman rm", func() {
|
|||||||
|
|
||||||
result := podmanTest.Podman([]string{"rm", cid})
|
result := podmanTest.Podman([]string{"rm", cid})
|
||||||
result.WaitWithDefaultTimeout()
|
result.WaitWithDefaultTimeout()
|
||||||
Expect(result.ExitCode()).To(Not(Equal(0)))
|
Expect(result.ExitCode()).To(Equal(125))
|
||||||
})
|
})
|
||||||
|
|
||||||
It("podman rm created container", func() {
|
It("podman rm created container", func() {
|
||||||
|
Reference in New Issue
Block a user