Descripción

>Recomendaciones generales para almacenar contraseñas de forma segura

Si una contraseña debe almacenarse en un archivo de configuración, es esencial restringir el acceso a ese archivo únicamente a los usuarios que necesitan saberla y prevenir aperturas accidentales que revelarían los datos secretos en texto plano. Existen algunas prácticas recomendadas para mantener sus datos sensibles seguros.

La primera regla es aislar su(s) contraseña(s) en un archivo de inclusión que solo se abrirá para cambiar contraseñas, no al editar configuraciones no relacionadas. Se recomienda incluir el archivo usando la directiva @include.required (o usar @include.default_mode=required) para garantizar que el Wrapper siempre lo verifique (de lo contrario, se ignorará silenciosamente).

Como mínimo, el proceso del Wrapper deberá leer y cargar el archivo de inclusión, así que asegúrese de que se ejecutará con un usuario que pueda leer el archivo. Idealmente, el acceso de lectura al archivo debería otorgarse solo a ese usuario, y solo los administradores deberían poder iniciar sesión con ese usuario. En Unix, la variable RUN_AS_USER del script de Shell puede usarse para ejecutar con un usuario sustituto. En Windows, la propiedad wrapper.ntservice.account puede configurarse para especificar la cuenta a usar cuando se ejecuta como servicio.

El Wrapper también proporciona una notación "cipher" para marcar un valor de propiedad (o parte de él) como confidencial. Esta notación cipher consta de un delimitador de apertura '%', seguido del texto confidencial (que opcionalmente puede ser ofuscado), seguido de una barra vertical ('|), un identificador del método usado para manejar o decodificar el texto, y un delimitador de cierre '%'. La página "Codificar contraseñas y datos confidenciales" explica en detalle esta notación y los métodos de ofuscación que se pueden utilizar con ella. Utilizar la notación cipher es esencial para que el Wrapper procese un texto de forma segura. Asegura que un valor sensible no se imprima en texto plano en el registro ni aparezca en la línea de comandos de Java, y también induce una verificación de permisos en el archivo contenedor, que describiremos a continuación

NOTA

¿Cómo el Wrapper ayuda a verificar los permisos de archivos?

La versión 3.6.0 del Wrapper tiene un mecanismo para ayudar a establecer permisos apropiados en los archivos que contienen datos confidenciales.

Cada vez que el Wrapper se inicia, se verificarán los siguientes archivos:

  • Archivos de configuración que contienen valores enmascarados u ofuscados (con la notación %...|<cipher_name>%)
  • Archivos de parámetros que contienen valores enmascarados u ofuscados (con la notación %...|<cipher_name>%)
  • Archivos seguros adicionales listados con las propiedades wrapper.secure_file.additional.<n> (Edición Estándar)

La gestión de permisos de archivos funciona de manera muy diferente entre Windows y Unix, por lo que la forma en que el Wrapper verifica los permisos también varía según la plataforma:

  • En Windows, los permisos de archivo pueden otorgarse a una lista ilimitada de usuarios o grupos. El Wrapper adopta un enfoque estricto al requerir que todos los usuarios con permisos al archivo estén explícitamente autorizados en el archivo de configuración del Wrapper.

    Además, ciertos usuarios considerados inseguros están en una lista negra y no pueden ser autorizados (vea la sección a continuación).

  • En Unix, los permisos de archivo pueden establecerse para tres clases diferentes: propietario (owner), grupo (group) y otros (other) usuarios.

    El Wrapper tiene políticas de seguridad diferentes para cada clase:

    • No hay restricciones para "owner". Puede ser cualquiera con cualquier permiso.

    • Si la clase "group" tiene modo de lectura-escritura, el nombre del grupo debe estar explícitamente autorizado en el archivo de configuración del Wrapper.

      Además, ciertos grupos que son demasiado amplios están en una lista negra y no pueden ser autorizados (vea la sección a continuación).

    • La clase "other" debe tener siempre un modo no legible-escribible (cero).

NOTA

Uno podría preguntarse legítimamente lo siguiente: ¿No es una falla de seguridad que una simple propiedad de configuración pueda permitir que un usuario o grupo arbitrario acceda a un archivo seguro?

Es importante entender que permitir una cuenta específica en la configuración no cambia los permisos reales de los archivos. Las propiedades wrapper.secure_file.check.windows.allowed_account.<n> están diseñadas para detectar problemas antes de que el Wrapper inicie y ayudarle a corregir los permisos de archivo lo antes posible durante la configuración inicial. Incluso si un atacante añadiera su propia cuenta más tarde, esto no cambiaría los permisos reales del archivo, que para ese momento ya deberían estar configurados correctamente


Utilize las siguientes propiedades para permitir explícitamente cuentas o grupos en su archivo de configuración:


Cuando un archivo está ubicado en un volumen cuyo formato no soporta permisos de archivo, las verificaciones de seguridad anteriores no pueden realizarse. Por defecto, dichos volúmenes se consideran inseguros, pero se puede cambiar este comportamiento con las siguientes propiedades:


Si alguna de las condiciones anteriores no se cumple para alguno de los archivos verificados, el comportamiento predeterminado del Wrapper es imprimir mensajes indicando cómo ajustar los permisos y luego detenerse.

Sin embargo, es posible personalizar este comportamiento con las siguientes propiedades:


Las ediciones Estándar y Profesional ofrecen las siguientes propiedades para listar archivos adicionales cuyos permisos también deben verificarse:

Propiedad wrapper.secure_file.check.windows.allowed_account.<n>

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSX (No Compatible)Linux (No Compatible)IBM AIX (No Compatible)FreeBSD (No Compatible)HP-UX (No Compatible)Solaris (No Compatible)IBM z/Linux (No Compatible)

Estas propiedades pueden usarse para especificar una lista de cuentas permitidas al verificar los permisos de archivos seguros en Windows.

Por simplicidad, estas propiedades se aplican a todos los archivos seguros. Si diferentes archivos otorgan permisos a diferentes cuentas, estas propiedades deben formar una lista común de cuentas permitidas para todos los archivos seguros.

Tenga en cuenta que las siguientes cuentas son intrínsecamente inseguras y no pueden ser permitidas:

  • Todos

  • Inicio de sesión anónimo (ANONYMOUS LOGON)

  • Usuarios autenticados

  • Cuentas de Invitados

  • Usuarios

Supongamos que un archivo que contiene contraseñas fue creado con permisos para NT AUTHORITY\SYSTEM, BUILTIN\Administrators y DESKTOP-06SJR11\john. Dado que el archivo contiene contraseñas, se considera confidencial y se imprimirá la siguiente salida de registro:

Salida del Wrapper:
wrapper  | The file 'C:\mayapp\conf\wrapper.conf' contains sensitive data but its permissions are too open.
wrapper  |   Problematic Permissions:
wrapper  |     NT AUTHORITY\SYSTEM    : Either allow this account in the configuration or remove the read and write file permissions.
wrapper  |     BUILTIN\Administrators : Either allow this account in the configuration or remove the read and write file permissions.
wrapper  |     DESKTOP-06SJR11\john   : Either allow this account in the configuration or remove the read and write file permissions.
wrapper  |
wrapper  |   If you want to run the Wrapper as a Windows Service, please add '.\LocalSystem' to the list of allowed accounts.
wrapper  |   If you want to run the Wrapper as a Console Application, please add 'DESKTOP-06SJR11\john' to the list of allowed accounts.
wrapper  |
wrapper  |   The Wrapper will stop.

Lo primero que debe hacer es eliminar los permisos que no sean necesarios: haga clic derecho en el archivo, seleccione Propiedades, vaya a la pestaña Seguridad, haga clic en Editar, seleccione un Usuario o Grupo y haga clic en Eliminar. Por ejemplo, puede eliminar "john".

Si los permisos restantes son necesarios, deberá permitirlos explícitamente en la configuración del Wrapper de la siguiente manera:

Ejemplo:
wrapper.secure_file.check.windows.allowed_account.1=NT AUTHORITY\SYSTEM
wrapper.secure_file.check.windows.allowed_account.2=BUILTIN\Administrators

Tras reiniciar el Wrapper, el mensaje ya no debería aparecer y su aplicación debería iniciarse normalmente.


ADVERTENCIA

Windows a menudo tiene habilitada la herencia de permisos. Esto significa que si se crea un archivo, este heredará automáticamente los permisos de su carpeta principal. Se pueden añadir permisos adicionales, pero intentar eliminar un permiso heredado resultará en el siguiente mensaje:

Para eliminar un permiso heredado, debe almacenar el archivo en una carpeta principal que tenga la herencia de permisos deshabilitada, o eliminar la herencia de permisos para el archivo en sí.

Propiedad wrapper.secure_file.check.unix.allowed_group.<n>

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :Windows (No Compatible)Mac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

Estas propiedades se pueden utilizar para especificar una lista de grupos permitidos al verificar los permisos de archivos seguros en sistemas Unix.

La propiedad de grupo solo puede establecerse para un grupo en sistemas Unix, pero estas propiedades forman una lista de grupos permitidos para todos los archivos seguros. Si necesita permitir múltiples grupos para archivos seguros separados, puede listarlos agregando tantas propiedades wrapper.secure_file.check.unix.allowed_group.<n> como sea necesario, recordando incrementar el índice <n> para cada grupo.

Tenga en cuenta que los siguientes grupos son demasiado amplios y, por lo tanto, no están permitidos:

  • usuarios (users)

  • otros (other)

  • todos (everyone)

  • personal (staff)

Supongamos que se ha creado un archivo que contiene contraseñas con la siguiente propiedad y permisos:

ls -la ../conf/wrapper-secure.conf
-rw-rw-r-- 1 john team 9489 Nov 21 17:00 ../conf/wrapper-secure.conf
Salida del Wrapper:
wrapper  | The file '/home/john/wrapper/conf/wrapper.conf' contains sensitive data but its permissions are too open.
wrapper  |   Problematic Permissions:
wrapper  |     Permission '04' ('r--') was granted to others. It must be '00'.
wrapper  |     Permission '060' ('rw-') was granted to group 'team' but this group was not allowed in the configuration.
wrapper  | 
wrapper  |   When the Wrapper is intended to be run by a single user, it is best to set the
wrapper  |    ownership of secured files to that user and remove all other permissions.
wrapper  |    To allow multiple users to access your secure files, you can grant read
wrapper  |    permissions to a group that only a restricted list of users belong to,
wrapper  |    but this group must be explicitly allowed in the Wrapper configuration.
wrapper  | 
wrapper  |   The Wrapper will stop.

Lo primero a hacer es eliminar los permisos para la clase 'otros', por ejemplo, usando el siguiente comando: chmod o-r ../conf/wrapper.conf.

En la mayoría de los casos, también se deben eliminar los permisos de grupo, pero son posibles escenarios como que varios usuarios pertenezcan al mismo grupo y tengan permiso para ejecutar el Wrapper. Si se deben conservar los permisos para el grupo "equipo" (team), puede agregarlo a la lista de grupos permitidos mediante la siguiente configuración:

Ejemplo:
wrapper.secure_file.check.unix.allowed_group.1=team

Después de reiniciar el Wrapper, el mensaje ya no debería aparecer y debería iniciar su aplicación normalmente.

Propiedad wrapper.secure_file.check.windows.allow_unsecured_volumes

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSX (No Compatible)Linux (No Compatible)IBM AIX (No Compatible)FreeBSD (No Compatible)HP-UX (No Compatible)Solaris (No Compatible)IBM z/Linux (No Compatible)

Esta propiedad permite que los archivos que contienen datos confidenciales se almacenen en volúmenes cuyo formato no admite permisos de archivo.

En Windows, los sistemas de archivos como FAT32 o exFAT no admiten permisos de archivo. Esto significa que cualquier persona con acceso al volumen puede acceder a sus archivos.

A menos que sepa que el acceso al volumen en sí es seguro (por ejemplo, cuando lo montan solo usuarios autorizados), se recomienda almacenar los archivos que contienen datos confidenciales en un volumen con un sistema de archivos (como 'NTFS') que admita permisos y limitar estos permisos a lo esencial.

Por defecto, no se permite almacenar archivos confidenciales en volúmenes no seguros (el valor predeterminado es FALSE).

Si se encuentra un archivo confidencial en un volumen no seguro, el Wrapper imprimirá el siguiente mensaje y luego se detendrá:

Salida del Wrapper:
wrapper  | The file 'A:\wrapper-secret.conf' is located on a volume whose format does not support file permissions. Anyone with access to the volume can read the file.
wrapper  |   Use 'wrapper.secure_file.check.windows.allow_unsecured_volumes=TRUE' or move the file to a different volume.
wrapper  |
wrapper  |   The Wrapper will stop.

El Wrapper ya no mostrará este mensaje y podrá iniciarse si wrapper.secure_file.check.windows.allow_unsecured_volumes se establece en TRUE.

Ejemplo (permitir almacenar archivos confidenciales en volúmenes no seguros):
wrapper.secure_file.check.windows.allow_unsecured_volumes=TRUE

Propiedad wrapper.secure_file.check.unix.allow_unsecured_volumes

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :Windows (No Compatible)Mac OSXLinuxIBM AIX (No Compatible)FreeBSDHP-UX (No Compatible)Solaris (No Compatible)IBM z/Linux

Esta propiedad permite que los archivos que contienen datos confidenciales se almacenen en volúmenes cuyo formato no soporta permisos de archivo.

En sistemas Unix, los sistemas de archivos como FAT32 o NTFS no admiten permisos de archivo. Esto significa que cualquier persona con acceso al volumen puede acceder a sus archivos. Este es el caso, por ejemplo, de los volúmenes alojados en un servidor Windows y compartidos con sistemas Linux.

A menos que sepa que el acceso al volumen en sí es seguro (por ejemplo, cuando lo montan solo usuarios autorizados), se recomienda almacenar los archivos que contienen datos confidenciales en un volumen con un sistema de archivos (como 'ext4') que admita permisos y limitar estos permisos a lo esencial.

Por defecto, no se permite almacenar archivos confidenciales en volúmenes no seguros (el valor predeterminado es FALSE).

Si se encuentra un archivo confidencial en un volumen no seguro, el Wrapper imprimirá el siguiente mensaje y luego se detendrá:

Salida del Wrapper:
wrapper  | The file '/mnt/myvolume/wrapper-secret.conf' is located on a volume whose format does not support file permissions. Anyone with access to the volume can read the file.
wrapper  |   Use 'wrapper.secure_file.check.unix.allow_unsecured_volumes=TRUE' or move the file to a different volume.
wrapper  | 
wrapper  |   The Wrapper will stop.

El Wrapper ya no mostrará este mensaje ni podrá iniciarse si wrapper.secure_file.check.unix.allow_unsecured_volumes se establece en TRUE.

Ejemplo (permitir almacenar archivos confidenciales en volúmenes no seguros):
wrapper.secure_file.check.unix.allow_unsecured_volumes=TRUE

Propiedad wrapper.secure_file.check.disable

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

Esta propiedad se puede utilizar para deshabilitar la verificación de permisos para archivos seguros. Sin embargo, tenga en cuenta que el uso de cuentas prohibidas listadas en rojo en las secciones anteriores seguirá siendo inválido y evitará que el Wrapper se inicie

El valor predeterminado es FALSE.

Ejemplo (deshabilitar la verificación de permisos para archivos seguros):
wrapper.secure_file.check.disable=TRUE

Propiedad wrapper.secure_file.check.loglevel

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

Esta propiedad se puede utilizar para establecer el nivel de registro de los mensajes impresos cuando se detecta un problema con los permisos de un archivo seguro.

El valor predeterminado es FATAL si wrapper.secure_file.check.srict se establece en TRUE, y en caso contrario, WARN.

Ejemplo (cambiar el nivel de registro de los mensajes a DEBUG):
wrapper.secure_file.check.loglevel=DEBUG

Propiedad wrapper.secure_file.check.srict

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

Esta propiedad se puede utilizar para definir si el Wrapper debe detenerse o continuar cuando se detecta un problema con los permisos de un archivo seguro.

Se recomienda mantener esta propiedad establecida en TRUE para que los problemas de permisos se detecten y resuelvan lo antes posible. En casos en que el Wrapper esté configurado para iniciarse automáticamente sin interacción humana (por ejemplo, al iniciarse como servicio), puede ser útil establecer esta propiedad en FALSE. El Wrapper seguirá informando problemas de permisos con un nivel de registro predeterminado de WARN y continuará su ejecución. Se recomienda que el usuario que revise los registros posteriormente corrija los permisos de archivo lo antes posible si se reportaron advertencias.

El valor predeterminado es TRUE.

Ejemplo (aún reportar problemas de permisos pero continuar la ejecución):
wrapper.secure_file.check.srict=FALSE

Propiedad wrapper.secure_file.additional.<n>

Compatibilidad :3.6.0
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad (No Compatible)
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

Las ediciones Estándar y Profesional ofrecen la posibilidad de listar archivos adicionales que deben revisarse utilizando las mismas reglas que para los archivos detectados automáticamente como sensibles por el Wrapper. Esto puede ser útil, por ejemplo, para archivos confidenciales que no son leídos por el Wrapper sino por la aplicación Java

Componente <n>:

Cada elemento tiene un nombre de propiedad que empieza con "wrapper.secure_file.additional." y el componente "<n>" del nombre de la propiedad es un número entero a partir de "1". Por defecto, la numeración debe estar en secuencia, sin espacios. La propiedad wrapper.ignore_sequence_gaps se puede configurar opcionalmente para permitir espacios en la secuencia.

Ejemplo (listar archivos adicionales para los cuales deben verificarse los permisos):
wrapper.secure_file.additional.1=../conf/db-credentials.xml
wrapper.secure_file.additional.2=../conf/settings.json

Propiedad wrapper.secure_file.additional.<n>.required

Compatibilidad :3.6.1
Ediciones :Edición ProfesionaEdición EstándarEdición de la Comunidad (No Compatible)
Plataformas :WindowsMac OSXLinuxIBM AIXFreeBSDHP-UXSolarisIBM z/Linux

Especifica si el archivo debe existir (TRUE) o es opcional (FALSE).

El valor predeterminado es TRUE.

NOTA

Un archivo que existe pero no es accesible para el usuario actual no generará ningún mensaje de error.

Ejemplo:
wrapper.secure_file.additional.1=../conf/db-credentials.xml
wrapper.secure_file.additional.1.required=TRUE

wrapper.secure_file.additional.2=../conf/settings.json
wrapper.secure_file.additional.2.required=FALSE

Referencia: Seguridad

Configuración de Cifrado:

Archivos Seguros:

Comandos: