HCL Commerce : usuarios y privilegios de contenedores

Uno de los métodos recomendados de seguridad del software es limitar y superponer el acceso solo a aquellos recursos necesarios para llevar a cabo una tarea claramente definida. Heredar acceso adicional a recursos o información es un riesgo con consecuencias más graves si alguien no autorizado consigue acceder a ellos o atacarlos, en comparación con lo que, de otro modo, podría considerarse un vector o una oportunidad de ataque con menores consecuencias. Este principio se aplica a la ejecución de contenedores de aplicaciones HCL Commerce y a las diversas utilidades y procesos internos que los mantienen dentro de su despliegue de comercio electrónico más amplio.

En versiones anteriores de HCL Commerce, las imágenes de Docker se han ejecutado con privilegios raíz de forma predeterminada. A partir de la versión 9.1.14.0 de HCL Commerce, las imágenes de la aplicación de HCL Commerce se suministran siempre con un usuario y un grupo de usuarios no raíz. Este usuario se ha diseñado para ejecutar los contenedores y sus aplicaciones dentro de su implementación, con lo que se limita de manera más estricta el acceso a los recursos del contenedor host.

El usuario que se presenta es comuser con el UID 1000. Además, este usuario se añade al grupo de usuarios denominado comuser con GID 1000 .
Note: La imagen de IBM Db2 Database de ejemplo proporcionada se debe iniciar como usuario raíz debido a limitaciones de IBM Db2. Esta imagen está destinada y limitada a su uso exclusivo en entornos de desarrollo y prueba.
Restriction: Actualmente no se admite la actualización de entornos basados ​​en Power a contenedores que no sean raíz. Se admiten nuevos despliegues.

Consideraciones sobre la actualización para usuarios no raíz

Por lo general, los contenedores que no son raíz son más seguros, ya que pueden evitar que cualquier código malicioso o vulnerable obtenga permisos con privilegios en el sistema operativo del host del contenedor. Sin embargo, este cambio puede generar algunos problemas si HCL Commerce se ha ejecutado como usuario raíz antes de actualizar a HCL Commerce versión 9.1.14.0 o superior, o bien si tiene personalizaciones existentes no diseñadas para usar con el usuario no raíz.

Tenga en cuenta las siguientes consideraciones antes de actualizar su implementación a imágenes habilitadas para usuarios no raíz:
  • Código de personalización

    Dado que los permisos de archivos están relacionados con usuarios y grupos, debe evaluarse cualquier código de personalización que manipule archivos para garantizar que los archivos que se manipulen tengan los permisos correctos para el usuario y grupo de usuarios comuser.

    Por ejemplo, si con algún código de personalización se crean archivos temporales en el directorio de inicio del usuario raíz, /root/ , o en cualquier directorio del sistema operativo propiedad del usuario raíz, un despliegue actualizado ya no tendrá acceso a estos archivos. En este caso, su código personalizado debe actualizarse para crear archivos temporales dentro del directorio /tmp/, o crear y actualizar esos archivos en el directorio de inicio comuser, /home/comuser/. Asegúrese de que todos los permisos de archivos estén actualizados adecuadamente.

  • Programa de utilidad WCB

    El código de personalización suele venir empaquetado por el programa de utilidad WCB para su despliegue. Si el programa de utilidad WCB se ejecuta en el contenedor ts-utils, los permisos de archivo para el código de personalización también importan, ya que el contenedor ts-utils también se ejecuta como usuario comuser no raíz. Asegúrese de que el usuario y el grupo de usuarios comuser puedan acceder al código de personalización que se está montando o copiando en el contenedor ts-utils para evitar problemas.

  • Creación de imágenes de Docker personalizadas

    Cuando se crea una imagen de Docker personalizada sobre una imagen de HCL Commerce, tenga en cuenta que el contexto de usuario actual es comuser y no root.

    Este cambio afecta principalmente a las instrucciones de RUN en su Dockerfile. Por ejemplo, si instala un paquete de software adicional utilizando el administrador de paquetes del sistema, estos mandatos fallarán, a menos que actualice el Dockerfile y use la instrucción USER para configurar al usuario como root en primer lugar.
    HCL Commerce Version 9.1.14.0Tip: Debido a la actualización de CentOS a UBI en la misma versión, el administrador de paquetes yum se ha sustituido por dnf. Si instala o modifica los paquetes en sus contenedores personalizados, asegúrese de actualizar el Dockerfile para tener en cuenta este cambio.
    De manera similar a los problemas de permisos que se producen al emitir comandos del sistema, tenga en cuenta los permisos de archivos cuando utilice los comandos COPY o ADD. Por ejemplo,
    COPY --chown=comuser:comuser ./my-custom-script /SETUP/bin/
    en todos estos casos, no olvide volver a cambiar el contexto de usuario a comuser después de las instrucciones con privilegios.
  • Servidores web

    Como las imágenes basadas en servidor web ahora las ejecuta un usuario no raíz, no se pueden utilizar puertos con privilegios (1024 e inferiores).

    Si ha personalizado la configuración o el complemento de IBM HTTP Server para que use puertos con privilegios, como 80 o 443, debe actualizar el archivo de configuración para que use un puerto sin privilegios en su lugar.

  • Canalización de CI/CD

    Si utiliza una canalización de CI/CD, debe revisar sus herramientas y scripts para asegurarse de que cualquier archivo que se añada a sus imágenes personalizadas se haga con la propiedad y los permisos de archivo adecuados según las directrices proporcionadas.

  • Programas de utilidad

    HCL Commerce proporciona programas de utilidad para actualizar y mantener su sitio de comercio electrónico, empaquetados en el contenedor ts-utils. Algunos programas de utilidad, como dataload, necesitan configuración y archivos de datos adicionales para ejecutarse. Cuando estos archivos se copien o monten en el contenedor ts-utils, asegúrese de que tengan la propiedad y los permisos de archivo adecuados según las directrices proporcionadas.

  • Volúmenes montados y archivos externos en despliegues de Docker

    En los despliegues de Docker, se conservan los permisos de archivo de un volumen de host que esté montado en un contenedor ejecutado por Docker. Asegúrese de que todos los directorios montados y los archivos contenidos tengan los permisos correctos configurados para poder acceder a ellos y manipularlos dentro del contenedor. Si está utilizando el proyecto Docker Compose proporcionado para su entorno, este hecho ya se tiene en cuenta.

  • Contenedor de volumen persistente (PVC) de la herramienta Elementos

    En los despliegues de Kubernetes, se utiliza un PVC para conservar los archivos que utiliza la herramienta Elementos de Management Center for HCL Commerce. La actualización a un contenedor de usuarios no raíz supone un posible problema según el tipo de PVC que se haya aprovisionado inicialmente:

    • Un almacenamiento en modo de acceso readWriteOnce no supone ningún problema durante esta actualización.

      Normalmente, el almacenamiento de PVC lo aprovisiona la clase de almacenamiento en la nube como un PVC de modo de acceso readWriteOnce y se monta con el usuario raíz como propietario. El fsGroup está configurado en 1000 en el Helm Chart de HCL Commerce, lo que garantiza que el usuario no raíz siga conservando el acceso completo de lectura y escritura a todos y cada uno de los archivos y directorios preexistentes en el volumen montado.

    • Un almacenamiento en modo de acceso readWriteMany incluye un requisito de actualización de permisos durante esta actualización.

      Un tipo de PVC readWriteMany, que puede aprovisionarse con otro proveedor, como NFS Provisioner, supone un obstáculo con los permisos de usuario durante esta actualización. En este caso, el fsGroup especificado en el Helm Chart de HCL Commerce no tendrá ningún efecto en los archivos existentes del volumen. Por lo tanto, los permisos de archivos de su PVC deben cambiarse para que pueda seguir accediendo a ellos el usuario no raíz.

      Para actualizar los permisos de sus archivos de PVC readWriteMany, consulte Actualización de permisos de archivos PVC.