Aracılığıyla paylaş


Linux ve kapsayıcılarda SQL Server için Active Directory kimlik doğrulamasını anlama

Şunlar için geçerlidir:Linux üzerinde SQL Server

Bu makalede, Linux veya kapsayıcılarda dağıtılan SQL Server için Active Directory kimlik doğrulamasının nasıl çalıştığına ilişkin ayrıntılar sağlanır.

Kavramlar

Basit Dizin Erişim Protokolü (LDAP)

LDAP, Active Directory de dahil olmak üzere çeşitli dizin hizmetleriyle çalışmaya yönelik bir uygulama protokolüdür. Dizin hizmetleri kullanıcı ve hesap bilgilerini ve parolalar gibi güvenlik bilgilerini depolar. Bu bilgiler şifrelenir ve ardından ağdaki diğer cihazlarla paylaşılır.

LDAP güvenliğini sağlama hakkında daha fazla bilgi edinmek için bkz. Windows Server'da LDAP imzalamayı etkinleştirme.

Kerberos

Kerberos, bir kullanıcının veya ana bilgisayarın kimliğini doğrulamak için kullanılan bir kimlik doğrulama protokolüdür. Bunu istemciyi ve sunucuyu doğrulamanın bir yolu olarak düşünebilirsiniz.

Windows ve Windows dışı sunucuların ve istemcilerin bulunduğu heterojen (karma) bir ortamda çalışırken, Active Directory tabanlı dizin hizmetleriyle çalışmak için iki tür dosya gerekir:

  • Anahtar tablosu dosyaları ("anahtar tabloları" kısaltması)
  • Kerberos yapılandırma dosyaları (krb5.conf veya krb5.ini)

Keytab dosyası nedir?

Linux veya Unix sistemlerindeki sunucu işlemleri, işlemleri bir Windows hizmet hesabıyla çalıştıracak şekilde yapılandırılamaz. Bir Linux veya Unix sisteminin başlangıçta Active Directory'de otomatik olarak oturum açmasını istediğinizde, bir anahtar sekmesi dosyası kullanmanız gerekir.

Anahtar sekmesi, Kerberos korumalı bir hizmetin gösterimini ve Anahtar Dağıtım Merkezi'nde (KDC) ilişkili hizmet asıl adının uzun vadeli anahtarını içeren bir şifreleme dosyasıdır. Anahtar, parolanın kendisi değildir.

Keytab dosyaları şunlardan biri için kullanılır:

  • Ağdaki başka bir hizmette hizmetin kimliğini doğrulama veya
  • Gelen dizin kullanıcısının bir hizmete ait Kerberos hizmet biletinin şifresini çözme.

krb5.conf dosyası nedir?

/etc/krb5.conf dosyası (krb5.iniolarak da adlandırılır) Kerberos v5 (KRB5) ve GNU Basit Kimlik Doğrulama ve Güvenlik Katmanı API'si (GSSAPI) kitaplıkları için yapılandırma girişleri sağlar.

Bu bilgiler varsayılan etki alanını, her etki alanının özelliklerini (Anahtar Dağıtım Merkezleri gibi) ve varsayılan Kerberos bilet ömrünü içerir.

Bu dosya Active Directory kimlik doğrulamasının çalışması için gereklidir. krb5.conf bir INI dosyasıdır, ancak anahtar-değer çiftindeki her değer { ve }içine alınmış bir alt grup olabilir.

krb5.conf dosyası hakkında daha fazla bilgi için MIT Kerberos Consortium belgelerinebakın.

Linux üzerinde SQL Server için Kerberos'ı yapılandırma

Bunlar, Linux üzerinde SQL Server çalıştıran konak sunucusunda ihtiyacınız olan değerlerdir. Aynı konakta çalışan başka (SQL Server olmayan) hizmetleriniz varsa, krb5.conf dosyanızda birkaç giriş daha gerekebilir.

Referans için bir krb5.conf dosyası örneği aşağıda verilmiştir:

[libdefaults]
default_realm = CONTOSO.COM

[realms]
CONTOSO.COM = {
  kdc = adVM.contoso.com
  admin_server = adVM.contoso.com
  default_domain = contoso.com
}

[domain_realm]
.contoso.com = CONTOSO.COM
contoso.com = CONTOSO.COM
  • libdefaults - default_realm değeri mevcut olmalıdır. Bu değer, konak makinenin ait olduğu etki alanını belirtir.

  • realms (isteğe bağlı) - Her bölge için kdc değeri, Active Directory hesaplarını ararken makinenin hangi Anahtar Dağıtım Merkezlerine başvurması gerektiğini belirtmek için ayarlanabilir. Birden fazla KDC belirlediyseniz, her bağlantı için KDC, sırayla (round-robin yöntemiyle) seçilecektir.

  • domain_realm (isteğe bağlı) - Her bölge için eşleştirmeler sağlanabilir. Aksi takdirde, Linux'ta SQL Server etki alanı contoso.com'in CONTOSO.COMalanıyla eşleştiğini varsayar.

Kerberos kimlik doğrulama işlemi

Windows'da Kerberos kimlik doğrulamasında olduğu gibi, bilet verme bileti (TGT) almak için ilk iki adım aynıdır:

  • İstemci, kullanıcı adını ve parolasını (şifrelenmiş) etki alanı denetleyicisine (DC) göndererek oturum açma işlemini başlatır.

  • Kullanıcı adını ve parolayı iç depolama alanıyla karşılaştırdıktan sonra DC, istemciye kullanıcı için bir TGT döndürür.

Linux üzerinde SQL Server, Hizmet Asıl Adı'nın (SPN) parolasını okumak için anahtar sekmesi dosyasını kullanır ve ardından bağlantıyı yetkilendirmek için kullandığı şifrelenmiş blob'un şifresini çözer. Sonraki adımlarda bu işlem özetlenmiştir.

  • Kullanıcı TGT'yi aldıktan sonra istemci, SQL Server örneğinin ana bilgisayar adını ve bağlantı noktasını belirterek SQL Server bağlantısı başlatır.

  • SQL istemcisi dahili olarak MSSQLSvc/<host>:<port>biçiminde bir Hizmet Asıl Adı oluşturur. Bu, çoğu SQL Server istemcisinde sabit kodlanmış bir biçimdir.

  • İstemci, BU SPN için DC'den bir oturum anahtarı isteyerek Kerberos el sıkışmasını başlatır. Hem TGT hem de SPN DC'ye gönderilir.

Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını gösteren Diyagramı - Etki Alanı Denetleyicisine gönderilen Ticket-Granting Anahtar ve Hizmet Asıl Adı.

  • DC, TGT ve SPN'yi doğruladıktan sonra, SQL Server SPN'ye bağlanmak için oturum anahtarını istemciye gönderir.

Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını gösteren Diyagramı - DC tarafından istemciye döndürülen oturum anahtarı.

  • Oturum anahtarından şifrelenmiş blob sunucuya gönderilir.

Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını gösteren Diyagramı - sunucuya gönderilen oturum anahtarı.

  • SQL Server, şifrelenmiş (SPN, parola) tanımlama demetleri içeren diskteki bir dosya olan anahtar sekmesinden (mssql.keytab) SPN parolasını okur.

  • SQL Server, istemcinin kullanıcı adını almak için şifrelenmiş blobu istemciden yeni bulduğu parolayla çözer.

  • SQL Server, istemcinin bağlanma yetkisi olup olmadığını denetlemek için sys.syslogins tablosunda istemciyi arar.

  • Bağlantı kabul edilir veya reddedilir.

Linux üzerinde SQL Server için Active Directory kimlik doğrulamasını gösteren Diyagramı - bağlantı kabul edildi veya reddedildi.

SQL Server kapsayıcıları için Kerberos'ı yapılandırma

Kapsayıcılardaki SQL Server için Active Directory kimlik doğrulaması temelde Linux'taki SQL Server ile aynıdır. Tek fark SQL Server ana bilgisayar SPN'leridir. Önceki senaryoda, SQL Server konağı adıyla bağlandığımız için SPN MSSQLSvc/<host>:<port>. Ancak şimdi kapsayıcıya bağlanmamız gerekiyor.

SQL Server kapsayıcıları için kapsayıcının içinde krb5.conf dosyasını oluşturabilirsiniz. Kapsayıcıyı çalıştıran konak düğümünün etki alanının parçası olması gerekmez, ancak kapsayıcının bağlanmaya çalışacağı etki alanı denetleyicisine ulaşabilmesi gerekir.

Kapsayıcıya bağlandığımız için istemci bağlantısındaki sunucu adı, yalnızca host adından farklı olabilir. Konak adı, kapsayıcı adı veya başka bir diğer ad olabilir. Ayrıca, SQL Server için kullanıma sunulan bağlantı noktasının varsayılan 1433olmaması da yüksek bir olasılıktır.

SQL Server kapsayıcısına bağlanmak için mssql.keytab'de depolanan SPN'yi kullanmanız gerekir. Örneğin, mssql.keytab içindeki SPN MSSQLSvc/sqlcontainer.domain.com:8000 ise, istemcide sqlcontainer.domain.com,8000 bağlantı dizisi olarak kullanırsınız.

Uyarı

Sqlcmd, SQL Server Management Studio (SSMS) veya Visual Studio Code için MSSQL uzantısı gibi tanıdık herhangi bir SQL Server istemci aracını kullanarak sql Server örneğine bağlanabilirsiniz.

SQL Server Kapsayıcıları için Active Directory kimlik doğrulamasını gösteren Diyagramı.

SQL Server grup yenileme

Kimlik doğrulaması için yalnızca Hizmet Asıl Adı'na ihtiyacınız varsa, anahtar sekmesinde neden bir kullanıcı hesabı olduğunu merak ediyor olabilirsiniz.

Bir grup adGroupüyesi olan bir kullanıcı adUserolduğunu hayal edin. adGroup SQL Server'da oturum açma olarak eklenirse, adUser sql Server örneğinde de oturum açma iznine sahip olduğu anlamına gelir. adUser HALA SQL Server'a bağlı olsa da, etki alanı yöneticisi adGroup'den adUser kaldırabilir. Şimdi adUser artık SQL Server'da oturum açma iznine sahip olmamalıdır, ancak Kerberos kimlik doğrulama işlemini zaten geçmiş ve bağlanmışlardır.

Bağlı kullanıcının artık ayrıcalıklı bir eylem gerçekleştirmesine izin verilmediği bir senaryoya (oturum açma açma veya veritabanını değiştirme gibi) karşı koruma sağlamak için grup yenileme adlı bir işlemi düzenli aralıklarla çalıştırıyoruz.

SQL Server'ın grup yenileme için kullandığı ayrıcalıklı bir Active Directory hesabı vardır. Bu hesap, mssql-conf kullanılarak network.privilegedadaccount ayarıyla yapılandırılmıştır veya aksi durumda konak makinenin makine hesabı (<hostname>$) varsayılan olarak kullanılır.

'daki ayrıcalıklı hesabın kimlik bilgileri istemcinin kimliğine bürünmek için kullanılır (bu örnekte adUser). SQL Server, grup üyeliği bilgilerini tanımlamak için kendi kendine bir Kerberos el sıkışması yapar ve sys.syslogins ile karşılaştırarak adUser istenen Transact-SQL komutlarını bağlamak ve yürütmek için gerekli izinlere sahip olup olmadığını denetler. Eğer adUser, adGroup'ten çıkarıldıysa, bağlantı SQL Server tarafından sonlandırılır.

Grup yenileme için aşağıdaki iki koşul gerekir:

  • SQL Server örneği ile şirket içi Active Directory etki alanı arasında ağ bağlantısı.
  • SQL Server'ın bağlı olduğu etki alanı ile şirket içi Active Directory etki alanı arasında iki yönlü güven. Daha fazla bilgi için bkz. Active Directory'ninHakkında.