Da Amazon ja auch in Deutschland mittlerweile das Cloud Drive mit unbegrenztem Speicherplatz für 70 Euro im Jahr anbietet und das ganze auch noch 3 Monate kostenlos getestet werden kann wollte ich es auch mal probieren.
Also angemeldet und die kostenlosen 3 Monate aktiviert. Problemlos wenn man schon Amazon Kunde ist.
Als nächstes stellte sich die Frage wie die Cloud am besten nutzen?
In meinem Fall war schnell klar das der Cloud Speicher auf dem Debian Server eingebunden werden muss damit ich aus meinem gesamten Netzwerk darauf Zugriff habe.
Natürlich gibt es auch allerlei Apps für Android, IOs, Windows usw.
Da mein Server aber nun schon da ist und alles an Freigaben bietet was ich brauche und nutze kann er diesen Part auch noch übernehmen.
Ein weiterer wichtiger Punkt ist Sicherheit!! Ich lade auf keinen Fall irgendwelche Daten in irgendeine Cloud (ausser auf meinen Seafile Server der in den eigenen vier Wänden steht) welche nicht verschlüsselt sind, keine Urlaubsbilder, keine Dokumente, nichts.
Das Optimum wäre also ein mount der Amazon Cloud wo alles was ich dort hinkopiere vor dem Upload verschlüsselt wird, mir aber gleichzeitig Zugriff auf die Dateien bietet im Netzwerk.
Nach etwas googlen traf ich auf: acd_cli
Damit ist es schonmal problemlos möglich das Cloud Drive unter Linux rw zu mounten.
Die ontheFly Verschlüsselung wird dann mit encfs erledigt.
Und nun zu dem Teil in dem wir das mal fix einrichten. In meinem Fall wie immer auf einem aktuellen Debian Testing.
Als Vorraussetzung für acd_cli braucht ihr python3
und python3-pip
Wenn das vorhanden ist kann acd_cli installiert werden:
pip3 install -–upgrade git+https://github.com/yadayada/acd_cli.git
Hier eine geforkte Version welche mit einem lokalen Cache arbeitet ehe die Dateien hochgeladen werden. Mit der Standard Version hatte ich persönlich das Problem das der Mount nach beliebiger Zeit einfach ausgestiegen ist. Mann kann problemlos zwischen beiden Versionen wechseln.
pip3 install -–upgrade git+https://github.com/bgemmill/acd_cli.git
Danach wird es initialisiert:
acd_cli init
Ihr bekommt nun im Terminal eine http Adresse angezeigt welche im Browser geöffnet wird. Wenn es sich um einen headless Server handelt kann dies auch auf einem anderen Rechner geschehen.
Auf der sich öffnenden Seite loggt Ihr euch mit euren Amazon Daten ein und erhaltet am Ende eine Datei zum download oauth_data
Diese Datei muss jetzt auf dem Server in eurer Profil kopiert werden mit dem Ihr den init Prozess gestartet habt: ~/.cache/acd_cli/oauth_data
Danach könnt Ihr in dem init Prozess einmal Enter drücken und es sollte erledigt sein.
Als nächstes muss einmal gesynct werden:
acd_cli sync
Nun kann auch schon gemountet werden:
mkdir /storage/amazon
acd_cli mount /storage/amazon/
Jetzt kann in dem Ordner normal gearbeitet werden. Dateien erstellen, verändern, löschen. Kopiert einfach was hinein und schaut im Cloud Webinterface nach.
Wer nicht verschlüsseln will ist hier fertig.
Verschlüsselung!
Wir installieren encfs und legen im Cloud Drive einen Ordner an. Alles was später in diesem Ordner landet wird mit encfs verschlüsselt sein. Wir legen einen weiteren Ordner an für encfs welcher dazu dient alle Dateien die dorthin kopiert werden verschlüsselt im Cloud Drive abzulegen.
aptitude install encfs
mkdir /storage/amazon-encryptet
mkdir /storage/amazon/storage
Nun mounten wir das ganze:
encfs --public /storage/amazon/storage/ /storage/amazon-encrypt/
Ihr werdet jetzt zweimal nach einem Passwort gefragt. Dieses wird immer benötigt um auf die verschlüsselten Daten zuzugreifen wenn Ihr neu zusammenmountet.
Wenn das erledigt ist wäre im Prinzip alles einsatzbereit. Da encfs aber seine Konfig Datei in dem verschlüsselten Laufwerk ablegt standardmässig müssen wir das noch ändern und diese Datei in unseren Profil Ordner verschieben:
fusermount -u /storage/amazon-encryptet
mv /storage/amazon/storage/.encfs6.xml ~/encfs-amazon.xml
Tip:
Um ordentliche Upload Raten ~20-40Mbit (oder noch mehr, bei ~44mBit macht meine Leitung dicht) zu erreichen sollte in der encfs-amazon.xml noch der <blockSize>
Wert auf <blockSize>4096</blockSize>
geändert werden.
Ab jetzt wird folgendermassen gemountet:
ENCFS6_CONFIG=~/encfs-amazon.xml encfs --public /storage/amazon/storage/ /storage/amazon-encrypt/
ALLES was nun in den Ordner /storage/amazon-encrypt/
kopiert wird landet verschlüsselt in euerem Cloud Drive im Ordner storage
. In dem lokalen Ordner /storage/amazon-encrypt/
seht Ihr natürlich die Dateien unverschlüsselt und könnt auch normal darauf zugreifen. Auch z.B. über Samba mit einem Windows Rechner.
NFS funktioniert auch, es MUSS jeddoch NFSv4 gemountet werden. Ältere NFS Protokolle können sonst nicht auf das FUSE Dateisystem von encfs zugreifen.
In der exports
sollte dafür fsid=0
als option mit angegeben werden und beim NFS mounten dann -o nfs4
.
Die andere Ordner der Cloud können natürlich auch ganz normal weiterverwendet werden.
In den verschlüsselten Ordner kann jetzt z.B. mit Rsync hineinkopiert werden wenn es viele Dateien sind:
rsync --ignore-existing -avP SourceDir /storage/amazon-encrypt/
Hier noch ein init.d Skript zum mounten/unmounten:
Ich weiss das ist altmodisch und noch nicht systemd konform :)
#!/bin/sh
case $1 in
mount)
acdcli -nl mount /storage/amazon/
echo "[euerencfspwd]" | ENCFS6_CONFIG=~/encfs-amazon.xml encfs --stdinpass --public /storage/amazon/storage/ /storage/amazon-encrypt/
$0 check
;;
umount)
fusermount -u /storage/amazon-encrypt
acdcli umount /storage/amazon
$0 check
;;
force-umount)
acdpid=`ps -ef --forest | grep "/usr/local/bin/acdcli" | tail -n1`
acdpid=`echo $acdpid | grep python3 | tr -s " " | cut -d " " -f2`
if [ "$acdpid" != "" ]; then
kill -9 $acdpid
fi
sleep 1
killall -9 acd_cli 2>/dev/null
killall -9 acdcli 2>/dev/null
sleep 1
fusermount -u -z /storage/amazon-encrypt 2>/dev/null
acdcli umount /storage/amazon 2>/dev/null
umount -fl /storage/amazon 2>/dev/null
$0 check
;;
force-remount)
$0 force-umount
sleep 1
$0 mount
;;
check)
mcheck=`mount | grep amazon | wc -l`
if [ "$mcheck" != "0" ]; then
echo -e "Amazon Drive is \033[32;40mmountet\033[m \033[m"
mount | grep amazon
else
echo -e "Amazon Drive is \033[31;40mnot mountet\033[m \033[m"
sleep 1
$0 sync
fi
;;
sync)
acdcli sync
;;
*)
echo "Usage: /etc/init.d/$DAEMON-daemon {mount|umount|force-umount|force-remount|check|sync}" >&2
exit 1
;;
esac
exit 0