====== vaultwarden ======
Gestor de contraseñas de código abierto.
* [[https://github.com/dani-garcia/vaultwarden|Repositorio Git oficial]]
Las notas que aquí aparecen se centran en **vaultwarden**, una implementación de la API de servidor de [[https://bitwarden.com/|Bitwarden]] escrito en Rust, compatible con los clientes oficiales de Bitwarden y con muchísimo menos consumo de recursos para poder instalar nuestro propio servidor.
===== Clientes =====
Hay [[https://bitwarden.com/download/|clientes oficiales]] para:
* Linux
* Windows
* macOS
* Android
* iOS
==== Extensiones de navegador ====
* [[https://addons.mozilla.org/es/firefox/addon/bitwarden-password-manager/|Firefox]]
===== Instalación =====
==== Docker ====
version: "3.4"
services:
app:
image: vaultwarden/server:latest
container_name: vaultwarden
environment:
- VIRTUAL_HOST=vault.dominio.com # obligatorio para nginx-proxy
- LETSENCRYPT_HOST=vault.dominio.com # obligatorio para letsencrypt proxy
- LETSENCRYPT_EMAIL=pepito@dominio.com # obligatorio para letsencrypt proxy
volumes:
- ./data:/data
La instalación por defecto utiliza SQLite como motor de base de datos. Para el ejemplo anterior, la información está accesible desde el directorio ''data''.
Navegadores como Chrome o Firefox, no permite el uso de APIs de Web Crypto en contextos inseguros, así que hay que habilitar el acceso a Bitwarden mediante HTTPS. En la documentación oficial [[https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS|ponen unos ejemplos]].
===== Configuración =====
La configuración se puede realizar mediante variables de entorno o a través de la página de administración. En el segundo método, se crea un fichero ''config.json'' que tiene prioridad frente a lo definido mediante variables de entorno. Esto es importante tenerlo en cuenta: **si existe, ''config.json'' está por encima de las variables de entorno**.
* [[https://github.com/dani-garcia/vaultwarden/blob/main/.env.template|Listado de variables de entorno]]
* [[https://github.com/dani-garcia/vaultwarden/blob/main/src/config.rs#L351|Opciones del fichero config.json]]
==== Deshabilitar registro ====
Por defecto, vaultwarden permite crear cuentas a cualquiera. Si queremos deshabilitar el registro automático, hay que indicarlo con la siguiente variable de entorno:
SIGNUPS_ALLOWED=false
Por ejemplo, en un despliegue con Docker:
version: "3.4"
services:
app:
image: vaultwarden/server:latest
container_name: bitwarden
environment:
- SIGNUPS_ALLOWED=false
volumes:
- ./data:/data
Aunque lo desactivemos, el botón de **Crear cuenta** seguirá apareciendo, pero el proceso terminará en error, es decir, que no será posible la creación de la cuenta.
A través del fichero ''config.json'' sería:
"signups_allowed": false
==== Administración ====
Es posible acceder a un panel de administración donde poder gestionar las opciones de Bitwarden, ver los usuarios registrados, enviar invitaciones... Para ello hay que añadir la variable de entorno ''ADMIN_TOKEN'' y asociarla con una valor difícil de averiguar:
version: "3.4"
services:
app:
image: bitwardenrs/server:latest
container_name: bitwarden
environment:
- ADMIN_TOKEN=una_ristra_de_caracteres_que_no_sepa_nadie_facilmente
volumes:
- ./data:/data
Este //token// es la contraseña que se usará para acceder a la sección de administración, al subdirectorio ''/admin'': https://midominio.com/admin
Cuando hagamos algún cambio en la sección de administración, se generará un fichero ''config.json'' en nuestro archivo de datos (''./data'' en los ejemplos)
===== Almacenamiento =====
==== Base de datos ====
La imagen de docker de vaultwarden tiene soporte de SQLite, MySQL y PostgreSQL. El soporte de SQLite es el más usado y probado, así que es el que recomiendan para la mayoría de los usuarios.
Al utilizar SQLite, el directorio ''/data'' tendrá la siguiente estructura:
data
├── attachments # Ficheros adjuntos
│ └──
│ └──
├── config.json # Configuración de la página de administración (solo si está habilitada)
├── db.sqlite3 # Fichero principal de SQLite.
├── db.sqlite3-shm # Fichero de memoria compartida de SQLite (no siempre está).
├── db.sqlite3-wal # Log de "write-ahead" de SQLite (no siempre está).
├── icon_cache # Caché de favicons.
│ ├── .png
│ ├── example.com.png
│ ├── example.net.png
│ └── example.org.png
├── rsa_key.der # Ficheros `rsa_key.*` que se utilizan para firmar los tokens de autenticación.
├── rsa_key.pem
└── rsa_key.pub.der
===== Copia de seguridad =====
Para hacer una copia de la base de datos si usamos la modalidad con SQLite:
sqlite3 data/db.sqlite3 ".backup '/ruta/copias_seguridad/db-$(date '+%Y%m%d-%H%M').sqlite3'"
El anterior comando generará un fichero ''db-20211210-2230.sqlite3'' si lo ejecutásemos el 10/12/2021 a las 22:30.
El resto de ficheros/directorios que tenemos que copiar:
* ''attachments/'': obligatorio.
* ''rsa_key*'': recomendado.
* ''icon_cache/'': opcional.
Para restaurar una instalación de vaultwarden, bastará con detener el servidor, copiar los ficheros en la ruta de ''data'' y listo.
===== Uso =====
==== Carpetas ====
Una de las formas de organizar las contraseñas es por carpetas.
Para crear subcarpetas (carpetas de otras carpetas) tenemos que crear una nueva con el nombre de la carpeta padre, una barra y el nombre de la subcarpeta. Por ejemplo, si tenemos una carpeta llamada //Trabajo// y queremos crear una dentro de ella llamada //E-mail//, tendríamos que crear una carpeta con el nombre ''Trabajo/E-mail''