Objectiu:
Quan es disposen de carpetes personals sovint ens interessa que els usuaris hi puguin accedir des de fora de l’empresa. Utilitzar una VPN (Virtual Private Network) és la opció que molts recomanarien, i nosaltres també, sense dubte. Configurar una VPN, però, suposa problemes per a usuaris finals inexperts. Aquesta solució que presentem permetrà als usuaris accedir als seus arxius utilitzant un navegador Web o bé un client WebDAV estàndard.
Utilitzarem un sistema operatiu GNU/Linux Debian Lenny (5.0). Vegeu aquest tutorial per la instal·lació bàsica.
Adaptar el sistema operatiu:
Caldrà disposar d’una partició del disc que puguem utilitzar amb Access Control Lists (acl). En la instal·lació bàsica que es proposava del sistema operatiu es deixava part del disc lliure per a crear d’altres particions. En aquest cas podem utilitzar la resta del disc per muntar-la a /home amb acl activat. Veurem com fer-ho més endavant en aquesta entrada.
Instal·lació de Samba:
El primer que farem es instal·lar samba i configurar l’exportació de les carpetes personals. Aquesta configuració no és necessària, però permet als usuaris accedir als seus arxius des de la xarxa local, de manera tradicional, on el rendiment serà molt millor.
Instal·lar samba és senzill:
$ apt-get install samba
Modificarem l’arxiu /etc/samba/smb.conf per permetre la compartició de les carpetes dels usuaris (homes). La secció [homes] podria quedar així:
[homes] comment = Home Folders browseable = no read only = no create mask = 0700 directory mask = 0700 valid users = %S
Aquesta configuració és una mica paranoica però vàlida pels nostres proposits.
Ja podem recarregar el servei samba:
$ /etc/init.d/samba reload
Configurar ACL:
Instal·lem les eines de gestió de permisos extesos:
$ apt-get install acl
Modifiquem l’arxiu /etc/fstab per a activar l’acl de la partició on muntarem les homes. Aquí hi ha un exemple:
$ cat /etc/fstab /dev/sda1 / ext3 errors=remount-ro 0 0 /dev/sda3 /home ext3 defaults,acl 0 1 proc /proc proc rw,nodev,nosuid,noexec 0 0 /dev/sda2 none swap sw 0 2
Es pot veure com la segona línia es munta a /home i te activada l’opció de muntatge acl.
Remuntem la partició:
$ mount -o remount /dev/sda3
La gestió dels permisos extesos es fa d’una manera força senzilla. Les comandes bàsiques són:
Assignar acl a un arxiu o carpeta:
$ setfacl -m [u,g,o]:nom_usuari:[r,w,x] arxiu
Treure acl d’un arxiu o carpeta:
$ setfacl -x [u,g,o]:nom_usuari arxiu
Consultar l’acl d’un arxiu o carpeta:
$ getfacl arxiu
Esborrar tots els atributs acl extesos:
$ setfacl -b arxiu
Assignar una acl per defecte que es propagarà a les noves entrades:
$ setfacl -d -m [u,g,o]:usuari:[r,w,x] arxiu
Configurar Apache2 amb WebDAV:
Per instal·lar apache2 fem:
$ apt-get install apache2
Un cop instal·lat habilitarem una sèrie de mòduls que ens faran falta més endavant. Ho deixem fet per guanyar temps.
$ a2enmod encoding $ a2enmod headers $ a2enmod dav $ a2enmod dav_fs $ a2enmod userdir $ a2enmod ssl
Modifiquem l’arxiu /etc/apache2/mods-available/userdir.conf i ho deixem preparat per l’accés del usuaris. Hauria de quedar similar a aquest:
<IfModule mod_userdir.c> UserDir . UserDir disabled root <Directory /home/*> DAV On AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ForceType text/plain </Directory> </IfModule>
Ja podem reiniciar l’apache2:
$ /etc/init.d/apache2 restart
Finalment hem de modificar els permisos de les carpetes d’usuari per a que l’apache2 pugui accedir als arxius.
NOTA: Alguns dirien que aquest procés és insegur i tenen raó. Si un atac a l’apache2 guanyés accés al sistema aquest tindria accés a tots els arxius dels usuaris. S’ha de tenir en compte.
Les comandes necessàries són:
$ setfacl -d -m user:usuari:rwx /home/usuari $ setfacl -d -m user:www-data:rwx /home/usuari $ setfacl -m user:usuari:rwx /home/usuari $ setfacl -m user:www-data:rwx /home/usuari
Si tenim molts usuaris podem fer un petit script que permeti canviar tots els permisos de cop de totes les carpetes.
En aquest moment ja tenim l’accés via Web i/o WebDAV als nostres arxius. Per accedir-hi podem utilitzar un navegador web estàndard i anar a:
http://adreça_ip_servidor/~usuari
o a través d’un client WebDAV com ara cadaver. Aquest ens permetrà crear i esborrar arxius i carpetes.
$ apt-get install cadaver $ cadaver http://adreça_ip_servidor/~usuari
De moment l’accés no té cap tipus de seguretat però funciona. Anem a solucionar el problema de l’accés segur en el pròxim punt.
Configurar SSL (opcional però altament recomanable)
Tot i que aquest pas és opcional, si no el configurem les contrasenyes i les dades dels nostres usuaris passaran per la xarxa visibles a tothom. Com que les dades aniran per la xarxa pública no ens interessa que puguin ser visibles. Es recomana configurar SSL al servidor.
Modificarem la configuració del host per defecte d’apache2. Per activar SSL sobre aquest site creem primer un certificat autosignat amb openssl:
$ mkdir /etc/apache2/ssl $ openssl req -x509 -days 3650 -nodes -newkey rsa:2048 -keyout /etc/apache2/ssl/server.key -out /etc/apache2/ssl/server.crt $ chown www-data:www-data /etc/apache2/ssl/server.key $ chmod 0600 /etc/apache2/ssl/server.key
Aquesta comanda ens crearà, després d’emplenar les dades que se’ns demanin, dos arxius a /etc/apache2/ssl, un amb el certificat i l’altre amb la clau secreta.
Modifiquem l’arxiu /etc/apache2/sites-available/default i afegim:
<VirtualHost *:443> SSLCertificateFile /etc/apache2/ssl/server.crt SSLCertificateKeyFile /etc/apache2/ssl/server.key SSLEngine On DocumentRoot /var/www/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> CustomLog /var/log/apache2/access.log combined ErrorLog /var/log/apache2/error.log LogLevel warn </VirtualHost>
Bàsicament és la còpia de l’original amb SSL activat pel port 443.
Ja podem reiniciar l’apache2:
$ /etc/init.d/apache2 restart
En aquest punt podem accedir a les carpetes dels usuaris utilitzant el protocol segur https. L’accés utilitzant certificats autosignats generarà advertències i demés. De moment les podem descartar.
Tot i tenir un accés segur al servidor per SSL, tots els usuaris encara poden accedir a totes les carpetes de tots els usuaris. Fa falta afegir autenticació a les carpetes per que nomès es pugui accedir a la carpeta de la que un n’és propietari.
Autenticació d’usuaris:
En aquest punt ens hem de plantejar com volem fer l’autenticació dels usuaris ja que existeixen moltes i diverses opcions. El principal detall a tenir en compte és com s’autentiquen els usuaris a la nostra empresa o xarxa. És comú tenir un servidor LDAP o Active Directory i ens interessarà que els usuaris puguin utilitzar les contrasenyes que tenen allà emmagatzemades per accedir a les carpetes.
Configurarem l’accés per PAM per ser més oberts a qualsevol configuració. D’altres opcions vàlides per autenticar els usuaris podrien ser:
- Crear un arxiu .htaccess dins de cada directori d’usuari per a gestionar la seguretat. El problema és que l’usuari pot esborrar aquest arxiu, deixant l’accés sense control.
- Crear un arxiu amb totes les configuracions per a cadascuna de les carpetes forà de l’accés dels usuaris. El problema és que per a molts usuaris, la gestió es pot fer feixuga.
- Utilitzar el mòdul perl Apache::AuthzUserDir (adaptat a la versió 2). No massa simple.
L’accés per PAM permet triar (gairebé) cualsevol tipus d’autenticació d’usuari a nivell de sistema operatiu.
El primer que fa falta és instal·lar el mòdul perl per l’apache2:
$ apt-get install libapache2-mod-perl2
Instal·lem el modul perl Authen::PAM que ens farà falta pel mòdul Apache2-AuthPAMUserDir d’autenticació.
$ apt-get install libauthen-pam-perl
El mòdul que farem servir s’anomena Apache2::AuthPAMUserDir i és una adaptació del mòdul Apache2::AuthPAM per treballar amb UserDir.
Per instal·lar-lo farem:
$ wget http://www.osconfig.org/files/Apache2-AuthPAMUserDir-0.02.tar.gz $ tar zxf Apache2-AuthPAMUserDir-0.02.tar.gz $ cd Apache2-AuthPAMUserDir $ perl Makefile.PL $ make $ make test $ make install
Modifiquem l’arxiu /etc/apache2/mods-available/userdir.conf i afegim:
<Directory /home/*> ... PerlAuthenHandler Apache2::AuthPAMUserDir AuthType Basic AuthName "Carpetes d'usuari" PerlSetVar PAMservice userdir Require valid-user ... </Directory>
Ja podem reiniciar l’apache2:
$ /etc/init.d/apache2 restart
Finalment creem un arxiu de servei PAM a /etc/pam.d/userdir amb el següent contingut:
@include common-auth @include common-account
NOTA: La configuració del Debian Lenny utilitza l’autenticació local (pam_unix.so). Per que apache2 pugui auntenticar utilitzant aquest mòdul ha de ser membre del grup shadow.
$ adduser www-data shadow
Aquest pas no serà necessari si utilitzem altres mòduls PAM com winbind o ldap.
Accés des de Windows XP:
Windows posa problemes per accedir a servidors WebDAV si no permeten el tipus d’autenticació que Windows vol imposar. Aixó ho podem solucionar modificant una mica el servidor apache2.
Creem un nou arxiu amb:
$ pico /etc/apache2/conf.d/encoding
amb el següent contingut:
BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully BrowserMatch "Microsoft-WebDAV-MiniRedir/5.1.2600" redirect-carefully BrowserMatch "^WebDrive" redirect-carefully BrowserMatch "^WebDAVFS" redirect-carefully <IfModule mod_headers.c> Header add MS-Author-Via "DAV" </IfModule> <IfModule mod_encoding.c> EncodingEngine on NormalizeUsername on </IfModule>
Ja podem reiniciar l’apache2:
$ /etc/init.d/apache2 restart
Quan creem el nou “Lloc de Xarxa” a Windows haurem de posar el següent com a adreça remota:
https://adreça_ip_servidor/~usuari
i si no hem configurat SSL:
http://adreça_ip_servidor:80/~usuari
NOTA: Important forçar el port 80.
Conclusió:
En aquest punt ja tenim el servidor amb els serveis:
- samba compartint les carpetes d’usuari mitjançant el protocol SMB/CIFS.
- apache2 amb WebDAV compartint les carpetes d’usuari mitjançant el mòdul UserDir, amb seguretat SSL i autenticant usuaris amb el mòdul perl Apache2::AuthPAMUserDir.
Un usuari només té accés a la seva carpeta. L’intent d’accedir a una carpeta d’un altre usuari via WebDAV llençarà un error FORBIDDEN, que és el que cercavem.
Com sempre es recomana llegir les documentacions associades als programes instal·lats:
$ man httpd.conf $ man smb.conf $ man setfacl $ man getfacl $ man openssl