Chroot mit unshare simulieren

13

Ich versuche, einen Bootstrapper für eine minimale Linux-Distribution von der Quelle zu schreiben.

Ich möchte in einer chroot-ähnlichen Umgebung bauen. Dies sollte das Verpacken vereinfachen. Sicherheit ist mir an dieser Stelle egal. Der Bootstrapper sollte keine nicht standardmäßigen Befehle von Drittanbietern erfordern. Es wäre großartig, wenn es auch nicht nötig wäre, root zu sein.

Deshalb ist fakechroot (1) fakeroot (1) chroot (1) nicht genau das, wonach ich suche.

Ist es möglich, unshare (1) und / bin / sh zu fälschen / zu verwenden?

Rooties
quelle
AFAICS unshare(1)ist ein ziemlich dünner Wrapper für eine Sammlung von Nur-Root-Systemaufrufen, und (zumindest unter Fedora 18) ist es kein SUID, daher bezweifle ich sehr, dass dies für Nicht-Root-Benutzer funktionieren wird.
Vonbrand
Oh das ist eine Schande. Ich hatte den Eindruck, unshare is setuid. Ich denke, es geht mir gut, Wurzel zu sein.
Rooties
4
Mit der Veröffentlichung des neuen Linux 3.8-Kernels können Sie Namespace-Funktionen als Nicht-Root-Benutzer verwenden. Aber das ist eine glänzende Neuerung: Sie brauchen zuerst einen UID-Namespace und unshare unterstützt das noch nicht. Und Ihre Aktionen werden immer noch begrenzt sein.
BatchyX

Antworten:

5

Ja. Wenn Ihr Kernel user_namespaces unterstützt (und diese aktiviert sind) , können Sie zuerst den Benutzer "root" simulieren, der dann das Recht zum Aufrufen erhält chroot(als echter Root-Benutzer). (Diese Funktion musste zuvor nur auf den Root-Benutzer beschränkt werden, da ein normaler Benutzer die Möglichkeit zur Eskalation von Berechtigungen hatte.) (z. B. über Set-UID-Root-Binärdateien und benutzerdefinierte Bibliotheken im Chroot-Verzeichnis).)

Sie können dies in Ihrer Shell versuchen:

unshare --user --map-root-user --mount-proc --pid --fork
/sbin/chroot ......
su - user1
imz - Ivan Zakharyaschev
quelle
Nicht erkannte Option '--map-root-user'
Zibri
1
@Zibri Es funktioniert für mich jetzt, mit unsharevon util-linux-2.30.2-alt1
IMZ - Ivan Zakharyaschev
1

Einfach fakeroot / fakechroot bündeln oder installieren, da sie dafür schon perfekt geeignet sind. Schauen Sie sich cdebootstrap als Inspiration an.

Tobu
quelle