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.