Apache“ ต้องได้รับทุกสิ่งที่ได้รับ” ทำอะไรจริงๆ?


95

ฉันเพิ่งอัปเดตเซิร์ฟเวอร์ Apache เป็น Apache / 2.4.6 ซึ่งทำงานภายใต้ Ubuntu 13.04 ฉันเคยมีไฟล์ vhost ที่มีต่อไปนี้:

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

แต่เมื่อฉันวิ่งที่ฉันได้รับ "ต้องห้ามคุณไม่ได้รับอนุญาตให้เข้าถึง /"

หลังจากทำ googling เล็กน้อยฉันพบว่าการทำให้ไซต์ของฉันทำงานอีกครั้งฉันต้องเพิ่มบรรทัดต่อไปนี้ "ต้องได้รับอนุญาตทั้งหมด" เพื่อให้ vhost ของฉันมีลักษณะดังนี้:

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

ฉันต้องการทราบว่านี่คือ "ปลอดภัย" และไม่นำปัญหาด้านความปลอดภัยใด ๆ ฉันอ่านในหน้าของ Apache ว่า "เลียนแบบการทำงานของคำสั่ง 'อนุญาตจากทุกคน' และ 'ปฏิเสธจากทุกคน' ก่อนหน้านี้ผู้ให้บริการนี้สามารถใช้หนึ่งในสองอาร์กิวเมนต์ที่ 'อนุญาต' หรือ 'ถูกปฏิเสธ' ต่อไปนี้ ตัวอย่างจะให้หรือปฏิเสธการเข้าถึงคำขอทั้งหมด "

แต่ก็ไม่ได้บอกว่านี่เป็นปัญหาด้านความปลอดภัยหรือทำไมเราต้องทำเมื่อก่อนหน้านี้คุณไม่จำเป็นต้องทำ


1
เอกสารการอัปเกรดอธิบายการเปลี่ยนแปลง 'การควบคุมการเข้าถึง' โดยละเอียด httpd.apache.org/docs/2.4/upgrading.html
John Magnolia

คำตอบ:


87

การกำหนดค่าการควบคุมการเข้าถึงเปลี่ยนไปใน 2.4 และการกำหนดค่าแบบเก่าไม่สามารถใช้งานร่วมกันได้โดยไม่มีการเปลี่ยนแปลง ดูที่นี่

หากการกำหนดค่าเก่าของคุณคือAllow from all(ไม่มีที่อยู่ IP ที่ถูกบล็อกไม่ให้เข้าถึงบริการ) Require all grantedนั่นคือการทำงานที่เท่าเทียมกันใหม่


4
ไม่ต้องพูดถึงวิธีการเดิมนั้นสร้างความสับสนอย่างมากและเกินกำหนดเวลานานที่จะถูกแทนที่ด้วยสิ่งที่สมเหตุสมผลกว่า
Michael Hampton

4
สำหรับการเปลี่ยนแปลงที่สำคัญเช่นนี้ฉันคาดหวังว่าจะมีการสนับสนุนบางอย่างในการโยกย้ายไฟล์กำหนดค่าโดยอัตโนมัติหรืออย่างน้อยก็แสดงจุดทั้งหมดที่จำเป็นต้องมีการเปลี่ยนแปลง
Wolfgang Fahl

1
Require all deniedจะดีจะเห็นการสาธิตการทำงานของ
Kraang Prime

5
Allow from allผมไม่คิดว่ามันนี้จะเทียบเท่ากับ คุณต้อง "ผสาน" Require all grantedกับRequireกฎอื่น ๆ ที่มีอยู่ ในกรณีของฉันที่มีอยู่Require valid-userถูกเพิกเฉยเมื่อแปลงการตั้งค่าเหมือนแนะนำในทุกที่ นี่คือสิ่งที่เลวร้ายที่สุดที่อาจเกิดขึ้น ...
rudimeier

1
มันจะดีถ้ามีคำตอบที่ถูกต้องสำหรับคำถามของ OP "อนุญาตจากเทียบเท่าทั้งหมด" ไม่พอใจมาก
Sharcoux

15

ฉันรู้ว่ามันเป็นโพสต์เก่า แต่ฉันคิดว่าฉันสามารถช่วยได้มากขึ้นด้วยตัวอย่างการใช้งานที่ฉันมักจะใช้!

ใน apache 2.2 จะเป็นเช่น:

    <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>

ใน apache 2.4 จะเป็นเช่น:

   <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>

โปรดใช้ความระมัดระวัง เมื่อใช้การรับรองความถูกต้อง htacessไวยากรณ์ใหม่นี้สามารถทำสิ่งที่ไม่ดีและไม่คาดคิดหากเป็นกรณีของคุณโปรดอ่าน: https://unix.stackexchange.com/questions/413309/apache-2-4-wants-me- การตัดสินใจต้องใช้ที่ถูกต้อง IP หรือต้องการผู้ใช้ที่ถูกต้องและคุณควรจะดี!


สำหรับฉันแล้วสถานะของการrequire all grantedรับรองความถูกต้อง HTTP ที่ป้องกันไว้ใช้งานได้ดีขอบคุณสำหรับข้อมูล
authenticictech

@authentictech ไม่เพียง แต่ต้องได้รับอนุญาตเท่านั้นที่สามารถทำลายมันได้ การรับรองความถูกต้องที่คาดว่าสามารถใช้งานไม่ได้กับไวยากรณ์ใหม่นี้หากคุณไม่ได้ใช้ RequireAll หรือ RequireAny อย่างถูกต้อง โปรดอ่าน: unix.stackexchange.com/questions/413309/… . ขอบคุณสำหรับข้อเสนอแนะ
Luciano Andress Martini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.