Frage Linux: Einrichten für remote sysadmin


Von Zeit zu Zeit bekomme ich die ein oder andere Anfrage, Remote-Support, Fehlerbehebung und / oder Performance-Tuning auf Linux-Systemen anzubieten.

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

Auf der anderen Seite wenden sich kleine Firmen und Individuen immer an mich, um sie mit dem zu beauftragen, was sie tun müssen, um mich zu gründen. 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 brauche ich Zugriff auf Root-Ebene und wer den Zugang für mich einrichten wird, ist kein Expertensystemadministrator. Ich möchte nicht ihr Root-Passwort und ich bin mir auch ziemlich sicher meine Handlungen wird nicht böswillig sein, aber was ziemlich einfache Anweisungen sollte ich geben:

  • Richten Sie ein Konto ein und tauschen Sie Ihre Anmeldeinformationen sicher aus
  • Richten Sie den Root-Zugriff (sudo) ein
  • Beschränken Sie den Zugriff auf mein Konto
  • Audit-Trail bereitstellen

(Und ja, ich bin mir dessen bewusst und warne diese Kunden immer, dass ich, wenn ich einmal über Administratorzugriff verfüge, alle bösartigen Aktionen verstecken kann, aber angenommen, ich habe nichts zu verbergen und aktiv an der Erstellung eines Prüfprotokolls teilzunehmen.)

Was kann in den folgenden Schritten verbessert werden?


Mein aktueller Befehlssatz:

Richten Sie ein Konto ein und tauschen Sie Ihre Anmeldeinformationen sicher aus

Ich gebe einen Passwort-Hash und frage, dass mein Konto mit diesem verschlüsselten Passwort eingerichtet ist, so dass wir kein Klartext-Passwort übertragen müssen, ich bin der einzige, der das Passwort kennt und wir fangen nicht damit an ein vorhersagbares schwaches Passwort.

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

Ich stelle einen öffentlichen Schlüssel SSH (spezifisches Schlüsselpaar pro Client) zur Verfügung und frage, ob sie mein Konto mit diesem Schlüssel einrichten:

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 Kunden, sudo für mich einzurichten sudo sudoedit oder indem Sie ihren bevorzugten Editor verwenden und anhängen /etc/sudoers:

hbruijn ALL=(ALL) ALL

Beschränken Sie den Zugriff auf mein Konto

Normalerweise erlaubt der Client weiterhin passwortbasierte Logins und ich bitte sie, die folgenden zwei Zeilen hinzuzufügen /etc/ssh/sshd_config um mein Konto zumindest auf SSH-Schlüssel zu beschränken:

Match user hbruijn
PasswordAuthentication no

Abhängig vom Client werde ich meinen gesamten SSH-Zugang über einen einzigen Bastion-Host routen, um immer eine einzige statische IP-Adresse (zum Beispiel 192.168.1.2) bereitzustellen und / oder den IP-Adressbereich, den mein ISP verwendet (zum Beispiel 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).

Du hast diese IP-Adressen schon gesehen from= Beschränkung in der ~.ssh/authorized_keys Datei, die die Hosts begrenzt, von denen mein Schlüssel für den Zugriff auf ihre Systeme verwendet werden kann.

Audit-Trail bereitstellen

Bis jetzt hat mich noch kein Kunde darum gebeten, und ich habe nichts über das Folgende hinaus getan, um meinen Arsch zu bedecken:

Ich versuche es konsequent zu nutzen sudo mit einzelnen Befehlen und versuchen, die Verwendung zu verhindern sudo -i oder sudo su -. Ich versuche nicht zu benutzen sudo vim /path/to/file  aber benutze es sudoedit stattdessen.

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

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 meistens aufgegeben, meine Arbeitsumgebungen anzupassen, das Einzige, was ich wirklich tue, ist Folgendes in meinem ~/.bash_profile Erhöhung der Bash-Historie und Einbeziehung von Zeitstempeln:

export HISTSIZE=99999999999
export HISTFILESIZE=99999999999
export HISTIGNORE="w:ls:ls -lart:dmesg:history:fg"
export HISTTIMEFORMAT='%F %H:%M:%S  '
shopt -s histappend

50
2017-09-26 11:54


Ursprung


Sie können sich anmelden (einfach nachträglich ändern) und sogar Sitzungen teilen screenIn extremen Fällen kann Ihr Kunde live sehen, was Sie 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:


Das einzige, was mir in den Sinn kommt, wäre hinzuzufügen --expiredate zum adduser Anruf.
Damit weiß der Kunde, dass Ihr Zugriff automatisch zu einem bestimmten Zeitpunkt abläuft.

Er muss dir immer noch vertrauen, da du Root-Zugang hast und trotzdem das Verfalls-Flag entfernen kannst.


24
2017-09-26 12:34





Sie können Ihre Sitzungen mit dem Skript (1) Nützlichkeit.

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

dann alles ist in der Sitzung.log.


15
2017-09-26 16:29



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 hinzufügen? - HBruijn
Ich denke, du könntest beides tun - ich habe es nur einmal benutzt, meistens kümmert es die Leute nicht wirklich. - Iain


Da Sie sich bereits mit einem öffentlichen SSH-Schlüssel anmelden, würde es die Dinge etwas straffen, wenn Sie keinen Passwort-Hash angeben würden. Sagen Sie ihnen stattdessen, sie sollten es benutzen adduser --disabled-password (äquivalent, useradd -p '!', Denke ich), was effektiv entspricht PasswordAuthentication no Aus diesem Grund gibt es keine Chance, dass jemand, der nach Ihrer E-Mail sucht, den Kennwort-Hash brute-force und sich wie Sie einloggen kann.


7
2017-09-26 15:51



Der Zusatz des Match user hbruijn \n PasswordAuthentication no sshd_config sollte verhindern, dass sich jemand remote mit meinem entschlüsselten Passwort anmeldet (möglicherweise könnten lokale Benutzer es mit verwenden) su - hbruijn) aber soweit ich weiß muss ich noch ein gültiges Passwort dafür haben sudo Zwecke obwohl. Vielleicht sollte ich einfach mein Passwort nach dem Einloggen zurücksetzen? - HBruijn
Oh, guter Punkt über Sudo. Ich bin mir nicht sicher, ob ein Konto in --disabled-password Status kann durch Ausführen ein Passwort vergeben werden passwd von diesem Konto. - zwol
Was hält auch jemanden davon ab, den von Ihnen bereitgestellten Passwort-Hash zu hören? Dieser Teil ist ein schwacher Link, der die Verwendung von SSH-Schlüsseln untergräbt, bei denen es keine Rolle spielt, ob Ihr öffentlicher Schlüssel abgefangen wird. - JamesRyan
Könnte diese schwache Verbindung gelöst werden, indem der Client auch eine Zeile in der sudoers-Datei hinzufügt hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn? - Dezza


Warum sollten Sie überhaupt ein Passwort angeben, wenn Sie öffentliche / private Schlüssel verwenden?

Öffentliche Schlüssel sollen geteilt werden, also sollten Sie zum sicheren Austausch von Anmeldeinformationen, nicht Hash-Passwörter verwenden.

sudo useradd --disabled-password hbruijn

Wenn Sie Ihren öffentlichen Schlüssel senden, verifizieren Sie den Fingerabdruck über einen zweiten Kanal, z. B. einen Telefonanruf, damit Sie wissen, dass niemand auf dem Weg dorthin den Fingerabdruck geändert hat.

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

hbruijn ALL=(ALL) NOPASSWD:ALL

Wenn Sie kein Passwort für sudo haben und ein Passwort wirklich wollen, müssen Sie Ihr Hash-Passwort nicht senden, das Konto ohne Passwort erstellen, Ihren öffentlichen Schlüssel einrichten und Ihr Konto einmal einrichten eingerichtet können Sie sich über SSH anmelden und ausführen passwd um ein eigenes Passwort zu setzen.


2
2017-09-30 09:12