Verschlüsseltes Netzwerkdateisystem SSHFS unter FreeBSD

Wenn NFS nicht in Frage kommt, lassen sich entfernte Dateisysteme via sshfs unter FreeBSD (natürlich auch unter anderen Betriebssystemen) einbinden.

Voraussetzung natürlich: Auf dem entfernten Rechner muss ein ssh-Dämon laufen. Der Port sysutils/fusefs-sshfs ist auf dem lokalen Rechner schnell installiert.

Vorbereitung

Für sshfs wird fuse benötigt. Dieser Port, sowie das Kernel-Modul sollte also schon installiert sein. In die /etc/rc.conf nun folgende Zeile einfügen:

  1. fusefs_enable="YES"

Der Dienste muss natürlich jetzt noch auf dem üblichen Weg gestartet werden. Bei Problemen mit dem Kernel Modul lohnt es sich, den Port sysutils/fusefs-kmod neu zu bauen. Will man sshfs als normaler User nutzen, fehlt vielleicht noch

  1. # sysctl vfs.usermount=1

Permanent wird dieser Eintrag mit der folgenden Zeile in der Datei /etc/sysctl.conf

  1. vfs.usermount=1

Als letzten fehlen für einen normalen User noch die Rechte für das Device /dev/fuse0. Wenn man alle User, die Lese- und Schreibrechte haben dürfen, der Gruppe operator zufügt, ist dies erledigt.
Es gibt nun 2 Wege, ein entferntes Verzeichnis einzubinden:

1. sshfs als normaler Benutzer

Voraussetzung: Auf dem entfernten Rechner steht ein Account zur Verfügung. Dann kann man mit der allgemeinen Befehlszeile

  1. sshfs -o idmap=user username@example.org:/path /path/to/mount/point

also z.B.

  1. $ mkdir ~/mnt
  2. $ sshfs -o idmap=user username@example.org:/usr/local/www ~/mnt

Nach Eingabe des Passworts ist das entfernte Verzeichnis via ssh gemountet.

2. sshfs als root via mount_fusefs

Als root mit der Zeile

  1. mount_fusefs auto /path/to/mount/point sshfs -o idmap=user username@example.org:

Also z.B.

  1. # mount_fusefs auto /mnt sshfs -o idmap=user username@example.org:

Fehlermeldungen

Es empfiehlt sich vor dem Mounten einmal den Anmeldeprozess durchzuführen:

  1. # ssh username@example.org

damit der Schlüssel der Liste der bekannten Hosts hinzugefügt werden kann. Der mount-Befehl kann diesen Schritt nicht durchführen.

Beim Versuch mount_fusefs als root auszuführen und auf das User-Verzeichnis auf dem entfernten Rechner zuzugreifen, kann folgendes Fehlerbild erscheinen:

  1. # mount_fusefs auto /mnt sshfs -o sshfs_debug,idmap=user username@example.org:
  2. # SSHFS version 2.2
  3. Password:
  4. Password:
  5. Password:
  6. remote host has disconnected

ohne dass man die Möglichkeit hat, ein Kennwort einzugeben. Auf dem entfernten Rechner steht in /var/log/messages:

  1. sshd[19152]: error: PAM: authentication error for username from XXX.XXX.XXX.XXX

Dies kann umgangen werden, indem man mit ssh-keygen ein Schlüsselpaar erzeugt und den öffentlichen Schlüssel auf den entfernten Rechner kopiert, z.B. als root mit

  1. # ssh-keygen
  2. # cat /root/.ssh/id_rsa.pub | ssh username@example.org 'cat >> .ssh/authorized_keys'

Das setzt natürlich voraus, dass im Homedirectory des Users das Verzeichnis .ssh existiert.

Weitere Fehlerquellen:

  • /dev/null hat nicht die Rechte 0666
  • Auf dem entfernten Rechner ist in der sshd_config das sftp Subsystem deaktiviert
  • Auf dem entfernten Rechner ist in der sshd_config UsePAM deaktiviert