Umgehen der Berechtigungsprüfung für ssh-Schlüsseldateien

29

Ich habe ein verschlüsseltes FAT-Volume (aus Kompatibilitätsgründen), das eine private Schlüsseldatei und andere vertrauliche Daten enthält.

Ich möchte mit meinem privaten Schlüssel über SSH eine Verbindung zu meinem Server herstellen. Da FAT die Dateiberechtigung jedoch nicht unterstützt, ignoriert es meinen Schlüssel und gibt an, dass seine Berechtigungen zu offen sind.

Momentan kopiere ich es mit 0600-Berechtigungen an eine andere Stelle auf meiner Festplatte, verwende es und lösche es dann sicher, aber es ist ein Schmerz.

Gibt es eine Möglichkeit, die Berechtigungsprüfung in genau dieser ssh / scp-Befehlszeile zu umgehen?

Edit : Präzision: Es war ein TrueCrypt-Volume unter OS X.

Zur Lösung: Die unten stehende akzeptierte Antwort hat mein Problem gelöst (mithilfe einer SSH-Schlüsseldatei auf einem TrueCrypt-Volume mit Mac OS X), ist jedoch eine Problemumgehung. Offenbar gibt es keine Möglichkeit, die Berechtigungsprüfung für die Bypass-Schlüsseldatei durchzuführen.

Beispiel von mir
quelle

Antworten:

18

AFAIK, es gibt keine Möglichkeit, die Keyfile-Berechtigungsprüfung mit ssh oder ssh-add zu umgehen (und Sie können es nicht mit Named Pipe oder Ähnlichem austricksen). Außerdem möchten Sie eigentlich nicht ssh austricksen, sondern nur Ihre Schlüsseldateien verwenden können.

In der Tat soll TrueCrypt-Volume Ihre Daten privat halten, so dass das Mounten der Volumes als weltweit lesbar (Standardverhalten von TrueCrypt) nicht wirklich optimal ist. Wenn Sie ein FAT-formatiertes Volume verwenden, sollten Sie die Mount-Optionen wirklich anpassen, wie von Dan Carley vorgeschlagen.

Obwohl die Mount-Optionen von TrueCrypt für OS X noch nicht korrekt unterstützt werden (auch wenn Sie TC über die Befehlszeilenschnittstelle und die Mount-Optionen von der Manpage aus starten - bereits ausprobiert), unterstützt OS X die Standardeinstellungen für Mount-Optionen basierend auf dem Datenträgernamen .

Sie müssen Ihre Benutzer-ID kennen (normalerweise 501, wenn Sie der erste / einzige Benutzer des Computers sind). Sie können es mit "id -u" bekommen.

Angenommen, Sie haben den Datenträgernamen "PRIVATE" (die Datenträgernamen sind in Großbuchstaben geschrieben) und Ihre UID ist 501. Sie müssen lediglich die folgende Zeile zu / etc / fstab hinzufügen:

LABEL=PRIVATE none msdos -u=501,-m=700

Sie müssen root sein, um diese Datei erstellen / bearbeiten zu können (sie ist in der Standard-OSX-Installation nicht vorhanden):

sudo vim /etc/fstab

Wenn Sie das nächste Mal das Volume bereitstellen, verfügt es über die Berechtigung 700 und die Eigentümer-ID 501.

Dies funktioniert auch mit USB-Laufwerken (die normalerweise auch in FAT formatiert sind).

user9437
quelle
funktioniert einwandfrei
instanceof me
Ich konnte mit dieser Methode kein FAT-formatiertes Volume abrufen, um die richtigen Berechtigungen zu erhalten. Wenn Sie jedoch "Mac OS Extended" auswählen und die Option zum Bereitstellen auf anderen Betriebssystemen auswählen, kann ich die Berechtigungen mit chmod festlegen.
Leerset
Das hat wunderbar funktioniert. Wenn ich das sichere Volume aktiviere, aktiviere ich es an einem bestimmten Punkt in meinem Ausgangsverzeichnis. Ich stellte fest, dass ich den Wert "none" durch den expliziten Namen des Mount-Punkts ersetzen musste.
Alec the Geek
1
Dies funktioniert auch , wenn es keine /etc/fstabDatei auf neueren OS X. So stellen Sie eine neue etc/fstabDatei mit dem oben
iggie
33

Das Hinzufügen des Schlüssels von stdin hat bei mir funktioniert:

cat /path/to/id_rsa | ssh-add -k -
R_Beagrie
quelle
1
warum hat dies nicht eine aufwertung? Es funktioniert sofort ohne Installation und Sie verwenden trotzdem einen SSH-Agenten, nicht wahr?
14.
4
funktioniert wie ein
zauber
1
Das brachte mich rein. Mit WSL Ubuntu. Vielen Dank!
Mydoglixu
7

Als verrückte Umgehung können Sie ein Disk-Image eines ext2-Volumes erstellen, das Ihren privaten Schlüssel enthält, und es als Loop-Gerät einbinden und dann Ihren SSH-Schlüssel von dort aus verwenden.

Machen Sie eine 1MB leere Datei:

dd if=/dev/zero of=diskimg bs=1024 count=1024

Formatiere es ext2 (Drücke Y, wenn es sagt, dass es kein Gerät ist):

mke2fs diskimg

Montiere es irgendwo (als root):

mount -t ext2 -o loop diskimg /my/path/to/diskimg

Jetzt haben Sie ein winziges ext2-Dateisystem, für das Sie Berechtigungen festlegen können. Sie können ein Skript schreiben, um es bereitzustellen, und sicherstellen, dass diese Berechtigungen die richtige UID / GID haben, basierend auf dem System, auf dem Sie sich befinden (da die UIDs möglicherweise nicht übereinstimmen). Es erfordert auch sudo / root-Zugriff auf die Arbeit.

Kyle Smith
quelle
Es scheint, als gäbe es keine einfachere Option
instanceof me
1
das ist so falsch - aber sehr cool :)
warren
1
@warren: Ich habe es mit "verrückt" eingeleitet. :-D
Kyle Smith
2

Was ist mit dem Hinzufügen StrictModes nozu Ihrem /etc/ssh/sshd_config(und dem Laden / Neustarten von sshd)?

edit: oops, diese Option ist nur serverseitig: /

Benoît
quelle
1

Wenn ich mich richtig erinnere, ssh-agentwird nicht nach Schlüsselberechtigungen gesucht. Das könnte also funktionieren:

[-S "$ SSH_AUTH_SOCK"] || eval $ (ssh-agent)
ssh-add Pfad / zu / id_rsa
Grawity
quelle
Zu Ihrer Information, das funktioniert nicht. ssh-addüberprüft die Dateiberechtigungen.
Kyle Smith
0

Können Sie Ihre Mount - Optionen (ändern umask, uidund gid) zu Anzug?

Dan Carley
quelle
AFAIK Nein, es ist ein TrueCrypt-Volume. Ich kann es nur als schreibgeschützt einbinden, und ssh beschwert sich immer noch, dass es 0777 ist
Instanz von mir.