คุณไม่ควรจะต้องใช้เว็บไซต์จากภายในไดเรกทอรีบ้านของคุณ EVER มิฉะนั้นคุณจะต้องให้ความสามารถในการสำรวจผ่านเว็บเซิร์ฟเวอร์/home/
เพื่อดูโครงสร้างไดเรกทอรี แต่รวมถึง/home/$USER/
(โฮมไดเร็กตอรี่ของผู้ใช้ของคุณซึ่งเราสามารถลองและดูว่ามีอะไรอีกในไดเรกทอรีผู้ใช้ของคุณ) รวมถึงโฟลเดอร์ย่อยอื่น ๆ ในนั้น. เว็บเซิร์ฟเวอร์ที่มีการกำหนดค่าไม่ดีหรือกำหนดค่าผิดพลาดหรือไม่ตรงกันอาจทำให้เกิดการรั่วไหลของข้อมูลขนาดใหญ่ด้วยวิธีนี้หรือการสูญเสียข้อมูลประจำตัวและสิ่งเหล่านี้จะทำให้ข้อมูลส่วนบุคคลของคุณและการเข้าสู่ระบบ วิธี symlink ที่คุณใช้ไม่ได้ช่วยด้วยเหตุผลเดียวกับการพยายามให้สิทธิ์ Apache อ่าน/home/andre/www/moodle
- เว็บเซิร์ฟเวอร์จะต้องสามารถสำรวจโฮมไดเร็กตอรี่ของคุณเพื่อไปยังตำแหน่งที่ symlink /var/www/html
ชี้ไปซึ่งยังคงเสี่ยงต่อความปลอดภัย
sudo cp -r /home/andre/www/moodle/ /var/www/html/
ประการแรกการใช้งาน สิ่งนี้จะคัดลอกไฟล์ของคุณไป/var/www/html
และเก็บให้ห่างจากโฮมไดเร็กตอรี่ของคุณเอง. จากนั้นเราจะทำซ้ำการอนุญาตเพื่อให้คุณและเว็บเซิร์ฟเวอร์สามารถเข้าถึงทุกสิ่งในไดเรกทอรีนั้นและให้ผู้ใช้ของคุณอ่าน / เขียนไฟล์และไดเรกทอรีทั้งหมดได้อย่างเต็มที่ จากนั้นคุณจะต้องทำงาน/var/www/html
ให้กับไซต์ของคุณเท่านั้น
นี่คือผลสี่ขั้นตอนหลังจากที่คุณคัดลอกข้อมูลของคุณกลับไปที่/var/www/html
:
- ให้ Apache เข้าถึงโฟลเดอร์และไฟล์เพื่อให้สามารถให้บริการไซต์ได้โดยไม่มีข้อผิดพลาด 403
- มอบให้เจ้าของ 'ของคุณ' เหนือไฟล์และโฟลเดอร์และให้ตัวเองอ่าน / เขียนในทุกไฟล์และโฟลเดอร์เช่นเดียวกับความสามารถในการสำรวจไดเรกทอรี
- (ไม่บังคับ แต่แนะนำ)ตั้งขึ้นดังกล่าวว่าไฟล์หรือโฟลเดอร์ใด ๆ
www-data
ที่สร้างขึ้นจากจากนี้ในความสมบูรณ์ของโครงสร้างไดเรกทอรีที่มีชุดของกลุ่มเป็น
- (ไม่บังคับ) การล้างข้อมูลความปลอดภัยขั้นสุดท้ายที่เราตั้งค่าการอนุญาตเพื่อให้คุณและเว็บเซิร์ฟเวอร์สามารถดูข้อมูลไซต์ได้ แต่ผู้ใช้รายอื่นไม่สามารถเข้าถึงไฟล์หรือโครงสร้างไดเรกทอรีของเว็บไซต์ได้
(1) อนุญาตให้ Apache เข้าถึงโฟลเดอร์และไฟล์ต่างๆ
sudo chgrp -R www-data /var/www/html
sudo find /var/www/html -type d -exec chmod g+rx {} +
sudo find /var/www/html -type f -exec chmod g+r {} +
การดำเนินการนี้จะตั้งค่า 'กลุ่ม' ซ้ำwww-data
สำหรับโฟลเดอร์และไฟล์ จากนั้นให้สิทธิ์การใช้เว็บเซิร์ฟเวอร์ในการเรียกคืนและเข้าถึงโครงสร้างไดเรกทอรีรากของเอกสารไซต์ ( +x
สำหรับไดเรกทอรีเท่านั้น) นอกจากนี้ยังช่วยให้มั่นใจว่าเว็บเซิร์ฟเวอร์ได้อ่านสิทธิ์สำหรับไฟล์ทั้งหมดดังนั้นจึงสามารถรับข้อมูลไซต์ได้
อาจมีบางกรณีที่คุณต้องให้สิทธิ์การเขียนเว็บเซิร์ฟเวอร์ไปยังไฟล์หรือไดเรกทอรี - ซึ่งสามารถทำได้โดยการทำsudo chmod g+w /var/www/html/PATH
(ที่PATH
เป็นเส้นทางไปยังไฟล์หรือโฟลเดอร์ในโครงสร้างไดเรกทอรีที่คุณต้องใช้ สิทธิ์การเขียนสำหรับเว็บเซิร์ฟเวอร์)
ข้อสังเกต : มีหลายกรณีที่ข้อมูลนี้อาจเปิดเผยข้อมูล 'ปลอดภัย' เกี่ยวกับการกำหนดค่าไซต์ (เช่นข้อมูลการเข้าถึงฐานข้อมูลเป็นต้น) และคุณควรลบสิทธิ์การเข้าถึงข้อมูลอื่น ๆ ของไฟล์หรือไดเรกทอรีเหล่านั้นด้วย ต่อไปนี้: sudo chmod o-rwx /var/www/html/FILEPATH
(แทนที่FILEPATH
ด้วยพา ธ ที่สัมพันธ์กับ/var/www/html
โฟลเดอร์ของไฟล์)
โปรดทราบว่าคุณอาจต้องเรียกใช้คำสั่งเหล่านี้อีกครั้งในอนาคตหาก 'ไฟล์ใหม่' ได้รับปัญหา 403 เพื่อให้สิทธิ์ที่ถูกต้องกับเว็บเซิร์ฟเวอร์เพื่อให้สามารถเข้าถึงไฟล์และโฟลเดอร์ที่สร้างหรือคัดลอกและ ไม่ได้รับการwww-data
ตั้งค่ากลุ่มอย่างถูกต้อง
(2) ให้สิทธิ์การอ่าน / เขียนแก่เจ้าของของคุณไปยังโฟลเดอร์และไฟล์และอนุญาตให้เข้าถึงโฟลเดอร์เพื่อสำรวจโครงสร้างไดเรกทอรี
sudo chown -R USER /var/www/html/
sudo find /var/www/html -type d -exec chmod u+rwx {} +
sudo find /var/www/html -type f -exec chmod u+rw {} +
แทนที่USER
ในคำสั่งแรกด้วยชื่อผู้ใช้ของคุณเอง!
เราทำสามสิ่งที่นี่ อันดับแรกเราตั้งค่าผู้ใช้ของคุณให้เป็น "เจ้าของ" ของไฟล์และไดเรกทอรี/var/www/html
ทั้งหมด ต่อไปเราตั้งค่าการอ่านและเขียนสิทธิ์บนโฟลเดอร์และอนุญาตให้คุณเข้าถึงโฟลเดอร์เพื่อเข้าไปยังโฟลเดอร์เหล่านั้น ( +x
รายการในรายการไดเรกทอรี) จากนั้นเราตั้งค่าไฟล์ทั้งหมดให้มีสิทธิ์ในการอ่าน / เขียนสำหรับเจ้าของซึ่งเราเพิ่งตั้ง
(3) (เป็นทางเลือก)ตรวจสอบให้แน่ใจว่าทุกไฟล์ใหม่หลังจากสร้างด้วยwww-data
ผู้ใช้ 'การเข้าถึง'
sudo find /var/www/html -type d -exec chmod g+s {} +
ชุดนี้บิต "set gid" สำหรับกลุ่มในไดเรกทอรี ไฟล์และโฟลเดอร์ที่สร้างขึ้นภายในไดเรกทอรีเหล่านี้จะมีwww-data
เป็นกลุ่มอนุญาตให้เข้าถึงเว็บเซิร์ฟเวอร์
(4) (ไม่บังคับ) การล้างข้อมูลความปลอดภัยขั้นสุดท้ายหากคุณไม่ต้องการให้ผู้ใช้รายอื่นเห็นข้อมูล
เราต้องการให้ผู้ใช้ของคุณเห็นไดเรกทอรีและไฟล์ เราต้องการเว็บเซิร์ฟเวอร์เพื่อทำเช่นนั้น เราอาจไม่ต้องการให้ผู้ใช้ระบบรายอื่น (ยกเว้นรูท) เห็นข้อมูล ดังนั้นอย่าให้สิทธิ์การเข้าถึงแก่พวกเขาและทำให้ผู้ใช้ของคุณและเว็บเซิร์ฟเวอร์สามารถดูข้อมูลได้เท่านั้น
sudo chmod -R o-rwx /var/www/html/
หมายเหตุ:คุณจะไม่ต้องเรียกใช้งานอีกครั้งในภายหลังหรือแก้ไขการอนุญาตสำหรับหมวดหมู่การอนุญาต 'อื่น ๆ ' ที่นี่ หากผู้ใช้ 'อื่น ๆ ' ไม่สามารถเข้าถึงได้/var/www/html/
(พวกเขาไม่มี+x
บิตที่จำเป็นใน/var/www/html
การสำรวจโครงสร้าง+r
ไฟล์และโครงสร้างไดเรกทอรีและบิตเพื่ออ่านรายการไฟล์) จากนั้นสิทธิ์ในรายการภายใต้ไดเรกทอรีนั้นสำหรับผู้ใช้รายอื่น หรือกลุ่มไม่ได้มีความสำคัญมากเกินไป
มีวิธีการบุกรุกน้อยกว่านี้เล็กน้อยเช่นกันแม้ว่าจะไม่รับประกันว่าจะทำงานกับไฟล์ใหม่ทั้งหมดและไม่รับประกันว่าจะสามารถทำงานกับระบบไฟล์ทั้งหมดที่เกี่ยวข้องกับรายการควบคุมการเข้าถึงไฟล์ สิ่งนี้ช่วยให้คุณไม่ต้องเป็นเจ้าของไฟล์ด้วยwww-data
สิ่งต่าง ๆ แต่ให้สิทธิ์เจ้าของที่มีประสิทธิภาพสำหรับทุกเจตนาและวัตถุประสงค์แม้ว่าคุณจะไม่ได้เป็นเจ้าของไฟล์ส่วนตัว
โซลูชันนี้มีการบุกรุกน้อยกว่าเล็กน้อยและช่วยให้คุณมีไดเรกทอรีและไฟล์ทั้งหมดที่อยู่ภายในwww-data:www-data
หรือroot:www-data
ยังให้สิทธิ์การเข้าถึงของคุณ มันใช้รายการควบคุมการเข้าถึงซึ่งช่วยให้คุณมีผู้ใช้หลายคนมีสิทธิ์โดยไม่ต้องตั้งค่าแต่ละกลุ่ม สิ่งนี้ยังช่วยให้ผู้ใช้ระบบroot
หรือwww-data
ไฟล์ของตัวเอง แต่ยังช่วยให้คุณเพิ่มสิทธิ์เพิ่มเติมเป็นกรณี ๆ ไปและปรับแต่งสิทธิ์สำหรับผู้ใช้บางคนเพื่อให้พวกเขาสามารถอ่านสิ่งต่าง ๆ แต่ไม่สามารถแก้ไขได้
สมมติว่าเรายังคงทำงานกับ/var/www/html/
และเราไม่ต้องการให้ผู้ใช้อื่นที่ไม่ใช่เราและระบบ (และรากของหลักสูตร) เพื่อดูข้อมูลของเราเราจะต้องทำสิ่งต่อไปนี้:
www-data
ให้เจ้าของกลับไปยังผู้ระบบเว็บเซิร์ฟเวอร์
sudo chown -R www-data: www-data / var / www / html
- ให้คุณอ่าน / เขียนไฟล์ซ้ำ ๆ ในขณะที่ให้ผู้ใช้รายอื่น (ยกเว้น
www-data
และroot
แน่นอน) ไม่สามารถเข้าถึงไฟล์ได้
sudo find / var / www / html -type f -exec setfacl -mu: YOURUSERNAME: rw -m อื่น ๆ :: --- {} \;
- ให้ตัวเองอ่าน / เขียน / สำรวจซ้ำในไดเรกทอรีลบการเข้าถึงโฟลเดอร์สำหรับผู้ใช้รายอื่น (ไม่รวม
www-data
และroot
) และตั้งค่านี้เป็น 'ค่าเริ่มต้น' ACL สำหรับไฟล์ใหม่ในไดเรกทอรี
sudo find / var / www / html -type d -exec setfacl -d -mu: ชื่อผู้ใช้ของคุณ: rwx -mo :: --- {} \;
- นอกจากนี้เรายังต้องตั้งค่า
setgid
บิตสำหรับไดเรกทอรีทั้งหมดดังนั้นหากคุณสร้างไฟล์เว็บเซิร์ฟเวอร์ยังคงสามารถเข้าถึงได้เช่นเดียวกับการwww-data
อนุญาตกลุ่ม
sudo find / var / www / html -type d -exec chmod g + x {} \;
และตอนนี้คุณสามารถเข้าถึงไดเรกทอรีทั้งหมดและคุณไม่จำเป็นต้องเข้าถึงwww-data
สิ่งที่ช่วยเพราะเว็บเซิร์ฟเวอร์ยังคงสามารถสร้างไฟล์ได้ทุกที่ตามที่ต้องการ (เช่นส่วนหน้าของ PHP ที่มีไดเรกทอรีแคชของตนเองและเช่นนั้น จำเป็นต้องสร้างและเขียนเพื่อการทำงานที่เหมาะสม)
ข้อแม้เท่านั้น: หากคุณสร้างไฟล์ใหม่ด้วยตนเองคุณจะต้อง chown พวกเขาตามลำดับเพื่อให้ความเป็นเจ้าของกับเว็บเซิร์ฟเวอร์ นั่นเป็นเรื่องง่ายsudo chown www-data:www-data filename
และรายการควบคุมการเข้าถึงยังควรให้คุณมีสิทธิ์เจ้าของไฟล์อย่างมีประสิทธิภาพ
มีหลายกรณีที่ฉันต้องทำเช่นนี้เป็นระบบดูแลระบบสำหรับการเข้าถึงที่ไม่ได้มาตรฐานบางประเภทโดยไม่ต้องเปลี่ยนเจ้าของไฟล์ที่กำหนด วิธีนี้ใช้ได้ผล แต่มีอาการปวดหัวของตัวเองเนื่องจากบางระบบไฟล์ไม่รองรับรายการเข้าถึงไฟล์
+x
สำหรับไฟล์จะให้สิทธิ์ในการปฏิบัติการและเราไม่ต้องการให้ไฟล์ PHP ถูกประมวลผลจำเป็นต้องใช้ผ่านบรรทัดคำสั่ง PHP หรือเป็นไฟล์ปฏิบัติการบนเซิร์ฟเวอร์ - เราต้องการให้มันประมวลผลโดย PHP parser ในเว็บเซิร์ฟเวอร์ (และเรา ไม่จำเป็นต้องใช้ไฟล์ PHP เพื่อ+x
ให้โปรแกรมแยกวิเคราะห์ PHP อ่านและประมวลผล) ไดเรกทอรีต้องการ+x
เพื่ออนุญาตให้มีการแวะผ่านไดเรกทอรี - นั่นคือถ้าไดเรกทอรีไม่ได้+x
และฉันไม่รูทฉันไม่สามารถเข้าไปในไดเรกทอรีซึ่งเป็นปัญหาที่คุณมีกับ Apache ที่ไม่ได้ทำงานร่วมกับ symlink ของคุณและบ้านของคุณ ไดเรกทอรี