เครื่องมือสำหรับนักพัฒนา · เครื่องคิดเลข Chmod
การแก้ไข nginx 403 ห้าม: การอนุญาตไฟล์และไดเร็กทอรีที่สำคัญ
· เหตุใดจึงสำคัญ
chmod ยูนิกซ์ การควบคุมการเข้าถึง
403 จาก nginx มักเป็นปัญหาเกี่ยวกับระบบไฟล์ ไม่ใช่ปัญหาการกำหนดค่า โพสต์นี้แสดงวิธีตรวจสอบว่าผู้ใช้ nginx ทำงานเป็นเท่าใด และบิตใดที่ต้องการในทุกไดเร็กทอรีในเส้นทาง
403 บนไซต์คงที่ที่ทำงานในเครื่อง — ไฟล์มาจาก /home/deploy และ nginx บอกว่าห้ามสำหรับทุก ๆ URL
nginx 403 อาจเกี่ยวข้องกับบิตของโหมด แต่เส้นทางนี้ไม่สามารถระบุสาเหตุได้ เครื่องคิดเลขไม่มีการผสานรวม nginx, บันทึก, ตัวแยกวิเคราะห์การกำหนดค่า, การค้นหากระบวนการ หรือตัวช่วยเดินเส้นทาง โดยตอบคำถามที่แคบกว่า: คลาสไดเร็กทอรีได้ดำเนินการหรือไม่ และคลาสไฟล์ปกติได้อ่านหรือไม่ ซึ่งช่วยตีความหลักฐานที่รวบรวมจากที่อื่น
เริ่มต้นด้วยโหมดที่แน่นอนที่สังเกตได้ในแต่ละองค์ประกอบเส้นทางแทนที่จะถือว่าค่าเริ่มต้น เข้าสู่แต่ละโหมดและเลือกประเภทเป้าหมาย ข้อความสัญลักษณ์ ช่องทำเครื่องหมาย และร้อยแก้วเปิดเผยสิทธิ์ของคลาสและยืนยันการแปลง แต่ไม่สามารถแสดงว่า nginx พยายามเข้าถึง ข้อมูลระบุตัวตนที่ใช้ หรือสิทธิ์ของระบบไฟล์ที่สร้างการตอบสนองหรือไม่
403 อาจเกี่ยวข้องกับบิตของโหมด แต่เส้นทางนี้ไม่สามารถระบุสาเหตุได้
เครื่องคิดเลขไม่สามารถค้นหาข้อมูลประจำตัวของผู้ปฏิบัติงาน nginx ได้ โดยจะจำลองเจ้าของ กลุ่ม และคลาสอื่นๆ แต่ไม่มีชื่อผู้ใช้ กระบวนการ หรือการเป็นสมาชิก โหมดเช่น rwxr-xr-x จึงไม่ได้กล่าวถึงว่าผู้ปฏิบัติงานเป็นเจ้าของวัตถุ อยู่ในกลุ่มหรือตกอยู่ภายใต้วัตถุอื่น การตรวจสอบภายนอกจะต้องสร้างการจำแนกประเภทดังกล่าว
การค้นพบตัวตนจะต้องนำหน้าการอ้างสิทธิ์เกี่ยวกับบิตที่เกี่ยวข้อง เมื่อหลักฐานสร้างคลาสที่เกี่ยวข้องแล้ว เมทริกซ์จะแสดงว่าอ่านเป็น 4 เขียนเป็น 2 และดำเนินการเป็น 1 ก่อนหน้านั้นการแก้ไขกลุ่มหรืออื่นๆ เป็นการคาดเดา เส้นทางไม่อ่านสถานะกระบวนการ มันแปลโหมดที่ให้มาแทนที่จะอนุมานสถาปัตยกรรมเซิร์ฟเวอร์
เครื่องคิดเลขไม่พบข้อมูลประจำตัวของผู้ปฏิบัติงาน nginx
ตรวจสอบแต่ละส่วนประกอบไดเร็กทอรีเป็นโหมดที่ให้มาแยกต่างหาก สำหรับไดเร็กทอรี ดำเนินการอนุญาตให้เข้าถึงรายการและตามชื่อ อ่านรายการอนุญาต และเขียนอนุญาตให้สร้าง เปลี่ยนชื่อ และลบรายการ คำอธิบายเฉพาะเป้าหมายช่วยให้ผู้ตรวจสอบพิจารณาว่าคลาสที่สร้างจากภายนอกได้ดำเนินการกับส่วนประกอบเฉพาะหรือไม่โดยไม่อ้างว่าได้ตรวจสอบเส้นทางนั้นเอง
เบราว์เซอร์ไม่ได้เดินจากรูทไปยังรูทเว็บ ไม่สามารถระบุตำแหน่งส่วนประกอบที่บล็อก ยืนยันการมีอยู่ หรือตรวจสอบ ACL ได้ ระบุโหมดไดเร็กทอรีที่สังเกตทุกโหมดแยกกัน จากนั้นตรวจสอบออบเจ็กต์สุดท้ายเป็นไฟล์ปกติ โดยที่การอ่านเกี่ยวข้องกับเนื้อหามากกว่ารายการ วิธีนี้จะตีความหลักฐานที่รวบรวมไว้แทนที่จะแทนที่การตรวจสอบระบบไฟล์
ไฟล์ต้องการ r และไม่มีอะไรเพิ่มเติม — เพราะเหตุใด 644 จึงเพียงพอสำหรับไฟล์คงที่ และเหตุใด 755 บนไฟล์จึงไม่ใช่วิธีแก้ไข
สำหรับไฟล์สแตติก 644 แสดงผล rw-r--r-- เจ้าของได้รับการอ่านและเขียน ในขณะที่กลุ่มและอื่น ๆ ได้รับการอ่าน ไม่มีใครได้รับการประหารชีวิต การแปลงนี้แสดงว่าไฟล์ที่อ่านและดำเนินการนั้นเป็นบิตที่แยกจากกัน หน้านี้ไม่มีพื้นฐานในการตัดสินใจว่าเซิร์ฟเวอร์ใดจำเป็นต้องดำเนินการหรือไม่ เนื่องจากไม่มีนโยบายเซิร์ฟเวอร์
แยกคำอธิบายไฟล์และไดเร็กทอรีให้ชัดเจน การดำเนินการไดเรกทอรีหมายถึงการเข้าถึงรายการและตามชื่อ ในขณะที่การดำเนินการไฟล์ปกติหมายถึงการเรียกใช้โปรแกรม ช่องทำเครื่องหมายเดียวกันจึงมีร้อยแก้วเฉพาะเป้าหมาย การเปรียบเทียบ 644 กับ 755 จะชี้แจงบิต แต่ไม่สามารถวินิจฉัย 403 หรือกำหนดโหมดสากลโดยไม่มีการกำหนดค่า ข้อมูลประจำตัว ACL และบริบทนโยบาย
ตัวอย่างการทำงาน: การติดตาม /home/deploy/site/index.html — namei -l บนเส้นทางและบรรทัด ls -l ที่เปิดเผยตัวบล็อก
ตัวอย่างที่ได้รับการสนับสนุนเริ่มต้นหลังจากรวบรวมหลักฐานเส้นทางที่อื่น สมมติว่าส่วนประกอบไดเร็กทอรีคือ 755 และไฟล์สุดท้ายคือ 644 เครื่องคิดเลขเรนเดอร์ไดเร็กทอรีเป็น rwxr-xr-x โดยอธิบายกลุ่มและการดำเนินการอื่น ๆ ว่าเป็นรายการและความสามารถในการเข้าถึง มันแสดงไฟล์เป็น rw-r--r-- อธิบายกลุ่มและการอ่านอื่น ๆ เป็นการเข้าถึงเนื้อหา
หากส่วนประกอบคือ 750 อีกสามองค์ประกอบคือ --- ในขณะที่กลุ่มยังคงอยู่ r-x ความแตกต่างนั้นอาจมีความสำคัญ แต่ไม่ได้พิสูจน์ว่า nginx ใช้สิ่งอื่น เส้นทางไม่สามารถเรียกใช้ namei หรือ ls ดังนั้นหลักฐานภายนอกจึงต้องระบุเส้นทางและโหมด จากนั้นจะซิงโครไนซ์การแสดงทุกรายการเพื่อลดข้อผิดพลาดในการถอดเสียงระหว่างการตรวจสอบ
ตัวอย่างการทำงาน: ตรวจสอบโหมดที่ให้มาสำหรับแต่ละองค์ประกอบของเส้นทาง
การตัดสินใจเป็นเจ้าของยังคงอยู่นอกการแปลงโหมด แผงอ่านว่าไม่มีเจ้าของหรือกลุ่ม และไม่มีการดำเนินการ chown หรือ chgrp ไม่สามารถเลือกระหว่างการใช้งาน การบริการ หรือการเป็นเจ้าของกลุ่มที่ใช้ร่วมกัน หรือประเมินเนื้อหาที่เคลื่อนไหวได้ การตัดสินใจเหล่านั้นจำเป็นต้องมีหลักฐานระบบและปริมาณงานที่ขาดหายไปจากแหล่งที่มา ไม่มีโหมดที่สร้างขึ้นสามารถแทนที่บริบทนั้นได้
เมื่อแก้ไขความเป็นเจ้าของที่อื่นแล้ว ให้เปรียบเทียบว่าโหมดต่างๆ แบ่งการเข้าถึงอย่างไร โหมด 750 ให้สิทธิ์เจ้าของเต็มรูปแบบ อ่านและดำเนินการเป็นกลุ่ม และไม่ให้สิทธิ์แก่ผู้อื่นเลย 755 เพิ่มการอ่านและดำเนินการอื่น ๆ สิ่งนี้ยังคงเป็นเงื่อนไขในการรู้ชั้นเรียนของคนงาน การแสดงตัวอย่างคำสั่ง inert จะไม่เปลี่ยนแปลงความเป็นเจ้าของหรือยืนยันการเข้าถึงเซิร์ฟเวอร์
ตัวเลือกการเป็นเจ้าของยังคงอยู่นอกการแปลงโหมด
การกำหนดค่า การเลือกดัชนี การควบคุมการเข้าถึงที่จำเป็น และพฤติกรรมอัปสตรีมไม่ได้รับการวินิจฉัยที่นี่ ไม่มีแหล่งที่มาใดโหลดการกำหนดค่า nginx ตรวจสอบ URI หรือดัชนี อ่านบันทึก ติดต่ออัปสตรีม หรือสังเกต SELinux หรือ AppArmor การแปลงโหมดที่ให้มาอย่างถูกต้องดังนั้นจึงไม่สามารถระบุได้ว่าเหตุใด nginx จึงส่งคืน 403; หลักฐานเซิร์ฟเวอร์จะต้องตอบคำถามนั้น
รักษาความแตกต่างนี้ไว้เมื่อโหมดดูน่าสงสัย แผงอาจแสดงว่าคลาสไดเร็กทอรีขาดการดำเนินการหรือคลาสไฟล์ขาดการอ่าน แต่ความเกี่ยวข้องขึ้นอยู่กับหลักฐานประจำตัวและเส้นทาง บิตที่อนุญาตก็ไม่สามารถยกเว้นสาเหตุอื่นได้ ระบุให้ชัดเจนว่าโหมดใดอนุญาต จากนั้นกลับสู่การวินิจฉัยเฉพาะเซิร์ฟเวอร์
ไม่ได้รับการวินิจฉัยการกำหนดค่า ดัชนี MAC และต้นทาง
การเข้าถึงเส้นทางอาจขึ้นอยู่กับทุกองค์ประกอบ แต่เครื่องคิดเลขจะเห็นค่าที่ให้มาครั้งละหนึ่งค่า จุดแข็งของมันคือการถอดรหัสที่แม่นยำ: ฐานแปด ข้อความสัญลักษณ์ และช่องทำเครื่องหมายจะยังคงซิงโครไนซ์ ในขณะที่ร้อยแก้วไดเรกทอรีแยกแยะรายการ การแก้ไข และรายการ ช่วยให้การตรวจสอบง่ายขึ้นโดยไม่ต้องแสร้งทำเป็นว่าค้นพบส่วนประกอบใดส่วนประกอบหนึ่งหรือกระบวนการที่พยายามเข้าถึง
สร้างข้อมูลประจำตัวของเซิร์ฟเวอร์และรวบรวมโหมดเส้นทางภายนอกเส้นทางนี้ ถอดรหัสทุกไดเร็กทอรีเป็นไดเร็กทอรีและออบเจ็กต์สุดท้ายเป็นไฟล์ปกติ โดยเน้นที่คลาสที่ได้รับการตรวจสอบจากภายนอก ตรวจสอบการกำหนดค่า ACL และนโยบายบังคับแยกกัน เครื่องคิดเลขจะตรวจสอบความถูกต้องของเลขคณิต แต่ไม่สามารถระบุสาเหตุของ 403 หรือยืนยันการแก้ไขได้