Apache: การเข้าถึงถูกปฏิเสธเนื่องจากสิทธิ์การค้นหาขาดหายไป


75

ฉันรู้ว่าคำถามนี้ถูกถามบ่อยมาก แต่โซลูชันที่ฉันเห็นไม่ได้ผลสำหรับฉัน

ฉันเปิดใช้งานโฮสต์เสมือนเพียงรายการเดียวเท่านั้นและฉันพยายามเปิดใช้งานการเข้าถึงโฟลเดอร์ที่ไม่ได้อยู่ภายใต้รูทเอกสาร

ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

Alias /movies /home/username/Videos/Movies

<Directory /home/username/Videos/Movies/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

ฉันตั้ง/etc/apache2/envvarsดังต่อไปนี้

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=public

ฉันทำให้แน่ใจว่า / home / ชื่อผู้ใช้ / วิดีโอ / และโฟลเดอร์ย่อยเป็นเจ้าของโดยusername:publicกำหนดสิทธิ์ในการ 777 (หลัง 775 ไม่ได้ทำงาน) และทำให้แน่ใจว่าผู้ใช้อยู่ในกลุ่มwww-datapublic

ตอนนี้เมื่อฉันเรียกดูเพื่อhttp://localhost/moviesรับ

[Mon Apr 21 11:28:14.971844 2014] [core:error] [pid 1385:tid 140067725104896] (13)Permission denied: [client 127.0.0.1:46603] AH00035: access to /movies/ denied (filesystem path '/home/username/Videos') because search permissions are missing on a component of the path

แต่เมื่อฉันตั้ง/etc/apache2/envvarsให้รัน Apache ภายใต้username(ชื่อผู้ใช้ของฉันเอง) ทุกอย่างทำงานได้ดี ปัญหาเกี่ยวข้องกับการอนุญาต แต่ฉันไม่เห็นว่าในกรณีของฉันอย่างไร 777โดยเฉพาะอย่างยิ่งเมื่อผมกำหนดสิทธิ์ในการ ความคิดใด ๆ

รุ่น PS Ubuntu คือ 14.04, Apache คือ 2.4.7 และฉันไม่ได้แก้ไขไฟล์การกำหนดค่าอื่น ๆ



ฉันทำทุกสิ่งที่พวกเขาแนะนำตรงนั้นอย่างที่ฉันเขียน แต่ก็ไม่ได้ช่วยอะไรเลย
Yotam

โอกาสใดก็ตามที่คุณติดตั้ง/homeกับ ACL ที่เปิดใช้งาน (มีเครื่องหมาย "+" ที่ส่วนท้ายของบิตสิทธิ์ถ้าเป็นกรณี (ตรวจสอบด้วยls -l))
Polosson

ไม่ฉันไม่ได้ทำ ตอนนี้ฉันกำลังใช้ Apache ภายใต้ผู้ใช้ของฉันดังนั้นจึงใช้งานได้ แต่ฉันต้องการเรียกใช้ภายใต้ผู้ใช้รายอื่นด้วยเหตุผลด้านความปลอดภัย
Yotam

ฉันใช้ลีนุกซ์เป็นครั้งแรก ฉันดาวน์โหลด Ubuntu รุ่น 14.04 LTE ฉันกำลังเผชิญกับปัญหาเดียวกัน ใครช่วยได้บ้าง
Imdad

คำตอบ:


95

ทำchmod +xกับผู้ใช้ของคุณและรีสตาร์ท apache การอนุญาต755ควรใช้งานได้ ผมเคยมีปัญหากับ644


6
แน่นอนและหากต้องการตรวจสอบการอนุญาตไฟล์และไดเรกทอรีอีกครั้งหากมีคุณสามารถใช้namei -m /home/youruser/public_html/yourfile.extหรือลองใช้people.apache.org/~igalic/hacks/parsepath
จูเนียร์ M

2
เพื่อชี้แจงไดเรกทอรีใด ๆ ที่คุณต้องการให้ Apache อ่านจะต้องสามารถอ่านได้สำหรับผู้ใช้ Apache เป็นไปได้ว่าโฟลเดอร์บ้านของผู้ใช้ของคุณไม่ได้เป็นของผู้ใช้และกลุ่มดังนั้นคุณต้องตั้งค่าการอนุญาต 755 /home/usernameเพื่อเข้าถึงด้วย apace
ruuter

ฉันมีปัญหานี้ใน OSX Mac OS High Sierra และวิธีนี้ใช้ได้สำหรับฉัน ไม่ต้องรีสตาร์ท Apache
ไป

หลังจากชั่วโมงของการค้นหาปรากฎว่าสิทธิ์ควรถูกต้องสำหรับไดเรกทอรีหลักของ DocumentRoot ด้วย ขอบคุณมาก . BTW สิ่งนี้ไม่จำเป็นต้องรีสตาร์ท Apache
Accountant

27

หากในกรณีของ selinux เป็นปัญหาแทนที่จะปิดใช้งานหน้านี้และหน้านี้ให้คำสั่งเพื่อให้สิทธิ์การเข้าถึง:

chcon -R -t httpd_sys_content_t ~/public_html/

1
ฉันแน่ใจว่าเป็นปัญหาของฉัน CentOS ประณาม! ขอบคุณสำหรับคำสั่งทำงานได้อย่างสมบูรณ์
Balmipour

2
ขอบคุณเพิ่งต้องแทนที่~/public_html/ส่วนด้วยไดเรกทอรีรากของเนื้อหาที่ฉันพยายามให้บริการ
trpt4him

chcon -R -t httpd_sys_content_t /var/www/html/phpmyadmin/(ในสถานการณ์ของฉัน)
cssyphus

ค้นพบ selinux ไม่สามารถจัดการ homedirs ง่าย ๆ และมีเพียงหนึ่งในคุณสมบัติเหล่านั้นที่จำเป็นในขณะที่คนอื่นเป็นตัวเลือก ขอบคุณสำหรับการเตือนความจำเกี่ยวกับการแก้ไข - หลังจากช่วงเวลาทดสอบซ้ำที่บังคับใช้กับการเปิดตัวใหม่แต่ละครั้งและความผิดหวังฉันมักจะแฮ็คสิ่งนั้นในการเริ่มต้น ตอนนี้สำหรับ systemd
user2066657

17

คุณอาจเปิดใช้งาน selinux ลอง

getenforce

ถ้ามันแสดงว่า "การบังคับใช้" ให้ลอง

setenforce 0

และลองว่าวิธีนี้ช่วยแก้ไขปัญหาของคุณได้ไหม


4
อย่าเพียงปิดการใช้งาน SELinux เพื่อแก้ไข แก้ไขปัญหา SELinux โดยกำหนดพอร์ตใหม่หรือตั้งค่าบูลีน
siride

1
คำตอบนี้ช่วยในการระบุว่าปัญหาเกี่ยวข้องกับ SELinux แต่ไม่แนะนำให้ปิดการใช้งาน
Rajkumar R

15

ฉันพบปัญหาเดียวกันหลังจากพยายามหลายชั่วโมงฉันพบวิธีแก้ไขปัญหาอย่างแน่นอน:

https://wiki.apache.org/httpd/13PermissionDenied

โดยทั่วไปแล้วเซิร์ฟเวอร์ Apache ไม่เพียง แต่ต้องการสิทธิ์ในการอ่านของไฟล์ทั้งหมดที่ให้บริการ แต่ได้รับอนุญาตการดำเนินการของไดเรกทอรีทั้งหมดในเส้นทางของโฮสต์เสมือนของคุณ

ยูทิลิตี้ namei สามารถใช้เพื่อช่วยค้นหาปัญหาการอนุญาตด้วยการแสดงรายการการอนุญาตตามส่วนประกอบแต่ละส่วนของพา ธ :

namei --modes /usr/local/apache2/htdocs/foo/bar.html

ในกรณีของฉันไดเรกทอรีในพา ธ ของฉันมีสิทธิ์ 700 ทำให้เกิดปัญหา หลังจากเปลี่ยนเป็น 701 ปัญหาได้รับการแก้ไข


1
ลิงก์ที่นี่มีประโยชน์เพราะอธิบายปัญหา: หนึ่งในโหนดในเส้นทางไดเรกทอรีขาดสิทธิ์การค้นหา ใช้คำสั่ง "namei" เพื่อค้นหาสิ่งนี้จากนั้น "chmod" ถึง 755
user3751385

มันอธิบายถึงเหตุผลที่แท้จริงเช่นเดียวกับการแก้ปัญหา ขอบคุณ
Emdadul Sawon

1

ฉันประสบปัญหานี้เมื่อฉันพยายามเรียกใช้ apache ในคอนเทนเนอร์ docker บนโฮสต์ Ubuntu 16.04 ที่ใช้เคอร์เนล 4.4 แทนที่จะเป็น 4.10

เมื่อฉันรันคำสั่งนี้บนโฮสต์และปรับใช้อีกครั้งฉันก็ไม่เป็นไร:

sudo apt-get install --install-recommends linux-generic-hwe-16.04 

ฉันชนกับปัญหานี้ แต่ด้วยเอฟเฟกต์แปลก ๆ ที่ฉันสามารถทำได้chmodหรือchownข้างในคอนเทนเนอร์และมันก็หยุดข้อผิดพลาด Apache 403 ไประยะหนึ่งแล้วเพื่อกลับมาใช้ใหม่ในภายหลัง ไม่มีการรีสตาร์ทคอนเทนเนอร์แทรกแซงหรือการเปลี่ยนแปลงที่สำคัญอื่น ๆ ที่อาจเป็นสาเหตุของสิ่งนี้เท่าที่ฉันสามารถบอกได้ เนื่องจากฉันใช้งาน 16.04 ฉันจึงลองติดตั้งไบนารี่นี้และตอนนี้ยุค 403 ของฉันถูกระงับไว้ ฉันจะคอยจับตาดูมันและขอบคุณ!
halfer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.