Apache HTTP Sunucusu Sürüm 2.2
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.
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.
AuthType
yönergesi)
Require
yönergesi)
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.
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.
Eğer bilgileriniz gerçekten gizliliğe ihtiyaç duyuyorsa kimlik
doğrulamasına ilaveten mod_ssl
modülünü de
kullanabilirsiniz.
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.
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.conf
dosyası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üvenlidir. Güncel tarayıcılar, Özet
(Digest
) kimlik doğrulama yöntemini
desteklemektedir.
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.
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>
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ı 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, her grup için ayrı bir parola dosyası tutarak grup
davranışını taklit edebilirsiniz. Bu yaklaşımın getirisi:
Apache iki dosya yerine sadece bir dosyaya bakar.
Götürüsü ise parola dosyalarından oluşan bir dosya demeti sağlamak
ve AuthUserFile
yönergesinde doğru dosyayı belirtmeyi unutmamak zorunda
kalmanızdır.
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.
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
yerine, AuthBasicProvider
filedbm
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.
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.