Kimlik Doğrulama, Yetkilendirme ve Erişim Denetimi - Apache HTTP Sunucusu

Apache HTTP Sunucusu Sürüm 2.2

Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.2 > Nasıllar ve Öğreticiler

# Kimlik Doğrulama, Yetkilendirme ve Erişim Denetimi

Mevcut Diller: en | fr | ja | ko | tr

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.

## İ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.

- Kimlik Doğrulama türü (bkz. `AuthType` yönergesi)
  - `mod_auth_basic`
  - `mod_auth_digest`
- Kimlik Doğrulayıcı
  - `mod_authn_alias`
  - `mod_authn_anon`
  - `mod_authn_dbd`
  - `mod_authn_dbm`
  - `mod_authn_default`
  - `mod_authn_file`
  - `mod_authnz_ldap`
- Yetkilendirme (bkz. `Require` yönergesi)
  - `mod_authnz_ldap`
  - `mod_authz_dbm`
  - `mod_authz_default`
  - `mod_authz_groupfile`
  - `mod_authz_owner`
  - `mod_authz_user`

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

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

## Ö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.

## Ç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.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

`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>`

## 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ı 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.

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

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

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

Mevcut Diller: en | fr | ja | ko | tr