ฉันมีข้อกำหนดในการเปลี่ยนแปลงการรับรองความถูกต้อง Apache 2.4 เพื่อให้ผู้ใช้ส่วนใหญ่สามารถเข้าถึงเว็บไซต์ได้จากทุกที่ แต่ผู้ใช้บางคน (ที่สามารถระบุได้หลายวิธี แต่กลุ่ม LDAP จะง่ายที่สุด) เท่านั้นที่ได้รับอนุญาตให้เข้าถึงได้จาก ซับเน็ตที่อยู่ IP บางอย่าง (การตรวจสอบสิทธิ์ผ่านโมดูล OIDC บวกกับกลุ่ม ldap)

(เวอร์ชันที่เรียบง่ายของสิ่งที่) การกำหนดค่า Apache ปัจจุบันคือ

<RequireAll>
    <RequireAny>
        Require valid-user
        Require claim aud:apache123.company.com
    </RequireAny>
    Require ldap-attribute companyMemberOf="ALL_USERS_OF_THIS_TOOL"
</RequireAll>

ฉันไม่แน่ใจว่าจะใช้ประโยคเชิงลบนี้กับกลุ่มใดกลุ่มหนึ่งได้ดีที่สุด

ฉันต้องใช้วิธีแก้ปัญหาที่กล่าวถึงที่นี่ด้วยRequire all grantedประโยคจำลองเพื่อหลีกเลี่ยงRequireAll directive contains only negative authorization directivesข้อผิดพลาด

ฉันคิดว่าการเพิ่มสิ่งนี้น่าจะใช้ได้ แต่ฉันขอขอบคุณสำหรับคำติชม เพราะด้วยเรื่องแบบนี้ ฉันสามารถจินตนาการได้ง่ายๆ ว่ามีใครบางคนกำลังเขียนว่า "คุณคิดว่าจะได้ผลแต่มันไม่ได้เพราะ..." หรือ "ใช่ วิธีนี้ได้ผล แต่จริงๆ แล้วไม่ใช่วิธีที่ถูกต้องเพราะ.. ."

    <RequireAny>
        <RequireAll>
            RequireNone ldap-attribute companyMemberOf="RESTRICTED_GROUP"
            # Just to keep Apache happy
            Require all granted
         </RequireAll>
        RequireIp 10.10.0.0/22
    </RequireAny>
answer

มาทำตามตรรกะบูลีนของกฎกันตามที่ควรจะเป็น:

<RequireAll>
### First, and foremost, users need to be Apache users.
    Require ldap-attribute companyMemberOf="ALL_APACHE_USERS"

### AND
    <RequireAny>
##### Users need to be either valid
        Require valid-user
##### Or have the appropiate claim.
        Require claim aud:apache123.company.com
    </RequireAny>

### AND
    <RequireAny>
##### Finally, users need to NOT have the companyMemberOf="RESTRICTED_GROUP" attribute
        Require not ldap-attribute companyMemberOf="RESTRICTED_GROUP"
##### Or be accessing from the 10.10.0.0/22 subnet.
        Require ip 10.10.0.0/22
    </RequireAny>
</RequireAll>

ลอจิกกำหนดว่าบล็อกสุดท้ายจะประเมินว่าเป็นจริง (และดังนั้นจึงให้สิทธิ์การเข้าถึง) เฉพาะในกรณีต่อไปนี้

  • ก) ผู้ใช้มาจากซับเน็ต
  • หรือข) ผู้ใช้ไม่ถูกจำกัด

ดังนั้น ฉันเชื่อว่ากฎเกณฑ์ควรสนองความต้องการของคุณ

อย่างไรก็ตาม โปรดทราบว่าช่องว่างระหว่าง "Require" และ "ip" และใช้ "not" แทน "None" คำสั่งใช้เพื่อปิดชุดคำสั่ง คล้ายกับ หรือ