ปัญหาการอนุญาต: Apache สามารถเข้าถึงไฟล์ในไดเรกทอรี Home ของฉันได้อย่างไร


33

ฉันรู้ว่าสิทธิ์ไฟล์ได้รับการคุ้มครองที่นี่มาก่อน แต่ฉันพยายามดิ้นรนเพื่อให้ได้แนวคิดของฉันสำหรับสถานการณ์ของฉัน

  • ฉันสร้างไฟล์ในการติดตั้ง Ubuntu เก่า
  • ฉันได้คัดลอกไฟล์ไปยังการติดตั้ง Ubuntu ใหม่ของฉันและใส่ไว้ใน webroot ของฉัน
  • เมื่อฉันพยายามเรียกใช้ไฟล์ (พวกเขากำลังไฟล์ PHP) ฉันได้รับข้อผิดพลาดเกี่ยวกับสิทธิ์

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

เมื่อฉันพยายามเรียกใช้ไฟล์อีกครั้งปัญหาเดียวกัน: ข้อผิดพลาด 500 เนื่องจากปัญหาสิทธิ์ ใครสามารถบอกฉันว่าฉันควรทำตามขั้นตอนอื่น ๆ อีกบ้าง?

webroot สำหรับการติดตั้ง apache ของฉันอยู่ในโฟลเดอร์บ้านของฉัน หากฉันสร้างไฟล์ใหม่ใน webroot ของฉันพวกเขายังทำงานได้ตามที่คาดหวังมันเป็นเพียงไฟล์เก่าที่ก่อให้เกิดปัญหา


ฉันไม่แน่ใจว่าสิทธิ์การใช้งานไฟล์ถูกคัดลอกเมื่อไฟล์มีใครสามารถยืนยันได้หรือไม่ มิฉะนั้นเป็นไปได้หรือไม่ที่จะให้ไฟล์แก่ผู้ใช้คนอื่น (หรือรูท) จากนั้นเรียกคืนไฟล์เหล่านั้น?
Tagger

ตกลงฉันได้แก้ไขปัญหาไฟล์ของฉันไม่ได้ทำงาน แต่ฉันทำโดยเพียงแค่เรียกใช้chmod -R 777 dirไดเรกทอรีที่สงสัย ฉันไม่สามารถช่วยคิดว่ามีวิธีที่ดีกว่าในการทำเช่นนั้น
richzilla

3
การอนุญาต 777 ไฟล์จะอนุญาตให้ทุกคนเขียนไฟล์ของคุณซึ่งอาจทำให้หน้าเว็บของคุณหรือแฮ็คเสียหาย คุณควรลองกับ 755 ซึ่งโดยปกติจะใช้สำหรับไฟล์ php ตรวจสอบให้แน่ใจว่าคุณไม่จำเป็นต้องเปิดใช้งาน "อนุญาตให้ดำเนินการ" สำหรับไฟล์ซึ่งในกรณีนี้คุณสามารถเรียกใช้ chmod [filename] -x ข้อมูลเกี่ยวกับคำสั่ง chmod สามารถเข้าถึงได้โดยคลิกที่ลิงค์ถัดไป: catcode.com/teachmod/chmod_cmd.html
Geppettvs D'Constanzo

บันทึกข้อผิดพลาด Apache แสดงอะไร
Kees Cook

คำตอบ:


14

ไดเรกทอรีด้านบนเว็บรูทของคุณควรมีชุดบิตเรียกใช้งานเพื่ออนุญาตให้ Apache ลงไปในไดเรกทอรี

ถ้าคุณได้ webroot ของคุณตั้งอยู่ที่/home/user/htdocsที่/, /home, /home/userและ/home/user/htdocsควรจะมีการดำเนินการชุดบิต


วิธีแก้ปัญหาข้างต้น "ใช้งานได้" แต่ก็ไม่เหมาะ หากคุณสร้างโฟลเดอร์ขึ้น Apache จะไม่สามารถเขียนได้ สิ่งที่ตรงกันข้ามก็เกิดขึ้นเช่นกัน

สิ่งนี้สามารถ "แก้ไข" ได้โดยตั้งค่า umask 0007 และเพิ่มตัวเองในกลุ่ม Apache (www-data ถ้าฉันไม่เข้าใจผิด) เพื่อให้กลุ่มและไฟล์และโฟลเดอร์ที่สร้างขึ้นใหม่สามารถเขียนได้

หรือคุณสามารถติดตั้ง Apache MPM ทางเลือก: Apache2 MPM ITK ( ข้อมูลเกี่ยวกับการกำหนดค่า ) และปรับการกำหนดค่าเพื่อให้ Apache ทำงานภายใต้ผู้ใช้ของคุณ


สำหรับคำแนะนำอย่างชัดเจนเกี่ยวกับวิธีการ accmplish คำตอบที่เห็นนี้มาร์โกด้านล่าง
เตาแก๊ส

2
@hobs ดียิ่งขึ้นAskubuntu.com/a/46371/6969
Lekensteyn

44

หากเอกสารเซิร์ฟเวอร์ของคุณอยู่ใน/home/$USER/public_htmlไดเรกทอรีคุณต้องเรียกใช้

sudo chown -R www-data:www-data /home/$USER/public_html

เพื่อให้เจ้าของโฟลเดอร์ DocumentRoot ไปยังผู้ใช้และกลุ่มwww-datawww-data

จากนั้นคุณสามารถเพิ่มตัวเองในกลุ่ม www-data

sudo adduser $USER www-data

สุดท้ายคุณต้องทำให้โฟลเดอร์ DocumentRoot สามารถเขียนได้โดยเจ้าของ (ผู้ใช้ข้อมูล www) และตัวคุณเอง (เป็นส่วนหนึ่งของwww-dataกลุ่ม):

sudo chmod -R 775 /home/$USER/public_html

เพื่อความสะดวกคุณสามารถตั้งชื่อสคริปต์public_html_fix.shด้วยเนื้อหา:

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

บันทึกไว้ข้างใน/home/$USER/binและทำให้มันใช้งานได้โดย:

sudo chmod +x /home/$USER/bin/public_html_fix.sh

จากนั้นคุณเรียกมันว่าเมื่อใดก็ตามที่คุณต้องการจากที่ใดก็ตามบนระบบไฟล์ที่คุณพบว่าเป็นเช่นนี้:

public_html_fix.sh

1
ทำงานให้ฉัน ....
Emmanuel Okeke

คำตอบที่ดี! - ด้วยตัวอย่างและแม้กระทั่งสคริปต์อำนวยความสะดวกและวิธีการใช้ / ติดตั้งดีเลิศ!
อังเดร

2
ถ้าสิ่งนี้ทำบนโฮสต์ที่ใช้ร่วมกันคุณจะหยุดผู้ใช้รายอื่นในwww-dataกลุ่มที่อ่านไฟล์ของคุณหรือเขียนถึงเรื่องนั้นได้อย่างไร
jozxyqk

คำตอบที่ยอดเยี่ยมจริงๆ ... คุณช่วยชีวิตฉันไว้
NullPoiиteя

1
chmod -R 775 /home/$USER/public_htmlน่ากลัวจริงๆ find /home/$USER/public_html -type d -exec chmod 775 {} \;และfind /home/$USER/public_html -type f -exec chmod 664 {} \;ดีขึ้นมาก
iharob

1

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

ในการตรวจสอบว่าไฟล์ของคุณสามารถมองเห็นได้www-rootหรือผู้ใช้เรียกใช้ apache (รันps -aux | grep apache2เพื่อตรวจสอบ) หรือไม่ให้เรียกใช้คำสั่งต่อไปนี้:

sudo su -l www-data -s /bin/bash

และลองอ่านไฟล์จากรูทเอกสารของคุณ

หากไฟล์ไม่สามารถอ่านได้ให้ตรวจสอบว่า:

1) คุณได้ตั้งค่าการอนุญาตไฟล์อื่น ๆ ทั้งหมด

2) คุณได้ใช้ไฟล์FollowSymlinksของคุณ.confหากจำเป็น

3) คุณได้ตั้งค่า DocumentRoot แล้ว

3) ติดตั้งพาร์ทิชันของคุณสำหรับผู้ใช้ทั้งหมด ฉันต้องแก้ไข/etc/fstabและระบุพาร์ติชันของฉันผ่าน UUID:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

sudo mount -aแล้วเลิกเมานท์พาร์ทิชันของคุณผ่านทางหอยโข่งและทำ /mntหากทุกอย่างไปไฟล์ของคุณอยู่ในขณะนี้ภายใต้ อัปเดต symlink ของคุณแล้วคุณก็ไปได้


1

วิธีที่ดีที่สุดที่ฉันพบว่าตั้งค่านี้อยู่เสมอคือวิธีที่ VirtualMin ทำ

สร้างผู้ใช้และกลุ่ม "myhome"

ทำให้ผู้ใช้ apache เป็นสมาชิกของกลุ่ม "myhome" ไม่ใช่วิธีอื่น ๆ เช่นคำอธิบายที่นี่อธิบาย

ดังนั้นตอนนี้ apache ได้อ่านและดำเนินการเข้าถึง / home / myhome นอกเหนือจาก / home / myhome / www

ผู้ใช้ "myhome" มีสิทธิ์เข้าถึงเพื่อเขียน


ฉันชอบแนวคิดนี้ แต่ดูเหมือนจะไม่ได้ผลสำหรับฉัน ผู้ใช้อยู่ในกลุ่มwww-data ไฟล์และไดเรกทอรีทั้งหมดมีสิทธิ์ของกลุ่มเขียนและเป็นmyhome myhome:myhomeฉันรีสตาร์ท apache Apache ยังไม่สามารถเขียนไฟล์และโฟลเดอร์ใหม่ได้ (สคริปต์ PHP ใช้ www-data: ผู้ใช้ www-data / กลุ่ม)
squarecandy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.