이 문서에서는 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 정의됩니다.
필수 조건
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: 33mssql-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가 제한된 서비스로 실행되는 경우 데이터베이스 위치를 변경하는 방법을 보여 줍니다.
원하는 디렉터리를 만들고 레이블을 다음과 같이
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 fcontextSELinux 파일 컨텍스트 매핑을 관리합니다.-a매개 변수는 새 파일 컨텍스트 규칙을 추가하고,-t매개 변수는 SQL Server 데이터베이스 파일용 SELinux 형식을 정의합니다. 이 경우, 적용되는 SELinux 형식은mssql_db_t입니다. 마지막으로 이 예제에 있는/opt/mydb경로 패턴과 그 안에 있는 모든 파일 및 하위 디렉터리가 지정됩니다.mssql-conf를 사용하여 기본 데이터베이스 위치를 설정하고 설치 프로그램을 실행합니다.
sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data sudo systemctl restart mssql-serverTransact-SQL을 사용하여 새 데이터베이스를 만들어 확인합니다.
CREATE DATABASE TestDatabase; GO새 데이터베이스가 적절한 레이블로 만들어졌는지 확인합니다.
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(형식)이 연결되어 있는 것을 볼 수 있습니다.