WebDAV en fuse

  • by Johan
  • 07/08/2018
  • 0 Comments

Aangezien OneDrive slechts overweg kan met één account was ik wel genoodzaakt om nog iets anders te voorzien ‘in the cloud’ zodat ik van overal aan mijn bestanden kan.
En nu ik dan toch bezig was zou het een plus zijn om ‘Mijn Documenten’ ook via deze weg te kunnen benaderen.
‘Mijn documenten’ staan al jaren niet meer op mijn PC, maar op een NAS, zodat ik zowel op mijn PC of laptop op ‘Mijn documenten’ kan werken. Maar dit kon ik alleen wanneer ik een rechtstreekse verbinding heb met de NAS, alwaar ‘Mijn documenten’ gehost zijn.

Het plan

Webdav op een webserver, uiteraard beveiligd met een gebruikersnaam en paswoord. En van daar een beveiligde verbinding met de NAS die op de thuisbasis staat.

Stappen voor CentOS 7

Maak een webdav folder en een webdav gebruikersnaam

mkdir /var/www/html/webdav
chown -R www-data: www-data  /var/www/html/webdav
chmod -R 755 /var/www/html/webdav
mkdir /var/www/html/.dav
chown  www-data. /var/www/html/.dav
htpasswd -c /etc/httpd/.htpasswd eengebruikersnaam
chown root:www-data  /etc/httpd/.htpasswd
chmod 640 /etc/httpd/.htpasswd

Apache configuratie

DavLockDB /var/www/html/.dav/DavLock
 
  DocumentRoot "/var/www/html"
  ServerName cloud.reynaert.be
  # SSL stuff .....
  Alias /webdav /var/www/html/webdav
  <Directory /var/www/html/webdav>
    DAV On
    AuthType Basic
    AuthName "webdav"
    AuthUserFile /etc/httpd/.htpasswd
    Require valid-user
    AllowOverride FileInfo Indexes
    Options Indexes MultiViews SymLinksIfOwnerMatch FollowSymLinks
    Order allow,deny
    allow from all
  
Include conf.d/ExpiresByType.def
 

Belangrijkste regels zijn o.a.
De DavLockDB voor het bijhouden van de locks
De Alias die verwijst naar de folder waar de WebDav map staat
En het Directory block voor de webdav folder, zodat voornamelijk alleen gebruikers in het .htpasswd bestand toegang zullen hebben.

Op dit moment kan je al een webdav verbinding opzetten vanf je PC (Windows 10). Open je verkenner, selecteer ‘Mijn computer’ of ‘Deze PC’. In het lint zal je de optie zien ‘Een netwerklocatie toevoegen’

Volg de wizard en voer de url in van je webdav locatie. bv https://cloud.reynaert.be/webdav/

Fuse… Mijn documenten

Het doel is een ssh verbinding op te zetten en een directory te definieren binnen de webdav zodat die verwijst naar een fuse-mount

Zorg er dus in eerste instantie voor dat er een SSH verbinding mogelijk is. En aangezien de poort 22 druk bezet is gaan we kiezen voor een andere.
Er wordt verondersteld dat je een private en public key combinatie hebt. In onderstaand voorbeeld een RSA key. We gaan de public key zetten op de NAS zodat de webdav omgeving verbinding kan maken.
Routering intern wordt hier buiten beschouwing gelaten. We connecteren in dit voorbeeld op poort 6222

Vanaf de webdav omgeving:

cat ~/.ssh/id_rsa.pub | ssh gebruiker@intranet.reynaert.be -p 6222 "cat >> ~/.ssh/authorized_keys"
ssh gebruiker@intranet.reynaert.be -p 6222 "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"

Test dit eerst. Je moet onderstaande kunnen doen zonder een paswoord in te geven

 ssh gebruiker@intranet.reynaert.be -p 6222 

Installatie van fuse

yum install fuse-sshfs

maak een share folder, die we straks gaan gebruiken

mkdir -p /mnt/intranet/share

Zorg ervoor dat na een reboot de mount gedaan wordt.
Voeg toe aan /etc/fstab (vi /etc/fstab)

sshfs#gebruiker@intranet.reynaert.be:/share /mnt/intranet/share fuse defaults,idmap=user,allow_other,reconnect,_netdev,users,IdentityFile=/root/.ssh/id_rsa,port=6222,compression=yes 0 0

Op dit punt kan je via /mnt/intranet/share de NAS bereiken.

De volgende stap is om een webdav folder te koppelen aan een map op de NAS. We hadden in Apache geconfigureerd dat /var/wwwhtml/webdav de root was van de WebDAV. Binnen deze folder gaan we ter voorbeeld één user aanmaken. En rechten geven aan apache, zodat deze hierin kan schrijven.

mkdir /var/www/html/webdav/gebruiker
chown www-data. /var/www/html/webdav/gebruiker
mount -o bind /mnt/intranet/share/homes/gebruiker/My\ Documents /var/www/html/webdav/gebruiker

Je zou nu verwachten dat je die mount ook kan toevoegen aan /etc/fstab. Maar dit werkt niet. Dus een kleine work-around.
We gaan een service maken die we laten starten na een reboot.

Eerst het mount scriptje

touch /var/scripts/webdav-gebruiker.sh 
chmod +x /var/scripts/webdav-gebruiker.sh
vi /var/scripts/webdav-gebruiker.sh
!/bin/bash
mount -o bind /mnt/intranet/share/homes/gebruiker/My\ Documents /var/www/html/webdav/gebruiker

En de service

vi /etc/systemd/system/webdav-gebruiker.service
[Unit]
Description=Mount Gebruiker
After=network.target mnt-intranet-share.mount
[Service]
Type=simple
ExecStart=/var/scripts/webdav-gebruiker.sh
TimeoutStartSec=0
[Install]
WantedBy=default.target

Hoe kom ik aan die setting: mnt-intranet-share.mount?

systemctl list-units --type=mount

De uitvoer zal bv zijn mnt-intranet-share.mount

Rest ons alleen nog die serive te laten starten na reboot

systemctl enable webdav-gebruiker.service

Fancy-Index

Apache levert je geen mooie lay-out. Dit kunnen we pimpen met fancy-index; een open source project

De source kan je vinden op github: https://github.com/Vestride/fancy-index

Zet deze map integraal in je webroot in een folder genaamd fancy-index (in vb wordt dit /var/www/html/fancy-index/

copieer de .htaccess naar de webdav folder

Als extra kan je enkele types definieren die je niet wenst te zien

IndexIgnore .ftpquota .DS_Store .git .DAV $RECYCLE.BIN .@__thumb

Het resultaat kan er zo uit zien.

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *