Kimlik Doğrulama ve Yetkilendirme - Apache HTTP Sunucusu Sürüm 2.2

Apache Server 2.2

Apache HTTP Sunucusu Sürüm 2.2

<-

Kimlik Doğrulama ve Yetkilendirme

Kimlik Doğrulama istediğiniz kişileri teyid etme işlemidir. Yetkilendirme ise kişilerin nereye gireceklerine ve hangi bilgiye ulaşacaklarına müsaade edilmesi işlemidir.

Genel erişim denetimi için, Erişim Denetimi belgesine bakınız.

top

İlgili modüller ve Yönergeler

Kimlik Doğrulama ve yetkilendirme işlemi ile ilgili üç tür modül vardır. Genellikle her bir gruptan en az bir modül seçeceksiniz.

mod_authnz_ldap modülü kimlik doğrulama ve yetkilendirme işlemlerinin ikisini birden gerçekleştirir. mod_authn_alias modülü bir kimlik doğrulama tedarikçisi olmadığı halde diğer kimlik doğrulama tedarikçilerinin yapılandırılabilmesini mümkün kılmak gibi bir esnekliğe sahiptir.

mod_authz_host modülü bu işlemleri sunucu adına, IP adresine ve isteğin karekteristiğine bağlı olarak gerçekleştirir. Ancak kimlik doğrulama sisteminin bir parçası değildir.

Muhtemelen göz atmak isteyeceğiniz Erişim Denetimi nasıl belgesi, sunucuya erişimlerin çeşitli yollarından bahsetmektedir.

top

Giriş

Sitenizde sadece küçük bir grup insana hitap eden ya da hassas bilgileriniz varsa, bu makaledeki teknikleri kullanarak dilediğiniz kişilerin sadece dilediğiniz sayfaları görüntülemesini sağlayabilirsiniz.

Bu makale sitenizin bazı parçalarını korumak için kullanacağınız "standart" yolları içermektedir.

Bilginize:

Eğer bilgileriniz gerçekten gizliliğe ihtiyaç duyuyorsa kimlik doğrulamasına ilaveten mod_ssl modülünü de kullanabilirsiniz.

top

Ön gereksinimler

Bu makalede bahsi geçen yönergeler ya ana sunucu yapılandırma dosyasında (genellikle <Directory> bölümünde) ya da dizin içi yapılandırma dosyalarında (.htaccess dosyaları) bulunmak zorundadır.

Eğer .htaccess dosyalarını kullanmayı tasarlıyorsanız, kimlik doğrulama yönergelerine bu dosyaların içine koymaya izin veren sunucu yapılandırmasına ihtiyacınız olacaktır. Bunun için, dizin içi yapılandırma dosyalarının içine hangi yönergelerin konacağını belirleyen AllowOverride yönergesi kullanılır.

Kimlik doğrulamadan sözettiğimize göre, aşağıda gösterilen şekilde bir AllowOverride yönergesine ihtiyacınız olacaktır:

AllowOverride AuthConfig

Yönergeleri doğrudan ana sunucunun yapılandırma dosyasına koyacaksanız bu dosyaya yazma izniniz olmalıdır.

Bazı dosyaların nerede saklandığını bilmek için sunucunun dizin yapısı hakkında biraz bilgi sahibi olmanız gerekmektedir. Bu çok da zor olmamakla birlikte bu noktaya gelindiğinde konuyu netleştireceğiz.

top

Çalışmaya Başlama

Burada, sunucu üzerindeki bir dizini parolayla korumak için gereken temel bilgiler verilecektir.

İlk olarak bir parola dosyası oluşturmalısınız. Bunu nasıl yapacağınız, özellikle, seçtiğiniz kimlik doğrulayıcıya göre değişiklik gösterir. Bunun üzerinde ileride daha fazla duracağız. Başlangıç için parolaları bir metin dosyasında tutacağız.

Bu dosya belge kök dizini altında olmamalıdır. Böylece başkaları parola dosyasını indiremezler. Örneğin belgeleriniz /usr/local/apache/htdocs üzerinden sunuluyorsa parola dosyanızı /usr/local/apache/passwd dizininde tutabilirsiniz.

Dosyayı oluşturmak için Apache ile gelen htpasswd uygulamasını kullanacağız. Bu uygulama Apache'nin kurulumunda belirtilen bin dizininde bulunur. Eğer Apache'yi üçüncü parti paketlerden kurduysanız, çalıştırılabilir dosyaların bulunduğu yollar üzerinde olmalıdır.

Bir dosya oluşturmak için şunları yazın:

htpasswd -c /usr/local/apache/passwd/passwords umut

htpasswd size parola soracaktır arkasından da teyit etmek için parolayı tekrar girmenizi isteyecektir:

# htpasswd -c /usr/local/apache/passwd/passwords umut
New password: parolam
Re-type new password: parolam
Adding password for user umut

Eğer htpasswd normal yollar üzerinde değilse çalıştırmak için dosyanın bulunduğu tam yeri belirtmeniz gerekecektir. Dosyanın öntanımlı kurulum yeri: /usr/local/apache2/bin/htpasswd

Bundan sonra, sunucuyu, parola sorması için ve kimlerin erişim izni olacağını belirlemek için yapılandıracaksınız. Bu işlemi httpd.confdosyasını düzenleyerek ya da bir .htaccess dosyası kullanarak yapabilirsiniz. Örneğin, /usr/local/apache/htdocs/secret dizinini korumayı amaçlıyorsanız, şu yönergeleri kullanabilirsiniz. Bu yönergeleri /usr/local/apache/htdocs/secret/.htaccess dosyası içine veya httpd.conf içindeki <Directory /usr/local/apache/htdocs/secret> bölümüne koyabilirsiniz.

AuthType Basic
AuthName "Gizli Dosyalar"
# (Aşağıdaki satırın kullanımı isteğe bağlıdır)
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
Require user umut

Bu yönergeleri tek tek inceleyelim. AuthType yönergesi kullanıcının kimliğini doğrulamakta kullanılacak yöntemi seçer. En çok kullanılan yöntem Basic'tir ve bu yöntem mod_auth_basic modülüyle gerçeklenmiştir. Temel (Basic) kimlik doğrulamasıyla gönderilen parolanın şifrelenmeyeceğini unutmayın. Bu yöntem, bu sebepten dolayı mod_ssl eşliğinde kullanılmadığı sürece yüksek hassasiyete sahip bilgiler için kullanılmamalıdır. Apache bir başka kimlik doğrulama yöntemini daha destekler: AuthType Digest. Bu yöntem mod_auth_digest tarafından gerçeklenmiştir ve çok daha güvenli olacağı düşünülmüştü. Bu artık geçerliliğini yitirmiştir ve bağlantı artık mod_ssl tarafından şifrelenmektedir.

AuthName yönergesi ile kimlik doğrulamada kullanılacak Saha da belirtilebilir. Saha kullanımının, başlıca iki işlevi vardır. Birincisi, istemci sıklıkla bu bilgiyi kullanıcıya parola diyalog kutusunun bir parçası olarak sunar. İkincisi, belirtilen kimlik doğrulamalı alan için gönderilecek parolayı belirlerken istemci tarafından kullanılır.

Örneğin, bir istemcinin "Gizli Dosyalar" alanında kimliği doğrulanmış olsun. Aynı sunucu üzerinde "Gizli Dosyalar" Sahası olarak belirlenmiş alanlarda aynı parola özdevinimli olarak yinelenecektir. Böylece parola bir kere girilerek aynı Sahayı paylaşan çok sayıda kısıtlanmış alana ulaşırken oluşacak gecikmeden kullanıcı korunmuş olur. Güvenlik gerekçelerinden dolayı, her sunucu adı değiştirilişinde istemcinin parolayı yeniden sorması gerekir.

AuthBasicProvider yönergesinin öntanımlı değeri file olduğundan, bu durumda, bu yönergenin kullanımı isteğe bağlıdır. Ancak, eğer kimlik doğrulaması için mod_authn_dbm ya da mod_authn_dbd gibi farklı bir kaynak seçecekseniz bu yönergeyi kullanmanız gerekecektir.

AuthUserFile yönergesi htpasswd ile oluşturduğumuz parola dosyasının yerini belirtmek için kullanılır. Eğer çok sayıda kullanıcınız varsa her bir kullanıcıyı her kimlik doğrulama isteği için kimlik bilgilerini bir metin dosyasında aramak gayet yavaş olacaktır. Apache, kullanıcı bilgilerini hızlı bir veritabanı dosyasında depolama özelliğine de sahiptir. Bu amaçla, mod_authn_dbm modülünün AuthDBMUserFile yönergesi kullanılabilir. Bu dosyalar dbmmanage programı ile oluşturulabilir ve değiştirilebilir. Apache modülleri Veritabanı içindeki üçüncü parti modüllerinde çok sayıda başka kimlik doğrulama türü de vardır.

Son olarak Require yönergesi, sunucunun bu bölgesine erişimine izin verilen kullanıcıları ayarlama işleminin kimlik doğrulamasıyla ilgili kısmını sağlar. Bir sonraki bölümde Require yönergesini kullanmanın çeşitli yoları üzerinde duracağız.

top

Satisfy

Satisfy yönergesi belli bir kullanıcıya giriş hakkı tanınırken çeşitli kriterlerin belirtilebilmesine olanak tanır. Yönerge değiştirge olarak all ve any seçeneklerinden birini kabul eder. Öntanımlı olarak değerin all olduğu varsayılır. Yani, çeşitli kriterler belirtilmişse kullanıcının tüm bunları karşılaması gerekir. any belirtilmesi halinde ise, kullanıcının bu kriterlerden herhangi birini karşılaması yeterlidir.

Ağ dışından erişimler parola korumalı iken içerden gelen isteklere kimlik denetiminin yapılmadığı durum için erişim denetiminin kullanımı iyi bir örnektir. Bu, Satisfy yönergesi kullanılarak şöyle yapılabilir:

<Directory /usr/local/apache/htdocs/sekrit>
AuthType Basic
AuthName intranet
AuthUserFile /www/passwd/users
AuthGroupFile /www/passwd/groups
Require group customers
Order allow,deny
Allow from internal.com
Satisfy any
</Directory>

top

Birden çok kişiye izin vermek

Yukarıdaki yönergelerle bir dizinde sadece bir kişiye (umut adlı kullanıcıya) izin verir. Çoğunlukla birden çok kişiye izin verilmesi istenir. Bu durumda AuthGroupFile yönergesi devreye girer.

Eğer birden çok kişiye izin vermek istiyorsanız içinde kullanıcı isimlerinin olduğu bir grup dosyası oluşturmalısınız. Bu dosyanın biçemi gayet basittir ve bunu herhangi bir metin düzenleyici ile oluşturabilirsiniz. Bu dosyanın içeriği aşağıdaki gibi görünecektir:

GroupName: umut samet engin kubilay

Dosya, sadece, boşluklarla birbirinden ayrılmış gurup üyelerinin isimlerinden oluşan uzun bir liste içerir.

Varolan parola dosyasına bir kullanıcı eklemek için şunu yazın:

htpasswd /usr/local/apache/passwd/passwords birey

Evvelce almış olduğunuz yanıtı yine alacaksınız ama bu sefer yeni bir dosya oluşturulmak yerine var olan bir dosyaya eklenecektir. (Yeni bir parola dosyası oluşturmak için -c seçeneği kullanılır).

Şimdi, .htaccess dosyanızı veya <Directory> bölümünüzü aşağıda görüldüğü şekilde değiştirebilirsiniz:

AuthType Basic
AuthName "Davete Binaen"
# Satır isteğe bağlıdır:
AuthBasicProvider file
AuthUserFile /usr/local/apache/passwd/passwords
AuthGroupFile /usr/local/apache/passwd/groups
Require group Grupismi

Artık, Grupismi gurubunda listelenmiş ve password dosyasında kaydı olan kişiye, parolayı doğru yazdığı takdirde izin verilecektir.

Çoklu kullanıcıya izin veren biraz daha az kullanılan başka bir yol daha mevcuttur. Bir gurup dosyası oluşturmaktansa, şu yönergeyi kullanabilirsiniz:

Require valid-user

Require user umut satırı ile parola dosyasında listelenmiş ve parolayı doğru olarak giren herhangi bir kişiye izin vermektense bunu kullanabilirsiniz.

top

Olası Sorunlar

Temel kimlik doğrulama yolu belirtildiği için, sunucuya yaptığınız her belge istediğinde kullanıcı adınızın ve parolanızın doğrulanması gerekir. Hatta aynı sayfayı yeniden yüklerken ya da sayfadaki her bir resim için bu yapılmalıdır (şayet korunmakta olan bir dizinden geliyorsa). Bu işlem hızı azaltacaktır. Yavaşlama miktarı parola dosyanızın büyüklüğü ile orantılı olacaktır, çünkü bu işlem sırasında dosya açılacak ve kullanıcıların arasında isminiz bulunana kadar liste aşağı doğru taranacaktır. Bu işlem sayfa her yüklenişinde tekrar edilecektir.

Buradan çıkacak sonuç, bir parola dosyasına konulan kullanıcı sayısında bir üst sınır olması gerekliliğidir. Bu sınır sunucunuzun başarımına bağlı olarak değişiklik gösterir. Bir kaç yüz kayıtın üstünde giriş yaptığınızda hız düşüşünü gözlemlebilirsiniz İşte bu anda kimlik doğrulama için başka bir yöntem aramaya başlarsınız.

top

Diğer parola depolama yöntemleri

Parolaları basit bir metin dosyasında depolamak yukarıda bahsedilen sorunlara yol açtığından parolaları başka bir yerde depolamayı düşünebilirsiniz; örneğin bir veritabanında.

mod_authn_dbm ve mod_authn_dbd modülleri bunu mümkün kılan iki modüldür. Depolama yönemi olarak AuthBasicProvider file yerine, dbm veya dbd kullanabilirsiniz.

Bir metin dosyası yerine bir dbd dosyası kullanım örneği:

<Directory /www/docs/private>
AuthName "Private"
AuthType Basic
AuthBasicProvider dbm
AuthDBMUserFile /www/passwords/passwd.dbm
Require valid-user
</Directory>

Başka seçenekler de mümkündür. Ayrınılar için mod_authn_dbm belgesine başvurun.

top

Daha fazla bilgi

Daha fazla bilgi için mod_auth_basic ve mod_authz_host modüllerinin belgelerine bakınız. mod_authn_alias modülü ile bazı yapılandırmalarınızı basitleştirebilirsiniz.

Apache tarafından desteklenen şifrelerle ilgili bilgi için Parola Biçemleri belgesine bakınız.

Erişim Denetimi nasıl belgesinden de bazı bilgiler edinebilirsiniz.