In unserem Team haben wir drei erfahrene Linux-Systemadministratoren, die ein paar Dutzend Debian-Server verwalten müssen. Bisher haben wir alle als Root mit der SSH-Authentifizierung mit öffentlichem Schlüssel gearbeitet. Wir hatten jedoch eine Diskussion darüber, was die beste Vorgehensweise für dieses Szenario ist, und konnten uns auf nichts einigen.
Jeder öffentliche SSH-Schlüssel wird in ~ root / .ssh / authorized_keys2 abgelegt
- Vorteil: Einfach zu bedienen, SSH-Agent-Weiterleitung funktioniert problemlos, geringer Overhead
- Nachteil: Fehlende Audits (Sie wissen nie, welche "Wurzel" eine Änderung vorgenommen hat), Unfälle sind wahrscheinlicher
Verwenden von personalisierten Konten und Sudo
Auf diese Weise würden wir uns mit personalisierten Konten mit öffentlichen SSH-Schlüsseln anmelden und sudo verwenden , um einzelne Aufgaben mit Root- Berechtigungen auszuführen . Außerdem können wir uns die Gruppe "adm" geben, mit der wir Protokolldateien anzeigen können.
- Vorteil: Gutes Auditing, sudo verhindert, dass wir zu leicht idiotische Dinge tun
- Nachteil: Die Weiterleitung von SSH-Agenten bricht ab. Dies ist problematisch, da kaum etwas als Nicht-Root ausgeführt werden kann
Verwendung mehrerer UID 0-Benutzer
Dies ist ein sehr einzigartiger Vorschlag von einem der Sysadmins. Er schlägt vor, drei Benutzer in / etc / passwd zu erstellen, die alle UID 0, aber unterschiedliche Anmeldenamen haben. Er behauptet, dass dies nicht verboten sei und dass jeder die UID 0 haben dürfe, aber trotzdem auditieren könne.
- Vorteil: Die Weiterleitung von SSH-Agenten funktioniert, die Überwachung funktioniert möglicherweise (ungetestet), kein Sudo- Ärger
- Nachteil: fühlt sich ziemlich schmutzig an - konnte es nirgends als zulässige Weise dokumentiert finden
Was würdest du vorschlagen?
-o
Flag auf deruseradd
Handbuchseite an. Mit diesem Flag können mehrere Benutzer dieselbe Benutzer-ID verwenden.Antworten:
Die zweite Option ist meiner Meinung nach die beste. Persönliche Accounts, Sudo-Zugang. Deaktivieren Sie den Root-Zugriff über SSH vollständig. Wir haben ein paar hundert Server und ein halbes Dutzend Systemadministratoren, so machen wir das.
Wie bricht die Agentenweiterleitung genau ab?
Auch wenn es so mühsam ist,
sudo
vor jeder Aufgabe etwas zu tun, können Sie mit eine Sudo-Shell aufrufensudo -s
oder mit zu einer Root-Shell wechselnsudo su -
quelle
sudo -s
. Habe ich Recht zu verstehen, dasssudo -i
es keinen Unterschied zur Verwendungsu -
oder grundlegenden Anmeldung als Root gibt, abgesehen von zusätzlichen Protokolleinträgen im Vergleich zur normalen Root-Anmeldung? Wenn dies zutrifft, wie und warum ist es besser als eine einfache Root-Anmeldung?In Bezug auf die dritte vorgeschlagene Strategie ist es
useradd -o -u userXXX
mir nicht vertraut, mehrere Benutzer als dieselbe Benutzer-ID auszuführen, außer die von @jlliagre empfohlenen Optionen zu prüfen. (Wenn Sie damit weitermachen, würde es mich interessieren, ob Sie den Beitrag bei auftretenden Problemen (oder Erfolgen) aktualisieren können ...)Ich schätze, meine erste Beobachtung bezüglich der ersten Option "Der öffentliche SSH-Schlüssel eines jeden wird in ~ root / .ssh / authorized_keys2 abgelegt" ist, dass Sie absolut nie auf einem anderen System arbeiten werden;
sudo
Die zweite Beobachtung wäre, dass Sie, wenn Sie an Systemen arbeiten, die HIPAA, PCI-DSS-Konformität oder Dinge wie CAPP und EAL anstreben, die Probleme von sudo umgehen müssen, weil;
Damit; Verwenden von personalisierten Konten und Sudo
Es ist bedauerlich, dass fast alles, was Sie als Systemadministrator auf einem Remotecomputer tun müssen, erhöhte Berechtigungen erfordert. Es ist jedoch ärgerlich, dass die meisten SSH-basierten Tools und Dienstprogramme während Ihres Aufenthalts beschädigt werden
sudo
Daher kann ich einige Tricks weitergeben, die ich benutze, um die von
sudo
Ihnen erwähnten Unannehmlichkeiten zu umgehen. Das erste Problem besteht darin, dassPermitRootLogin=no
SCP-Dateien zu einer Art PITA werden , wenn die Root-Anmeldung mit blockiert wird oder wenn Sie nicht über den Root-Schlüssel mit ssh verfügen.Problem 1 : Sie möchten Dateien von der Remote-Seite scpen, benötigen jedoch Root-Zugriff. Sie können sich jedoch nicht direkt als Root bei der Remote-Box anmelden.
Langweilige Lösung : Kopieren Sie die Dateien in das Ausgangsverzeichnis, chown und scp down.
ssh userXXX@remotesystem
,sudo su -
Etc,cp /etc/somefiles
zu/home/userXXX/somefiles
,chown -R userXXX /home/userXXX/somefiles
zu verwenden scp Dateien von Remote abzurufen.Sehr langweilig.
Weniger langweilig Lösung : sftp unterstützt das
-s sftp_server
Flag, daher können Sie wie folgt vorgehen (wenn Sie kennwortloses sudo in konfiguriert haben/etc/sudoers
).(du kannst diesen hack-around auch mit sshfs benutzen, aber ich bin mir nicht sicher, ob er empfohlen wird ... ;-)
Wenn Sie keine Sudo-Rechte ohne Passwort haben oder die oben beschriebene Methode aus irgendeinem konfigurierten Grund nicht funktioniert, kann ich eine weitere, weniger langweilige Dateiübertragungsmethode für den Zugriff auf Remote-Root-Dateien vorschlagen.
Port Forward Ninja Methode :
Melden Sie sich beim Remote-Host an, aber geben Sie an, dass der Remote-Port 3022 (kann frei und nicht für Administratoren reserviert sein, dh> 1024) an Port 22 auf der lokalen Seite zurückgeleitet werden soll.
Holen Sie sich Wurzel in der normalen Art und Weise ...
Jetzt können Sie die Dateien in die andere Richtung scpen, ohne den langweiligen, langweiligen Schritt, eine Zwischenkopie der Dateien zu erstellen.
Problem 2: SSH-Agentenweiterleitung : Wenn Sie das Root-Profil laden, z. B. durch Angabe einer Login-Shell, werden die für die SSH-Agentenweiterleitung erforderlichen Umgebungsvariablen
SSH_AUTH_SOCK
zurückgesetzt, daher ist die SSH-Agentenweiterleitung unter "defekt"sudo su -
.Halbgebackene Antwort :
Alles , was richtig eine Root - Shell lädt, wird zu Recht die Umwelt zurückzusetzen, jedoch gibt es eine leichte Behelfslösung Ihr Lieblings Einsatz , wenn Sie beide root - Berechtigung und die Fähigkeit , müssen Sie den SSH - Agenten zu verwenden , ZUGLEICH
Dies führt zu einer Art Chimären-Profil, das eigentlich nicht verwendet werden sollte, da es ein übler Hack ist , aber nützlich ist, wenn Sie Dateien vom Remote-Host als Root auf einen anderen Remote-Host übertragen müssen.
Auf jeden Fall können Sie aktivieren, dass Ihr Benutzer seine ENV-Variablen beibehalten kann, indem Sie in sudoers Folgendes festlegen:
Auf diese Weise können Sie böse hybride Anmeldeumgebungen wie diese erstellen.
Login wie gewohnt;
Erstellen Sie eine Bash-Shell, die ausgeführt wird
/root/.profile
und/root/.bashrc
. aber bewahrtSSH_AUTH_SOCK
Diese Shell hat also root-
$PATH
Rechte und root (aber ein verschachteltes Home-Verzeichnis ...)Sie können diesen Aufruf jedoch verwenden, um Dinge zu erledigen, die Remote-Sudo-Root erfordern, aber auch den SSH-Agentenzugriff wie folgt;
quelle
Die 3. Option sieht ideal aus - aber haben Sie es tatsächlich ausprobiert, um zu sehen, was passiert? Während Sie möglicherweise die zusätzlichen Benutzernamen im Authentifizierungsschritt sehen, wird bei jeder umgekehrten Suche derselbe Wert zurückgegeben.
Es ist keine gute Idee, Root-Direktzugriff auf SSH zuzulassen, auch wenn Ihre Computer nicht mit dem Internet verbunden sind oder starke Passwörter verwenden.
Normalerweise verwende ich 'su' anstelle von sudo für den Root-Zugriff.
quelle
root
Benutzer aus, wennroot
Benutzer der erste Benutzer/etc/passwd
mit UID 0 ist. Ich stimme mit jlliagre überein. Der einzige Nachteil, den ich sehe, ist, dass jeder Benutzer einroot
Benutzer ist und es manchmal verwirrend sein kann, zu verstehen, wer was getan hat.Ich benutze (1), aber ich habe etwas eingegeben
Ich kann sehen, dass es schlimm genug ist, wenn Sie mehr als eine Handvoll Admins haben.
(2) Ist wahrscheinlich ausgereifter - und Sie können durch sudo su vollwertige Wurzel werden -. Unfälle sind dennoch möglich.
(3) Ich würde nicht mit einem Lastkahnpfahl anfassen. Ich habe es auf Suns verwendet, um ein Nicht-Barebone-Sh-Root-Konto zu haben (wenn ich mich richtig erinnere), aber es war nie robust - und ich bezweifle, dass es sehr überprüfbar wäre.
quelle
Antworte auf jeden Fall 2.
Bedeutet, dass Sie SSH-Zugriff als zulassen
root
. Wenn diese Maschine in irgendeiner Weise öffentlich ist, ist dies nur eine schreckliche Idee; Als ich SSH auf Port 22 ausführte, hatte mein VPS mehrere Versuche pro Stunde, sich als root zu authentifizieren. Ich hatte ein grundlegendes IDS eingerichtet, um IPs zu protokollieren und zu sperren, bei denen mehrere Versuche fehlgeschlagen sind, aber sie kamen immer wieder. Zum Glück hatte ich den SSH-Zugriff als Root-Benutzer deaktiviert, sobald ich mein eigenes Konto und mein eigenes sudo konfiguriert hatte. Darüber hinaus haben Sie so gut wie keinen Audit-Trail.Ermöglicht den Root-Zugriff nach Bedarf. Ja, Sie haben als Standardbenutzer kaum Rechte, aber genau das möchten Sie. Wenn ein Account kompromittiert wird, möchten Sie, dass seine Fähigkeiten eingeschränkt werden. Sie möchten, dass ein Superuser-Zugriff eine erneute Kennworteingabe erfordert. Darüber hinaus kann der sudo-Zugriff über Benutzergruppen gesteuert und bei Bedarf auf bestimmte Befehle beschränkt werden, sodass Sie mehr Kontrolle darüber haben, wer auf was zugreifen kann. Darüber hinaus können Befehle, die als sudo ausgeführt werden, protokolliert werden, sodass ein viel besserer Prüfpfad bereitgestellt wird, wenn Probleme auftreten. Oh, und führen Sie nicht einfach "sudo su -" aus, sobald Sie sich angemeldet haben. Das ist eine schreckliche, schreckliche Übung.
Die Idee Ihres Sysadmin ist schlecht. Und er sollte sich schlecht fühlen. Nein, * nix-Maschinen werden Sie wahrscheinlich nicht davon abhalten, aber sowohl Ihr Dateisystem als auch praktisch jede Anwendung erwartet von jedem Benutzer eine eindeutige UID. Wenn Sie diesen Weg beschreiten, kann ich Ihnen versichern, dass Sie auf Probleme stoßen. Vielleicht nicht sofort, aber irgendwann. Beispielsweise verwenden Dateien und Verzeichnisse trotz der Anzeige ansprechender Anzeigenamen UID-Nummern, um ihre Besitzer zu bestimmen. Wenn Sie auf ein Programm stoßen, das Probleme mit doppelten UIDs hat, können Sie später nicht einfach eine UID in Ihrer passwd-Datei ändern, ohne ernsthafte manuelle Bereinigungen des Dateisystems vornehmen zu müssen.
sudo
ist der Weg nach vorne. Es kann zusätzlichen Aufwand verursachen, wenn Befehle als Root ausgeführt werden, bietet Ihnen jedoch eine sicherere Box, sowohl in Bezug auf den Zugriff als auch in Bezug auf die Überwachung.quelle
Auf jeden Fall Option 2, aber verwenden Sie Gruppen, um jedem Benutzer so viel Kontrolle wie möglich zu geben, ohne sudo verwenden zu müssen. sudo vor jedem Befehl verliert die Hälfte des Nutzens, weil Sie sich immer in der Gefahrenzone befinden. Wenn Sie die relevanten Verzeichnisse ohne sudo für die Sysadmins beschreibbar machen, kehren Sie sudo zu der Ausnahme zurück, durch die sich jeder sicherer fühlt.
quelle
Früher gab es kein Sudo. Infolgedessen war es die einzige verfügbare Alternative, mehrere UID 0-Benutzer zu haben. Aber es ist immer noch nicht so gut, insbesondere mit der Protokollierung basierend auf der UID, um den Benutzernamen zu erhalten.
Heutzutage ist sudo die einzig geeignete Lösung. Vergiss alles andere.
quelle
Es ist faktisch zulässig dokumentiert. BSD-Unices haben seit langer Zeit ihren Toor-Account und Bash-User werden in der Regel auf Systemen akzeptiert, auf denen csh Standard ist (akzeptiertes Fehlverhalten;)
quelle
Vielleicht bin ich komisch, aber Methode (3) kam mir auch zuerst in den Sinn. Vorteile: Sie hätten jeden Benutzernamen in den Protokollen und würden wissen, wer was als root getan hat. Nachteile: Sie sind die ganze Zeit Wurzeln, so dass Fehler katastrophal sein können.
Ich möchte fragen, warum Sie alle Administratoren benötigen, um root-Zugriff zu haben. Alle drei von Ihnen vorgeschlagenen Methoden haben einen entscheidenden Nachteil: Sobald ein Administrator eine
sudo bash -l
oder mehrere Methoden ausführtsudo su -
, verlieren Sie die Fähigkeit, nachzuverfolgen, wer was tut, und danach kann ein Fehler katastrophal sein. Im Falle eines möglichen Fehlverhaltens kann dies sogar noch viel schlimmer werden.Vielleicht möchten Sie stattdessen einen anderen Weg einschlagen:
Auf diese Weise wäre Martin in der Lage, Postfix sicher zu handhaben, und im Falle eines Fehlers oder Fehlverhaltens würden Sie nur Ihr Postfix-System verlieren, nicht den gesamten Server.
Dieselbe Logik kann auf jedes andere Subsystem wie Apache, MySQL usw. angewendet werden.
Natürlich ist dies zu diesem Zeitpunkt rein theoretisch und möglicherweise schwer einzurichten. Es sieht nach einem besseren Weg aus. Zumindest für mich. Wenn jemand dies versucht, lass es mich wissen, wie es gelaufen ist.
quelle