Partilhar via


Introdução ao SQL Server no SELinux

Este artigo ajuda-o a começar com o SQL Server como um serviço confinado numa distribuição Security-Enhanced Linux (SELinux) baseada no Red Hat Enterprise Linux (RHEL).

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 Arquitetura SELinux. Você também pode começar a usar um sistema operacional habilitado para SELinux gratuitamente.

O SQL Server 2022 no Linux é oficialmente certificado com RHEL 9 (a partir de julho de 2024) e agora está disponível em 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 mssql-server-selinux pacote.

Pré-requisitos

  1. Ative o SELinux e defini-lo para o modo enforcing. Verifica o estado do SELinux executando o sestatus comando.

    sestatus
    

    Aqui está 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 mssql-server-selinux pacote que define as políticas personalizadas necessárias.

Observação

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

Requisito mínimo de versão menor de RHEL

Para correr o SQL Server como uma aplicação confinada no RHEL 9, deve usar pelo menos uma versão menor do RHEL. Este requisito existe devido às dependências de lançamento pontual nos pacotes SELinux. O pacote mssql-server-selinux, que é necessário para correr o SQL Server em modo confinado, depende dos pacotes selinux-policy e selinux-policy-base.

Passos para identificar a versão mínima do RHEL

  1. Adicione o repositório SQL Server que contém mssql-server-selinux.

    Para SQL Server 2025 (17.x) no RHEL 9:

    sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/9/mssql-server-2025.repo
    

    Para SQL Server 2022 (16.x) no RHEL 9:

    sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/9/mssql-server-2022.repo
    

    Observação

    Se planeias instalar no RHEL 10, então muda para os repositórios RHEL 10.

  2. Execute o seguinte comando para visualizar as dependências de políticas do SELinux:

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    
  3. A saída inclui a versão mínima da política SELinux exigida, indicada por um sufixo como .el9_6. Este sufixo representa a versão mínima de RHEL 9 para a qual a política foi criada. Por exemplo, .el9_6 corresponde ao RHEL 9.6.

    Se não aparecer tal sufixo na saída, consulte a documentação da Red Hat para determinar a versão mínima de RHEL associada a essa build de política SELinux. No exemplo seguinte, a versão base necessária do SELinux é 38.1.53-5.

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    

    Aqui está um exemplo de saída:

    selinux-policy >= 38.1.53-5.el9_6
    selinux-policy-base >= 38.1.53-5.el9_6
    

    Neste exemplo, o requisito mais alto marcado por versão menor é 38.1.53-5.el9_6. Portanto, precisas de pelo menos RHEL 9.6 para instalar SQL Server com SELinux (mssql-server-selinux), e executá-lo como uma aplicação confinada no RHEL 9.

Instalar o SQL Server como um serviço confinado

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

ps -eZ | grep sqlservr

Aqui está a saída esperada.

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

Quando instalas o mssql-server-selinux pacote, ele ativa uma política SELinux personalizada que limita o sqlservr processo. Quando instala esta política, o selinuxuser_execmod Booleano é redefinido e substituído por uma política chamada mssql. Esta política limita o sqlservr processo ao novo mssql_server_t domínio.

ps -eZ | grep sqlservr

Aqui está a saída esperada.

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

Tipos SQL Server e SELinux

Quando instala a política opcional SELinux usando o mssql-server-selinux pacote, ela define alguns novos tipos:

Política do SELinux Descrição
mssql_opt_t Instale arquivos do mssql-server em /opt/mssql
mssql_server_exec_t Arquivos executáveis em /opt/mssql/bin/
mssql_paldumper_exec_t Executáveis e scripts que requerem permissões especiais para gerir despejos de memória
mssql_conf_exec_t Ferramenta de gestão na /opt/mssql/bin/mssql-conf
mssql_var_t Rótulo para arquivos em /var/opt/mssql
mssql_db_t Rótulo para os arquivos de banco de dados em /var/opt/mssql/data

Exemplos

O exemplo seguinte demonstra como alterar a localização da base de dados quando o SQL Server corre 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 -a parâmetro adiciona uma nova regra de contexto do ficheiro, e o -t parâmetro define o tipo SELinux a aplicar, que neste caso é mssql_db_t para ficheiros de base de dados SQL Server. Finalmente, o comando especifica o padrão de caminho, que está /opt/mydb neste exemplo, e inclui todos os ficheiros e subdiretórios dentro dele.

  2. Defina o local do banco de dados padrão usando mssql-conf e 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 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/
    

    Aqui está 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, pode ver que o ficheiro tem o mssql_db_t tipo associado aos novos ficheiros criados.