Self-hosted Password Manager based on Laravel 10 + PHP 8 + MySQL 8. Gestor de Contraseñas basado en Laravel 10 + PHP 8 + MySQL 8.
Esta aplicación permite una gestión completa de contraseñas para múltiples tipos de servicios (web, ssh, teléfonos, wifi, etc…).
Los datos de cada aplicación se guardan cifrados en base de datos.
El cifrado de estos datos se realiza usando el valor de
APP_KEY
como salt, con lo cual es importantísimo no regenerar esta key o perderás el acceso a todas las aplicaciones registradas.
Ni se te ocurra instalar este proyecto en un entorno sin protección HTTPS
Las características principales son:
Este proyecto dispone de una extensión para Google Chrome que puedes descargar en https://github.com/eusonlito/Password-Manager-Chrome
Si la versión por defecto de tu servidor es inferior a PHP 8.1 siempre debes usar el prefijo de versión, tanto para composer
como para artisan
, por ejemplo:
php8.1 ./composer install --no-dev --optimize-autoloader --classmap-authoritative --ansi
php8.1 artisan key:generate
Creamos la base de datos en MySQL.
Clonamos el repositorio.
git clone https://github.com/eusonlito/Password-Manager.git
.env.example
como .env
y rellena las variables necesarias.cp .env.example .env
./composer install --no-dev --optimize-autoloader --classmap-authoritative --ansi
.env
> APP_KEY
).php artisan key:generate
./composer artisan-cache
php artisan migrate
php artisan db:seed --class=Database\\Seeders\\Database
* * * * * cd /var/www/password.domain.com && php artisan schedule:run >> storage/logs/artisan-schedule-run.log 2>&1
php artisan user:create [email protected] --name=Admin --password=StrongPassword2 --admin
Configuramos el servidor para acceso web con DOCUMENT_ROOT
en public
.
Profit!
La actualización de la plataforma se puede realizar de manera sencilla con el comando composer deploy
ejecutado por el usuario que gestiona ese projecto (normalmente www-data
).
Actualmente debería ser usado únicamente para testing (no soporta autenticación con certificado).
git clone https://github.com/eusonlito/Password-Manager.git
docker/.env.example
en .env
y configura tus propios ajustescp docker/.env.example .env
docker/docker-compose.yml.example
en docker/docker-compose.yml
y configura tus propios ajustescp docker/docker-compose.yml.example docker/docker-compose.yml
./docker/build.sh
./docker/run.sh
./docker/user.sh
Ya podemos acceder desde http://localhost:8080
Recuerda añadir un servidor web (apache2, nginx, etc…) como proxy para añadir funcionalidades como SSL.
git pull
./docker/build.sh
./docker/run.sh
Para poder realizar la autenticación con certificado debemos añadir la siguiente configuración en el VirtualHost
de Apache:
<Location /user/profile/certificate>
SSLVerifyClient require
SSLVerifyDepth 2
SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate
</Location>
<Location /user/auth/certificate>
SSLVerifyClient require
SSLVerifyDepth 2
SSLOptions +StdEnvVars +ExportCertData +OptRenegotiate
</Location>
SSLCACertificateFile /var/www/password.domain.com/resources/certificates/certificates.pem
La localización /user/profile/certificate
permite obtener el identificador del certificado automáticamente desde el propio perfil de usuario, y /user/auth/certificate
es la ruta de autenticación por certificado.
La opción de OptRenegotiate
le permite a Apache renegociar la conexión de manera independiente por ruta, algo que nginx no soporta.
Alta de usuario:
php artisan user:create {--email=} {--name=} {--password=} {--admin} {--readonly} {--teams=}
Actualización de usuario:
php artisan user:update {--id=} {--email=} {--name=} {--password=} {--certificate=} {--tfa_enabled=} {--admin=} {--readonly=} {--enabled=} {--teams=}
Pues estaría guay un poco de ayuda para mejorar la traducción a inglés en resources/lang/en
, así como el readme.en.md
.