summaryrefslogtreecommitdiffstats
path: root/po/de/man7/user_namespaces.7.po
diff options
context:
space:
mode:
Diffstat (limited to 'po/de/man7/user_namespaces.7.po')
-rw-r--r--po/de/man7/user_namespaces.7.po3478
1 files changed, 3478 insertions, 0 deletions
diff --git a/po/de/man7/user_namespaces.7.po b/po/de/man7/user_namespaces.7.po
new file mode 100644
index 00000000..baac5cd8
--- /dev/null
+++ b/po/de/man7/user_namespaces.7.po
@@ -0,0 +1,3478 @@
+# German translation of manpages
+# This file is distributed under the same license as the manpages-l10n package.
+# Copyright © of this file:
+# Helge Kreutzmann <debian@helgefjell.de>, 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 <debian@helgefjell.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\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<namespaces>(7)."
+msgstr "Für einen Überblick über Namensräume, siehe B<namespaces>(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<credentials>(7)), the root "
+"directory, keys (see B<keyrings>(7)), and capabilities (see "
+"B<capabilities>(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<credentials>(7)), das Wurzelverzeichnis, Schlüssel (siehe B<keyrings>(7)) "
+"und Capabilitys (siehe B<capabilities>(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<unshare>(2) or B<clone>(2) with the B<CLONE_NEWUSER> 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<unshare>(2) oder B<clone>(2) mit dem Schalter "
+"B<CLONE_NEWUSER> 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<unshare>(2) or B<clone>(2) that would cause this "
+"limit to be exceeded fail with the error B<EUSERS>."
+msgstr ""
+"(Seit Linux 3.11) erzwingt der Kernel eine Begrenzung von 32 verschachtelten "
+"Stufen an Benutzernamensräumen. Aufrufe an B<unshare>(2) oder B<clone>(2), "
+"die zum Überschreiten dieser Begrenzung führen würden, schlagen mit dem "
+"Fehler B<EUSERS> 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<fork>(2) or B<clone>(2) without the B<CLONE_NEWUSER> flag is a "
+"member of the same user namespace as its parent. A single-threaded process "
+"can join another user namespace with B<setns>(2) if it has the "
+"B<CAP_SYS_ADMIN> 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<fork>(2) oder B<clone>(2) ohne den Schalter B<CLONE_NEWUSER> erstellter "
+"Prozess ist ein Mitglied im gleichen Benutzernamensraum wie sein "
+"Elternprozess. Ein Prozess mit nur einem Thread kann einem anderen "
+"Benutzernamensraum mit B<setns>(2) beitreten, falls er über B<CAP_SYS_ADMIN> "
+"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<clone>(2) or B<unshare>(2) with the B<CLONE_NEWUSER> flag "
+"makes the new child process (for B<clone>(2)) or the caller (for "
+"B<unshare>(2)) a member of the new user namespace created by the call."
+msgstr ""
+"Ein Aufruf von B<clone>(2) oder B<unshare>(2) mit dem Schalter "
+"B<CLONE_NEWUSER> führt dazu, dass der Kindprozess (für B<clone>(2)) oder der "
+"Aufrufende (für B<unshare>(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<NS_GET_PARENT> B<ioctl>(2) operation can be used to discover the "
+"parental relationship between user namespaces; see B<ioctl_ns>(2)."
+msgstr ""
+"Die Aktion B<NS_GET_PARENT> B<ioctl>(2) kann zum Erkennen der Vorgänger-/"
+"Nachfolger-Beziehung von Benutzernamensräumen verwandt werden; siehe "
+"B<ioctl_ns>(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</proc/sys/fs/suid_dumpable>. 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<PR_SET_DUMPABLE> in a call to B<prctl>(2), before creating a child "
+"process in a new user namespace may rectify this problem. See B<prctl>(2) "
+"and B<proc>(5) for details on how ownership is affected."
+msgstr ""
+"Ein Task, der eine seiner effektiven Kennungen ändert, bekommt sein "
+"»dumpable« auf den in I</proc/sys/fs/suid_dumpable> 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<PR_SET_DUMPABLE> in einem Aufruf von B<prctl>(2) vor der Erstellung des "
+"Kindprozesses in einem neuen Benutzernamensraum »dumpable« gemacht wird. "
+"Siehe B<prctl>(2) und B<proc>(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<clone>(2) with the B<CLONE_NEWUSER> 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<unshare>(2) "
+"or joins an existing user namespace using B<setns>(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<clone>(2)) or previous (in the "
+"case of B<unshare>(2) and B<setns>(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<clone>(2) mit dem Schalter B<CLONE_NEWUSER> erstellte "
+"Kindprozess beginnt mit einem vollständigen Satz an Capabilitys in dem neuen "
+"Benutzernamensraum. Entsprechend erlangt ein Prozess, der einen neuen "
+"Benutzernamensraum mittels B<unshare>(2) erstellt oder ihm mittels "
+"B<setns>(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<clone>(2)) oder vorhergehenden (im Falle von "
+"B<unshare>(2) und B<setns>(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<execve>(2) will cause a process's capabilities to be "
+"recalculated in the usual way (see B<capabilities>(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<execve>(2) dazu führt, dass die "
+"Capabilitys eines Prozesses auf die normale Art und Weise erneut berechnet "
+"werden (siehe B<capabilities>(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<clone>(2) or B<unshare>(2) using the B<CLONE_NEWUSER> flag or "
+"a call to B<setns>(2) that moves the caller into another user namespace "
+"sets the \"securebits\" flags (see B<capabilities>(7)) to their default "
+"values (all flags disabled) in the child (for B<clone>(2)) or caller (for "
+"B<unshare>(2) or B<setns>(2)). Note that because the caller no longer has "
+"capabilities in its original user namespace after a call to B<setns>(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<setns>(2) "
+"calls to move to another user namespace and then return to its original user "
+"namespace."
+msgstr ""
+"Ein Aufruf von B<clone>(2) oder B<unshare>(2) mit dem Schalter "
+"B<CLONE_NEWUSER> oder ein Aufruf von B<setns>(2), der den Aufrufenden in "
+"einen anderen Benutzernamensraum verschiebt, setzt die Schalter "
+"»securebits« (siehe B<capabilities>(7)) im Kind (für B<clone>(2)) oder dem "
+"Aufrufenden (für B<unshare>(2) oder B<setns>(2)) auf ihre Vorgabewerte (alle "
+"Schalter deaktiviert). Beachten Sie, dass der Aufrufende nach einem Aufruf "
+"von B<setns>(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<setns>(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<clone>(2), B<unshare>(2), or B<setns>(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<clone>(2), "
+"B<unshare>(2) oder B<setns>(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<NS_GET_OWNER_UID> B<ioctl>(2) operation can be used to discover the user "
+"ID of the owner of the namespace; see B<ioctl_ns>(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<NS_GET_OWNER_UID> B<ioctl>(2) kann zum Ermitteln der Benutzerkennung des "
+"Eigentümers des Namensraums verwandt werden; siehe B<ioctl_ns>(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<CAP_SYS_TIME>), "
+"loading a kernel module (governed by B<CAP_SYS_MODULE>), and creating a "
+"device (governed by B<CAP_MKNOD>). Only a process with privileges in the "
+"I<initial> 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<CAP_SYS_TIME> "
+"reguliert), dem Laden eines Kernelmoduls (wird durch B<CAP_SYS_MODULE> "
+"reguliert) und dem Erstellen eines Gerätes (wird durch B<CAP_MKNOD> "
+"reguliert). Nur Prozesse, die über Privilegien in dem I<ursprünglichen> "
+"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<CAP_SYS_ADMIN> 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<CAP_SYS_ADMIN> 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</proc> (since Linux 3.8)"
+msgstr "I</proc> (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</sys> (since Linux 3.8)"
+msgstr "I</sys> (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<devpts> (since Linux 3.9)"
+msgstr "I<devpts> (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<tmpfs>(5) (since Linux 3.9)"
+msgstr "B<tmpfs>(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<ramfs> (since Linux 3.9)"
+msgstr "I<ramfs> (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<mqueue> (since Linux 3.9)"
+msgstr "I<mqueue> (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<bpf> (since Linux 4.4)"
+msgstr "I<bpf> (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<overlayfs> (since Linux 5.11)"
+msgstr "I<overlayfs> (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<CAP_SYS_ADMIN> 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<CAP_SYS_ADMIN> 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<CAP_SYS_ADMIN> within the user namespace that owns a process's PID "
+"namespace allows (since Linux 3.8) that process to mount I</proc> "
+"filesystems."
+msgstr ""
+"Wenn ein Prozess B<CAP_SYS_ADMIN> innerhalb eines Namensraums hält, der den "
+"PID-Namensraum des Prozesses besitzt, dann kann er (seit Linux 3.8) I</proc>-"
+"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<CAP_SYS_ADMIN> in the initial user namespace."
+msgstr ""
+"Beachten Sie, dass das Einhängen blockbasierter Dateisysteme nur von "
+"Prozessen erfolgen kann, die B<CAP_SYS_ADMIN> 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<CAP_SYS_ADMIN> 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<CAP_SYS_ADMIN> 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<CLONE_NEWUSER> is specified along with other B<CLONE_NEW*> flags in a "
+"single B<clone>(2) or B<unshare>(2) call, the user namespace is guaranteed "
+"to be created first, giving the child (B<clone>(2)) or caller "
+"(B<unshare>(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<CLONE_NEWUSER> zusammen mit anderen Schaltern B<CLONE_NEW*> in einem "
+"einzelnen Aufruf von B<clone>(2) oder B<unshare>(2) angegeben wird, wird "
+"garantiert, dass der Namensraum zuerst erstellt wird, und damit dem "
+"Kindprozess (B<clone>(2)) oder dem aufrufenden Prozess (B<unshare>(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<clone>(2) or B<unshare>(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<sethostname>(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<CAP_SYS_ADMIN>) in that user namespace."
+msgstr ""
+"Wenn ein neuer Namensraum (der kein Benutzernamensraum ist) mittels "
+"B<clone>(2) oder B<unshare>(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<sethostname>(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<CAP_SYS_ADMIN>) 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<NS_GET_USERNS> B<ioctl>(2) operation can be used to discover the user "
+"namespace that owns a nonuser namespace; see B<ioctl_ns>(2)."
+msgstr ""
+"Die Aktion B<NS_GET_USERNS> B<ioctl>(2) kann zum Erkennen des "
+"Benutzernamensraums verwandt werden, dem der Nichtbenutzer-Namensraum "
+"gehört; siehe B<ioctl_ns>(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 I</proc/>pidI</uid_map> "
+"and I</proc/>pidI</gid_map> files (available since Linux 3.5) expose the "
+"mappings for user and group IDs inside the user namespace for the process "
+"I<pid>. 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 I</proc/>PIDI</uid_map> und I</proc/>PIDI</gid_map> (verfügbar "
+"seit Linux 3.5) legen diese Abbildungen für die Benutzer- und "
+"Gruppenkennungen innerhalb des Benutzernamensraumes für den Prozess I<PID> "
+"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<uid_map>; I<gid_map> 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<uid_map>; I<gid_map> 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<uid_map> file exposes the mapping of user IDs from the user namespace "
+"of the process I<pid> to the user namespace of the process that opened "
+"I<uid_map> (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<uid_map> file, depending "
+"on the user ID mappings for the user namespaces of the reading processes."
+msgstr ""
+"Die Datei I<uid_map> legt die Abbildung der Benutzerkennung von dem "
+"Benutzernamensraum des Prozesses I<PID> in den Benutzernamensraum des "
+"Prozesses offen, der I<uid_map> ö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<uid_map> 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<uid_map> 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<uid_map> 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<pid>."
+msgstr ""
+"Der Anfang des Bereichs von Benutzerkennungen in dem Benutzernamensraum des "
+"Prozesses I<PID>."
+
+#. 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<uid_map> and the process I<pid> 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<uid_map> öffnete und der Prozess I<PID> 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<uid_map>."
+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<uid_map> ö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<pid>. This case enables the opener of I<uid_map> (the common case here is "
+"opening I</proc/self/uid_map>) 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<PID>. Dieser Fall ermöglicht es "
+"dem Öffnenden von I<uid_map> (der typische Fall hier ist das Öffnen von I</"
+"proc/self/uid_map>) 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<getuid>(2), B<getgid>(2), and the credential fields in the structure "
+"returned by B<stat>(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<getuid>(2), B<getgid>(2) und die "
+"Berechtigungsdatenfelder in der durch B<stat>(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<stat>(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<stat>(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<uid_map> file (I<gid_map> 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<uid_map> (I<gid_map> 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<cat /proc/$$/uid_map>\n"
+" 0 0 4294967295\n"
+msgstr ""
+"$ B<cat /proc/$$/uid_map>\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<setreuid>(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<setreuid>(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<uid_map> file of I<one> of "
+"the processes in the namespace may be written to I<once> to define the "
+"mapping of user IDs in the new user namespace. An attempt to write more "
+"than once to a I<uid_map> file in a user namespace fails with the error "
+"B<EPERM>. Similar rules apply for I<gid_map> files."
+msgstr ""
+"Nach der Erstellung eines neuen Benutzernamensraumes kann die Datei "
+"I<uid_map> von I<einem> der Prozesse in dem Namensraum I<einmalig> "
+"geschrieben werden, um die Abbildung der Benutzerkennungen in dem neuen "
+"Benutzernamensraum zu definieren. Jeder Versuch, mehr als einmal in eine "
+"Datei I<uid_map> in einem Benutzernamensraum zu schreiben, schlägt mit dem "
+"Fehler B<EPERM> fehl. Ähnliche Regeln gelten für Dateien I<gid_map>."
+
+#. 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<uid_map> (I<gid_map>) must conform to the following "
+"validity rules:"
+msgstr ""
+"Die in I<uid_map> (I<gid_map>) 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<lseek>(2) and B<pwrite>(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<lseek>(2) und B<pwrite>(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<EINVAL>."
+msgstr ""
+"Schreibvorgänge, die die obigen Regeln verletzen, schlagen mit dem Fehler "
+"B<EINVAL> 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 I</proc/>pidI</uid_map> (I</proc/"
+">pidI</gid_map>) file, all of the following permission requirements must be "
+"met:"
+msgstr ""
+"Damit ein Prozess in die Datei I</proc/>PIDI</uid_map> (I</proc/>PIDI</"
+"gid_map>) 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<CAP_SETUID> (B<CAP_SETGID>) capability "
+"in the user namespace of the process I<pid>."
+msgstr ""
+"Der schreibende Prozess muss über die Capability B<CAP_SETUID> "
+"(B<CAP_SETGID>) des Benutzernamensraums des Prozeses I<PID> 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<pid> or be in the parent user namespace of the process I<pid>."
+msgstr ""
+"Der schreibende Prozess muss entweder in dem Benutzernamensraum des "
+"Prozesses I<PID> oder in dem Vorgängernamensraum des Prozesses I<PID> 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 I</proc/>pidI</uid_map> 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 I</proc/>PIDI</uid_map> 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<CAP_SETFCAP> capability in that user namespace; or"
+msgstr ""
+"Falls der schreibende Prozess im Vorgänger-Benutzernamensraum liegt, dann "
+"muss er über die Capability B<CAP_SETFCAP> 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<CAP_SETFCAP> 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<CAP_SETFCAP> 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<CAP_SETFCAP> "
+"capability, which is needed to create a binary with namespaced file "
+"capabilities (as described in B<capabilities>(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<CAP_SETFCAP> (die zum Erstellen eines Programms mit Datei-Capabilitys im "
+"Namensraum benötigt wird, wie das in B<capabilities>(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<CAP_SETFCAP> 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<CAP_SETFCAP> 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<Either> the writing process has the B<CAP_SETUID> (B<CAP_SETGID>) "
+"capability in the I<parent> user namespace."
+msgstr ""
+"I<Entweder> verfügt der schreibende Prozess über die Capability "
+"B<CAP_SETUID> (B<CAP_SETGID>) in dem I<Vorgänger>namensraum."
+
+#. 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<Or> otherwise all of the following restrictions apply:"
+msgstr "I<Oder> 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<uid_map> (I<gid_map>) 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<uid_map> (I<gid_map>) 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<gid_map>, use of the B<setgroups>(2) system call must "
+"first be denied by writing \\[dq]I<deny>\\[dq] to the I</proc/>pidI</"
+"setgroups> file (see below) before writing to I<gid_map>."
+msgstr ""
+"Im Falle von I<gid_map> muss zuerst die Verwendung des Systemaufrufs "
+"B<setgroups>(2) verboten werden, indem »I<deny>« in die Datei I</proc/>PIDI</"
+"setgroups> geschrieben wird (siehe unten), bevor in I<gid_map> 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<EPERM>."
+msgstr ""
+"Schreibaktionen, die die obigen Regeln verletzen, werden mit B<EPERM> "
+"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<setquota>(8) and B<quotactl>(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<setquota>(8) und B<quotactl>(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 I</proc/>pidI</projid_map> "
+"file (present since Linux 3.7)."
+msgstr ""
+"Projektkennungsabbildungen werden durch Schreiben in die Datei I</proc/"
+">PIDI</projid_map> 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 I</proc/>pidI</projid_map> file are as "
+"for writing to the I<uid_map> file; violation of these rules causes "
+"B<write>(2) to fail with the error B<EINVAL>."
+msgstr ""
+"Die Gültigkeitsregeln für das Schreiben in die Datei I</proc/>PIDI</"
+"projid_map> sind wie beim Schreiben in die Datei I<uid_map>; Verletzung "
+"dieser Regeln führt beim B<write>(2) zum Fehlschlag B<EINVAL>."
+
+#. 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 I</proc/>pidI</projid_map> file are "
+"as follows:"
+msgstr ""
+"Die Erlaubnisregeln für das Schreiben in die Datei I</proc/>PIDI</"
+"projid_map> 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<write>(2) to fail with the error B<EPERM>."
+msgstr ""
+"Verletzung dieser Regeln führt dazu, dass B<write>(2) mit B<EPERM> "
+"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<uid_map> file has not been written, the "
+"system calls that change user IDs will fail. Similarly, if the I<gid_map> "
+"file has not been written, the system calls that change group IDs will "
+"fail. After the I<uid_map> and I<gid_map> 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<uid_map> 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<gid_map> noch nicht geschrieben "
+"wurde. Nachdem die Dateien I<uid_map> und I<gid_map> 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<setuid>(2), "
+"B<setfsuid>(2), B<setreuid>(2), and B<setresuid>(2). For group IDs, the "
+"relevant system calls include B<setgid>(2), B<setfsgid>(2), B<setregid>(2), "
+"B<setresgid>(2), and B<setgroups>(2)."
+msgstr ""
+"Für Benutzerkennungen sind die relevanten Systemaufrufe unter anderem "
+"B<setuid>(2), B<setfsuid>(2), B<setreuid>(2) und B<setresuid>(2). Für "
+"Gruppenkennungen sind die relevanten Systemaufrufe unter anderem "
+"B<setgid>(2), B<setfsgid>(2), B<setregid>(2), B<setresgid>(2) und "
+"B<setgroups>(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<deny>\\[dq] to the I</proc/>pidI</setgroups> file before "
+"writing to I</proc/>pidI</gid_map> will permanently disable B<setgroups>(2) "
+"in a user namespace and allow writing to I</proc/>pidI</gid_map> without "
+"having the B<CAP_SETGID> capability in the parent user namespace."
+msgstr ""
+"Durch Schreiben von »I<deny>« in die Datei I</proc/>PIDI</setgroups> vor dem "
+"Schreiben von I</proc/>PIDI</gid_map> wird B<setgroups>(2) in einem "
+"Benutzernamensraum dauerhaft deaktiviert und erlaubt Schreiben von I</proc/"
+">PIDI</gid_map>, ohne über die Capability B<CAP_SETGID> 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 I</proc/>pidI</setgroups> file"
+msgstr "Die Datei I</proc/>PIDI</setgroups>"
+
+#
+#. 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 I</proc/>pidI</setgroups> file displays the string \\[dq]I<allow>\\[dq] "
+"if processes in the user namespace that contains the process I<pid> are "
+"permitted to employ the B<setgroups>(2) system call; it displays "
+"\\[dq]I<deny>\\[dq] if B<setgroups>(2) is not permitted in that user "
+"namespace. Note that regardless of the value in the I</proc/>pidI</"
+"setgroups> file (and regardless of the process's capabilities), calls to "
+"B<setgroups>(2) are also not permitted if I</proc/>pidI</gid_map> has not "
+"yet been set."
+msgstr ""
+"Die Datei I</proc/>PIDI</setgroups> zeigt die Zeichenkette »I<allow>«, falls "
+"Prozesse in dem Benutzernamensraum, der den Prozess I<PID> enthält, die "
+"Erlaubnis haben, den Systemaufruf B<setgroups>(2) einzusetzen. Sie zeigt "
+"»I<deny>« an, falls B<setgroups>(2) in diesem Benutzernamensraum nicht "
+"erlaubt ist. Beachten Sie, dass Aufrufe von B<setgroups>(2) auch nicht "
+"erlaubt sind, falls I</proc/>PIDI</gid_map> noch nicht gesetzt wurde, "
+"unabhängig von dem Wert der Datei I</proc/>PIDI</setgroups> (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<CAP_SYS_ADMIN> capability in the "
+"namespace) may write either of the strings \\[dq]I<allow>\\[dq] or "
+"\\[dq]I<deny>\\[dq] to this file I<before> writing a group ID mapping for "
+"this user namespace to the file I</proc/>pidI</gid_map>. Writing the string "
+"\\[dq]I<deny>\\[dq] prevents any process in the user namespace from "
+"employing B<setgroups>(2)."
+msgstr ""
+"Ein privilegierter Prozess (einer mit der Capability B<CAP_SYS_ADMIN> in dem "
+"Namensraum) darf eine der Zeichenketten »I<allow>« oder »I<deny>« in diese "
+"Datei schreiben, I<bevor> eine Gruppenkennungsabbildung für diesen "
+"Benutzernamensraum in die Datei I</proc/>PIDI</gid_map> geschrieben wird. "
+"Durch Schreiben der Zeichenkette »I<deny>« wird jedem Prozess in diesem "
+"Benutzernamensraum der Einsatz von B<setgroups>(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 I</proc/>pidI</setgroups> only so long as "
+"calling B<setgroups>(2) is disallowed because I</proc/>pidI</gid_map> has "
+"not been set. This ensures that a process cannot transition from a state "
+"where B<setgroups>(2) is allowed to a state where B<setgroups>(2) is "
+"denied; a process can transition only from B<setgroups>(2) being disallowed "
+"to B<setgroups>(2) being allowed."
+msgstr ""
+"Die Essenz der in den vorhergehenden Absätzen beschriebenen Beschränkungen "
+"ist, dass das Schreiben in I</proc/>PIDI</setgroups> nur so lange erlaubt "
+"ist, wie B<setgroups>(2) nicht erlaubt ist, da I</proc/>PIDI</gid_map> noch "
+"nicht gesetzt wurde. Damit wird sichergestellt, dass ein Prozess nicht von "
+"einem Zustand, bei dem B<setgroups>(2) erlaubt ist, zu einem Zustand, bei "
+"dem B<setgroups>(2) verboten ist, übergehen kann; ein Prozess kann nur von "
+"B<setgroups>(2) nicht erlaubt zu B<setgroups>(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<allow>\\[dq]."
+msgstr ""
+"Der Vorgabewert für diese Datei in dem anfänglichen Namensraum ist "
+"»I<allow>«."
+
+#. type: Plain text
+#: archlinux debian-bookworm debian-unstable fedora-40 fedora-rawhide
+#: mageia-cauldron opensuse-leap-15-6 opensuse-tumbleweed
+msgid ""
+"Once I</proc/>pidI</gid_map> has been written to (which has the effect of "
+"enabling B<setgroups>(2) in the user namespace), it is no longer possible "
+"to disallow B<setgroups>(2) by writing \\[dq]I<deny>\\[dq] to I</proc/"
+">pidI</setgroups> (the write fails with the error B<EPERM>)."
+msgstr ""
+"Sobald I</proc/>PIDI</gid_map> geschrieben wurde (wodurch B<setgroups>(2) in "
+"dem Benutzernamensraum aktiviert wird), ist es nicht mehr möglich, "
+"B<setgroups>(2) durch Schreiben von »I<deny>« in I</proc/>PIDI</setgroups> "
+"zu verbieten (das Schreiben schlägt mit B<EPERM> 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 I</proc/>pidI</setgroups> setting from "
+"its parent."
+msgstr ""
+"Ein Nachfolgernamensraum erbt die Einstellungen I</proc/>PIDI</setgroups> "
+"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<setgroups> file has the value \\[dq]I<deny>\\[dq], then the "
+"B<setgroups>(2) system call can't subsequently be reenabled (by writing "
+"\\[dq]I<allow>\\[dq] to the file) in this user namespace. (Attempts to do "
+"so fail with the error B<EPERM>.) This restriction also propagates down to "
+"all child user namespaces of this user namespace."
+msgstr ""
+"Falls die Datei I<setgroups> den Wert »I<deny>« enthält, dann kann der "
+"Systemaufruf B<setgroups>(2) in diesem Namensraum nachfolgend nicht mehr "
+"aktiviert werden (durch Schreiben von »I<allow>« in die Datei). (Versuche, "
+"dies durchzuführen, schlagen mit B<EPERM> 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 I</proc/>pidI</setgroups> 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<setgroups>(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<CAP_SETGID> capability) could call B<setgroups>(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 I</proc/"
+">pidI</setgroups> file was added to address this security issue, by denying "
+"any pathway for an unprivileged process to drop groups with B<setgroups>(2)."
+msgstr ""
+"Die Datei I</proc/>PIDI</setgroups> 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<setgroups>(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<CAP_SETGID>) B<setgroups>(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 I</proc/>PIDI</setgroups> "
+"wurde hinzugefügt, um dieses Sicherheitsproblem zu adressieren, indem jeder "
+"Pfad für einen nicht privilegierten Prozess, Gruppen mit B<setgroups>(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<getuid>(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</proc/sys/kernel/"
+"overflowuid> and I</proc/sys/kernel/overflowgid> in B<proc>(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<getuid>(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</proc/sys/kernel/"
+"overflowuid> und I</proc/sys/kernel/overflowgid> in B<proc>(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<getuid>(2), B<getgid>(2), and similar), credentials "
+"passed over a UNIX domain socket, credentials returned by B<stat>(2), "
+"B<waitid>(2), and the System V IPC \"ctl\" B<IPC_STAT> operations, "
+"credentials exposed by I</proc/>pidI</status> and the files in I</proc/"
+"sysvipc/*>, credentials returned via the I<si_uid> field in the I<siginfo_t> "
+"received with a signal (see B<sigaction>(2)), credentials written to the "
+"process accounting file (see B<acct>(5)), and credentials returned with "
+"POSIX message queue notifications (see B<mq_notify>(3))."
+msgstr ""
+"Zu den Fällen, in denen nicht abgebildete Benutzerkennungen auf diese Art "
+"abgebildet werden, gehören Systemaufrufe, die Benutzerkennungen "
+"zurückliefern (B<getuid>(2), B<getgid>(2) und ähnliche), "
+"Benutzerberechtigungen, die über ein UNIX-Domain-Socket übergeben werden, "
+"Benutzerberechtigungen, die von B<stat>(2), B<waitid>(2) und den System-V-"
+"IPC-»ctl«-B<IPC_STAT>-Aktionen zurückgeliefert werden, "
+"Benutzerberechtigungen, die mittels I</proc/>PIDI</status> und den Dateien "
+"in I</proc/sysvipc/*> offengelegt werden, Benutzerberechtigungen, die über "
+"das Feld I<si_uid> in dem mit einem Signal I<siginfo_t> empfangenen Feld "
+"zurückgeliefert werden (siehe B<sigaction>(2)), Benutzerberechtigungen, die "
+"in die Prozessbuchhaltungsdatei geschrieben werden (siehe B<acct>(5)) und "
+"Benutzerberechtigungen, die mit POSIX-Nachrichtenwarteschlangen-"
+"Benachrichtigungen zurückgeliefert werden (siehe B<mq_notify>(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<not> "
+"converted to the corresponding overflow ID value. When viewing a I<uid_map> "
+"or I<gid_map> 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<nicht> in die entsprechende Überlaufkennung konvertiert "
+"werden. Beim Betrachten einer Datei I<uid_map> oder I<gid_map>, 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<CAP_CHOWN>, B<CAP_DAC_OVERRIDE>, "
+"B<CAP_DAC_READ_SEARCH>, B<CAP_FOWNER>, and B<CAP_FSETID>."
+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<CAP_CHOWN>, B<CAP_DAC_OVERRIDE>, B<CAP_DAC_READ_SEARCH>, "
+"B<CAP_FOWNER> und B<CAP_FSETID>."
+
+#. 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<CAP_FOWNER> 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<CAP_FOWNER> 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<or> 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<MS_NOSUID> flag, as described in B<mount>(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<oder> 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<MS_NOSUID> eingehängt wurde, wie dies in "
+"B<mount>(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<SCM_CREDENTIALS> in B<unix>(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<SCM_CREDENTIALS> in B<unix>(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<CONFIG_USER_NS> 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<CONFIG_USER_NS> 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<usage>() 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<usage>() 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<uname -rs> # Need Linux 3.8 or later\n"
+"Linux 3.8.0\n"
+"$ B<id -u> # Running as unprivileged user\n"
+"1000\n"
+"$ B<id -g>\n"
+"1000\n"
+msgstr ""
+"$ B<uname -rs> # Benötigt Linux 3.8 oder neuer\n"
+"Linux 3.8.0\n"
+"$ B<id -u> # Ausführung als nicht privilegierter Benutzer\n"
+"1000\n"
+"$ B<id -g>\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<echo $$>\n"
+"1\n"
+msgstr ""
+"bash$ B<echo $$>\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</proc> 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</proc> 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<mount -t proc proc /proc>\n"
+"bash$ B<ps ax>\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<mount -t proc proc /proc>\n"
+"bash$ B<ps ax>\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<cat /proc/$$/status | egrep \\[aq]\\[ha][UG]id\\[aq]>\n"
+"Uid:\t0\t0\t0\t0\n"
+"Gid:\t0\t0\t0\t0\n"
+"bash$ B<cat /proc/$$/status | egrep \\[aq]\\[ha]Cap(Prm|Inh|Eff)\\[aq]>\n"
+"CapInh:\t0000000000000000\n"
+"CapPrm:\t0000001fffffffff\n"
+"CapEff:\t0000001fffffffff\n"
+msgstr ""
+"bash$ B<cat /proc/$$/status | egrep \\[aq]\\[ha][UG]id\\[aq]>\n"
+"Uid:\t0\t0\t0\t0\n"
+"Gid:\t0\t0\t0\t0\n"
+"bash$ B<cat /proc/$$/status | egrep \\[aq]\\[ha]Cap(Prm|Inh|Eff)\\[aq]>\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 E<lt>err.hE<gt>\n"
+"#include E<lt>sched.hE<gt>\n"
+"#include E<lt>unistd.hE<gt>\n"
+"#include E<lt>stdint.hE<gt>\n"
+"#include E<lt>stdlib.hE<gt>\n"
+"#include E<lt>sys/wait.hE<gt>\n"
+"#include E<lt>signal.hE<gt>\n"
+"#include E<lt>fcntl.hE<gt>\n"
+"#include E<lt>stdio.hE<gt>\n"
+"#include E<lt>string.hE<gt>\n"
+"#include E<lt>limits.hE<gt>\n"
+"#include E<lt>errno.hE<gt>\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 E<lt>uidE<gt> 1\\[aq] -G \\[aq]0 E<lt>gidE<gt> 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<lt> 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-E<gt>pipe_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-E<gt>pipe_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-E<gt>pipe_fd[0]);\n"
+"\\&\n"
+" /* Execute a shell command. */\n"
+"\\&\n"
+" printf(\"About to exec %s\\en\", args-E<gt>argv[0]);\n"
+" execvp(args-E<gt>argv[0], args-E<gt>argv);\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 E<lt>err.hE<gt>\n"
+"#include E<lt>sched.hE<gt>\n"
+"#include E<lt>unistd.hE<gt>\n"
+"#include E<lt>stdint.hE<gt>\n"
+"#include E<lt>stdlib.hE<gt>\n"
+"#include E<lt>sys/wait.hE<gt>\n"
+"#include E<lt>signal.hE<gt>\n"
+"#include E<lt>fcntl.hE<gt>\n"
+"#include E<lt>stdio.hE<gt>\n"
+"#include E<lt>string.hE<gt>\n"
+"#include E<lt>limits.hE<gt>\n"
+"#include E<lt>errno.hE<gt>\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 E<lt>uidE<gt> 1\\[aq] -G \\[aq]0 E<lt>gidE<gt> 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<lt> 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-E<gt>pipe_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-E<gt>pipe_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-E<gt>pipe_fd[0]);\n"
+"\\&\n"
+" /* Einen Shell-Befehl ausführen. */\n"
+"\\&\n"
+" printf(\"Gleich wird exec %s ausgeführt\\en\", args-E<gt>argv[0]);\n"
+" execvp(args-E<gt>argv[0], args-E<gt>argv);\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<newgidmap>(1), B<newuidmap>(1), B<clone>(2), B<ptrace>(2), B<setns>(2), "
+"B<unshare>(2), B<proc>(5), B<subgid>(5), B<subuid>(5), B<capabilities>(7), "
+"B<cgroup_namespaces>(7), B<credentials>(7), B<namespaces>(7), "
+"B<pid_namespaces>(7)"
+msgstr ""
+"B<newgidmap>(1), B<newuidmap>(1), B<clone>(2), B<ptrace>(2), B<setns>(2), "
+"B<unshare>(2), B<proc>(5), B<subgid>(5), B<subuid>(5), B<capabilities>(7), "
+"B<cgroup_namespaces>(7), B<credentials>(7), B<namespaces>(7), "
+"B<pid_namespaces>(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<Documentation/admin-guide/namespaces/resource-"
+"control.rst>."
+msgstr ""
+"Die Kernelquelldatei I<Documentation/admin-guide/namespaces/resource-control."
+"rst>."
+
+#. 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<pid>/setgroups → I</proc/>pidI</setgroups // Wait for upstream to confirm this is right
+#. type: SS
+#: debian-bookworm
+#, no-wrap
+msgid "The /proc/I<pid>/setgroups file"
+msgstr "Die Datei I</proc/>PIDI</setgroups>"
+
+#. 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 E<lt>err.hE<gt>\n"
+"#include E<lt>sched.hE<gt>\n"
+"#include E<lt>unistd.hE<gt>\n"
+"#include E<lt>stdint.hE<gt>\n"
+"#include E<lt>stdlib.hE<gt>\n"
+"#include E<lt>sys/wait.hE<gt>\n"
+"#include E<lt>signal.hE<gt>\n"
+"#include E<lt>fcntl.hE<gt>\n"
+"#include E<lt>stdio.hE<gt>\n"
+"#include E<lt>string.hE<gt>\n"
+"#include E<lt>limits.hE<gt>\n"
+"#include E<lt>errno.hE<gt>\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 E<lt>err.hE<gt>\n"
+"#include E<lt>sched.hE<gt>\n"
+"#include E<lt>unistd.hE<gt>\n"
+"#include E<lt>stdint.hE<gt>\n"
+"#include E<lt>stdlib.hE<gt>\n"
+"#include E<lt>sys/wait.hE<gt>\n"
+"#include E<lt>signal.hE<gt>\n"
+"#include E<lt>fcntl.hE<gt>\n"
+"#include E<lt>stdio.hE<gt>\n"
+"#include E<lt>string.hE<gt>\n"
+"#include E<lt>limits.hE<gt>\n"
+"#include E<lt>errno.hE<gt>\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 E<lt>uidE<gt> 1\\[aq] -G \\[aq]0 E<lt>gidE<gt> 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 E<lt>uidE<gt> 1\\[aq] -G \\[aq]0 E<lt>gidE<gt> 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<lt> 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<lt> 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-E<gt>pipe_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-E<gt>pipe_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-E<gt>pipe_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-E<gt>pipe_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-E<gt>pipe_fd[0]);\n"
+msgstr " close(args-E<gt>pipe_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-E<gt>argv[0]);\n"
+" execvp(args-E<gt>argv[0], args-E<gt>argv);\n"
+" err(EXIT_FAILURE, \"execvp\");\n"
+"}\n"
+msgstr ""
+" printf(\"Gleich wird exec %s ausgeführt\\en\", args-E<gt>argv[0]);\n"
+" execvp(args-E<gt>argv[0], args-E<gt>argv);\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"