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
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 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
yum install fuse-sshfs
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.