Apache เชื่อมโยงไปยังไดเรกทอรีหลัก - ข้อผิดพลาดในการอนุญาต


15

ฉันมีปัญหาเล็กน้อยที่เชื่อมโยง/var/www/ไปยังWebrootไดเรกทอรีใหม่ภายในโฟลเดอร์บ้านของฉัน ฉันคิดว่าสิ่งเหล่านี้มาจากการขาดความเข้าใจในสิทธิ์ของ linux

เท่าที่ฉันทราบ symlink ควรอยู่ในรูปแบบของไดเรกทอรีที่คุณต้องการเชื่อมโยงและไดเรกทอรีที่คุณต้องการที่จะเชื่อมโยงดังนั้นในกรณีของฉันฉันวิ่ง:

sudo ln -s ~/Webroot/* /var/www/

นี่เป็นการเรียงลำดับของการทำงานถ้าฉันเรียกใช้lsบน/var/www/ฉันสามารถดูไฟล์ทั้งหมดในWebrootไดเรกทอรีของฉัน

เมื่อใดก็ตามที่ฉันพยายามเรียกใช้ไฟล์ที่อยู่ในWebrootโฟลเดอร์ของฉันฉันได้รับข้อผิดพลาดในการอนุญาต 403 เป็นเพราะไฟล์ในไดเรกทอรี Webroot ของฉันถูกสร้างขึ้นโดยฉันและอินสแตนซ์ apache กำลังทำงานเป็น www-data หรือไม่

หากเป็นกรณีนี้หมายความว่าฉันจำเป็นต้องเปลี่ยนการอนุญาตในทุกไฟล์ที่ฉันสร้างเพื่อเรียกใช้หรือไม่

ก่อนหน้านี้ฉันได้เรียกใช้อินสแตนซ์อะแพชในเครื่องของฉันชี้ไปที่รูทไดเรกทอรีของ vhost เริ่มต้นของฉันไปที่Webrootโฟลเดอร์ในอินสแตนซ์นี้ฉันไม่จำเป็นต้องแก้ไขการอนุญาตใด ๆ ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม


คุณได้ตรวจสอบเพื่อให้แน่ใจว่า apache ไม่ได้ถูกกำหนดค่าให้ไม่ติดตาม symlinks .... ฉันมีปัญหานี้อีกครั้ง เธรดที่เกี่ยวข้องในฟอรัมอื่นอาจอยู่ที่นี่: linuxforums.org/forum/servers/ …
RobotHumans

คำตอบ:


15

นี่ไม่ใช่วิธีปฏิบัติที่ดีฉันเห็นด้วยกับ Weboide แต่มีวิธีง่ายๆในการบรรลุเป้าหมายนี้

1) เปิดใช้งานโมดูล apache userdir

sudo  a2enmod userdir

สิ่งนี้จะเปิดใช้งานโมดูล apache userdir ตอนนี้คุณสามารถใส่เนื้อหาของเว็บไซต์ใน~/Webroot/หรืออะไรก็ตามที่อยู่ในไดเรกทอรีบ้านของคุณ

หมายเหตุ: โฟลเดอร์เริ่มต้นคือ ~/public_html

2) /etc/apache2/mods-enabled/userdir.confทำการเปลี่ยนแปลงที่จำเป็นเพื่อ

3) รีสตาร์ท apache

sudo /etc/init.d/apache2 restart

ตอนนี้คุณสามารถเข้าถึงเว็บไซต์โดยการนำบราวเซอร์ของคุณเพื่อhttp: // ที่อยู่ IP / ~ ชื่อผู้ใช้ คุณยังสามารถตั้งค่าโฮสต์เสมือนสำหรับไซต์นี้

หากคุณต้องการเรียกใช้ไฟล์ php คุณต้องทำอีกหนึ่งขั้นตอน

แก้ไข/etc/apache2/mods-enabled/php5.confและแสดงความคิดเห็นบรรทัดต่อไปนี้:

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

จากนั้นรีสตาร์ท apache

แค่นั้นแหละ. คุณทำเสร็จแล้ว

Ref: https: //wiki.ubuntu.com/UserDirectoryPHP

หวังว่านี่จะช่วยได้ หากคุณประสบปัญหาใด ๆ โปรดโพสต์ได้ที่นี่


7

นี่ไม่ใช่วิธีปฏิบัติที่ดีในการบรรลุสิ่งที่คุณต้องการ

หากคุณกำลังใช้ PHP, คุณอาจต้องการที่จะดูที่suexec , suPHPหรือPHP-FPMและfastcgi


คุณมีสิทธิ์เกี่ยวกับปัญหาของคุณนี่เป็นปัญหาสิทธิ์เนื่องจากข้อเท็จจริงที่ว่าWebrootไฟล์ของคุณเป็นของผู้ใช้รายwww-dataอื่น

นี่เป็นวิธีที่ไม่เลวเพื่อแก้ไขปัญหาของคุณ โปรดทราบว่าคุณอาจต้องใช้ sudo หรือเข้าสู่ระบบเป็นรูท ตรวจสอบให้แน่ใจว่าคุณเข้าใจคำสั่งทั้งหมดที่คุณกำลังดำเนินการอยู่ !!

เปลี่ยนWebrootโฟลเดอร์โฟลเดอร์ย่อยและไฟล์ของคุณเพื่อให้เจ้าของกลุ่มตั้งค่าwww-dataและตั้งค่าการอนุญาตที่เหมาะสม:

# set the group ownership to be www-data
chgrp -R www-data /path/to/home/Webroot/
# make sure www-data has read & write permissions (change it to `g=r` if you want to only give read-only access)
chmod -vR g=rw /path/to/home/Webroot/
# make sure www-data can access the folders by adding the group execute bit field to directories
find /path/to/home/Webroot/ -type d -print0 | xargs -0p chmod -v g+x

แก้ไข:โปรดทราบว่าคุณจะต้องเรียกใช้คำสั่งเหล่านั้นอีกครั้งหากคุณเพิ่มไฟล์ / โฟลเดอร์โดยใช้บัญชีผู้ใช้ปกติของคุณ


2

ฉันทำสิ่งเดียวกันกับ Debian Lenny แต่ฉันเปลี่ยนเป็นโหมดที่ไม่ใช่แฮ็กฉันได้กำหนดค่า apache ให้ถูกต้อง แต่ด้วย symlink:

$ ll /home
drwxr-xr-x  8 root   root   4,0K nov 14 14.59 .
drwxrwxrwx  7 root   root   4,0K nov 14 21.24 www -> /var/www

ฉันคิดว่าคุณควรตรวจสอบ permisson ของ~และ~ / Webrootฉันคิดว่าdir ของคุณ (~) อ่านแล้วฉันหมายความว่าคุณต้องรันสิ่งนี้:

$ ls -la /home

ในการตั้งค่าสิทธิ์อนุญาตให้ใช้:

# chmod 755 /home
# chmod 755 /home/<YOURNAME>
# chown <YOURNAME>:www-data -R /home/<YOURNAME>/Webroot
# chmod 775 -R /home/<YOURNAME>/Webroot

ฉันคิดว่ามันน่าจะช่วยได้ แต่ให้ข้อมูลเพิ่มเติมกับฉัน ฉันขอแนะนำให้คุณออก Webroot จาก dir ของคุณเช่นกัน ถึง/ home เหมือนฉันเพราะอาจเป็นปัญหาความปลอดภัย

"#" หมายถึงroot permissonเช่น เขียนsudoก่อนคำสั่ง; "$" หมายถึงผู้ใช้คนเดียว


0

คุณต้องตรวจสอบสิทธิ์ไม่เพียง แต่เกี่ยวกับปลายทางของคุณ แต่ยังต้องตรวจสอบสิทธิ์ของผู้ปกครองด้วย


ทำไม? นี่เป็นข้อ จำกัด ของ Apache หรือข้อ จำกัด ของระบบไฟล์หรือไม่?
Flimm

ขอโทษ ฉันไม่ได้ตรวจสอบข้อมูลมันขึ้นอยู่กับประสบการณ์ส่วนตัว
zVictor

0

ฉันกำลังเผชิญกับปัญหานี้ แต่ฉันไม่ชอบความคิดที่จะเปลี่ยนกลุ่มไดเรกทอรีบ้านของฉันเป็นข้อมูล www ปัญหานี้สามารถแก้ไขได้โดยแก้ไขไฟล์กำหนดค่าสำหรับ virtualHost เพียงกำหนดค่าไดเรกทอรีแท็กเพื่อรวมสิ่งเหล่านี้

<Directory "your directory here">
   Order allow,deny
   Allow from all
   Require all granted
</Directory>

นี่Require all grantedเป็นฟีเจอร์ใหม่ที่ฉันเดา deniedมีค่าเริ่มต้นของ

ดูหน้านี้สำหรับการอ้างอิง: http://httpd.apache.org/docs/current/mod/core.html#directory

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