Apache Üzerinde Şifre Doğrulama (Basic Auth) Kurulumu: Ubuntu 16.04 Rehberi
Apache HTTP Sunucusu, web sitelerini ve web uygulamalarını yayınlamak için dünya genelinde en çok kullanılan sunuculardan biridir. Bazen bir web dizininin veya belirli bir dosyanın içeriğini, yalnızca yetkili kullanıcıların erişebileceği şekilde korumak isteyebilirsiniz. İşte bu noktada Apache’nin temel kimlik doğrulama (Basic Authentication) özelliği devreye girer. Bu makalede, Ubuntu 16.04 işletim sistemi üzerinde çalışan bir Apache web sunucusunda, dizinlere ve dosyalara parola koruması eklemek için adım adım nasıl temel kimlik doğrulama kurulacağını ayrıntılı bir şekilde ele alacağız. Bu yöntem, hassas bilgileri içeren yönetim panelleri, geliştirme ortamları veya özel müşteri alanları gibi alanları güvence altına almak için basit ama etkili bir yol sunar.
Giriş
Web sunucularında parola koruması, yetkisiz erişimi engellemek için kritik bir güvenlik önlemidir. Apache’nin “Basic Auth” olarak bilinen temel kimlik doğrulama mekanizması, HTTP protokolünün bir parçasıdır ve kullanıcı adı/parola çifti ile erişimi kısıtlamanın en basit yollarından biridir. Bir kullanıcı korumalı bir kaynağa erişmeye çalıştığında, tarayıcı bir kimlik doğrulama kutusu görüntüler ve kullanıcıdan kimlik bilgilerini girmesini ister. Bu bilgiler sunucuya gönderilir ve sunucu, kaydedilmiş kimlik bilgileriyle karşılaştırarak erişime izin verir veya reddeder.
Bu rehberde, Ubuntu 16.04’te Apache’nin nasıl kurulacağını (gerekliyse), .htaccess dosyalarının nasıl etkinleştirileceğini, kullanıcı adları ve parolaların güvenli bir şekilde nasıl saklanacağını ve son olarak Apache yapılandırmasının nasıl düzenleneceğini adım adım açıklayacağız. Ayrıca, temel kimlik doğrulamanın güvenliğini artırmak için ek ipuçları ve sıkça sorulan sorulara yanıtlar da bulacaksınız.
Ön Koşullar
Bu rehbere başlamadan önce aşağıdaki ön koşulların karşılandığından emin olun:
* Ubuntu 16.04 Sunucusu: Kurulumun yapılacağı bir Ubuntu 16.04 sunucusu.
* Root veya Sudo Yetkileri: Sunucuda komutları çalıştırmak için root kullanıcısı erişimi veya sudo ayrıcalıklarına sahip bir kullanıcı.
* Apache Web Sunucusu: Sunucunuzda Apache2’nin kurulu ve çalışıyor olması. Eğer kurulu değilse, rehberin ilk adımlarında nasıl kurulacağını göstereceğiz.
* Temel Linux Komut Bilgisi: Temel komut satırı bilgisi (dosya oluşturma, düzenleme, dizinlerde gezinme vb.).
Apache HTTP Temel Kimlik Doğrulama (Basic Auth) Nedir?
Apache HTTP Temel Kimlik Doğrulama, RFC 7617’de tanımlanan bir HTTP kimlik doğrulama şemasıdır. Çalışma prensibi oldukça basittir:
1. Talep: Bir istemci (tarayıcı), Apache tarafından parola ile korunmuş bir kaynağa (dizin veya dosya) erişim talebinde bulunur.
2. Yanıt (401 Unauthorized): Apache, bu kaynağın korunduğunu fark eder ve istemciye bir 401 Unauthorized HTTP durumu kodu ile birlikte bir WWW-Authenticate başlığı gönderir. Bu başlık, istemciye hangi kimlik doğrulama şemasının (bu durumda “Basic”) kullanılması gerektiğini ve bir “realm” (kimlik doğrulama alanının adı, genellikle bir mesaj) bildirir.
3. Kimlik Bilgileri Girişi: İstemci (tarayıcı), WWW-Authenticate başlığını alır ve kullanıcıya bir kimlik doğrulama kutusu (genellikle kullanıcı adı ve parola isteyen bir pencere) gösterir. “realm” genellikle bu kutuda gösterilen mesajdır.
4. Kimlik Bilgileri Gönderimi: Kullanıcı kimlik bilgilerini girip onayladığında, tarayıcı bu bilgileri kullanıcıadı:parola formatında birleştirir, Base64 ile kodlar ve orijinal talebi bir Authorization başlığı ile birlikte Apache’ye tekrar gönderir. Örneğin, Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==.
5. Doğrulama ve Erişim: Apache, gelen Authorization başlığını alır, Base64 kodunu çözer, kullanıcı adı ve parolayı ayrıştırır. Bu bilgileri, sunucuda depolanan (genellikle .htpasswd dosyası) kullanıcı adları ve parolalarla karşılaştırır.
* Eğer kimlik bilgileri eşleşirse, Apache kaynağa erişime izin verir ve 200 OK durumuyla birlikte istenen içeriği gönderir.
* Eğer kimlik bilgileri eşleşmezse, Apache tekrar bir 401 Unauthorized yanıtı gönderir ve bu döngü devam eder.
Avantajları:
* Basitlik: Kurulumu ve yönetimi nispeten kolaydır.
* Evrensellik: Tüm modern web tarayıcıları tarafından desteklenir.
* Hafif: Sunucu kaynaklarını çok az tüketir.
Dezavantajları:
* Güvenlik: Kimlik bilgileri Base64 ile kodlansa da, bu bir şifreleme yöntemi değildir ve kolayca çözülebilir. Bu nedenle, Basic Auth’un her zaman SSL/TLS (HTTPS) ile birlikte kullanılması kritik öneme sahiptir. HTTPS olmadan kullanıldığında, kimlik bilgileri ağ üzerinden düz metin olarak gönderilmiş gibi savunmasız kalır.
* Kullanıcı Deneyimi: Her yeni oturumda veya belirli bir süre sonra kimlik bilgilerinin tekrar girilmesi gerekebilir, bu da kullanıcı deneyimini olumsuz etkileyebilir.
* Kapsam: Yalnızca belirli bir dizini veya dosyayı korur, daha karmaşık kimlik doğrulama veya yetkilendirme senaryoları için uygun değildir.
Bu dezavantajlara rağmen, özellikle geliştirme ortamlarında, dahili araçlara erişimde veya küçük ölçekli, hızlı bir parola korumasına ihtiyaç duyulduğunda Basic Auth hala geçerli ve kullanışlı bir çözümdür.
Adım 1: Apache Web Sunucusunu Kurma (Gerekliyse)
Eğer sunucunuzda Apache zaten kuruluysa bu adımı atlayabilirsiniz. Kurulum için aşağıdaki komutları kullanın:
1.1 Paket Listesini Güncelleme
sudo apt update
Bu komut, sisteminizdeki mevcut paket listesini güncelleyerek en son yazılım sürümlerine erişmenizi sağlar.
1.2 Apache Kurulumu
sudo apt install apache2
Bu komut, Apache2 web sunucusunu ve ilgili bağımlılıklarını kurar.
1.3 Güvenlik Duvarını Yapılandırma (UFW Kullanıyorsanız)
Eğer sunucunuzda UFW (Uncomplicated Firewall) etkinse, Apache’nin web trafiğine izin vermesi için güvenlik duvarı kurallarını ayarlamanız gerekir.
sudo ufw app list
Bu komut, UFW’nin tanıdığı uygulama profillerini listeler. Genellikle “Apache Full”, “Apache” ve “Apache Secure” gibi profilleri görürsünüz.
* Apache: Sadece port 80 (HTTP) trafiğine izin verir.
* Apache Secure: Sadece port 443 (HTTPS) trafiğine izin verir.
* Apache Full: Hem port 80 hem de port 443 trafiğine izin verir.
Web sunucunuzun hem HTTP hem de HTTPS üzerinden erişilebilir olmasını sağlamak için “Apache Full” profilini etkinleştirebilirsiniz:
sudo ufw allow 'Apache Full'
Ardından, güvenlik duvarı durumunu kontrol edin:
sudo ufw status
Çıktıda “Apache Full” izninin etkin olduğunu görmelisiniz.
1.4 Apache Servisinin Durumunu Kontrol Etme
Apache’nin başarılı bir şekilde kurulduğunu ve çalıştığını doğrulamak için aşağıdaki komutu kullanın:
systemctl status apache2
Çıktıda “active (running)” ifadesini görmelisiniz. Ayrıca, web tarayıcınızdan sunucunuzun IP adresine (örneğin http://your_server_ip) giderek Apache’nin varsayılan karşılama sayfasını görüp görmediğinizi kontrol edebilirsiniz.
Adım 2: .htaccess Dosyalarının Kullanımını Etkinleştirme
.htaccess dosyaları, dizin bazında yapılandırma değişiklikleri yapmanıza olanak tanır. Apache’nin temel kimlik doğrulamasını bir .htaccess dosyası aracılığıyla uygulamak istiyorsanız, öncelikle bu özelliğin etkinleştirilmesi gerekir. Varsayılan olarak, çoğu Apache kurulumunda .htaccess dosyaları aracılığıyla AllowOverride yönergesi None olarak ayarlanmıştır, bu da .htaccess dosyalarındaki yönergelerin göz ardı edildiği anlamına gelir.
2.1 Apache Yapılandırma Dosyasını Düzenleme
Hangi dizin için .htaccess kullanacağınızı belirleyin. Genellikle bu, web sitenizin kök dizini veya korumak istediğiniz belirli bir alt dizin olacaktır (örneğin, /var/www/html).
Apache’nin varsayılan yapılandırma dosyası veya sanal host yapılandırma dosyası içinde AllowOverride yönergesini değiştirmeniz gerekir. En yaygın senaryo, varsayılan sanal host yapılandırma dosyasını düzenlemektir:
sudo nano /etc/apache2/sites-available/000-default.conf
Bu dosyanın içinde, sitenizin kök dizinini (genellikle /var/www/html) belirten bir bloğu bulmalısınız. Bu bloğu aşağıdaki gibi düzenleyin:
# ... diğer yapılandırmalar ...
DocumentRoot /var/www/html
Options Indexes FollowSymLinks
AllowOverride All # Bu satırı None'dan All olarak değiştirin
Require all granted
# ... diğer yapılandırmalar ...
Eğer belirli bir alt dizini koruyacaksanız, o dizin için ayrı bir bloğu oluşturabilir veya mevcut bloğu o dizini kapsayacak şekilde düzenleyebilirsiniz. Örneğin, /var/www/html/secure_area dizinini korumak için:
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
AllowOverride All yönergesi, Apache’ye bu dizin içindeki .htaccess dosyalarında tanımlanan tüm yönergeleri (kimlik doğrulama, yeniden yazma vb.) uygulamasını söyler.
2.2 Gerekli Apache Modüllerini Etkinleştirme
Temel kimlik doğrulamanın çalışabilmesi için Apache’nin belirli modüllere ihtiyacı vardır. Bu modüller genellikle varsayılan olarak etkindir, ancak yine de kontrol etmekte fayda var:
* mod_auth_basic: Temel kimlik doğrulama şemasını sağlar.
* mod_authn_file: Kimlik bilgilerini bir dosyadan (örn. .htpasswd) okumayı sağlar.
* mod_authz_core: Yetkilendirme için temel yetenekleri sağlar.
* mod_authz_user: Kullanıcı bazında yetkilendirme sağlar.
Bu modülleri etkinleştirmek için aşağıdaki komutları kullanın:
sudo a2enmod auth_basic
sudo a2enmod authn_file
sudo a2enmod authz_core
sudo a2enmod authz_user
Zaten etkin olan modüller için bir uyarı alabilirsiniz, bu normaldir.
2.3 Apache’yi Yeniden Başlatma
Yapılandırma değişikliklerinin ve modül etkinleştirmelerinin uygulanması için Apache servisini yeniden başlatmanız gerekir:
sudo systemctl restart apache2
Yeniden başlatmadan önce yapılandırma dosyasında bir hata olup olmadığını kontrol etmek iyi bir uygulamadır:
sudo apache2ctl configtest
Eğer çıktı Syntax OK ise, yapılandırma dosyanızda bir sözdizimi hatası yok demektir.
Adım 3: Kullanıcı Dosyası Oluşturma (.htpasswd)
Apache, temel kimlik doğrulama için kullanıcı adlarını ve parolaları şifreli bir biçimde bir dosyada saklar. Bu dosya genellikle .htpasswd olarak adlandırılır. Bu dosyayı oluşturmak ve yönetmek için htpasswd yardımcı programını kullanacağız.
3.1 apache2-utils Paketini Kurma
htpasswd komutu, apache2-utils paketiyle birlikte gelir. Eğer bu paket kurulu değilse, kurmanız gerekir:
sudo apt install apache2-utils
3.2 .htpasswd Dosyasını Oluşturma
.htpasswd dosyasını, web kök dizininizin (örneğin /var/www/html) dışına, Apache’nin okuyabileceği ancak web tarayıcıları tarafından doğrudan erişilemeyen güvenli bir konuma yerleştirmek önemlidir. Ortak bir yer /etc/apache2/ dizinidir.
İlk kullanıcıyı eklemek ve .htpasswd dosyasını oluşturmak için -c (create) bayrağını kullanın:
sudo htpasswd -c /etc/apache2/.htpasswd
Örnek:
sudo htpasswd -c /etc/apache2/.htpasswd adminuser
Bu komutu çalıştırdığınızda, sizden adminuser için bir parola girmenizi ve onaylamanızı isteyecektir. Güçlü bir parola seçtiğinizden emin olun.
3.3 Ek Kullanıcılar Ekleme
İlk kullanıcıyı ekledikten sonra, aynı dosyaya başka kullanıcılar eklemek için -c bayrağını kullanmayın. -c bayrağı, var olan dosyayı silip yeniden oluşturacağı için daha önce eklenen tüm kullanıcıları kaybedersiniz. Ek kullanıcılar için komutu -c olmadan çalıştırın:
sudo htpasswd /etc/apache2/.htpasswd
Örnek:
sudo htpasswd /etc/apache2/.htpasswd guestuser
Bu komut da sizden guestuser için bir parola girmenizi isteyecektir.
.htpasswd dosyasının içeriğini kontrol etmek için:
sudo cat /etc/apache2/.htpasswd
Çıktı, kullanıcı adlarını ve şifrelenmiş parolalarını gösterecektir (örneğin: adminuser:$apr1$e45...).
3.4 Dosya İzinlerini Ayarlama
.htpasswd dosyasının doğru izinlere sahip olması çok önemlidir. Apache’nin bu dosyayı okuyabilmesi ancak yetkisiz kullanıcıların erişememesi gerekir.
* Sahip ve Grup: Dosyanın sahibi root ve grubunun Apache’nin çalıştığı kullanıcı grubu (Ubuntu’da genellikle www-data) olması önerilir.
sudo chown root:www-data /etc/apache2/.htpasswd
* İzinler: Dosyaya sadece sahibinin okuma ve yazma, grubun ise sadece okuma izni olması yeterlidir. Diğerlerinin hiçbir izni olmamalıdır.
sudo chmod 640 /etc/apache2/.htpasswd
Bu izinler, root kullanıcısının dosyayı düzenlemesine, www-data grubunun (Apache’nin çalıştığı grup) dosyayı okumasına ve diğer kullanıcıların dosyaya erişimini engellemesine olanak tanır.
Adım 4: Apache Yapılandırma Dosyasını Düzenleme
Kimlik doğrulama kurallarını Apache’ye bildirmenin iki ana yolu vardır: .htaccess dosyası kullanarak veya sanal host yapılandırma dosyası içinde doğrudan belirterek. Her iki yöntemin de avantajları ve dezavantajları vardır.
Yöntem A: .htaccess Kullanarak Kimlik Doğrulama
Bu yöntem, daha esneklik sunar ve sunucu yapılandırma dosyasına erişiminiz yoksa kullanışlıdır. Ancak, her istekte .htaccess dosyasının okunması Apache için hafif bir performans yükü oluşturabilir.
1. Korunacak Dizini Oluşturma (Gerekliyse):
Örneğin, /var/www/html/private adlı bir dizini korumak istediğinizi varsayalım:
sudo mkdir /var/www/html/private
sudo chown www-data:www-data /var/www/html/private
Bu dizine test amaçlı bir dosya da ekleyebilirsiniz:
echo "Bu, özel bir alandır." | sudo tee /var/www/html/private/index.html
2. .htaccess Dosyasını Oluşturma:
Korunacak dizinin içine .htaccess adında bir dosya oluşturun:
sudo nano /var/www/html/private/.htaccess
3. Yapılandırma Yönergelerini Ekleme:
Aşağıdaki yönergeleri .htaccess dosyasına ekleyin:
AuthType Basic
AuthName "Kısıtlı Alan - Lütfen Giriş Yapın"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
* AuthType Basic: Apache’ye temel kimlik doğrulama şemasını kullanmasını söyler.
* AuthName "Kısıtlı Alan - Lütfen Giriş Yapın": Kullanıcıya gösterilecek kimlik doğrulama kutusundaki mesajı belirler. Bu, kullanıcıların neden kimlik bilgilerini girmeleri gerektiğini anlamalarına yardımcı olur.
* AuthUserFile /etc/apache2/.htpasswd: Kullanıcı adları ve parolaların saklandığı .htpasswd dosyasının tam yolunu belirtir.
* Require valid-user: .htpasswd dosyasında tanımlanan geçerli herhangi bir kullanıcının erişimine izin verir. Belirli bir kullanıcıya izin vermek isterseniz Require user kullanabilirsiniz.
4. Kaydet ve Kapat: Dosyayı kaydedin ve düzenleyiciden çıkın (Nano için Ctrl+X, Y, Enter).
Bu yöntem, AllowOverride All ayarını yaptığınız sürece hemen etkili olacaktır. Apache’yi yeniden başlatmanıza gerek yoktur, ancak önceki adımda zaten yeniden başlatmış olmalısınız.
Yöntem B: Sanal Host Yapılandırmasında Kimlik Doğrulama
Bu yöntem, genellikle .htaccess kullanımına göre daha güvenli ve performanslı kabul edilir, çünkü Apache her istekte ek bir dosya okumak zorunda kalmaz. Tüm yapılandırma sunucu tarafında merkezi olarak yönetilir.
1. Sanal Host Yapılandırma Dosyasını Düzenleme:
Varsayılan sanal host dosyasını (veya korumak istediğiniz alan için özel bir sanal host dosyasını) açın:
sudo nano /etc/apache2/sites-available/000-default.conf
2. Bloğu Ekleme veya Düzenleme:
Korunacak dizin için bir bloğu bulun veya oluşturun ve içine kimlik doğrulama yönergelerini ekleyin. Örneğin, /var/www/html/private dizinini korumak için:
# ... diğer yapılandırmalar ...
DocumentRoot /var/www/html
AuthType Basic
AuthName "Kısıtlı Alan - Lütfen Giriş Yapın"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
# ... diğer yapılandırmalar ...
Eğer tüm web kök dizinini korumak isterseniz, DocumentRoot‘un bağlı olduğu bloğunu düzenleyebilirsiniz:
Options Indexes FollowSymLinks
AllowOverride None # Eğer sadece bu yöntemle koruyorsanız, bunu None bırakabilirsiniz.
Require all granted
# Kimlik doğrulama yönergeleri
AuthType Basic
AuthName "Tüm Siteye Erişim Kısıtlı"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Bu yöntemi kullanırken, AllowOverride All ayarını None olarak bırakabilirsiniz, çünkü .htaccess dosyalarına ihtiyacınız kalmaz. Bu, performansı bir miktar artırabilir ve .htaccess dosyalarının yanlış yapılandırılarak güvenlik açıklarına yol açmasını engeller.
3. Kaydet ve Kapat: Dosyayı kaydedin ve düzenleyiciden çıkın.
Adım 5: Apache’yi Yeniden Başlatma
Sanal host yapılandırma dosyalarında yapılan değişikliklerin uygulanması için Apache servisini yeniden başlatmanız gerekir.
5.1 Yapılandırma Sözdizimini Kontrol Etme
Yeniden başlatmadan önce herhangi bir sözdizimi hatası olup olmadığını kontrol edin:
sudo apache2ctl configtest
Çıktı Syntax OK ise, devam edebilirsiniz. Herhangi bir hata varsa, hatayı düzeltmek için yapılandırma dosyasını tekrar kontrol edin.
5.2 Apache Servisini Yeniden Başlatma
sudo systemctl restart apache2
Bu komut, Apache’yi durdurur ve yeni yapılandırma ile tekrar başlatır.
Adım 6: Kimlik Doğrulamayı Test Etme
Artık kimlik doğrulama kurulumunuz tamamlandığına göre, her şeyin beklendiği gibi çalıştığını doğrulamak için test etmelisiniz.
1. Web Tarayıcınızı Açın: Bilgisayarınızdaki favori web tarayıcınızı açın.
2. Korumalı URL’ye Gidin: Korumalı dizinin URL’sine gidin. Örneğin, sunucunuzun IP adresi your_server_ip ise ve /var/www/html/private dizinini koruduysanız, http://your_server_ip/private adresine gidin.
3. Kimlik Doğrulama Kutusu: Tarayıcınızın bir kimlik doğrulama kutusu (genellikle küçük bir pencere) göstermesi gerekir. Bu kutunun başlığında veya içinde AuthName yönergesinde belirttiğiniz mesajı (Kısıtlı Alan - Lütfen Giriş Yapın) görmelisiniz.
4. Kimlik Bilgilerini Girin: .htpasswd dosyasına eklediğiniz kullanıcı adlarından birini (örneğin adminuser) ve ilgili parolayı girin.
5. Erişimi Doğrulayın: Eğer kimlik bilgileri doğruysa, korumalı dizinin içeriğini (örneğin index.html dosyanızdaki “Bu, özel bir alandır.” mesajını) görmelisiniz. Eğer yanlış kimlik bilgileri girerseniz, kutu tekrar görünür veya bir “401 Unauthorized” hatası alırsınız.
Bu adımları başarıyla tamamladıysanız, Apache üzerinde temel kimlik doğrulama kurulumunu başarıyla gerçekleştirmişsiniz demektir.
Ek Güvenlik İpuçları
Temel kimlik doğrulama, basit ve hızlı bir çözüm olsa da, güvenliği artırmak için ek önlemler almanız önemlidir. Özellikle Ubuntu 16.04 gibi artık güvenlik güncellemeleri almayan bir sistemde bu daha da kritiktir.
SSL/TLS (HTTPS) Kullanımı
Bu, temel kimlik doğrulamanın en kritik güvenlik gereksinimidir. Daha önce de belirtildiği gibi, Basic Auth kimlik bilgilerini Base64 ile kodlar, bu da şifreleme değildir ve kolayca çözülebilir. HTTPS (SSL/TLS) kullanmadan Basic Auth uygulandığında, kullanıcı adları ve parolalar ağ üzerinden düz metin olarak gönderilir gibi savunmasız kalır ve araya girme (man-in-the-middle) saldırılarına karşı savunmasızdır.
* SSL Modülünü Etkinleştirme:
sudo a2enmod ssl
* Varsayılan SSL Sitesini Etkinleştirme (Gerekliyse):
sudo a2ensite default-ssl.conf
* Apache’yi Yeniden Başlatma:
sudo systemctl restart apache2
* Sertifika Kurulumu: Ücretsiz ve otomatikleştirilmiş SSL sertifikaları için Let’s Encrypt ve Certbot kullanmayı düşünebilirsiniz. Ubuntu 16.04 için Certbot kurulumu:
sudo apt install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt update
sudo apt install python-certbot-apache
sudo certbot --apache -d your_domain.com -d www.your_domain.com
Bu komutlar Certbot’u kuracak ve Apache sanal hostunuz için bir Let’s Encrypt sertifikası alıp otomatik olarak yapılandıracaktır.
Güçlü Şifreler
.htpasswd dosyasındaki her kullanıcı için güçlü, karmaşık ve benzersiz parolalar kullanın. Büyük/küçük harfler, sayılar ve özel karakterler içeren uzun parolalar tercih edin.
.htpasswd Dosyasının Konumu
.htpasswd dosyasını her zaman web kök dizininin dışına (örneğin /etc/apache2/ veya /usr/local/apache/passwd/ gibi) yerleştirin. Bu, tarayıcıların bu dosyaya doğrudan erişmesini engeller ve potansiyel güvenlik açıklarını azaltır. Eğer yanlışlıkla web kök dizininin içine koymak zorunda kalırsanız, Apache’nin bu dosyaya doğrudan erişimi engellediğinden emin olun. Varsayılan olarak, Apache .ht* uzantılı dosyalara erişimi engeller, ancak bu kuralın mevcut olduğundan emin olun.
IP Adresi Kısıtlamaları
Eğer korumalı alana sadece belirli IP adreslerinden erişilmesi gerekiyorsa, kimlik doğrulama yönergelerine ek olarak IP adresi tabanlı kısıtlamalar ekleyebilirsiniz.
AuthType Basic
AuthName "Kısıtlı Alan - Lütfen Giriş Yapın"
AuthUserFile /etc/apache2/.htpasswd
# Sadece belirli bir IP adresinden gelen kullanıcıların erişimine izin ver
Require ip 192.168.1.100
# Veya hem IP hem de geçerli kullanıcı
Require ip 192.168.1.100
Require valid-user
# Veya sadece geçerli kullanıcıların erişimine izin ver ve belirli bir IP aralığından geliyorsa
Require ip 192.168.1.0/24
Require valid-user
# Yukarıdaki örnekler yerine, sadece geçerli kullanıcı için:
# Require valid-user
RequireAll ve RequireAny yönergeleri, birden fazla kuralı birleştirmek için kullanılır.
Kullanıcı Yönetimi
* Kullanıcı Ekleme: sudo htpasswd /etc/apache2/.htpasswd
* Kullanıcı Şifresini Değiştirme: Aynı komutu mevcut bir kullanıcı adı ile çalıştırın. sudo htpasswd /etc/apache2/.htpasswd
* Kullanıcı Silme: sudo htpasswd -D /etc/apache2/.htpasswd
Bu yönetim işlemlerini yaparken dikkatli olun ve her zaman .htpasswd dosyasının yedeğini almayı düşünün.
Sıkça Sorulan Sorular (FAQ)
Neden Basic Auth kullanmalıyım?
Basic Auth, belirli bir web dizinini veya dosyasını hızlı ve kolay bir şekilde parola ile korumanın en basit yoludur. Kurulumu kolaydır, ek yazılım gerektirmez (Apache’nin kendi modülleri hariç) ve çoğu senaryoda yeterli olabilir (özellikle HTTPS ile birlikte kullanıldığında). Geliştirme ortamları, dahili belgeler veya test siteleri gibi hassas olmayan veya geçici koruma gerektiren durumlar için idealdir.
Basic Auth ne kadar güvenli?
Basic Auth, kimlik bilgilerini Base64 ile kodlar, bu da bir şifreleme değildir ve kolayca çözülebilir. Bu nedenle, HTTPS (SSL/TLS) olmadan kullanıldığında kimlik bilgileri ağ üzerinden “düz metin” olarak iletilmiş gibi savunmasız kalır. HTTPS ile birlikte kullanıldığında güvenliği önemli ölçüde artar, çünkü tüm iletişim kanalı şifrelenir ve kimlik bilgileri ağ dinlemelerine karşı korunur. Ancak, HTTPS ile bile, kaba kuvvet saldırılarına veya zayıf parolalara karşı hassas olabilir.
.htpasswd dosyası nerede olmalı?
.htpasswd dosyası, web sunucusunun erişebileceği, ancak web tarayıcıları tarafından doğrudan erişilemeyen bir dizinde olmalıdır. Genellikle /etc/apache2/, /usr/local/apache/passwd/ veya Apache’nin yapılandırma dizinlerinden biri tercih edilir. Asla web kök dizininizin (örneğin /var/www/html) içine veya altına koymayın. Varsayılan Apache yapılandırması .ht ile başlayan dosyalara doğrudan erişimi engeller, ancak yine de risk almamak en iyisidir.
Birden fazla kullanıcı nasıl eklenir?
İlk kullanıcıyı eklerken kullandığınız sudo htpasswd -c /etc/apache2/.htpasswd komutundaki -c (create) bayrağını, sonraki kullanıcıları eklerken kullanmayın. -c bayrağı, dosyayı yeniden oluşturur ve mevcut tüm kullanıcıları siler. Yeni kullanıcıları eklemek için:
sudo htpasswd /etc/apache2/.htpasswd
Bu komut, mevcut dosyaya yeni bir kullanıcı ekler.
Kimlik doğrulama neden çalışmıyor?
Birkaç olası neden olabilir:
* AllowOverride All Ayarı Eksik: .htaccess kullanıyorsanız, Apache yapılandırma dosyanızda ilgili dizin için AllowOverride All ayarının yapıldığından emin olun.
* Apache Modülleri Etkin Değil: mod_auth_basic, mod_authn_file, mod_authz_core, mod_authz_user gibi gerekli Apache modüllerinin etkin olduğundan emin olun (sudo a2enmod ).
* Apache Yeniden Başlatılmadı: Yapılandırma değişikliklerinden sonra Apache servisini yeniden başlattığınızdan emin olun (sudo systemctl restart apache2).
* .htpasswd Dosya Yolu Yanlış: AuthUserFile yönergesinde belirtilen .htpasswd dosya yolunun doğru olduğundan emin olun.
* .htpasswd Dosya İzinleri: Apache’nin www-data kullanıcısı veya grubu aracılığıyla .htpasswd dosyasını okuma iznine sahip olduğundan emin olun (sudo chmod 640 /etc/apache2/.htpasswd, sudo chown root:www-data /etc/apache2/.htpasswd).
* Sözdizimi Hataları: Apache yapılandırma dosyalarınızda veya .htaccess dosyasında sözdizimi hataları olabilir. sudo apache2ctl configtest komutunu kullanarak kontrol edin.
* Yanlış Kullanıcı Adı/Parola: Kimlik doğrulama kutusuna doğru kullanıcı adı ve parolayı girdiğinizden emin olun.
* Önbellek: Tarayıcı önbelleğini temizlemeyi veya gizli modda denemeyi deneyin.
Sonuç
Bu kapsamlı rehberde, Ubuntu 16.04 üzerinde Apache web sunucusunda dizinler ve dosyalar için temel kimlik doğrulama (Basic Auth) kurulumunu adım adım öğrendiniz. Apache’nin nasıl kurulacağından, .htaccess dosyalarının nasıl etkinleştirileceğine, kullanıcı adları ve parolaların güvenli bir şekilde nasıl saklanacağına ve Apache yapılandırma dosyalarının nasıl düzenleneceğine kadar tüm süreç detaylı bir şekilde açıklandı.
Temel kimlik doğrulama, belirli web alanlarını yetkisiz erişime karşı korumak için basit ve etkili bir yöntem sunar. Ancak, güvenlik açısından en iyi uygulamaların başında her zaman SSL/TLS (HTTPS) ile birlikte kullanılması gelir. Bu, kimlik bilgilerinin ağ üzerinden şifrelenerek iletilmesini sağlar ve potansiyel güvenlik risklerini önemli ölçüde azaltır. Ayrıca, .htpasswd dosyasının güvenli bir konumda saklanması ve güçlü, benzersiz parolalar kullanılması da genel güvenliği artıracaktır.
Bu kurulumu doğru bir şekilde uygulayarak, web sitelerinizin veya uygulamalarınızın belirli bölümlerine erişimi güvenli bir şekilde kısıtlayabilirsiniz. Unutmayın ki, güvenlik sürekli bir süreçtir ve sistemlerinizi düzenli olarak güncellemek ve en iyi uygulamaları takip etmek her zaman önemlidir.