Wie man scp sicher zulässt, aber nicht ssh

7

Ich arbeite mit einem Mac Book Pro (genannt foo). Ich habe einen Server, auf dem meine Kunden große Dateien scp. (Bar genannt). Ich ssh häufig in die Leiste und scp eine Datei (genannt Buzz) auf meinen Mac.

bob@foo$ ssh bar  
Last login: Fri Aug 23 14:49:32 2013 from foo  
bob@bar$ scp /guest/buzz bob@foo:~
Password: 

Ich möchte mein Passwort nicht jedes Mal eingeben, wenn ich eine Datei auf meinen Mac zurückschicke, da ich dies schließlich automatisieren werde.
Ich weiß, dass ich SSH-Schlüssel einrichten könnte , aber ich bin besorgt, dass jemand, der hackt bar, leicht darauf zugreifen kann foo. (Korrigieren Sie mich, wenn ich falsch liege)

Gibt es eine Möglichkeit, eine Datei ohne Kennwort von bar nach foo zu kopieren, ohne dass jemand vollen Shell-Zugriff auf meinen Mac erhält, wenn der Server kompromittiert wird?

Hinweis: Ich denke, dass das Einrichten eines neuen Benutzers auf meinem Mac und das Deaktivieren des Shell-Zugriffs für diesen Benutzer möglicherweise funktioniert, aber ich denke, es gibt einen besseren Weg. Ich möchte lieber keine Benutzer hinzufügen, wenn dies möglich ist.

Spuder
quelle
1
Sie liegen falsch :) Die Verwendung von Schlüsseln ist der sicherste Ansatz: Selbst wenn ein Angreifer die Leiste kompromittiert hätte, hätte er nur den öffentlichen Schlüssel von foo.
Jasonwryan
1
nein, bar scping to foo, also ist foo derjenige mit dem öffentlichen Schlüssel. wenn ich SSH-Schlüssel richtig verstehe.
strugee
1
Nur weil das OP ssh in der Bar ist, um zurück zu foo zu scp ... Mit Schlüsseln würden sie nur (von foo)scp bar:file .
jasonwryan
Überprüfen Sie rsync auf Ihre Aufgabe?
Unschuldige Welt
Ich denke auch wenn Sie nur SCP aber kein SSH zulassen. Wenn die Bar von einem Mann kompromittiert wird, der klug genug ist, kann er möglicherweise auch ohne SSH auf foo zugreifen. Es gibt viele Möglichkeiten, dies zu tun, wie zum Beispiel SCP-überschreiben Sie Ihr ~ / .bash_profile in der Leiste und warten Sie bis zu Ihrer nächsten Anmeldung, damit bashrc einen Prozess startet, der eine Hintertür öffnet, aber ich bin sicher, ein professioneller Hacker hätte es noch besser Ideen als meine.
Wiederholung

Antworten:

6

Ok, du hast alles durcheinander gebracht.

Soweit ich verstanden habe, möchten Sie nur eine Datei von bar nach foo kopieren :

[file]  *bar* ------copy------> *foo*

Um genau das zu tun, müssen Sie zuerst sshauf die Bar dann scpDatei foo :

        *bar* -------ssh------> *foo* [file]

dann:

        *foo* ----scp[file]---> *bar*

Wenn Sie so vorgehen, tun Sie es unsicher und falsch . Alles, was Sie tun müssen, ist, die Datei direkt an Sie zurückzusenden:

bob@foo$ scp bob@bar:/guest/buzz ~

mit anderen Worten:

        *foo* <---scp[file]---- *bar*

Jetzt müssen einige Probleme gelöst werden…

Woher wissen, wo sich die Datei befindet?

a) Verwenden Sie SSH in einem anderen Terminal

Öffnen Sie einfach ein zweites Terminal, SSH , um zu sperren , suchen Sie Ihre Datei und kopieren Sie den Pfad zum ersten.

b) Verwenden Sie SFTP

SFTP (in keiner Weise mit FTP oder FTPS verbunden!) Ist in OpenSSH implementiert und standardmäßig verfügbar. Einfach SFTP zum Server und verwenden Sie die FTP-ähnlichen Befehle, um Ihre Dateien und getdiese zu finden .

c) Verwenden Sie eine GUI

Filezilla oder Nautilus können beispielsweise entfernte SFTP / SSH-Freigaben durchsuchen.

d) Richten Sie Zertifikate ein

Wenn Sie eine Zertifikatverbindung einrichten, können Sie die Registerkarte sowohl auf der lokalen Seite als auch auf der Remote-Seite vervollständigen! Mit Ihrem buzzBeispiel können Sie beispielsweise Folgendes tun:

bob@foo$ scp bob@bar:/guest/[tab][tab]

und warten Sie ein wenig auf die Liste der Dateien im Ordner remote / guest /.

Wie richte ich SSH mit Zertifikaten ein?

a) Falls noch nicht geschehen, generieren Sie Ihr persönliches RSA-Schlüsselpaar

Wenn Sie den OpenSSH-Client installiert haben, können Sie dies durch Eingabe tun

bob@foo$ ssh-keygen -t rsa

(Alle verfügbaren Optionen finden Sie im Handbuch oder online.) Möglicherweise werden Sie nach einem Passwort gefragt. Dies ist nicht das Kennwort Ihres lokalen Kontos, sondern ein optionales Kennwort, mit dem Sie den zu generierenden privaten Schlüssel verschlüsseln können .

Eigentlich werden Sie 2 Dateien generieren:

  • /Users/[yourusername‹/.ssh/id_rsa
  • /Users/[yourusername‹/.ssh/id_rsa.pub

Der erste, * id_rsa *, sollte privat sein . Standardmäßig ssh-keygenwird alles getan, um eine Veröffentlichung zu vermeiden (mithilfe der Zugriffsberechtigung für das Dateisystem). Aus diesem Grund werden Sie auch nach einem (optionalen) Passwort gefragt. Sei damit nicht zu paranoid, aber erinnere dich einfach an * id_rsa * == persönlicher Schlüssel == privat . Dieser Schlüssel sollte niemals Ihren Computer verlassen.

Der zweite ist öffentlich. Es erfordert eine enorme Menge an Computerleistung, um Ihren privaten Schlüssel von diesem öffentlichen Zertifikat zurückzugewinnen (ich meine wirklich HUUUUUUGE). Dies ist absolut sicher, um es mit der ganzen Welt zu teilen. Selbst in dem sehr unwahrscheinlichen Fall, dass die NSA oder dergleichen wirklich Millionen von Dollar ausgeben möchten, um Ihren öffentlichen Schlüssel zu knacken, ist Ihr MacBook immer noch sicher… (oder auch nicht. Wenn jemand so viel ausgeben möchte, sind Sie dabei Ärger :)

Dieses öffentliche Zertifikat wird tatsächlich in die Remote-Serverleiste eingefügt .

b) Wie stelle ich mein öffentliches Zertifikat auf den Server?

Zwei Optionen.

  1. Verwenden Sie, ssh-copy-idfalls verfügbar : bob@foo$ ssh-copy-id bob@bar. Erledigt.
  2. Wenn dies nicht der Fall ist , kopieren Sie ~/.ssh/id_rsa.pubin den Balken :

    bob @ foo $ sftp ~ / .ssh / id_rsa.pub bob @ bar: pub_cert

(hier kopiert Sie Ihr öffentliches Zertifikat id_rsa.pubaus .ssh/, in Ihrem persönlichen ~Ordner auf die Remote - Computer - Bar im Home - Ordnern des Benutzers bob . Dies ist die Standardeinstellung. Beachten Sie auch , dass id_rsa.pubauf umbenannt wurde pub_certin dem Prozess. Früher habe ich sftpnur zu zeigen , dass es genau so verwendet werden kann scp).

Jetzt kopieren wir dieses Zertifikat an den richtigen Ort:

bob@foo$ ssh bob@bar

Jetzt befinden Sie sich in Bobs persönlichem Ordner in der Leiste .

bob@bar$ cat pub_cert >> .ssh/known_hosts

(Hier haben Sie den Inhalt von pub_cert mit angezeigt cat. Anstatt ihn auf dem Bildschirm auszudrucken , leiten Sie diese Ausgabe in eine Datei um : .ssh/known_hosts. Beachten Sie, dass eine Umleitung mit >"den Inhalt der Datei durch diesen Stream ersetzen" >>bedeutet, während "bedeutet". Hängen Sie den Stream am Ende der vorhandenen Datei an ").

c) Ergebnis?

Jetzt können Sie scp/ sftp/ Bar so viel wie Sie wollen , ohne ein Passwort zu schaffen. Sie können lokale und entfernte Pfade auch automatisch mit der Taste [Tab] vervollständigen.ssh

d) Was ist mit meiner Mac-Sicherheit?

Auf diese Weise benötigen Sie nicht einmal einen laufenden SSH-Server auf Ihrem Computer. Nur ein SSH-Client (die scp/ sftp/ sshProgramme). Dies ist sicher für Sie, auch wenn die Stange beeinträchtigt ist.

e) Was habe ich genau mit diesen Schlüsseln / Zertifikaten gemacht?

Zuerst haben Sie einige Dateien generiert: einen privaten Schlüssel und ein öffentliches Zertifikat. Mit ihnen können Sie viele Dinge im Zusammenhang mit Sicherheit und Authentifizierung tun. In unserem Fall werden diese jedoch mit ein wenig Vereinfachung folgendermaßen verwendet:

Wenn Sie versuchen, eine Verbindung zur Leiste herzustellen, geben Sie an, dass Sie über ein Zertifikat verfügen, das Sie für die Verbindung verwenden können. Die Leiste überprüft verschiedene Stellen im System, einschließlich ~/.ssh/known_hosts. Es findet das von Ihnen angekündigte Zertifikat und verwendet es, um Ihnen verschlüsselte Daten zu senden.

Tatsächlich können öffentliche Zertifikate Sachen verschlüsseln!

Das ist großartig, aber wie kann foo das verstehen? Verwenden Sie Ihren privaten Schlüssel.

Private Schlüssel können mit dem entsprechenden öffentlichen Zertifikat verschlüsselte Inhalte entschlüsseln!

Dies wird als asymmetrische Verschlüsselung bezeichnet.

Im Grunde sendet der Server dann ein kompliziertes Passwort an Sie, das mit Ihrem öffentlichen Zertifikat verschlüsselt ist. Sie erhalten es, entschlüsseln es mit Ihrem privaten Schlüssel und beginnen damit, Daten mit dem Server in beide Richtungen zu verschlüsseln.


Was ist, wenn Sie wirklich wirklich die Dinge auf Ihre Weise und SCP zurück zu foo tun wollen ?

Sie fragen nur nach Problemen. Um die Auswirkungen einer möglichen Kompromittierung abzuschwächen, können Sie einen SFTPServer einrichten, der nur Chroots enthält. scpund sshwird nicht mehr funktionieren, aber sftpFilezilla und so werden funktionieren.

ref: https://www.allthingsdigital.nl/2013/05/12/setting-up-an-sftp-only-account-with-openssh/


quelle
5

Wenn Sie sich das Format der authorized_keysDatei ansehen , werden Sie feststellen, dass Sie den Befehl einschränken können, der mit einem bestimmten Schlüssel verwendet werden darf. Dies ist die Methode, die ich zuvor verwendet habe, um scpin diesem Fall SSH-Aktionen mit einem angegebenen Schlüssel nur für einen bestimmten Befehl zuzulassen . Schauen Sie sich die Manpage mit an man authorized_keys.

mdpc
quelle
Wie sieht man 'man authorized_keys'? Ich habe es in das Terminal eingegeben .. nur ein Fehler.
Hermann Ingjaldsson
Ich habe Ubuntu und es hat diese Manpage. Andere Linux-Versionen haben diese Manpage anscheinend nicht (aus Ihrem Kommentar). Ich bin sicher, Sie können Ihren Browser verwenden und in google nach den autorisierten Schlüsseln suchen, nicht wahr?
mdpc
1

Wie andere würde ich vorschlagen, dass Sie direkt von Ihrem anderen Computer kopieren:

bob@foo$ scp bar:/guest/buzz ~

Wenn Sie aus irgendeinem Grund die Kopie von der Leiste aus starten möchten, können Sie ein ssh-Schlüsselpaar auf foo erstellen, mit dem sich foo bei foo anmelden kann. Anschließend können Sie den ssh-Agenten verwenden, um den Schlüssel über dieselbe Verbindung weiterzuleiten.

bob@foo$ ssh -A bar
password:
bob@bar$ scp /guest/buzz bar:
# no password prompt

Sie können den öffentlichen Schlüssel auch in die Leiste kopieren, dann wird keine Kennwortabfrage angezeigt, oder Sie fügen dem Schlüssel eine Passphrase hinzu. Geben Sie diese ein, wenn Sie in die Leiste gehen, und benötigen Sie sie aufgrund des SSH-Agenten nicht es für die Verbindung umgekehrt und dabei sicher.

johannes
quelle