Mengapa otentikasi Apache Basic tidak berfungsi?


14

Saya baru saja memutakhirkan Apache dari versi 2003, menjadi versi 2.4.1 yang bersih dan bersih. Semua tampak cukup baik kecuali untuk satu hal yang mencolok:

Dalam file httpd.conf saya, saya memiliki yang berikut ini:

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

Ini harus memungkinkan hanya pengguna dalam file auth yang ditentukan untuk mengakses server - sama seperti di bawah versi Apache yang lebih lama. (Baik?)

Namun, itu tidak berfungsi. Permintaan diberikan tanpa otentikasi yang disediakan. Ketika saya beralih logging ke LogLevel Debug, untuk akses, ia mengatakan:

[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

Saya benar-benar tidak tahu apa artinya ini - dan saya (sejauh pengetahuan saya) tidak memiliki pernyataan "Memerlukan semua yang diberikan" atau "" dalam semua file saya.

Adakah ide mengapa ini tidak berhasil, atau di mana untuk debug ??

MEMPERBARUI:

Saya memiliki virtualhost di port SSL yang memungkinkan proxy. Ketika saya memasukkan entri yang sama di dalam

<proxy *> 

klausa dalam konfigurasi virtualhost, itu berfungsi . Tampaknya tidak berfungsi di Internet

 <Directory> 

ayat. Saya kemudian mencoba meletakkan di bawah klausa Direktori lain (khusus untuk direktori lain) dan itu tidak berhasil.

JUGA

Dari pertanyaan Shane di bawah ini - saya mencoba menduplikasi blok root "/" ke direktori "/ tmp". Direktori / tmp berfungsi dengan BENAR !! Jadi - masalah ini khusus untuk direktori root saja ???


1
Apa yang lainnya <Directory>blok yang Anda telah menerapkan dengan permintaan yang tidak bekerja?
Shane Madden

Saya hanya meletakkan satu untuk direktori root "/", yang seharusnya berlaku untuk seluruh server. Saya telah mencoba menambahkan satu ke direktori home user (per mod_userdir) dan memiliki hasil yang sama dengan itu.
Brad

@ShaneMadden - pada pertanyaan Anda - Saya mencoba menduplikasi blok root "/" ke direktori "/ tmp". Direktori / tmp berfungsi dengan BENAR !! Jadi - masalah ini khusus untuk direktori root saja ???
Brad

Saya menduga bahwa ada <Directory>blok yang lebih spesifik di tempat lain di konfigurasi Apache Anda yang diutamakan daripada yang telah Anda tetapkan /.
Shane Madden

Saya hanya mengerti segalanya - tidak ada. File-file konfigurasi ini adalah modifikasi yang sangat minim untuk standar baru yang diinstal Apache.
Brad

Jawaban:


12

Saya memiliki masalah serupa dengan otentikasi Digest pada instalasi 2.4 baru. Mencermati dokumentasi di situs Apache, sepertinya arahan otentikasi harus ada dalam <Location>tag daripada <Directory>tag. Lihat dokumentasi untuk arahan AuthBasicProvider .


2
Ini tidak benar. mod_auth_basic dan mod_auth_digest dapat digunakan dalam <Directory> dan <Location> serta <File> <If> dan <Proxy>. Dalam dokumentasi untuk Apache 2.4 -> httpd.apache.org/docs/current/mod/... Di bawah "Konteks" tercantum "Direktori" yang menunjukkan semua wadah yang valid di atas. -> httpd.apache.org/docs/current/mod/directive-dict.html#Context
JadedCore

Seharusnya tidak benar, tetapi itu berhasil untuk saya. Mungkin karena di bagian Direktori ada pengaturan lain (es. RewriteRule)
paul.ago

6

Saya menghadapi masalah yang sama, dan tidak ada dari pos ini yang membantu saya, jadi saya akan menambahkan 2 sen saya. Dalam kasus saya (apache 2.4) masalahnya adalah dalam arahan Membutuhkan berurutan .

Secara default, jika Anda memiliki lebih dari satu arahan Membutuhkan , mereka dianggap sebagai<RequireAny>

Di saya, <Directory>saya sudah

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

Jadi permintaan auth tidak muncul jika IP benar. Saya harus beralih Membutuhkan logika dari <RequireAny>ke <RequireAll>dan tampaknya sekarang semuanya berfungsi dengan benar.

   <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

Jawaban jscott salah. Apache 2.4 tentu saja memungkinkan arahan otentikasi dalam <Directory>wadah. Selain itu, ini adalah satu-satunya cara aman untuk menerapkan otentikasi, karena <Location>wadah dapat diakses dengan berbagai cara, memungkinkan otentikasi Anda untuk dielakkan jika Anda tidak berhati-hati. Untuk referensi, berikut adalah contoh wadah yang saya gunakan pada sistem produksi:

<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

Anda tampaknya tidak memiliki penyedia untuk AuthBasic. Coba tambahkan baris seperti:

AuthBasicProvider    file

Setelah Anda berhasil, Anda mungkin ingin melihat Satisfyarahannya. Ini dapat digunakan untuk memungkinkan akses lokal tanpa kata sandi, sementara memerlukan kata sandi untuk akses Internet.

EDIT: Saya pengguna file sertakan untuk BasicAuth untuk mengaktifkan akses berbasis kata sandi dan remote ke konten yang biasanya tidak tersedia dari Internet. Anda mungkin tidak menginginkan Satisfyarahan. Ini /etc/apache2/basicauth.conffile saya :

# 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

Saya juga punya /etc/apache2/allow_local.conffile include untuk otentikasi berbasis IP.

# 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

Untuk mengaktifkannya saya menggunakan ini termasuk.

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

Anda mungkin ingin mencoba menambahkan ke spesifikasi otorisasi. Ini berfungsi dengan konfigurasi pengujian saya.

Order deny,allow
Allow from all

Sudah mencobanya - masih belum berhasil: -O
Brad

Jika saya hanya memasukkan file Anda apa adanya, saya mendapatkan kesalahan: "Nama Authn tidak diizinkan di sini" - karena Anda tidak dapat menentukan arahan ini di mana saja (seperti di luar klausa "Lokasi", "Direktori", atau "Proxy". Atau apakah saya melewatkan sesuatu? Jika saya memasukkannya ke dalam klausa "Direktori" - lagi - saya diizinkan masuk tanpa kredensial
Brad

Jika saya hanya meletakkan klausa "deny from all" di "direktori", saya tidak dapat mengakses (seperti yang Anda harapkan). Jika kemudian sertakan skrip PERTAMA Anda dalam klausa direktori, saya akses tanpa syarat. Jika saya menghapus "memuaskan" dalam skrip Anda, saya ditolak tanpa syarat.
Brad

0

Saya memiliki masalah yang sama dan kemungkinan merupakan bug Apache; dalam kasus saya, masalah muncul setelah pembaruan, dan menghilang setelah pembaruan berikutnya, tetapi saya harus menambahkan ini di bagian bawah:

Deny from all

Itu menakutkan bahwa Apache dapat membuka lubang keamanan seperti ini :(


Deny from alladalah pengaturan 2.2 apache. httpd.apache.org/docs/2.4/upgrading.html#run-time
hazard89

ya mengubah arahan terkait keamanan dengan cara yang tidak kompatibel ke belakang adalah baaaaaad
greg

0

Mencoba:
<Directory "/"> ... </Directory>

Dari pada:
<Directory /> ... </Directory>

Artinya: merangkum simbol root dengan tanda kutip ganda. Jika tidak, Anda mungkin menutup tag dengan garis miring itu.


0

Periksa juga apakah tidak ada yang tidak sengaja

    Require all granted

di tempat lain dalam konfigurasi Direktori yang sama. mungkin menimpa Anda

    Require     valid-user
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.