Apa yang benar-benar dilakukan oleh "Perlu semua yang diberikan" oleh Apache?

95

Saya baru saja memperbarui server Apache saya ke Apache / 2.4.6 yang berjalan di Ubuntu 13.04. Saya dulu memiliki file vhost yang memiliki yang berikut:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
</Directory>

Tetapi ketika saya berlari itu saya mendapat "Dilarang. Anda tidak memiliki izin untuk mengakses /"

Setelah melakukan sedikit googling saya menemukan bahwa untuk membuat situs saya berfungsi kembali saya perlu menambahkan baris berikut "Wajib semua diberikan" sehingga vhost saya terlihat seperti ini:

<Directory "/home/john/development/foobar/web">
    AllowOverride All 
    Require all granted
</Directory>

Saya ingin tahu apakah ini "aman" dan tidak membawa masalah keamanan. Saya membaca di halaman Apache bahwa ini "meniru fungsionalitas yang sebelumnya disediakan oleh arahan 'Bolehkan dari semua' dan 'Tolak dari semua'. Penyedia ini dapat mengambil satu dari dua argumen yang 'diberikan' atau 'ditolak'. Berikut ini adalah contoh akan memberikan atau menolak akses ke semua permintaan. "

Tapi itu tidak mengatakan apakah ini semacam masalah keamanan atau mengapa kita sekarang harus melakukannya ketika di masa lalu Anda tidak harus melakukannya.

John Crawford
sumber
1
Dokumen pemutakhiran menjelaskan perubahan 'Akses kontrol' secara rinci. httpd.apache.org/docs/2.4/upgrading.html
John Magnolia

Jawaban:

87

Konfigurasi kontrol akses berubah pada 2.4, dan konfigurasi lama tidak kompatibel tanpa beberapa perubahan. Lihat di sini .

Jika konfigurasi lama Anda Allow from all(tidak ada alamat IP yang diblokir untuk mengakses layanan), maka Require all grantedadalah equivilent fungsional baru.

Shane Madden
sumber
4
Belum lagi, metode lama sangat membingungkan dan sudah lama ditunggu untuk diganti dengan sesuatu yang lebih masuk akal.
Michael Hampton
4
Untuk perubahan besar seperti itu, saya mengharapkan semacam dukungan untuk memigrasikan file konfigurasi secara otomatis atau setidaknya menunjukkan semua titik di mana perubahan diperlukan.
Wolfgang Fahl
1
Akan menyenangkan untuk melihat demonstrasi kerja Require all denied.
Kraang Prime
5
Saya tidak berpikir ini setara dengan Allow from all. Anda harus "bergabung" Require all granteddengan Requireaturan lain yang ada . Dalam kasus saya, yang sudah ada Require valid-userdiabaikan ketika mengubah konfigurasi secara membabi buta seperti yang disarankan di mana-mana. Ini adalah hal terburuk yang bisa terjadi ...
rudimeier
1
Akan menyenangkan untuk memiliki jawaban yang tepat untuk pertanyaan OP. "Izinkan dari semua yang sepadan" tidak terlalu memuaskan.
Sharcoux
15

Saya tahu ini adalah posting lama tapi saya pikir saya dapat membantu lebih banyak dengan contoh fungsional yang selalu saya gunakan!

Di apache 2.2 akan seperti:

    <Location />
       Order deny, allow
       allow from all
    </Location>
    <Location /adm>
        Order deny, allow
        deny from all
        allow from myniceip
    </Location>
    <Location /disabled>
        Order deny, allow
        deny from all
    </Location>

Di apache 2.4 akan seperti:

   <Location />
       require all granted
    </Location>
   #Note that you dont need to use require all denied
   #to require only a group of ips.. 
    <Location /adm>
        require ip myniceip
    </Location>
    <Location /disabled>
        Require all denied
    </Location>

Hati-hati saat menggunakan otentikasi htacess , sintaks baru ini dapat melakukan beberapa hal buruk dan tidak terduga , jika itu kasus Anda, silakan baca: https://unix.stackexchange.com/questions/413309/apache-2-4-wants-me- untuk-memutuskan-memerlukan-valid-ip-atau-membutuhkan-valid-pengguna dan Anda harus baik-baik saja!

Luciano Andress Martini
sumber
Bagi saya, keberadaan require all grantedotentikasi HTTP yang dicegah berfungsi, terima kasih atas informasinya.
authentictech
@authentictech Tidak hanya mengharuskan semua yang diberikan dapat merusaknya. Otentikasi yang diharapkan dapat benar-benar rusak dengan sintaks baru ini jika Anda tidak menggunakan RequireAll atau RequireAny dengan benar. Silakan baca: unix.stackexchange.com/questions/413309/… . Terima kasih atas masukannya.
Luciano Andress Martini