Bunun çalışması için aşağıdaki modüllere ve sistemlere ihtiyacımız var:
LDAP kullanıcısı ile web sitemizdeki kullanıcıları kaydetmek için LDAP modülü kullanılacak ve LDAP SSO modülü, Kerberos üzerinden Apache ile kimlik doğrulama için kullanılacaktır.
Kerberos, güvenilir bir üçüncü tarafa dayanan bir ağ kimlik doğrulama sistemidir. Diğer iki taraflar ise kullanıcı ve kullanıcının bağlanmak istediği servis. Her servis ve her uygulama Kerberos kullanamaz ama kullanabilen servisler ve uygumalar için Kerberos ağ için tek merkezli (Single Sign On) erişim sağlar.
Bu bölümde Kerberos sunucusunun kurulumunu, ayarlarını ve bazı kullanıcı ayarlarını belirleyeceğiz.
Eğer Kerberos'a yeni iseniz bazı anlamanız gereken kelimeler var. Bu kelimelerin çoğu başka ortamlardan tanıdık gelebilir.
Principal: Sunucular tarafından sağlanan tüm kullanıcıların, bilgisayarların ve hizmetlerin Kerberos Principals olarak tanımlanması gerekir.
Instances: Hizmet müdürleri ve özel idari admin rolu olanlar için kullanılır.
Realms: Kerberos kurulumu tarafından sağlanan eşsiz kontrol alanı. Ana bilgisayarlarınızın ve kullanıcılarınızın ait olduğu etki alanı veya grup olarak düşünün. Kerberos kurallarına göre realm isimleri büyük harfli olması gerekir.Varsayılan olarak, ubuntu, büyük harfe dönüştürülen DNS alanını (EXAMPLE.COM) bölge olarak kullanacaktır.
Key Distribution Center: (KDC) üç bölümden oluşur, tüm principallerin bir veritabanı, kimlik doğrulama sunucusu ve bilet veren sunucu. Her bölge için en az bir KDC olmalıdır.
Ticket Granting Ticket: Kimlik Doğrulama Sunucusu (AS) tarafından belirlenir, Bilet Verme Bileti (TGT) yalnızca KDC tarafından bilinen kullanıcının şifresiyle şifrelenir.
Ticket Granting Server: (TGS) talep üzerine kullanıcılara servis bileti verir.
Tickets: İki princiapallerin kimliklerini doğrular. Biri principal, diğeri kullanıcı tarafından talep edilen bir servis. Biletler, kimliği doğrulanmış oturum sırasında güvenli iletişim için kullanılan bir şifreleme anahtarı oluşturur.
Keytab Files: Keytab, KDC ana veri tabanından çıkartılan dosyalardır ve bir servis veya host için şifreleme anahtarını içerir.
Özet olarak Realm'de ihtiyaç üzerine en az bir tane Principallerin veritabanını içeren KDC olur. Principal kullanıcı Kerberos erişimli sunucuya bağlanığında KDC, Ticket Granting Ticket (TGT) verir. Kullanıcı tarafından verilen kimlik bilgileri uyuşuyorsa, kimliği doğrulanır ve Kerberos ayarlı servis için Ticket Granting Server (TGS) sunucudan ticketleri ister. Ticket servisleri kullanıcı bir daha kullanıcı adı ve şifresini doğrulamasını istemeden kimliğini doğrular.
Kerberos, güvenli olmayan bir ağ üzerinden iletişim kuran düğümlerin kimliklerini güvenli bir şekilde birbirlerine kanıtlamalarına izin vermek için biletler temelinde çalışan bir bilgisayar ağı kimlik doğrulama protokolüdür. Protokol, Hades'in vahşi üç başlı bekçi köpeği olan Yunan mitolojisinden Kerberos (veya Cerberus) karakterinden sonra seçildi.
Tasarımcıları öncelikle kullanıcı-sunucu modelini hedef aldı ve karşılıklı kimlik doğrulamasını sağlar, hem kullanıcı hem de sunucu birbirinin kimliğini doğrular. Kerberos protokol mesajları, gizli dinleme ve tekrarlama saldırılarına karşı korunur.
Kerberos simetrik anahtar şifrelemesine dayanıyor ve güvenilir bir üçüncü taraf gerektiriyor. İsteğe bağlı olarak, belirli kimlik doğrulama aşamalarında ortak anahtar şifrelemesi kullanabilir. Kerberos, varsayılan olarak 88 numaralı UDP bağlantı noktasını kullanır.
Bu sebeplerden dolayı Kerberos, Apache kimlik doğrulaması için uygun bir seçenektir.
Apache için Kerberos ayarlarını Ubuntu üzerinden yapacağız.
Kerberos realm'e bağlı sunucular ve kullanıcı servislerin sistem saati bir birbine uyumlu olmalıdır. Bizim durumumuzda bu sistemler kullanıcıları barındıran Windows Sunucusu yani LDAP sunusu ve Apache serveri barındıran Ubuntu sunucusunun sistem saatleri senkronize olmalıdır (Kerberosun doğru çalışması için en fazla 5 dakikalık fark olmalıdır). Ayrıca sizin web sitenizin geçerli domain ismine sahip olması gerekir, Kerberos doğrulanması IP adresleriyle çalışmaz. Localhost'ta iseniz /etc/hosts
dosyanıza domain ismini tanımlayabilirsiniz. Örneğin: 127.0.0.1 apache.drupart.local
Ubuntu sunucusunun sistem saatinin LDAP sunucusunun sistem saatiyle senkronize etmek için komut satırında çalışan NTP'yi kullanabilisiniz. NTP'yi kurmak için aşağıdaki komutu çalıştırınız:
sudo apt-get install ntp
NTP servisini restart ediniz:
sudo service ntp restart
Sunucusun sistem saatini aşağıdaki komut ile senkronize ediniz
sudo ntpdate -s drupal.drupart.local
Aşağıdaki komutu kullanarak libapache2-mod-auth-curb ve krb5-user kurun:
sudo apt-get install libapache2-mod-auth-kerb krb5-user
libapache2-mod-auth-kerb Apache'yi Kerberos ile bağlantısı için kullanacağız. krb5-user gerçek bir gereksinim değildir, ancak Kerberos için kullanışlı komut satırı araçları sağlar.
Libapache2-mod-auth-curb komutuna ek olarak, krb5-config bağımlılık paketini yükler ve sonra şunu isteyen bir yapılandırma sihirbazı gösterir:
Varsayılan Kerberos sürüm 5 realm. DRUPAL.LOCAL kullanın (büyük harflerle).
KDC.Active Directory sunucum drupal.drupart.local, kendi sunucunuza göre değiştirin.
Yönetim sunucusu. Bu, genellikle LDAP / Active Directory sunucusuyla aynıdır veya birden fazla etki alanı denetleyicisi olması durumunda, normal olarak ana makineye ayarlanmalıdır.
Bu paketleri kurduktan sonra /etc/krb5.conf
dosyasının içeriğini ihtiyaçlarınıza göre değiştirin. Bu dosyada Apache için Kerberos bölgesini tanımlarız..
[libdefaults]
default_realm = DRUPART.LOCAL # Active Directory Domain
# The following krb5.conf variables are only for MIT Kerberos.
kdc_timesync = 1
ccache_type = 4
forwardable = true
proxiable = true
# The following encryption type specification will be used by MIT Kerberos
# if uncommented. In general, the defaults in the MIT Kerberos code are
# correct and overriding these specifications only serves to disable new
# encryption types as they are added, creating interoperability problems.
#
# The only time when you might need to uncomment these lines and change
# the enctypes is if you have local software that will break on ticket
# caches containing ticket encryption types it doesn't know about (such as
# old versions of Sun Java).
# default_tgs_enctypes = des3-hmac-sha1
# default_tkt_enctypes = des3-hmac-sha1
# permitted_enctypes = des3-hmac-sha1
# The following libdefaults parameters are only for Heimdal Kerberos.
fcc-mit-ticketflags = true
[realms]
DRUPART.LOCAL = {
kdc = drupal.drupart.local # Active Directory domain controller.
admin_server = drupal.drupart.local
}
[domain_realm]
.drupart.local = DRUPART.LOCAL
drupart.local = DRUPART.LOCAL
kinit [email protected]
Sizden şifre istenir.
klist
yazınız.$ klist
Default principal: [email protected]
Valid starting Expires Service principal
25/02/2019 13:12 26/02/2019 23:11 krbtgt/[email protected]
renew until 25/02/2019 13:12
C:\>ktpass
-prince HTTP/[email protected]
-mapuser [email protected]
-crypto RC4-HMAC-NT
-ptype KRB5_NT_PRINCIPAL
-pass 1234567
-out C:\intranetkeytab
Bu komut C: \ 'de intranetkeytab dosyası oluşturur. Bu dosyayı kopyalayın ve Apache sunucusunda http_intranet.keytab
olarak /etc/apache2/
klasörüne koyunuz. Her şeyin aşağıdaki komutlarla doğru bir şekilde yapılandırıldığından emin olun:
$ kvno HTTP/[email protected]
HTTP/[email protected]: kvno = 4
$ klist -e
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP/[email protected]
Valid starting Expires Service principal
25/02/2019 14:53 25/02/2019 00:52 krbtgt/[email protected]
renew until 26/02/2019 14:53, Etype (skey, tkt): aes256-cts-hmac-sha1-96, ...
25/02/20194 15:09 25/02/2019 00:52 HTTP/[email protected]
renew until 26/02/2019 14:53, Etype (skey, tkt): arcfour-hmac, arcfour-hmac
$ klist -e -k -t /etc/apache2/http_intranet.keytab
Keytab name: FILE:http_intranet.keytab
KVNO Timestamp Principal
---- ---------------- ---------------------------------------------------------
4 01/01/1970 01:00 HTTP/[email protected] (aes256-cts-hmac-sha1-96)
$ kinit -k -t /etc/apache2/http_intranet.keytab HTTP/[email protected]
$ klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: HTTP/[email protected]
Valid starting Expires Service principal
25/02/2019 14:11 25/02/2019 00:10 krbtgt/[email protected]
renew until 26/02/2019 14:11
Configure Apache for Kerberos Authentication
Apache must be told which parts of which web sites are to use authentication provided by mod_auth_kerb. This is done using the AuthType directive with a value of Kerberos.
In order to specify which Kerberos authentication add following snippet to your virtual host configuration:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/web
ServerName apache.drupart.local
<Location /user/login/sso> # /user/login/sso is required for Drupal LDAP SSO module
AuthType Kerberos
AuthName "Kerberos authenticated intranet"
KrbAuthRealms DRUPART.LOCAL
Krb5Keytab /etc/apache2/http_intranet.keytab
KrbServiceName Any
KrbMethodNegotiate on
KrbMethodK5Passwd on
KrbSaveCredentials on
KrbVerifyKDC on
Require valid-user
</Location>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
sudo service apache2 force-reload
apache.drupal.local/user/login/sso sayfasını ziyaret ettiğinizde eğer LDAP ve LDAP SSO modülleriniz ayarlarını sağlanmışsa kullanıcı adı ve şifre sormadan kimliğiniz doğrulanır.
Bu blog Kerberos kimlik doğrulaması ile ilgili olduğu için, Drupal LDAP modül ayarlarına dair makalelere internetten ulaşabilirsiniz. Diğer tarafta, LDAP SSO ayarları basittir. Bundan sonra Drupal LDAP modülünün uygun şekilde ayarlandığını ve çalıştığını varsayacağım.
composer require 'drupal/ldap_sso:^1.0'
LDAP SSO modülünü kurduktan sonra /admin/config/people/ldap/sso
sayfasına gidin ve aşağıdaki değerleri kontrol edin:
Drupal açıldığında otomatik olarak oturum açar.
Kullanıcılarınız user@realm olarak gösteriliyorsa, bunu etkinleştirmeniz gerekir. Bu mod_auth_kerb için varsayılandır ancak mod_auth_sspi değil.
Ayrıca, kullanıcıyı içeren Sunucu değişkeni (Server variable containing the user) için değer 'REMOTE_USER' olmalıdır. Ardından, oturumu kapattığımızda otomatik olarak giriş yapmayı deneyeceğiniz gibi 'Çıkışta kullanıcıları yönlendir' (Redirect users on logout
) seçeneğinin işaretini kaldırın.
Her şey yolundaysa, Drupal web sitemize giriş yaptığımızda herhangi bir kullanıcı / şifre sormadan otomatik olarak oturum açacağız.
GOSB Teknopark Hi-Tech Bina 3.Kat B3 Gebze - KOCAELİ