Linux: Für Remote-Sysadmin eingerichtet

51

Hin und wieder erhalte ich die gelegentliche Aufforderung, Remote-Support, Fehlerbehebung und / oder Leistungsoptimierung auf Linux-Systemen bereitzustellen.

Größere Unternehmen haben oft bereits gut etablierte Verfahren, um Lieferanten / Lieferanten den Fernzugriff zu ermöglichen, und ich muss mich nur an diese halten. (Zum Besseren oder zum Schlechteren.)

Auf der anderen Seite wenden sich kleine Unternehmen und Einzelpersonen immer an mich, um ihnen zu erklären, was sie tun müssen, um mich einzurichten. In der Regel sind ihre Server direkt mit dem Internet verbunden und die vorhandenen Sicherheitsmaßnahmen bestehen aus den Standardeinstellungen für die jeweilige Linux-Distribution.

Fast immer benötige ich Root-Zugriff und wer auch immer den Zugriff für mich einrichten wird, ist kein erfahrener Systemadministrator. Ich möchte nicht ihr root-Passwort und bin mir auch ziemlich sicher, dass meine Handlungen nicht bösartig sind, aber welche einigermaßen einfachen Anweisungen sollte ich geben:

  • Richten Sie ein Konto ein und tauschen Sie sicher Anmeldeinformationen aus
  • Richten Sie den Root-Zugriff (sudo) ein
  • Zugriff auf mein Konto einschränken
  • Prüfpfad bereitstellen

(Und ja, ich bin mir bewusst und warne diese Clients immer, dass das Verbergen von böswilligen Aktionen, sobald ich über Administratorzugriff verfüge, trivial ist. Nehmen wir jedoch an, dass ich nichts zu verbergen habe und mich aktiv an der Erstellung eines Prüfpfads beteilige.)

Was kann an den folgenden Schritten verbessert werden?


Mein aktueller Befehlssatz:

Richten Sie ein Konto ein und tauschen Sie sicher Anmeldeinformationen aus

Ich gebe einen Passwort-Hash ein und frage, ob mein Konto mit diesem verschlüsselten Passwort eingerichtet ist, damit wir kein Klartext-Passwort senden müssen. Ich bin der einzige, der das Passwort kennt, und wir beginnen nicht mit ein vorhersehbares schwaches Passwort.

sudo useradd -p '$1$********' hbruijn

Ich stelle ein öffentliches Schlüssel-SSH (spezifisches Schlüsselpaar pro Client) zur Verfügung und bitte sie, mein Konto mit diesem Schlüssel einzurichten:

sudo su - hbruijn
mkdir -p ~/.ssh
chmod 0700 ~/.ssh
echo 'from="10.80.0.0/14,192.168.1.2" ssh-rsa AAAAB3NzaC1y***...***== hbruijn@serverfault' >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys 

Richten Sie den Root-Zugriff (sudo) ein

Ich bitte den Client, sudo für mich mit sudo sudoeditoder unter Verwendung seines bevorzugten Editors einzurichten und Folgendes anzuhängen /etc/sudoers:

hbruijn ALL=(ALL) ALL

Zugriff auf mein Konto einschränken

Normalerweise lässt der Client weiterhin kennwortbasierte Anmeldungen zu, und ich fordere ihn auf, die folgenden beiden Zeilen hinzuzufügen /etc/ssh/sshd_config, um mein Konto zumindest auf SSH-Schlüssel zu beschränken:

Match user hbruijn
PasswordAuthentication no

Je nach Client leite ich meinen gesamten SSH-Zugriff über einen einzelnen Bastion-Host, um immer eine einzelne statische IP-Adresse (z. B. 192.168.1.2) und / oder den IP-Adressbereich bereitzustellen, den mein ISP verwendet (z. B. 10.80). 0,0 / 14). Der Client muss diese möglicherweise zu einer Firewall-Whitelist hinzufügen, wenn der SSH-Zugriff eingeschränkt ist (meistens ist ssh jedoch ungefiltert).

Sie haben diese IP-Adressen bereits als from=Einschränkung in der ~.ssh/authorized_keysDatei gesehen, die die Hosts einschränkt, von denen aus mein Schlüssel für den Zugriff auf ihre Systeme verwendet werden kann.

Prüfpfad bereitstellen

Bisher hat mich kein Kunde danach gefragt, und ich habe nichts Spezielles getan, um meinen Arsch zu bedecken:

Ich versuche konsequent sudomit einzelnen Befehlen umzugehen und versuche die Verwendung von sudo -ioder zu verhindern sudo su -. Ich versuche nicht zu verwenden, sudo vim /path/to/file sondern zu verwenden sudoedit.

Standardmäßig werden dann alle privilegierten Aktionen in syslog (und /var/log/secure) protokolliert :

Sep 26 11:00:03 hostname sudo:  hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=jboss ; COMMAND=sudoedit /usr/share/jbossas/domain/configuration/domain.xml  
Sep 26 11:00:34 hostname sudo:  hbruijn : TTY=pts/0 ; PWD=/home/hbruijn ; USER=root ; COMMAND=/usr/bin/tail -n 5 /var/log/messages

Ich habe es größtenteils aufgegeben, meine Arbeitsumgebungen anzupassen. Das Einzige, was ich wirklich tue, ist Folgendes, um ~/.bash_profileden Bash-Verlauf zu verbessern und Zeitstempel einzuschließen:

export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S  '
shopt -s histappend
HBruijn
quelle
8
Sie können sich anmelden (einfach nachträglich ändern) und Sitzungen freigeben screen, sodass Ihr Kunde in extremen Fällen live beobachten kann, was Sie gerade tun.
Sven
Wenn Sie einen besseren Audit-Trail hinzufügen möchten, sollten Sie sie anweisen, die Remote-Protokollierung zu aktivieren, wenn sie die Möglichkeit haben
Fredi

Antworten:

24

Das einzige, was mir in den Sinn kommt, wäre --expiredate, den adduserAnruf zu ergänzen .
Der Kunde weiß damit, dass Ihr Zugang zu einem festgelegten Zeitpunkt automatisch verfällt.

Er muss Ihnen weiterhin vertrauen, da Sie über Root-Zugriff verfügen und das Ablaufflag entfernen können.

Schwindler
quelle
15

Sie können Ihre Sitzungen mit dem Dienstprogramm script (1) aufzeichnen .

$ script session.log
Script started, file is session.log
$ ls
file1  session.log
exit
Script done, file is session.log

dann ist alles in session.log.

user9517 unterstützt GoFundMonica
quelle
Würden Sie empfehlen, das auf Ihrem eigenen Host auszuführen, bevor Sie die SSH-Sitzung auf einem Remote-System starten, oder es als Teil meines Profils auf dem Remote-System einschließen?
HBruijn
1
Ich denke, du könntest es auch tun - ich habe es nur einmal benutzt, meistens ist es den Leuten egal.
user9517 unterstützt GoFundMonica
7

Da Sie sich bereits mit einem öffentlichen SSH-Schlüssel anmelden, würde dies die Situation etwas verschärfen, wenn Sie keinen Kennwort-Hash angeben. Sagen Sie ihnen stattdessen, sie sollen adduser --disabled-password(was useradd -p '!'meiner Meinung nach äquivalent zu PasswordAuthentication nodiesem Konto ist) verwenden, und es besteht keine Chance, dass jemand, der in Ihrer E-Mail herumschnüffelt, den Passwort-Hash brutal erzwingt und sich als Sie anmeldet.

zwol
quelle
3
Das Hinzufügen von Match user hbruijn \n PasswordAuthentication nozu sshd_config sollte verhindern, dass sich jemand mit meinem entschlüsselten Passwort aus der Ferne anmeldet (möglicherweise können lokale Benutzer damit arbeiten su - hbruijn), aber soweit ich weiß, muss ich dennoch ein gültiges Passwort für die sudoZwecke haben. Vielleicht sollte ich mein Passwort nach dem Einloggen einfach zurücksetzen?
HBruijn
Oh, ein guter Punkt über Sudo. Ich bin nicht sicher, ob einem Konto im --disabled-passwordStatus ein Kennwort zugewiesen werden kann, indem es passwdvon diesem Konto aus ausgeführt wird.
zwol
Und was hindert jemanden daran, den von Ihnen angegebenen Passwort-Hash abzuhören? Dieser Teil ist ein schwaches Glied, das die Verwendung von SSH-Schlüsseln untergräbt, wenn es nicht darauf ankommt, ob Ihr öffentlicher Schlüssel abgefangen wird.
James Ryan
3
Könnte diese Schwachstelle behoben werden, indem der Client auch eine Zeile in die sudoers-Datei einfügt, wie z hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn.
Dezza
2

Warum überhaupt ein Kennwort angeben, wenn Sie öffentliche / private Schlüssel verwenden möchten?

Öffentliche Schlüssel sollen gemeinsam genutzt werden. Verwenden Sie diese Option, um Anmeldeinformationen sicher auszutauschen, und nicht, um Kennwörter zu hacken.

sudo useradd --disabled-password hbruijn

Überprüfen Sie beim Senden Ihres öffentlichen Schlüssels den Fingerabdruck über einen zweiten Kanal, z. B. ein Telefonanruf, damit Sie wissen, dass niemand ihn auf dem Weg zum Eingang geändert hat.

Da Sie jetzt kein Passwort haben, um sudo zu verwenden, müssen Sie auch Ihre Zeile in der sudoers-Datei auf ändern

hbruijn ALL=(ALL) NOPASSWD:ALL

Wenn Sie kein Passwort für sudo haben und wirklich ein Passwort möchten, müssen Sie Ihr Hash-Passwort trotzdem nicht senden, das Konto ohne Passwort erstellen lassen, Ihren öffentlichen Schlüssel festlegen und sobald Ihr Konto eingerichtet ist Einrichten Sie können sich über ssh anmelden und ausführen passwd, um Ihr eigenes Passwort festzulegen.

Jens Timmerman
quelle