ความท้าทาย
ระบุสตริงที่ระบุสัญลักษณ์ของการอนุญาต UNIX ของไฟล์และความเป็นเจ้าของ (ID ผู้ใช้และ ID กลุ่ม) ให้ตัดสินใจว่าผู้ใช้ที่Aได้รับมีสิทธิ์ในการอ่าน / เขียน / ดำเนินการหรือไม่
สิทธิ์ในระบบ UNIX
ใน UNIX, ไฟล์ทุกคนมีสามชั้นของสิทธิ์ ( ผู้ใช้ , กลุ่มและคนอื่น ๆ ) และความเป็นเจ้าของรวมทั้งผู้ใช้และกลุ่มที่มันเป็น
สัญกรณ์สัญลักษณ์ประกอบด้วยอักขระสิบตัว ตัวละครตัวแรกนั้นไม่สำคัญสำหรับความท้าทายนี้ อักขระเก้าตัวที่เหลืออยู่ในสามชุดสามอักขระซึ่งเป็นตัวแทนสิทธิ์ของผู้ใช้กลุ่มและคลาสอื่น ๆ อักขระในแต่ละชุดระบุว่าอนุญาตให้อ่าน / เขียน / ดำเนินการได้หรือไม่ หากได้รับอนุญาตก็จะเป็นr, หรือw มิฉะนั้นก็จะเป็นx-
โปรดทราบว่าsetuid , setgidและเหนียวบิตอาจมีการเปลี่ยนแปลงตัวละครในสามของแต่ละชุดเพื่อs, S, หรือt Tนี่เป็นกฎง่ายๆ: ถ้าตัวละครเป็นตัวอักษรตัวเล็กก็จะได้รับอนุญาตตั้ง; มิฉะนั้นจะไม่
(สำหรับรายละเอียดเกี่ยวกับสัญลักษณ์การอนุญาตโปรดดูที่นี่ )
ผู้ใช้ทุกคนมี ID ผู้ใช้และทุกกลุ่มมี ID กลุ่ม ID ทั้งหมดจะไม่ใช่จำนวนเต็มลบ ผู้ใช้จะอยู่ในกลุ่มอย่างน้อยหนึ่งกลุ่ม หากผู้ใช้Aต้องการเข้าถึงไฟล์ระบบจะตรวจสอบการอนุญาตดังต่อไปนี้:
หากไฟล์เป็นของผู้ใช้
Aตรวจสอบการอนุญาตของคลาสผู้ใช้หากไฟล์ไม่ได้อยู่ในกลุ่ม
Aแต่Aเป็นของกลุ่มที่เป็นของไฟล์ให้ตรวจสอบสิทธิ์ของคลาสกลุ่มมิฉะนั้นตรวจสอบสิทธิ์ของชั้นเรียนอื่น ๆ
อย่างไรก็ตามมีข้อยกเว้นหนึ่งประการ: ถ้า ID ผู้ใช้คือ 0 (superuser) พวกเขามีสิทธิ์ในการทำอะไร !
ข้อมูลจำเพาะ
- โปรแกรม / ฟังก์ชั่นของคุณควรใช้สิ่งเหล่านี้เป็นอินพุตในรูปแบบที่เหมาะสม:
- สิทธิ์ในสัญกรณ์สัญลักษณ์
- ID ผู้ใช้และรหัสกลุ่มที่ไฟล์นั้นเป็นเจ้าของ
- ID ผู้ใช้ของ
Aและรายการ ID กลุ่มที่Aเป็นของ - ประเภทของการเข้าถึง คุณสามารถใช้ค่าหนึ่งหลักหรือค่าหนึ่งอักขระที่แตกต่างกันสามค่าสำหรับการอ่านการเขียนและการดำเนินการ
- ส่งคืน / ส่งออกค่าความจริงหาก
Aมีสิทธิ์ในการเข้าถึงไฟล์หรือค่าเท็จหากไม่ได้รับ - คุณสามารถสันนิษฐานได้ว่าตัวอักษรตัวแรกของสัญกรณ์จะเป็น
-(ไฟล์ปกติ) เสมอ - นี่คือโค้ดกอล์ฟดังนั้นจำนวนไบต์ที่สั้นที่สุดชนะ!
กรณีทดสอบ
[permissions, user ID of file, group ID of file, user ID of A, group IDs of A, type(r/w/x)]รูปแบบที่นี่คือ
[-rwx------, 13, 15, 13, [15, 24], r]: True # user
[-rwxr-xr-x, 13, 24, 24, [15, 24], w]: False # group
[-rwxr-Sr-T, 13, 15, 24, [15, 35], x]: False # group
[-rwsr-xr-t, 13, 15, 24, [24, 35], x]: True # others
[----------, 13, 15, 0, [0, 1, 2], r]: True # superuser
[----------, 13, 15, 1, [0, 1, 2], r]: False # others
[----rwxrwx, 13, 15, 13, [15, 24], r]: False # user