Per fi tenim feta la web del viatge a Costa Rica, aquest cop ha costat força però ja veureu que hi ha molta lletra i això no és fàcil de gestionar. A més d’un munt de fotografies recopilades de l’àlbum de fotos.
Quan ens roben el portàtil l’únic que ens queda fer és resar perquè siguem realistes, és molt poc provable que la policia el trobi. Així doncs, el que preten fer prey és enviar-nos tota la informació possible del portàtil després de que ens l’hagin robat.
El seu funcionament és força simple, però al mateix temps s’ha de dir que la idea sembla força eficient. En la versió per linux es tracta d’un script fet amb perl que es col·loca al crontab, de forma que cada x’s minuts es connecta a una URL del servidor de prey o del nostre propi servidor. Aquest URL sovint respon dient que tot va bé, és a dir, que el portàtil no ha estat marcat com a robat. En cas contrari, el servidor respon via HTTP dient que el dispositiu ha estat robat. En aquest moment és quan l’script es posa a treballar i es posa a recollir tot tipus d’informació per reportar-la a la pàgina web:
geolocalització per GPS o Wifi, si no disposem de GPS. He provat la localització per wifi i va força bé.
fa fotos amb la webcam del portàtil i captures de pantalla
reporta tota la informació que pot sobre processos que hi ha corrent al sistema, rutes, informació de les wifis veïnes, etc.
també podem fer sonar alarmes, borrar informació remotament, que ens enviï alguns arxius abans de ser borrats,etc.
a més els reports que es van reben queden arxivats en una interficie força amigable i molt senzilla d’usar
a més el software d’auto-actualitza
La compte gratuïta que ofereix la pàgina web permet tracejar fins a 3 dispositius, obviament si usem el nostre propi servidor HTTP podrem tracejar tots els dispositius que volem. Si volem usar més dispositius haurem d’adquirir una compte professional que tampoc sembla massa cara: per exemple, la més econòmica és la de 12€/mes que permet controlar fins a 10 dispositius amb un màxim de 25 informes per cada dispositiu.
Jo he provat la versió de Windows i la de Linux i ambdues m’han funcionat força bé a la primera, però pel que posa a la web també tenen la versió de Mac i la d’Android. Aquest última diria que és molt nova. Malgrat això en els meus dos Androids no uso prey sinó que uso WaveSecure. Pensat especialment per a dispostius mòbils, ja que tenen versions per: Blackberry, Symbian, Windows phone, Java i Android, és clar.
Sempre he estat un gran defensor del monit com a complement al sistema de control de serveis de Linux: rc.d scripts. Monit permet a través d’una interficie de gestió web controlar i delegar a usuaris sense coneixements de Linux el control bàsic dels serveis d’una màquina. Per tal de supervisar si un servei esta corrent es basa en el PID del procés i la seva existència, cosa que la veritat en molts casos és una mica pobre. Però té una gran capacitat de poder configurar accions en base a carregues de memòria, CPU, etc.
Supervisord és un software que en certa forma ens dona una solució integrada i força més eficient en alguns aspectes que no pas monit+rc.d, per exemple, la vigilància dels processos és molt més efectiva que no pas amb monit perquè aquests es llencen com a fills del supervisord. Això li permet al pare poder comprovar si realment el fill és viu o no. A més, quan un fill mor el pare ràpidament ho sap i pot reiniciar-lo si és això el que volem. Mentre que monit per fer això el que fa és un procés de polling cada x’s segons preguntant l’estat dels processos.
Monit disposa d’interficie web i control via CLI del sistema, al igual que supervisord. Malgrat monit mostra algunes informacions sobre càrrega del sistema que no és capaç de mostrar supervisord. Per altre banda supervisord al llençar els processos ell de forma nativa permet redirigir les sortides d’aquests (stdout, stderr, etc).
Fora d’aquestes petites avantatges que he comentat fins ara de monit sobre supervisord, per la resta de coses podriem dir que supervisord li dona mil voltes a monit, començant pel concepte. Així doncs, a partir d’ara en l’article em centraré en explicar les funcionalitats que té sense comprar-les:
http server gestió dels processos via web
supervisorctl gestió via CLI, és una interficie interactiva de gestió no la propia CLI del sistema.
program permet parametritzar el llençament i control d’un servei amb directori de treball, umask, prioritat, autostart, autorestart, retries, usuari, redirecció de les sortides estàndard i error cap a fitxers de configuració, variables d’entorn, etc.
group es poden agrupar els serveis per tal de tractar-los com a una unitat.
fcgi interface permet controlar grups de serveis llençats via FastCGI. Evitant que aquesta tasca la faci, per exemple, Apache i oferint una gestió de concurrència molt més eficient.
events es defineixen un conjunt d’events a partir dels quals podem definir una serie d’scripts per capturar-los i donar un tractament del mateix de forma controlada. Per exemple, l’estat d’un procés canvia i volem que quan això passi es reinici el mateix procés.
rpcinterface també disposa d’una interficie XML-RPC a través de la qual podem connectar-hi aplicacions de tercers. Per exemple, una aplicació pot connectar via RPC per saber si un servei esta funcionant.
Properament he de fer la migració d’uns sistemes, així doncs, si no hi ha cap novetat usaré supervisord per controlar HAProxy, keepalived, entre d’altres moltes eines. Espero poder-ho anar documentant poc a poc.
Amb les quatre notes que adjunto en aquest article es preten tenir una guia per tal de poder seguir i entendre els fitxers de configuració associats a PAM.
Quan PAM va associat a un servei aquest té un fitxer de configuració dins de /etc/pam.d sovint amb el mateix nom del servei o quelcom que ens el recorda. Dins de cada fitxer d’aquests es defineixen quatre categories pel procés d’autenticació:
auth – autenticació
account – gestió d’accés
password – quan i com es pot canviar la paraula de pas
session – entorn de configuració de l’usuari, accés al seu perfil
No és obligatori definir les quatre categories per tots els serveis, hi ha serveis que amb la categoria auth, en tenen prou. O d’altres que les requereixen totes.
PAM té una selecció de diferents models per cada categoria que s’organitzen en una pila. Cada mòdul esta etiquetat amb el que s’anomena una bandera de control. A través d’aquestes eines és com l’administrador controla el procés d’autenticació dels usuaris sobre els serveis.
Les banderes de control suportades per PAM són:
required
requisite
sufficient
optional
Si un mòdul marcat amb required, requisite o sufficient respon de forma negativa es deté l’execusió de la pila de forma inmediata.
Si la resposta és positiva en un mòdul: required, requisite o optional llavors PAM seguirà examinant la resta de mòduls.
Si un mòdul sufficient respon positivament es considera positiva la resposta a tota la categoria que s’esta examinant.
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.
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.
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>AuthTypeBasicAuthName"Restricted area for My Server"requireusernom_usuariAuthBasicProviderexternalAuthExternalautenticador</Directory>AddExternalAuthautenticador"/opt/checkpassword-pam/checkpassword-pam -H --noenv -s php -- /bin/true"SetExternalAuthMethodautenticadorcheckpassword
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ó.
Reading time: < 1 minute
Tan senzill com llençar un top i un cop dins l’interficie premer O (majúscula) i seguidament p, amb un intro tornem a la pantalla del top i apareix una nova columna anomenada SWAP que ens diu quantes pàgines de memòria consumeix un procés, a més la llista de processos que es poden veure estan ordenats per ordre descendent segons el que més memòria SWAP ocupa.
Una bona forma de continuar aprofindint amb el tema OTP i també amb PAM, després de l’article: Shellinabox i OTP, és explicar-vos com m’ho he fet per afegir suport OTP al PHP, de forma que quan programem amb PHP es pugui delegar l’autenticació al sistema PAM del linux. Obviament això té certes restriccions perquè PHP corre amb els permisos de l’usuari de l’Apache, o bé, de l’usuari del FSGI, etc. L’important de fer notar és que no és habitual llençar codi PHP amb permisos de ‘root’. Així doncs, depèn de quina acció li fem fer al PAM aquest no la podrà dur a terme, per exemple, no podrà accedir al fitxer /etc/shadow per validar el password de sistema. De fet, com que el que jo vull és treballar amb OTP això no és rellevant.
El primer que s’ha de fer és instal·lar el paquet php5-auth-apm i reiniciar l’Apache:
La comanda clau com podeu veure és pam_auth, passeu com a paràmetre el nom de l’usuari, el password que ús ha donat la vostre aplicació generadora de passwords OTP i la variable que voleu que reculli els errors la passeu per referencia. En cas d’error de l’autenticació aquesta comanda contindrà la descripció de l’error. Aquesta mateixa funció retorna un codi boleà amb el resultat de l’autenticació.
A vegades cal poder accedir a la shell d’un servidor però no es disposa de cap client SSH ni res semblant, o fins hi tot hi ha casos en que només si pot accedir a través de proxy usant HTTP, ni tan sols es disposa d’HTTPs. Per aquests casos el que he fet és montar el següent:
Un shellinabox que és un dimoni que publica una shell a través d’HTTP, de forma que es pot usar el navegador com a client. A diferència d’altres solucions aquesta esta implementada aprofitant AJAX i no li cal suport de flash, java o d’altres tecnologies similars. Si no l’heu provat, feu-ho perquè és impressionant el bé que arriba a funcionar.
Bé doncs, gràcies al dimoni de shellinabox ja podriem publicar al port 80 la pantalla de login del nostre servidor, però en el meu cas al port 80 hi tinc l’Apache funcionant, així doncs, el que he fet és montar un proxy invers aprofitant les funcionalitats d’Apache, de forma que quan em connecto a un subdomini concret l’Apache redirecciona la meva connexió HTTP al servidor de shellinabox.
Al usar aquest client que funciona sobre un protocol sense xifrar tothom podria aconseguir de forma senzilla l’usuari i password que uso per accedir a la shell. Per tal de solucionar aquest problema el que he fet és instal·lar com a mètode d’autenticació al PAM del servidor suport OTP.
O sigui, que quan l’usuari fa login per qualsevol servei que usi el sistema d’autenticació ‘common-auth’ del PAM aquest podrà fer-ho amb el password del sistema o bé amb un password d’un sol ús. Això em garanteix que després de que jo m’hagi autenticat a la shell amb un password ningú més ho podrà fer amb aquell password.
Esquema de la idea
Configuració d’apache, proxy invers
Primer de tot cal activar el modul ‘proxy’ de l’Apache:
a2enmodproxy
Després creem un subdomini i re-enviem el tràfic cap al servidor de shellinabox:
Després d’això ja podeu reiniciar l’apache, recordeu a crear la corresponent entrada al DNS.
Paràmetres que uso pel shellinabox
Malgrat el manual del shellinabox esta plè d’opcions molt interessants en el meu cas amb els següents paràmetres n’he tingut prou:
/opt/shellinabox/bin/shellinaboxd--no-beep-t-b
–no-beep no vull que emeti ‘beeps’, proveu-ho sense això a mi em van fotre un ensurt que encara tremolo
-t per deshabilitar l’SSL que s’activa per defecte
-b es llença en background
Configuració d’OTP al PAM del linux
El suport OTP que he afegit al PAM és molt limitat i bàsic, ja que no volia afegir més complexitat al sistema, o sigui, que per controlar els usuaris que poden accedir via OTP he usat un simple fitxer de text pla i per validar l’autenticació em recolzo amb el pam_script que és un mòdul de PAM que permet llençar un script arbitrari per validar l’autenticació.
Potser una de les formes més recomanables si voleu usar OTP en un servidor més professional que el que jo he usat seria fer-ho a través de RADIUS, o bé, usant MOAS el qual ofereix una interficie web feta amb PHP i backend MySQL per mantenir una taula d’usuaris i d’altres detalls de configuració.
Tornant al cas que ens ocupa, la configuració de PAM que he usat és tan senzilla com:
La primera línia afegeix suport de pam_script per l’autenticació, a més de posar-hi dos paràmetres que indiquen que si aquesta falla fallarà l’autenticació i també indica a quin directori s’ha d’anar a buscar l’script d’autenticació. Aquí és on es provarà si s’ha introduït un password OTP.
La segona línia és estàndard en l’ubuntu on he fet la configuració, excepte l’últim paràmetre try_first_pass que diu que torni a provar el password que s’ha introduït en el pas anterior, així no l’hem de re-introduïr per validar si el password intruït és un password de sistema.
Ambdues línies usen la ‘flag’ sufficient, o sigui que si algún dambdós es compleix serà suficient per validar positivament l’autenticació.
El pam_script és un mòdul de PAM que al instal·lar-lo ens ha creat la carpeta /etc/pam-script.d amb uns quants fitxers al seu interior. Aquí l’únic que haurem de fer és borrar l’enllaç simbòlic anomenat: /etc/pam-script.d/pam_script_auth. Ja que per defecte aquest apunta a /etc/pam-script.d/pam_script i nosaltres no volem usar l’script per defecte sinó el nostre propi script, o sigui, el que fa la validació OTP.
L’script que fa la validació l’he modificat una miqueta respecte l’script per defecte i l’he col·locat a: /opt/otp/otp-auth. Ara ja podem refer l’enllaç simbòlic que haviem borrat abans:
En el meu cas, el secret l’he generat amb l’eina client que m’he instal·lat al mòbil (Android). El pin simplement ús el podeu inventar i és necessari introduir-lo al client que genera les claus.
Client OTP per Android
El client que he usat per Android és el Mobile-OTP, quan l’executeu per primera vegada ús guiarà perquè genereu un secret i un pin quan els tingueu els heu de posar al fitxer de configuració /opt/otp/otp-secrets.
Procés d’ús
Anem a un navegador qualsevol connectat a internet, accedim al subdomini que hem definit i ens surt una pantalla de login, introduïm l’usuari i ens demana el password.
Ara agafem el mòbil i obrim l’aplicació Mobile-OTP, posem el codi PIN i premem el botó ‘Calculate OTP’ inmediatament després ens surt un codi amb números i lletres i una longitud de 6 caràcters, introduïm aquest codi com a password de la nostre compte i ja som dins.
Recordeu que aquest codi és vàlid durant uns 2 minuts aproximadament, després l’haureu de tornar a generar. Aquest codi també deixa de ser vàlid en el moment en que ja l’heu usat un cop, o sigui, que si voleu fer dos logins seguits haureu de generar dos codis.
També es pot usar OTP amb altres serveis
Recordeu que al configurar el sistema d’autenticació OTP al PAM ho he fet a l’arxiu ‘common-auth’, això vol dir que qualsevol servei de la màquina que usi aquest fitxer d’autenticació (la majoria ho fan: SSH, POP3, IMAP, etc) suportarà el sistema d’autenticació OTP.
Així doncs, si feu un SSH dels de tota la vida cap a la vostre màquina però no voleu que ningú sàpigue el vostre password només mirant com escriuen els vostres dits podeu aprofitar aquest sistema.
Tot ordenant .txt he trobat quatre notes que havia fet fa temps extretes de l’experiència i de documents de relacionats amb digital signage que havia anat llegint, per tal de no perdre-les les anoto a continuació:
Entorn:
Audiència: estàtica o en moviment?
Predisposició a aturar-se de l’audiència? (area de pas, passeig, etc)
Cal posar audio? o no dona cap valor afegit.
Audiència:
Qui mirarà el contingut?
És una necessitat comuna?
S’esta buscant algún tipus d’interactivitat, o simplement captació pel missatge emès?
Què trobarà interessant l’audiència o com a míninm digne de mirar?
Cuantes vegades un individu veurà el missatge?
Perquè l’audiència li hauria de donar un segon cop d’ull?
El missatge:
Venem producte, o un nou estil de vida?
Creem una atmosfera, o fem marca?
Cal enumerar els beneficis o podem deixar que les imatges parlin soles?
Estem informant, instruint, venent o que…?
És un missatge aïllat o part d’una campanya que usa altres tipus de media?
Podrien millorar l’experiència enllaços a altres sistemes?
Tips and tricks:
Intentar crear un sentit de propietat comuna del projecte entre tots els players del negoci
Audiència en moviment, missatge estàtic. Audiència estàtica, missatge en moviment.
Monitorització constant de les reaccions de l’audiència.
S’ha de considerar que l’audiència només donarà una ullada a la pantalla.
Buscar consistència en els estils i colors del missatge.
Les tipografies i mides de la lletra han de ser prou clares per llegir-se a certa distància.
No cal esperar que la publicitat millori de forma espectacular les ventes d’un producte. Només és un complement que ajuda a donar a coneixer el producte.
Cal assegurar-se que el contingut té una part d’entreteniment i una part d’informació.
Cal pensar que al montar una pantalla on la gent esta en moviment aquesta ha d’estar en un punt on es pugui seguir movent-se i llegint el missatge.
Compte amb l’audio, sovint no és una bona idea.
És important tenir el contingut ben actualitzat i no mostrar informacions obsoletes, això fa perdre credibilitat al medi.
És important saber l’experiència que té l’audiència sobre el medi.
Reading time: < 1 minute
En un .txt tenia unes notes que havia pres sobre entorns de programació, escencialment la conferència de la que són les notes parlava sobre PHP i diferents formens de fer el desplegament dels projectes. Aquesta informació l'he passat a una pàgina del wiki amb la idea d'anar-la actualitzant per altres llenguatges especialment amb la idea de afegir-hi notes de python.
Així doncs l'enllaç del wiki és a: Notes about programming environments and deployment. Tal com podeu deduir amb el títol les notes són amb anglès, sento no recordar la conferència per afegir-hi la presentació.
A continuació enganxo el contingut de la wiki de forma dinàmica, així quan actualitzi la wiki s’actualitzarà l’article: