Compartir a través de


Introducción a SQL Server en SELinux

Este artículo le guía en la introducción a SQL Server como servicio confinado en una distribución de Security-Enhanced Linux (SELinux) basada en Red Hat Enterprise Linux (RHEL).

¿Qué es Security-Enhanced Linux?

Security-Enhanced Linux (SELinux) es una arquitectura de seguridad para sistemas Linux. Ayuda a definir controles de acceso para aplicaciones, procesos y archivos en un sistema. SELinux usa un conjunto de reglas o políticas de seguridad para definir qué se puede o no se puede acceder. SELinux proporciona a los administradores más control sobre quién puede acceder al sistema. Para obtener más información, consulte ¿Qué es SELinux (Security-Enhanced Linux)?

Para obtener más información sobre cómo habilitar SELinux para sistemas de Red Hat, consulte arquitectura SELinux. También puede empezar a trabajar con un sistema operativo habilitado para SELinux de forma gratuita.

SQL Server 2022 en Linux está oficialmente certificado con RHEL 9 (a partir de julio de 2024) y ahora está disponible con carácter general en el Catálogo de ecosistema de Red Hat.

SQL Server y SELinux

Un servicio confinado con SELinux significa que está restringido por reglas de seguridad, definidas explícitamente en la política de SELinux. Para SQL Server, las directivas personalizadas de SELinux se definen en el paquete mssql-server-selinux.

Prerrequisitos

  1. SELinux debe estar habilitado y en modo enforcing. Para comprobar el estado de SELinux, ejecute el comando sestatus.

    sestatus
    

    Esta es la salida esperada.

    SELinux status:                 enabled
    SELinuxfs mount:                /sys/fs/selinux
    SELinux root directory:         /etc/selinux
    Loaded policy name:             targeted
    Current mode:                   enforcing
    Mode from config file:          enforcing
    Policy MLS status:              enabled
    Policy deny_unknown status:     allowed
    Memory protection checking:     actual (secure)
    Max kernel policy version:      33
    
  2. Instale el paquete mssql-server-selinux que define las directivas personalizadas necesarias.

Nota

Si no se cumple alguno de los requisitos previos, SQL Server se ejecuta como un servicio no definido .

Instalar SQL Server como un servicio confinado

De forma predeterminada, el paquete de mssql-server instala SQL Server sin la directiva SELinux y SQL Server se ejecuta como un servicio no definido. La instalación del paquete mssql-server habilita automáticamente el selinux_execmode booleano. Puede comprobar que SQL Server se está ejecutando sin restricciones mediante el siguiente comando:

ps -eZ | grep sqlservr

Esta es la salida esperada.

system_u:system_r:unconfined_service_t:s0 48265 ? 00:00:02 sqlservr

Una vez instalado el paquete de mssql-server-selinux, habilita una directiva SELinux personalizada que limita el proceso de sqlservr. Al instalar esta directiva, se restablece el selinuxuser_execmod booleano y se reemplaza por una directiva denominada mssql, que limita el proceso de sqlservr en el nuevo dominio de mssql_server_t.

ps -eZ | grep sqlservr

Esta es la salida esperada.

system_u:system_r:mssql_server_t:s0 48941 ?      00:00:02 sqlservr

Tipos de SQL Server y SELinux

Cuando se instala la directiva SELinux opcional con el paquete de mssql-server-selinux, se definen algunos tipos nuevos:

Directiva SELinux Descripción
mssql_opt_t Instalación de archivos de mssql-server para /opt/mssql
mssql_server_exec_t Archivos ejecutables en /opt/mssql/bin/
mssql_paldumper_exec_t Ejecutables y scripts que requieren permisos especiales para administrar volcados de memoria principales
mssql_conf_exec_t Herramienta de administración en /opt/mssql/bin/mssql-conf
mssql_var_t Etiqueta para archivos en /var/opt/mssql
mssql_db_t Etiqueta de los archivos de la base de datos en /var/opt/mssql/data

Ejemplos

En el ejemplo siguiente se muestra cómo cambiar la ubicación de la base de datos cuando SQL Server se ejecuta como un servicio confined.

  1. Cree los directorios deseados y etiquete como mssql_db_t.

    sudo mkdir -p /opt/mydb/
    sudo chown mssql:mssql /opt/mydb
    sudo semanage fcontext -a -t mssql_db_t "/opt/mydb(/.*)?"
    sudo restorecon -R -v /opt/mydb
    

    El comando semanage fcontext administra el mapeo de contexto de archivos SELinux. El parámetro -a agrega una nueva regla de contexto de archivo y el parámetro -t define el tipo SELinux que se va a aplicar, que en este caso es mssql_db_t para los archivos de base de datos de SQL Server. Por último, se especifica el patrón de ruta de acceso, que es /opt/mydb en este ejemplo, y todos los archivos y subdirectorios que contiene.

  2. Establezca la ubicación predeterminada de la base de datos mediante mssql-confy ejecute el programa de instalación.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Compruebe mediante la creación de una nueva base de datos mediante Transact-SQL:

    CREATE DATABASE TestDatabase;
    GO
    
  4. Compruebe que la nueva base de datos se creó con las etiquetas adecuadas.

    sudo ls -lZ /opt/mydb/data/
    

    Esta es la salida esperada.

    total 16384
    -rw-rw----. 1 mssql mssql system_u:object_r:mssql_db_t:s0 8388608 Aug  2 14:27 TestDatabase_log.ldf
    -rw-rw----. 1 mssql mssql system_u:object_r:mssql_db_t:s0 8388608 Aug  2 14:27 TestDatabase.mdf
    

    En el ejemplo anterior, puede ver que el archivo tiene el mssql_db_t (tipo) asociado a los nuevos archivos creados.