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 sudoedit
oder 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_keys
Datei 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 sudo
mit einzelnen Befehlen umzugehen und versuche die Verwendung von sudo -i
oder 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_profile
den 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
screen
, sodass Ihr Kunde in extremen Fällen live beobachten kann, was Sie gerade tun.Antworten:
Das einzige, was mir in den Sinn kommt, wäre
--expiredate
, denadduser
Anruf 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.
quelle
Sie können Ihre Sitzungen mit dem Dienstprogramm script (1) aufzeichnen .
dann ist alles in session.log.
quelle
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
(wasuseradd -p '!'
meiner Meinung nach äquivalent zuPasswordAuthentication no
diesem 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.quelle
Match user hbruijn \n PasswordAuthentication no
zu sshd_config sollte verhindern, dass sich jemand mit meinem entschlüsselten Passwort aus der Ferne anmeldet (möglicherweise können lokale Benutzer damit arbeitensu - hbruijn
), aber soweit ich weiß, muss ich dennoch ein gültiges Passwort für diesudo
Zwecke haben. Vielleicht sollte ich mein Passwort nach dem Einloggen einfach zurücksetzen?--disabled-password
Status ein Kennwort zugewiesen werden kann, indem espasswd
von diesem Konto aus ausgeführt wird.hbruijn ALL=(ALL) NOPASSWD: /usr/bin/passwd hbruijn
.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.quelle