Sambadav: de brug tussen Samba en WebDAV
- February 19, 2015
- 0
Altijd en overal toegang hebben tot de bestanden op je lokale Samba-netwerkschijven zonder een ingewikkelde VPN-verbinding tot stand te hoeven brengen, overal ter wereld, veilig en snel over standaard HTTPS, met ingebouwde ondersteuning op Windows XP en OS X? Dat kan met het open-source pakket SambaDAV, dat je Samba-shares via het WebDAV-protocol beschikbaar maakt. SambaDAV is onlangs geopensourced door Bokxing IT uit Delft.
Het gemak van de Cloud zit erin dat je eenvoudig vanuit iedere locatie en met elk apparaat bij je bestanden kunt komen. Voor veel mensen de heilige graal, maar toch moet je niet te lichtzinnig denken over het opslaan van je gevoelige data bij een externe partij. De recente onthullingen over grootschalige spionage en infiltratie bij veel cloud-providers tonen weer aan hoe belangrijk het is om zelf de baas te blijven over je data. Het concept is goed, maar zelf de controle houden is noodzakelijk.
Daarbij komt dat veel van de beschikbare cloud-oplossingen voor bestandsuitwisseling, zoals Google Drive, Microsoft SkyDrive, Gladinet en Dropbox, voor privégebruik prima geschikt zijn, maar minder goed integreren met zakelijke gebruikers wier bestanden op een bedrijfsserver staan. Een bestand kan òf in de Cloud òf op de eigen server staan, maar niet op beide tegelijk, tenzij het risico op conflicten wordt genomen. Ook zijn gebruikersaccounts en toegangsrechten in de Cloud niet automatisch gekoppeld aan die op de bedrijfsserver.
Een oplossing is de zogeheten Private Cloud: je maakt de netwerkschijven uit je lokale netwerk op een veilige en makkelijke manier beschikbaar over internet. Je data blijft dan onder eigen beheer, het risico op conflicten wordt veel kleiner, en doordat je je bestaande authenticatie-database in bijvoorbeeld LDAP of Active Directory hergebruikt, blijven alle lokale gebruikersaccounts en toegangsrechten van kracht.
Een voorbeeld van een pakket dat op een eigen server kan worden geïnstalleerd is OwnCloud. Een erg mooie en complete oplossing, maar voor velen te zwaar voor wat eigenlijk nodig is. Een andere oplossing is Davenport, dat een brug vormt tussen Samba (CIFS) en WebDAV. Helaas is dat project niet meer actief. De laaste versie dateert uit maart 2007 en bevat enkele storende bugs. Er bleek hier dus een gat te zijn dat nog niet werd opgevuld door opensource software: een elegante lichtgewicht oplossing voor ontsluiting van bestanden op Samba-shares via het Web.
Bokxing IT is die uitdaging aangegaan. Naar Davenport kijkende, zag het WebDAV-protocol er veelbelovend uit, dus hebben we ons daarop gericht. WebDAV is een variant op HTTP die extra methodes specificeert om bestanden en directories aan te maken, te bewerken en te verwijderen. De standaard zelf is al vrij oud, wat hier als voordeel heeft dat het breed wordt ondersteund. Ondersteuning voor WebDAV-schijven is standaard ingebouwd in OS X en iOS. De Windows “netwerkschijf”-functionaliteit is ook gebaseerd op (een dialect van) WebDAV. In Windows kunnen gebruikers zonder extra software te installeren eenvoudig een WebDAV-share koppelen als netwerkschijf, met schijfletter en al. Omdat WebDAV bovenop HTTP is gebouwd, kunnen we de gebruiker ook in de browser toegang geven tot zijn of haar bestanden. Het prettige van WebDAV is dat het verkeer over HTTPS gaat, dus een VPN instellen is niet nodig (wat in de praktijk vaak een lastig concept is voor de eindgebruiker). Bovendien wordt poort 443 meestal niet geblokkeerd door firewalls.
We hadden al enige ervaring opgedaan met het WebDAV-protocol door het ontwikkelen van een CardDAV-server voor Zarafa. Bij dat project waren we een uitstekende opensource WebDAV-library voor PHP tegengekomen: SabreDAV. Deze library is van hoge kwaliteit en bevat, in tegenstelling tot bijvoorbeeld de mod_dav van Apache of de vergelijkbare module van Nginx, heel veel workarounds voor compatibiliteit van met name de Windows-clients. We zijn daarmee aan de slag gegaan en het resultaat is SambaDAV, een WebDAV-CIFS gateway geschreven in PHP.
Met SambaDAV is het mogelijk om Samba- of Windows-shares in het lokale netwerk online beschikbaar te maken, mèt behoud van de rechten die gelden op de shares. Zo kan elk apparaat dat WebDAV-mogelijkheden heeft op de correcte manier bij de bestanden, of het nu Windows, Apple, Android, Linux of iets anders is.
Onder de motorkap brengt SambaDAV een koppeling tot stand tussen WebDAV en de commandline-client van Samba, smbclient. Op het eerste gezicht lijkt dit misschien wat gekunsteld, maar in de praktijk blijkt het een stabiele en schaalbare oplossing te zijn. Smbclient wordt aangeroepen als subproces waarvan de standaardinvoer en -uitvoer wordt gerouteerd door PHP. De gebruikersnaam en het wachtwoord worden via een unnamed pipe op een naamloze file-descriptor doorgestuurd. De commando’s aan smbclient worden via de standaardinvoer verstuurd, en de eventuele bestanden worden direct vanuit de standaarduitvoer doorgezonden naar de gebruiker. Doordat er geen tijdelijke bestanden worden gemaakt heeft SambaDAV geen moeite met grote bestanden en ligt in de praktijk de limiet op de downloadsnelheid eerder bij de SSL-versleuteling dan bij SambaDAV. Een simpele versleutelde cache in shared memory zorgt ervoor dat het navigeren door de mappenstructuur snel en soepel verloopt.
Installatie
De code van SambaDAV is geopensourced onder de AGPL en staat op GitHub: https://github.com/bokxing-it/sambadav. Daar staat ook de uitgebreide installatiehandleiding. Het gaat wat ver om hier de hele installatie te doorlopen, maar we zullen een kort overzicht geven van hoe het proces ongeveer werkt.
Misschien dat we in de toekomst Composer-ondersteuning inbouwen, maar voorlopig is de installatie een handmatig proces. Voor SambaDAV heb je om te beginnen een server nodig met Samba en de smbclient-tool van Samba 3. (De smbclient uit Samba 4 is nog experimenteel en wordt niet ondersteund.) Als je met smbclient kan verbinden met je fileserver, moet het straks ook lukken via SambaDAV. Je hebt uiteraard ook een Apache-webserver nodig met minimaal PHP 5.3. Download de laatste SabreDAV-release uit de 1.8-serie en pak deze uit in de /lib/-directory van SambaDAV. De configuratie van Apache vergt wat aandacht: op GitHub staat uitgelegd wat er nodig is om met een Windows XP-client te kunnen verbinden over SSL. Dat brengt ons op een volgend punt: veel WebDAV-clients (met name die uit Redmond) willen alleen over SSL verbinden als het servercertificaat geldig en/of vertrouwd is. In de praktijk betekent dat: certificaat kopen, of self-signen en importeren op de machine. De eindgebruiker die dat te moeilijk vindt, kan altijd nog via de browser bij zijn bestanden.
Configuratie
Natuurlijk valt er genoeg te configureren. Bijvoorbeeld welke shares gedeeld worden. Dit vindt plaats door een aantal bestandjes te bewerken in de /config-directory. Je kunt specificeren dat een bepaalde share op een bepaalde server in de root zichtbaar is onder de naam van de share, of zich in een submap met de naam van de server bevindt. Je kan alleen een servernaam opgeven, waarna SambaDAV zelf bij die server de lijst opvraagt van de beschikbare shares en die toont. Ook kan je instellen dat een share op een bepaalde server onder de naam van de gebruiker zichtbaar wordt, zodat bijvoorbeeld voor de gebruiker ‘marco’ de share \\homeserver\marco beschikbaar wordt gemaakt. Het pad naar de homeshare kan zelfs uit een LDAP-eigenschap worden gelezen.
Bij elke request controleert smbclient zelf ook de gebruiker en wachtwoord tegen zijn eigen authenticatie- en toegangsrestricties. Zo kan een gebruiker via SambaDAV niets doen dat hij of zij niet al vanaf de commandline zou kunnen met smbclient (wat weer vrijwel hetzelfde is als wat de gebruiker kan doen via de Network Neighbourhood). Het is mogelijk om SambaDAV eerst nog een lookup in LDAP te laten doen, op basis waarvan de authenticatie geweigerd kan worden voordat smbclient wordt aangeroepen. Dit heeft als voordeel dat een dure call naar smbclient voorkomen wordt en dat via de LDAP-koppeling zaken als lidmaatschap van een bepaalde groep afdwingbaar zijn.
Voeg hier de metadata-cache in shared memory aan toe en een browser-interface voor het uploaden en downloaden van bestanden vanuit elke browser, en je hebt een complete oplossing voor het exporteren van je netwerkschijven over WebDAV. In Windows werkt de workflow heel soepel: open het Netwerkschijven-dialoog, voer de URL https://servernaam/webfolders/ in, log in met gebruikersnaam en wachtwoord en ziedaar: je netwerkschijven lokaal gekoppeld onder een schijfletter. Vervolgens kan je met ieder programma je bestanden bewerken… Van overal ter wereld over een beveiligde verbinding, zonder VPN en zonder speciale software. Doel bereikt!
Info: https://github.com/bokxing-it/sambadav
Alfred Klomp is afgestudeerd aan de TU Delft en werkzaam bij Bokxing IT als Linux-programmeur.