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/sudoers
weil 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?
quelle
sudoers
Datei machen. Weitere Informationen finden Sie in der Manpage .sudoers
: Es ist aus Sicherheitsgründen kein erster Ausweg. Siehe auch die Antwort von enzotib - ein Teil des Problems war die Verwechslung zwischensudo
und PolicyKit.Antworten:
Lassen Sie uns zunächst darauf hinweisen, dass privilegierte Aktionen für einen Nicht-Root- Benutzer über zwei verschiedene Mechanismen zulässig sind .
sudo
PolicyKit
Der erste wird verwendet, wenn Sie explizit einen Befehl mit
sudo
oder ein Menüelement ausführen, mit dem der Befehl umbrochen istgksu
(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 :)
Sie können PolicyKit anhand des kleinen schwarzen Dreiecks und der Bezeichnung Details identifizieren . Wie Sie sehen können,
admin
kö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
sudo
PolicyKit 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.quelle
Natürlich
sudo
wä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/sudoers
in 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
sudo
Gruppe 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:
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/dash
anstelle von#!/usr/bin/env bash
) und wahrscheinlich mit einer Shell ausgeführt, die an anderer Stelle für privilegierte Aufgaben (/bin/dash
oder/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 vonbash
/dash
würde ichbuiltin
s gegenübercommand
s bevorzugen (sieheman 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 ($VIRSH
statt/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 einesshd
Authentifizierung 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 dieroot
richtigen Personen daran basteln. Seien Sie auch vorsichtig mitsetuid
undsetgid
aktivierten Bits auf Ziel-Binärdateien (find
kö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
.noexec
kann 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 unbedingtman sudoers
.Jetzt bevorzuge ich es, die Benutzer (
User_Alias
) in meinersudoers
Datei zu benennen , aber Sie können genauso gut eineGroup_Alias
(man sudoers
) oder eine tatsächliche Systemgruppe (z. B.%sudo
) verwenden:Fügen Sie dann einen Befehlsalias hinzu, um die Ausführung dieses bestimmten Skripts zu ermöglichen:
Last but not least kommt die magische Linie, mit der
bob
(oder besser gesagt die unter aufgeführten BenutzerLIMITED_ADMINS
) die privilegierten Befehle über das Skript ausführen können: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 sudoers
hilft:Beispielzeile (in den meisten Ubuntu-Setups zu finden):
Dies besagt, dass ein benannter Benutzer
root
(#0
zum Binden an die UID0
) auf allen Hosts unter jedem Benutzerkontext ausgeführt werden kann, jedoch nach seinem Kennwort gefragt wird (unter der Annahme eines Standardverhaltens). Das Hinzufügen desNOPASSWD
Tags vor dem letztenALL
würde es dann auch ermöglichenroot
, dasselbe zu tun, ohne nach einem Passwort gefragt zu werden (wie so :)root ALL=(ALL) NOPASSWD:ALL
.ALL
ist ein intrinsischer Platzhalter-Alias für die verschiedenen Alias-Typen.Aber zurück zu Bob:
würde erlauben
bob
und anderen aufgelisteten Mitgliedern derUser_Alias LIMITED_ADMINS
(auf allen Hosts, dafürALL
ist das) als Benutzerroot
(Gruppe impliziert, könnte aber angegeben werden, sieheman sudoers
) die in derCmnd_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/sudoers
nimmt gerne Shell-ähnliche Platzhalter, um die Möglichkeiten der Übergabe von Argumenten einzuschränken.Ich habe immer wieder festgestellt, dass Administratoren nicht
sudoers
die 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/sudoers
Ihnen 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/sudoers
die folgende Zeile enthalten:quelle
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:
und weisen Sie dann die Benutzer dieser Gruppe zu:
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:
quelle
adduser <user>
,addgroup <group>
undadduser <user> <group>
ist der bevorzugte Weg , auf Debian / Ubuntu.