Ermöglichen Sie Benutzern, nur bestimmte Binärdateien mit Root-Berechtigungen / Berechtigungen auszuführen

7

Ich möchte einem bestimmten Benutzer erlauben, /sbin/iptablesnur Sudo zu können .

Ich habe ein Bash-Skript, das iptables konfiguriert. Das Problem ist, dass die Konfiguration /sbin/iptablesals sudoable nicht ausreicht - das Skript selbst muss auch sudoable sein.

Das Problem ist, dass diese Datei vom Benutzer bearbeitet werden kann (er kann dort die Konfiguration ändern), sodass er jeden Befehl als root ausführen kann.

Was ist der richtige Ansatz für dieses Problem?

iTayb
quelle
2
Vermisse ich etwas Warum können Sie nicht einfach bearbeiten /etc/sudoersund hinzufügen username ALL=/sbin/iptables /sbin/whatever?
Nico

Antworten:

6

Ich kann zwei Methoden sehen:

  1. Lassen Sie den Benutzer zu verwenden , /sbin/iptablesdurch sudoohne Einschränkung (das ist etwas gefährlich, das bedeutet Sie den Benutzer irgendwie vertrauen), und führen Sie das Skript mit den Berechtigungen des Benutzers. Das Skript wird sudojedes Mal aufgerufen, wenn /sbin/iptableses benötigt wird. Dies setzt voraus, dass die Skriptausführung schnell erfolgt, da eventuell in regelmäßigen Abständen eine Kennworteingabe erforderlich sein wird¹.

    • Vorteil: Sie müssen dem Skript nicht vertrauen.
    • Nachteil: Wie bereits erwähnt, /sbin/iptablesist es gefährlich , dem Benutzer die uneingeschränkte Verwendung zu ermöglichen.
  2. Erlauben Sie dem Benutzer, nur das Skript aufzurufen sudo.

    • Vorteil: Die Verwendung von /sbin/iptableswird durch das Skript eingeschränkt.
    • Nachteil: Das Skript muss fehlerfrei sein.

Zu dem von Ihnen erwähnten Problem: Wenn das Skript beispielsweise im Besitz von ist rootund über die üblichen Berechtigungen verfügt: rwxr-xr-xAndere Benutzer können es nicht ändern, sondern nur ausführen (eventuell sudobis, um weitere Berechtigungen zu erhalten).

Achten Sie bei Lösung 2 und bei Shell-Skripten (im Vergleich zu robusteren Binärdateien / Programmen) auf Umgebungsvariablen und die verschiedenen externen Faktoren, die die Ausführung Ihres Skripts ändern können. Überprüfen Sie, ob Ihre Sudo-Konfiguration die Definition jeder potenziell schädlichen Variablen ordnungsgemäß zurücksetzt.

-
1. Tatsächlich sudokann bei Bedarf mit konfiguriert NOPASSWDwerden.

Stéphane Gimenez
quelle
2
Wenn Sie sich für Shell -Skripte entscheiden , empfehlen wir Folgendes: Wie können Variablen sicher an root-fähige Skripte übergeben werden? .
Gilles 'SO - hör auf böse zu sein'
3

Aus Wikipedia:

setuid und setgid (kurz für "Benutzer-ID bei Ausführung festlegen" bzw. "Gruppen-ID bei Ausführung festlegen") [1] sind Unix-Zugriffsrechte-Flags, mit denen Benutzer eine ausführbare Datei mit den Berechtigungen des Eigentümers oder der Gruppe der ausführbaren Datei ausführen können. Sie werden häufig verwendet, um Benutzern auf einem Computersystem das Ausführen von Programmen mit vorübergehend erhöhten Berechtigungen zu ermöglichen, um eine bestimmte Aufgabe auszuführen. Die angenommenen Benutzer- oder Gruppen-ID-Berechtigungen sind zwar nicht immer erhöht, zumindest jedoch spezifisch.

Versuchen Sie so etwas

stefan@linux-ulsk:/usr/bin> zypper up
Root privileges are required for updating packages.
linux-ulsk:~ # whereis zypper
zypper: /usr/bin/zypper /usr/bin/X11/zypper /usr/include/zypper /usr/share/zypper /usr/share/man/man8/zypper.8.gz
linux-ulsk:~ # chmod u+s /usr/bin/zypper
linux-ulsk:~ # exit
stefan@linux-ulsk:/usr/bin> zypper up
Retrieving repository ...

Ich könnte Zypper starten, ohne eine Wurzel zu sein, was ich vorher nicht konnte.

Sei vorsichtig mit setuid und setgid! Einige Buchzitate:

Geben Sie Shell-Skripten niemals die Berechtigung setuid. Verschiedene Techniken, um sie zu untergraben, sind bekannt.

bürgerlich
quelle
0

Sie können versuchen, den Gruppeneigentümer der Datei zu ändern und Ihren Benutzer zu dieser Gruppe hinzuzufügen. Dann könnten Sie chmodder Datei Gruppenberechtigungen zuweisen, mit denen Sie tun können, was Sie brauchen.

Es ist eine abgehackte Lösung, aber es würde funktionieren.

n0pe
quelle
Entschuldigung, aber Ihre Antwort ist wirklich unklar. Vielleicht könnten Sie die Namen der Dateien und Gruppen hinzufügen, über die Sie sprechen.
Stéphane Gimenez
Ändern Sie die Gruppe von /sbin/iptables. Fügen Sie Ihren Benutzer dieser Gruppe hinzu. chmod /sbin/iptablesdamit die Gruppe die Datei ausführen kann. Das würde funktionieren, nicht wahr?
n0pe
1
Im Wesentlichen erstellen Sie eine neue Gruppe nur für den Benutzer und erteilen dieser Gruppe die Ausführungsberechtigung für iptables.
Nico
Diese Antwort ist verwirrend und hängt nicht mit der OP-Frage zusammen. Es ist nur nutzlos, andere Benutzer daran zu hindern, das Skript auszuführen (solange ihnen von sudo keine erhöhten Berechtigungen gewährt werden).
Stéphane Gimenez
@Stephane - Die Operation sagte, er wolle nur diesem Benutzer Berechtigungen erteilen (siehe ersten Satz). Ich habe das als Einschränkung genommen.
n0pe
0

Stellen Sie sicher, dass Sie (oder ein geeignetes Konto) der Eigentümer der Datei sind, und machen Sie die Datei nur für Sie beschreibbar, nicht für die Gruppe. Ihre Berechtigungen wären also ungefähr 750, vorausgesetzt, Ihr Benutzer gehört zur richtigen Gruppe.

Wenn sie die Datei ausführen, aber nicht schreiben können, können Sie diesen Befehl sicher zu ihrer Sudo-Liste hinzufügen.

Bryan Agee
quelle
Der Grund, warum ich vorgeschlagen habe, die Gruppe anstelle des Eigentümers zu ändern, besteht darin, dass Root wahrscheinlich Eigentümer dieser Datei ist und das Ändern des Benutzers zu Konflikten an anderer Stelle führen kann.
n0pe