diff --git a/src/runtime/Makefile b/src/runtime/Makefile index 6fea174a45..fb5cf00de9 100644 --- a/src/runtime/Makefile +++ b/src/runtime/Makefile @@ -165,6 +165,8 @@ DEFDISABLEGUESTSECCOMP := true #Default experimental features enabled DEFAULTEXPFEATURES := [] +DEFDISABLESELINUX := false + #Default entropy source DEFENTROPYSOURCE := /dev/urandom DEFVALIDENTROPYSOURCES := [\"/dev/urandom\",\"/dev/random\",\"\"] @@ -197,9 +199,6 @@ DEFSANDBOXCGROUPONLY ?= false DEFBINDMOUNTS := [] -# Features -FEATURE_SELINUX ?= check - SED = sed CLI_DIR = cmd @@ -437,6 +436,7 @@ USER_VARS += DEFNETWORKMODEL_CLH USER_VARS += DEFNETWORKMODEL_FC USER_VARS += DEFNETWORKMODEL_QEMU USER_VARS += DEFDISABLEGUESTSECCOMP +USER_VARS += DEFDISABLESELINUX USER_VARS += DEFAULTEXPFEATURES USER_VARS += DEFDISABLEBLOCK USER_VARS += DEFBLOCKSTORAGEDRIVER_ACRN @@ -461,7 +461,6 @@ USER_VARS += DEFVALIDENTROPYSOURCES USER_VARS += DEFSANDBOXCGROUPONLY USER_VARS += DEFBINDMOUNTS USER_VARS += DEFVFIOMODE -USER_VARS += FEATURE_SELINUX USER_VARS += BUILDFLAGS @@ -476,21 +475,6 @@ QUIET_TEST = $(Q:@=@echo ' TEST '$@;) BUILDTAGS := -ifneq ($(FEATURE_SELINUX),no) - SELINUXTAG := $(shell ./hack/selinux_tag.sh) - - ifneq ($(SELINUXTAG),) - override FEATURE_SELINUX = yes - BUILDTAGS += --tags "$(SELINUXTAG)" - else - ifeq ($(FEATURE_SELINUX),yes) - $(error "ERROR: SELinux support requested, but libselinux is not available") - endif - - override FEATURE_SELINUX = no - endif -endif - # go build common flags BUILDFLAGS := -buildmode=pie -mod=vendor ${BUILDTAGS} @@ -762,9 +746,6 @@ endif @printf "\tKnown: $(sort $(HYPERVISORS))\n" @printf "\tAvailable for this architecture: $(sort $(KNOWN_HYPERVISORS))\n" @printf "\n" - @printf "• Features:\n" - @printf "\tSELinux (FEATURE_SELINUX): $(FEATURE_SELINUX)\n" - @printf "\n" @printf "• Summary:\n" @printf "\n" @printf "\tdestination install path (DESTDIR) : %s\n" $(abspath $(DESTDIR)) diff --git a/src/runtime/config/configuration-acrn.toml.in b/src/runtime/config/configuration-acrn.toml.in index 69b2037033..7591791a24 100644 --- a/src/runtime/config/configuration-acrn.toml.in +++ b/src/runtime/config/configuration-acrn.toml.in @@ -200,6 +200,9 @@ internetworking_model="@DEFNETWORKMODEL_ACRN@" # (default: true) disable_guest_seccomp=@DEFDISABLEGUESTSECCOMP@ +# disable applying SELinux on the VMM process (default false) +disable_selinux=@DEFDISABLESELINUX@ + # If enabled, the runtime will create opentracing.io traces and spans. # (See https://www.jaegertracing.io/docs/getting-started). # (default: disabled) diff --git a/src/runtime/config/configuration-clh.toml.in b/src/runtime/config/configuration-clh.toml.in index 2dc8a8322c..4d57d01f48 100644 --- a/src/runtime/config/configuration-clh.toml.in +++ b/src/runtime/config/configuration-clh.toml.in @@ -223,6 +223,9 @@ internetworking_model="@DEFNETWORKMODEL_CLH@" # (default: true) disable_guest_seccomp=@DEFDISABLEGUESTSECCOMP@ +# disable applying SELinux on the VMM process (default false) +disable_selinux=@DEFDISABLESELINUX@ + # If enabled, the runtime will create opentracing.io traces and spans. # (See https://www.jaegertracing.io/docs/getting-started). # (default: disabled) diff --git a/src/runtime/config/configuration-fc.toml.in b/src/runtime/config/configuration-fc.toml.in index d03e452f15..0881eeb0e2 100644 --- a/src/runtime/config/configuration-fc.toml.in +++ b/src/runtime/config/configuration-fc.toml.in @@ -328,6 +328,9 @@ internetworking_model="@DEFNETWORKMODEL_FC@" # (default: true) disable_guest_seccomp=@DEFDISABLEGUESTSECCOMP@ +# disable applying SELinux on the VMM process (default false) +disable_selinux=@DEFDISABLESELINUX@ + # If enabled, the runtime will create opentracing.io traces and spans. # (See https://www.jaegertracing.io/docs/getting-started). # (default: disabled) diff --git a/src/runtime/config/configuration-qemu.toml.in b/src/runtime/config/configuration-qemu.toml.in index 5bc8e9cc38..9807118e98 100644 --- a/src/runtime/config/configuration-qemu.toml.in +++ b/src/runtime/config/configuration-qemu.toml.in @@ -504,6 +504,9 @@ internetworking_model="@DEFNETWORKMODEL_QEMU@" # (default: true) disable_guest_seccomp=@DEFDISABLEGUESTSECCOMP@ +# disable applying SELinux on the VMM process (default false) +disable_selinux=@DEFDISABLESELINUX@ + # If enabled, the runtime will create opentracing.io traces and spans. # (See https://www.jaegertracing.io/docs/getting-started). # (default: disabled) diff --git a/src/runtime/pkg/katautils/config.go b/src/runtime/pkg/katautils/config.go index 6d65468abc..c7f5ad7171 100644 --- a/src/runtime/pkg/katautils/config.go +++ b/src/runtime/pkg/katautils/config.go @@ -136,6 +136,7 @@ type hypervisor struct { GuestSwap bool `toml:"enable_guest_swap"` Rootless bool `toml:"rootless"` DisableSeccomp bool `toml:"disable_seccomp"` + DisableSeLinux bool `toml:"disable_selinux"` } type runtime struct { @@ -881,6 +882,7 @@ func newClhHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) { SGXEPCSize: defaultSGXEPCSize, EnableAnnotations: h.EnableAnnotations, DisableSeccomp: h.DisableSeccomp, + DisableSeLinux: h.DisableSeLinux, }, nil } diff --git a/src/runtime/virtcontainers/clh.go b/src/runtime/virtcontainers/clh.go index 591efa5aa0..c89b18a1ac 100644 --- a/src/runtime/virtcontainers/clh.go +++ b/src/runtime/virtcontainers/clh.go @@ -388,10 +388,13 @@ func (clh *cloudHypervisor) StartVM(ctx context.Context, timeout int) error { // virtiofsd are executed by kata-runtime after this call, run with // the SELinux label. If these processes require privileged, we do // notwant to run them under confinement. - if err := label.SetProcessLabel(clh.config.SELinuxProcessLabel); err != nil { - return err + if !clh.config.DisableSeLinux { + + if err := label.SetProcessLabel(clh.config.SELinuxProcessLabel); err != nil { + return err + } + defer label.SetProcessLabel("") } - defer label.SetProcessLabel("") if clh.config.SharedFS == config.VirtioFS { clh.Logger().WithField("function", "StartVM").Info("Starting virtiofsd") diff --git a/src/runtime/virtcontainers/fc.go b/src/runtime/virtcontainers/fc.go index 1b4c055ccf..404adef5e5 100644 --- a/src/runtime/virtcontainers/fc.go +++ b/src/runtime/virtcontainers/fc.go @@ -793,10 +793,13 @@ func (fc *firecracker) StartVM(ctx context.Context, timeout int) error { // are executed by kata-runtime after this call, run with the SELinux // label. If these processes require privileged, we do not want to run // them under confinement. - if err := label.SetProcessLabel(fc.config.SELinuxProcessLabel); err != nil { - return err + if !fc.config.DisableSeLinux { + + if err := label.SetProcessLabel(fc.config.SELinuxProcessLabel); err != nil { + return err + } + defer label.SetProcessLabel("") } - defer label.SetProcessLabel("") err = fc.fcInit(ctx, fcTimeout) if err != nil { diff --git a/src/runtime/virtcontainers/hypervisor.go b/src/runtime/virtcontainers/hypervisor.go index 0186c397ed..5ded5b9eba 100644 --- a/src/runtime/virtcontainers/hypervisor.go +++ b/src/runtime/virtcontainers/hypervisor.go @@ -511,6 +511,9 @@ type HypervisorConfig struct { // Disable seccomp from the hypervisor process DisableSeccomp bool + + // Disable selinux from the hypervisor process + DisableSeLinux bool } // vcpu mapping from vcpu number to thread number diff --git a/src/runtime/virtcontainers/qemu.go b/src/runtime/virtcontainers/qemu.go index a58aec8a08..a3fdbd3661 100644 --- a/src/runtime/virtcontainers/qemu.go +++ b/src/runtime/virtcontainers/qemu.go @@ -23,18 +23,17 @@ import ( "time" "unsafe" - "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/rootless" - - govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/opencontainers/selinux/go-selinux/label" "github.com/pkg/errors" "github.com/sirupsen/logrus" "golang.org/x/sys/unix" + govmmQemu "github.com/kata-containers/govmm/qemu" "github.com/kata-containers/kata-containers/src/runtime/pkg/katautils/katatrace" pkgUtils "github.com/kata-containers/kata-containers/src/runtime/pkg/utils" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/device/config" persistapi "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/persist/api" + "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/rootless" vcTypes "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/types" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/uuid" "github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types" @@ -818,10 +817,12 @@ func (q *qemu) StartVM(ctx context.Context, timeout int) error { // virtiofsd are executed by kata-runtime after this call, run with // the SELinux label. If these processes require privileged, we do // notwant to run them under confinement. - if err := label.SetProcessLabel(q.config.SELinuxProcessLabel); err != nil { - return err + if !q.config.DisableSeLinux { + if err := label.SetProcessLabel(q.config.SELinuxProcessLabel); err != nil { + return err + } + defer label.SetProcessLabel("") } - defer label.SetProcessLabel("") if q.config.SharedFS == config.VirtioFS { err = q.setupVirtiofsd(ctx) @@ -835,7 +836,6 @@ func (q *qemu) StartVM(ctx context.Context, timeout int) error { } } }() - } var strErr string