Αξιοποιήστε το SSHFS

dimitris | Κυρ, 02/12/2012 - 09:16 | 16'

Απομακρυσμένη προσάρτηση καταλόγου μέσω του πρωτοκόλλου SSH ή αλλιώς πως να έχετε ένα απομακρυσμένο κρυπτογραφημένο κατάλογο στον υπολογιστή σας!

Του Ευάγγελου Μπαλάσκα

 

Στις μέρες μας, ο καθένας από εμάς έχει τουλάχιστον ένα desktop, ένα laptop, ένα σταθμό εργασίας κι ίσως κάποιο server στον οποίο φιλοξενεί ένα site ή ένα blog. Με λίγα λόγια χρησιμοποιούμε πολλούς και διαφορετικούς υπολογιστές για να καλύψουμε τις καθημερινές μας ανάγκες.

Καταλήγουμε, λοιπόν, να έχουμε διάσπαρτα τα αρχεία μας, τα τραγούδια μας, τα έγγραφά μας κι ότι άλλο χρειαζόμαστε για να δουλέψουμε. Για να "μαζέψουμε" τα αρχεία μας σε μία κοινή τοποθεσία, αγοράζουμε συσκευές USB τις οποία έχουμε πάντα μαζί μας ή χρησιμοποιούμε κάποια υπηρεσία online backup με λίγα ευρώ ώστε να αποθηκεύουμε κεντρικά τα αρχεία μας και να είναι προσβάσιμα από παντού.

Σε αυτό το άρθρο θα παρουσιάσουμε μία εναλλακτική λύση, βασισμένη στο πρωτόκολλο SSH. Εάν έχουμε ήδη ένα μηχάνημα συνεχώς online με SSH πρόσβαση, τότε ήδη έχουμε την πρώτη ύλη για να συνεχίσουμε. Για όσους δεν έχουν ένα τέτοιο μηχάνημα, μπορούν να πραγματοποιήσουν την άσκηση ενεργοποιώντας το SSH στο μηχάνημά τους κι απλά αντικαθιστώντας το hostname του server με το localhost.

Πριν ξεκινήσουμε όμως, να εξηγήσουμε με δυο λόγια τι είναι το SSHFS[1,2]. Όπως αναφέρουμε και στον τίτλο είναι ακρωνύμιο του Secure SHell FileSystem. Υλοποιεί ένα σύστημα αρχείων βασισμένο στο SFTP (Ssh File Tranfer Protocol) μέσω του FUSE [3]. Το FUSE (userspace filesystem framework for Linux) είναι ένα από τα πιο δημοφιλή kernel modules, που δίνει την δυνατότητα δημιουργίας ενός συστήματος αρχείων σε χρήστες που δεν έχουν δικαιώματα του root, χωρίς την ανάγκη να επέμβουμε στον κώδικα του πυρήνα. Η χρήση του SFTP μας δίνει ένα επιπλέον πλεονέκτημα, αυτό της κρυπτογράφησης των αρχείων μας κατά την μεταφορά τους ή τον συγχρονισμό τους μέσω του διαδικτύου.

To SSHFS είναι client based, το οποίο σημαίνει ΔΕΝ χρειάζεται να κάνουμε απολύτως καμία ρύθμιση στον server μας! Αρκεί λοιπόν ο server μας να έχει ήδη ενεργοποιημένο έναν ssh daemon. Σχεδόν όλες οι διανομές έχουν εξορισμού έναν ssh server & client, με δημοφιλέστερο πρόγραμμα το OpenSSH [4]. Πολύ ενδιαφέρον πρόγραμμα είναι επίσης και το Dropbear [5], γνωστό σε emdedded & lightweight εγκαταστάσεις Linux.

Εγκατάσταση sshfs

Ο προτεινόμενος τρόπος είναι να αναζητήσετε το πρόγραμμα μέσω του διαχειριστή πακέτων της διανομής σας. Π.χ.

sudo apt-get install sshfs #Debian / Ubuntu 

sudo yum install fuse-sshfs  # RH/Fedora/CentOS

Εάν (και μόνο τότε) δεν το βρείτε τότε μπορείτε να ακολουθήσετε τα παρακάτω βήματα. Είναι πολύ γενικά και συνηθισμένα στο Linux, για αυτό και δεν θα τα εξηγήσουμε αναλυτικά σε αυτό το άρθρο.

Πριν προχωρήσουμε με την εγκατάσταση του SSHFS, σιγουρευόμαστε ότι έχουμε εγκαταστήσει το FUSE. Και πάλι ο προτεινόμενος τρόπος είναι μέσω των επίσημων αποθετηρίων της διανομής σας και μέσω του διαχειριστή προσθαφαίρεσης πακέτων που χρησιμοποιείτε.

Εάν δεν υπάρχει το FUSE στα αποθετήρια, τότε θα πρέπει να το κατεβάσουμε. Η τελευταία έκδοση του, κατά τη συγγραφή του άρθρου, είναι η 2.8.5 και μπορούμε να κατεβάσουμε το πρόγραμμα από την τοποθεσία: https://github.com/libfuse/libfuse/releases. Εν συνεχεία με το παρακάτω set εντολών το εγκαθιστούμε:

tar zxvf fuse-2.8.5.tar.gz
cd fuse-2.8.5
./configure
make
make install

Τώρα είμαστε έτοιμοι να προχωρήσουμε με την εγκατάσταση του SSHFS. Η τελευταία έκδοση του, είναι η 2.2 και μπορούμε να κατεβάσουμε το πρόγραμμα από την τοποθεσία: https://github.com/libfuse/sshfs/releases/. Το κατεβάζουμε και προχωράμε στην εγκατάσταση του:

tar zxvf sshfs-fuse-2.2.tar.gz
cd sshfs-fuse-2.2
./configure
make
make install

Αυτό ήταν! Εύκολα και γρήγορα έχουμε ολοκληρώσει την εγκατάσταση του sshfs στο σύστημά μας.

Προσθήκη group για απλούς χρήστες

Για να μπορείτε να κάνετε mount απομακρυσμένα συστήματα αρχείων με το SSHFS χρησιμοποιώντας τον κανονικό λογαριασμό χρήστη σας, πρέπει να προσθέσετε τον χρήστη σας στο group 'fuse'.

Για να δείτε αν υπάρχει το group:

cat /etc/group | grep 'fuse'

Αν δεν υπάρχει, το δημιουργείτε:

sudo groupadd fuse

Στη συνέχεια, προσθέτετε το λογαριασμό σας, π.χ. dimitris στο fuse με την εντολή:

sudo usermod -a -G fuse dimitris

Σε αυτό σημείο, θα χρειαστεί μάλλον να κάνετε μια επανεκκίνηση ή απλά logout/login.

Χρήση sshfs

Για να προσαρτήσουμε και να αποπροσαρτήσουμε έναν απομακρυσμένο κατάλογο μέσω ssh, χρειαζόμαστε τα παρακάτω δύο εκτελέσιμα:

  • sshfs
  • fusemount

Αρχικά, δημιουργούμε ένα νέο σημείο προσάρτησης:

mkdir -pv mysshfs

Και είμαστε έτοιμοι να συνδέσουμε τον απομακρυσμένο κατάλογο μας στο σύστημά μας. Η πλήρης σύνταξη είναι:

sshfs [user@]host:[dir] mountpoint [optins]

Έστω λοιπόν ότι το όνομα χρήστη μας είναι: myuser, το όνομα του ssh server μας: mydomain και το όνομα του καταλόγου που θέλουμε να προσαρτήσουμε: myfolder.

Τότε γράφουμε:

sshfs myuser@mydomain:myfolder mysshfs

Εάν o SSH server μας ακούει σε μία διαφορετική tcp port (έστω 2222) τότε η παραπάνω εντολή γίνεται ως εξής:

sshfs -p 2222 myuser@mydomain:myfolder mysshfs

Εάν θέλουμε να συμπιέσουμε τα δεδομένα μας τότε η παραπάνω εντολή γίνεται:

sshfs -C -p 2222 myuser@mydomain:myfolder mysshfs

Για να δούμε όλες τις επιλογές του sshfs, πληκτρολογούμε στην κονσόλα μας:

sshfs -h

Για να δούμε ότι η προσάρτηση έχει γίνει επιτυχώς, πληκτρολογούμε:

ls -l mysshfs

ή

df

ή ακόμα καλύτερα:

mount | grep mysshfs

Για να αποπροσαρτήσουμε τον κατάλογο μας, πληκτρολογούμε:

fusermount -u mysshfs

 

Αυτόματη και μόνιμη προσάρτηση με sshfs

Σε αυτό το σημείο έχουμε μάθει τα βασικά για να προσαρτούμε και να αποπροσαρτούμε έναν απομακρυσμένο κατάλογο με την χρήση του sshfs. Πως όμως μπορεί να γίνει μόνιμη αυτή η προσάρτηση, χωρίς να χρειάζεται κάθε φορά να γράφουμε την εντολή;

Όλες οι προσαρτήσεις σε ένα Linux σύστημα καταγράφονται στο αρχείο: /etc/fstab όπου χρειάζεται απλώς να εισάγουμε μια νέα εγγραφή (είναι μια γραμμή όλο αυτό!):

sshfs#[email protected]:/my/path /home/myuser/mysshfs fuse compression=yes,ssh_protocol=2,port=2222,noauto,_netdev,user,reconnect 0 0

ή

[email protected]:/my/path /home/myuser/mysshfs fuse.sshfs compression=yes,ssh_protocol=2,port=2222,noauto,_netdev,follow_symlinks,idmap=user,reconnect,allow_other,default_permissions 0 0

οπου οι παράμετροι σημαίνουν:

  • noauto: μην κάνεις προσάρτηση στην εκκίνηση
  • _netdev: μην προσπαθήσεις να κάνεις προσάρτηση πριν έχεις σύνδεση με το διαδίκτυο
  • idmap: κανε translate τα uid/gid του χρήστη με τον οποίο συνδεόμαστε
  • user: επέτρεψε σε έναν απλό χρήστη να κάνει mount
  • users: επέτρεψε σε κάθε χρήστη να κάνει mount / unmount
  • default_permissions: ενεργοποίησε τους ελέγχους δικαιωμάτων από τον πυρήνα

Έτσι λοιπόν όταν θέλουμε να προσαρτήσουμε τον απομακρυσμένο μας κατάλογο, αρκεί να πληκτρολογήσουμε:

mount /home/myuser/mysshfs

κι όταν θέλουμε να το αποπροσαρτήσουμε από το σύστημά μας:

fusermount -u /home/myuser/mysshfs

ΠΡΟΣΟΧΗ: Δεν μπορούμε να ορίσουμε το συνθηματικό στο αρχείο fstab. Αυτό κάνει λίγο πιο δύσκολη την ζωή μας. Εναλλακτικά, μπορούμε να δημιουργήσουμε μία "passwordless" ssh σύνδεση για έναν νέο χρήστη στο σύστημα μας, ώστε να μην μας ζητάει να δώσουμε συνθηματικό και να μην εμπλέκεται με τους χρήστες του συστήματός μας. Σε αυτήν την περίπτωση πρέπει να προσθέσουμε την παράμετρο identifyfile με το path για το αρχείο με το κλειδί μας (π.χ. /home/myuser/.ssh/id_rsa) δηλαδή η γραμμή που πρέπει να γράψουμε στον /etc/fstab γινεται:

[email protected]:/my/path /home/myuser/mysshfs fuse.sshfs compression=yes,ssh_protocol=2,port=222,noauto,_netdev,follow_symlinks,idmap=user,identityfile=/home/myuser/.ssh/id_rsa,reconnect,allow_other,default_permissions,uid=1000 0 0

Πίσω από κάποιο proxy

Είναι πολύ σύνηθες πλέον (ειδικά σε εργασιακούς χώρους) να βρισκόμαστε σε κάποιο τοπικό δίκτυο που δεν έχει απευθείας σύνδεση με τον έξω κόσμο. Οπότε σε τέτοιες περιπτώσεις χρησιμοποιούμε ένα ενδιάμεσο μηχάνημα στο οποίο έχουμε πρόσβαση και το χρησιμοποιούμε ως proxy.

Ένα από τα πιο γνωστά προγράμματα για αυτή την δουλειά είναι το ProxyChains [6]. Ένα opensource εργαλείο που μπορεί να "μεταφέρει" την διαδικτυακή κίνησή μας είτε μέσω ενός socks proxy είτε μέσω ενός http proxy. Εάν ψάξετε θα βρείτε αρκετά παρόμοια εργαλεία.

Ενώ είναι πολύ εύκολο να ανοίξουμε μία ssh σύνδεση μέσω του proxychains:

proxychains ssh mydomain.gr

είναι αρκετά πιο δύσκολο να γίνει για το sshfs. Η λύση ναι μεν είναι απλή, αλλά δυστυχώς θα αφιερώσετε πάρα μα πάρα πολλές ώρες για να την βρείτε στο διαδίκτυο! Η πρώτη στήλη του /etc/fstab, μπορεί να είναι ένα εκτελέσιμο αρχείο (ή script) στο οποίο μπορούμε να μεταφέρουμε όλη την λειτουργικότητα που θέλουμε.

Εάν έχουμε ρυθμίσει κατάλληλα το proxychains στο σύστημά μας, τότε αρκεί να δημιουργήσουμε ένα νέο εκτελέσιμο script:

πχ. /usr/local/bin/sshfsproxy

Με το εξής περιεχόμενο:

#!/bin/bash
/usr/bin/proxychains /usr/bin/sshfs -C -p 2222 [email protected]:myfolder /home/myuser/mysshfs

και διαμορφώνουμε κατάλληλα το αρχείο /etc/fstab

/usr/local/bin/sshfsproxy /home/ebal/mysshfs fuse user,reconnect,auto,ssh_protocol=2 0 0

Εάν χρησιμοποιήσουμε ένα ενδιάμεσο μηχάνημα στο οποίο έχουμε ssh πρόσβαση, τότε μπορούμε προσαρτήσουμε το απομακρυσμένο αρχείο συστήματος χωρίς την χρήση του proxychains, με την εξής εντολή:

sshfs -o ssh_command='/usr/bin/ssh -t mydomain2.gr /usr/bin/ssh' -C -p 2222 [email protected]:myfolder /home/myuser/mysshfs

όπου mydomain2.gr είναι το ενδιάμεσο μηχάνημά μας.

Δυστυχώς η παραπάνω εντολή δεν μπορεί να μπει στο /etc/fstab αρχείο μας. Για αυτό το λόγο δημιουργούμε ένα νέο αρχείο:

/usr/local/bin/sshfsnew

στο οποίο γίνεται ως εξής:

#!/bin/bash
/usr/bin/sshfs -o ssh_command='/usr/bin/ssh -t mydomain2.gr /usr/bin/ssh' -C -p 2222 [email protected]:myfolder /home/myuser/mysshfs

ενώ το fstab entry διαμορφώνεται ως εξής:

/usr/local/bin/sshfsnew /home/ebal/mysshfs fuse user,reconnect,auto,ssh_protocol=2 0 0

Επίλογος

Προσωπικά έχω μείνει πολύ ευχαριστημένος με το SSHFS. Παίζει χωρίς πολλές δυσκολίες και προβλήματα. Χρησιμοποιώ έναν απομακρυσμένο κατάλογο για να αποθηκεύω τα logs του MSN για το Pidgin. Έτσι ακόμα κι εάν δουλεύω από διαφορετικούς υπολογιστές, τα logs καταγράφονται και συγχρονίζονται κάπου κεντρικά. Η σύνδεση είναι κρυπτογραφημένη, οπότε δεν έχω κάποιο πρόβλημα ασφάλειας. Μπορείτε άνετα κι εύκολα, χωρίς να πληρώνετε τρίτους (που μεταξύ μας ΔΕΝ γνωρίζετε τι κάνουν τα αρχεία σας ή εάν είναι όντως κρυπτογραφημένα) να έχετε ένα κεντρικό αρχείο συστημάτων σε έναν server και κρυπτογραφημένη πρόσβαση σε αυτό από παντού. Ακόμα κι εάν εργάζεστε σε Windows λειτουργικά συστήματα, υπάρχει τρόπος να προσαρτήσετε το αρχείο συστημάτων σας μέσω του Dokan-SSHFS [7]

 

Χρήσιμες εντολές

  • Προσάρτηση απομακρυσμένου καταλόγου στο σύστημά μας, μέσω του sshfs:
    sshfs myuser@mydomain:myfolder mysshfs
  • Αποπροσάρτηση καταλόγου μέσω fusermount
    fusermount -u mysshfs

 

Σύνδεσμοι

[1] http://fuse.sourceforge.net/sshfs.html
[2] http://en.wikipedia.org/wiki/SSHFS
[3] http://fuse.sourceforge.net
[4] http://www.openssh.com
[5] http://matt.ucc.asn.au/dropbear/dropbear.html
[6] http://proxychains.sourceforge.net
[7] http://dokan-dev.net/en/download/#sshfs

 

 

Ο Βαγγέλης στον ελεύθερο χρόνο του προσπαθεί να βοηθήσει τα νέα μέλη του χώρου, κυρίως με την συγγραφή τεχνικών οδηγών και παρουσιάσεων. 

Δώσε αστέρια!

MO: 5 (ψήφοι: 1)