diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml index 96d18dd93b..893b56d93a 100644 --- a/man/systemd.exec.xml +++ b/man/systemd.exec.xml @@ -675,10 +675,9 @@ CapabilityBoundingSet=~CAP_B CAP_C SystemCallArchitectures=, SystemCallFilter=, or SystemCallLog= are specified. Note that even if this setting is overridden - by them, systemctl show shows the original value of this setting. In case the - service will be run in a new mount namespace anyway, all file systems are mounted with MS_NOSUID - flag. Also see - No New Privileges Flag. + by them, systemctl show shows the original value of this setting. Also see + No New + Privileges Flag. diff --git a/src/core/execute.c b/src/core/execute.c index 5c958b327b..5bb41db888 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -3189,8 +3189,6 @@ static int apply_mount_namespace( .protect_proc = context->protect_proc, .proc_subset = context->proc_subset, .private_ipc = context->private_ipc || context->ipc_namespace_path, - /* If NNP is on, we can turn on MS_NOSUID, since it won't have any effect anymore. */ - .mount_nosuid = context->no_new_privileges, }; } else if (!context->dynamic_user && root_dir) /* diff --git a/src/core/namespace.c b/src/core/namespace.c index 71fc73b9d3..6d77ce9967 100644 --- a/src/core/namespace.c +++ b/src/core/namespace.c @@ -1464,27 +1464,6 @@ static int make_noexec(const MountEntry *m, char **deny_list, FILE *proc_self_mo return 0; } -static int make_nosuid(const MountEntry *m, FILE *proc_self_mountinfo) { - bool submounts = false; - int r = 0; - - assert(m); - assert(proc_self_mountinfo); - - submounts = !IN_SET(m->mode, EMPTY_DIR, TMPFS); - - if (submounts) - r = bind_remount_recursive_with_mountinfo(mount_entry_path(m), MS_NOSUID, MS_NOSUID, NULL, proc_self_mountinfo); - else - r = bind_remount_one_with_mountinfo(mount_entry_path(m), MS_NOSUID, MS_NOSUID, proc_self_mountinfo); - if (r == -ENOENT && m->ignore) - return 0; - if (r < 0) - return log_debug_errno(r, "Failed to re-mount '%s'%s: %m", mount_entry_path(m), - submounts ? " and its submounts" : ""); - return 0; -} - static bool namespace_info_mount_apivfs(const NamespaceInfo *ns_info) { assert(ns_info); @@ -1681,17 +1660,6 @@ static int apply_mounts( } } - /* Fourth round, flip the nosuid bits without a deny list. */ - if (ns_info->mount_nosuid) - for (MountEntry *m = mounts; m < mounts + *n_mounts; ++m) { - r = make_nosuid(m, proc_self_mountinfo); - if (r < 0) { - if (error_path && mount_entry_path(m)) - *error_path = strdup(mount_entry_path(m)); - return r; - } - } - return 1; } diff --git a/src/core/namespace.h b/src/core/namespace.h index c9373a4adb..737d6eae8b 100644 --- a/src/core/namespace.h +++ b/src/core/namespace.h @@ -74,7 +74,6 @@ struct NamespaceInfo { bool mount_apivfs; bool protect_hostname; bool private_ipc; - bool mount_nosuid; ProtectHome protect_home; ProtectSystem protect_system; ProtectProc protect_proc;