En este tutorial voy a explicar el funcionamiento del módulo de PowerShell PoShKeePass para conocer su funcionalidad y cómo integrar su funcionalidad con AD (Active Directory).
PoShKeePass
es un módulo de PowerShell que proporciona una interfaz de comunicación con la API KeePassLib, que aporta una plataforma amigable de administración para Bases de Datos KeePass.
PoShKeePass
nos ofrece entre sus principales funcionalidades las siguientes operaciones:
- Crear múltiples perfiles de configuración para Bases de Datos KeePass.
- Obtener, crear, modificar y eliminar Entradas y Grupos de KeePass.
- Generador de claves y creación de perfiles para crear claves personalizadas.
Instalación del módulo PoShKeePass
La instalación del módulo PoShKeePass es sencilla, tan sólo tenemos que abrir una interfaz de PowerShell con permisos de administración y ejecutar el siguiente comando:
1 |
Install-Module -Name PoShKeePass |
Todas los comandos y scripts de este post han sido testeados y comprobados en Windows 10 21H2 (19044) y versión 5.1 de PowerShell. Para comprobar tu versión de Powershell ejecuta el comando get-host:
1 2 3 4 5 6 7 8 9 10 11 12 |
PS C:\get-host Name : ConsoleHost Version : 5.1.19041.1682 InstanceId : 61886dc9-f34d-4417-b724-901e523265c1 UI : System.Management.Automation.Internal.Host.InternalHostUserInterface CurrentCulture : es-ES CurrentUICulture : es-ES PrivateData : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy DebuggerEnabled : True IsRunspacePushed : False Runspace : System.Management.Automation.Runspaces.LocalRunspace |
Sino puedes instalar PoShKeePass ya sea porque no dispones de permisos para ejecutar scripts de PowerShell, comprueba si tienes activadas las políticas de ejecución de Scripts:
1 |
Get-ExecutionPolicy -List |
A continuación procede a activar las políticas de ejecución para el usuario con el que estás conectado actualmente (CurrentUser):
1 |
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser |
Para obtener un listado de todos los comandos de que dispone el módulo PoShKeePass ejecuta el comando Get-Command seguido de los siguientes parámetros:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
PS C:\> Get-Command -Module PoShKeePass CommandType Name Version Source ----------- ---- ------- ------ Function ConvertTo-KPPSObject 2.1.3.0 PoShKeePass Function Get-KeePassDatabaseConfiguration 2.1.3.0 PoShKeePass Function Get-KeePassEntry 2.1.3.0 PoShKeePass Function Get-KeePassGroup 2.1.3.0 PoShKeePass Function New-KeePassDatabase 2.1.3.0 PoShKeePass Function New-KeePassDatabaseConfiguration 2.1.3.0 PoShKeePass Function New-KeePassEntry 2.1.3.0 PoShKeePass Function New-KeePassGroup 2.1.3.0 PoShKeePass Function New-KeePassPassword 2.1.3.0 PoShKeePass Function Remove-KeePassDatabaseConfiguration 2.1.3.0 PoShKeePass Function Remove-KeePassEntry 2.1.3.0 PoShKeePass Function Remove-KeePassGroup 2.1.3.0 PoShKeePass Function Update-KeePassDatabaseConfiguration 2.1.3.0 PoShKeePass Function Update-KeePassEntry 2.1.3.0 PoShKeePass Function Update-KeePassGroup 2.1.3.0 PoShKeePass |
Si tienes dudas con la ejecución de cada comando que se explica en este tutorial, puedes obtener una ayuda de cada uno de ellos utilizando Get-Help seguido del comando que deseas consultar.
1 |
Get-Help New-KeePassDatabase |
Creando Perfiles
Una vez hemos instalado el módulo, el siguiente paso es crear nuestro Perfil, indicando que será el que se utilicemos por defecto:
- -DatabaseProfileName nombre del perfil.
- -DatabasePath ruta y localización de la base de datos KeePass.
- -UseMasterKey Utilizar clave maestra.
- -Default Indicar que la Base de Datos será utilizada por defecto.
1 |
New-KeePassDatabaseConfiguration -DatabaseProfileName database -DatabasePath "C:\tmp\database.kdbx" -UseMasterKey -Default |
Podemos crear tantos perfiles como deseemos, así como modificarlos y eliminarlos.
Creando Grupos
Ya tenemos nuestro perfil, por lo que el siguiente paso es aprender a crear grupos dentro de la Base de Datos KeePass. En este caso utilizamos New-KeePassGroup:
1 |
New-KeePassGroup -KeePassGroupParentPath "database" -KeePassGroupName "Recursos Humanos" |
- KeePassGroupParentPath ruta donde queremos crear el grupo.
- KeePassGroupName Nombre del grupo que queremos crear.
Podemos comprobar la estructura de grupos de nuestra Base de Datos KeePass con el comando Get-KeePassGroup.
1 2 3 4 5 6 7 8 |
Get-KeePassGroup KeePass Password: **** Name EntryCount FullPath IconId ---- ---------- -------- ------ database database FolderOpen Recycle Bin database/Recycle Bin TrashBin Recursos Humanos database/Recursos Humanos Folder |
Creando y listando entradas
Una vez hemos creado un grupo, vamos a incluir una nueva entrada a este utilizando New-KeePassEntry.
1 |
New-KeePassEntry -KeePassEntryGroupPath "database/recursos humanos" -Title "Lionel Messi" -UserName "Messi" -KeePassPassword $(New-KeePassPassword) |
- KeePassEntryGroupPath La ruta donde queremos crear la entrada.
- Title El nombre de la entrada.
- UserName Usuario.
- KeePassPassword Clave.
Para listar las entradas utilizamos Get-KeePassEntry seguido del grupo donde queremos consultarla.
1 2 3 4 5 6 |
Get-KeePassEntry -KeePassEntryGroupPath "database/recursos humanos" KeePass Password: **** Title UserName Password FullPath Notes ----- -------- -------- -------- ----- Lionel Messi Messi System.Security.SecureString database/Recursos Humanos |
Para proceder a eliminar entradas debemos realizar un par de pasos con anterioridad, primero obtener el registro con Get-KeePassEntry y a continuación eliminarlo utilizando Remove-KeePassEntry:
1 2 |
$user = Get-KeePassEntry -KeePassEntryGroupPath "database/recursos humanos" -UserName "Messi" Remove-KeePassEntry -KeePassEntry $user |
La opción MasterKey
La opción MasterKey será útil si vamos a consultar, crear, modificar o eliminar múltiples registros. Este parámetro nos evita tener que introducir más de una vez la contraseña maestra de nuestra Base de Datos KeePass.
Para utilizar correctamente esta opción tenemos que convertir nuestra clave maestra a SecureString
utilizando el cmdlet ConvertTo-SecureString. Veamos un ejemplo de como podemos realizar esta operación modificando o creando múltiples registros:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Solicitamos la clave al usuario $passwd = Read-Host -AsSecureString foreach ( $user in $users ) { $act = Get-KeePassEntry -Title $user.name -MasterKey $($passwd) if ( $act ) { # Actualizamos el registro con Update-KeePassEntry ... Write-Output("Actualizando usuario: " + $user.name) } else { # Creamos un nuevo registro con New-KeePassEntry ... Write-Output("Creando usuario: "+$user.name) } } |
Capturar información de AD (Active Directory)
Ahora que sabemos cómo funciona el módulo de PowerShell PoShKeePass
vamos a crear un pequeño script para poder capturar información de nuestro Directorio Activo e importarla a KeePass. Ni que decir tiene que también podemos hacerlo al contrario.
- El Script consulta los usuarios de un departamento de AD (Active Directory) utilizando el cmdlet
Get-ADUser
. - A continuación crea el grupo con el nombre de departamento si este no existe.
- Recorre los usuarios del departamento de AD (Active Directory) y los va agregando a nuestra Base de Datos de KeePass.
- En caso de que exista el usuario modifica los datos que estemos agregando.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# import users to keepass by department $conf = @{ db = "database"; group = "SERVICIO RECURSOS HUMANOS"; } # List by department $users = Get-ADUser -Filter "Department -like '$($conf.group)'" # read password as secure string $passwd = Read-Host -AsSecureString $KeePassGroupPath = $conf.db + '/' + $conf.group if ( Get-KeePassGroup -KeePassGroupPath $KeePassGroupPath -MasterKey $($passwd) ) { Write-Output("Grupo ... " + $conf.group + " ya existe.") } else { Write-Output( "Creando grupo: " + $conf.group + " en: " + $conf.db ) New-KeePassGroup -KeePassGroupParentPath $conf.db -KeePassGroupName $conf.group -MasterKey $($passwd) } foreach ( $user in $users ) { $act = Get-KeePassEntry -Title $user.name -MasterKey $($passwd) if ( $act ) { Write-Output("Actualizando usuario: " + $user.name) Update-KeePassEntry -KeePassEntry $act -KeePassEntryGroupPath $KeePassGroupPath -Title $user.name -UserName ($user.GivenName+' '+$user.Surname) -KeePassPassword $(New-KeePassPassword) -MasterKey $($passwd) -confirm:$false } else { Write-Output("Creando usuario: "+$user.name) New-KeePassEntry -KeePassEntryGroupPath ($KeePassGroupPath) -Title $user.name -UserName ($user.GivenName+' '+$user.Surname) -KeePassPassword $(New-KeePassPassword) -MasterKey $($passwd) } } |
De la misma forma que este Script importa y actualiza datos de usuarios AD (Active Directory) también puede hacerlo a la inversa y mantener actualizada esta información en nuestras Bases de Datos KeePass.
Un grado más de Seguridad
Podemos aportar un grado más de seguridad a nuestras Bases de Datos KeePass con el parámetro KeyPath. En este caso tendremos que crear un fichero de clave en la propia configuración de la Base de Datos KeePass.
Por la razón que sea PoShKeePass sólo funciona con la versión 1.0 de la clave. Una vez tengamos creada la clave, tendremos que indicar el Path de la clave en nuestra configuración de Perfil:
1 |
New-KeePassDatabaseConfiguration -DatabaseProfileName database -DatabasePath "C:\tmp\database.kdbx" -UseMasterKey -KeyPath "C:\tmp\database.keyx" -Default |