Score:0

Apache 2.4 ไม่มี auth config ทำงานใน VirtualHost

ธง cv

ฉันกำลังตั้งค่าเซิร์ฟเวอร์ใหม่ — ฉันเพิ่งสร้างอินสแตนซ์ AWS EC2 ติดตั้ง apache และ mod_ssl ใหม่ และมีการกำหนดค่าที่ใกล้เคียงกับการกำหนดค่าที่ง่ายที่สุด Apache ดูเหมือนจะเพิกเฉยต่อการกำหนดค่าการรับรองความถูกต้องใด ๆ (รวมถึง ระดับล็อก) ใน โฮสต์เสมือน บล็อก

นี่คือ Apache 2.4.51 บน amzn2.x86_64 Linux

ฉันเริ่มต้นด้วยการเปลี่ยนเส้นทาง HTTP เป็น HTTPS จากนั้นทำตามคำแนะนำพื้นฐานสำหรับ Apache 2.4 การรับรองความถูกต้องและการอนุญาต. นั่นทำให้ฉันไปที่ virtual.conf ต่อไปนี้:

<VirtualHost _default_:80>
        DocumentRoot /var/www/html
        RewriteEngine On
        RewriteCond %{HTTPS} !=on
        RewriteCond %{HTTP_HOST} !^(localhost|127.0.0.1)
        RewriteRule ^/(.*) https://%{HTTP_HOST}/$1 [R,L]
</VirtualHost>

<VirtualHost *:443>
        LogLevel debug
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/ca.crt
        SSLCertificateKeyFile /etc/pki/tls/private/ca.key
        <Directory "/var/www/html">
                AllowOverride All
                Options Indexes FollowSymLinks
                AuthType Basic
                AuthName "Restricted Files"
                # (Following line optional)
                AuthBasicProvider file
                AuthUserFile "/mount/local/apache/passwd/passwords"
                Require user someuser
        </Directory>
        DocumentRoot /var/www/html
</VirtualHost>

โดยทั่วไปแล้วข้างต้นดูเหมือนว่าจะใช้งานได้ ยกเว้นสิ่งที่รับรองความถูกต้อง ถ้าฉันไปที่ที่อยู่ IP ของฉันในเว็บเบราว์เซอร์ มันจะเปลี่ยนเส้นทางไปที่ 443 อย่างถูกต้อง มันให้บริการใบรับรองจากเส้นทางที่ระบุ (ไม่เป็นมาตรฐาน) และฉันเห็นว่ามันกำลังเข้าสู่ระบบ แก้ไขข้อบกพร่อง กิจกรรมระดับ อย่างน้อยสำหรับ mod_ssl อย่างไรก็ตาม มันเพียงแค่ให้บริการ index.html จาก /var/www/html/ (หมายเหตุ: /var/www/html เป็นสัญลักษณ์)

ฉันพบ คำถามอื่นนี้ซึ่งทำให้ฉันต้องมองหาใดๆ ต้องได้รับอนุญาตทั้งหมด คำสั่ง

# pwd
/etc/httpd/conf.d
# grep ต้องการ * 2>/dev/null
autoindex.conf:# โมดูลที่จำเป็น: mod_authz_core, mod_authz_host,
autoindex.conf: ต้องได้รับอนุญาตทั้งหมด
ssl.conf:# ด้วย SSLRequire คุณสามารถทำการควบคุมการเข้าถึงตามไดเร็กทอรี
ssl.conf:#SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)/ \
ssl.conf:# o StrictRequire:
ssl.conf:# สิ่งนี้จะปฏิเสธการเข้าถึงเมื่อใช้ "SSLRequireSSL" หรือ "SSLRequire"
ssl.conf:#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
userdir.conf: ต้องการวิธีการ รับตัวเลือกการโพสต์
virtual.conf: ต้องการผู้ใช้ someuser
welcome.conf: จำเป็นต้องได้รับอนุญาตทั้งหมด

หนึ่งในนั้น autoindex.conf อยู่ภายในก <Directory "/usr/share/httpd/icons"> บล็อกและหนึ่งใน ยินดีต้อนรับ.conf อยู่ใน <Directory /usr/share/httpd/noindex>. ฉัน ทำ ค้นหาหนึ่งใน /etc/httpd/conf/http.conf:

# ผ่อนคลายเพิ่มเติมในการเข้าถึงรูทเอกสารเริ่มต้น:
<ไดเรกทอรี "/var/www/html">
    ดัชนีตัวเลือก FollowSymLinks
    AllowOverride ไม่มี
    ต้องได้รับอนุญาตทั้งหมด
</ไดเร็กทอรี>

หมายเหตุ ในการติดตั้งนี้ (ผ่าน ยำ บน Amazon Linux 2) ไฟล์กำหนดค่าหลักคือ /etc/httpd/conf/http.conf. บรรทัดสุดท้ายของไฟล์นั้นคือ รวมตัวเลือก conf.d/*.conf. การกำหนดค่าหลักของฉันที่ฉันโพสต์ไว้ข้างต้นอยู่ใน /etc/httpd/conf.d/virtual.conf.

ฉันพยายามแสดงความคิดเห็นว่า ต้องได้รับอนุญาตทั้งหมด และรีสตาร์ทเซิร์ฟเวอร์ แต่ไม่มีการเปลี่ยนแปลง นั่นคือตอนที่ฉันสังเกตเห็นว่าดูเหมือนว่าจะไม่ทำอะไรเลย คำถามที่กล่าวถึงก่อนหน้านี้แสดงบางรายการในไฟล์บันทึกของเขา อย่างไรก็ตามแม้ แม้ว่าฉันจะมี ดีบัก LogLevelฉันไม่เห็นอะไรที่เกี่ยวข้องกับ authz_core ในไฟล์บันทึกเหมือนที่เขาเป็น ¯_(ã)_/¯

ณ จุดนี้ ฉันลองแก้ไขหลายอย่างภายใน <VirtualHost> บล็อก:

  • ฉันพยายามตัดเส้น AuthType พื้นฐาน ผ่าน ต้องการผู้ใช้ someuser ใน <RequireAll> บล็อก
  • ฉันพยายามเพิ่ม ต้องการปฏิเสธทั้งหมด ก่อนที่ ต้องการผู้ใช้
  • ฉันลองใช้ a .htaccess ไฟล์ที่มีการกำหนดค่าเดียวกัน
  • ฉันลองเปลี่ยน AllowOverride ทั้งหมด ถึง AllowOverride All AuthConfig และใช้ก .htaccess ไฟล์
  • ฉันพยายามขยายการบันทึกไปที่ ดีบัก LogLevel auth_basic:trace1 authz_core:trace1

ในทุกกรณี ไม่มีการเปลี่ยนแปลง และการกำหนดค่าแยกวิเคราะห์ได้ดี เซิร์ฟเวอร์เพียงแค่ให้บริการเพจเท่านั้น และไม่มีอะไรในไฟล์บันทึกใดๆ

อย่างไรก็ตามถ้าฉันทำการเปลี่ยนแปลงในหลัก conf/httpd.conf ไฟล์ภายในของ <Directory "/var/www/html"> บล็อก สิ่งต่าง ๆ ทำงานตามที่คาดไว้:

  • การเปลี่ยนแปลง ต้องได้รับอนุญาตทั้งหมด ถึง ต้องการปฏิเสธทั้งหมด (แทนที่จะแสดงความคิดเห็น) ปิดกั้นการเข้าถึงทั้งหมด
  • การเปลี่ยนแปลง AllowOverride ไม่มี ถึง AllowOverride AuthConfig ทำให้ฉัน .htaccess ไฟล์ที่มีการกำหนดค่าการรับรองความถูกต้องเช่นเดียวกับใน <VirtualHost> บล็อกทำงานตามที่คาดไว้ - มันขอชื่อผู้ใช้และรหัสผ่าน
  • เปิดการบันทึกด้วย ดีบัก LogLevel auth_basic:trace1 authz_core:trace1 ทำให้ฉันมีการบันทึกจำนวนมาก

ดังนั้นเพื่อสรุปแม้ว่าของฉัน <VirtualHost> config ใช้งานได้ทั่วไป (เปลี่ยนเส้นทาง, SSL, ดีบักสำหรับทุกสิ่งยกเว้นการรับรองความถูกต้อง) ดูเหมือนว่าจะเพิกเฉยต่อสิ่งใด ๆ รับรองความถูกต้อง การกำหนดค่ารวมถึง ระดับล็อก.

ในระยะสั้น ฉันได้แก้ปัญหาด้วยการเลิกทำการเปลี่ยนแปลงทั้งหมดที่ฉันทำในไฟล์กำหนดค่าหลัก ดังนั้นสิ่งต่างๆ จะไม่ถูกแทนที่ระหว่างการอัปเดตซอฟต์แวร์ และใส่ไว้ใน conf/00-override.conf:

<Directory "/var/www/html">
    AllowOverride All
    AuthType Basic
    AuthName "Restricted Files"
    # (Following line optional)
    AuthBasicProvider file
    AuthUserFile "/mount/local/apache/passwd/passwords"
    Require user someuser
</Directory>

อย่างไรก็ตาม จะเป็นการดีหากสามารถกำหนดค่าการให้สิทธิ์ในระดับโฮสต์เสมือนได้ ความคิดใด ๆ ?

Gerard H. Pille avatar
in flag
โหลดโมดูลที่จำเป็นแล้วหรือยัง คุณจะได้อะไรในบันทึกข้อผิดพลาดเมื่อคุณรีสตาร์ท Apache
philolegein avatar
cv flag
ฉันไม่แน่ใจว่าสิ่งใด "จำเป็น" แต่ `apachectl -t -D DUMP_MODULES` _looks_ ถูกต้องสำหรับฉัน ในบันทึกข้อผิดพลาดเมื่อเริ่มการทำงานใหม่ มีเพียงข้อความเกี่ยวกับการตรวจสอบการเต้นของหัวใจและ mpm ที่ไม่ได้รับการสนับสนุน ฉันสามารถใส่บันทึกการรีสตาร์ทแบบเต็มในคำถามได้ หากคุณคิดว่ามันจะช่วยได้
Gerard H. Pille avatar
in flag
ไม่มีไฟล์ .conf ใน /etc/httpd ที่ระบุกฎการเข้าถึงสำหรับ /var/www และ "allowoverride none" ?
philolegein avatar
cv flag
/etc/httpd/httpd.conf มี `Require all granted` สำหรับ /var/www ก่อนรายการ /var/www/html แต่ฉันถือว่าอันหลังมีความสำคัญมากกว่า ในไฟล์เดียวกันนั้น /, /var/www และ /var/www/html ทั้งหมดไม่มีการอนุญาตการแทนที่
Gerard H. Pille avatar
in flag
คุณถูกต้อง "allowoverride" นับเป็น .htaccess ไม่มี .htaccess ใน /var/www/html? คุณมีสองการกำหนดค่าสำหรับ /var/www/html ฉันสงสัยว่าพวกเขาแยกวิเคราะห์ตามลำดับใด
Gerard H. Pille avatar
in flag
นอกจากนี้ อย่าลืมล้างแคชของเบราว์เซอร์ของคุณด้วย
philolegein avatar
cv flag
สิ่งเดียวใน /var/www/html คือ index.html ที่ระบุว่า Hello World ตาม https://httpd.apache.org/docs/2.4/sections.html#merging "ส่วนภายใน ส่วนจะถูกใช้ต่อจากส่วนที่สอดคล้องกันภายนอกข้อกำหนดโฮสต์เสมือน สิ่งนี้ทำให้โฮสต์เสมือนสามารถแทนที่การกำหนดค่าเซิร์ฟเวอร์หลักได้" ดังนั้นน่าจะใช้ได้ฉันไม่สามารถจินตนาการได้ว่าการแคชจะมีความสำคัญอย่างไร เนื่องจากฉันเห็นคำขอบนเซิร์ฟเวอร์ แต่ฉันก็ล้างมันออกไปแล้ว แต่ก็ยังมีพฤติกรรมเหมือนเดิม
philolegein avatar
cv flag
นอกจากนี้ ฉันได้ลองเพิ่ม 'ต้องการทั้งหมดที่ถูกปฏิเสธ' ในการกำหนดค่า vhost และยังคงทำงานเหมือนเดิม
Gerard H. Pille avatar
in flag
เพิ่มบันทึกแยกต่างหากสำหรับโฮสต์นั้น เพื่อดูว่ามีการใช้งานอยู่หรือไม่
philolegein avatar
cv flag
@ GerardH.Pille - การแก้ไขคำถามอย่างมาก ตอนนี้ดูเหมือนชัดเจนว่าเป็นปัญหาภายในบล็อกโฮสต์เสมือน
Gerard H. Pille avatar
in flag
เคยเป็นกรณี (ฉันทำงานกับ Apache 1.4 อยู่แล้ว) ที่ต้องเปิดใช้งานการใช้ VirtualHosts แต่ฉันคิดว่าไม่เป็นเช่นนั้นอีกต่อไป คุณลองแยกบันทึกสำหรับโฮสต์นั้นหรือไม่ VirtualHost configs อื่น ๆ นอกเหนือจากที่คุณแสดงหรือไม่

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา