อ่าน 7 นาที
สิทธิ์การเข้าถึงไฟล์ระบบ
โดยทั่วไป ระบบไฟล์ จะเก็บ รักษาการตั้ง ค่าสิทธิ์ สำหรับแต่ละรายการที่จัดเก็บไว้ ซึ่งโดยทั่วไปคือ ไฟล์ และ ไดเร็กทอรี โดยจะอนุญาตหรือปฏิเสธความสามารถในการจัดการรายการในระบบไฟล์...
สิทธิ์การเข้าถึงไฟล์ระบบ
โดยทั่วไประบบไฟล์จะเก็บ รักษาการตั้ง ค่าสิทธิ์สำหรับแต่ละรายการที่จัดเก็บไว้ ซึ่งโดยทั่วไปคือไฟล์และไดเร็กทอรีโดยจะอนุญาตหรือปฏิเสธความสามารถในการจัดการรายการในระบบไฟล์ บ่อยครั้งที่การตั้งค่าจะอนุญาตให้ควบคุมการเข้าถึงตามฟังก์ชัน เช่น การอ่าน การเปลี่ยนแปลง การนำทาง และการเรียกใช้งานรวมถึงผู้ใช้และกลุ่มผู้ใช้ ต่างๆ
เทคโนโลยีที่ได้รับการยอมรับอย่างดีอย่างหนึ่งได้รับการพัฒนาสำหรับUnixซึ่งต่อมาได้รับการกำหนดเป็นรหัสโดยPOSIXและใช้ในLinux [ 1 ]เทคโนโลยีทั่วไปอีกอย่างหนึ่งคือรายการควบคุมการเข้าถึง (ACL) ซึ่งมีหลายรูปแบบที่นำไปใช้ในระบบไฟล์และรูปแบบหนึ่งที่กำหนดเป็นรหัสโดย POSIX เนื่องจาก POSIX กำหนดทั้งเทคโนโลยีแบบเก่าที่ใช้ Unix และ ACL ดังนั้นเทคโนโลยีแบบเก่าจึงเรียกว่าสิทธิ์ POSIX แบบดั้งเดิมเพื่อความชัดเจน แม้ว่าจะเป็นคำที่ไม่เป็นที่รู้จักมากนักก็ตาม
อินเทอร์เฟซผู้ใช้ที่ขับเคลื่อนด้วยสิทธิ์จะปรับแต่งฟังก์ชันการทำงานที่มีให้แก่ผู้ใช้ตามสิทธิ์ของรายการในระบบไฟล์ ตัวอย่างเช่น อินเทอร์เฟซอาจซ่อนตัวเลือกเมนูที่ไม่ได้รับอนุญาตตามสิทธิ์ที่จัดเก็บไว้สำหรับรายการนั้น
ประวัติศาสตร์
ซีทีเอสเอส
ระบบแบ่งเวลาใช้งานในยุคแรกๆ ที่เรียกว่า Compatible Time-Sharing System (CTSS) รองรับผู้ใช้หลายคน โดยบัญชีผู้ใช้แต่ละบัญชีจะมี "หมายเลขปัญหา" และ "หมายเลขโปรแกรมเมอร์" [ 2 ]
ระบบไฟล์ CTSS เวอร์ชันแรกสนับสนุนโหมดไฟล์ "อ่านอย่างเดียว" เพียงสองโหมด โดยโหมดหนึ่งสามารถยกเลิกการตั้งค่าได้โดยผู้ใช้ และอีกโหมดหนึ่งสามารถยกเลิกการตั้งค่าได้เฉพาะเมื่อส่งการ์ดแก้ไขไปยังศูนย์คอมพิวเตอร์เท่านั้น[ 2 ] : 45–46 ไฟล์สามารถแชร์ระหว่างผู้ใช้ในโครงการเดียวกันได้ โดยไฟล์ที่แชร์จะถูกกำหนดให้กับโปรแกรมเมอร์หมายเลขศูนย์[ 2 ] : 24 ไม่มีการป้องกันอื่นใดนอกเหนือจากที่จัดให้โดยบิตอ่านอย่างเดียว
ระบบไฟล์เวอร์ชันที่สองมีบิตสิทธิ์แยกต่างหากสำหรับ "อ่านอย่างเดียว" และ "เขียนอย่างเดียว" โดยแบบหลังอนุญาตให้เพิ่มข้อมูลลงในไฟล์ได้เท่านั้น นอกจากนี้ยังมีบิต "ส่วนตัว" ซึ่งอนุญาตให้เฉพาะผู้เขียนไฟล์เท่านั้นที่สามารถเข้าถึงได้ และบิต "ป้องกัน" ซึ่งอนุญาตให้เฉพาะผู้เขียนไฟล์เท่านั้นที่สามารถเปลี่ยนแปลงสิทธิ์ของไฟล์ได้[ 3 ]
มัลติซีส์
ผู้ใช้ในระบบแบ่งเวลาMultics มี "Person_id" และโครงการมี "Project_id" ผู้ใช้จะล็อกอินเข้าสู่ระบบด้วย Person_id และ Project_id ไฟล์จะมี รายการควบคุมการเข้าถึง (ACL) โดยมีรายการต่างๆ ที่ประกอบด้วย Person_id หรือ "*", Project_id หรือ "*" และ "instance tag" หรือ "*" instance tag แสดงถึงประเภทของกระบวนการ ตัวอย่างเช่น "a" แสดงถึงกระบวนการจากเซสชันแบบโต้ตอบปกติ รายการใน ACL จะถูกจับคู่กับ Person_id, Project_id และ instance tag ของกระบวนการ "*" เป็นตัวอักษรแทน (wildcard) ที่ตรงกับ Person_id, Project_id หรือ instance tag ทั้งหมด รายการ ACL ที่ตรงกับตัวอักษรแทนน้อยที่สุดจะเป็นรายการที่ถูกนำมาใช้[ 4 ] : 6–2, 6-46-8
ACL สำหรับไฟล์มีสิทธิ์การเข้าถึง "อ่าน" "เขียน" และ "เรียกใช้"; ACL สำหรับไดเร็กทอรีมีสิทธิ์การเข้าถึง "สถานะ" (อนุญาตให้อ่านคุณสมบัติของไฟล์และไดเร็กทอรีในไดเร็กทอรี) "แก้ไข" (อนุญาตให้แก้ไขคุณสมบัติของไฟล์และไดเร็กทอรีในไดเร็กทอรีและลบรายการออกจากไดเร็กทอรี) และ "เพิ่ม" (อนุญาตให้เพิ่มรายการใหม่ลงในไดเร็กทอรี) [ 4 ] : 6-3
เทเน็กซ์
ผู้ใช้ในTENEXเป็นสมาชิกของกลุ่มต่างๆ[ 5 ] : 44
ไฟล์หรือไดเร็กทอรีมีชุดบิตสิทธิ์ โดยมีหกบิตสำหรับสิทธิ์ของเจ้าของไฟล์หรือไดเร็กทอรี หกบิตสำหรับสิทธิ์ของผู้ใช้รายอื่นในกลุ่มของไฟล์หรือไดเร็กทอรี และหกบิตสำหรับผู้ใช้รายอื่น สำหรับไฟล์ บิตสิทธิ์คือ "อ่าน" "เขียน" "เรียกใช้" "เพิ่มต่อท้าย" และ "แต่ละหน้าของไฟล์มีสิทธิ์ของตัวเอง" โดยบิตที่หกไม่ได้ถูกใช้งาน สำหรับไดเร็กทอรี บิตสิทธิ์คือ "อนุญาตให้เข้าถึง" (หากไม่ได้ตั้งค่า จะไม่ได้รับอนุญาตให้เข้าถึงไดเร็กทอรี) "สามารถเปิดไฟล์ในไดเร็กทอรีได้" (ขึ้นอยู่กับบิตสิทธิ์ของไฟล์) "สามารถดำเนินการฟังก์ชันที่คล้ายกับเจ้าของได้โดยไม่ต้องใช้รหัสผ่านของไฟล์" และ "สามารถเพิ่มไฟล์ลงในไดเร็กทอรีได้" โดยบิตที่ห้าและหกไม่ได้ถูกใช้งาน[ 5 ] : 42–44
ท็อปส์-10
บัญชีผู้ใช้ในTOPS-10จะมีหมายเลขโปรแกรมเมอร์และหมายเลขโครงการ
ไฟล์จะมีชุดบิตสิทธิ์การเข้าถึง โดยมีสามบิตสำหรับสิทธิ์ของเจ้าของไฟล์ สามบิตสำหรับสิทธิ์ของผู้ใช้รายอื่นที่มีหมายเลขโครงการเดียวกันกับเจ้าของ และสามบิตสำหรับผู้ใช้รายอื่นทั้งหมด ระบบปฏิบัติการอาจถูกกำหนดค่าให้ถือว่าบัญชีใดๆ ที่มีหมายเลขโปรแกรมเมอร์เดียวกันกับหมายเลขโปรแกรมเมอร์ของไดเร็กทอรีที่เก็บไฟล์เป็นเจ้าของ หรืออาจถือว่าเฉพาะบัญชีที่มีหมายเลขโปรแกรมเมอร์และหมายเลขโครงการเดียวกันกับของไดเร็กทอรีที่เก็บไฟล์เป็นเจ้าของเท่านั้น ค่าของบิตสิทธิ์การเข้าถึงมีดังนี้:
- 7 - ไม่มีสิทธิ์ในการเข้าถึงใดๆ ยกเว้นเจ้าของไฟล์ที่สามารถค้นหาไฟล์เพื่อเปลี่ยนแปลงสิทธิ์การเข้าถึงได้
- 6 - เรียกใช้งานอย่างเดียว;
- 5 - อ่านและดำเนินการ;
- 4 - เพิ่มข้อมูล อ่านข้อมูล และประมวลผลข้อมูล
- 3 - อัปเดต เพิ่มข้อมูล อ่าน และดำเนินการ;
- 2 - เขียน อัปเดต เพิ่มข้อมูล อ่าน และเรียกใช้งาน
- 1 - เปลี่ยนชื่อ เขียน อัปเดต เพิ่มข้อมูล อ่าน และเรียกใช้งาน
- 0 - เปลี่ยนสิทธิ์การเข้าถึง เปลี่ยนชื่อ เขียน แก้ไข เพิ่มข้อมูล อ่าน และเรียกใช้งาน
เจ้าของสามารถเปลี่ยนแปลงสิทธิ์การเข้าถึงได้เสมอ[ 6 ]
ระบบยูนิกซ์และระบบที่คล้ายยูนิกซ์
ไฟล์ในระบบ ปฏิบัติการ Unixรุ่นแรก(v1) มีสิทธิ์การเข้าถึงห้าบิต:
- เขียนโดยผู้ที่ไม่ใช่เจ้าของ;
- อ่านแล้ว (ไม่ใช่เจ้าของ)
- เขียนโดยเจ้าของ;
- อ่านแล้วครับ/ค่ะ เจ้าของ;
- ไฟล์ปฏิบัติการ;
และบิตset-UID [ 7 ]ไม่มีแนวคิดเรื่องกลุ่ม สิ่งนี้ยังคงดำเนินต่อไปจนถึงฉบับที่สาม (v3) [ 8 ]ฉบับที่สี่ (v4) ได้แนะนำกลุ่ม และไฟล์ใน v4 มีสิทธิ์เก้าบิต
- อ่านแล้วครับ/ค่ะ เจ้าของ;
- เขียนโดยเจ้าของ;
- ดำเนินการ เจ้าของ;
- อ่าน, กลุ่ม;
- เขียน, จัดกลุ่ม;
- ดำเนินการ จัดกลุ่ม;
- อ่าน, อื่นๆ;
- เขียน, อื่นๆ;
- ดำเนินการอื่นๆ;
รวมถึงบิต set-UID และ set-GIDด้วย[ 9 ]นี่คือชุดสิทธิ์เดียวกันกับที่ระบุไว้ในPOSIXและที่จัดเตรียมโดยระบบ Unix และระบบ ที่คล้าย Unix ในปัจจุบัน
ตัวอย่าง
การกำหนดสิทธิ์การเข้าถึงไฟล์ในระบบมีหลายวิธี ตัวอย่างที่น่าสนใจบางส่วนได้อธิบายไว้ในที่นี้
NTFSซึ่งมีอยู่ในWindows หลายเวอร์ชัน รวมถึงเวอร์ชันปัจจุบันใช้ ACL เพื่อให้การควบคุมการเข้าถึงตามสิทธิ์ NTFS ACL ถือว่ามีประสิทธิภาพแต่ซับซ้อน[ 10 ]
ระบบไฟล์ Linuxเช่นext2 , ext3 , ext4 , Btrfsรองรับทั้งสิทธิ์ POSIX และ ACL POSIX.1e มีการรองรับ ACL NFSv4 แบบทดลองสำหรับระบบไฟล์ ext3 [ 11 ]และ ext4
FreeBSDรองรับ ACL ตามมาตรฐาน POSIX.1e บน UFS และ ACL ตามมาตรฐาน NFSv4 บน UFS และ ZFS [ 12 ] [ 13 ]
HFSและHFS+ซึ่งเป็นรุ่นต่อจาก HFS ที่ใช้ใน ระบบปฏิบัติการ Mac OS รุ่นคลาสสิกไม่รองรับการกำหนดสิทธิ์การเข้าถึง
macOSรองรับสิทธิ์การเข้าถึงที่สอดคล้องกับ POSIX และรองรับทั้งใน HFS+ และAPFSตั้งแต่เวอร์ชัน 10.4 ("Tiger") เป็นต้นไป ยังรองรับการใช้ ACL ของ NFSv4 นอกเหนือจากสิทธิ์การเข้าถึงที่สอดคล้องกับ POSIX ด้วยคู่มือการดูแลระบบไฟล์ของ Apple Mac OS X Server เวอร์ชัน 10.4+แนะนำให้ใช้สิทธิ์การเข้าถึงแบบ Unix ดั้งเดิมเท่านั้นหากเป็นไปได้ macOS ยังคงรองรับคุณลักษณะ "Protected"/"Locked" ของ Classic Mac OS เป็นแฟล็ก "user immutable" ในฟิลด์แฟล็ก 4.4BSD [ 14 ]
ตารางการจัดสรรไฟล์ (เวอร์ชันดั้งเดิม) มีคุณสมบัติอ่านอย่างเดียวต่อไฟล์ ซึ่งมีผลกับผู้ใช้ทุกคน
OpenVMSกำหนดฟังก์ชันการเข้าถึงสี่ฟังก์ชัน ได้แก่ อ่าน เขียน เรียกใช้ และลบ และการเลือกผู้ใช้ ได้แก่ ระบบ เจ้าของ กลุ่ม และโลก โดยที่โลกจะรวมถึงกลุ่ม ซึ่งในทางกลับกันจะรวมถึงเจ้าของ และระบบจะเลือกผู้ใช้ระบบ การออกแบบนี้คล้ายกับของ Unix โดยมีส่วนขยายที่โดดเด่น ได้แก่ ฟังก์ชันเพิ่มเติม: ลบ และการเลือกผู้ใช้เพิ่มเติม: ระบบ[ 15 ] ACL ได้รับการสนับสนุนใน VMS 4.0 และเวอร์ชันที่ใหม่กว่า[ 16 ]
การรองรับ ACL ของ Solarisขึ้นอยู่กับระบบไฟล์ที่ใช้ ระบบไฟล์ UFS รุ่นเก่า รองรับ ACL ตามมาตรฐาน POSIX.1e ในขณะที่ZFSรองรับเฉพาะ ACL ตามมาตรฐาน NFSv4 เท่านั้น[ 17 ]
IBM z/OSใช้การรักษาความปลอดภัยไฟล์โดยใช้ RACF (Resource Access Control Facility) [ 18 ]
ระบบไฟล์ AmigaOS หรือ AmigaDOSรองรับระบบการอนุญาตที่ค่อนข้างล้ำหน้าสำหรับระบบปฏิบัติการผู้ใช้คนเดียว ใน AmigaOS 1.x ไฟล์จะมีสิทธิ์การเข้าถึงแบบ Archive, Read, Write, Execute และ Delete (เรียกรวมกันว่า ARWED) ใน AmigaOS 2.x และเวอร์ชันที่สูงกว่านั้น ได้มีการเพิ่มสิทธิ์การเข้าถึงแบบ Hold, Script และ Pure เข้ามา
ระบบปฏิบัติการ OpenHarmonyพร้อมกับระบบนิเวศฝั่งไคลเอ็นต์ใน Oniro OS และHarmonyOSพร้อมด้วย เวอร์ชัน HarmonyOS NEXTและระบบปฏิบัติการเซิร์ฟเวอร์openEuler ที่ใช้ Linux ใช้ Harmony Distributed File System (HMDFS) ซึ่งรองรับตัวจัดการโทเค็นการเข้าถึง ( การควบคุมการเข้าถึงตามบทบาท ) และความสามารถของ Core File Kit API พร้อมการจัดการสิทธิ์แบบละเอียด ยกเว้น openEuler ที่มีการจัดการสิทธิ์แบบละเอียด[ 19 ]
สิทธิ์การเข้าถึงแบบ POSIX ดั้งเดิม
ตามธรรมเนียมแล้ว สิทธิ์การเข้าถึงไฟล์บนระบบไฟล์แบบ Unix จะถูกกำหนดโดย POSIX.1 [ 20 ]โดยระบุคลาสสามคลาส (ผู้ใช้ กลุ่ม และอื่นๆ) ที่อนุญาตให้แมปสิทธิ์การเข้าถึงให้กับผู้ใช้ และการดำเนินการสามอย่าง (อ่าน เขียน เรียกใช้) ที่สามารถให้หรือปฏิเสธได้สำหรับแต่ละคลาส เมื่อสร้างไฟล์ สิทธิ์การเข้าถึงไฟล์จะเริ่มต้นตามสิทธิ์ที่สามารถเข้าถึงได้ผ่านumaskคำสั่ง
ในระบบไฟล์แบบยูนิกซ์ ทุกอย่างล้วนเป็นไฟล์ แม้แต่ไดเร็กทอรีและไฟล์พิเศษอื่นๆ
ชั้นเรียน
คลาสต่างๆ จะกำหนดวิธีการกำหนดสิทธิ์ให้กับผู้ใช้ สิทธิ์ ในคลาสผู้ใช้จะใช้กับผู้ใช้ที่เป็นเจ้าของไฟล์ สิทธิ์ ในคลาสกลุ่ม จะใช้กับผู้ใช้ใน กลุ่ม ที่เป็นเจ้าของไฟล์ และสิทธิ์ในคลาสอื่นๆจะใช้กับผู้ใช้รายอื่นๆ
สิทธิ์การใช้งานที่มีผลบังคับใช้คือ สิทธิ์ของกลุ่มที่ผู้ใช้จัดอยู่ ในลำดับ แรกโดยเรียงลำดับจากมากไปน้อยดังนี้ ผู้ใช้ กลุ่ม แล้วจึงเป็นบุคคลอื่น ตัวอย่างเช่น ผู้ใช้ที่เป็นเจ้าของจะมีสิทธิ์การใช้งานที่มีผลบังคับใช้ของกลุ่มผู้ใช้ แม้ว่าเขาจะอยู่ในกลุ่มที่เป็นเจ้าของก็ตาม
สิทธิ์การเข้าถึง
สิทธิ์ต่อไปนี้จะอนุญาตให้ดำเนินการต่างๆ กับไฟล์และไดเร็กทอรีได้:
อ่าน (r)
- สำหรับไฟล์: อนุญาตให้สามารถอ่านเนื้อหาของไฟล์ได้ (ไม่ใช่ชื่อไฟล์หรือข้อมูลเมตา ซึ่งถูกกำหนดโดยสิทธิ์ของไดเร็กทอรีแม่)
- สำหรับไดเร็กทอรี: อนุญาตให้สามารถอ่านชื่อรายการไดเร็กทอรีของไฟล์และไดเร็กทอรีที่อยู่ภายในได้ แต่ไม่สามารถเข้าถึงเมตาเดตา ( inode ) และเนื้อหาของไฟล์และไดเร็กทอรีเหล่านั้นได้ ซึ่งเนื้อหาจะถูกกำหนดโดยสิทธิ์ในการเรียกใช้งาน ของไดเร็กทอรี
เขียน (w)
- สำหรับไฟล์: อนุญาตให้แก้ไขเนื้อหาของไฟล์ได้
- สำหรับไดเร็กทอรี: อนุญาตให้แก้ไขรายการในไดเร็กทอรี ซึ่งอนุญาตให้สร้าง ลบ และเปลี่ยนชื่อไฟล์หรือไดเร็กทอรีได้
- การกระทำดังกล่าวจำเป็นต้อง มีสิทธิ์ ในการเรียกใช้งานเพื่อเข้าถึงเมตาเดตา ( inode ) ของไฟล์และไดเร็กทอรีทั้งหมดที่เกี่ยวข้อง ดังนั้น หากไม่มีสิทธิ์ในการเรียกใช้งาน สิทธิ์ ในการเขียนก็แทบจะไม่มีความหมายเลย
ดำเนินการ (x)
- สำหรับไฟล์: อนุญาตให้เรียกใช้ไฟล์ได้ ต้องตั้งค่าสิทธิ์นี้สำหรับโปรแกรมที่สามารถเรียกใช้งานได้
- การดำเนินการดังกล่าวจำเป็นต้องได้ รับสิทธิ์ในการอ่านด้วย
- สำหรับไดเร็กทอรี: อนุญาตให้สามารถอ่านเมตาเดตาของไฟล์และไดเร็กทอรีที่อยู่ภายในได้ หากทราบชื่อของไฟล์และไดเร็กทอรีเหล่านั้น แต่ไม่อนุญาตให้สามารถอ่านชื่อของไฟล์และไดเร็กทอรีเหล่านั้นได้ ไดเร็กทอรีที่ไม่มี สิทธิ์ ในการเรียกใช้งานจะปิดกั้นการอ่านและการเขียนเนื้อหาของไฟล์และไดเร็กทอรีที่อยู่ภายในอย่างมีประสิทธิภาพ
- โฟลเดอร์ที่มี สิทธิ์ ในการเรียกใช้งานแต่ไม่มี สิทธิ์ ในการอ่านจะทำให้การเข้าถึงเนื้อหาภายในไฟล์และโฟลเดอร์เหล่านั้นกลายเป็นเรื่องของการเดาชื่อไฟล์ไปโดยปริยาย
ข้อกำหนดการเข้าถึงทั่วไปภายในไดเร็กทอรี
การเข้าถึงเนื้อหาของไฟล์หรือไดเร็กทอรีภายในไดเร็กทอรีนั้น ต้องใช้:
- การรู้ชื่อของไดเร็กทอรีนั้นสามารถค้นหาได้หากมีการตั้งค่าสิทธิ์ การอ่านในไดเร็กทอรีแม่(หรือโดยการเดาชื่อ)
- ไดเร็กทอรีแม่มี สิทธิ์ในการเข้าถึง inodeของไฟล์หรือไดเร็กทอรีนั้น
- สิทธิ์ในการอ่านเขียนหรือเรียกใช้งานที่เกี่ยวข้อง
สรุปข้อกำหนดด้านสิทธิ์อนุญาตสำหรับการดำเนินการกับไฟล์
ในการอ่านข้อมูลจากไฟล์ คุณต้องมีสิ่งต่อไปนี้:
- สิทธิ์ในการอ่านไฟล์
- ให้สิทธิ์ ในการเรียกใช้งานในไดเร็กทอรีแม่ของมัน
ในการเขียนข้อมูลลงไฟล์ คุณต้องมี:
- สิทธิ์ในการเขียนไฟล์
- ให้สิทธิ์ ในการเรียกใช้งานในไดเร็กทอรีแม่ของมัน
ในการเรียกใช้ไฟล์ คุณต้องมีสิ่งต่อไปนี้:
- ไฟล์นี้มีสิทธิ์ในการอ่านและเรียกใช้งาน
- ให้สิทธิ์ ในการเรียกใช้งานในไดเร็กทอรีแม่ของมัน
หากต้องการทราบชื่อไฟล์ คุณต้องใช้ข้อมูลต่อไปนี้:
- สิทธิ์ ในการอ่านของไดเร็กทอรีแม่
ในการเพิ่ม ลบ หรือเปลี่ยนชื่อไฟล์ คุณต้องทำตามขั้นตอนต่อไปนี้:
- มีสิทธิ์ ในการเขียนและเรียกใช้งานในไดเร็กทอรีแม่ของมัน
หมายเหตุ
โดยทั่วไป เมตาเดต้าของไฟล์หรือไดเร็กทอรีจะประกอบด้วยรหัส inode , ประเภทไฟล์, ขนาดไฟล์, กรรมสิทธิ์ (GUI และ UID) และบิตสิทธิ์การเข้าถึง
ผลของการตั้งค่าสิทธิ์การเข้าถึงบนไดเร็กทอรี แทนที่จะเป็นไฟล์ ถือเป็น "หนึ่งในประเด็นสิทธิ์การเข้าถึงไฟล์ที่เข้าใจผิดบ่อยที่สุด" [ 21 ]
ต่างจากระบบที่ใช้ ACL สิทธิ์การเข้าถึงเหล่านี้จะไม่ถูกสืบทอด ไฟล์ที่สร้างขึ้นภายในไดเร็กทอรีหนึ่งๆ ไม่จำเป็นต้องมีสิทธิ์การเข้าถึงเหมือนกับไดเร็กทอรีที่บรรจุอยู่เสมอไป
การเปลี่ยนพฤติกรรมการอนุญาตด้วย setuid, setgid และ sticky bits
แต่ละไฟล์จะมีแอตทริบิวต์แบบบิตเดียวเพิ่มเติมอีกสามรายการที่เกี่ยวข้องกับสิทธิ์การเข้าถึง ซึ่งจะถูกจัดเก็บไว้ในโหมดไฟล์พร้อมกับสิทธิ์การเข้าถึงเหล่านั้น
- โหมดsetuser ID , setuidหรือ SUID การเรียกใช้ไฟล์โดยตั้งค่าบิตนี้ จะส่งผลให้กระบวนการทำงานมีuser IDเป็นผู้ใช้ที่เป็นเจ้าของไฟล์นั้น ซึ่งจะทำให้ผู้ใช้สามารถถูกมองว่าเป็น root (หรือผู้ใช้อื่น) ได้ชั่วคราว
- สิทธิ์ การตั้งค่ากลุ่ม ID , setgidหรือ SGID การเรียกใช้ไฟล์ที่มีบิตนี้ตั้งค่าไว้ จะส่งผลให้กระบวนการนั้นมีกลุ่ม IDเป็นกลุ่มที่เป็นเจ้าของไฟล์ เมื่อนำไปใช้กับไดเร็กทอรี ไฟล์และไดเร็กทอรีใหม่ที่สร้างขึ้นภายใต้ไดเร็กทอรีนั้นจะได้รับกลุ่มจากไดเร็กทอรีนั้น (พฤติกรรมเริ่มต้นคือการใช้กลุ่มหลักของผู้ใช้ที่มีผลบังคับใช้เมื่อตั้งค่ากลุ่มของไฟล์และไดเร็กทอรีใหม่ ยกเว้นในระบบที่สืบทอดมาจาก BSD ซึ่งจะทำงานราวกับว่าบิต setgid ถูกตั้งค่าไว้เสมอในทุกไดเร็กทอรี (ดูSetuid ))
- โหมดเหนียว (หรือที่เรียกว่า โหมด ข้อความ ) พฤติกรรมดั้งเดิมของบิตเหนียวในไฟล์ปฏิบัติการคือการกระตุ้นให้เคอร์เนลเก็บภาพกระบวนการที่ได้ไว้ในหน่วยความจำหลังจากสิ้นสุดการทำงาน อย่างไรก็ตาม ปัจจุบันการใช้บิตเหนียวดังกล่าวถูกจำกัดไว้เฉพาะระบบปฏิบัติการที่คล้าย Unix เพียงส่วนน้อย ( HP-UXและUnixWare ) บนไดเร็กทอรี สิทธิ์เหนียวจะป้องกันไม่ให้ผู้ใช้เปลี่ยนชื่อ ย้าย หรือลบไฟล์ที่อยู่ในนั้นเป็นของผู้ใช้อื่นที่ไม่ใช่ตนเอง แม้ว่าผู้ใช้นั้นจะมีสิทธิ์เขียนในไดเร็กทอรีก็ตาม ยกเว้นเจ้าของไดเร็กทอรีและผู้ใช้ระดับสูงสุดเท่านั้น
การเป็นตัวแทน
โดยทั่วไปแล้ว สิทธิ์อนุญาตจะแสดงในรูปแบบสัญลักษณ์หรือระบบเลขฐานแปด
สัญกรณ์เชิงสัญลักษณ์
มีการใช้สัญลักษณ์ในรูปแบบเอาต์พุตแบบยาวของคำสั่งls -l.
อักขระตัวแรกของผลลัพธ์บ่งบอกถึงประเภทไฟล์ Unixซึ่งไม่ใช่สิทธิ์การเข้าถึง แม้ว่าจะอยู่ถัดจากข้อมูลสิทธิ์การเข้าถึงก็ตาม อักขระอีกเก้าตัวที่เหลือแสดงถึงสิทธิ์การเข้าถึงสำหรับผู้ใช้ กลุ่ม และคลาสอื่นๆ ในรูปแบบของกลุ่มสิทธิ์การเข้าถึงสำหรับการอ่าน การเขียน และการเรียกใช้งาน การดำเนินการจะถูกปฏิเสธเมื่อแสดงเป็นเครื่องหมายขีดกลาง หรือได้รับอนุญาตเมื่อแสดงเป็นสำหรับrการอ่านwการเขียน หรือxการเรียกใช้งาน
ตัวอย่าง:
-rwxr-xr-x: เครื่องหมาย : ตัวแรก-แสดงว่าเป็นไฟล์ปกติ เครื่องหมาย : สามตัวถัดไปrwxแสดงว่าคลาสผู้ใช้มีสิทธิ์ทั้งหมด และคลาสกลุ่มและคลาสอื่นๆ (ทั้งสองแบบr-x) มีเพียงสิทธิ์อ่านและเรียกใช้งานได้เท่านั้นcrw-rw-r--: ค่าเริ่มต้นcบ่งชี้ถึงไฟล์อักขระพิเศษ คลาสผู้ใช้และกลุ่ม (ทั้งสองrw-) มีสิทธิ์ในการอ่านและเขียน และคลาสอื่นๆ (r--) มีสิทธิ์ในการอ่านเท่านั้นdr-x------: ค่าเริ่มต้นdบ่งชี้ถึงไดเร็กทอรี คลาสผู้ใช้ (r-x) มีสิทธิ์ในการอ่านและเรียกใช้งาน และคลาสกลุ่มและคลาสอื่นๆ (ทั้งสอง---) ไม่มีสิทธิ์ใดๆ
ในการแสดง แอตทริบิวต์ setuid , setgidและsticky/textนั้น อักขระในตำแหน่งที่สามของแต่ละคลาสจะถูกแก้ไข แม้ว่าตำแหน่งนี้โดยปกติแล้วจะใช้สำหรับการเรียกใช้งานเท่านั้น และแม้ว่าแอตทริบิวต์เหล่านี้จะมีผลต่อไฟล์โดยไม่คำนึงถึงคลาสก็ตาม แอตทริบิวต์ setuid จะแก้ไขอักขระเรียกใช้งานสำหรับคลาสผู้ใช้ แอตทริบิวต์ setgid จะแก้ไขอักขระเรียกใช้งานสำหรับคลาสกลุ่ม และแอตทริบิวต์ sticky หรือ text จะแก้ไขอักขระเรียกใช้งานสำหรับคลาสอื่นๆ สำหรับ setuid หรือ setgid xจะกลายเป็นsและ-จะกลายเป็นSสำหรับแอตทริบิวต์ sticky หรือ text xจะกลายเป็นtและ-จะกลายเป็นTตัวอย่างเช่น-rwsr-Sr-tแสดงถึงไฟล์ปกติ คลาสผู้ใช้มีสิทธิ์อ่าน เขียน และเรียกใช้งาน คลาสกลุ่มมีสิทธิ์อ่าน คลาสอื่นๆ มีสิทธิ์อ่านและเรียกใช้งาน และ ซึ่งมีการตั้งค่าแอตทริบิวต์ setuid , setgidและsticky ไว้
บางระบบแสดงคุณสมบัติการอนุญาตเพิ่มเติม:
+คำต่อท้ายบ่งชี้ถึงรายการควบคุมการเข้าถึงที่สามารถควบคุมสิทธิ์เพิ่มเติมได้.คำต่อท้ายบ่งชี้ว่า มีบริบท SELinuxอยู่ รายละเอียดสามารถดูได้ด้วยคำสั่งls -Z@คำต่อท้ายบ่งชี้ว่า มี คุณลักษณะไฟล์เพิ่มเติมอยู่
สัญกรณ์ฐานแปด
สิทธิ์การเข้าถึงมักแสดงใน รูปแบบ เลขฐานแปดเช่น ผ่านคำสั่งstat -c %a`execution_name` รูปแบบเลขฐานแปดประกอบด้วยตัวเลขอย่างน้อยสามหลัก ตัวเลขสามหลักสุดท้ายแสดงถึงสิทธิ์การเข้าถึงตามประเภท ได้แก่ ผู้ใช้ กลุ่ม และอื่นๆ หากมีตัวเลขหลักที่สี่ ตัวเลขหลักซ้ายสุดจะแสดงถึงคุณลักษณะพิเศษสามประการ ได้แก่`setuid` ` setgid`และ` sticky`
การให้สิทธิ์การดำเนินการแต่ละครั้งจะได้รับตำแหน่งบิตซึ่งสำหรับเลขฐานแปดคือ:
- อ่าน: ซ้าย, เลขฐานสอง 100, เลขฐานแปด 4
- เขียน: ตรงกลาง, เลขฐานสอง 010, เลขฐานแปด 2
- ดำเนินการ: ขวา, เลขฐานสอง 001, เลขฐานแปด 1
ค่าสิทธิ์ของคลาสคือผลรวม หรืออีกทางหนึ่งคือตรรกะ ORของสิทธิ์ที่ได้รับ
ตัวอย่าง:
| สัญลักษณ์ | แปด | คำอธิบาย |
|---|---|---|
---------- | 0000 | ไม่มีสิทธิ์อนุญาต |
-rwx------ | 07:00 น. | อ่าน เขียน และเรียกใช้ได้เฉพาะสำหรับเจ้าของเท่านั้น |
-rwxrwx--- | 0770 | อ่าน เขียน และดำเนินการเพื่อเจ้าของและกลุ่ม |
-rwxrwxrwx | 0777 | อ่าน เขียน และดำเนินการเพื่อเจ้าของ กลุ่ม และบุคคลอื่น ๆ |
-rwxr----- | 0740 | เจ้าของสิทธิ์สามารถอ่าน เขียน และเรียกใช้งานได้ กลุ่มมีสิทธิ์อ่านได้อย่างเดียว บุคคลอื่นไม่มีสิทธิ์ใดๆ |
กลุ่มส่วนตัวของผู้ใช้
บางระบบจะแตกต่างจากโมเดล POSIX แบบดั้งเดิมของผู้ใช้และกลุ่ม โดยการสร้างกลุ่มใหม่ – "กลุ่มส่วนตัวของผู้ใช้" – สำหรับผู้ใช้แต่ละคน สมมติว่าผู้ใช้แต่ละคนเป็นสมาชิกเพียงคนเดียวในกลุ่มส่วนตัวของผู้ใช้ ระบบนี้อนุญาตให้ใช้ umask 002 ได้โดยไม่อนุญาตให้ผู้ใช้อื่นเขียนไฟล์ที่สร้างขึ้นใหม่ในไดเร็กทอรีปกติ เนื่องจากไฟล์เหล่านั้นถูกกำหนดให้กับกลุ่มส่วนตัวของผู้ใช้ที่สร้างไฟล์นั้น อย่างไรก็ตาม เมื่อต้องการแชร์ไฟล์ ผู้ดูแลระบบสามารถสร้างกลุ่มที่มีผู้ใช้ที่ต้องการ สร้างไดเร็กทอรีที่กลุ่มสามารถเขียนได้ซึ่งกำหนดให้กับกลุ่มใหม่ และที่สำคัญที่สุดคือ ตั้งค่าไดเร็กทอรีเป็น setgid การตั้งค่าเป็น setgid จะทำให้ไฟล์ที่สร้างขึ้นในนั้นถูกกำหนดให้กับกลุ่มเดียวกับไดเร็กทอรี และ umask 002 (เปิดใช้งานโดยการใช้กลุ่มส่วนตัวของผู้ใช้) จะทำให้มั่นใจได้ว่าสมาชิกคนอื่นๆ ในกลุ่มจะสามารถเขียนไฟล์เหล่านั้นได้[ 22 ] [ 23 ]
ดูเพิ่มเติม
- chattrหรือ chflags – ใช้สำหรับเปลี่ยนแอตทริบิวต์หรือแฟล็กต่างๆ รวมถึงแฟล็กที่จำกัดการเข้าถึง
- chmod – คำสั่งเชลล์สำหรับเปลี่ยนสิทธิ์การเข้าถึงไฟล์
- lsattr – แสดงรายการคุณลักษณะ
- การเปรียบเทียบระบบไฟล์ § เมตาเดตา
ลิงก์ภายนอก
- หนังสือ The Linux Cookbook: Groups and How to Work in Themโดย Michael Stutz ปี 2004
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ สิทธิ์การเข้าถึงไฟล์ระบบ
โดยทั่วไป ระบบไฟล์ จะเก็บ รักษาการตั้ง ค่าสิทธิ์ สำหรับแต่ละรายการที่จัดเก็บไว้ ซึ่งโดยทั่วไปคือ ไฟล์ และ ไดเร็กทอรี โดยจะอนุญาตหรือปฏิเสธความสามารถในการจัดการรายการในระบบไฟล์...
ซีทีเอสเอส
ระบบ แบ่งเวลาใช้งาน ในยุคแรกๆ ที่ เรียกว่า Compatible Time-Sharing System (CTSS) รองรับผู้ใช้หลายคน โดยบัญชีผู้ใช้แต่ละบัญชีจะมี "หมายเลขปัญหา" และ "หมายเลขโปรแกรมเมอร์" [ 2 ]
มัลติซีส์
ผู้ใช้ในระบบแบ่งเวลา Multics มี "Person_id" และโครงการมี "Project_id" ผู้ใช้จะล็อกอินเข้าสู่ระบบด้วย Person_id และ Project_id ไฟล์จะมี รายการควบคุมการเข้าถึง (ACL) โดยมีรายการต่างๆ ที่ประกอบด้วย Person_id หรือ "*", Project_id หรือ "*" และ "instance tag" หรือ...
เทเน็กซ์
ผู้ใช้ใน TENEX เป็นสมาชิกของกลุ่มต่างๆ [ 5 ] : 44