Ist es möglich, 'unshare -n [Programm]' als nicht privilegierter Benutzer auszuführen?


11

Ich möchte ein Programm ohne Internetzugang ausführen, z

unshare -n ping 127.0.0.1.

Als nicht Operation not permittedprivilegierter Benutzer gibt es zurück , als privilegierter Benutzer gibt es das gewünschte zurück Network is unreachable.

Gibt es eine Möglichkeit, es auch für den nicht privilegierten Benutzer zum Laufen zu bringen?

Antworten:


10

In späteren Versionen von Util-Linux unshareerhielt die --map-root-userOption. Zitat aus unshare(1)Version 2.26.2:

-r, --map-root-user

Führen Sie das Programm erst aus, nachdem die aktuell gültigen Benutzer- und Gruppen-IDs der Superuser-UID und -GID im neu erstellten Benutzernamensraum zugeordnet wurden. Auf diese Weise können Sie bequem Funktionen erwerben, die zum Verwalten verschiedener Aspekte der neu erstellten Namespaces erforderlich sind (z. B. Konfigurieren von Schnittstellen im Netzwerk-Namespace oder Mounten von Dateisystemen im Mount-Namespace), auch wenn diese nicht privilegiert ausgeführt werden. Aus praktischen Gründen werden komplexere Anwendungsfälle wie die Zuordnung mehrerer Bereiche von UIDs und GIDs nicht unterstützt. Diese Option impliziert --setgroups = verweigern.

Auf neueren Systemen können Sie also Folgendes ausführen:

unshare -n -r ping 127.0.0.1

Und das wird das Erwartete ergeben Network is unreachable.


Ich komme immer noch Operation not permittedmit~$ unshare -n -r ping 127.0.0.1
Arctic Kona

1
@ArcticKona Ihr System ist möglicherweise anders konfiguriert als unser, leider kann ich nicht helfen. In einigen Anwendungsfällen kann es sich auch lohnen, meine andere Antwort zu versuchen. Beachten Sie bwrap --unshare-netjedoch, dass ICMP (Ping) in dieser Lösung speziell nicht unterstützt wird.
Amir

2

Machen Sie es setuid(vorausgesetzt, es gehört bereits root):

sudo chmod u+s "`which unshare`"

Von unshare (1) :

HINWEISE Mit dem Befehl unshare werden potenzielle Berechtigungen gelöscht, bevor das Zielprogramm ausgeführt wird. Dies ermöglicht das Deaktivieren der Freigabe.


2
Alternativ: Führen Sie es in einem Benutzernamensraum aus, in dem dem Benutzer die Root-Berechtigung erteilt wurde.
Mikeserv

2
In neueren Versionen von Unshare gibt es einen Patch, der das Löschen von Privilegien entfernt. Seien Sie also vorsichtig, wenn Sie ein Upgrade durchführen.
Mrten

In der unshareauf meinem System installierten Version (2.26.2) funktioniert dies als nicht privilegierter Benutzer : unshare -n -r ping 127.0.0.1. (Beachten Sie die Hinzufügung von -r, die, wie @mikeserv vorgeschlagen hatte, den Benutzernamensraum optimiert, um den Prozess als Root darin auszuführen.)
Amir

Klingt so, als würde man den Schlüssel unter die Fußmatte legen und an der Tür ein Schild mit einem Schlüsselsymbol und einem nach unten zeigenden Pfeil
anbringen

@TheDiveO Nein. Unshare gewährt Ihnen keine Berechtigungen. Es ermöglicht Ihnen, sich einzuschränken. Es könnte genauso gut standardmäßig setuid root sein, aber es liegt wahrscheinlich nicht an dummen Distributionsrichtlinien. Es ist nicht sicherheitsrelevant, es als Root festzulegen, zumal es einen ziemlich einfachen Quellcode enthält, mit dem Sie überprüfen können, ob es keine Sicherheitslücken enthält.
PSkocik

1

Sie können das setcapDienstprogramm verwenden, um die Freigabe einzurichten.

sudo setcap cap_sys_admin+ep /usr/bin/unshare

Danach können Sie es verwenden. unshare -n ping 127.0.0.1 Ich kann es nicht weiter erklären und ich weiß nicht, ob dies eine gute Idee ist, aber es funktioniert und whoamiwird nicht rootals Benutzername angezeigt.


-1

Eine andere Möglichkeit, einen neuen Netzwerk-Namespace einzugeben unshare -n, ist die Verwendung des übergeordneten Bubblewrap ( bwrap --unshare-net):

bwrap --bind / / --dev /dev --unshare-net -- your-program args …

Hinweis: Wenn dies der Fall your-program args …ist ping 127.0.0.1, werden Sie feststellen, dass ICMP unter Bubblewrap nicht unterstützt wird, sodass im OP-Beispiel nicht " Network is unreachable" angezeigt wird .

Interessant ist auch, dass Programme in --unshare-net zwar eine Loopback-Schnittstelle erhalten, diese jedoch vom Netzwerk-Namespace isoliert ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.