เครื่องมือสำหรับนักพัฒนา · เครื่องคิดเลข Chmod
SSH สิทธิ์เปิดกว้างเกินไป: โหมดที่แน่นอน ~/.ssh ต้องการและเหตุผล
· เหตุใดจึงสำคัญ
chmod ยูนิกซ์ การควบคุมการเข้าถึง
OpenSSH ปฏิเสธคีย์และไฟล์authorized_keysที่ผู้ใช้รายอื่นสามารถอ่านหรือเปลี่ยนแปลงได้ โพสต์นี้แสดงรายการโหมดที่คาดหวัง อธิบายการตรวจสอบ StrictModes และแสดงวิธีการตรวจสอบ
สิทธิ์ 0644 สำหรับ id_ed25519 เปิดเกินไป - คีย์ที่ทำงานเมื่อวานนี้ถูกปฏิเสธหลังจากการคัดลอกไปยังเครื่องใหม่
คีย์ส่วนตัวที่คัดลอกด้วยโหมด 0644 ถอดรหัสเป็น rw-r--r-- เจ้าของอาจอ่านและแก้ไขได้ ในขณะที่กลุ่มและคนอื่นๆ อาจอ่านได้ ค่าที่ตั้งไว้ล่วงหน้าของไฟล์ส่วนตัว 600 จะแสดงผล rw------- แทน โดยปล่อยให้คลาสเหล่านั้นว่างเปล่า นี่เป็นการระบุบิตอย่างแม่นยำ แต่ไม่สามารถพิสูจน์ได้ว่าเหตุใดไคลเอนต์ SSH จึงยอมรับหรือปฏิเสธคีย์
เปรียบเทียบโหมดที่สังเกตได้กับพรีเซ็ตส่วนตัว อินพุต 0644, 644 และ 0o644 เทียบเท่ากัน และการเปลี่ยนเป็น 600 จะลบ group-read และ other-read ในขณะที่ยังคงรักษาการอ่านและเขียนของเจ้าของไว้ คำสั่งที่สร้างขึ้นเป็นแบบเฉื่อย พฤติกรรมของลูกค้า ความเป็นเจ้าของ ACL และอรรถศาสตร์การจัดเก็บข้อมูลจำเป็นต้องมีหลักฐานนอกเหนือจากตัวแปลงนี้
เหตุใดลูกค้าจึงตรวจสอบเลย - รหัสส่วนตัวที่ผู้อื่นสามารถอ่านได้นั้นไม่เป็นส่วนตัวอีกต่อไป ดังนั้น ssh จึงปฏิเสธที่จะเชื่อถือมัน
ป้ายกำกับที่เก็บ 600 “ไฟล์ส่วนตัว” และอธิบายการเข้าถึงแบบเจ้าของเท่านั้น เลขคณิตสนับสนุนคำอธิบายดังกล่าว: 6 ให้สิทธิ์แก่เจ้าของในการอ่านและเขียน ในขณะที่ค่าศูนย์ทั้งสองจะลบสิทธิ์ทั่วไปออกจากกลุ่มและอื่นๆ ผลลัพธ์เชิงสัญลักษณ์คือ rw------- นี่เป็นการพิสูจน์ว่าทุนไม่อยู่ในโหมด ไม่ใช่ว่าลูกค้ายอมรับ
ไม่มีข้อความการใช้งาน OpenSSH, ด้วยตนเอง, การกำหนดค่าหรือรันไทม์ปรากฏขึ้นในแหล่งที่มา ดังนั้นการตั้งค่าล่วงหน้าจึงไม่สามารถสร้างนโยบายการปฏิเสธได้ เครื่องคิดเลขไม่ได้ให้คำมั่นว่าโหมดเดียวจะแก้ไขทุกข้อผิดพลาดหรือตรวจสอบเนื้อหาที่สำคัญได้ มันแสดงให้เห็นได้อย่างน่าเชื่อถือว่าผู้สมัครเปิดเผยการอ่าน เขียน หรือดำเนินการนอกเหนือจากคลาสเจ้าของหรือไม่อีกต่อไป
ป้ายกำกับที่เก็บ 600 ส่วนตัว; นโยบายการปฏิเสธของลูกค้าจำเป็นต้องมีหลักฐาน OpenSSH
พฤติกรรม StrictModes ไม่ได้ถูกนำมาใช้หรือตรวจสอบที่นี่ เบราว์เซอร์ไม่มีเซิร์ฟเวอร์ SSH การตรวจสอบโฮมไดเร็กทอรี การค้นหาความเป็นเจ้าของ หรืออินพุตการกำหนดค่า ไม่สามารถทราบได้ว่ามีการปรึกษาที่ได้รับอนุญาตหรือไม่ ตัวตนอื่นสามารถเขียนไดเร็กทอรีได้หรือไม่ หรือมีการใช้การตั้งค่าหรือไม่ การเข้าสู่โหมดจะทำการแปลง ไม่ใช่การตัดสินใจของ daemon หรือการตรวจสอบระบบไฟล์
บิตที่ถูกต้องและนโยบายที่ถูกต้องเป็นคำถามที่แยกจากกัน โหมด 600 พิสูจน์ rw------- ในขณะที่ 700 พิสูจน์ rwx------ ไม่ระบุความเป็นเจ้าของ ตรวจสอบไดเร็กทอรีพาเรนต์ หรือสร้างโมเดล daemon รวบรวมเอกสารเซิร์ฟเวอร์และหลักฐานระบบไฟล์อย่างอิสระ จากนั้นใช้เครื่องคิดเลขเพื่อถอดรหัสการสังเกตโดยไม่ต้องนำเสนอผลลัพธ์เป็นการตัดสินของ StrictModes หรือทำการตรวจสอบความปลอดภัยให้เสร็จสิ้น
พฤติกรรม StrictModes ไม่ได้ถูกนำมาใช้หรือตรวจสอบที่นี่
โหมด 600 และ 700 ได้รับการจัดส่งเป็นค่าที่ตั้งล่วงหน้าส่วนตัว โหมด 600 ช่วยให้เจ้าของไฟล์สามารถอ่านและเขียนได้ตามปกติ โดยไม่มีกลุ่มหรือสิทธิ์อื่นใด โหมด 700 เพิ่มการดำเนินการของเจ้าของสำหรับไดเร็กทอรี ทำให้สามารถเข้าและเข้าถึงเนื้อหาที่มีชื่อได้ ในขณะที่คลาสอื่น ๆ ไม่ได้รับอะไรเลยผ่านบิตธรรมดา เครื่องคิดเลขยังคงไม่รู้จักเจ้าของที่แท้จริง
กฎไฟล์ที่เกี่ยวข้องกับ SSH อื่นๆ ยังคงเป็นกฎภายนอก แม้ว่าพับลิกคีย์และauthorized_keysอาจเกี่ยวข้องกัน แต่ที่เก็บข้อมูลไม่มีข้อกำหนดที่ตรวจสอบแล้ว เครื่องคิดเลขสามารถถอดรหัส 644 เป็น rw-r--r-- แต่ไม่สามารถรับรองการยอมรับ SSH ได้ ตารางข้อกำหนดที่กว้างขึ้นจำเป็นต้องมีหลักฐาน OpenSSH ที่เชื่อถือได้ซึ่งขาดมาจากแหล่งข้อมูลเหล่านี้และบทความที่มีอยู่
600 และ 700 ได้รับการจัดส่งค่าที่ตั้งล่วงหน้าส่วนตัว กฎไฟล์ SSH อื่นๆ ยังคงอยู่ภายนอก
ตัวอย่างที่รองรับจะแปลงสตริงรายการโดยไม่ต้องตรวจสอบไดเร็กทอรี หากเอาต์พุตภายนอกแสดง -rw-r--r-- ตัวแยกวิเคราะห์จะส่งคืน 644; ถ้ามันแสดง rw------- มันจะส่งคืน 600 เมทริกซ์จะไฮไลต์กล่องอ่านกลุ่มและกล่องอ่านอื่นๆ ที่เปลี่ยนแปลง วิธีนี้จะตรวจสอบการถอดเสียงและเลขคณิตในขณะที่ออกจากเส้นทาง ความเป็นเจ้าของ และที่มาของรายการโดยไม่ได้รับการตรวจสอบ
สตริงไดเรกทอรีทำงานในลักษณะเดียวกัน drwx------ ที่ให้มากลายเป็น 700 เนื่องจากอักขระประเภทที่รู้จักถูกลบออกก่อนที่จะแยกวิเคราะห์ตำแหน่งการอนุญาตเก้าตำแหน่ง ข้อมูลสรุปสามารถแสดงคำนำหน้าไดเร็กทอรี หน้านี้ไม่มีรายการ ~/.ssh หรือค้นพบไฟล์ เจ้าของ หรือตัวบ่งชี้ ACL ดังนั้นการแปลงนี้จะต้องไม่ถูกอธิบายว่าเป็นการตรวจสอบ
ตัวอย่างการทำงาน: แปลงสตริงโหมดที่คัดลอกโดยไม่ต้องตรวจสอบไดเร็กทอรี
การสูญเสียโหมดในเครื่องมือถ่ายโอนและระบบไฟล์อยู่นอกหลักฐานที่เก็บข้อมูล ไม่มีแหล่งที่มาใดที่คัดลอกไฟล์ เปิดไฟล์เก็บถาวร ติดตั้งที่เก็บข้อมูล หรือเปรียบเทียบข้อมูลเมตาระหว่างสถานที่ต่างๆ เครื่องคิดเลขไม่สามารถระบุแหล่งที่มาของ 644 ที่สังเกตได้จากการแชร์ ไดรฟ์ ระบบการเริ่มต้น หรือยูทิลิตี้การเก็บถาวร จะเห็นเฉพาะโหมดที่พิมพ์ลงในช่อง โดยไม่มีประวัติการถ่ายโอน
เมื่อรายการที่คัดลอกมีโหมดที่ไม่คาดคิด ให้เปรียบเทียบค่าที่คาดหวังและค่าที่สังเกตได้โดยไม่กำหนดตำหนิ ระหว่าง 600 ถึง 644 สิทธิ์ของเจ้าของจะไม่เปลี่ยนแปลงในขณะที่การอ่านแบบกลุ่มและการอ่านแบบอื่นปรากฏขึ้น ตัวแปลงรองรับเดลต้าที่แน่นอนนั้น การพิจารณาว่าการถ่ายโอน การอนุรักษ์ หรือการนันทนาการเกิดขึ้นนั้น จำเป็นต้องมีหลักฐานจากจุดหมายปลายทางและเส้นทางการโอน
การสูญเสียโหมดในเครื่องมือถ่ายโอนและระบบไฟล์ถือเป็นหลักฐานนอกพื้นที่เก็บข้อมูล
รูปแบบคีย์ สถานะตัวแทน และบันทึกเซิร์ฟเวอร์อยู่นอกเครื่องคิดเลขนี้ โดยแยกวิเคราะห์ข้อความสิทธิ์แบบแปดและสัญลักษณ์ ไม่ใช่คีย์ส่วนตัว ข้อมูล ssh-agent หรือบันทึก การแปลง 600 ที่ถูกต้องไม่ได้กล่าวถึงเนื้อหาที่เข้ารหัส ข้อมูลระบุตัวตนที่โหลด การแลกเปลี่ยนเครือข่าย หรือการตอบสนองของเซิร์ฟเวอร์ พิสูจน์ได้ว่ามีเพียงเจ้าของเท่านั้นที่อ่านและเขียนด้วยกลุ่มว่างและคลาสอื่นๆ
ขอบเขตนี้ป้องกันไม่ให้ถือว่าทุกความล้มเหลว SSH เป็นงาน chmod หากโหมดที่สังเกตแตกต่างจากค่าที่ตั้งล่วงหน้าส่วนตัว เครื่องคิดเลขจะแสดงบิตที่แน่นอน หากตรงกันแล้ว เส้นทางจะไม่เสนอหลักฐาน SSH เพิ่มเติม ดำเนินการวินิจฉัยภายนอกต่อไปแทนที่จะขยายการเข้าถึง การแปลงที่สำเร็จไม่ใช่การรับรองความถูกต้อง และการดูตัวอย่างไม่ได้ดำเนินการใดๆ
Takeaway: ส่วนตัวหมายถึง 600 และ 700 — และเครื่องคิดเลขจะยืนยันว่าโหมดที่คุณกำลังตั้งค่าจะไม่ให้อะไรเลยกับกลุ่มหรือผู้อื่น
สิ่งที่ได้รับการสนับสนุนจากพื้นที่เก็บข้อมูลคือ 600 และ 700 สงวนสิทธิ์ตามปกติสำหรับเจ้าของ รูปแบบสัญลักษณ์ rw------- และ rwx------ ไม่มีกลุ่มหรือทุนอื่นใด ข้อความสัญลักษณ์ฐานแปด ช่องทำเครื่องหมาย และสรุปจะตรวจสอบการแสดงเหล่านั้น ในขณะที่ตำแหน่งที่มีรูปแบบไม่ถูกต้องจะถูกปฏิเสธ สิ่งนี้ไม่ได้พิสูจน์ SSH การยอมรับ ความเป็นเจ้าของ ความถูกต้องของคีย์ หรือการรับรองความถูกต้อง
อย่าเปลี่ยนการแปลงเป็นนโยบายสากล SSH เส้นทางไม่ได้ใช้ StrictModes ตรวจสอบโฮมไดเร็กทอรี ระบุเจ้าของ หรือตรวจสอบไฟล์คีย์ ใช้เพื่อยืนยันกลุ่มว่างและคลาสอื่นๆ จากนั้นอาศัยหลักฐาน SSH ที่น่าเชื่อถือและระบบจริง การคัดลอกคำสั่งที่แสดงจะโอนความรับผิดชอบไปยังเชลล์และระบบไฟล์