Padloc es una solución de administración de contraseñas basada en la nube que le permite acceder y usar sus contraseñas guardadas en múltiples plataformas. Ofrece una interfaz simple y se puede utilizar para guardar sus contraseñas y puede cifrar y almacenar documentos confidenciales. También admite el almacenamiento de tokens de autenticación de dos factores y puede agregarlos directamente desde la página web.
Padloc también ofrece una solución autohospedada de código abierto que puede instalar en cualquier servidor para mantener un control total sobre sus datos. Sin embargo, hay una advertencia a esto. No puede usar la aplicación autohospedada con sus aplicaciones de escritorio y móviles. En el lado positivo, Padloc se sirve como una PWA (aplicación web progresiva), lo que significa que puede instalarla como una aplicación nativa en dispositivos móviles y aprovechar varias de sus funciones.
En este tutorial, aprenderá a instalar Padloc Password Manager en un servidor basado en Rocky Linux 8.
Requisitos
- Un servidor que ejecuta Rocky Linux 8 con un mínimo de 1 GB de RAM.
- Un usuario no root con privilegios sudo.
- Un nombre de dominio completo (FQDN) que apunta al servidor como
example.com
. Asumiremos que usará solo un nombre de dominio para este servidor para este tutorial.
Paso 1 - Cortafuegos
El primer paso es configurar el cortafuegos. Rocky Linux usa Firewalld Firewall. Compruebe el estado del cortafuegos.
$ sudo firewall-cmd --state running
El firewall funciona con diferentes zonas, y la zona pública es la predeterminada que usaremos. Enumere todos los servicios y puertos activos en el firewall.
$ sudo firewall-cmd --permanent --list-services
Debería mostrar el siguiente resultado.
cockpit dhcpv6-client ssh
Permitir puertos HTTP y HTTPS.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Vuelva a comprobar el estado del cortafuegos.
$ sudo firewall-cmd --permanent --list-services
Debería ver un resultado similar.
cockpit dhcpv6-client http https ssh
Vuelva a cargar el cortafuegos para habilitar los cambios.
$ sudo firewall-cmd --reload
Paso 2:Instalar Docker
Rocky Linux viene con una versión anterior de Docker. Para instalar la última versión, primero instale el repositorio oficial de Docker.
$ sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
Instale la última versión de Docker.
$ sudo dnf install docker-ce docker-ce-cli containerd.io
Habilite y ejecute el demonio Docker.
$ sudo systemctl enable docker --now
Verifique que se esté ejecutando.
$ sudo systemctl status docker ? docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2022-04-09 22:43:21 UTC; 30s ago Docs: https://docs.docker.com Main PID: 43005 (dockerd) Tasks: 7 Memory: 90.5M CGroup: /system.slice/docker.service ??43005 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ....
De forma predeterminada, Docker requiere privilegios de root. Si desea evitar el uso de sudo
cada vez que ejecuta el docker
comando, agregue su nombre de usuario a la docker
grupo.
$ sudo usermod -aG docker $(whoami)
Deberá cerrar sesión en el servidor y volver a iniciarla como el mismo usuario para habilitar este cambio.
Paso 3:instalar Docker-Compose
Descargue la última versión estable de Docker Compose.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Aplique permisos ejecutables al archivo binario de Docker Compose.
$ sudo chmod +x /usr/local/bin/docker-compose
Pruebe la instalación.
$ docker-compose --version docker-compose version 1.29.2, build 5becea4c
Instale el script Docker-compose Bash Completion.
$ sudo curl \ -L https://raw.githubusercontent.com/docker/compose/1.29.2/contrib/completion/bash/docker-compose \ -o /etc/bash_completion.d/docker-compose
Vuelva a cargar la configuración de su perfil para que la finalización de bash funcione.
$ source ~/.bashrc
Paso 4 - Crear directorios de datos
Crea un directorio para padloc.
$ mkdir ~/padloc
Cambia al directorio padloc.
$ cd ~/padloc
Cree directorios para la base de datos de usuarios, los registros de la aplicación, los archivos adjuntos, la aplicación PWA y la configuración de SSL.
$ mkdir {attachments,db,logs,pwa,ssl}
Cree un directorio para los registros de Nginx.
$ mkdir logs/nginx
Paso 5:Crear archivo de composición de Docker
Cree y abra el ~/padloc/docker-compose.yml
archivo para editar.
$ nano docker-compose.yml
Pegue el siguiente código en él.
version: "3" services: server: image: padloc/server container_name: padloc_server restart: unless-stopped #ports: # - ${PL_SERVER_PORT:-3000}:3000 expose: - 3000 volumes: - ${PL_DB_DIR:-./db}:/data:Z - ${PL_ATTACHMENTS_DIR:-./attachments}:/docs:Z - ./logs:/logs:Z environment: - PL_PWA_URL - PL_EMAIL_SERVER - PL_EMAIL_PORT - PL_EMAIL_USER - PL_EMAIL_PASSWORD - PL_EMAIL_FROM pwa: image: padloc/pwa container_name: padloc_pwa restart: unless-stopped #ports: # - ${PL_PWA_PORT:-8080}:8080 expose: - 8080 volumes: - ${PL_PWA_DIR:-./pwa}:/pwa:Z environment: - PL_SERVER_URL nginx: image: nginx container_name: nginx restart: unless-stopped volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ${PL_SSL_CERT:-./ssl/cert.pem}:/ssl/cert - ${PL_SSL_KEY:-./ssl/key.pem}:/ssl/key - ${PL_SSL_CONF:-./ssl/ssl.conf}:/ssl/ssl.conf - /etc/ssl/certs/dhparam.pem:/ssl/dhparam.pem - ./logs/nginx:/var/log/nginx:Z ports: - 80:80 - 443:443
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Estamos usando tres imágenes de Docker para Padloc.
-
La imagen del servidor - contiene toda la lógica de back-end para la aplicación. Se ejecuta en el puerto 3000 de forma predeterminada. Hemos descomentado la variable puertos en nuestro archivo de redacción para que el puerto sea invisible para el servidor. En su lugar, usamos la variable de exposición para exponer el puerto dentro del motor Docker al contenedor Nginx. Las variables de entorno para la imagen se configurarán más adelante. También hemos asignado directorios para una base de datos de usuarios, archivos adjuntos y registros de aplicaciones.
-
La imagen de PWA - contiene la interfaz de la aplicación. Se ejecuta en el puerto 8080 de forma predeterminada. En cuanto a la imagen del servidor, ocultamos la sección de puertos para esta imagen y expusimos el puerto dentro del motor Docker. Hemos mapeado el directorio para la aplicación web.
-
La imagen de Nginx - contiene la aplicación del servidor Nginx. Tenemos los puertos para HTTP(80) y HTTPS(443) al servidor para que sea accesible desde el exterior. Hemos mapeado varios directorios y archivos para que funcione.
- El primer archivo es
nginx.conf
que contiene todas las configuraciones principales para que Nginx sirva la aplicación padloc. - Los siguientes dos archivos,
cert.pem
ykey.pem
son el certificado SSL y las claves que generaremos usando Let's encrypt. - El archivo
ssl.conf
contiene información adicional sobre el servicio de SSL a través de Nginx. - El archivo
dhparam.pem
es servir al grupo Diffie-Hellman certificado. - La última entrada es para asignar los registros de Nginx al servidor para que pueda acceder a ellos fuera de Docker.
- El primer archivo es
-
El
:Z
El indicador al final de las asignaciones de carpetas indica que solo se podrá acceder a esos directorios desde los contenedores respectivos. Esto se está haciendo desde que SELINUX está habilitado en nuestro servidor. Si no está utilizando SELinux, puede eliminar la marca.
Paso 6:configurar NGinx
Crea y abre el archivo ~/padloc/nginx.conf
para editar.
$ nano nginx.conf
Pegue el siguiente código en él.
http { # This is required if you want to upload attachments client_max_body_size 10m; # Redirect all http traffic to https server { listen 80 default_server; listen [::]:80 default_server; server_name _; return 301 https://$host$request_uri; } server { # We don't need a host name here since we're only # dealing with one domain, but you may insert your domain here. server_name _; # Both server and pwa are served over https listen 443 ssl http2; listen [::]:443 ssl http2; # This will resolve to the server instance location /server/ { proxy_pass http://padloc_server:3000; rewrite ^/padloc_server(.*)$ $1 break; } # This will resolve to the web app location / { proxy_pass http://padloc_pwa:8080; rewrite ^/padloc_pwa(.*)$ $1 break; } # SSL certificate ssl_certificate /ssl/cert; # SSL private key ssl_certificate_key /ssl/key; # Add this file to add advanced ssl configuration include /ssl/ssl.conf; } } # This section is required by nginx events {}
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
La configuración anterior reenvía todas las solicitudes realizadas desde el padloc_server
contenedor al /server
ubicación del nombre de dominio y cualquier solicitud realizada desde el padlock_pwa
contenedor a la raíz. También redirige todo el tráfico HTTP a HTTPS. También hemos establecido el tamaño de carga del archivo en 10 MB para los archivos adjuntos. Puede cambiar el tamaño según sus requisitos. La configuración de SSL se ha incluido a través de un archivo externo que configuraremos más adelante.
Paso 7 - Crear archivo de entorno
Crea y abre el ~/padloc/.env
archivo para editar.
$ nano .env
Pegue el siguiente código en él.
# GENERAL SETTINGS # ================ # URL that will resolve to the server instance PL_PWA_URL=https://example.com/ # URL that will resolve to the web app PL_SERVER_URL=https://example.com/server/ # SERVER SETTINGS # =============== # Port the server instance will listen on PL_SERVER_PORT=3000 # Directory where database files will be stored PL_DB_DIR=./db # Directory where attachment files will be stored PL_ATTACHMENTS_DIR=./attachments # PWA SETTINGS # ============ # Port the web app will be served from PL_PWA_PORT=8080 # Directory where the static code for the web app will be stored PL_PWA_DIR=./pwa # EMAIL SETTINGS # ============= # SMTP host PL_EMAIL_SERVER=smtp.example.com # SMTP username [email protected] # SMTP port PL_EMAIL_PORT=443 # SMTP password PL_EMAIL_PASSWORD=your_smtp_password # Always use TLS when sending emails # PL_EMAIL_SECURE=false # Email ID to send mails from [email protected] # SSL SETTINGS # ============ # The path to your ssl certificate PL_SSL_CERT=/etc/letsencrypt/live/example.com/fullchain.pem # The path to your ssl private key PL_SSL_KEY=/etc/letsencrypt/live/example.com/privkey.pem # Advanced configuration file PL_SSL_CONF=./ssl/ssl.conf
Guarde el archivo presionando Ctrl + X e ingresando Y Cuando se le solicite. La mayoría de los ajustes se explican por sí mismos. La configuración existente de Nginx espera que la aplicación se sirva a través del dominio principal y el servidor a través de /server
directorio. El PL_PWA_DIR
no es obligatorio configurarlo aquí y en el archivo Docker-compose, pero tenerlo acelera el inicio del contenedor y, por lo tanto, siempre debe configurarlo.
Padloc requiere la capacidad de enviar correos electrónicos para funciones como la verificación de nuevos usuarios, la autenticación de dos factores y el restablecimiento de contraseñas. Por lo tanto, los detalles de SMTP son obligatorios.
Para la función SSL, usamos los directorios predeterminados de Let's Encrypt donde se encuentran los certificados. La configuración SSL adicional se proporcionará a través del archivo /ssl/ssl.conf
.
Paso 8:instalar SSL
Para instalar un certificado SSL usando Let's Encrypt, necesitamos instalar la herramienta Certbot.
En primer lugar, debe descargar e instalar el repositorio de EPEL.
$ sudo dnf install epel-release
Ejecute los siguientes comandos para instalar Certbot.
$ sudo dnf install certbot
Genere el certificado SSL.
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d example.com
El comando anterior descargará un certificado en /etc/letsencrypt/live/example.com
directorio en su servidor.
Generar un grupo Diffie-Hellman certificado.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Cree un trabajo cron para renovar el SSL. Se ejecutará cada semana para verificar el certificado y renovarlo si es necesario. Para eso, primero crea el archivo /etc/cron.weekly/certbot-renew
y ábralo para editarlo.
$ sudo nano /etc/cron.weekly/certbot-renew
Pegue el siguiente código. Usamos los comandos de Docker para iniciar, detener y reiniciar el contenedor Nginx según el estado de renovación.
#!/bin/sh certbot renew --cert-name example.com --pre-hook "docker stop nginx" --post-hook "docker start nginx" --renew-hook "docker restart nginx"
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
Cambie los permisos en el archivo de tareas para que sea ejecutable.
$ sudo chmod +x /etc/cron.weekly/certbot-renew
Paso 9:configurar SSL
Crea y abre el archivo ~/padloc/ssl/ssl.conf
para editar.
$ nano ssl/ssl.conf
Pegue el siguiente código en él.
ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_prefer_server_ciphers off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /ssl/dhparam.pem; resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s; resolver_timeout 2s;
Guarde el archivo presionando Ctrl + X e ingresando Y cuando se le solicite.
El archivo anterior presenta algunas configuraciones SSL recomendadas para que su sitio sea más seguro. Restringe los protocolos TLS a v1.2 y v1.3 y habilita el engrapado y la verificación del Protocolo de estado de certificado en línea (OCSP).
Paso 10 - Ejecutar Padloc
Ahora que ha configurado todo, ejecute Padloc usando el siguiente comando.
$ docker-compose up -d
Consulta el estado de los contenedores.
$ docker ps
Debería obtener un resultado similar.
Paso 11:acceder y configurar Padloc
Abra la URL https://example.com
en su navegador, y llegará a su página de inicio de sesión.
Haz clic en Regístrate ahora enlace para iniciar el registro.
Ingrese su nombre y dirección de correo electrónico, y presione Continuar para proceder.
Padloc te enviará un correo electrónico con un código de confirmación. Ingrese el código de confirmación en el cuadro de arriba y presione Continuar para proceder.
Padloc generará automáticamente una contraseña maestra para usted. Coloca el cursor sobre el cuadro y cópialo. Pégalo de nuevo en el cuadro de abajo. También puede optar por utilizar su contraseña. Presiona Continuar cuando haya terminado.
Accederá a la página de inicio de Padloc. Puede comenzar a guardar sus datos de inicio de sesión y documentos confidenciales.
Paso 12 - Actualizar Padloc
Actualizar Padloc es un proceso de dos pasos. Primero, cambie al directorio Padloc.
$ cd ~/padloc
Apague y retire los contenedores Padloc existentes.
$ docker-compose down --remove-orphans
Obtenga las últimas imágenes.
$ docker-compose pull
Inicie los contenedores de nuevo.
$ docker-compose up -d
Conclusión
Esto concluye nuestro tutorial sobre la instalación del administrador de contraseñas autohospedado Padloc en un servidor Rocky Linux 8. Si tiene alguna pregunta, publíquela en los comentarios a continuación.