Wenn Ubuntu nach dem Kennwort eines Administrators fragt, wie entscheidet es, nach welchem ​​Administrator er fragen soll?

11

Ich richte eine Ubuntu (10.10) -Maschine ein, die von mehreren Personen verwendet wird. Es ist eine gemeinsam genutzte Maschine in einem kleinen Büro. Seine Hauptaufgaben sind das Hosten virtueller Maschinen mit VirtualBox und das Bereitstellen von Dateien mit Samba.

Für Samba müssen mehrere Benutzerkonten eingerichtet werden, damit verschiedene Personen von ihren eigenen Arbeitsstationen aus eine Verbindung zu den Samba-Freigaben herstellen können. Es gibt jedoch auch ein Konto, das nur für die Ausführung virtueller Maschinen vorgesehen ist und von mehreren Personen verwendet wird. Manchmal versuchen Benutzer, mit diesem Konto Dinge zu tun, für die erhöhte Berechtigungen erforderlich sind. Dadurch wird das Dialogfeld "Bitte geben Sie das Kennwort eines Administrators ein" von Gnome angezeigt. In diesem Dialogfeld wird jedoch mein Kennwort abgefragt. Als ich den Computer einrichtete, wurde mein Konto als erstes erstellt. Es wird also davon ausgegangen, dass ich der einzige Benutzer bin, dem Sudo-Berechtigungen erteilt wurden.

Ich möchte sozusagen einen anderen Benutzer als "Administrator des ersten Auswegs" festlegen, und es kann nicht der Benutzer eines gemeinsam genutzten Kontos sein, da jeder das Kennwort dieses Kontos kennen muss. Daher möchte ich, dass seine Berechtigungen streng eingeschränkt sind. Es kann nicht mein Konto sein, da ich anderen Leuten auf keinen Fall mein Passwort sage und ich nicht oft genug auf der Website anwesend bin, um es selbst einzugeben. Es gibt jedoch jemanden, der dies persönlich tun kann , also habe ich ihn hinzugefügt /etc/sudoers. Wie kann ich Ubuntu mitteilen, dass es, wenn es die Berechtigungen für etwas erhöhen muss, zuerst nach seinem Konto fragen sollte ?

Zusammenfassen:

  • Konten auf der Maschine: Alice, Bob, Carol, Dave, Eliza.
  • Bei der Installation von Ubuntu war Alice der erste Benutzer, der während des Installationsvorgangs hinzugefügt wurde.
  • "Dave" ist eigentlich ein Konto, das viele Leute benutzen, die nicht dabei sein können, /etc/sudoersweil sein Passwort öffentlich bekannt ist.
  • Bob wurde als "Verwaltungskonto" in Gnome eingerichtet und entsprechend eingetragen /etc/sudoers- Bob ist der Chef in diesem Büro.
  • Wenn Aktionen ausgeführt werden, für die erhöhte Berechtigungen erforderlich sind, während Sie als Bob, Carol, Eliza oder Dave angemeldet sind, sollte das System die Anmeldeinformationen von Bob anfordern.
  • Wenn Aktionen ausgeführt werden, für die erhöhte Berechtigungen erforderlich sind, während Sie als Alice angemeldet sind, sollte das System die Anmeldeinformationen von Alice anfordern (obwohl Alice eine Art Buckaroo-Systemadministrator ist und die Gewohnheit hat su -, erweiterte Administratoraufgaben auszuführen).

Welche Konfigurationsänderungen muss ich vornehmen, um hier den gewünschten Status zu erreichen?

Brighid McDonnell
quelle
Eine Alternative wäre, zuzulassen, dass virtualisierungsbezogene Befehle automatisch Administratorrechte verwenden. Ich bin sicher, ich habe eine Frage dazu gelesen, aber ich habe es vergessen.
Oxwivi
Ein kurzes Googeln sagt mir, dass Sie es aus derselben sudoersDatei machen. Weitere Informationen finden Sie in der Manpage .
Oxwivi
Ich habe das beim Bearbeiten berücksichtigt sudoers: Es ist aus Sicherheitsgründen kein erster Ausweg. Siehe auch die Antwort von enzotib - ein Teil des Problems war die Verwechslung zwischen sudound PolicyKit.
Brighid McDonnell

Antworten:

9

Lassen Sie uns zunächst darauf hinweisen, dass privilegierte Aktionen für einen Nicht-Root- Benutzer über zwei verschiedene Mechanismen zulässig sind .

  1. sudo

  2. PolicyKit

Der erste wird verwendet, wenn Sie explizit einen Befehl mit sudooder ein Menüelement ausführen, mit dem der Befehl umbrochen ist gksu(z. B. Synaptic Package Manager ).
In diesem Fall ist das erforderliche Kennwort das des aufrufenden Benutzers, normalerweise des angemeldeten Benutzers.

Die zweite wird verwendet, wenn eine PolicyKit-fähige Anwendung versucht, eine privilegierte Aktion auszuführen. In diesem Fall fragt die Anwendung die lokale PolicyKit-Behörde (über D-Bus), ob die Aktion ausgeführt werden kann. Die lokale Behörde fordert den aktiven Benutzer dann über einen Authentifizierungsagenten auf, seine Identität nachzuweisen. Das Dialogfenster sieht wie folgt aus (leider mit italienischem Text :)

Geben Sie hier die Bildbeschreibung ein

Sie können PolicyKit anhand des kleinen schwarzen Dreiecks und der Bezeichnung Details identifizieren . Wie Sie sehen können, adminkönnen Sie aus der Liste auswählen, welcher Benutzer für die Authentifizierung verwendet werden soll , wenn sich mehr als ein Benutzer in der Gruppe befindet.

Angesichts all dessen sind sowohl sudoPolicyKit als auch PolicyKit in Bezug auf die erreichbaren Konfigurationen viel komplizierter: Sie können Aktionen konfigurieren, die ohne Kennwort ausgeführt werden können, nur von einem bestimmten Benutzer oder einer bestimmten Gruppe ausgeführt werden usw.

Wenn der von der Anwendung verwendete Mechanismus PolicyKit ist, unabhängig vom aktuell angemeldeten Benutzer, ist das erforderliche Kennwort das von Bob oder Alice (die einzigen zwei Administratorbenutzer, wenn ich das richtig verstehe). Sie können dies ändern aus der Liste, welchen Benutzer Sie für die Authentifizierung verwenden möchten.

Wenn der von der Anwendung verwendete Mechanismus ist sudo(für Administratoraufgaben, die über die GUI ausgeführt werden, wird dies immer seltener), haben Sie keine unmittelbare und einfache Möglichkeit, den Benutzer für die Authentifizierung auszuwählen.

Enzotib
quelle
1
Ich habe das Gefühl, dass ich die Situation jetzt viel besser verstehe. Vielen Dank.
Brighid McDonnell
6

Natürlich sudowäre die erste Wahl für mich in einem solchen Fall. Die wichtigsten Punkte zu sein scheint , dass die meisten (tatsächlich) Admins nicht wirklich nutzt /etc/sudoersin vollem Umfang möglich ( User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias).

Die meisten Administratoren verwenden nur einige der vorhandenen Regeln und fügen Benutzer hinzu, oder schlimmer noch, sie fügen einfach Benutzer zu der sudoGruppe hinzu, für die in Ubuntu-Setups normalerweise eine Regel vorhanden ist ( %sudo...). Dies gibt den jeweiligen Benutzern natürlich freie Hand und die volle Leistung des Superuser-Kontos.

Angesichts Ihres Kommentars:

Also habe ich sie hinzugefügt /etc/sudoers

Ich denke, Sie verwenden es auch nicht so weit wie möglich.

In einem Szenario wie Ihrem würde ich buchstäblich die wenigen Aktionen schreiben, auf die Bob beschränkt sein soll. Tatsächlich habe ich dies auf einem von mir verwalteten Server getan, damit zwei bestimmte Benutzer einen bestimmten KVM-Gast auf einem Host neu starten können. Die Skripte würden einen Hashbang mit absolutem Pfad zum Interpreter enthalten (z. B. #!/bin/dashanstelle von #!/usr/bin/env bash) und wahrscheinlich mit einer Shell ausgeführt, die an anderer Stelle für privilegierte Aufgaben ( /bin/dashoder /bin/sh) verwendet wird. Das sind nur Vorsichtsmaßnahmen. Ansonsten würde ich sicherstellen, dass alle absoluten Pfade zu Binärdateien fest codiert und so wenig wie möglich verwendet werden. ZB bei der Verwendung von bash/ dashwürde ich builtins gegenüber commands bevorzugen (siehe man bash). Sie können dies wartbar machen, indem Sie einer Variablen den absoluten Pfad zuweisen und auf das Programm verweisen, das auf dieser Variablen basiert ($VIRSHstatt /usr/bin/virsh). Wenn Sie können, überprüfen Sie den Code aller externen Skripte, bevor Sie sie aufrufen. Vor allem, wenn Sie sie in einem privilegierten Kontext aufrufen müssen. In meinem Fall beschränke ich die Benutzer auch auf ein bestimmtes Stammverzeichnis und ein bestimmtes SSH-Subsystem, da sie nur über eine sshdAuthentifizierung mit öffentlichem Schlüssel eine Verbindung zum Computer herstellen . Das brauchst du natürlich nicht.

Stellen Sie sicher, chown root: <the-script>; chmod u=rw,a=,a+rx <the-script>dass Sie verhindern, dass andere als die rootrichtigen Personen daran basteln. Seien Sie auch vorsichtig mit setuidund setgidaktivierten Bits auf Ziel-Binärdateien ( findkönnen verwendet werden, um sie zu erkennen). Nehmen wir für den Moment an, in dem sich Ihr Skript befindet /usr/sbin/priv-action.

Bearbeiten Sie nun Ihre /etc/sudoers. noexeckann verwendet werden, um andere als die explizit zulässigen Binärdateien zu verhindern. Es gibt tatsächlich viele zusätzliche Einstellungen, nicht nur die, die ich hier beschreibe. Also konsultieren Sie unbedingt man sudoers.

Jetzt bevorzuge ich es, die Benutzer ( User_Alias) in meiner sudoersDatei zu benennen , aber Sie können genauso gut eine Group_Alias( man sudoers) oder eine tatsächliche Systemgruppe (z. B. %sudo) verwenden:

# The list is comma-separated: bob,alice,...
User_Alias      LIMITED_ADMINS=bob

Fügen Sie dann einen Befehlsalias hinzu, um die Ausführung dieses bestimmten Skripts zu ermöglichen:

# The list is comma-separated: /usr/sbin/priv-action,/bin/bash,...
Cmnd_Alias      PRIV_ACTION=/usr/sbin/priv-action

Last but not least kommt die magische Linie, mit der bob(oder besser gesagt die unter aufgeführten Benutzer LIMITED_ADMINS) die privilegierten Befehle über das Skript ausführen können:

LIMITED_ADMINS  ALL=(root) PRIV_ACTION

Im Gegensatz zu den vorherigen Aliasdefinitionen bedarf diese Zeile einer Erläuterung. Lassen Sie uns zunächst die Teile in einem Zeilenmittelwert "Benutzerspezifikation" untersuchen. Hier man sudoershilft:

Die Grundstruktur einer Benutzerspezifikation ist who where = (as_whom) what.

Beispielzeile (in den meisten Ubuntu-Setups zu finden):

root    ALL=(ALL) ALL

Dies besagt, dass ein benannter Benutzer root( #0zum Binden an die UID 0) auf allen Hosts unter jedem Benutzerkontext ausgeführt werden kann, jedoch nach seinem Kennwort gefragt wird (unter der Annahme eines Standardverhaltens). Das Hinzufügen des NOPASSWDTags vor dem letzten ALLwürde es dann auch ermöglichen root, dasselbe zu tun, ohne nach einem Passwort gefragt zu werden (wie so :) root ALL=(ALL) NOPASSWD:ALL. ALList ein intrinsischer Platzhalter-Alias ​​für die verschiedenen Alias-Typen.

Aber zurück zu Bob:

LIMITED_ADMINS  ALL=(root) PRIV_ACTION

würde erlauben bobund anderen aufgelisteten Mitgliedern der User_Alias LIMITED_ADMINS(auf allen Hosts, dafür ALList das) als Benutzer root(Gruppe impliziert, könnte aber angegeben werden, siehe man sudoers) die in der Cmnd_Alias PRIV_ACTION. Es wird besser. Angenommen, Sie schreiben dieses Skript, können Sie verschiedene Parameter zulassen, wodurch vermieden wird, dass mehrere Skripte geschrieben werden. /etc/sudoersnimmt gerne Shell-ähnliche Platzhalter, um die Möglichkeiten der Übergabe von Argumenten einzuschränken.

Ich habe immer wieder festgestellt, dass Administratoren nicht sudoersdie Art und Weise verwenden, wie sie verwendet werden sollten, weshalb ich den jeweiligen "Hack" aus den beiden Büchern "Linux Server Hacks" und "Linux Server Hacks Volume Two", mit denen ich angefangen habe, sehr geschätzt habe eine anspruchsvollere Nutzung dieser großartigen Anlage.

Sie können sich für Ihren speziellen Fall alle Arten von verschlungenen Lösungen einfallen lassen - was dem Sicherheitsaspekt möglicherweise nicht gerade hilft -, aber sobald Sie das Grundvokabular von /etc/sudoersIhnen sprechen , können Sie ziemlich magische Leistungen vollbringen :)

NB: Denken Sie daran, dass Sie auch eine neue Datei darunter erstellen können, /etc/sudoers.d/wenn Sie dies wünschen. Dies setzt voraus, dass Sie /etc/sudoersdie folgende Zeile enthalten:

#includedir /etc/sudoers.d
0xC0000022L
quelle
-1

Es gibt nur einen Superuser unter Unix / Linux, sein Name ist root, aber Sudoer sind Benutzer, die root werden können. Sie sollten Gruppen verwenden:

newgrp admins

und weisen Sie dann die Benutzer dieser Gruppe zu:

chgrp alice admins

Fügen Sie dann die Admins-Gruppe zur sudoers-Konfigurationsdatei hinzu, als wäre die Gruppe ein Benutzer.

Aktualisieren

Oder Sie können einen beliebigen Benutzer zur Administratorgruppe hinzufügen:

chgrp alice admin
Francisco Valdez
quelle
Entschuldigung, ich drücke die Tabulatortaste und sende sie, ohne sie zu beenden.
Francisco Valdez
Zorched Kommentar basierend auf unvollständiger Antwort. Die aktuelle Antwort ausprobieren. Angenommen, die zusätzliche Ausstellung ist für zukünftige Leser gedacht, die vielleicht weniger mit den Aufgaben des Systemadministrators vertraut sind.
Brighid McDonnell
Natürlich wollte ich nicht übermütig sein, es gibt eine Stackexchange-Site über Sysadmin
Francisco Valdez
Ich weiß, dass ServerFault existiert. Ich frage hier, weil dies ein Ubuntu-spezifisches Verhalten ist.
Brighid McDonnell
AFAIK: adduser <user>, addgroup <group>und adduser <user> <group>ist der bevorzugte Weg , auf Debian / Ubuntu.
0xC0000022L