Aracılığıyla paylaş


SELinux üzerinde SQL Server'ı kullanmaya başlama

Bu makale, Red Hat Enterprise Linux (RHEL) tabanlı bir Security-Enhanced Linux (SELinux) dağıtımında sınırlı hizmet olarak SQL Server'ı kullanmaya başlamanıza yardımcı olur.

Security-Enhanced Linux nedir?

Security-Enhanced Linux (SELinux), Linux sistemleri için bir güvenlik mimarisidir. Sistemdeki uygulamalar, işlemler ve dosyalar için erişim denetimleri tanımlamaya yardımcı olur. SELinux, erişilebilecek veya erişilmeyecekleri tanımlamak için bir dizi kural veya güvenlik ilkesi kullanır. SELinux, yöneticilere sisteme kimlerin erişebileceği üzerinde daha fazla denetim sağlar. Daha fazla bilgi için bkz. SELinux nedir (Security-Enhanced Linux).

Red Hat sistemleri için SELinux'un nasıl etkinleştirileceği hakkında ayrıntılı bilgi için bkz. SELinux Mimarisi. SeLinux özellikli bir işletim sistemini ücretsiz olarak kullanmaya da başlayabilirsiniz.

Linux üzerinde SQL Server 2022 resmi olarak RHEL 9 sertifikasına sahiptir (Temmuz 2024 itibarıyla) ve red hat ekosistem kataloğunda genel kullanıma sunulmuştur.

SQL Server ve SELinux

SELinux ile sınırlı hizmet , seLinux ilkesinde açıkça tanımlanan güvenlik kurallarıyla kısıtlandığı anlamına gelir. SQL Server için, SELinux özel ilkeleri pakette mssql-server-selinux tanımlanır.

Önkoşullar

  1. SELinux'i etkinleştirin ve enforcing moduna ayarlayın. komutunu çalıştırarak sestatus SELinux durumunu denetleyin.

    sestatus
    

    Beklenen çıktı budur.

    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 Gerekli özel ilkeleri tanımlayan paketi yükleyin.

Uyarı

Önkoşullardan herhangi biri karşılanmazsa, SQL Server tanımlanmamış bir hizmet olarak çalışır.

En düşük RHEL ikincil sürüm gereksinimi

SQL Server'ı RHEL 9'da sınırlı bir uygulama olarak çalıştırmak için en düşük RHEL ikincil sürümünü kullanmanız gerekir. SeLinux paketlerindeki nokta sürüm bağımlılıkları nedeniyle bu gereksinim mevcuttur. mssql-server-selinux paketini sınırlı modda çalıştırmak için gereken SQL Server paketi, selinux-policy ve selinux-policy-base paketlerine bağlıdır.

En düşük RHEL ikincil sürümünü belirleme adımları

  1. öğesini içeren mssql-server-selinuxSQL Server deposunu ekleyin.

    RHEL 9 üzerinde SQL Server 2025 (17.x) için:

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

    RHEL 9 üzerinde SQL Server 2022 (16.x) için:

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

    Uyarı

    RHEL 10'a yüklemeyi planlıyorsanız RHEL 10 depolarına geçin.

  2. SELinux ilke bağımlılıklarını görüntülemek için aşağıdaki komutu çalıştırın:

    sudo dnf repoquery --requires --latest-limit=1 mssql-server-selinux | egrep '^selinux-policy(-base)?'
    
  3. Çıktı, .el9_6 gibi bir sonekle belirtilen, gerekli en düşük SELinux politika sürümünü içerir. Bu ek, politikanın oluşturulduğu en düşük RHEL 9 ikincil sürümünü temsil eder. Örneğin, .el9_6 RHEL 9.6'ya karşılık gelir.

    Çıktıda böyle bir sonek görünmüyorsa, bu SELinux politika derlemesiyle ilişkili en düşük RHEL ikincil sürümünü belirlemek için Red Hat belgelerine bakın. Aşağıdaki örnekte, gerekli SELinux temel sürümü şeklindedir 38.1.53-5.

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

    Örnek çıktı aşağıda verilmişti:

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

    Bu örnekte en yüksek ikincil sürüm etiketli gereksinimdir 38.1.53-5.el9_6. Bu nedenle, SQL Server'ı SELinux ()mssql-server-selinux ile yüklemek ve RHEL 9'da sınırlı bir uygulama olarak çalıştırmak için en az RHEL 9.6 gerekir.

SQL Server'ı sınırlı hizmet olarak yükleme

Varsayılan olarak, mssql-server paket SELinux ilkesi olmadan SQL Server'ı yükler ve SQL Server tanımlanmamış bir hizmet olarak çalışır. mssql-server Paket yüklemesi Boole'u selinux_execmode otomatik olarak etkinleştirir. Aşağıdaki komutu kullanarak SQL Server'ın tanımsız çalıştığını doğrulayabilirsiniz:

ps -eZ | grep sqlservr

Beklenen çıktı budur.

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

Paketi yüklediğinizde mssql-server-selinux , işlemi sınırlayan sqlservr özel bir SELinux ilkesi etkinleştirir. Bu ilkeyi selinuxuser_execmod yüklediğinizde Boole değeri sıfırlanır ve adlı mssqlbir ilkeyle değiştirilir. Bu ilke, sqlservr işlemini yeni mssql_server_t etki alanında sınırlandırıyor.

ps -eZ | grep sqlservr

Beklenen çıktı budur.

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

SQL Server ve SELinux türleri

İsteğe bağlı SELinux ilkesini mssql-server-selinux paketini kullanarak yüklediğinizde, bazı yeni türleri tanımlar:

SELinux ilkesi Açıklama
mssql_opt_t mssql-server dosyalarını /opt/mssql konumuna yükle
mssql_server_exec_t Yürütülebilir dosyalar /opt/mssql/bin/ adresinde
mssql_paldumper_exec_t Çekirdek dökümlerini yönetmek için özel izinler gerektiren yürütülebilir dosyalar ve betikler
mssql_conf_exec_t Yönetim aracı: /opt/mssql/bin/mssql-conf
mssql_var_t Dosyalar için etiket /var/opt/mssql
mssql_db_t /var/opt/mssql/data konumundaki veritabanı dosyaları için etiket

Örnekler

Aşağıdaki örnekte SQL Server sınırlı hizmet olarak çalıştırıldığında veritabanı konumunun değiştirilmesi gösterilmektedir.

  1. İstediğiniz dizinleri oluşturun ve olarak mssql_db_tetiketleyin.

    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
    

    komutu semanage fcontext SELinux dosya bağlam eşlemesini yönetir. -a parametresi yeni bir dosya bağlam kuralı ekler ve -t parametresi uygulanacak SELinux türünü tanımlar ve bu durumda SQL Server veritabanı dosyalarına yöneliktirmssql_db_t. Son olarak, komut bu örnekteki /opt/mydb yol desenini belirtir ve içindeki tüm dosyaları ve alt dizinleri içerir.

  2. mssql-conf kullanarak varsayılan veritabanı konumunu ayarlayın ve kurulumu çalıştırın.

    sudo /opt/mssql/bin/mssql-conf set filelocation.defaultdatadir /opt/mydb/data
    sudo systemctl restart mssql-server
    
  3. Transact-SQL kullanarak yeni bir veritabanı oluşturarak doğrulayın:

    CREATE DATABASE TestDatabase;
    GO
    
  4. Yeni veritabanının uygun etiketlerle oluşturulduğunu doğrulayın.

    sudo ls -lZ /opt/mydb/data/
    

    Beklenen çıktı budur.

    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
    

    Önceki örnekte, dosyanın oluşturulan yeni dosyalarla ilişkilendirilmiş türde olduğunu mssql_db_t görebilirsiniz.