Apache Temel kimlik doğrulaması neden çalışmıyor?


14

Apache'yi 2003 yılından, gıcırtılı, yepyeni bir 2.4.1 yapısına yükselttim. Göze batan bir şey dışında hepsi oldukça iyi görünüyor:

Httpd.conf dosyamda aşağıdakiler var:

<Directory />
    AllowOverride none
    Options FollowSymLinks
    AuthType      Basic
    AuthName      "Enter Password"
    AuthUserFile  /var/www/.htpasswd
    Require     valid-user
</Directory>

Bu, yalnızca belirtilen kimlik doğrulama dosyasındaki kullanıcıların, tıpkı Apache'nin eski sürümü altında olduğu gibi sunucuya erişmesine izin vermelidir. (Sağ?)

Ancak, çalışmıyor. İstekler, kimlik doğrulama yapılmadan verilir. Günlükleri LogLevel Hata Ayıklaması olarak değiştirdiğimde, erişim için şöyle diyor:

[Sat Mar 24 21:32:00.585139 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of Require all granted: granted
[Sat Mar 24 21:32:00.585446 2012] [authz_core:debug] [pid 10733:tid 32771] mod_authz_core.c(783): [client 192.168.1.181:57677] AH01626: authorization result of <RequireAny>: granted

Bunun ne anlama geldiğini gerçekten bilmiyorum - ve (bilgim dahilinde) dosyalarımın hiçbirinde "Tümü ver" veya "" ifadeleri bulunmuyor.

Bunun neden çalışmadığı ya da nerede hata ayıklanacağı hakkında herhangi bir fikir?

GÜNCELLEME:

SSL bağlantı noktasında proxy yapmaya izin veren bir sanal ana bilgisayar var. Ben koyduğunuzda aynı içeride girdileri

<proxy *> 

sanal ana bilgisayar klavyesinde çalışır . Görünüşe göre

 <Directory> 

fıkra. Sonra diğer dizin yan tümceleri (diğer dizinler için özel) altına koyarak çalıştı ve o da işe yaramadı.

AYRICA

Aşağıdaki soruları - kök "/" bloğunu bir "/ tmp" dizinine çoğaltmayı denedim. / Tmp dizini DOĞRU çalışır! Yani - bu sorun sadece kök dizine özgüdür ???


1
<Directory>Çalışmayan taleplere başka hangi blokları uyguluyorsunuz?
Shane Madden

Tüm sunucu için geçerli olan kök "/" dizini için bir tane koydum. Bir kullanıcı giriş dizinine (mod_userdir başına) bir ekleme denedim ve bununla aynı sonuçları vardı.
Brad

@ShaneMadden - sorunuz üzerine - kök "/" bloğunu bir "/ tmp" dizinine kopyalamayı denedim. / Tmp dizini DOĞRUDAN çalışır !! Yani - bu sorun sadece kök dizine özgüdür ???
Brad

<Directory>Apache yapılandırmanızın başka bir yerinde ayarladığınız bloktan daha öncelikli olan daha spesifik bir blok olduğundan şüpheleniyorum /.
Shane Madden

Ben sadece herşeyi aştım - hiçbir şey. Bu yapılandırma dosyaları Apache'nin yeni yüklenen varsayılan ayarlarında çok az değişiklik yapıldı.
Brad

Yanıtlar:


12

Yeni bir 2.4 kurulumunda Digest kimlik doğrulamasında da benzer bir sorun yaşadım. Apache'nin sitesindeki belgelere yakından bakıldığında, kimlik doğrulama yönergelerinin <Location>etiket yerine etiket içinde olması gerektiği anlaşılıyor <Directory>. AuthBasicProvider yönergesinin belgelerine bakın .


2
Bu doğru değil. mod_auth_basic ve mod_auth_digest <Directory> ve <Location> ile <File> <If> ve <Proxy> öğelerinde kullanılabilir. Apache 2.4 -> httpd.apache.org/docs/current/mod/… dokümanlarında "Bağlam" altında, yukarıdaki geçerli kapsayıcıların tümünü gösteren "Dizin" listelenir. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore

Doğru olmamalı, ama benim için çalıştı. Belki de Dizin bölümünde başka ayarlar (es. RewriteRule) olduğu için
paul.ago

6

Aynı sorunla karşılaştım ve bu yazıda hiçbir şey bana yardımcı olmadı, bu yüzden 2 sentimi ekleyeceğim. Benim durumumda (apache 2.4) sorun sıralı Gereksinim direktiflerinde idi.

Varsayılan olarak, birden fazla Require yönergesi varsa, bunlar<RequireAny>

Benim <Directory>vardı

Require ip 192.168.100.0/24 10.9.8.0/24
Require valid-user

IP doğruysa kimlik doğrulama isteği görünmedi. Ben geçmek zorunda kalmıştım gerektir gelen mantığı <RequireAny>ile <RequireAll>ve şimdi her şeyin doğru çalışıyor görünüyor.

   <Directory /var/www>

      DirectoryIndex index.html
      Options -Indexes

      AuthType Basic
      AuthName "hidden data"
      AuthBasicProvider    file
      AuthUserFile /opt/httpaswd
      <RequireAll>
        Require ip 192.168.100.0/24 10.9.8.0/24
        Require valid-user
      </RequireAll>
    </Directory>

5

jscott'un yanıtı yanlış. Apache 2.4 kesinlikle yok kimlik doğrulama direktiflerini izin <Directory>konteynerlerin. Ayrıca, <Location>kapsayıcılara farklı şekillerde erişilebildiğinden, kimlik doğrulamanızın dikkatli olmazsanız atlatılmasına izin verdiği için, kimlik doğrulamasını uygulamanın tek güvenli yolu budur . Referans amacıyla, bir üretim sisteminde kullandığım örnek bir kap:

<Directory "/srv/http/my_domain.org/html/secret-stuff"> Options Indexes Multiviews FollowSymLinks AuthType Digest AuthName "staff" AuthUserFile /etc/httpd/private/secret-stuff.htaccess Require valid-user </Directory>


1

AuthBasic için bir sağlayıcı eksik gibi görünüyor. Şunun gibi bir satır eklemeyi deneyin:

AuthBasicProvider    file

Bu çalışmayı yaptıktan sonra Satisfydirektife bakmak isteyebilirsiniz . Bu, İnternet erişimi için bir şifre gerektirirken, şifre olmadan yerel erişime izin vermek için kullanılabilir.

DÜZENLEME: Normalde Internet'te bulunmayan içeriğe parola tabanlı uzaktan erişim sağlamak için BasicAuth için bir içerme dosyası kullanıyorum. SatisfyDirektifi istemeyebilirsiniz . Bu benim /etc/apache2/basicauth.confdosyam:

# Basic authorization configuration include file 
# Enable basic auth access for remote users
AuthName             "Authentication Required"
AuthType             Basic
AuthBasicProvider    file
AuthUserFile         /etc/apache2/httpd.passwd
Require              valid-user
Satisfy              any

Ayrıca /etc/apache2/allow_local.confIP tabanlı kimlik doğrulaması için bir içerme dosyası var .

# Common local access block - Allow all local addresses
Order deny,allow
Deny  from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
Allow from 192.168.1.0/24

Bunları etkinleştirmek için bu içerikleri kullanıyorum.

Include /etc/apache2/allow_local.conf
Include /etc/apache2/basicauth.conf

Yetkilendirme belirtimine eklemeyi deneyebilirsiniz. Bu benim test yapılandırmamla çalışıyor.

Order deny,allow
Allow from all

Denedim - hala çalışmıyor: -O
Brad

Dosyalarınızı olduğu gibi eklerseniz, bir hata alıyorum: "AuthName burada izin verilmiyor" - bu yönergeleri hiçbir yerde ("Konum", "Dizin" veya "Proxy" yan tümcesi dışında belirleyemediğiniz için) Ben bir şey eksik mi? Eğer "Dizin" yan tümcesinin içine dahil edersem - tekrar - herhangi bir kimlik bilgisi olmadan içeri
Brad

"Dizin" yan tümcesine yalnızca "herkesten reddet" i koyarsam, erişim beklenir (beklediğiniz gibi). O zaman FIRST betiğinizi dizin yan tümcesine dahil ederseniz, koşulsuz olarak erişime izin verilir. Senaryonuzdaki "tatmin" i kaldırırsam, koşulsuz olarak reddedilirim.
Brad

0

Aynı sorunu yaşadım ve muhtemelen bir Apache hatası olacak; benim durumumda, bir güncellemeden sonra sorun ortaya çıktı ve sonraki bir güncellemeden sonra kayboldu, ancak bunu en altta eklemek zorunda kaldım:

Deny from all

Apache'nin böyle güvenlik açıkları açabileceği korkutucu :(


Deny from allbir apache 2.2 ayarıdır. httpd.apache.org/docs/2.4/upgrading.html#run-time
danger89

evet güvenlikle ilgili direktifleri geriye dönük olarak uyumsuz bir şekilde değiştirmek baaaaaad
greg

0

Deneyin:
<Directory "/"> ... </Directory>

Onun yerine:
<Directory /> ... </Directory>

Anlamı: kök sembolünü çift tırnak işareti içine alın. Aksi takdirde, etiketi bu eğik çizgiyle kapatıyor olabilirsiniz.


0

Ayrıca yanlışlıkla başka bir tane olup olmadığını kontrol edin

    Require all granted

aynı Dizin config içinde başka bir yerde. geçersiz kılıyor olabilir

    Require     valid-user
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.