Bagaimana cara mengkonfigurasi otentikasi dasar di host virtual Apache httpd?

48

Saya mencoba mengkonfigurasi akses lincah menggunakan Apache http. Itu membutuhkan otentikasi. /etc/apache2/sites-enabled/mercurialPenampilan saya seperti ini:

NameVirtualHost *:8080

<VirtualHost *:8080>
    UseCanonicalName Off
    ServerAdmin  webmaster@localhost
    AddHandler cgi-script .cgi
    ScriptAliasMatch ^(.*) /usr/lib/cgi-bin/hgwebdir.cgi/$1
</VirtualHost>

Setiap tutorial yang saya baca di internet memberitahu saya untuk memasukkan baris ini:

AuthType Basic
AuthUserFile /usr/local/etc/httpd/users

Tetapi ketika saya melakukannya saya mendapatkan kesalahan berikut:

# /etc/init.d/apache2 reload
Syntax error on line 8 of /etc/apache2/sites-enabled/mercurial:
AuthType not allowed here

Distro saya adalah Ubuntu khusus yang disebut Turnkey Linux Redmine

Jader Dias
sumber

Jawaban:

73

Anda harus menempatkan ini di dalam arahan Lokasi:

<VirtualHost *:8080>

<Location /> #the / has to be there, otherwise Apache startup fails
            Deny from all
            #Allow from (You may set IP here / to access without password)
            AuthUserFile /usr/local/etc/httpd/users
            AuthName authorization
            AuthType Basic
            Satisfy Any # (or all, if IPs specified and require IP + pass)
                        # any means neither ip nor pass
            require valid-user
</Location>
...
</VirtualHost>
Lanselot
sumber
1
ini tidak bekerja untuk saya. <Location /opt/mcmap/shapefiles.php> AuthType Kerberos AuthName KerberosLogin KrbServiceName HTTP/intranet.spectrumasa.com KrbMethodNegotiate On KrbMethodK5Passwd On KrbAuthRealms DOMAIN.COM Krb5KeyTab /etc/httpd/conf/intranet.keytab require valid-user Options Indexes MultiViews FollowSymLinks AllowOverride All Order allow,deny Allow from all SetOutputFilter DEFLATE </Location>
shorif2000
1
Halaman doc apache menjelaskan semua ini, tetapi mengganggu tidak pernah memberi Anda contoh lengkap. Saya menyalin sebagian dari contoh mereka, tetapi melewatkan require valid-userbagian itu. Contoh lengkap bisa menjadi hal yang luar biasa. Terima kasih.
Buttle Butkus
1
@sharif harus <Lokasi />, yang berarti akses ke url root yourhost.com/ harus mewajibkan konfigurasi auth
agbb
1
Saya perlu <Location />dalam hal apapun untuk tidak mendapatkan kesalahan sintaks saat memuat file konfigurasi.
Perseids
3
Mengapa <Location /> diedit <Location>dengan pesan log internal "diperbaiki ... untuk menghindari banyak masalah", tetapi tidak mengatakan apa pun tentang alasan sebenarnya dalam jawaban itu sendiri? Tidak ada yang namanya <Location>direktif (yaitu satu tanpa lokasi) di Apache. Itu pasti menyebabkan masalah sekarang. ;) (Lihat misalnya di atas.)
Sz.
9

Saya menjalankan Apache2 di ubuntu 10.04 - masalah yang sama dan terima kasih atas solusinya. Saya menemukan bahwa saya harus meletakkan konfigurasi/etc/apache2/apache2.conf

Anda dapat membuat nama pengguna dan kata sandi menggunakan htpasswd. File baru:

$ htpasswd -c /srv/auth/.htpasswd squire

Untuk menambahkan file yang ada:

$ htpasswd -b /srv/auth/.htpasswd squire2 tickleme2
SLL
sumber
7

Anda dapat melindungi Lokasi atau Direktori. Untuk Direktori, tambahkan sesuatu seperti:

<Directory /some/dir/cgi-bin/>
    Options +ExecCGI
    AddHandler cgi-script .cgi
    AuthType Basic
    AuthName 'Private scripts'
    AuthUserFile '/some/other/dir/.htpasswd'
    Require valid-user
</Directory>

Anda juga dapat menambahkan Denydan Allowmengarahkan untuk kontrol yang lebih baik.

Dan Andreatta
sumber
4

Sepertinya Anda menentukan pengaturan autentikasi di dalam VirtualHost. Biasanya, pengaturan ini ditentukan di bawah Directoryarahan.

Anda juga bisa menggunakan .htaccesssfile, tetapi menentukan di conf Apache adalah default yang baik, karena memiliki eksposur yang lebih sedikit.

Dokumentasi Apache

Warner
sumber
3

Saya menjalankan Apache2 di ubuntu 10.10. Saya mengalami masalah dengan semua solusi di atas, tetapi ini bekerja dengan baik (dari apache docs):

<Direktori / var / www />
  Indeks Pilihan FollowSymLinks MultiViews
  AllowOverride All
  Pesanan mengizinkan, menolak
  izinkan dari semua
  AuthType Basic
  AuthName "Dibatasi"
  File AuthBasicProvider
  AuthUserFile / etc / users
  Membutuhkan pengunjung pengguna
</Directory>

Perbedaan terbesar dari jawaban di atas tampaknya adalah arahan AuthBasicProvider yang diatur ke "file" dan arahan Require termasuk bit "user" sebelum nama pengguna yang sebenarnya.

Semoga ini bisa membantu seseorang.

Alex Beynenson
sumber
3

Kami menjalankan versi apache yang dioptimalkan untuk memori, dan mengalami masalah ini.

Ini karena baris berikut tidak ada dalam konfigurasi apache:

LoadModule authz_user_module modules/mod_authz_user.so
DaveSB
sumber