다음을 통해 공유


SELinux에서 SQL Server 시작

이 문서에서는 RHEL(Red Hat Enterprise Linux)을 기반으로 하는 SELinux(Security-Enhanced Linux) 배포에서 SQL Server를 제한된 서비스 로 시작하는 데 대해 설명합니다.

Security-Enhanced Linux란?

Security-Enhanced Linux(SELinux)는 Linux 시스템의 보안 아키텍처입니다. 시스템의 애플리케이션, 프로세스 및 파일에 대한 액세스 제어를 정의하는 데 도움이 됩니다. SELinux는 일련의 규칙 또는 보안 정책을 사용하여 액세스할 수 있거나 액세스할 수 없는 항목을 정의합니다. SELinux는 관리자에게 시스템에 액세스할 수 있는 사용자를 더 자세히 제어할 수 있도록 합니다. 자세한 내용은 SELinux(Security-Enhanced Linux)란?을 참조하세요.

Red Hat 시스템에 SELinux를 사용하도록 설정하는 방법에 대한 자세한 내용은 SELinux 아키텍처를 참조하세요. SELinux 사용 운영 체제를 무료로 시작할 수도 있습니다.

Linux의 SQL Server 2022 는 RHEL 9(2024년 7월 현재)로 공식 인증되었으며, 이제 Red Hat 에코시스템 카탈로그에서 일반 공급됩니다.

SQL Server 및 SELinux

SELinux를 사용하는 제한된 서비스는 SELinux 정책에 명시적으로 정의된 보안 규칙에 의해 제한됨을 의미합니다. SQL Server의 경우 SELinux 사용자 지정 정책이 패키지에 mssql-server-selinux 정의됩니다.

필수 조건

  1. SELinux를 활성화하고 enforcing 모드로 설정해야 합니다. 명령을 sestatus실행하여 SELinux 상태를 확인할 수 있습니다.

    sestatus
    

    예상 출력은 다음과 같습니다.

    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. mssql-server-selinux 필요한 사용자 지정 정책을 정의하는 패키지를 설치합니다.

비고

필수 구성 요소가 충족되지 않으면 SQL Server는 정의되지 않은 서비스로 실행됩니다.

SQL Server를 제한된 서비스로 설치

기본적으로 패키지는 mssql-server SELinux 정책 없이 SQL Server를 설치하고 SQL Server는 정의되지 않은 서비스로 실행됩니다. 패키지 설치는 mssql-server를 자동으로 활성화하여 selinux_execmode 부울을 사용하도록 설정합니다. 다음 명령을 사용하여 SQL Server가 정의되지 않은 상태로 실행되고 있는지 확인할 수 있습니다.

ps -eZ | grep sqlservr

예상 출력은 다음과 같습니다.

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

패키지 mssql-server-selinux을(를) 설치하면 sqlservr 프로세스를 제한하는 사용자 지정 SELinux 정책을 사용할 수 있도록 합니다. 이 정책을 설치하면 selinuxuser_execmod 부울 값이 초기화되고, 새 mssql 도메인에서 sqlservr 프로세스를 제한하는 mssql_server_t라는 정책으로 대체됩니다.

ps -eZ | grep sqlservr

예상 출력은 다음과 같습니다.

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

SQL Server 및 SELinux 형식

선택적 SELinux 정책이 패키지와 함께 mssql-server-selinux 설치되면 몇 가지 새 형식이 정의됩니다.

SELinux 정책 설명
mssql_opt_t 에 mssql-server의 파일을 설치합니다. /opt/mssql
mssql_server_exec_t 실행 파일 /opt/mssql/bin/에서
mssql_paldumper_exec_t 코어 덤프를 관리하기 위해 특별한 권한이 필요한 실행 파일 및 스크립트
mssql_conf_exec_t /opt/mssql/bin/mssql-conf에서 관리 도구
mssql_var_t /var/opt/mssql 파일의 레이블
mssql_db_t 데이터베이스 파일에 대한 레이블 /var/opt/mssql/data

예시

다음 예제에서는 SQL Server가 제한된 서비스로 실행되는 경우 데이터베이스 위치를 변경하는 방법을 보여 줍니다.

  1. 원하는 디렉터리를 만들고 레이블을 다음과 같이 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
    

    이 명령은 semanage fcontext SELinux 파일 컨텍스트 매핑을 관리합니다. -a 매개 변수는 새 파일 컨텍스트 규칙을 추가하고, -t 매개 변수는 SQL Server 데이터베이스 파일용 SELinux 형식을 정의합니다. 이 경우, 적용되는 SELinux 형식은 mssql_db_t입니다. 마지막으로 이 예제에 있는 /opt/mydb 경로 패턴과 그 안에 있는 모든 파일 및 하위 디렉터리가 지정됩니다.

  2. mssql-conf를 사용하여 기본 데이터베이스 위치를 설정하고 설치 프로그램을 실행합니다.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Transact-SQL을 사용하여 새 데이터베이스를 만들어 확인합니다.

    CREATE DATABASE TestDatabase;
    GO
    
  4. 새 데이터베이스가 적절한 레이블로 만들어졌는지 확인합니다.

    sudo ls -lZ /opt/mydb/data/
    

    예상 출력은 다음과 같습니다.

    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
    

    이전 예제에서는 새로 생성된 파일에 mssql_db_t(형식)이 연결되어 있는 것을 볼 수 있습니다.