Compartilhar via


Introdução ao SQL Server no SELinux

Este artigo orienta você a começar a usar o SQL Server como um serviço confinado em uma distribuição Security-Enhanced Linux (SELinux) com base no RHEL (Red Hat Enterprise Linux).

O que é Security-Enhanced Linux?

Security-Enhanced Linux (SELinux) é uma arquitetura de segurança para sistemas Linux. Ele ajuda a definir controles de acesso para aplicativos, processos e arquivos em um sistema. O SELinux usa um conjunto de regras ou políticas de segurança, para definir o que pode ou não ser acessado. O SELinux fornece aos administradores mais controle sobre quem pode acessar o sistema. Para obter mais informações, consulte O que é SELinux (Security-Enhanced Linux).

Para obter detalhes sobre como habilitar o SELinux para sistemas Red Hat, consulte de arquitetura SELinux. Você também pode começar a usar gratuitamente um sistema operacional habilitado para SELinux.

O SQL Server 2022 no Linux é oficialmente certificado para o RHEL 9 (desde julho de 2024) e agora está em disponibilidade geral no Red Hat Ecosystem Catalog.

SQL Server e SELinux

Um serviço confinado com SELinux significa que ele é restrito por regras de segurança, explicitamente definidas na política SELinux. Para o SQL Server, as políticas personalizadas do SELinux são definidas no pacote de mssql-server-selinux.

Pré-requisitos

  1. O SELinux deve estar habilitado e no modo enforcing. Você pode verificar o status do SELinux executando o comando sestatus.

    sestatus
    

    Esta é a saída 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 o pacote mssql-server-selinux que define as políticas personalizadas necessárias.

Nota

Se qualquer um dos pré-requisitos não for atendido, o SQL Server será executado como um serviço não definido.

Instalar o SQL Server como um serviço confinado

Por padrão, o pacote mssql-server instala o SQL Server sem a política SELinux e o SQL Server é executado como um serviço não definido. A instalação do pacote mssql-server habilita automaticamente o booliano selinux_execmode. Você pode verificar se o SQL Server está sendo executado sem conexão usando o seguinte comando:

ps -eZ | grep sqlservr

Esta é a saída esperada.

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

Depois de instalar o pacote mssql-server-selinux, ele habilita uma política personalizada do SELinux que limita o processo de sqlservr. Quando você instala essa política, o selinuxuser_execmod booliano é redefinido e substituído por uma política chamada mssql, que limita o processo de sqlservr no novo domínio mssql_server_t.

ps -eZ | grep sqlservr

Esta é a saída esperada.

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

Tipos de SQL Server e SELinux

Quando a política SELinux opcional é instalada com o pacote mssql-server-selinux, alguns novos tipos são definidos:

Política SELinux Descrição
mssql_opt_t Instalar arquivos do mssql-server para /opt/mssql
mssql_server_exec_t Arquivos executáveis em /opt/mssql/bin/
mssql_paldumper_exec_t Executáveis e scripts que exigem permissões especiais para gerenciar despejos de núcleo
mssql_conf_exec_t Ferramenta de gerenciamento em /opt/mssql/bin/mssql-conf
mssql_var_t Etiqueta para arquivos em /var/opt/mssql
mssql_db_t Etiqueta para os arquivos de banco de dados em /var/opt/mssql/data

Exemplos

O exemplo a seguir demonstra a alteração do local do banco de dados quando o SQL Server está em execução como um serviço confinado.

  1. Crie os diretórios desejados e rotule-os 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
    

    O comando semanage fcontext gerencia o mapeamento de contexto do arquivo SELinux. O parâmetro -a adiciona uma nova regra de contexto de arquivo e o parâmetro -t define o tipo SELinux a ser aplicado, que nesse caso é mssql_db_t para arquivos de banco de dados do SQL Server. Por fim, o padrão de caminho é especificado, que é /opt/mydb neste exemplo e todos os arquivos e subdiretórios dentro dele.

  2. Defina o local do banco de dados padrão usando mssql-confe execute a instalação.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Verifique criando um novo banco de dados usando o Transact-SQL:

    CREATE DATABASE TestDatabase;
    GO
    
  4. Verifique se o novo banco de dados foi criado com os rótulos apropriados.

    sudo ls -lZ /opt/mydb/data/
    

    Esta é a saída 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
    

    No exemplo anterior, você pode ver que o arquivo tem o mssql_db_t (tipo) associado aos novos arquivos criados.