d0559e92af
Added --selinux-enable switch to daemon to enable SELinux labeling. The daemon will now generate a new unique random SELinux label when a container starts, and remove it when the container is removed. The MCS labels will be stored in the daemon memory. The labels of containers will be stored in the container.json file. When the daemon restarts on boot or if done by an admin, it will read all containers json files and reserve the MCS labels. A potential problem would be conflicts if you setup thousands of containers, current scheme would handle ~500,000 containers. Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: rhatdan) Docker-DCO-1.1-Signed-off-by: Dan Walsh <dwalsh@redhat.com> (github: crosbymichael)
61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package selinux_test
|
|
|
|
import (
|
|
"github.com/dotcloud/docker/pkg/selinux"
|
|
"os"
|
|
"testing"
|
|
)
|
|
|
|
func testSetfilecon(t *testing.T) {
|
|
if selinux.SelinuxEnabled() {
|
|
tmp := "selinux_test"
|
|
out, _ := os.OpenFile(tmp, os.O_WRONLY, 0)
|
|
out.Close()
|
|
err := selinux.Setfilecon(tmp, "system_u:object_r:bin_t:s0")
|
|
if err != nil {
|
|
t.Log("Setfilecon failed")
|
|
t.Fatal(err)
|
|
}
|
|
os.Remove(tmp)
|
|
}
|
|
}
|
|
|
|
func TestSELinux(t *testing.T) {
|
|
var (
|
|
err error
|
|
plabel, flabel string
|
|
)
|
|
|
|
if selinux.SelinuxEnabled() {
|
|
t.Log("Enabled")
|
|
plabel, flabel = selinux.GetLxcContexts()
|
|
t.Log(plabel)
|
|
t.Log(flabel)
|
|
selinux.FreeLxcContexts(plabel)
|
|
plabel, flabel = selinux.GetLxcContexts()
|
|
t.Log(plabel)
|
|
t.Log(flabel)
|
|
selinux.FreeLxcContexts(plabel)
|
|
t.Log("getenforce ", selinux.SelinuxGetEnforce())
|
|
t.Log("getenforcemode ", selinux.SelinuxGetEnforceMode())
|
|
pid := os.Getpid()
|
|
t.Log("PID:%d MCS:%s\n", pid, selinux.IntToMcs(pid, 1023))
|
|
err = selinux.Setfscreatecon("unconfined_u:unconfined_r:unconfined_t:s0")
|
|
if err == nil {
|
|
t.Log(selinux.Getfscreatecon())
|
|
} else {
|
|
t.Log("setfscreatecon failed", err)
|
|
t.Fatal(err)
|
|
}
|
|
err = selinux.Setfscreatecon("")
|
|
if err == nil {
|
|
t.Log(selinux.Getfscreatecon())
|
|
} else {
|
|
t.Log("setfscreatecon failed", err)
|
|
t.Fatal(err)
|
|
}
|
|
t.Log(selinux.Getpidcon(1))
|
|
} else {
|
|
t.Log("Disabled")
|
|
}
|
|
}
|