mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-09-25 10:43:15 +00:00
Merge pull request #6205 from fengwang666/non-root-clh
runtime: support non-root for clh
This commit is contained in:
@@ -19,6 +19,7 @@ import (
|
||||
"net/http/httputil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/user"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strconv"
|
||||
@@ -37,6 +38,8 @@ import (
|
||||
"github.com/kata-containers/kata-containers/src/runtime/pkg/device/config"
|
||||
hv "github.com/kata-containers/kata-containers/src/runtime/pkg/hypervisors"
|
||||
"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/pkg/rootless"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/types"
|
||||
"github.com/kata-containers/kata-containers/src/runtime/virtcontainers/utils"
|
||||
)
|
||||
@@ -653,7 +656,7 @@ func (clh *cloudHypervisor) StartVM(ctx context.Context, timeout int) error {
|
||||
clh.Logger().WithField("function", "StartVM").Info("starting Sandbox")
|
||||
|
||||
vmPath := filepath.Join(clh.config.VMStorePath, clh.id)
|
||||
err := os.MkdirAll(vmPath, DirMode)
|
||||
err := utils.MkdirAllWithInheritedOwner(vmPath, DirMode)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1359,9 +1362,16 @@ func (clh *cloudHypervisor) launchClh() (int, error) {
|
||||
cmdHypervisor.Stdout = clh.console
|
||||
}
|
||||
}
|
||||
|
||||
cmdHypervisor.Stderr = cmdHypervisor.Stdout
|
||||
|
||||
attr := syscall.SysProcAttr{}
|
||||
attr.Credential = &syscall.Credential{
|
||||
Uid: clh.config.Uid,
|
||||
Gid: clh.config.Gid,
|
||||
Groups: clh.config.Groups,
|
||||
}
|
||||
cmdHypervisor.SysProcAttr = &attr
|
||||
|
||||
err = utils.StartCmd(cmdHypervisor)
|
||||
if err != nil {
|
||||
return -1, err
|
||||
@@ -1686,6 +1696,30 @@ func (clh *cloudHypervisor) cleanupVM(force bool) error {
|
||||
clh.Logger().WithError(err).WithField("path", dir).Warnf("failed to remove vm path")
|
||||
}
|
||||
}
|
||||
if rootless.IsRootless() {
|
||||
if _, err := user.Lookup(clh.config.User); err != nil {
|
||||
clh.Logger().WithError(err).WithFields(
|
||||
log.Fields{
|
||||
"user": clh.config.User,
|
||||
"uid": clh.config.Uid,
|
||||
}).Warn("failed to find the user, it might have been removed")
|
||||
return nil
|
||||
}
|
||||
|
||||
if err := pkgUtils.RemoveVmmUser(clh.config.User); err != nil {
|
||||
clh.Logger().WithError(err).WithFields(
|
||||
log.Fields{
|
||||
"user": clh.config.User,
|
||||
"uid": clh.config.Uid,
|
||||
}).Warn("failed to delete the user")
|
||||
return nil
|
||||
}
|
||||
clh.Logger().WithFields(
|
||||
log.Fields{
|
||||
"user": clh.config.User,
|
||||
"uid": clh.config.Uid,
|
||||
}).Debug("successfully removed the non root user")
|
||||
}
|
||||
|
||||
clh.reset()
|
||||
|
||||
|
@@ -1183,6 +1183,7 @@ func (q *qemu) cleanupVM() error {
|
||||
"user": q.config.User,
|
||||
"uid": q.config.Uid,
|
||||
}).Warn("failed to delete the user")
|
||||
return nil
|
||||
}
|
||||
q.Logger().WithFields(
|
||||
logrus.Fields{
|
||||
|
Reference in New Issue
Block a user