Skip to content

Commit 58d1b4d

Browse files
Add correct selinux label at plugin socket directory
1 parent b9631a8 commit 58d1b4d

File tree

8 files changed

+37
-0
lines changed

8 files changed

+37
-0
lines changed

pkg/kubelet/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ go_library(
109109
"//pkg/util/node:go_default_library",
110110
"//pkg/util/oom:go_default_library",
111111
"//pkg/util/removeall:go_default_library",
112+
"//pkg/util/selinux:go_default_library",
112113
"//pkg/util/taints:go_default_library",
113114
"//pkg/volume:go_default_library",
114115
"//pkg/volume/csi:go_default_library",

pkg/kubelet/cm/devicemanager/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ go_library(
2626
"//pkg/kubelet/metrics:go_default_library",
2727
"//pkg/kubelet/util/pluginwatcher:go_default_library",
2828
"//pkg/scheduler/nodeinfo:go_default_library",
29+
"//pkg/util/selinux:go_default_library",
2930
"//staging/src/k8s.io/api/core/v1:go_default_library",
3031
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
3132
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",

pkg/kubelet/cm/devicemanager/manager.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
"k8s.io/kubernetes/pkg/kubelet/metrics"
4343
watcher "k8s.io/kubernetes/pkg/kubelet/util/pluginwatcher"
4444
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
45+
"k8s.io/kubernetes/pkg/util/selinux"
4546
)
4647

4748
// ActivePodsFunc is a function that returns a list of pods to reconcile.
@@ -206,6 +207,11 @@ func (m *ManagerImpl) Start(activePods ActivePodsFunc, sourcesReady config.Sourc
206207

207208
socketPath := filepath.Join(m.socketdir, m.socketname)
208209
os.MkdirAll(m.socketdir, 0755)
210+
if selinux.SELinuxEnabled() {
211+
if err := selinux.SetFileLabel(m.socketdir, config.KubeletPluginsDirSELinuxLabel); err != nil {
212+
klog.Warningf("Unprivileged containerized plugins might not work. Could not set selinux context on %s: %v", m.socketdir, err)
213+
}
214+
}
209215

210216
// Removes all stale sockets in m.socketdir. Device plugins can monitor
211217
// this and use it as a signal to re-register with the new Kubelet.

pkg/kubelet/config/defaults.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@ const (
2626
DefaultKubeletContainersDirName = "containers"
2727
DefaultKubeletPluginContainersDirName = "plugin-containers"
2828
DefaultKubeletPodResourcesDirName = "pod-resources"
29+
KubeletPluginsDirSELinuxLabel = "system_u:object_r:container_file_t:s0"
2930
)

pkg/kubelet/kubelet.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ import (
113113
"k8s.io/kubernetes/pkg/util/mount"
114114
nodeutil "k8s.io/kubernetes/pkg/util/node"
115115
"k8s.io/kubernetes/pkg/util/oom"
116+
"k8s.io/kubernetes/pkg/util/selinux"
116117
"k8s.io/kubernetes/pkg/volume"
117118
"k8s.io/kubernetes/pkg/volume/csi"
118119
utilexec "k8s.io/utils/exec"
@@ -1225,6 +1226,8 @@ type Kubelet struct {
12251226
// 4. the pod-resources directory
12261227
func (kl *Kubelet) setupDataDirs() error {
12271228
kl.rootDirectory = path.Clean(kl.rootDirectory)
1229+
pluginRegistrationDir := kl.getPluginsRegistrationDir()
1230+
pluginsDir := kl.getPluginsDir()
12281231
if err := os.MkdirAll(kl.getRootDir(), 0750); err != nil {
12291232
return fmt.Errorf("error creating root directory: %v", err)
12301233
}
@@ -1243,6 +1246,16 @@ func (kl *Kubelet) setupDataDirs() error {
12431246
if err := os.MkdirAll(kl.getPodResourcesDir(), 0750); err != nil {
12441247
return fmt.Errorf("error creating podresources directory: %v", err)
12451248
}
1249+
if selinux.SELinuxEnabled() {
1250+
err := selinux.SetFileLabel(pluginRegistrationDir, config.KubeletPluginsDirSELinuxLabel)
1251+
if err != nil {
1252+
klog.Warningf("Unprivileged containerized plugins might not work. Could not set selinux context on %s: %v", pluginRegistrationDir, err)
1253+
}
1254+
err = selinux.SetFileLabel(pluginsDir, config.KubeletPluginsDirSELinuxLabel)
1255+
if err != nil {
1256+
klog.Warningf("Unprivileged containerized plugins might not work. Could not set selinux context on %s: %v", pluginsDir, err)
1257+
}
1258+
}
12461259
return nil
12471260
}
12481261

pkg/kubelet/kubelet_getters.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ func (kl *Kubelet) getPodResourcesDir() string {
159159
return filepath.Join(kl.getRootDir(), config.DefaultKubeletPodResourcesDirName)
160160
}
161161

162+
// getPluginsDirSELinuxLabel returns the selinux label to be applied on plugin directories
163+
func (kl *Kubelet) getPluginsDirSELinuxLabel() string {
164+
return config.KubeletPluginsDirSELinuxLabel
165+
}
166+
162167
// GetPods returns all pods bound to the kubelet and their spec, and the mirror
163168
// pods.
164169
func (kl *Kubelet) GetPods() []*v1.Pod {

pkg/util/selinux/selinux_linux.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,8 @@ func (_ *realSELinuxRunner) Getfilecon(path string) (string, error) {
5050
}
5151
return selinux.FileLabel(path)
5252
}
53+
54+
// SetFileLabel applies the SELinux label on the path or returns an error.
55+
func SetFileLabel(path string, label string) error {
56+
return selinux.SetFileLabel(path, label)
57+
}

pkg/util/selinux/selinux_unsupported.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,3 +31,8 @@ var _ SELinuxRunner = &realSELinuxRunner{}
3131
func (_ *realSELinuxRunner) Getfilecon(path string) (string, error) {
3232
return "", nil
3333
}
34+
35+
// FileLabel returns the SELinux label for this path or returns an error.
36+
func SetFileLabel(path string, label string) error {
37+
return nil
38+
}

0 commit comments

Comments
 (0)