Sep 17

Autenticació PAM/OTP via Apache

Reading time: 4 – 6 minutes

L’autenticació d’Apache coneguda com a AuthBasic malgrat la seva inseguretat és una de les més usades, ja que ens permet de forma senzilla i ràpida protegir un directori o simplement un fitxer. La protecció d’aquest tipus d’autenticació és molt relativa perquè el password viatge en clar a través de la xarxa, a més, al viatjar a les capçaleres HTTP o fins hi tot en la propia URL de la pàgina pot arribar a ser indexat per un navegador.

Seguint la línia dels anteriors articles:

Ara el que toca és afegir a l’Apache aquest tipus d’autenticació de forma que podem donar les credencials d’accés a un directori/fitxer a algú però aquestes caducaran al cap del temps (uns 3 minuts) i els buscadors o d’altres agents amb més mala idea no podran accedir al recurs passat aquest temps. Com sempre la idea és la d’aprofitar-se del PAM/OTP.

En primera instància per aconseguir això ho he intentat amb el mòdul libapache2-mod-auth-pam però no n’he tret l’entrellat i he estat incapaç de completar la configuració. Així doncs, el que he fet és provar amb el mòdul libapache2-mod-authnz-external ambdós disponibles en l’Ubuntu 8.04 (Hardy). Aquest segon mòdul l’he combinat amb el checkpassword-pam.

Així doncs, la idea és ben senzilla configurem l’Apache perquè usi el libapache2-mod-authnz-external, en escència el que fa aquest mòdul és recolzar-se en agents externs per fer l’autenticació. Aquest agent extern és el checkpassword-pam que comentava i que com diu el seu nom el que fa és validar el password contra PAM, així doncs, malgrat no és una solució massa eficient a nivell de recursos ja que ha de carregar un segon programa per validar cada usuari considero que és una solució suficienment bona pel meu cas.

La configuració

Instal·lem el mòdul d’apache i l’activem:

apt-get install libapache2-mod-authnz-external
a2enmod authnz_external
/etc/init.d/apache2 restart

Instal·lació del checkpassword-pam

cd /var/tmp
wget "http://downloads.sourceforge.net/project/checkpasswd-pam/checkpasswd-pam/0.99/checkpassword-pam-0.99.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fcheckpasswd-pam%2F&ts=1284649515&use_mirror=ignum"
tar xvfz checkpassword-pam-0.99.tar.gz
cd checkpassword-pam-0.99
./configure
make
mkdir -p /opt/checkpassword-pam
cp checkpassword-pam /opt/checkpassword-pam

Fitxer de configuració pel servei apache2 del PAM, /etc/pam.d/apache2:

auth    sufficient      pam_script.so onerr=fail dir=/etc/pam-script.d/
account  required       pam_script.so onerr=fail dir=/etc/pam-script.d/

Si us hi fixeu aquest fitxer és igual al que vaig usar per fer l’autenticació en l’article de PHP i PAM/OTP.

Ara anem a un dels fitxers de configuració d’Apache per un virtualhost i afegim el següent codi per protegir un directori servit per aquest virtualhost:

<Directory /var/www/virtualhost/directori_a_protegir>
  AuthType Basic
  AuthName "Restricted area for My Server"
  require user nom_usuari
  AuthBasicProvider external
  AuthExternal autenticador
</Directory>
AddExternalAuth autenticador "/opt/checkpassword-pam/checkpassword-pam -H --noenv -s php -- /bin/true"
SetExternalAuthMethod autenticador checkpassword

Coses importants a destacar en aquest configuració, fixeu-vos que em cal afegir ‘require user nom_usuari’, això és perquè no disposo de cap fitxer d’usuaris on Apache pugui validar quins són els meus usuaris vàlids i la directiva ‘require valid-users’ no funcionaria, així doncs, hem d’especificar quins usuaris podran fer login a través d’aquesta comanda, o bé, afegir una altre directiva que li permiti a Apache trobar un llistat d’usuaris en algún lloc.

Un altre detall important són els paràmetres que he d’usar al checkpasswords-pam perquè aquest funcioni bé:

  • -H no intenta fer un ‘chdir-home’ ja que potser l’usuari no disposa d’aquest ‘home directory’.
  • –noenv el checkpassword-pam busca certes variables d’entorn per funcionar, amb aquest paràmetre no les busca i agafa el que li cal del stdin.
  • -s apache2 especifica el nom del servei que buscarà dins de /etc/pam.d/apache2
  • — /bin/true simplement serveix perquè el checkpassword-pam no faci res després de validar un usuari, ja que podriem executar algún programa si volguessim després de fer la validació.

Referències

Feb 04

Redirigit peticions webmail.* en un Plesk

Reading time: 1 – 2 minutes

L’objectiu és aconseguir que totes les peticions de l’estil: http://webmail.domini.tld es redirigeixin a: http://domini.tld/webmail amb un servidor amb Plesk.

Creem el fitxer de configuració d’apache: /etc/httpd/conf.d/webmail-redir.conf


<VirtualHost ip_publica_1:80 ip_publica_2:80 ... ip_publica_3:80>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^webmail.* [NC]
RewriteMap  hostname prg:/opt/scripts/hostname.sh
RewriteRule ^(.*) http://${hostname:%{HTTP_HOST}}/webmail [L,R]
</VirtualHost>

i creem l’script: /opt/scripts/hostname.sh (perms: 755)

#!/bin/sh

while read inputline
do
        domini=$(echo $inputline| cut -d "." -f 2)
        tld=$(echo $inputline|cut -d "." -f 3)
        echo $domini.$tld
done

En escència el que estem fent és aprofitar-nos del mod_rewrite d’apache2 per poder assignar a la funció de mapes un script que retalla el HTTP_HOST treient-li la paraula webmail de l’inici. Amb això obtenim el domini al que volem connectar i només li hem d’afegir la URI a la RewriteRule perquè ens redirigeixi cap on toca.

Jan 09

Simple Invoices: factures i prou

Reading time: 1 – 2 minutes

simple invoices logoA través de twitter i més concretament gràices a un enllaç que va publicar l’Oriol he descobert una aplicació que té molt bona pinta, es tracta de SimpleInvoices. La seva finalitat poder fer i gestionar les factures, l’aplicació esta molt lluny d’un ERP o quelcom semblant simplement fa factures. Aquesta és la gràcia, hi ha molts autònoms que no volem grans eines complicades sinó simplement una forma senzilla i ajustable a les nostres necessitats.

Poder fer factures, pressupostos, guardar-los, imprimir-los, exportar-los a PDF i enviar-los als clients i ben poca cosa més. Tot plegat accessible via web, basat en LAMP i Open Source com no podia ser de cap altre manera. Per si tot això no fos poc també suporta diversos idiomes a l’interficie i ens podem personalitzar les plantilles de les factures.

De fet, encara no he començat a usar l’eina ni he decidit del tot si ho faré o no, però ús puc assegurar que té força números que ho acabi fent amb aquesta eina.

Aug 18

Generant RSS de les revisions de Subversion

Reading time: 2 – 2 minutes

rss.jpg

Quan treballes en un projecte on hi ha més d’una persona treballant contra un repositori de codi és molt bona idea poder-se sindicar via RSS a les noves revisions que es van publicant del codi i als comentaris associats a aquestes revisions. De fet, aconseguir això amb subversion no és gens difícil. Jo fins ara ho he fet amb el WebSVN (port del ViewCVS. A més gràcies al trac també podem obtenir aquests RSS i moltes més funcionalitats. Però tot això ja us ho he explicat. En alguns casos però ens pot interessar publicar aquests RSS sense haver de tenir programes orientats a altres funcionalitats sinó únicament aprofitar les extencions WebDAV/DAV_SVN per publicar els RSS. Això és el que ens expliquen a l’article HOWTO: Adding an RSS feed to a Subversion Server (local).

De fet, el que planteja aquest article és força senzill. Simplement usa un generador d’RSS a partir de les revisions de l’SVN, l’script esta fet en python i després li diem al subversion que després de cada commit que es fassi al repositori es genir un nou fitxer RSS. Així doncs el tema no té cap misteri però va bé tenir-ho en un howto per si mai fa falta.