# German translation of manpages # This file is distributed under the same license as the manpages-l10n package. # Copyright © of this file: # Helge Kreutzmann , 2021,2023. msgid "" msgstr "" "Project-Id-Version: manpages-l10n 4.18.1\n" "POT-Creation-Date: 2024-03-01 17:13+0100\n" "PO-Revision-Date: 2023-08-12 18:42+0200\n" "Last-Translator: Helge Kreutzmann \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #. type: TH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "user_namespaces" msgstr "user_namespaces" #. type: TH #: archlinux fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "2023-10-31" msgstr "31. Oktober 2023" #. type: TH #: archlinux fedora-40 fedora-rawhide mageia-cauldron #, no-wrap msgid "Linux man-pages 6.06" msgstr "Linux man-pages 6.06" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NAME" msgstr "BEZEICHNUNG" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "user_namespaces - overview of Linux user namespaces" msgstr "user_namespaces - Überblick über Benutzernamensräume in Linux" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "DESCRIPTION" msgstr "BESCHREIBUNG" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "For an overview of namespaces, see B(7)." msgstr "Für einen Überblick über Namensräume, siehe B(7)." # #. FIXME: This page says very little about the interaction #. of user namespaces and keys. Add something on this topic. #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "User namespaces isolate security-related identifiers and attributes, in " "particular, user IDs and group IDs (see B(7)), the root " "directory, keys (see B(7)), and capabilities (see " "B(7)). A process's user and group IDs can be different inside " "and outside a user namespace. In particular, a process can have a normal " "unprivileged user ID outside a user namespace while at the same time having " "a user ID of 0 inside the namespace; in other words, the process has full " "privileges for operations inside the user namespace, but is unprivileged for " "operations outside the namespace." msgstr "" "Benutzernamensräume isolieren sicherheitsrelevante Kennzeichner und " "Attribute, insbesondere Benutzer- und Gruppenkennungen (siehe " "B(7)), das Wurzelverzeichnis, Schlüssel (siehe B(7)) " "und Capabilitys (siehe B(7)). Die Benutzer- und Gruppenkennung " "eines Prozesses kann innerhalb und außerhalb eines Benutzernamensraums " "verschieden sein. Insbesondere kann ein Prozess eine normale, nicht " "privilegierte Benutzerkennung außerhalb eines Benutzernamensraums haben, " "während er gleichzeitig eine Benutzerkennung 0 innerhalb des Namensraums " "hat; mit anderen Worten, der Prozess hat volle Privilegien für Aktionen " "innerhalb des Benutzernamensraums, ist aber für Aktionen außerhalb des " "Namensraums nicht privilegiert." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Nested namespaces, namespace membership" msgstr "Verschachtelte Namensräume, Namensraum-Mitgliedschaft" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "User namespaces can be nested; that is, each user namespace\\[em]except the " "initial (\"root\") namespace\\[em]has a parent user namespace, and can have " "zero or more child user namespaces. The parent user namespace is the user " "namespace of the process that creates the user namespace via a call to " "B(2) or B(2) with the B flag." msgstr "" "Benutzernamensräume können verschachtelt werden, das bedeutet, dass jeder " "Benutzernamensraum\\[en]außer dem anfänglichen " "(»Wurzel-«)Namensraum\\[en]über einen Vorgängernamensraum verfügt und keinen " "oder mehrere Nachfolgernamensräume haben kann. Der Vorgängernamensraum ist " "der Benutzernamensraum des Prozesses, der den Benutzernamensraum mittels " "eines Aufrufs von B(2) oder B(2) mit dem Schalter " "B erstellte." #. commit 8742f229b635bf1c1c84a3dfe5e47c814c20b5c8 #. FIXME Explain the rationale for this limit. (What is the rationale?) #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The kernel imposes (since Linux 3.11) a limit of 32 nested levels of user " "namespaces. Calls to B(2) or B(2) that would cause this " "limit to be exceeded fail with the error B." msgstr "" "(Seit Linux 3.11) erzwingt der Kernel eine Begrenzung von 32 verschachtelten " "Stufen an Benutzernamensräumen. Aufrufe an B(2) oder B(2), " "die zum Überschreiten dieser Begrenzung führen würden, schlagen mit dem " "Fehler B fehl." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Each process is a member of exactly one user namespace. A process created " "via B(2) or B(2) without the B flag is a " "member of the same user namespace as its parent. A single-threaded process " "can join another user namespace with B(2) if it has the " "B in that namespace; upon doing so, it gains a full set of " "capabilities in that namespace." msgstr "" "Jeder Prozess ist Mitglied in genau einem Benutzernamensraum. Ein mit " "B(2) oder B(2) ohne den Schalter B erstellter " "Prozess ist ein Mitglied im gleichen Benutzernamensraum wie sein " "Elternprozess. Ein Prozess mit nur einem Thread kann einem anderen " "Benutzernamensraum mit B(2) beitreten, falls er über B " "in diesem Namensraum verfügt; wenn er dies durchführt, erlangt er den " "vollständigen Satz an Capabilitys in diesem Namensraum." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A call to B(2) or B(2) with the B flag " "makes the new child process (for B(2)) or the caller (for " "B(2)) a member of the new user namespace created by the call." msgstr "" "Ein Aufruf von B(2) oder B(2) mit dem Schalter " "B führt dazu, dass der Kindprozess (für B(2)) oder der " "Aufrufende (für B(2)) ein Mitglied des neuen, durch den Aufruf " "erstellten Benutzernamensraums wird." # #. #-#-#-#-# archlinux: user_namespaces.7.pot (PACKAGE VERSION) #-#-#-#-# #. type: Plain text #. #-#-#-#-# debian-bookworm: user_namespaces.7.pot (PACKAGE VERSION) #-#-#-#-# #. ============================================================ #. type: Plain text #. #-#-#-#-# debian-unstable: user_namespaces.7.pot (PACKAGE VERSION) #-#-#-#-# #. type: Plain text #. #-#-#-#-# fedora-40: user_namespaces.7.pot (PACKAGE VERSION) #-#-#-#-# #. type: Plain text #. #-#-#-#-# fedora-rawhide: user_namespaces.7.pot (PACKAGE VERSION) #-#-#-#-# #. type: Plain text #. #-#-#-#-# mageia-cauldron: user_namespaces.7.pot (PACKAGE VERSION) #-#-#-#-# #. type: Plain text #. #-#-#-#-# opensuse-leap-15-6: user_namespaces.7.pot (PACKAGE VERSION) #-#-#-#-# #. type: Plain text #. #-#-#-#-# opensuse-tumbleweed: user_namespaces.7.pot (PACKAGE VERSION) #-#-#-#-# #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B B(2) operation can be used to discover the " "parental relationship between user namespaces; see B(2)." msgstr "" "Die Aktion B B(2) kann zum Erkennen der Vorgänger-/" "Nachfolger-Beziehung von Benutzernamensräumen verwandt werden; siehe " "B(2)." # #. ============================================================ #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A task that changes one of its effective IDs will have its dumpability reset " "to the value in I. This may affect the " "ownership of proc files of child processes and may thus cause the parent to " "lack the permissions to write to mapping files of child processes running in " "a new user namespace. In such cases making the parent process dumpable, " "using B in a call to B(2), before creating a child " "process in a new user namespace may rectify this problem. See B(2) " "and B(5) for details on how ownership is affected." msgstr "" "Ein Task, der eine seiner effektiven Kennungen ändert, bekommt sein " "»dumpable« auf den in I angegebenen Wert " "zurückgesetzt. Dies kann die Eigentümerschaft von Proc-Dateien von " "Kindprozessen betreffen und kann daher dazu führen, dass dem Elternprozess " "Berechtigungen fehlen, um in Mapping-Dateien des Kindprozesses, die in neuen " "Benutzernamensräumen ausgeführt werden, zu schreiben. Das Problem kann " "korrigiert werden, indem in diesen Fällen der Elternprozess mittels " "B in einem Aufruf von B(2) vor der Erstellung des " "Kindprozesses in einem neuen Benutzernamensraum »dumpable« gemacht wird. " "Siehe B(2) und B(5) zu Details wie die Eigentümerschaft " "betroffen ist." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Capabilities" msgstr "Capabilitys" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The child process created by B(2) with the B flag " "starts out with a complete set of capabilities in the new user namespace. " "Likewise, a process that creates a new user namespace using B(2) " "or joins an existing user namespace using B(2) gains a full set of " "capabilities in that namespace. On the other hand, that process has no " "capabilities in the parent (in the case of B(2)) or previous (in the " "case of B(2) and B(2)) user namespace, even if the new " "namespace is created or joined by the root user (i.e., a process with user " "ID 0 in the root namespace)." msgstr "" "Der durch B(2) mit dem Schalter B erstellte " "Kindprozess beginnt mit einem vollständigen Satz an Capabilitys in dem neuen " "Benutzernamensraum. Entsprechend erlangt ein Prozess, der einen neuen " "Benutzernamensraum mittels B(2) erstellt oder ihm mittels " "B(2) beitritt, einen vollständigen Satz an Capabilitys in diesem " "Namensraum. Anderserseits hat dieser Prozess keine Capabilitys in dem " "Vorgänger- (im Falle von B(2)) oder vorhergehenden (im Falle von " "B(2) und B(2)) Benutzernamensraum, selbst falls der neue " "Namensraum vom Benutzer root erstellt wird oder dieser ihm beitritt (d.h. " "einem Prozess mit der Benutzerkennung 0 im Wurzel-Namensraum)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Note that a call to B(2) will cause a process's capabilities to be " "recalculated in the usual way (see B(7)). Consequently, " "unless the process has a user ID of 0 within the namespace, or the " "executable file has a nonempty inheritable capabilities mask, the process " "will lose all capabilities. See the discussion of user and group ID " "mappings, below." msgstr "" "Beachten Sie, dass ein Aufruf von B(2) dazu führt, dass die " "Capabilitys eines Prozesses auf die normale Art und Weise erneut berechnet " "werden (siehe B(7)). Folglich wird der Prozess alle " "Capabilitys verlieren, außer er hat eine Benutzerkennung von 0 innerhalb des " "Namensraums oder die ausführbare Datei hat eine vererbbare Capability-Maske, " "die nicht leer ist. Siehe die nachfolgende Diskussion von Benutzer- und " "Gruppenkennungabbildung." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A call to B(2) or B(2) using the B flag or " "a call to B(2) that moves the caller into another user namespace " "sets the \"securebits\" flags (see B(7)) to their default " "values (all flags disabled) in the child (for B(2)) or caller (for " "B(2) or B(2)). Note that because the caller no longer has " "capabilities in its original user namespace after a call to B(2), it " "is not possible for a process to reset its \"securebits\" flags while " "retaining its user namespace membership by using a pair of B(2) " "calls to move to another user namespace and then return to its original user " "namespace." msgstr "" "Ein Aufruf von B(2) oder B(2) mit dem Schalter " "B oder ein Aufruf von B(2), der den Aufrufenden in " "einen anderen Benutzernamensraum verschiebt, setzt die Schalter " "»securebits« (siehe B(7)) im Kind (für B(2)) oder dem " "Aufrufenden (für B(2) oder B(2)) auf ihre Vorgabewerte (alle " "Schalter deaktiviert). Beachten Sie, dass der Aufrufende nach einem Aufruf " "von B(2) keine Capabilitys in seinem ursprünglichen " "Benutzernamensraum mehr hat und es daher für einen Prozess nicht möglich " "ist, seine Schalter »securebits« zurückzusetzen und gleichzeitig seine " "Mitgliedschaft im Benutzernamensraum zu erhalten, indem ein Paar von " "B(2)-Aufrufen verwandt wird, um sich in einen anderen " "Benutzernamensraum zu verschieben und dann zu seinem ursprünglichen " "Namensraum zurückzukehren." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The rules for determining whether or not a process has a capability in a " "particular user namespace are as follows:" msgstr "" "Die Regeln zur Bestimmung, ob ein Prozess eine Capability in einem " "bestimmten Benutzernamensraum hat, sind wie folgt:" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "\\[bu]" msgstr "\\[bu]" #. In the 3.8 sources, see security/commoncap.c::cap_capable(): #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A process has a capability inside a user namespace if it is a member of that " "namespace and it has the capability in its effective capability set. A " "process can gain capabilities in its effective capability set in various " "ways. For example, it may execute a set-user-ID program or an executable " "with associated file capabilities. In addition, a process may gain " "capabilities via the effect of B(2), B(2), or B(2), " "as already described." msgstr "" "Ein Prozess hat eine Capability innerhalb eines Benutzernamensraums, falls " "er ein Mitglied dieses Namensraums ist und er die Capability in seiner " "effektiven Capability-Menge hat. Ein Prozess kann Capabilitys in seiner " "effektiven Capability-Menge auf verschiedene Arten erlangen. Beispielsweise " "könnte er ein set-user-ID-Programm oder eine ausführbare Datei mit " "zugeordneten Datei-Capabilitys ausführen. Zusätzlich könnte ein Prozess " "Capabilitys mittels der bereits beschriebenen Auswirkungen von B(2), " "B(2) oder B(2) erlangen." # FIXME Ist »removed descendant« korrekt übersetzt? #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If a process has a capability in a user namespace, then it has that " "capability in all child (and further removed descendant) namespaces as well." msgstr "" "Falls ein Prozess eine Capability in einem Benutzernamensraum hat, dann hat " "es diese Capability in allen nachfolgenden (und weiter entfernten " "Nachfolge-) Namensräumen ebenfalls." # #. * The owner of the user namespace in the parent of the #. * user namespace has all caps. #. (and likewise associates the effective group ID of the creating process #. with the namespace). #. See kernel commit 520d9eabce18edfef76a60b7b839d54facafe1f9 for a fix #. on this point #. This includes the case where the process executes a set-user-ID #. program that confers the effective UID of the creator of the namespace. #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a user namespace is created, the kernel records the effective user ID " "of the creating process as being the \"owner\" of the namespace. A process " "that resides in the parent of the user namespace and whose effective user ID " "matches the owner of the namespace has all capabilities in the namespace. " "By virtue of the previous rule, this means that the process has all " "capabilities in all further removed descendant user namespaces as well. The " "B B(2) operation can be used to discover the user " "ID of the owner of the namespace; see B(2)." msgstr "" "Wenn ein Benutzernamensraum erstellt wird, zeichnet der Kernel die effektive " "Benutzerkennung des erstellenden Prozesses als »Eigentümer« des Namensraums " "auf. Ein Prozess, der sich im Vorgänger des Benutzernamensraums befindet und " "dessen effektive Benutzerkennung auf die des Eigentümers des Namensraums " "passt, hat alle Capabilitys in diesem Namensraum. Dank der vorherigen Regel " "bedeutet dies, dass der Prozess auch über alle Capabilitys in allen weiteren " "entfernten nachfolgenden Benutzerräumen verfügt. Die Aktion " "B B(2) kann zum Ermitteln der Benutzerkennung des " "Eigentümers des Namensraums verwandt werden; siehe B(2)." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Effect of capabilities within a user namespace" msgstr "Auswirkungen von Capabilitys innerhalb eines Benutzernamensraums" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Having a capability inside a user namespace permits a process to perform " "operations (that require privilege) only on resources governed by that " "namespace. In other words, having a capability in a user namespace permits " "a process to perform privileged operations on resources that are governed by " "(nonuser) namespaces owned by (associated with) the user namespace (see the " "next subsection)." msgstr "" "Hat ein Prozess eine Capability innerhalb eines Benutzernamensraums, dann " "darf er Aktionen nur auf Ressourcen anwenden (die Privilegien benötigen), " "die durch diesen Namensraum reguliert werden. Mit anderen Worten erlaubt " "eine Capability in einem Benutzernamensraum einem Prozess, privilegierte " "Aktionen auf Ressourcen durchzuführen, die durch (Nichtbenutzer-)Namensräume " "gelenkt werden, die den Benutzernamensräumen gehören bzw. diesen zugeordnet " "sind (siehe den nächsten Unterabschnitt)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "On the other hand, there are many privileged operations that affect " "resources that are not associated with any namespace type, for example, " "changing the system (i.e., calendar) time (governed by B), " "loading a kernel module (governed by B), and creating a " "device (governed by B). Only a process with privileges in the " "I user namespace can perform such operations." msgstr "" "Auf der anderen Seite gibt es viele privilegierte Aktionen, die Ressourcen " "betreffen, die keinem Namensraumtyp zugeordnet sind, beispielsweise dem " "Ändern der Systemzeit (z.B. Kalender) (wird durch B " "reguliert), dem Laden eines Kernelmoduls (wird durch B " "reguliert) und dem Erstellen eines Gerätes (wird durch B " "reguliert). Nur Prozesse, die über Privilegien in dem I " "Benutzernamensraum verfügen, können solche Aktionen durchführen." #. fs_flags = FS_USERNS_MOUNT in kernel sources #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Holding B within the user namespace that owns a process's " "mount namespace allows that process to create bind mounts and mount the " "following types of filesystems:" msgstr "" "Wenn ein Prozess B innerhalb eines Namensraums hält, der den " "Einhängenamensraum des Prozesses besitzt, dann kann er Bind-Einhängungen " "erstellen und die folgenden Arten an Dateisystemen einhängen:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I (since Linux 3.8)" msgstr "I (seit Linux 3.8)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I (since Linux 3.8)" msgstr "I (seit Linux 3.8)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I (since Linux 3.9)" msgstr "I (seit Linux 3.9)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "B(5) (since Linux 3.9)" msgstr "B(5) (seit Linux 3.9)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I (since Linux 3.9)" msgstr "I (seit Linux 3.9)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I (since Linux 3.9)" msgstr "I (seit Linux 3.9)" #. commit b2197755b2633e164a439682fb05a9b5ea48f706 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I (since Linux 4.4)" msgstr "I (seit Linux 4.4)" #. commit 92dbc9dedccb9759c7f9f2f0ae6242396376988f #. commit 4cb2c00c43b3fe88b32f29df4f76da1b92c33224 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I (since Linux 5.11)" msgstr "I (seit Linux 5.11)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Holding B within the user namespace that owns a process's " "cgroup namespace allows (since Linux 4.6) that process to the mount the " "cgroup version 2 filesystem and cgroup version 1 named hierarchies (i.e., " "cgroup filesystems mounted with the I<\"none,name=\"> option)." msgstr "" "Wenn ein Prozess B innerhalb eines Namensraums hält, der den " "Cgroup-Namensraum des Prozesses besitzt, dann kann er (seit Linux 4.6) das " "Cgroup-Version-2-Dateisystem und die benannten Cgroup-Version-1-Hierarchien " "(d.h. Cgroup-Dateisysteme, die mit der Option I<\"none,name=\"> eingehängt " "sind) einhängen." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Holding B within the user namespace that owns a process's PID " "namespace allows (since Linux 3.8) that process to mount I " "filesystems." msgstr "" "Wenn ein Prozess B innerhalb eines Namensraums hält, der den " "PID-Namensraum des Prozesses besitzt, dann kann er (seit Linux 3.8) I-" "Dateisysteme einhängen." # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Note, however, that mounting block-based filesystems can be done only by a " "process that holds B in the initial user namespace." msgstr "" "Beachten Sie, dass das Einhängen blockbasierter Dateisysteme nur von " "Prozessen erfolgen kann, die B in dem anfänglichen " "Benutzernamensraum enthalten." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Interaction of user namespaces and other types of namespaces" msgstr "Wechselwirkung von Benutzernamensräumen und anderen Arten von Namensräumen" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Starting in Linux 3.8, unprivileged processes can create user namespaces, " "and the other types of namespaces can be created with just the " "B capability in the caller's user namespace." msgstr "" "Seit Linux 3.8 können nicht privilegierte Prozesse Benutzernamensräume " "erstellen und andere Arten von Namensräumen können nur mit der Capability " "B im Benutzernamensraum des Aufrufenden erstellt werden." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a nonuser namespace is created, it is owned by the user namespace in " "which the creating process was a member at the time of the creation of the " "namespace. Privileged operations on resources governed by the nonuser " "namespace require that the process has the necessary capabilities in the " "user namespace that owns the nonuser namespace." msgstr "" "Wenn ein Nichtbenutzer-Namensraum erstellt wird, gehört er dem " "Benutzernamensraum, in dem der erstellende Prozess zum Erstellungszeitraum " "des Namensraums Mitglied war. Privilegierte Aktionen auf Ressourcen, die von " "einem Nichtbenutzer-Namensraum reguliert werden, benötigen, dass der Prozess " "über die notwendigen Capabilitys in dem Benutzernamensraum verfügt, der den " "Nichtbenutzer-Namensraum besitzt." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If B is specified along with other B flags in a " "single B(2) or B(2) call, the user namespace is guaranteed " "to be created first, giving the child (B(2)) or caller " "(B(2)) privileges over the remaining namespaces created by the " "call. Thus, it is possible for an unprivileged caller to specify this " "combination of flags." msgstr "" "Falls B zusammen mit anderen Schaltern B in einem " "einzelnen Aufruf von B(2) oder B(2) angegeben wird, wird " "garantiert, dass der Namensraum zuerst erstellt wird, und damit dem " "Kindprozess (B(2)) oder dem aufrufenden Prozess (B(2)) " "Privilegien über den durch den Aufruf erstellten Namensraum gegeben wird. " "Daher ist es für einen nicht privilegierten Aufrufenden möglich, diese " "Schalterkombination festzulegen." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a new namespace (other than a user namespace) is created via " "B(2) or B(2), the kernel records the user namespace of the " "creating process as the owner of the new namespace. (This association can't " "be changed.) When a process in the new namespace subsequently performs " "privileged operations that operate on global resources isolated by the " "namespace, the permission checks are performed according to the process's " "capabilities in the user namespace that the kernel associated with the new " "namespace. For example, suppose that a process attempts to change the " "hostname (B(2)), a resource governed by the UTS namespace. In " "this case, the kernel will determine which user namespace owns the process's " "UTS namespace, and check whether the process has the required capability " "(B) in that user namespace." msgstr "" "Wenn ein neuer Namensraum (der kein Benutzernamensraum ist) mittels " "B(2) oder B(2) erstellt wird, zeichnet der Kernel den " "Benutzernamensraum des erstellenden Prozesses als Eigentümer des neuen " "Namensraums auf. (Diese Zuordnung kann nicht geändert werden). Wenn " "nachfolgend ein Prozess in dem neuen Namensraum eine privilegierte Aktion " "durchführt, die auf globalen Ressourcen agiert, die durch den Namensraum " "isoliert werden, dann erfolgen die Berechtigungsprüfungen gemäß der " "Capabilitys des Prozesses in dem Benutzernamensraum, den der Kernel dem " "neuen Namensraum zuordnet. Wird beispielsweise angenommen, dass ein Prozess " "versucht, den Rechnernamen, eine durch UTS-Namensräume regulierte Ressource, " "zu ändern (B(2)), dann wird der Kernel bestimmen, welchem " "Benutzernamensraum der UTS-Namensraum des Prozesses gehört und prüfen, ob " "der Prozess über die benötigte Capability (B) in diesem " "Benutzernamensraum verfügt." # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B B(2) operation can be used to discover the user " "namespace that owns a nonuser namespace; see B(2)." msgstr "" "Die Aktion B B(2) kann zum Erkennen des " "Benutzernamensraums verwandt werden, dem der Nichtbenutzer-Namensraum " "gehört; siehe B(2)." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "User and group ID mappings: uid_map and gid_map" msgstr "Benutzer- und Gruppenkennungabbildungen: uid_map und gid_map" #. commit 22d917d80e842829d0ca0a561967d728eb1d6303 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a user namespace is created, it starts out without a mapping of user " "IDs (group IDs) to the parent user namespace. The IpidI " "and IpidI files (available since Linux 3.5) expose the " "mappings for user and group IDs inside the user namespace for the process " "I. These files can be read to view the mappings in a user namespace " "and written to (once) to define the mappings." msgstr "" "Wenn ein Benutzernamensraum erstellt wird, beginnt er mit einer Abbildung " "der Benutzerkennungen (Gruppenkennungen) auf die des Vorgängernamensraumes. " "Die Dateien IPIDI und IPIDI (verfügbar " "seit Linux 3.5) legen diese Abbildungen für die Benutzer- und " "Gruppenkennungen innerhalb des Benutzernamensraumes für den Prozess I " "offen. Diese Dateien können ausgelesen werden, um die Abbildungen innerhalb " "eines Benutzernamensraums zu betrachten und (einmal) beschrieben zu werden, " "um diese Abbildungen zu definieren." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The description in the following paragraphs explains the details for " "I; I is exactly the same, but each instance of \"user ID\" " "is replaced by \"group ID\"." msgstr "" "Die Beschreibung in den folgenden Absätzen erklärt die Details für " "I; I ist vollständig identisch, sofern jedes Vorkommen von " "»Benutzerkennung« durch »Gruppenkennung« ersetzt wird." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The I file exposes the mapping of user IDs from the user namespace " "of the process I to the user namespace of the process that opened " "I (but see a qualification to this point below). In other words, " "processes that are in different user namespaces will potentially see " "different values when reading from a particular I file, depending " "on the user ID mappings for the user namespaces of the reading processes." msgstr "" "Die Datei I legt die Abbildung der Benutzerkennung von dem " "Benutzernamensraum des Prozesses I in den Benutzernamensraum des " "Prozesses offen, der I öffnete (siehe aber auch die nachfolgende " "Qualifizierung dieses Punktes). Mit anderen Worten, Prozesse, die sich in " "verschiedenen Benutzernamensräumen befinden, werden möglicherweise andere " "Werte sehen, wenn sie aus einer bestimmten Datei I lesen, abhängig " "von der Benutzerkennungsabbildung für den Benutzernamensraum des lesenden " "Prozesses." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Each line in the I file specifies a 1-to-1 mapping of a range of " "contiguous user IDs between two user namespaces. (When a user namespace is " "first created, this file is empty.) The specification in each line takes " "the form of three numbers delimited by white space. The first two numbers " "specify the starting user ID in each of the two user namespaces. The third " "number specifies the length of the mapped range. In detail, the fields are " "interpreted as follows:" msgstr "" "Jede Zeile der Datei I legt eine 1-zu-1-Abbildung des Bereichs " "fortlaufender Benutzerkennungen zwischen zwei Benutzernamensräumen fest. " "(Wenn ein Benutzernamensraum erstmalig erstellt wird, ist diese Datei leer.) " "Die Festlegung in jeder Zeile hat die Form von drei durch Leerraum " "getrennten Zahlen. Die ersten zwei Zahlen geben die am Anfang befindliche " "Benutzerkennung in jedem der zwei Benutzernamensräume an. Die dritte Zahl " "gibt die Länge des abgebildeten Bereichs an. Im Detail werden die Felder wie " "folgt interpretiert:" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(1)" msgstr "(1)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The start of the range of user IDs in the user namespace of the process " "I." msgstr "" "Der Anfang des Bereichs von Benutzerkennungen in dem Benutzernamensraum des " "Prozesses I." #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(2)" msgstr "(2)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The start of the range of user IDs to which the user IDs specified by field " "one map. How field two is interpreted depends on whether the process that " "opened I and the process I are in the same user namespace, as " "follows:" msgstr "" "Der Anfang des Bereichs von Benutzerkennungen, auf die die Benutzerkennungen " "aus Feld eins abgebildet werden. Wie Feld zwei interpretiert wird, hängt " "davon ab, ob der Prozess, der I öffnete und der Prozess I sich " "in dem gleichen Benutzernamensraum befinden, wie folgt:" #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(a)" msgstr "(a)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the two processes are in different user namespaces: field two is the " "start of a range of user IDs in the user namespace of the process that " "opened I." msgstr "" "Falls sich die zwei Prozesse in verschiedenen Benutzernamensräumen befinden: " "Feld zwei ist der Anfang des Bereichs von Benutzerkennungen in dem " "Benutzernamensraum des Prozesses, der I öffnete." #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(b)" msgstr "(b)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the two processes are in the same user namespace: field two is the start " "of the range of user IDs in the parent user namespace of the process " "I. This case enables the opener of I (the common case here is " "opening I) to see the mapping of user IDs into the user " "namespace of the process that created this user namespace." msgstr "" "Falls die zwei Prozesse im gleichen Benutzernamensraum sind: Feld zwei ist " "der Anfang des Bereichs von Benutzerkennungen in dem " "Vorgängerbenutzernamensraum des Prozesses I. Dieser Fall ermöglicht es " "dem Öffnenden von I (der typische Fall hier ist das Öffnen von I) die Abbildung der Benutzerkennungen in den " "Benutzernamensraum des Prozesses, der diesen Benutzernamensraum erstellte, " "zu sehen." #. type: IP #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "(3)" msgstr "(3)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The length of the range of user IDs that is mapped between the two user " "namespaces." msgstr "" "Die Länge des Bereichs von Benutzerkennungen, die zwischen den zwei " "Benutzernamensräumen abgebildet wird." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "System calls that return user IDs (group IDs)\\[em]for example, " "B(2), B(2), and the credential fields in the structure " "returned by B(2)\\[em]return the user ID (group ID) mapped into the " "caller's user namespace." msgstr "" "Systemaufrufe, die Benutzerkennungen (Gruppenkennungen) " "zurückliefern\\[en]beispielsweise B(2), B(2) und die " "Berechtigungsdatenfelder in der durch B(2) zurückgelieferten " "Struktur\\[en]liefern die Benutzerkennung (Gruppenkennung) abgebildet auf " "den Benutzernamensraum des Aufrufenden zurück." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a process accesses a file, its user and group IDs are mapped into the " "initial user namespace for the purpose of permission checking and assigning " "IDs when creating a file. When a process retrieves file user and group IDs " "via B(2), the IDs are mapped in the opposite direction, to produce " "values relative to the process user and group ID mappings." msgstr "" "Wenn ein Prozess auf eine Datei zugreift, werden seine Benutzer- und " "Gruppenkennungen zum Zwecke der Zugriffsprüfung und der Zuweisungen von " "Kennungen beim Erstellen von Dateien auf die des anfänglichen " "Benutzernamensraumens abgebildet. Wenn ein Prozess die Dateibenutzer- und -" "gruppenkennungen über B(2) ermittelt, werden die Kennungen in die " "andere Richtung abgebildet, um Werte relativ zu den Prozessbenutzer- und -" "gruppenkennungsabildungen zu erstellen." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The initial user namespace has no parent namespace, but, for consistency, " "the kernel provides dummy user and group ID mapping files for this " "namespace. Looking at the I file (I is the same) from a " "shell in the initial namespace shows:" msgstr "" "Der anfängliche Benutzernamensraum hat keinen Vorgängernamensraum. Aus " "Konsistenzgründen stellt der Kernel Pseudo-Benutzer- und -" "Gruppenkennungsabbildungsdateien für diesen Namensraum bereit. Wird vom " "anfänglichen Namensraum aus auf die Datei I (I ist " "identisch) geschaut, ergibt sich:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "$ B\n" " 0 0 4294967295\n" msgstr "" "$ B\n" " 0 0 4294967295\n" # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This mapping tells us that the range starting at user ID 0 in this namespace " "maps to a range starting at 0 in the (nonexistent) parent namespace, and the " "length of the range is the largest 32-bit unsigned integer. This leaves " "4294967295 (the 32-bit signed -1 value) unmapped. This is deliberate: " "I<(uid_t)\\~-1> is used in several interfaces (e.g., B(2)) as a " "way to specify \"no user ID\". Leaving I<(uid_t)\\~-1> unmapped and " "unusable guarantees that there will be no confusion when using these " "interfaces." msgstr "" "Diese Abbildung teilt uns mit, dass der Bereich bei der Benutzerkennung 0 in " "diesem Namensraum auf den Bereich beginnend bei 0 in dem (nicht " "existierenden) Vorgängernamensraum abgebildet ist und die Länge des Bereichs " "die größte vorzeichenlose 32-bit-Ganzzahl ist. Dies lässt 4294967295 (der " "vorzeichenbehaftete 32-bit-Wert) nicht abgebildet. Dies ist absichtlich: " "I<(uid_t)\\~-1> wird von einer Reihe von Schnittstellen (z.B. " "B(2)) dazu verwandt, »keine Benutzerkennung« festzulegen. Da " "I<(uid_t)\\~-1> nicht abgebildet und unbenutzbar ist, wird sichergestellt, " "dass es keine Verwirrung bei der Verwendung dieser Schnittstellen gibt." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Defining user and group ID mappings: writing to uid_map and gid_map" msgstr "Definieren von Benutzer- und Gruppenkennungsabbildungen; Schreiben in uid_map und gid_map" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "After the creation of a new user namespace, the I file of I of " "the processes in the namespace may be written to I to define the " "mapping of user IDs in the new user namespace. An attempt to write more " "than once to a I file in a user namespace fails with the error " "B. Similar rules apply for I files." msgstr "" "Nach der Erstellung eines neuen Benutzernamensraumes kann die Datei " "I von I der Prozesse in dem Namensraum I " "geschrieben werden, um die Abbildung der Benutzerkennungen in dem neuen " "Benutzernamensraum zu definieren. Jeder Versuch, mehr als einmal in eine " "Datei I in einem Benutzernamensraum zu schreiben, schlägt mit dem " "Fehler B fehl. Ähnliche Regeln gelten für Dateien I." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The lines written to I (I) must conform to the following " "validity rules:" msgstr "" "Die in I (I) geschriebenen Zeilen müssen die folgenden " "Gültigkeitsregeln erfüllen:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The three fields must be valid numbers, and the last field must be greater " "than 0." msgstr "" "Die drei Felder müssen gültige Zahlen sein und das letzte Feld muss größer " "als 0 sein." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Lines are terminated by newline characters." msgstr "Zeilen werden durch einen Zeilenumbruch beendet." #. 5*12-byte records could fit in a 64B cache line #. commit 6397fac4915ab3002dc15aae751455da1a852f25 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "There is a limit on the number of lines in the file. In Linux 4.14 and " "earlier, this limit was (arbitrarily) set at 5 lines. Since Linux 4.15, " "the limit is 340 lines. In addition, the number of bytes written to the " "file must be less than the system page size, and the write must be performed " "at the start of the file (i.e., B(2) and B(2) can't be used " "to write to nonzero offsets in the file)." msgstr "" "Es gibt eine Beschränkung bezüglich der Anzahl der Zeilen in der Datei. In " "Linux 4.14 und älter war diese Beschränkung (willkürlich) auf 5 Zeilen " "gesetzt. Seit Linux 4.15 ist diese Beschränkung 340 Zeilen. Zusätzlich muss " "die Anzahl an in diese Datei geschriebenen Bytes kleiner als die Seitengröße " "des Systems sein und das Schreiben muss am Anfang der Datei beginnen (d.h. " "B(2) und B(2) können nicht zum Schreiben an einen von Null " "verschiedenen Versatz in der Datei verwandt werden)." #. commit 0bd14b4fd72afd5df41e9fd59f356740f22fceba #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The range of user IDs (group IDs) specified in each line cannot overlap " "with the ranges in any other lines. In the initial implementation (Linux " "3.8), this requirement was satisfied by a simplistic implementation that " "imposed the further requirement that the values in both field 1 and field 2 " "of successive lines must be in ascending numerical order, which prevented " "some otherwise valid maps from being created. Linux 3.9 and later fix this " "limitation, allowing any valid set of nonoverlapping maps." msgstr "" "Die Bereiche der Benutzerkennungen (Gruppenkennungen), die in den einzelnen " "Zeilen angegeben sind, dürfen sich nicht gegenseitig überlappen. In der " "anfänglichen Implementierung (Linux 3.8) wurde diese Anforderung durch eine " "simplistische Implementierung erfüllt, die weitere Einschränkungen " "auferlegte, dass die Werte sowohl in Feld 1 als auch Feld 2 von " "aufeinanderfolgenden Zeilen in aufsteigender numerischer Reihenfolge sein " "mussten, womit andernfalls gültige Abbildungen nicht erstellt werden " "konnten. Linux 3.9 und neuer korrigierte diese Beschränkung und erlaubte " "jede Kombination von nichtüberlappenden Abbildungen." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "At least one line must be written to the file." msgstr "Mindestens eine Zeile muss in die Datei geschrieben werden." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Writes that violate the above rules fail with the error B." msgstr "" "Schreibvorgänge, die die obigen Regeln verletzen, schlagen mit dem Fehler " "B fehl." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In order for a process to write to the IpidI (IpidI) file, all of the following permission requirements must be " "met:" msgstr "" "Damit ein Prozess in die Datei IPIDI (IPIDI) schreiben kann, müssen alle der folgenden " "Berechtigungsanforderungen erfüllt sein:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The writing process must have the B (B) capability " "in the user namespace of the process I." msgstr "" "Der schreibende Prozess muss über die Capability B " "(B) des Benutzernamensraums des Prozeses I verfügen." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The writing process must either be in the user namespace of the process " "I or be in the parent user namespace of the process I." msgstr "" "Der schreibende Prozess muss entweder in dem Benutzernamensraum des " "Prozesses I oder in dem Vorgängernamensraum des Prozesses I sein." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The mapped user IDs (group IDs) must in turn have a mapping in the parent " "user namespace." msgstr "" "Die abgebildeten Benutzerkennungen (Gruppenkennungen) müssen wiederum eine " "Abbildung in dem Vorgänger-Benutzernamensraum haben." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If updating IpidI to create a mapping that maps UID 0 in " "the parent namespace, then one of the following must be true:" msgstr "" "Falls die Aktualisierung von IPIDI eine Abbildung " "erstellt, die die UID 0 in dem Vorgängernamensraum abbildet, dann muss eine " "der folgenden Bedingungen wahr sein:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "if writing process is in the parent user namespace, then it must have the " "B capability in that user namespace; or" msgstr "" "Falls der schreibende Prozess im Vorgänger-Benutzernamensraum liegt, dann " "muss er über die Capability B in diesem Benutzernamensraum " "verfügen; oder" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "if the writing process is in the child user namespace, then the process that " "created the user namespace must have had the B capability when " "the namespace was created." msgstr "" "falls der schreibende Prozess in dem nachfolgenden Benutzernamensraum liegt, " "dann muss der Prozess, der den Benutzernamensraum erstellte, über die " "Capability B verfügen, als der Benutzernamensraum erstellt " "wurde." #. commit db2e718a47984b9d71ed890eb2ea36ecf150de18 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "This rule has been in place since Linux 5.12. It eliminates an earlier " "security bug whereby a UID 0 process that lacks the B " "capability, which is needed to create a binary with namespaced file " "capabilities (as described in B(7)), could nevertheless create " "such a binary, by the following steps:" msgstr "" "Diese Regel gibt es seit Linux 5.12. Sie beseitigt einen älteren " "Sicherheitsfehler, durch den ein UID-0-Prozess ohne die Capability " "B (die zum Erstellen eines Programms mit Datei-Capabilitys im " "Namensraum benötigt wird, wie das in B(7) beschrieben ist), " "trotzdem ein solches Programm erstellen konnte, indem es Folgendes " "durchführte:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Create a new user namespace with the identity mapping (i.e., UID 0 in the " "new user namespace maps to UID 0 in the parent namespace), so that UID 0 in " "both namespaces is equivalent to the same root user ID." msgstr "" "Erstellung eines neuen Benutzernamensraums mit der Identitätsabbildung (d.h. " "UID 0 in dem neuen Benutzernamensraum wird auf UID 0 im Vorgängernamensraum " "abgebildet), so dass UID 0 in beiden Namensräumen äquivalent zu der gleichen " "Root-Benutzerkennung ist." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Since the child process has the B capability, it could create a " "binary with namespaced file capabilities that would then be effective in the " "parent user namespace (because the root user IDs are the same in the two " "namespaces)." msgstr "" "Da der Nachfolgerprozess über die Capability B verfügt, könnte " "er ein Programm mit den Datei-Capabilitys im Namensraum erstellen, die auch " "im Vorgängernamensraum wirksam wären (da die Root-Benutzerkennungen in " "beiden Namensräumen identisch sind)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "One of the following two cases applies:" msgstr "Einer der folgenden zwei Fälle trifft zu:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "I the writing process has the B (B) " "capability in the I user namespace." msgstr "" "I verfügt der schreibende Prozess über die Capability " "B (B) in dem Inamensraum." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "No further restrictions apply: the process can make mappings to arbitrary " "user IDs (group IDs) in the parent user namespace." msgstr "" "Es gelten keine weiteren Einschränkungen; der Prozess kann Abbildungen auf " "beliebige Benutzerkennungen (Gruppenkennungen) im Vorgängernamensraum " "durchführen." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "I otherwise all of the following restrictions apply:" msgstr "I es gelten alle der folgenden Beschränkungen:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The data written to I (I) must consist of a single line " "that maps the writing process's effective user ID (group ID) in the parent " "user namespace to a user ID (group ID) in the user namespace." msgstr "" "Die in I (I) geschriebenen Daten müssen aus einer " "einzelnen Zeile bestehen, die die effektive Benutzerkennung (Gruppenkennung) " "des schreibenden Prozesses in dem Vorgängernamensraum auf eine " "Benutzerkennung (Gruppenkennung) in den Benutzernamensraum abbildet." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The writing process must have the same effective user ID as the process that " "created the user namespace." msgstr "" "Der schreibende Prozess muss die gleiche effektive Benutzerkennung wie der " "Prozess haben, der den Benutzernamensraum erstellte." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In the case of I, use of the B(2) system call must " "first be denied by writing \\[dq]I\\[dq] to the IpidI file (see below) before writing to I." msgstr "" "Im Falle von I muss zuerst die Verwendung des Systemaufrufs " "B(2) verboten werden, indem »I« in die Datei IPIDI geschrieben wird (siehe unten), bevor in I geschrieben " "wird." # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "Writes that violate the above rules fail with the error B." msgstr "" "Schreibaktionen, die die obigen Regeln verletzen, werden mit B " "fehlschlagen." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Project ID mappings: projid_map" msgstr "Projektkennungsabbildung: projid_map" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Similarly to user and group ID mappings, it is possible to create project ID " "mappings for a user namespace. (Project IDs are used for disk quotas; see " "B(8) and B(2).)" msgstr "" "Ähnlich zu Benutzer- und Gruppenkennungsabbildungen ist es möglich, eine " "Projektkennungsabbildung für einen Benutzernamensraum zu erstellen. " "(Projektkennungen werden für Plattenkontingente verwandt, siehe " "B(8) und B(2).)" #. commit f76d207a66c3a53defea67e7d36c3eb1b7d6d61d #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Project ID mappings are defined by writing to the IpidI " "file (present since Linux 3.7)." msgstr "" "Projektkennungsabbildungen werden durch Schreiben in die Datei IPIDI definiert (vorhanden seit Linux 3.7)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The validity rules for writing to the IpidI file are as " "for writing to the I file; violation of these rules causes " "B(2) to fail with the error B." msgstr "" "Die Gültigkeitsregeln für das Schreiben in die Datei IPIDI sind wie beim Schreiben in die Datei I; Verletzung " "dieser Regeln führt beim B(2) zum Fehlschlag B." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The permission rules for writing to the IpidI file are " "as follows:" msgstr "" "Die Erlaubnisregeln für das Schreiben in die Datei IPIDI sind wie folgt:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The mapped project IDs must in turn have a mapping in the parent user " "namespace." msgstr "" "Die abgebildeten Projektkennungen müssen wiederum eine Abbildung im " "Vorgängernamensraum haben." # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Violation of these rules causes B(2) to fail with the error B." msgstr "" "Verletzung dieser Regeln führt dazu, dass B(2) mit B " "fehlschlägt." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Interaction with system calls that change process UIDs or GIDs" msgstr "Wechselwirkung mit Systemaufrufen, die Prozessbenutzerkennungen oder -gruppenkennungen ändern" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In a user namespace where the I file has not been written, the " "system calls that change user IDs will fail. Similarly, if the I " "file has not been written, the system calls that change group IDs will " "fail. After the I and I files have been written, only the " "mapped values may be used in system calls that change user and group IDs." msgstr "" "In einem Benutzernamensraum, in dem die Datei I noch nicht " "geschrieben wurde, werden die Systemaufrufe, die die Benutzerkennung ändern, " "fehlschlagen. Ähnlich werden die Systemaufrufe, die die Gruppenkennungen " "ändern, fehlschlagen, falls die Datei I noch nicht geschrieben " "wurde. Nachdem die Dateien I und I geschrieben wurden, " "können nur die abgebildeten Werte in Systemaufrufen verwandt werden, die die " "Benutzer- und Gruppenkennungen ändern." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "For user IDs, the relevant system calls include B(2), " "B(2), B(2), and B(2). For group IDs, the " "relevant system calls include B(2), B(2), B(2), " "B(2), and B(2)." msgstr "" "Für Benutzerkennungen sind die relevanten Systemaufrufe unter anderem " "B(2), B(2), B(2) und B(2). Für " "Gruppenkennungen sind die relevanten Systemaufrufe unter anderem " "B(2), B(2), B(2), B(2) und " "B(2)." # #. Things changed in Linux 3.19 #. commit 9cc46516ddf497ea16e8d7cb986ae03a0f6b92f8 #. commit 66d2f338ee4c449396b6f99f5e75cd18eb6df272 #. http://lwn.net/Articles/626665/ #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Writing \\[dq]I\\[dq] to the IpidI file before " "writing to IpidI will permanently disable B(2) " "in a user namespace and allow writing to IpidI without " "having the B capability in the parent user namespace." msgstr "" "Durch Schreiben von »I« in die Datei IPIDI vor dem " "Schreiben von IPIDI wird B(2) in einem " "Benutzernamensraum dauerhaft deaktiviert und erlaubt Schreiben von IPIDI, ohne über die Capability B im " "Vorgängernamensraum zu verfügen." #. type: SS #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "The IpidI file" msgstr "Die Datei IPIDI" # #. commit 9cc46516ddf497ea16e8d7cb986ae03a0f6b92f8 #. commit 66d2f338ee4c449396b6f99f5e75cd18eb6df272 #. http://lwn.net/Articles/626665/ #. http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-8989 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The IpidI file displays the string \\[dq]I\\[dq] " "if processes in the user namespace that contains the process I are " "permitted to employ the B(2) system call; it displays " "\\[dq]I\\[dq] if B(2) is not permitted in that user " "namespace. Note that regardless of the value in the IpidI file (and regardless of the process's capabilities), calls to " "B(2) are also not permitted if IpidI has not " "yet been set." msgstr "" "Die Datei IPIDI zeigt die Zeichenkette »I«, falls " "Prozesse in dem Benutzernamensraum, der den Prozess I enthält, die " "Erlaubnis haben, den Systemaufruf B(2) einzusetzen. Sie zeigt " "»I« an, falls B(2) in diesem Benutzernamensraum nicht " "erlaubt ist. Beachten Sie, dass Aufrufe von B(2) auch nicht " "erlaubt sind, falls IPIDI noch nicht gesetzt wurde, " "unabhängig von dem Wert der Datei IPIDI (und unabhängig " "von den Capabilitys des Prozesses)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A privileged process (one with the B capability in the " "namespace) may write either of the strings \\[dq]I\\[dq] or " "\\[dq]I\\[dq] to this file I writing a group ID mapping for " "this user namespace to the file IpidI. Writing the string " "\\[dq]I\\[dq] prevents any process in the user namespace from " "employing B(2)." msgstr "" "Ein privilegierter Prozess (einer mit der Capability B in dem " "Namensraum) darf eine der Zeichenketten »I« oder »I« in diese " "Datei schreiben, I eine Gruppenkennungsabbildung für diesen " "Benutzernamensraum in die Datei IPIDI geschrieben wird. " "Durch Schreiben der Zeichenkette »I« wird jedem Prozess in diesem " "Benutzernamensraum der Einsatz von B(2) verboten." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The essence of the restrictions described in the preceding paragraph is that " "it is permitted to write to IpidI only so long as " "calling B(2) is disallowed because IpidI has " "not been set. This ensures that a process cannot transition from a state " "where B(2) is allowed to a state where B(2) is " "denied; a process can transition only from B(2) being disallowed " "to B(2) being allowed." msgstr "" "Die Essenz der in den vorhergehenden Absätzen beschriebenen Beschränkungen " "ist, dass das Schreiben in IPIDI nur so lange erlaubt " "ist, wie B(2) nicht erlaubt ist, da IPIDI noch " "nicht gesetzt wurde. Damit wird sichergestellt, dass ein Prozess nicht von " "einem Zustand, bei dem B(2) erlaubt ist, zu einem Zustand, bei " "dem B(2) verboten ist, übergehen kann; ein Prozess kann nur von " "B(2) nicht erlaubt zu B(2) erlaubt übergehen." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The default value of this file in the initial user namespace is " "\\[dq]I\\[dq]." msgstr "" "Der Vorgabewert für diese Datei in dem anfänglichen Namensraum ist " "»I«." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Once IpidI has been written to (which has the effect of " "enabling B(2) in the user namespace), it is no longer possible " "to disallow B(2) by writing \\[dq]I\\[dq] to IpidI (the write fails with the error B)." msgstr "" "Sobald IPIDI geschrieben wurde (wodurch B(2) in " "dem Benutzernamensraum aktiviert wird), ist es nicht mehr möglich, " "B(2) durch Schreiben von »I« in IPIDI " "zu verbieten (das Schreiben schlägt mit B fehl)." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "A child user namespace inherits the IpidI setting from " "its parent." msgstr "" "Ein Nachfolgernamensraum erbt die Einstellungen IPIDI " "von seinem Vorgänger." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "If the I file has the value \\[dq]I\\[dq], then the " "B(2) system call can't subsequently be reenabled (by writing " "\\[dq]I\\[dq] to the file) in this user namespace. (Attempts to do " "so fail with the error B.) This restriction also propagates down to " "all child user namespaces of this user namespace." msgstr "" "Falls die Datei I den Wert »I« enthält, dann kann der " "Systemaufruf B(2) in diesem Namensraum nachfolgend nicht mehr " "aktiviert werden (durch Schreiben von »I« in die Datei). (Versuche, " "dies durchzuführen, schlagen mit B fehl.) Diese Beschränkung wird " "auch an alle Nachfolgerbenutzernamensräume dieses Benutzernamensraums " "weitergeleitet." # # # # #. /proc/PID/setgroups #. [allow == setgroups() is allowed, "deny" == setgroups() is disallowed] #. * Can write if have CAP_SYS_ADMIN in NS #. * Must write BEFORE writing to /proc/PID/gid_map #. setgroups() #. * Must already have written to gid_map #. * /proc/PID/setgroups must be "allow" #. /proc/PID/gid_map -- writing #. * Must already have written "deny" to /proc/PID/setgroups #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The IpidI file was added in Linux 3.19, but was " "backported to many earlier stable kernel series, because it addresses a " "security issue. The issue concerned files with permissions such as \"rwx---" "rwx\". Such files give fewer permissions to \"group\" than they do to " "\"other\". This means that dropping groups using B(2) might " "allow a process file access that it did not formerly have. Before the " "existence of user namespaces this was not a concern, since only a privileged " "process (one with the B capability) could call B(2). " "However, with the introduction of user namespaces, it became possible for an " "unprivileged process to create a new namespace in which the user had all " "privileges. This then allowed formerly unprivileged users to drop groups " "and thus gain file access that they did not previously have. The IpidI file was added to address this security issue, by denying " "any pathway for an unprivileged process to drop groups with B(2)." msgstr "" "Die Datei IPIDI wurde in Linux 3.19 hinzugefügt; " "allerdings wurde sie auch auf viele frühere stabile Kernel rückportiert, da " "sie ein Sicherheitsproblem adressiert. Das Problem betraf Dateien mit " "Berechtigungen wie »rwx---rwx«. Diese Dateien geben der »Gruppe« weniger " "Berechtigungen als sie »anderen« geben. Das bedeutet, dass die Abgabe von " "Gruppen mittels B(2) einem Prozess Dateizugriff erlauben könnte, " "den er vorher nicht hatte. Vor der Existenz von Benutzernamensräumen führte " "dies zu keine Sorgen, da nur ein privilegierter Prozess (einer mit der " "Capability B) B(2) aufrufen konnte. Mit der " "Einführung von Benutzernamensräumen wurde es für einen nicht privilegierten " "Prozess allerdings möglich, einen neuen Namensraum zu erstellen, in dem der " "Benutzer alle Privilegien hatte. Dies ermöglichte es dann vorher nicht " "privilegierten Benutzern Gruppen abzugeben und damit Dateizugriff zu " "erlangen, den sie vorher nicht hatten. Die Datei IPIDI " "wurde hinzugefügt, um dieses Sicherheitsproblem zu adressieren, indem jeder " "Pfad für einen nicht privilegierten Prozess, Gruppen mit B(2) " "abzugeben, verboten wurde." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Unmapped user and group IDs" msgstr "Nicht abgebildete Benutzer- und Gruppenkennungen" #. from_kuid_munged(), from_kgid_munged() #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "There are various places where an unmapped user ID (group ID) may be " "exposed to user space. For example, the first process in a new user " "namespace may call B(2) before a user ID mapping has been defined " "for the namespace. In most such cases, an unmapped user ID is converted to " "the overflow user ID (group ID); the default value for the overflow user ID " "(group ID) is 65534. See the descriptions of I and I in B(5)." msgstr "" "Es gibt verschiedene Stellen, an denen nicht abgebildete Benutzerkennungen " "(Gruppenkennungen) im Anwendungsraum offengelegt werden können. " "Beispielsweise könnte der erste Prozess in einem neuen Benutzernamensraum " "B(2) aufrufen, bevor eine Benutzerkennungsabbildung für den " "Namensraum definiert wurde. In den meisten solcher Fälle wird eine nicht " "abgebildete Benutzerkennung in die Überlauf-Benutzerkennung (Gruppenkennung) " "konvertiert; der Vorgabewert für die Überlauf-Benutzerkennung " "(Gruppenkennung) ist 65534. Siehe die Beschreibung von I und I in B(5)." #. also SO_PEERCRED #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The cases where unmapped IDs are mapped in this fashion include system calls " "that return user IDs (B(2), B(2), and similar), credentials " "passed over a UNIX domain socket, credentials returned by B(2), " "B(2), and the System V IPC \"ctl\" B operations, " "credentials exposed by IpidI and the files in I, credentials returned via the I field in the I " "received with a signal (see B(2)), credentials written to the " "process accounting file (see B(5)), and credentials returned with " "POSIX message queue notifications (see B(3))." msgstr "" "Zu den Fällen, in denen nicht abgebildete Benutzerkennungen auf diese Art " "abgebildet werden, gehören Systemaufrufe, die Benutzerkennungen " "zurückliefern (B(2), B(2) und ähnliche), " "Benutzerberechtigungen, die über ein UNIX-Domain-Socket übergeben werden, " "Benutzerberechtigungen, die von B(2), B(2) und den System-V-" "IPC-»ctl«-B-Aktionen zurückgeliefert werden, " "Benutzerberechtigungen, die mittels IPIDI und den Dateien " "in I offengelegt werden, Benutzerberechtigungen, die über " "das Feld I in dem mit einem Signal I empfangenen Feld " "zurückgeliefert werden (siehe B(2)), Benutzerberechtigungen, die " "in die Prozessbuchhaltungsdatei geschrieben werden (siehe B(5)) und " "Benutzerberechtigungen, die mit POSIX-Nachrichtenwarteschlangen-" "Benachrichtigungen zurückgeliefert werden (siehe B(3))." # #. from_kuid(), from_kgid() #. Also F_GETOWNER_UIDS is an exception #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "There is one notable case where unmapped user and group IDs are I " "converted to the corresponding overflow ID value. When viewing a I " "or I file in which there is no mapping for the second field, that " "field is displayed as 4294967295 (-1 as an unsigned integer)." msgstr "" "Es gibt einen erwähnenswerten Fall, bei dem nicht abgebildete Benutzer- und " "Gruppenkennungen I in die entsprechende Überlaufkennung konvertiert " "werden. Beim Betrachten einer Datei I oder I, bei der es " "keine Abbildung für das zweite Feld gibt, wird das Feld als 4294967295 (-1 " "als eine vorzeichenlose Ganzzahl) dargestellt." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Accessing files" msgstr "Dateizugriff" # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "In order to determine permissions when an unprivileged process accesses a " "file, the process credentials (UID, GID) and the file credentials are in " "effect mapped back to what they would be in the initial user namespace and " "then compared to determine the permissions that the process has on the " "file. The same is also true of other objects that employ the credentials " "plus permissions mask accessibility model, such as System V IPC objects." msgstr "" "Um Berechtigungen zu bestimmen, wenn ein nicht privilegierter Prozess auf " "eine Datei zugreift, werden die Prozessberechtigungen (UID, GID) und die " "Dateiberechtigungen letztendlich auf die zurückabgebildet, die sie im " "anfänglichen Benutzernamensraum wären und dann verglichen, um die " "Berechtigungen zu bestimmen, die der Prozess auf die Datei hat. Das gleiche " "trifft auch für andere Objekte zu, die das Zugriffsmodell mit " "Benutzerberechtigungen sowie Berechtigungsmasken einsetzen, wie System-V-IPC-" "Objekte." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Operation of file-related capabilities" msgstr "Aktionen mit Datei-bezogenen Capabilitys" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Certain capabilities allow a process to bypass various kernel-enforced " "restrictions when performing operations on files owned by other users or " "groups. These capabilities are: B, B, " "B, B, and B." msgstr "" "Bestimmte Capabilitys erlauben es einem Prozess, verschiedene, durch den " "Kernel durchgesetzte Beschränkungen zu umgehen, wenn Aktionen auf Dateien " "durchgeführt werden, die anderen Benutzern oder Gruppen gehören. Diese " "Capabilitys sind B, B, B, " "B und B." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Within a user namespace, these capabilities allow a process to bypass the " "rules if the process has the relevant capability over the file, meaning that:" msgstr "" "Innerhalb eines Benutzernamensraumes erlauben diese Capabilitys einem " "Prozess, die Regeln zu umgehen, falls der Prozess über die relevante " "Capability über die Datei verfügt. Das bedeutet:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "the process has the relevant effective capability in its user namespace; and" msgstr "" "Der Prozess hat die relevante effektive Capability in seinem eigenen " "Benutzernamensraum; und" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "the file's user ID and group ID both have valid mappings in the user " "namespace." msgstr "" "die Benutzer- und Gruppenkennung der Datei habe beide gültige Abbildungen in " "dem Benutzernamensraum." # #. These are the checks performed by the kernel function #. inode_owner_or_capable(). There is one exception to the exception: #. overriding the directory sticky permission bit requires that #. the file has a valid mapping for both its UID and GID. #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The B capability is treated somewhat exceptionally: it allows a " "process to bypass the corresponding rules so long as at least the file's " "user ID has a mapping in the user namespace (i.e., the file's group ID does " "not need to have a valid mapping)." msgstr "" "Die Capability B wird etwas besonders behandelt: sie erlaubt " "einem Prozess, die entsprechenden Regeln zu umgehen, solange zumindest die " "Benutzerkennung der Datei über eine Abbildung in dem Benutzernamensraum " "verfügt (d.h. die Gruppenkennung der Datei benötigt keine gültige Abbildung)." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Set-user-ID and set-group-ID programs" msgstr "Set-user-ID- und set-group-ID-Programme" # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a process inside a user namespace executes a set-user-ID (set-group-ID) " "program, the process's effective user (group) ID inside the namespace is " "changed to whatever value is mapped for the user (group) ID of the file. " "However, if either the user I the group ID of the file has no mapping " "inside the namespace, the set-user-ID (set-group-ID) bit is silently " "ignored: the new program is executed, but the process's effective user " "(group) ID is left unchanged. (This mirrors the semantics of executing a " "set-user-ID or set-group-ID program that resides on a filesystem that was " "mounted with the B flag, as described in B(2).)" msgstr "" "Wenn ein Prozess innerhalb eines Benutzernamensraums ein set-user-ID- (set-" "group-ID)-Programm ausführt, wird die effektive Benutzer- (Gruppen-)Kennung " "des Prozesses innerhalb des Namensraums auf denjenigen Wert geändert, der " "für die Benutzer- (Gruppen)kennung der Datei abgebildet ist. Falls " "allerdings entweder die Benutzer- I die Gruppenkennung der Datei über " "keine Abbildung innerhalb des Namensraums verfügt, wird das set-user-ID- " "(set-group-ID-)Bit ohne Rückmeldung ignoriert: das neue Programm wird " "ausgeführt, aber die effektive Benutzer- (Gruppen-)Kennung des Prozesses " "bleibt unverändert. (Dies spiegelt die Semantik bei der Ausführung eines set-" "user-ID- oder set-group-ID-Programmes wider, das sich auf einem Dateisystem " "befindet, das mit dem Schalter B eingehängt wurde, wie dies in " "B(2) beschrieben ist.)" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Miscellaneous" msgstr "Verschiedenes" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "When a process's user and group IDs are passed over a UNIX domain socket to " "a process in a different user namespace (see the description of " "B in B(7)), they are translated into the " "corresponding values as per the receiving process's user and group ID " "mappings." msgstr "" "Wenn die Benutzer- und Gruppenkennungen eines Prozesses über ein UNIX-Domain-" "Socket an einen Prozess in einem anderen Benutzernamensraum übergeben werden " "(siehe die Beschreibung von B in B(7)), werden sie in " "die entsprechenden Werte der Benutzer- und Gruppenkennungsabbildungen des " "empfangenen Prozesses übersetzt." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "STANDARDS" msgstr "STANDARDS" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-leap-15-6 opensuse-tumbleweed msgid "Linux." msgstr "Linux." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "NOTES" msgstr "ANMERKUNGEN" # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Over the years, there have been a lot of features that have been added to " "the Linux kernel that have been made available only to privileged users " "because of their potential to confuse set-user-ID-root applications. In " "general, it becomes safe to allow the root user in a user namespace to use " "those features because it is impossible, while in a user namespace, to gain " "more privilege than the root user of a user namespace has." msgstr "" "Über die Jahre wurden eine Reihe von Funktionalitäten zu dem Linux-Kernel " "hinzugefügt, die nur privilegierten Benutzern verfügbar gemacht wurden, da " "sie möglicherweise set-user-ID-root-Anwendungen durcheinander bringen " "könnten. Im Allgemeinen wird es sicher, einem Root-Benutzer in einem " "Benutzernamensraum die Verwendung dieser Funktionalitäten zu erlauben, da es " "unmöglich ist, mehr Privilegien zu erlangen, als der Root-Benutzer innerhalb " "eines Benutzernamensraumes hat, während der Prozess im Benutzernamensraum " "ist." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Global root" msgstr "Globaler Root" # #. ============================================================ #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The term \"global root\" is sometimes used as a shorthand for user ID 0 in " "the initial user namespace." msgstr "" "Der Ausdruck »Globaler Root« wird manchmal als Abkürzung für die " "Benutzerkennung 0 im anfänglichen Benutzernamensraum verwandt." #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Availability" msgstr "Verfügbarkeit" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Use of user namespaces requires a kernel that is configured with the " "B option. User namespaces require support in a range of " "subsystems across the kernel. When an unsupported subsystem is configured " "into the kernel, it is not possible to configure user namespaces support." msgstr "" "Die Verwendung von Benutzernamensräumen benötigt einen Kernel, der mit der " "Option B konfiguriert ist. Benutzernamensräume benötigen die " "Unterstützung in einer ganzen Reihe von Subsystemen im Kernel. Wird ein " "nicht unterstütztes Subsystem in den Kernel konfiguriert, dann ist es nicht " "möglich, die Unterstützung von Benutzernamensräumen zu konfigurieren." #. commit d6970d4b726cea6d7a9bc4120814f95c09571fc3 #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "As at Linux 3.8, most relevant subsystems supported user namespaces, but a " "number of filesystems did not have the infrastructure needed to map user and " "group IDs between user namespaces. Linux 3.9 added the required " "infrastructure support for many of the remaining unsupported filesystems " "(Plan 9 (9P), Andrew File System (AFS), Ceph, CIFS, CODA, NFS, and OCFS2). " "Linux 3.12 added support for the last of the unsupported major filesystems, " "XFS." msgstr "" "Seit Linux 3.8 unterstützen die wichtigsten Subsysteme Benutzernamensräume, " "aber eine Reihe von Dateisystemen hatten noch nicht die benötigte " "Infrastruktur, um Benutzer- und Gruppenkennungen zwischen " "Benutzernamensräumen abzubilden. Linux 3.9 fügte die benötigte Infrastruktur " "für viele der verbliebenen, nicht unterstützten Dateisysteme (Plan 9 (9P), " "Andrew File System (AFS), Ceph, CIFS, CODA, NFS und OCFS2) hinzu. Linux 3.12 " "fügte Unterstützung für das letzte große verbliebene und nicht unterstützte " "Dateisystem hinzu: XFS." #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "EXAMPLES" msgstr "BEISPIELE" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The program below is designed to allow experimenting with user namespaces, " "as well as other types of namespaces. It creates namespaces as specified by " "command-line options and then executes a command inside those namespaces. " "The comments and I() function inside the program provide a full " "explanation of the program. The following shell session demonstrates its " "use." msgstr "" "Das nachfolgende Programm ist zum Experimentieren mit Benutzernamensräumen " "sowie anderen Arten von Namensräumen gedacht. Es erstellt einen Namensraum, " "wie er über die Befehlszeilenoptionen angegeben ist, und führt dann " "innerhalb dieser Namensräume einen Befehl aus. Die Kommentare und die " "Funktion I() innerhalb des Programmes bieten eine vollständige " "Erklärung des Programms. Die nachfolgende Shell-Sitzung zeigt seine " "Verwendung." #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "First, we look at the run-time environment:" msgstr "Zuerst schauen wir auf die Laufzeitumgebung:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "$ B # Need Linux 3.8 or later\n" "Linux 3.8.0\n" "$ B # Running as unprivileged user\n" "1000\n" "$ B\n" "1000\n" msgstr "" "$ B # Benötigt Linux 3.8 oder neuer\n" "Linux 3.8.0\n" "$ B # Ausführung als nicht privilegierter Benutzer\n" "1000\n" "$ B\n" "1000\n" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Now start a new shell in new user (I<-U>), mount (I<-m>), and PID (I<-p>) " "namespaces, with user ID (I<-M>) and group ID (I<-G>) 1000 mapped to 0 " "inside the user namespace:" msgstr "" "Jetzt wird eine neue Shell in neuen Benutzer- (I<-U>), Einhänge- (I<-m>) und " "PID- (I<-p>) Namensräumen gestartet, wobei innerhalb des Benutzernamensraums " "die Benutzerkennung (I<-M>) und Gruppenkennung (I<-G>) 1000 auf 0 abgebildet " "wird:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "$ B<./userns_child_exec -p -m -U -M \\[aq]0 1000 1\\[aq] -G \\[aq]0 1000 1\\[aq] bash>\n" msgstr "$ B<./userns_child_exec -p -m -U -M \\[aq]0 1000 1\\[aq] -G \\[aq]0 1000 1\\[aq] bash>\n" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The shell has PID 1, because it is the first process in the new PID " "namespace:" msgstr "" "Diese Shell hat PID 1, da sie der erste Prozess in dem neuen PID-Namensraum " "ist:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "bash$ B\n" "1\n" msgstr "" "bash$ B\n" "1\n" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Mounting a new I filesystem and listing all of the processes visible " "in the new PID namespace shows that the shell can't see any processes " "outside the PID namespace:" msgstr "" "Wird ein neues Dateisystem I eingehängt und alle in dem neuen PID-" "Namensraum sichtbaren Prozesse aufgelistet, kann gesehen werden, dass die " "Shell keinerlei Prozesse außerhalb des PID-Namensraumes sehen kann:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "bash$ B\n" "bash$ B\n" " PID TTY STAT TIME COMMAND\n" " 1 pts/3 S 0:00 bash\n" " 22 pts/3 R+ 0:00 ps ax\n" msgstr "" "bash$ B\n" "bash$ B\n" " PID TTY STAT TIME COMMAND\n" " 1 pts/3 S 0:00 bash\n" " 22 pts/3 R+ 0:00 ps ax\n" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "Inside the user namespace, the shell has user and group ID 0, and a full set " "of permitted and effective capabilities:" msgstr "" "Innerhalb des Benutzernamensraumes hat die Shell die Benutzer- und " "Gruppenkennung 0 und eine vollständige Menge an erlaubten und effektiven " "Capabilitys:" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "" "bash$ B\n" "Uid:\t0\t0\t0\t0\n" "Gid:\t0\t0\t0\t0\n" "bash$ B\n" "CapInh:\t0000000000000000\n" "CapPrm:\t0000001fffffffff\n" "CapEff:\t0000001fffffffff\n" msgstr "" "bash$ B\n" "Uid:\t0\t0\t0\t0\n" "Gid:\t0\t0\t0\t0\n" "bash$ B\n" "CapInh:\t0000000000000000\n" "CapPrm:\t0000001fffffffff\n" "CapEff:\t0000001fffffffff\n" #. type: SS #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "Program source" msgstr "Programmquelltext" #. type: Plain text #: archlinux debian-unstable fedora-40 fedora-rawhide mageia-cauldron #: opensuse-tumbleweed #, no-wrap msgid "" "/* userns_child_exec.c\n" "\\&\n" " Licensed under GNU General Public License v2 or later\n" "\\&\n" " Create a child process that executes a shell command in new\n" " namespace(s); allow UID and GID mappings to be specified when\n" " creating a user namespace.\n" "*/\n" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Esched.hE\n" "#include Eunistd.hE\n" "#include Estdint.hE\n" "#include Estdlib.hE\n" "#include Esys/wait.hE\n" "#include Esignal.hE\n" "#include Efcntl.hE\n" "#include Estdio.hE\n" "#include Estring.hE\n" "#include Elimits.hE\n" "#include Eerrno.hE\n" "\\&\n" "struct child_args {\n" " char **argv; /* Command to be executed by child, with args */\n" " int pipe_fd[2]; /* Pipe used to synchronize parent and child */\n" "};\n" "\\&\n" "static int verbose;\n" "\\&\n" "static void\n" "usage(char *pname)\n" "{\n" " fprintf(stderr, \"Usage: %s [options] cmd [arg...]\\en\\en\", pname);\n" " fprintf(stderr, \"Create a child process that executes a shell \"\n" " \"command in a new user namespace,\\en\"\n" " \"and possibly also other new namespace(s).\\en\\en\");\n" " fprintf(stderr, \"Options can be:\\en\\en\");\n" "#define fpe(str) fprintf(stderr, \" %s\", str);\n" " fpe(\"-i New IPC namespace\\en\");\n" " fpe(\"-m New mount namespace\\en\");\n" " fpe(\"-n New network namespace\\en\");\n" " fpe(\"-p New PID namespace\\en\");\n" " fpe(\"-u New UTS namespace\\en\");\n" " fpe(\"-U New user namespace\\en\");\n" " fpe(\"-M uid_map Specify UID map for user namespace\\en\");\n" " fpe(\"-G gid_map Specify GID map for user namespace\\en\");\n" " fpe(\"-z Map user\\[aq]s UID and GID to 0 in user namespace\\en\");\n" " fpe(\" (equivalent to: -M \\[aq]0 EuidE 1\\[aq] -G \\[aq]0 EgidE 1\\[aq])\\en\");\n" " fpe(\"-v Display verbose messages\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"If -z, -M, or -G is specified, -U is required.\\en\");\n" " fpe(\"It is not permitted to specify both -z and either -M or -G.\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"Map strings for -M and -G consist of records of the form:\\en\");\n" " fpe(\"\\en\");\n" " fpe(\" ID-inside-ns ID-outside-ns len\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"A map string can contain multiple records, separated\"\n" " \" by commas;\\en\");\n" " fpe(\"the commas are replaced by newlines before writing\"\n" " \" to map files.\\en\");\n" "\\&\n" " exit(EXIT_FAILURE);\n" "}\n" "\\&\n" "/* Update the mapping file \\[aq]map_file\\[aq], with the value provided in\n" " \\[aq]mapping\\[aq], a string that defines a UID or GID mapping. A UID or\n" " GID mapping consists of one or more newline-delimited records\n" " of the form:\n" "\\&\n" " ID_inside-ns ID-outside-ns length\n" "\\&\n" " Requiring the user to supply a string that contains newlines is\n" " of course inconvenient for command-line use. Thus, we permit the\n" " use of commas to delimit records in this string, and replace them\n" " with newlines before writing the string to the file. */\n" "\\&\n" "static void\n" "update_map(char *mapping, char *map_file)\n" "{\n" " int fd;\n" " size_t map_len; /* Length of \\[aq]mapping\\[aq] */\n" "\\&\n" " /* Replace commas in mapping string with newlines. */\n" "\\&\n" " map_len = strlen(mapping);\n" " for (size_t j = 0; j E map_len; j++)\n" " if (mapping[j] == \\[aq],\\[aq])\n" " mapping[j] = \\[aq]\\en\\[aq];\n" "\\&\n" " fd = open(map_file, O_RDWR);\n" " if (fd == -1) {\n" " fprintf(stderr, \"ERROR: open %s: %s\\en\", map_file,\n" " strerror(errno));\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " if (write(fd, mapping, map_len) != map_len) {\n" " fprintf(stderr, \"ERROR: write %s: %s\\en\", map_file,\n" " strerror(errno));\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " close(fd);\n" "}\n" "\\&\n" "/* Linux 3.19 made a change in the handling of setgroups(2) and\n" " the \\[aq]gid_map\\[aq] file to address a security issue. The issue\n" " allowed *unprivileged* users to employ user namespaces in\n" " order to drop groups. The upshot of the 3.19 changes is that\n" " in order to update the \\[aq]gid_maps\\[aq] file, use of the setgroups()\n" " system call in this user namespace must first be disabled by\n" " writing \"deny\" to one of the /proc/PID/setgroups files for\n" " this namespace. That is the purpose of the following function. */\n" "\\&\n" "static void\n" "proc_setgroups_write(pid_t child_pid, char *str)\n" "{\n" " char setgroups_path[PATH_MAX];\n" " int fd;\n" "\\&\n" " snprintf(setgroups_path, PATH_MAX, \"/proc/%jd/setgroups\",\n" " (intmax_t) child_pid);\n" "\\&\n" " fd = open(setgroups_path, O_RDWR);\n" " if (fd == -1) {\n" "\\&\n" " /* We may be on a system that doesn\\[aq]t support\n" " /proc/PID/setgroups. In that case, the file won\\[aq]t exist,\n" " and the system won\\[aq]t impose the restrictions that Linux 3.19\n" " added. That\\[aq]s fine: we don\\[aq]t need to do anything in order\n" " to permit \\[aq]gid_map\\[aq] to be updated.\n" "\\&\n" " However, if the error from open() was something other than\n" " the ENOENT error that is expected for that case, let the\n" " user know. */\n" "\\&\n" " if (errno != ENOENT)\n" " fprintf(stderr, \"ERROR: open %s: %s\\en\", setgroups_path,\n" " strerror(errno));\n" " return;\n" " }\n" "\\&\n" " if (write(fd, str, strlen(str)) == -1)\n" " fprintf(stderr, \"ERROR: write %s: %s\\en\", setgroups_path,\n" " strerror(errno));\n" "\\&\n" " close(fd);\n" "}\n" "\\&\n" "static int /* Start function for cloned child */\n" "childFunc(void *arg)\n" "{\n" " struct child_args *args = arg;\n" " char ch;\n" "\\&\n" " /* Wait until the parent has updated the UID and GID mappings.\n" " See the comment in main(). We wait for end of file on a\n" " pipe that will be closed by the parent process once it has\n" " updated the mappings. */\n" "\\&\n" " close(args-Epipe_fd[1]); /* Close our descriptor for the write\n" " end of the pipe so that we see EOF\n" " when parent closes its descriptor. */\n" " if (read(args-Epipe_fd[0], &ch, 1) != 0) {\n" " fprintf(stderr,\n" " \"Failure in child: read from pipe returned != 0\\en\");\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " close(args-Epipe_fd[0]);\n" "\\&\n" " /* Execute a shell command. */\n" "\\&\n" " printf(\"About to exec %s\\en\", args-Eargv[0]);\n" " execvp(args-Eargv[0], args-Eargv);\n" " err(EXIT_FAILURE, \"execvp\");\n" "}\n" "\\&\n" "#define STACK_SIZE (1024 * 1024)\n" "\\&\n" "static char child_stack[STACK_SIZE]; /* Space for child\\[aq]s stack */\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " int flags, opt, map_zero;\n" " pid_t child_pid;\n" " struct child_args args;\n" " char *uid_map, *gid_map;\n" " const int MAP_BUF_SIZE = 100;\n" " char map_buf[MAP_BUF_SIZE];\n" " char map_path[PATH_MAX];\n" "\\&\n" " /* Parse command-line options. The initial \\[aq]+\\[aq] character in\n" " the final getopt() argument prevents GNU-style permutation\n" " of command-line options. That\\[aq]s useful, since sometimes\n" " the \\[aq]command\\[aq] to be executed by this program itself\n" " has command-line options. We don\\[aq]t want getopt() to treat\n" " those as options to this program. */\n" "\\&\n" " flags = 0;\n" " verbose = 0;\n" " gid_map = NULL;\n" " uid_map = NULL;\n" " map_zero = 0;\n" " while ((opt = getopt(argc, argv, \"+imnpuUM:G:zv\")) != -1) {\n" " switch (opt) {\n" " case \\[aq]i\\[aq]: flags |= CLONE_NEWIPC; break;\n" " case \\[aq]m\\[aq]: flags |= CLONE_NEWNS; break;\n" " case \\[aq]n\\[aq]: flags |= CLONE_NEWNET; break;\n" " case \\[aq]p\\[aq]: flags |= CLONE_NEWPID; break;\n" " case \\[aq]u\\[aq]: flags |= CLONE_NEWUTS; break;\n" " case \\[aq]v\\[aq]: verbose = 1; break;\n" " case \\[aq]z\\[aq]: map_zero = 1; break;\n" " case \\[aq]M\\[aq]: uid_map = optarg; break;\n" " case \\[aq]G\\[aq]: gid_map = optarg; break;\n" " case \\[aq]U\\[aq]: flags |= CLONE_NEWUSER; break;\n" " default: usage(argv[0]);\n" " }\n" " }\n" "\\&\n" " /* -M or -G without -U is nonsensical */\n" "\\&\n" " if (((uid_map != NULL || gid_map != NULL || map_zero) &&\n" " !(flags & CLONE_NEWUSER)) ||\n" " (map_zero && (uid_map != NULL || gid_map != NULL)))\n" " usage(argv[0]);\n" "\\&\n" " args.argv = &argv[optind];\n" "\\&\n" " /* We use a pipe to synchronize the parent and child, in order to\n" " ensure that the parent sets the UID and GID maps before the child\n" " calls execve(). This ensures that the child maintains its\n" " capabilities during the execve() in the common case where we\n" " want to map the child\\[aq]s effective user ID to 0 in the new user\n" " namespace. Without this synchronization, the child would lose\n" " its capabilities if it performed an execve() with nonzero\n" " user IDs (see the capabilities(7) man page for details of the\n" " transformation of a process\\[aq]s capabilities during execve()). */\n" "\\&\n" " if (pipe(args.pipe_fd) == -1)\n" " err(EXIT_FAILURE, \"pipe\");\n" "\\&\n" " /* Create the child in new namespace(s). */\n" "\\&\n" " child_pid = clone(childFunc, child_stack + STACK_SIZE,\n" " flags | SIGCHLD, &args);\n" " if (child_pid == -1)\n" " err(EXIT_FAILURE, \"clone\");\n" "\\&\n" " /* Parent falls through to here. */\n" "\\&\n" " if (verbose)\n" " printf(\"%s: PID of child created by clone() is %jd\\en\",\n" " argv[0], (intmax_t) child_pid);\n" "\\&\n" " /* Update the UID and GID maps in the child. */\n" "\\&\n" " if (uid_map != NULL || map_zero) {\n" " snprintf(map_path, PATH_MAX, \"/proc/%jd/uid_map\",\n" " (intmax_t) child_pid);\n" " if (map_zero) {\n" " snprintf(map_buf, MAP_BUF_SIZE, \"0 %jd 1\",\n" " (intmax_t) getuid());\n" " uid_map = map_buf;\n" " }\n" " update_map(uid_map, map_path);\n" " }\n" "\\&\n" " if (gid_map != NULL || map_zero) {\n" " proc_setgroups_write(child_pid, \"deny\");\n" "\\&\n" " snprintf(map_path, PATH_MAX, \"/proc/%jd/gid_map\",\n" " (intmax_t) child_pid);\n" " if (map_zero) {\n" " snprintf(map_buf, MAP_BUF_SIZE, \"0 %ld 1\",\n" " (intmax_t) getgid());\n" " gid_map = map_buf;\n" " }\n" " update_map(gid_map, map_path);\n" " }\n" "\\&\n" " /* Close the write end of the pipe, to signal to the child that we\n" " have updated the UID and GID maps. */\n" "\\&\n" " close(args.pipe_fd[1]);\n" "\\&\n" " if (waitpid(child_pid, NULL, 0) == -1) /* Wait for child */\n" " err(EXIT_FAILURE, \"waitpid\");\n" "\\&\n" " if (verbose)\n" " printf(\"%s: terminating\\en\", argv[0]);\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" "/* userns_child_exec.c\n" "\\&\n" " Lizenziert unter der GNU General Public License v2 oder neuer\n" "\\&\n" " Erzeugt einen Kindprozess, der einen Shell-Befehl in einem oder mehreren\n" " neuen Namensräumen ausführt; erlaubt UID- und GID-Abbildungen anzugeben,\n" " wenn ein Benutzernamensraum erstellt wird\n" "*/\n" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Esched.hE\n" "#include Eunistd.hE\n" "#include Estdint.hE\n" "#include Estdlib.hE\n" "#include Esys/wait.hE\n" "#include Esignal.hE\n" "#include Efcntl.hE\n" "#include Estdio.hE\n" "#include Estring.hE\n" "#include Elimits.hE\n" "#include Eerrno.hE\n" "\\&\n" "struct child_args {\n" " char **argv; /* Vom Kind auszuführender Befehl, mit Argumenten */\n" " int pipe_fd[2]; /* Zur Sychronisation Eltern/Kind verwandte Pipe */\n" "};\n" "\\&\n" "static int verbose;\n" "\\&\n" "static void\n" "usage(char *pname)\n" "{\n" " fprintf(stderr, \"Aufruf: %s [Optionen] Bef [Arg…]en\\en\", pname);\n" " fprintf(stderr, \"Erstellt einen Kindprozess, der einen Shellbefehl \"\n" " \"in einem neuen Benutzernamensraum ausführt\\en\"\n" " \"und möglicherweise auch anderen neuen Namensräumen.\\en\\en\");\n" " fprintf(stderr, \"Optionen können sein:\\en\\en\");\n" "#define fpe(str) fprintf(stderr, \" %s\", str);\n" " fpe(\"-i Neuer IPC-Namensraum\\en\");\n" " fpe(\"-m Neuer Einhänge-Namensraum\\en\");\n" " fpe(\"-n Neuer Netzwerk-Namensraum\\en\");\n" " fpe(\"-p Neuer PID-Namensraum\\en\");\n" " fpe(\"-u Neuer UTS-Namensraum\\en\");\n" " fpe(\"-U Neuer Benutzernamensraum\\en\");\n" " fpe(\"-M uid_map Angabe einer UID-Abbildung für Benutzernamensraum\\en\");\n" " fpe(\"-G gid_map Angabe einer GID-Abbildung für Benutzernamensraum\\en\");\n" " fpe(\"-z Benutzer-UID und -GID auf 0 im Benutzernamensraum abbilden\\en\");\n" " fpe(\" (äquivalent zu: -M \\[aq]0 EuidE 1\\[aq] -G \\[aq]0 EgidE 1\\[aq])\\en\");\n" " fpe(\"-v Anzeige ausführlicher Meldungen\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"Falls -z, -M oder -G angegeben wird, ist -U verpflichtend.\\en\");\n" " fpe(\"Es ist nicht erlaubt, sowohl -z als auch entweder -M oder -G anzugeben.\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"Abbildungszeichenketten für -M und -G bestehen aus Datensätzen der folgenden Form:\\en\");\n" " fpe(\"\\en\");\n" " fpe(\" Namensrauminterne-Kennung Namensraumexterne-Kennung Länge\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"Eine Abbildungszeichenkette kann mehrere Datensätze enthalten,\"\n" " \" getrennt durch Kommata;\\en\");\n" " fpe(\"die Kommata werden vor dem Schreiben in die Abbildungsdateien durch\"\n" " \" Zeilenumbrüche ersetzt.\\en\");\n" "\\&\n" " exit(EXIT_FAILURE);\n" "}\n" "\\&\n" "/* Aktualisiert die Abbildungsdatei »map_file« mit dem in »mapping«\n" " bereitgestellten Wert, einer Zeichenkette, die eine UID- oder GID-\n" " Abbildung definiert. Eine UID- oder GID-Abbildung besteht aus einem oder\n" " mehreren, durch Zeilenumbrüche getrennten Datensätzen der folgenden Form:\n" "\\&\n" " Namensrauminterne-Kennung Namensraumexterne-Kennung Länge\n" "\\&\n" " Für die Befehlszeile zu verlangen, dass Zeichenketten mit Zeilenumbrüchen\n" " bereitgestellt werden, ist natürlich unbequem. Daher erlauben wir die\n" " Verwendung von Kommata zur Begrenzung von Datensätzen in dieser\n" " Zeichenkette und ersetzen sie vor dem Schreiben in die Datei durch\n" " Zeilenumbrüche. */\n" "\\&\n" "static void\n" "update_map(char *mapping, char *map_file)\n" "{\n" " int fd;\n" " size_t map_len; /* Länge der »mapping« */\n" "\\&\n" " /* Kommata durch Zeilenumbrüche in Abbildungszeichenkette ersetzen. */\n" "\\&\n" " map_len = strlen(mapping);\n" " for (size_t j = 0; j E map_len; j++)\n" " if (mapping[j] == \\[aq],\\[aq])\n" " mapping[j] = \\[aq]\\en\\[aq];\n" "\\&\n" " fd = open(map_file, O_RDWR);\n" " if (fd == -1) {\n" " fprintf(stderr, \"FEHLER: open %s: %s\\en\", map_file,\n" " strerror(errno));\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " if (write(fd, mapping, map_len) != map_len) {\n" " fprintf(stderr, \"FEHLER: write %s: %s\\en\", map_file,\n" " strerror(errno));\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " close(fd);\n" "}\n" "\\&\n" "/* Linux 3.19 änderte die Handhabung von setgroups(2) und die Datei\n" " »gid_map«, um ein Sicherheitsproblem zu adressieren. Das Problem erlaubte\n" " *nicht privilegierten* Benutzern einen Benutzernamensraum einzusetzen, um\n" " Gruppen abzugeben. Das Fazit der 3.19er Änderung ist, dass die Verwendung\n" " des Systemaufrufs setgroups() in diesem Benutzernamensraum zuerst durch\n" " Schreiben von »deny« in eine der Dateien /proc/PID/setgroups für diesen\n" " Namensraum erfolgen muss, damit die Datei »gid_maps« aktualisert wird.\n" " Das ist der Zweck der folgenden Funktion. */\n" "\\&\n" "static void\n" "proc_setgroups_write(pid_t child_pid, char *str)\n" "{\n" " char setgroups_path[PATH_MAX];\n" " int fd;\n" "\\&\n" " snprintf(setgroups_path, PATH_MAX, \"/proc/%jd/setgroups\",\n" " (intmax_t) child_pid);\n" "\\&\n" " fd = open(setgroups_path, O_RDWR);\n" " if (fd == -1) {\n" "\\&\n" " /* Vielleicht sind wir auf einem System, das /proc/PID/setgroups\n" " nicht unterstützt. Dann wird diese Datei nicht existieren und das\n" " System wird nicht die Beschränkungen erzwingen, die Linux 3.19\n" " hinzugefügt hat. Das ist OK, wir brauchen nichts zu machen, damit\n" " »gid_map« aktualisiert wird.\n" "\\&\n" " Falls allerdings der Fehler von open() sich von ENOENT\n" " unterscheidet (der in diesem Fall zu erwarten ist), informieren\n" " wir den Benutzer. */\n" "\\&\n" " if (errno != ENOENT)\n" " fprintf(stderr, \"FEHLER: open %s: %s\\en\", setgroups_path,\n" " strerror(errno));\n" " return;\n" " }\n" "\\&\n" " if (write(fd, str, strlen(str)) == -1)\n" " fprintf(stderr, \"FEHLER: write %s: %s\\en\", setgroups_path,\n" " strerror(errno));\n" "\\&\n" " close(fd);\n" "}\n" "\\&\n" "static int /* Funktion für geklontes Kind starten */\n" "childFunc(void *arg)\n" "{\n" " struct child_args *args = arg;\n" " char ch;\n" "\\&\n" " /* Warten, bis der Elternprozess seine UID- und GID-Abbildungen\n" " aktualisiert hat. Siehe den Kommentar in main(). Wir warten, bis\n" " auf einer Pipe das Dateiende kommt, die vom Elternprozess geschlossen\n" " wird, sobald er seine Abbildungen aktualisiert hat. */\n" "\\&\n" " close(args-Epipe_fd[1]); /* Unseren Deskriptor für das Ende des\n" " Schreibens schließen, so dass wir EOF\n" " sehen, wenn der Elternprozess seinen\n" " Deskriptor schließt. */\n" " if (read(args-Epipe_fd[0], &ch, 1) != 0) {\n" " fprintf(stderr,\n" " \"Fehler im Kind: Lesen von der Pipe lieferte != 0\\en\");\n" " exit(EXIT_FAILURE);\n" " }\n" "\\&\n" " close(args-Epipe_fd[0]);\n" "\\&\n" " /* Einen Shell-Befehl ausführen. */\n" "\\&\n" " printf(\"Gleich wird exec %s ausgeführt\\en\", args-Eargv[0]);\n" " execvp(args-Eargv[0], args-Eargv);\n" " err(EXIT_FAILURE, \"execvp\");\n" "}\n" "\\&\n" "#define STACK_SIZE (1024 * 1024)\n" "\\&\n" "static char child_stack[STACK_SIZE]; /* Platz für den Stack des Kindes */\n" "\\&\n" "int\n" "main(int argc, char *argv[])\n" "{\n" " int flags, opt, map_zero;\n" " pid_t child_pid;\n" " struct child_args args;\n" " char *uid_map, *gid_map;\n" " const int MAP_BUF_SIZE = 100;\n" " char map_buf[MAP_BUF_SIZE];\n" " char map_path[PATH_MAX];\n" "\\&\n" " /* Befehlszeilenoptionen auswerten. Das anfängliche »+«-Zeichen in dem\n" " abschließenden getopt()-Argument verhindert GNU-artige Vertauschungen\n" " der Befehlszeilenoptionen. Das ist nützlich, da manchmal der von\n" " diesem Programm selbst ausgeführte »Befehl« über Befehlszeilenoptionen\n" " verfügt. Wir wollen nicht, dass getopt() solche als Optionen für\n" " dieses Programm behandelt. */\n" "\\&\n" " flags = 0;\n" " verbose = 0;\n" " gid_map = NULL;\n" " uid_map = NULL;\n" " map_zero = 0;\n" " while ((opt = getopt(argc, argv, \"+imnpuUM:G:zv\")) != -1) {\n" " switch (opt) {\n" " case \\[aq]i\\[aq]: flags |= CLONE_NEWIPC; break;\n" " case \\[aq]m\\[aq]: flags |= CLONE_NEWNS; break;\n" " case \\[aq]n\\[aq]: flags |= CLONE_NEWNET; break;\n" " case \\[aq]p\\[aq]: flags |= CLONE_NEWPID; break;\n" " case \\[aq]u\\[aq]: flags |= CLONE_NEWUTS; break;\n" " case \\[aq]v\\[aq]: verbose = 1; break;\n" " case \\[aq]z\\[aq]: map_zero = 1; break;\n" " case \\[aq]M\\[aq]: uid_map = optarg; break;\n" " case \\[aq]G\\[aq]: gid_map = optarg; break;\n" " case \\[aq]U\\[aq]: flags |= CLONE_NEWUSER; break;\n" " default: usage(argv[0]);\n" " }\n" " }\n" "\\&\n" " /* -M oder -G ohne -U ist sinnlos */\n" "\\&\n" " if (((uid_map != NULL || gid_map != NULL || map_zero) &&\n" " !(flags & CLONE_NEWUSER)) ||\n" " (map_zero && (uid_map != NULL || gid_map != NULL)))\n" " usage(argv[0]);\n" "\\&\n" " args.argv = &argv[optind];\n" "\\&\n" " /* Wir verwenden eine Pipe, um den Eltern- und Kindprozess zu\n" " synchronisieren, damit sichergestellt wird, dass der Elternprozess\n" " die UID- und GID-Abbildungen einrichtet, bevor der Kindprozess\n" " execve() aufruft. Dies stellt sicher, dass das Kind seine Capabilitys\n" " während des execve() erhält, wenn der typische Fall vorliegt, dass\n" " wir möchten, dass die effektive Benutzerkennung des Kindprozesses auf\n" " 0 in dem neuen Benutzernamensraum abgebildet wird. Ohne diese\n" " Synchronisation würde der Kindprozess seine Capabilitys verlieren,\n" " falls es ein execve() mit einer von Null verschiedenen Benutzerkennung\n" " durchführen würde (siehe die Handbuchseite capabilities(7) für Details\n" " des Übergangs der Capabilitys eines Prozesses während execve()). */\n" "\\&\n" " if (pipe(args.pipe_fd) == -1)\n" " err(EXIT_FAILURE, \"pipe\");\n" "\\&\n" " /* Den Kindprozess in dem oder den neuen Namensraum/-räumen erstellen. */\n" "\\&\n" " child_pid = clone(childFunc, child_stack + STACK_SIZE,\n" " flags | SIGCHLD, &args);\n" " if (child_pid == -1)\n" " err(EXIT_FAILURE, \"clone\");\n" "\\&\n" " /* Elternprozess fällt bis hierher durch. */\n" "\\&\n" " if (verbose)\n" " printf(\"%s: PID des durch clone() erstellten Kindprozesses lautet %jd\\en\",\n" " argv[0], (intmax_t) child_pid);\n" "\\&\n" " /* Die UID- und GID-Abbildungen in dem Kindprozess aktualisieren. */\n" "\\&\n" " if (uid_map != NULL || map_zero) {\n" " snprintf(map_path, PATH_MAX, \"/proc/%jd/uid_map\",\n" " (intmax_t) child_pid);\n" " if (map_zero) {\n" " snprintf(map_buf, MAP_BUF_SIZE, \"0 %jd 1\",\n" " (intmax_t) getuid());\n" " uid_map = map_buf;\n" " }\n" " update_map(uid_map, map_path);\n" " }\n" "\\&\n" " if (gid_map != NULL || map_zero) {\n" " proc_setgroups_write(child_pid, \"deny\");\n" "\\&\n" " snprintf(map_path, PATH_MAX, \"/proc/%jd/gid_map\",\n" " (intmax_t) child_pid);\n" " if (map_zero) {\n" " snprintf(map_buf, MAP_BUF_SIZE, \"0 %ld 1\",\n" " (intmax_t) getgid());\n" " gid_map = map_buf;\n" " }\n" " update_map(gid_map, map_path);\n" " }\n" "\\&\n" " /* Das Schreibe-Ende der Pipe schließen, um dem Kindprozess zu\n" " signalisieren, dass wir die UID- und GID-Abbildungen aktualisiert\n" " haben. */\n" "\\&\n" " close(args.pipe_fd[1]);\n" "\\&\n" " if (waitpid(child_pid, NULL, 0) == -1) /* Warten auf Kindprozess */\n" " err(EXIT_FAILURE, \"waitpid\");\n" "\\&\n" " if (verbose)\n" " printf(\"%s: beende\\en\", argv[0]);\n" "\\&\n" " exit(EXIT_SUCCESS);\n" "}\n" #. type: SH #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed #, no-wrap msgid "SEE ALSO" msgstr "SIEHE AUCH" #. From the shadow package #. From the shadow package #. From the shadow package #. From the shadow package #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "B(1), B(1), B(2), B(2), B(2), " "B(2), B(5), B(5), B(5), B(7), " "B(7), B(7), B(7), " "B(7)" msgstr "" "B(1), B(1), B(2), B(2), B(2), " "B(2), B(5), B(5), B(5), B(7), " "B(7), B(7), B(7), " "B(7)" #. type: Plain text #: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide #: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed msgid "" "The kernel source file I." msgstr "" "Die Kernelquelldatei I." #. type: TH #: debian-bookworm #, no-wrap msgid "2023-02-05" msgstr "5. Februar 2023" #. type: TH #: debian-bookworm #, no-wrap msgid "Linux man-pages 6.03" msgstr "Linux man-pages 6.03" # WONTFIX /proc/I/setgroups → IpidI/setgroups file" msgstr "Die Datei IPIDI" #. type: Plain text #: debian-bookworm msgid "Namespaces are a Linux-specific feature." msgstr "Namensräume sind eine Linux-spezifische Funktionalität." #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "/* userns_child_exec.c\n" msgstr "/* userns_child_exec.c\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " Licensed under GNU General Public License v2 or later\n" msgstr " Lizenziert unter der GNU General Public License v2 oder neuer\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " Create a child process that executes a shell command in new\n" " namespace(s); allow UID and GID mappings to be specified when\n" " creating a user namespace.\n" "*/\n" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Esched.hE\n" "#include Eunistd.hE\n" "#include Estdint.hE\n" "#include Estdlib.hE\n" "#include Esys/wait.hE\n" "#include Esignal.hE\n" "#include Efcntl.hE\n" "#include Estdio.hE\n" "#include Estring.hE\n" "#include Elimits.hE\n" "#include Eerrno.hE\n" msgstr "" " Erzeugt einen Kindprozess, der einen Shell-Befehl in einem oder mehreren\n" " neuen Namensräumen ausführt; erlaubt UID- und GID-Abbildungen anzugeben,\n" " wenn ein Benutzernamensraum erstellt wird\n" "*/\n" "#define _GNU_SOURCE\n" "#include Eerr.hE\n" "#include Esched.hE\n" "#include Eunistd.hE\n" "#include Estdint.hE\n" "#include Estdlib.hE\n" "#include Esys/wait.hE\n" "#include Esignal.hE\n" "#include Efcntl.hE\n" "#include Estdio.hE\n" "#include Estring.hE\n" "#include Elimits.hE\n" "#include Eerrno.hE\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "struct child_args {\n" " char **argv; /* Command to be executed by child, with args */\n" " int pipe_fd[2]; /* Pipe used to synchronize parent and child */\n" "};\n" msgstr "" "struct child_args {\n" " char **argv; /* Vom Kind auszuführender Befehl, mit Argumenten */\n" " int pipe_fd[2]; /* Zur Sychronisation Eltern/Kind verwandte Pipe */\n" "};\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "static int verbose;\n" msgstr "static int verbose;\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static void\n" "usage(char *pname)\n" "{\n" " fprintf(stderr, \"Usage: %s [options] cmd [arg...]\\en\\en\", pname);\n" " fprintf(stderr, \"Create a child process that executes a shell \"\n" " \"command in a new user namespace,\\en\"\n" " \"and possibly also other new namespace(s).\\en\\en\");\n" " fprintf(stderr, \"Options can be:\\en\\en\");\n" "#define fpe(str) fprintf(stderr, \" %s\", str);\n" " fpe(\"-i New IPC namespace\\en\");\n" " fpe(\"-m New mount namespace\\en\");\n" " fpe(\"-n New network namespace\\en\");\n" " fpe(\"-p New PID namespace\\en\");\n" " fpe(\"-u New UTS namespace\\en\");\n" " fpe(\"-U New user namespace\\en\");\n" " fpe(\"-M uid_map Specify UID map for user namespace\\en\");\n" " fpe(\"-G gid_map Specify GID map for user namespace\\en\");\n" " fpe(\"-z Map user\\[aq]s UID and GID to 0 in user namespace\\en\");\n" " fpe(\" (equivalent to: -M \\[aq]0 EuidE 1\\[aq] -G \\[aq]0 EgidE 1\\[aq])\\en\");\n" " fpe(\"-v Display verbose messages\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"If -z, -M, or -G is specified, -U is required.\\en\");\n" " fpe(\"It is not permitted to specify both -z and either -M or -G.\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"Map strings for -M and -G consist of records of the form:\\en\");\n" " fpe(\"\\en\");\n" " fpe(\" ID-inside-ns ID-outside-ns len\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"A map string can contain multiple records, separated\"\n" " \" by commas;\\en\");\n" " fpe(\"the commas are replaced by newlines before writing\"\n" " \" to map files.\\en\");\n" msgstr "" "static void\n" "usage(char *pname)\n" "{\n" " fprintf(stderr, \"Aufruf: %s [Optionen] Bef [Arg…]\\en\\en\", pname);\n" " fprintf(stderr, \"Erstellt einen Kindprozess, der einen Shellbefehl \"\n" " \"in einem neuen Benutzernamensraum ausführt\\en\"\n" " \"und möglicherweise auch anderen neuen Namensräumen.\\en\\en\");\n" " fprintf(stderr, \"Optionen können sein:\\en\\en\");\n" "#define fpe(str) fprintf(stderr, \" %s\", str);\n" " fpe(\"-i Neuer IPC-Namensraum\\en\");\n" " fpe(\"-m Neuer Einhänge-Namensraum\\en\");\n" " fpe(\"-n Neuer Netzwerk-Namensraum\\en\");\n" " fpe(\"-p Neuer PID-Namensraum\\en\");\n" " fpe(\"-u Neuer UTS-Namensraum\\en\");\n" " fpe(\"-U Neuer Benutzernamensraum\\en\");\n" " fpe(\"-M uid_map Angabe einer UID-Abbildung für Benutzernamensraum\\en\");\n" " fpe(\"-G gid_map Angabe einer GID-Abbildung für Benutzernamensraum\\en\");\n" " fpe(\"-z Benutzer-UID und -GID auf 0 im Benutzernamensraum abbilden\\en\");\n" " fpe(\" (äquivalent zu: -M \\[aq]0 EuidE 1\\[aq] -G \\[aq]0 EgidE 1\\[aq])\\en\");\n" " fpe(\"-v Anzeige ausführlicher Meldungen\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"Falls -z, -M oder -G angegeben wird, ist -U verpflichtend.\\en\");\n" " fpe(\"Es ist nicht erlaubt, sowohl -z als auch entweder -M oder -G anzugeben.\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"Abbildungszeichenketten für -M und -G bestehen aus Datensätzen der folgenden Form:\\en\");\n" " fpe(\"\\en\");\n" " fpe(\" Namensrauminterne-Kennung Namensraumexterne-Kennung Länge\\en\");\n" " fpe(\"\\en\");\n" " fpe(\"Eine Abbildungszeichenkette kann mehrere Datensätze enthalten,\"\n" " \" getrennt durch Kommata;\\en\");\n" " fpe(\"die Kommata werden vor dem Schreiben in die Abbildungsdateien durch\"\n" " \" Zeilenumbrüche ersetzt.\\en\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " exit(EXIT_FAILURE);\n" "}\n" msgstr "" " exit(EXIT_FAILURE);\n" "}\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "/* Update the mapping file \\[aq]map_file\\[aq], with the value provided in\n" " \\[aq]mapping\\[aq], a string that defines a UID or GID mapping. A UID or\n" " GID mapping consists of one or more newline-delimited records\n" " of the form:\n" msgstr "" "/* Aktualisiert die Abbildungsdatei »map_file« mit dem in »mapping«\n" " bereitgestellten Wert, einer Zeichenkette, die eine UID- oder GID-\n" " Abbildung definiert. Eine UID- oder GID-Abbildung besteht aus einem oder\n" " mehreren, durch Zeilenumbrüche getrennten Datensätzen der folgenden Form:\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " ID_inside-ns ID-outside-ns length\n" msgstr " Namensrauminterne-Kennung Namensraumexterne-Kennung Länge\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " Requiring the user to supply a string that contains newlines is\n" " of course inconvenient for command-line use. Thus, we permit the\n" " use of commas to delimit records in this string, and replace them\n" " with newlines before writing the string to the file. */\n" msgstr "" " Für die Befehlszeile zu verlangen, dass Zeichenketten mit Zeilenumbrüchen\n" " bereitgestellt werden, ist natürlich unbequem. Daher erlauben wir die\n" " Verwendung von Kommata zur Begrenzung von Datensätzen in dieser\n" " Zeichenkette und ersetzen sie vor dem Schreiben in die Datei durch\n" " Zeilenumbrüche. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static void\n" "update_map(char *mapping, char *map_file)\n" "{\n" " int fd;\n" " size_t map_len; /* Length of \\[aq]mapping\\[aq] */\n" msgstr "" "static void\n" "update_map(char *mapping, char *map_file)\n" "{\n" " int fd;\n" " size_t map_len; /* Länge der »mapping« */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Replace commas in mapping string with newlines. */\n" msgstr " /* Kommata durch Zeilenumbrüche in Abbildungszeichenkette ersetzen. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " map_len = strlen(mapping);\n" " for (size_t j = 0; j E map_len; j++)\n" " if (mapping[j] == \\[aq],\\[aq])\n" " mapping[j] = \\[aq]\\en\\[aq];\n" msgstr "" " map_len = strlen(mapping);\n" " for (size_t j = 0; j E map_len; j++)\n" " if (mapping[j] == \\[aq],\\[aq])\n" " mapping[j] = \\[aq]\\en\\[aq];\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " fd = open(map_file, O_RDWR);\n" " if (fd == -1) {\n" " fprintf(stderr, \"ERROR: open %s: %s\\en\", map_file,\n" " strerror(errno));\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" " fd = open(map_file, O_RDWR);\n" " if (fd == -1) {\n" " fprintf(stderr, \"FEHLER: open %s: %s\\en\", map_file,\n" " strerror(errno));\n" " exit(EXIT_FAILURE);\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (write(fd, mapping, map_len) != map_len) {\n" " fprintf(stderr, \"ERROR: write %s: %s\\en\", map_file,\n" " strerror(errno));\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" " if (write(fd, mapping, map_len) != map_len) {\n" " fprintf(stderr, \"FEHLER: write %s: %s\\en\", map_file,\n" " strerror(errno));\n" " exit(EXIT_FAILURE);\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " close(fd);\n" "}\n" msgstr "" " close(fd);\n" "}\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "/* Linux 3.19 made a change in the handling of setgroups(2) and the\n" " \\[aq]gid_map\\[aq] file to address a security issue. The issue allowed\n" " *unprivileged* users to employ user namespaces in order to drop groups.\n" " The upshot of the 3.19 changes is that in order to update the\n" " \\[aq]gid_maps\\[aq] file, use of the setgroups() system call in this\n" " user namespace must first be disabled by writing \"deny\" to one of\n" " the /proc/PID/setgroups files for this namespace. That is the\n" " purpose of the following function. */\n" msgstr "" "/* Linux 3.19 änderte die Handhabung von setgroups(2) und die Datei\n" " »gid_map«, um ein Sicherheitsproblem zu adressieren. Das Problem erlaubte\n" " *nicht privilegierten* Benutzern einen Benutzernamensraum einzusetzen, um\n" " Gruppen abzugeben. Das Fazit der 3.19er Änderung ist, dass die Verwendung\n" " des Systemaufrufs setgroups() in diesem Benutzernamensraum zuerst durch\n" " Schreiben von »deny« in eine der Dateien /proc/PID/setgroups für diesen\n" " Namensraum erfolgen muss, damit die Datei »gid_maps« aktualisert wird.\n" " Das ist der Zweck der folgenden Funktion. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static void\n" "proc_setgroups_write(pid_t child_pid, char *str)\n" "{\n" " char setgroups_path[PATH_MAX];\n" " int fd;\n" msgstr "" "static void\n" "proc_setgroups_write(pid_t child_pid, char *str)\n" "{\n" " char setgroups_path[PATH_MAX];\n" " int fd;\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " snprintf(setgroups_path, PATH_MAX, \"/proc/%jd/setgroups\",\n" " (intmax_t) child_pid);\n" msgstr "" " snprintf(setgroups_path, PATH_MAX, \"/proc/%jd/setgroups\",\n" " (intmax_t) child_pid);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " fd = open(setgroups_path, O_RDWR);\n" " if (fd == -1) {\n" msgstr "" " fd = open(setgroups_path, O_RDWR);\n" " if (fd == -1) {\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* We may be on a system that doesn\\[aq]t support\n" " /proc/PID/setgroups. In that case, the file won\\[aq]t exist,\n" " and the system won\\[aq]t impose the restrictions that Linux 3.19\n" " added. That\\[aq]s fine: we don\\[aq]t need to do anything in order\n" " to permit \\[aq]gid_map\\[aq] to be updated.\n" msgstr "" " /* Vielleicht sind wir auf einem System, das /proc/PID/setgroups\n" " nicht unterstützt. Dann wird diese Datei nicht existieren und das\n" " System wird nicht die Beschränkungen erzwingen, die Linux 3.19\n" " hinzugefügt hat. Das ist OK, wir brauchen nichts zu machen, damit\n" " »gid_map« aktualisiert wird.\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " However, if the error from open() was something other than\n" " the ENOENT error that is expected for that case, let the\n" " user know. */\n" msgstr "" " Falls allerdings der Fehler von open() sich von ENOENT\n" " unterscheidet (der in diesem Fall zu erwarten ist), informieren\n" " wir den Benutzer. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (errno != ENOENT)\n" " fprintf(stderr, \"ERROR: open %s: %s\\en\", setgroups_path,\n" " strerror(errno));\n" " return;\n" " }\n" msgstr "" " if (errno != ENOENT)\n" " fprintf(stderr, \"FEHLER: open %s: %s\\en\", setgroups_path,\n" " strerror(errno));\n" " return;\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (write(fd, str, strlen(str)) == -1)\n" " fprintf(stderr, \"ERROR: write %s: %s\\en\", setgroups_path,\n" " strerror(errno));\n" msgstr "" " if (write(fd, str, strlen(str)) == -1)\n" " fprintf(stderr, \"FEHLER: write %s: %s\\en\", setgroups_path,\n" " strerror(errno));\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "static int /* Start function for cloned child */\n" "childFunc(void *arg)\n" "{\n" " struct child_args *args = arg;\n" " char ch;\n" msgstr "" "static int /* Funktion für geklontes Kind starten */\n" "childFunc(void *arg)\n" "{\n" " struct child_args *args = arg;\n" " char ch;\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Wait until the parent has updated the UID and GID mappings.\n" " See the comment in main(). We wait for end of file on a\n" " pipe that will be closed by the parent process once it has\n" " updated the mappings. */\n" msgstr "" " /* Warten, bis der Elternprozess seine UID- und GID-Abbildungen\n" " aktualisiert hat. Siehe den Kommentar in main(). Wir warten, bis\n" " auf einer Pipe das Dateiende kommt, die vom Elternprozess geschlossen\n" " wird, sobald er seine Abbildungen aktualisiert hat. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " close(args-Epipe_fd[1]); /* Close our descriptor for the write\n" " end of the pipe so that we see EOF\n" " when parent closes its descriptor. */\n" " if (read(args-Epipe_fd[0], &ch, 1) != 0) {\n" " fprintf(stderr,\n" " \"Failure in child: read from pipe returned != 0\\en\");\n" " exit(EXIT_FAILURE);\n" " }\n" msgstr "" " close(args-Epipe_fd[1]); /* Unseren Deskriptor für das Ende des\n" " Schreibens schließen, so dass wir EOF\n" " sehen, wenn der Elternprozess seinen\n" " Deskriptor schließt. */\n" " if (read(args-Epipe_fd[0], &ch, 1) != 0) {\n" " fprintf(stderr,\n" " \"Fehler im Kind: Lesen von der Pipe lieferte != 0\\en\");\n" " exit(EXIT_FAILURE);\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " close(args-Epipe_fd[0]);\n" msgstr " close(args-Epipe_fd[0]);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Execute a shell command. */\n" msgstr " /* Einen Shell-Befehl ausführen. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " printf(\"About to exec %s\\en\", args-Eargv[0]);\n" " execvp(args-Eargv[0], args-Eargv);\n" " err(EXIT_FAILURE, \"execvp\");\n" "}\n" msgstr "" " printf(\"Gleich wird exec %s ausgeführt\\en\", args-Eargv[0]);\n" " execvp(args-Eargv[0], args-Eargv);\n" " err(EXIT_FAILURE, \"execvp\");\n" "}\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "#define STACK_SIZE (1024 * 1024)\n" msgstr "#define STACK_SIZE (1024 * 1024)\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "static char child_stack[STACK_SIZE]; /* Space for child\\[aq]s stack */\n" msgstr "static char child_stack[STACK_SIZE]; /* Platz für den Stack des Kindes */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int flags, opt, map_zero;\n" " pid_t child_pid;\n" " struct child_args args;\n" " char *uid_map, *gid_map;\n" " const int MAP_BUF_SIZE = 100;\n" " char map_buf[MAP_BUF_SIZE];\n" " char map_path[PATH_MAX];\n" msgstr "" "int\n" "main(int argc, char *argv[])\n" "{\n" " int flags, opt, map_zero;\n" " pid_t child_pid;\n" " struct child_args args;\n" " char *uid_map, *gid_map;\n" " const int MAP_BUF_SIZE = 100;\n" " char map_buf[MAP_BUF_SIZE];\n" " char map_path[PATH_MAX];\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Parse command-line options. The initial \\[aq]+\\[aq] character in\n" " the final getopt() argument prevents GNU-style permutation\n" " of command-line options. That\\[aq]s useful, since sometimes\n" " the \\[aq]command\\[aq] to be executed by this program itself\n" " has command-line options. We don\\[aq]t want getopt() to treat\n" " those as options to this program. */\n" msgstr "" " /* Befehlszeilenoptionen auswerten. Das anfängliche »+«-Zeichen in dem\n" " abschließenden getopt()-Argument verhindert GNU-artige Vertauschungen\n" " der Befehlszeilenoptionen. Das ist nützlich, da manchmal der von\n" " diesem Programm selbst ausgeführte »Befehl« über Befehlszeilenoptionen\n" " verfügt. Wir wollen nicht, dass getopt() solche als Optionen für\n" " dieses Programm behandelt. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " flags = 0;\n" " verbose = 0;\n" " gid_map = NULL;\n" " uid_map = NULL;\n" " map_zero = 0;\n" " while ((opt = getopt(argc, argv, \"+imnpuUM:G:zv\")) != -1) {\n" " switch (opt) {\n" " case \\[aq]i\\[aq]: flags |= CLONE_NEWIPC; break;\n" " case \\[aq]m\\[aq]: flags |= CLONE_NEWNS; break;\n" " case \\[aq]n\\[aq]: flags |= CLONE_NEWNET; break;\n" " case \\[aq]p\\[aq]: flags |= CLONE_NEWPID; break;\n" " case \\[aq]u\\[aq]: flags |= CLONE_NEWUTS; break;\n" " case \\[aq]v\\[aq]: verbose = 1; break;\n" " case \\[aq]z\\[aq]: map_zero = 1; break;\n" " case \\[aq]M\\[aq]: uid_map = optarg; break;\n" " case \\[aq]G\\[aq]: gid_map = optarg; break;\n" " case \\[aq]U\\[aq]: flags |= CLONE_NEWUSER; break;\n" " default: usage(argv[0]);\n" " }\n" " }\n" msgstr "" " flags = 0;\n" " verbose = 0;\n" " gid_map = NULL;\n" " uid_map = NULL;\n" " map_zero = 0;\n" " while ((opt = getopt(argc, argv, \"+imnpuUM:G:zv\")) != -1) {\n" " switch (opt) {\n" " case \\[aq]i\\[aq]: flags |= CLONE_NEWIPC; break;\n" " case \\[aq]m\\[aq]: flags |= CLONE_NEWNS; break;\n" " case \\[aq]n\\[aq]: flags |= CLONE_NEWNET; break;\n" " case \\[aq]p\\[aq]: flags |= CLONE_NEWPID; break;\n" " case \\[aq]u\\[aq]: flags |= CLONE_NEWUTS; break;\n" " case \\[aq]v\\[aq]: verbose = 1; break;\n" " case \\[aq]z\\[aq]: map_zero = 1; break;\n" " case \\[aq]M\\[aq]: uid_map = optarg; break;\n" " case \\[aq]G\\[aq]: gid_map = optarg; break;\n" " case \\[aq]U\\[aq]: flags |= CLONE_NEWUSER; break;\n" " default: usage(argv[0]);\n" " }\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* -M or -G without -U is nonsensical */\n" msgstr " /* -M oder -G ohne -U ist sinnlos */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (((uid_map != NULL || gid_map != NULL || map_zero) &&\n" " !(flags & CLONE_NEWUSER)) ||\n" " (map_zero && (uid_map != NULL || gid_map != NULL)))\n" " usage(argv[0]);\n" msgstr "" " if (((uid_map != NULL || gid_map != NULL || map_zero) &&\n" " !(flags & CLONE_NEWUSER)) ||\n" " (map_zero && (uid_map != NULL || gid_map != NULL)))\n" " usage(argv[0]);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " args.argv = &argv[optind];\n" msgstr " args.argv = &argv[optind];\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* We use a pipe to synchronize the parent and child, in order to\n" " ensure that the parent sets the UID and GID maps before the child\n" " calls execve(). This ensures that the child maintains its\n" " capabilities during the execve() in the common case where we\n" " want to map the child\\[aq]s effective user ID to 0 in the new user\n" " namespace. Without this synchronization, the child would lose\n" " its capabilities if it performed an execve() with nonzero\n" " user IDs (see the capabilities(7) man page for details of the\n" " transformation of a process\\[aq]s capabilities during execve()). */\n" msgstr "" " /* Wir verwenden eine Pipe, um den Eltern- und Kindprozess zu\n" " synchronisieren, damit sichergestellt wird, dass der Elternprozess\n" " die UID- und GID-Abbildungen einrichtet, bevor der Kindprozess\n" " execve() aufruft. Dies stellt sicher, dass das Kind seine Capabilitys\n" " während des execve() erhält, wenn der typische Fall vorliegt, dass\n" " wir möchten, dass die effektive Benutzerkennung des Kindprozesses auf\n" " 0 in dem neuen Benutzernamensraum abgebildet wird. Ohne diese\n" " Synchronisation würde der Kindprozess seine Capabilitys verlieren,\n" " falls es ein execve() mit einer von Null verschiedenen Benutzerkennung\n" " durchführen würde (siehe die Handbuchseite capabilities(7) für Details\n" " des Übergangs der Capabilitys eines Prozesses während execve()). */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (pipe(args.pipe_fd) == -1)\n" " err(EXIT_FAILURE, \"pipe\");\n" msgstr "" " if (pipe(args.pipe_fd) == -1)\n" " err(EXIT_FAILURE, \"pipe\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Create the child in new namespace(s). */\n" msgstr " /* Den Kindprozess in dem oder den neuen Namensraum/-räumen erstellen. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " child_pid = clone(childFunc, child_stack + STACK_SIZE,\n" " flags | SIGCHLD, &args);\n" " if (child_pid == -1)\n" " err(EXIT_FAILURE, \"clone\");\n" msgstr "" " child_pid = clone(childFunc, child_stack + STACK_SIZE,\n" " flags | SIGCHLD, &args);\n" " if (child_pid == -1)\n" " err(EXIT_FAILURE, \"clone\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Parent falls through to here. */\n" msgstr " /* Elternprozess fällt bis hierher durch. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (verbose)\n" " printf(\"%s: PID of child created by clone() is %jd\\en\",\n" " argv[0], (intmax_t) child_pid);\n" msgstr "" " if (verbose)\n" " printf(\"%s: PID des durch clone() erstellten Kindprozesses lautet %jd\\en\",\n" " argv[0], (intmax_t) child_pid);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " /* Update the UID and GID maps in the child. */\n" msgstr " /* Die UID- und GID-Abbildungen in dem Kindprozess aktualisieren. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (uid_map != NULL || map_zero) {\n" " snprintf(map_path, PATH_MAX, \"/proc/%jd/uid_map\",\n" " (intmax_t) child_pid);\n" " if (map_zero) {\n" " snprintf(map_buf, MAP_BUF_SIZE, \"0 %jd 1\",\n" " (intmax_t) getuid());\n" " uid_map = map_buf;\n" " }\n" " update_map(uid_map, map_path);\n" " }\n" msgstr "" " if (uid_map != NULL || map_zero) {\n" " snprintf(map_path, PATH_MAX, \"/proc/%jd/uid_map\",\n" " (intmax_t) child_pid);\n" " if (map_zero) {\n" " snprintf(map_buf, MAP_BUF_SIZE, \"0 %jd 1\",\n" " (intmax_t) getuid());\n" " uid_map = map_buf;\n" " }\n" " update_map(uid_map, map_path);\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (gid_map != NULL || map_zero) {\n" " proc_setgroups_write(child_pid, \"deny\");\n" msgstr "" " if (gid_map != NULL || map_zero) {\n" " proc_setgroups_write(child_pid, \"deny\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " snprintf(map_path, PATH_MAX, \"/proc/%jd/gid_map\",\n" " (intmax_t) child_pid);\n" " if (map_zero) {\n" " snprintf(map_buf, MAP_BUF_SIZE, \"0 %ld 1\",\n" " (intmax_t) getgid());\n" " gid_map = map_buf;\n" " }\n" " update_map(gid_map, map_path);\n" " }\n" msgstr "" " snprintf(map_path, PATH_MAX, \"/proc/%jd/gid_map\",\n" " (intmax_t) child_pid);\n" " if (map_zero) {\n" " snprintf(map_buf, MAP_BUF_SIZE, \"0 %ld 1\",\n" " (intmax_t) getgid());\n" " gid_map = map_buf;\n" " }\n" " update_map(gid_map, map_path);\n" " }\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " /* Close the write end of the pipe, to signal to the child that we\n" " have updated the UID and GID maps. */\n" msgstr "" " /* Das Schreibe-Ende der Pipe schließen, um dem Kindprozess zu\n" " signalisieren, dass wir die UID- und GID-Abbildungen aktualisiert\n" " haben. */\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid " close(args.pipe_fd[1]);\n" msgstr " close(args.pipe_fd[1]);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (waitpid(child_pid, NULL, 0) == -1) /* Wait for child */\n" " err(EXIT_FAILURE, \"waitpid\");\n" msgstr "" " if (waitpid(child_pid, NULL, 0) == -1) /* Warten auf Kindprozess */\n" " err(EXIT_FAILURE, \"waitpid\");\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " if (verbose)\n" " printf(\"%s: terminating\\en\", argv[0]);\n" msgstr "" " if (verbose)\n" " printf(\"%s: beende\\en\", argv[0]);\n" #. type: Plain text #: debian-bookworm opensuse-leap-15-6 #, no-wrap msgid "" " exit(EXIT_SUCCESS);\n" "}\n" msgstr "" " exit(EXIT_SUCCESS);\n" "}\n" #. type: TH #: debian-unstable opensuse-tumbleweed #, no-wrap msgid "2023-05-03" msgstr "3. Mai 2023" #. type: TH #: debian-unstable opensuse-tumbleweed #, no-wrap msgid "Linux man-pages 6.05.01" msgstr "Linux man-pages 6.05.01" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "2023-04-01" msgstr "1. April 2023" #. type: TH #: opensuse-leap-15-6 #, no-wrap msgid "Linux man-pages 6.04" msgstr "Linux-Handbuchseiten 6.04"