Com protegir els nostres llocs usant .htpasswd + Exemples

Per molts motius pot resultar molt útil tenir controlat l'accés a determinats directoris d'un servidor web o simplement a continguts de la nostra pàgina o blog mitjançant un servei d'autenticació basat en usuari i contrasenya. Parlo d'una cosa com la típica finestra que ens apareix quan volem entrar en un web amb serveis restringits.

Hi ha diverses formes de generar finestres amb formulari d'autenticació però una solució interessant a nivell de servidor la brinda htpasswd. És una utilitat que té per funció emmagatzemar contrasenyes de forma xifrada per ser utilitzades per Apache en serveis d'autenticació. El seu ús ens permetria mostrar determinats directoris o arxius via http només a usuaris identificats i sense que necessàriament estiguin a lliure disposició de tot el món.

Entenc que no és un tema massa cridaner però si que pot ser d'utilitat a alguns. Per tal de no matar-los d'avorriment em ajudaré d'imatges perquè sigui més didàctic.

Consideracions prèvies: Utilitzaré Ubuntu Server 12.04.1 y Apache 2.2.22 en un entorn controlat.

Comencem.

Com alguns ja han de saber, per defecte els llocs disponibles d'Apache s'emmagatzemen al directori / var / www / i per aquest exemple crearé un directori amb una plantilla HTML i intentaré blindar amb .htpasswd.

El directori a protegir és / Var / www / exemple / on he col·locat la següent pàgina.

Al servidor

Al navegador

1. Crearem el .htpasswd.

El lloc on estarà ubicat és de rellevant importància i col·locar-fora d'un directori públic pot ser més que recomanable. En el meu cas ho ubicaré en la carpeta de personal (que no és un directori públic d'Apache) i amb el nom .htpasswd (A priori tampoc cal dir-ho d'aquesta manera, però el que estigui ocult sempre és bo).

Per a usuaris novells en Linux. Per amagar un directori o arxiu només cal que comenci el seu nom amb un punt (.).

Amb la comanda següent crec l'arxiu .htpasswd per a un usuari web que he anomenat com: "Luke".

# htpasswd -c /home/krel/.htpasswd Luke

Demanarà que li subministrem la contrasenya dues vegades, en el meu cas he posat "skywalker" (sense cometes). En un entorn no controlats hem d'establir contrasenyes més robustes. El xifrat per defecte en Linux és MD5 però en Unix és una implementació estàndard de crypt () i per a contrasenyes amb menys de 8 caràcters pot ser vulnerable. Ara em sorgeix el dubte de si en BSD és igual.

La comanda té aquesta estructura:

  • -c → per crear el fitxer
  • /home/krel/.htpasswd → ruta absoluta de l'arxiu.
  • Luke → el nom de l'usuari (pot ser el que vulgueu)

De la mateixa manera no obligo a ningú a utilitzar la terminal quan hi ha serveis a Internet per a això:
http://www.web2generators.com/apache/htpasswd_generator

http://www.htaccesstools.com/htpasswd-generator/

El resultat els copiem en un arxiu de text i amb el nom .htpasswd si així ho desitgen. Pel que fa a aquest mètode no deixin de llegir el que comento en el següent paràgraf.

En el nostre cas veurem l'arxiu s'ha generat on els esperàvem /home/krel/.htpasswd. A la imatge he ressaltat que amb aquest mètode l'arxiu pertany a el grup i usuari d'apache, que en Ubuntu se l'anomena www-data. Això és important perquè si hem generat d'alguna altra forma el .htpasswd hem de cerciorem que tingui permisos 644.

Bé, ara veurem com són els seus budells:

Com poden veure, està l'usuari (Luke) però la contrasenya està xifrada.

D'aquesta manera ja hem creat i dissenyat .htpasswd per a l'usuari Luke, a la fi no és més que un contenidor per a la contrasenya. "Tot amb una ordre" seria un bon eslògan.

2. Configura Apache de manera que l'utilitzi i permeti aquest servei en el lloc.

# nano /etc/apache2/sites-available/default

Si teniu diversos host hauran de treballar sobre cada un d'ells, en el meu cas que només tinc el que ve per defecte. No oblideu que sempre és bo fer un backup d'aquest arxiu.

Aquest arxiu té l'estructura per defecte:

ServerAdmin webmaster @ localhost

..................

..................

Precisament dins de les capçaleres de VirtualHost és on s'especificarà la utilització de .htpasswd per accedir a determinat directori. Ho fem tal com apareix la imatge a continuació i adequada al nostre exemple:

Bé. Explico les línies:

Cal posar directori a protegir.

AuthType Basic

És el tipus de negociat d'usuari i contrasenya amb el navegador, en aquest cas és Basic, sense xifrar.

Hi ha un altre tipus de negociat: Digest, aquest si xifra l'usuari i la contrasenya però l'última paraula la té el navegador pel que fa a si suporta aquest servei. Digest es pot dir que és una implementació una mica més robusta davant sniffers. Els convido a aprofundir en això.

AuthName «Tocar la porta abans d'entrar».

És missatge que li sortirà a l'usuari en el navegador amb el formulari de login i pot ser el que vulguem.

AuthUserFile /var/www/.pass/.htpasswd

Ruta el fitxer .htpasswd. Per aquesta raó és que dic que ni tan sols cal nomenar-.htpasswd, simplement posant la ruta funcionaria igual.

Cal un usuari vàlid

Aquesta línia està dissenyada per a múltiples usuaris amb contrasenyes individualitzades. En cas que sigui un únic usuari pot resumir-se com la següent variant.

Requereix user el_que_sigui

En el meu el meu exemple podria ser: Requereix user Luke

I finalment tanquem tot amb

Reiniciem apache:

# service apache2 restart

Provem.

Si no ens autenticamos correctament ens sortirà un Error 401.

En la banda oposada, si posem l'usuari correcte i la contrasenya ens deixaria passar sense major inconvenients.

Tips addicionals.

  • Per afegir més usuaris a un arxiu htpasswd ja creat poden utilitzar aquesta comanda

htpasswd -mb /home/krel/.htpasswd Usuari Contrasenya

Si teniu establert "Require user" i no "Require valid-user" haureu d'afegir el nou usuari seguit de l'anterior i separat per un espai. exemple:

Requereix user Luke Anakin

  • Utilitzar grups d'usuaris

Si en lloc d'usuari individuals preferim o necessitem treballar amb grups en la següent web ho expliquen amb molt detall i és un excel·lent article.
http://www.juanfelipe.net/node/23

  • També podem fixar un altre tipus de xifrat, per exemple: SHA

htpasswd -SB /home/krel/.htpasswd Usuari Contrasenya

Aquí deixo una imatge de com es reflectiria en el .htpasswd el registre d'una contrasenya SHA. En tots dos era "skywalker".

Més informació.

htpasswd - -help

Si volen aprofundir més en aquest tema sempre és bo RTFM !!!
http://httpd.apache.org/docs/2.0/es/howto/auth.html

http://httpd.apache.org/docs/2.2/misc/password_encryptions.html

També m'ha resultat curiós aquest script en PHP de la pàgina de la Universitat de Granada per a crear un generador de htaccess i htpasswd. No ho he pogut posar en pràctica però els convido a al fet que «curioseen amb la intel·ligència».

La plantilla HTML la vaig obtenir des d'aquesta pàgina per si algú li interessa.
http://www.templatemo.com/

Espero que li hagi agradat aquesta presentació de htpasswd.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   krel va dir

    Ara llegint novament el post m'he adonat que he comès un petit llorigó. Quan explico les línies en la configuració de el lloc, en AuthUserFile vaig posar /var/www/.pass/.htpasswd quan hauria de ser:
    /home/krel/.htpasswd.

    A la imatge està bé però aquí es va escapar, és que tenia fet anteriorment fet l'article amb aquesta ruta, però a última hora ho vaig canviar i a l'sembla això em va passar corregir-ho.

    Demano disculpes per endavant.

  2.   Fernando va dir

    Alguna alternativa per nautilus ??

    1.    krel va dir

      El que preguntes crec que va per un altre costat però igual et contesto.
      Crec amb Cryptkeeper et valdria per protegir directoris i coses així.

      Si et sóc sincer si alguna cosa que odio de gnome és nautilus. Dolphin (KDE) és molt més potent precisament per aquestes coses de protegir, xifrar amb gpg, etc ...

  3.   dmoz va dir

    Krel, gràcies pels tutorials tan complets que portes per aquí i sobretot per ser temes no tan habituals ...

    Salutacions !!! ...

  4.   Juan Carlos va dir

    Hola tot va sortir bé però .. quan tanco la pestanya de l'chrome i obro una altra, escric la direcció i no em demana la clau ...

  5.   amiguet va dir

    qui va dir que no era cridaner.
    era just el que buscava, i millor explicat impossible
    moltes gràcies.
    una salutació

  6.   basc7 va dir

    hola, t'agraeixo molt per la informació, sobretot la part d'afegir múltiples usuaris en el .htpasswd.

    Déu et beneeixi!

  7.   Mohtadi va dir

    Enhorabona, és un article molt bo, clar i digerible. moltes Gràcies

  8.   eduardo va dir

    em dóna un error 500 quan fico usuari i clau

    AuthType Basic
    AuthName «TOCC TOCC»
    AuthUserFile /var/www/html/.pass/.htpasswd
    Requereix user Akira

  9.   eduardo va dir

    Que gran això em passa per fer comentaris sense mirar els altres comentaris perodna.
    Funciona de meravella gran post

  10.   Somnus Sènior va dir

    Hola, bé el tutorial, però hi ha alguna alternativa a «htpasswd»? pregunto perquè estic fent servir linux mint 17.3 i no tinc la comanda ... he de instal·lar-lo?

  11.   Somnus Sènior va dir

    D'acord, ja em vaig adonar ... havia de instal·lar-lo amb sudo apt-get install apache2-utils

  12.   Fernando Montilla va dir

    Bones, excel·lent tutorial, ho vaig fer exactament com ho indiquen aquí, l'únic és que en comptes d'executar el que indica el punt 2:

    nano / etc / apache2 / sites-available / default

    Em va funcionar amb

    nano /etc/apache2/sites-enabled/000-default.conf

  13.   Jorge Rodrigo Torrez Aramayo va dir

    Salutacions, no em funciona 🙁 la carpeta no apareix en el meu servidor, és a dir, vaig protegir la carpeta / var / 222 / html / content, i quan entro des del navegador no apareix la carpeta content. Help