Ich habe eine Architektur mit Netzwerk-Namespaces (Netns). Ich möchte regelmäßigen Benutzern erlauben, einige Operationen in diesen Netzen durchzuführen.
Ich könnte ein Skript schreiben netns-exec.sh
, das von diesem Beitrag inspiriert ist und Folgendes sudo
enthält:
ip netns exec $1 su $USER -c "$2"
und zu meiner sudoer-Datei hinzufügen:
user ALL=(ALL) /path/to/netns-exec.sh
Aber ich finde es so hässlich, dass ich Albträume haben könnte. Gibt es eine bessere Lösung, um regulären Benutzern die Verwendung von Namespaces zu ermöglichen? Ist es möglich, Benutzer einigen nützlichen Gruppen zuzuordnen? Ich habe danach gesucht, aber nichts gefunden.
sudo
root
privileges
network-namespaces
Raspbeguy
quelle
quelle
Cmd_Alias CMD_NETNS = ip netns exec [regexp matching your namespace] su [regexp matching allowed used] -c [regexp matching allowed namespace command]
in Ihrer sudoers-Datei und erstellen dann eine Gruppe, in die Sie Ihre zulässigen Benutzer einfügen, und ordnen Sie diese Gruppe diesem Befehlsalias zu.sudo
Inhaltsu
, der mich nervt, nicht das Drehbuch selbst. Wie auch immer, ich werde ein Skript schreiben, um das Ding zu verpacken. Es macht 2 Benutzerwechsel, das ist wirklich hässlich, findest du nicht?sudo
es sich um eine bestimmte Variable handelt$SUDO_USER
, die sicherer ist. Aber das ist immer noch hässlich.Antworten:
Lösung 1
Fügen Sie einfach eine Gruppe mit dem Namen "netns" hinzu und fügen Sie alle gewünschten Benutzer hinzu. Geben Sie anschließend root: netns den Besitz und geben Sie der Gruppe Lese- / Ausführungsfunktionen.
Mit anderen Worten:
Lösung 2
Diese Lösung ist einfacher, Sie müssen Ihre sudoers-Datei wie in diesem Beispiel gezeigt bearbeiten .
quelle
ip netns
gibt einen Fehler zurück, der besagt, dass nur root ihn ausführen kann. Lösung 2 war das, was ich ursprünglich im Sinn hatte, aber meiner Meinung nach nicht zufriedenstellend war.chmod 0633
würdewrite+execute
allen Benutzern und dernetns
Gruppe Berechtigungen erteilen . Ich vermute, Sie wollten das SGID-Bit im Skript setzen, aber wie @Angelo erwähnt:setuid
undsetgid
wird bei Shell-Skripten aus gutem Grund ignoriert .Persönlich weiß ich nicht, ob es die Möglichkeit gibt, regulären Benutzern das Ausführen von Befehlen in verschiedenen Netzwerk-Namespaces zu erlauben, aber dieses mit Anmerkungen versehene Shell-Skript könnte Ihren Anforderungen besser entsprechen:
Installieren Sie es irgendwo in
/usr/bin
und erlauben Sie Ihren Benutzern, es auszuführen.quelle
Feuergefängnis kann die Arbeit erledigen
Alternativ benötigen Netns-Exec , Nsutils und Netns kein root
quelle