Apache“ ไคลเอ็นต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์” แม้จะอนุญาตให้เข้าถึงไดเรกทอรี (การกำหนดค่า vhost)


38

ใน Apache บน Ubuntu ฉันตั้งค่า vhost แล้ว แต่ในเบราว์เซอร์ฉันได้รับข้อผิดพลาด "403 Access forbidden" error; บันทึกกล่าวว่า " ไคลเอนต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์: / home / remix / "

กำลังมองหาวิธีแก้ปัญหาออนไลน์ฉันพบโพสต์มากมายเกี่ยวกับการเข้าถึงไดเรกทอรี (อนุญาตจากทั้งหมด ฯลฯ ) แต่เท่าที่ฉันรู้ฉันได้ทำไปแล้ว ในhttpd-vhosts.confมีรหัสต่อไปนี้:

NameVirtualHost *:80

<VirtualHost *:80>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/opt/lampp/htdocs/"
    ServerName localhost
    ServerAlias localhost
    ErrorLog "logs/dummy-host.example.com-error_log"
    CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/home/remix/"
    ServerName testproject
    ServerAlias testproject
    <Directory "/home/remix/">
        Options Indexes FollowSymLinks Includes ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

ฉันยังเพิ่ม

127.0.0.1    testproject

ไปที่ไฟล์ / etc / hosts

นอกจากนี้โฟลเดอร์ / home / remix / ยังมีไฟล์ index.html และเปิดใช้งาน vhosts ใน httpd.conf

มีอะไรที่ฉันไม่เห็นหรือเปล่า?

แก้ไข:นี่คือรายการ Apache error_log:

[Sat Aug 18 09:15:32.666938 2012] [authz_core:error] [pid 6587] 
[client 127.0.0.1:38873] AH01630: client denied by server configuration: /home/remix/

บันทึกข้อผิดพลาดของ Apache คืออะไร
Shane Madden

อ่าฉันคิดว่าฉันลืมบางสิ่งบางอย่าง ... ฉันได้เพิ่มไว้ในโพสต์ดั้งเดิม
RemiX

คุณใช้ Apache รุ่นใด
เชนแมดเดน

Apache / 2.4.2 (Unix)
RemiX

คำตอบ:


65

เปลี่ยนการกำหนดค่าการอนุญาตของคุณ:

<Directory /home/remix/>
    #...
    Order allow,deny
    Allow from all
</Directory>

... กับ Apache 2.4 เวอร์ชั่นเดียวกัน

<Directory /home/remix/>
    #...
    Require all granted
</Directory>

ตรวจสอบเอกสารภาพรวมการอัปเกรดเพื่อรับทราบข้อมูลการเปลี่ยนแปลงอื่น ๆ ที่คุณอาจต้องทำและโปรดทราบว่าตัวอย่างการกำหนดค่าและความช่วยเหลือส่วนใหญ่ที่คุณพบใน Google (รวมถึงไซต์นี้) อ้างถึง 2.2


2
หากฉันมีเวลาฉันจะบันทึกข้อผิดพลาดเกี่ยวกับเรื่องนี้เพราะ httpd -t บอกว่าไม่มีปัญหาในการใช้ไวยากรณ์ที่เก่ากว่าและ httpd -S ทั้งสองไม่มี ในใจของฉันจุดรวมของตัวตรวจสอบการกำหนดค่าคือควรชี้ให้เห็นปัญหา! ... หากคุณมีไดเรกทอรีที่คุณอ้างถึงโดยไม่มีสิ่งนี้มันจะไม่ทำงานอย่างนั้น ... ยกนิ้วให้กับคำตอบ
Richard T

4

ตรวจสอบการอนุญาตในไดเรกทอรี ฉันจะเดิมพันว่ามันถูกตั้งค่าให้ปฏิเสธการเข้าถึงทุกคนยกเว้นตัวคุณเองตัวอย่างเช่น:

$ ls -ld /home/remix
drwx------ 92 remix remix 4096 Aug 17 22:59 /home/remix

หากคุณเห็นdrwx------อย่างชัดเจนว่าเป็นกรณีนี้ แก้ไขด้วยการเรียกใช้:

chmod a+x /home/remix

ฉันเห็น: drwxrwxr-x 2 remix remix 4096 16 สิงหาคม 09:36 / home / เรียบเรียง ฉันลองคำสั่งต่อไปโดยไม่มีผลกระทบ
RemiX

อ่าไม่สามารถชนะได้ทั้งหมด
Michael Hampton

3

ตรวจสอบให้แน่ใจว่าผู้ใช้ที่ใช้httpdบริการมีสิทธิ์เข้าถึงไดเรกทอรีนี้


ฉันไม่แน่ใจว่าผู้ใช้สำหรับ httpd คือใครหรือจะตรวจสอบอย่างไร แต่ทุกคนสามารถอ่านได้ (ผู้ใช้ / กลุ่ม / อื่น ๆ )
RemiX

ตรวจสอบ httpd.conf เพื่อหาUserพารามิเตอร์
cpt.Buggy

1
ตกลงว่า 'ไม่มีผู้ใช้' และ 'กลุ่ม nogroup' ฉันลองเปลี่ยนเป็น 'User remix' (ซึ่งเป็นเจ้าของโฟลเดอร์) แต่ก็ไม่ได้ช่วยอะไร
RemiX

1

"ไคลเอนต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์" หมายความว่าเซิร์ฟเวอร์ Linux เองห้ามการเข้าถึงไฟล์ไม่ใช่ Apache

หากให้การเข้าถึงผ่านการเปลี่ยนแปลงสิทธิ์ / เจ้าของ / สมาชิกของกลุ่มไม่ได้แก้ปัญหาที่สาเหตุเส้นทางที่อาจจะ SELinux ห้ามการเข้าถึงโฟลเดอร์ใด ๆ ที่ไม่มีบริบท SE ลินุกซ์ที่เหมาะสมตามที่ได้อธิบายไว้ใน'ย้าย Apache DocumentRoot ภายใต้ SELinux'

  • หากปิดการใช้งาน SELinux เป็นการชั่วคราวsetenforce 0ทำให้ไฟล์นั้นสามารถเข้าถึงได้
  • ในขณะที่เปิดใช้งาน SELinux setenforce 0อีกครั้งโดยการทำอีกครั้งไฟล์จะไม่สามารถเข้าถึงได้

จากนั้นตรวจสอบให้แน่ใจว่า SELinux ไม่อนุญาตให้เข้าถึงไฟล์ใด ๆ


0

อีกง่ายๆ (แต่หากิน gotcha) ที่อาจทำให้เกิดปัญหานี้สำหรับคนคือเมื่อไดเรกทอรีผู้ใช้ไม่ได้อยู่ใน / home / * แต่ที่อื่นเช่น / nethome / *

userdir.conf ที่ให้มามีสิ่งนี้: (แต่เมื่อ Userdir: ถูกปิดใช้งาน)

$ cat /etc/httpd/conf.d/userdir.conf 
<IfModule mod_userdir.c>
    UserDir enabled
    UserDir public_html
</IfModule>

<Directory "/home/*/public_html">
    AllowOverride FileInfo AuthConfig Limit Indexes
    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
    Require method GET POST OPTIONS
</Directory>

ข้อมูลจำเพาะของไดเรกทอรีถือว่า ~ user == / home / user เพียงแค่เปลี่ยนหรือเพิ่มข้อมูลจำเพาะของไดเรกทอรีสำหรับไดเรกทอรีบ้านของผู้ใช้จริง

เห็นได้ชัดว่าสวย แต่เอาฉันในขณะที่คิดออก !! :-P DUH!

เช่น ~ user == / nethome / ผู้ใช้

<Directory "/nethome/*/public_html">
    AllowOverride All
    Options MultiViews Indexes Includes FollowSymLinks
    Require all granted
</Directory>

ดูการอนุญาตที่เปิดกว้างมากขึ้นในไดเรกทอรีนั้นโดยทั่วไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.