#4sysadmins

Inicio » GNU/Linux » Servidor de contraseñas

Servidor de contraseñas

Follow #4sysadmins on WordPress.com

Objetivo: tener un servidor web donde almacenar de forma segura todas nuestras cuentas online de forma que centralicemos la gestión de las cuentas y podamos consultar los usuarios/password e incluso crear/modificar/eliminar cuentas desde el propio servidor, cliente de escritorio o Android/iOS app.

Requisitos:

- KeepassX o Keepass2
- Apache2
- WebDav 
- Keeweb

Dispositivos/Servidores:

- PC/Desktop (cliente1)
- Smartphone (cliente2)
- Servidor Ubuntu (password server)

kdbx: base de datos de contraseñas

Instalación Keepass en un cliente de escritorio:

$ sudo apt update && apt install keepassx
$ keepassx

Base de datos > Nueva base de datos > contraseña > repite_contraseña > Aceptar

En este punto podemos o crear una contraseña fuerte o un archivo de claves. En mi caso he optado por una contraseña fuerte. Prefiero recordar una buena contraseña que andar con un archivo de llave que tendré que tener en el móvil, en el PC, en la nube y al final o lo pierdes o te lo roban, a saber…

Ahora tendremos que crear nuestras cuentas dándole la estructura jerárquica que queramos a nuestras carpetas dentro de la base de datos

Por último guardamos la base de datos como archivo .kdbx (ej: mis_cuentas_online.kdbx)

Servidor

Ya tenemos nuestra base de datos local, ahora vamos a crear un servidor web desde el que poder gestionar este archivo de forma centralizada.

Lo vamos hacer medianamente bien y medianamente seguro, es decir nuestro servidor tendrá conexiones cifradas y usuario/password para poder abrir el archivo de base de datos (además de la clave con la que va encriptada (la creada en el primer paso)).

Certificados

Para crear una PKI visita mi siguiente link donde explico brevemente como crear una PKI: CA + firma de certificados.

Importante:

  • Solo necesitáis crear la CA y los certificados de servidor, los de clientes NO harán falta.
  • Durante la configuración de OpenSSL se utilizan una serie de FQDN (ej vpn-00a1cc34.nebul4ck.org). Elegir aquel con el que queráis luego acceder a vuestro keeweb (ej my-keeweb.red-casa.com).
  • Si no tenéis un servidor de nombres (DNS) en casa, acordaros de configurar el FQDN en el archivo /etc/hosts para traducir el nombre por la IP del servidor Apache

Apache2 + Keeweb + Webdav

Una vez contamos con los certificados necesarios, supongamos que son keeweb.local-network.com.crt, keeweb.local-network.key y que en mi Desktop (Ubuntu 18.04) tengo la siguiente entrada en el archivo /etc/hosts:

192.168.1.223 keeweb.local-network.com keeweb

vamos entonces a instalar, configurar y alojar keeweb en Apache2

Keeweb

Lo primero instalar keeweb en el servidor web:

# cd /var/www/
# mkdir -p keeweb/kdbx
# cd keeweb
# wget https://github.com/keeweb/keeweb/archive/gh-pages.zip
# unzip gh-pages.zip
# mv keeweb-gh-pages/* .
# rmdir keeweb-gh-pages

¿Os acordáis del archivo .kdbx, es decir de la base de datos que creamos con KeepassX? pues será necesario que lo copiéis (por ejemplo con el comando «scp» desde vuestro Desktop/Cliente a este servidor) en el siguiente directorio:

/var/www/keeweb/kdbx

Instalar y Configurar Apache2

# apt install apache2
# cd /etc/apache2
# mkdir cert
# cd cert <-- Copiar en este directorio los certificados generados anteriormente (tanto el .crt como el .key), certificados de servidor

## Creación de los sites HTTP/HTTPS
# cd ../sites-available
# vi 001-keeweb-http.conf
<VirtualHost *:80>

    ServerAdmin webmaster@localhost
    ServerName keeweb.local-network.com
    ServerAlias www.keeweb.local-network.com

    DocumentRoot /var/www/keeweb
    Redirect "/" "https://keeweb.local-network.com/"

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

# vi 002-keeweb-https.conf
<IfModule mod_ssl.c>
	<VirtualHost *:443>

	    ServerAdmin webmaster@localhost
	    ServerName keeweb.local-network.com
	    ServerAlias www.keeweb.local-network.com
		
	    DocumentRoot /var/www/keeweb/

	    SSLEngine on
	    SSLCertificateFile "/etc/apache2/cert/keeweb.local-network.com.crt"
	    SSLCertificateKeyFile "/etc/apache2/cert/keeweb.local-network.com.key"

	    <FilesMatch "\.(cgi|shtml|phtml|php)$">
	      SSLOptions +StdEnvVars
	    </FilesMatch>

	    <Directory /usr/lib/cgi-bin>
	      SSLOptions +StdEnvVars
	    </Directory>

	    <Directory /var/www/keeweb>
	      Options -Indexes
	      DirectoryIndex index.html
	      AllowOverride None
	    </Directory>
		
	    ErrorLog ${APACHE_LOG_DIR}/keeweb-https-error.log
	    CustomLog ${APACHE_LOG_DIR}/access.log combined

	</VirtualHost>
</IfModule>

## Configuración Webdav para compartir el archivo kdbx
# cd ../conf-available/
# vi webdav-kdbx.conf
RewriteEngine on
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ blank.html [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]

<Directory "/var/www/keeweb/kdbx">
    AuthType "Basic"
    AuthName "Password Manager"
    AuthBasicProvider file
    AuthUserFile "/etc/apache2/.htpasswd-webdav-kdbx"
    Require valid-user

    DAV On
    Options Indexes
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Headers "origin, content-type, cache-control, accept, authorization, if-match, destination, overwrite"
    Header always set Access-Control-Expose-Headers "ETag"
    Header always set Access-Control-Allow-Methods "GET, HEAD, POST, PUT, OPTIONS, MOVE, DELETE, COPY, LOCK, UNLOCK"
    Header always set Access-Control-Allow-Credentials "true"
</Directory>

## Crear usuario de acceso al directorio kdbx
# chmod -R www-data:www-data /var/www/
# cd /etc/apache2
# htpasswd -c .htpasswd-webdav-kdbx kdbxadmin
Enter a New password: ************

## Activar los sites
# a2dissite 000-default.conf
# a2ensite 001-keeweb-http
# a2ensite 002-keeweb-https
# a2enconf webdav-kdbx

## Activar los módulos necesarios
# a2enmod ssl
# a2enmod dav
# a2enmod dav_fs
# a2enmod rewrite
# a2enmod headers

## Reiniciar Apache
# systemctl restart apache2

Abrir la Base de datos

Ahora ya podemos acceder vía web a nuestro keeweb y configurar el acceso Webdav, recordar el fqdn que registramos en nuestro certificado y con el que accederemos al servicio (keeweb.local-network.com) y el usuario y contraseña que hemos creado con el comando htpasswd.

Servidor contraseñas centralizado: Apache + Keeweb (keepass)

Una vez que accedáis os pedirá la clave maestra de la base de datos, la escribimos y accederemos a las cuentas.


7 comentarios

  1. dt23960 dice:

    Hola @evgarciaz, yo quiero implementar syspass en la empresa en la cual estoy laborando pero no entiendo su funcionamiento y no he encontrado algún instructivo o pagina lo cual lo explique y el manual de la pagina oficial no especifica ese funcionamiento. Usted no me podría facilitar información sobre como se usa que se crea primero cuenta usuario, perfil, grupo o como compartir contraseñas con otros usuarios.

    Gracias y espero su pronta respuesta.

    Me gusta

  2. evgarciaz dice:

    Hola,

    Interesante artículo, no conocía Keeweb. Nosotros estamos utilizando sysPass, que es un gestor web de contraseñas.

    Lo bueno de esto es que te permite asignar permisos por usuarios o grupos de usuarios.

    Probaré Keeweb, pues también administro entornos donde se usa KeePass.

    Me gusta

    • nebul4ck dice:

      @evgarciaz encontré keeweb buscando algo que me permitiese centralizar las bases de datos kdbx de keepass, tampoco lo conocía. La verdad que ahora estoy muy contento como mas uso le doy es:
      tengo el servidor simplemente como centralizador (desde ahí ni modifico ni entro desde web) lo que hago es abrir esa base de datos mediante keepassx2 desde Android o desde keepass en cualquier estación de trabajo con acceso a la red (local/vpn) y ya las modificaciones que se hagan se almacenan y están disponibles para todos. Sobre syspass, es bastante mas completo que keeweb, lo utilicé en entorno profesional y es muy competente pero como dices, para centralizar bases de datos kdbx, mejor keeweb. Un saludo

      Le gusta a 1 persona

    • dt23960 dice:

      Hola @evgarciaz, yo quiero implementar syspass en la empresa en la cual estoy laborando pero no entiendo su funcionamiento y no he encontrado algún instructivo o pagina lo cual lo explique y el manual de la pagina oficial no especifica ese funcionamiento. Usted no me podría facilitar información sobre como se usa que se crea primero cuenta usuario, perfil, grupo o como compartir contraseñas con otros usuarios.

      Gracias y espero su pronta respuesta.

      Me gusta

      • nebul4ck dice:

        @dt23960 le recomiendo que eches un vistazo a esta docu official de syspass https://syspass-doc.readthedocs.io/en/3.1/installing/docker.html

        Le gusta a 1 persona

      • dt23960 dice:

        Hola, Gracias por responder, si he visto el documento pero mayormente hablan de lo técnico osea de que trata el cifrado, seguridad, autenticación, autorización, etc. Más no como se crean las cuentas, usuarios perfiles que se crea primero, como se comparten las contraseñas con los otros compañeros, si esas cosas primordiales para aprender a usarla.
        Si usted de pronto sabe algo del manejo de esta aplicación y tiene alguna manera de colaborarme, explicandome o de alguna forma se lo se lo agradecería.

        Gracias y quedo atenta a su respuesta

        Me gusta

      • evgarciaz dice:

        Hola dt23960,

        Como comenta nebul4ck, en la documentación oficial puedes encontrar información sobre cómo hacer ese primer despliegue :)

        Si no, puede probar a ponerse en contacto con el propio desarrollador o bien conmigo, no tendría problema.

        Me gusta

Deja un comentario, Gracias!