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
    apache2.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 apache2.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
    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.