Apache ไม่สามารถเข้าถึงโฟลเดอร์ในไดเรกทอรีบ้านของฉัน


29

ฉันได้เปลี่ยนการกำหนดค่าของ Apache ให้ชี้ไปที่โฟลเดอร์ในไดเรกทอรีบ้านของฉัน:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost

    DocumentRoot /home/dbugger/html

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    <Directory /home/dbugger/html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
    <Directory "/usr/lib/cgi-bin">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

ฉันได้รับ/home/dbugger/htmlอนุญาต 777 แล้ว แต่ฉันยังได้รับข้อความแสดงข้อผิดพลาดเดิมที่http://localhost: "403 Forbidden"

อะไรที่ฉันขาดหายไป


เกี่ยวกับการ/home/dbuggerอนุญาต
Eric Carvalho

คุณหมายถึงฉันควรทำ 777 โฟลเดอร์ทั้งหมดของฉัน? ดูเหมือนว่าจะหักโหม แม้แต่การสร้าง 777 html ก็ไม่ได้เป็นทางออกที่ปลอดภัย ฉันแค่ทำเพื่อพยายามระบุรากของปัญหา
Enrique Moreno Tent

1
apache ทำงานเป็นผู้ใช้ www-data หากผู้ใช้นั้นไม่มีสิทธิ์ดำเนินการที่บ้านของคุณ apache จะไม่สามารถอ่านไฟล์ใด ๆ ได้
Eric Carvalho

ไม่มีวิธีในการเพิ่มโฟลเดอร์ย่อยของโฮมไดเร็กตอรี่ของฉันไปยัง www-data โดยไม่ต้องใช้มันเพื่อให้เข้าถึงโฟลเดอร์โฮมได้อย่างสมบูรณ์หรือไม่? การทำตามตรรกะนั้นดูเหมือนว่าฉันจะต้องให้สิทธิ์การเข้าถึงโฟลเดอร์ ALL THE HOME เช่นกันเพราะฉันจะต้องให้สิทธิ์การเข้าถึง / home ดูเหมือนว่าจะมากเกินไป
Enrique Moreno Tent

คำตอบ:


25

สิ่งนี้ใช้ได้สำหรับฉัน

<Directory />
    Options Indexes FollowSymLinks Includes ExecCGI
    AllowOverride All
    Require all granted
    Allow from all
</Directory>

สิ่งสำคัญคือการเปลี่ยนแปลง

Order allow, deny

ไปยัง

Require all granted 

คุณประหยัดเวลาของฉันฉันไม่ต้องเปลี่ยนสิทธิ์
khaled_webdev

สวัสดีฉันดีใจที่ช่วยให้คุณ
szydan

3
ฉันเอาเสรีภาพในการค้นหาสิ่งที่ "ต้องได้รับอนุญาตทั้งหมด" คือและพบว่ามันเป็น "เทียบเท่าใหม่" Allow from allจาก apache 2.4 เป็นต้นไป - serverfault.com/questions/549517/ …
โปรแกรม

8
ไม่การอนุญาตให้เข้าถึงรูททั้งหมดนั้นไม่ใช่ความคิดที่ดีเลย!
bjunix

9
การตั้งค่าAllowOverrideไปAllบนรากไดเรกทอรีประมาทที่ดีที่สุด! ดูhttpd.apache.org/docs/2.4/mod/core.html#allowoverrideสำหรับรายละเอียด
Bombe

19

เปิดใช้งานuserdirโมดูล:

sudo a2enmod userdir 

เปิดใช้งานการประมวลผล PHP ในไดเรกทอรีผู้ใช้:

sudo nano /etc/apache2/mods-available/php5.conf  

(หรือถ้าใช้ php7.0 เป็นต้น)

sudo nano /etc/apache2/mods-available/php7.0.conf

แสดงความคิดเห็นในส่วนนี้ (ใส่#ที่จุดเริ่มต้นของแต่ละบรรทัด):

#<IfModule mod_userdir.c>
#    <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
#</IfModule>

กดCtrl+ Xเพื่อบันทึก

เปิดใช้งานรายการไดเรกทอรี:

sudo nano /etc/apache2/apache2.conf

เพิ่มสิ่งนี้:

<Directory /home/*/public_html/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

กดCtrl+ Xเพื่อบันทึก


รีสตาร์ท apache ( sudoต้องการที่นี่ด้วย):

sudo service apache2 restart

ตอนนี้ใส่ไฟล์ php ของคุณใน/home/yourname/public_htmlไดเรกทอรีแล้วไปที่
http://localhost/~yournameจากเว็บเบราว์เซอร์


11

Apache www-dataทำงานเป็นผู้ใช้ หากไม่มีสิทธิ์ดำเนินการในบ้านของคุณ apache จะไม่สามารถอ่านไฟล์ใด ๆ ได้

เปลี่ยนกลุ่มบ้านของคุณเป็นwww-data:

chgrp www-data /home/dbugger

และให้สิทธิ์เพื่อสำรวจไดเรกทอรีบ้านของคุณเท่านั้น:

chmod g+x /home/dbugger

คุณสามารถ จำกัด การอนุญาตของ/home/dbugger/html:

chgrp www-data /home/dbugger/html
chmod 750 /home/dbugger/html

ฉันสามารถทำได้ แต่แทนที่จะ/home/dbuggerใช้/home/dbugger/htmlใช่ไหม
Enrique Moreno Tent

คุณสามารถใช้การอนุญาตนั้นกับ/home/dbugger/html777 ได้ แต่ต้องจำไว้ว่าหากผู้ใช้ www-data ไม่สามารถcdไปที่บ้านของคุณได้ก็จะไม่สามารถเข้าถึงไฟล์หรือโฟลเดอร์ย่อยใด ๆ ดังนั้นหากการอนุญาตจากบ้านของคุณคือrwx------ dbugger:dbuggerapache จะไม่สามารถเข้าถึงไฟล์ใด ๆ ภายในบ้านของคุณได้ หากคุณไม่ต้องการ จำกัด การเข้าถึงเพียงเล็กน้อยคุณสามารถลองให้อนุญาตการอนุญาตเท่านั้น ( chmod g+x /home/dbugger) ฉันไม่แน่ใจ แต่ฉันคิดว่ามันใช้งานได้
Eric Carvalho

ขออภัย แต่วิธีนี้ไม่ได้ผล :(
Enrique Moreno Tent

chgrp www-data /home/dbuggerร่วมกับวิธีการ @DavidGreene ได้มันทำงานสำหรับฉัน
Laurent

นอกจากนี้ยังเป็นไปได้ที่จะเพิ่มกลุ่มผู้ใช้ของคุณไปยังผู้ใช้ apache (www-data) sudo usermod -a -G dbugger www-dataหลังจากนั้นคุณต้องรีสตาร์ท apache
TIIUNDER

1

คุณไม่จำเป็นต้องเปลี่ยนการอนุญาตหากคุณต้องการใช้โฮมไดเร็กตอรี่ของคุณเพื่อโฮสต์สภาพแวดล้อมการพัฒนา, อย่างน้อยคุณต้องมีสิทธิ์ในการเขียนสำหรับบางแอพพลิเคชั่น คุณต้องการโมดูล apache mod_userdir และคุณสามารถเข้าถึง / home / ชื่อผู้ใช้ / public_html / * เช่นhttp: //domain.local/~user_name/dir_name/ * สำหรับการใช้โฮสต์เสมือนเพื่อใช้โมดูล mod_userdir ลิงก์เช่นนี้:

$ sudo ln -s /etc/apache2/mods-available/userdir.conf /etc/apache2/mods-enabled/
$ sudo ln -s /etc/apache2/mods-available/userdir.load /etc/apache2/mods-enabled/
$ sudo service apache2 restart

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