ทำไมคำสั่ง“ ls” แสดงสิทธิ์ของไฟล์ในพาร์ติชัน FAT32?


40

ฉันเชื่อว่าระบบไฟล์ FAT32 ไม่รองรับการอนุญาตไฟล์อย่างไรก็ตามเมื่อฉันทำls -lในพาร์ติชัน FAT32 ls -lแสดงว่าไฟล์มีสิทธิ์:

-rw-r--r-- 1 john john 11 Mar 20 15:43 file1.txt
-rw-r--r-- 1 john john 5 Mar 20 15:49 file2.txt

ทำไมls -lแสดงสิทธิ์ของไฟล์?


คำถามที่ดี! ยินดีต้อนรับ
0xSheepdog

คำตอบ:


71

ระบบไฟล์ที่จัดเก็บไว้ในดิสก์ไม่ได้จัดเก็บสิทธิ์ในการใช้ไฟล์ แต่ไดรเวอร์ระบบไฟล์จะต้องให้ระบบปฏิบัติการเนื่องจากเป็นส่วนหนึ่งของแนวคิดระบบไฟล์ Unix และอินเตอร์เฟสการเรียกใช้ระบบไม่มีวิธีการนำเสนอว่าการอนุญาตนั้น หายไป

พิจารณาสิ่งที่จะเกิดขึ้นหากไฟล์ไม่มีบิตสิทธิ์ใด ๆ เลย? มันจะเหมือนกับ0777การเข้าถึงทั้งหมดหรือไม่ หรือเช่นเดียวกับ0000นั่นคือไม่มีการเข้าถึงใครเลย? แต่ทั้งคู่เป็นไฟล์ที่อนุญาตดังนั้นทำไมไม่แสดงมัน? หรือทำสิ่งที่มีประโยชน์มากขึ้นและมีวิธีตั้งสิทธิ์ที่เหมาะสมบางอย่าง

ดังนั้นคนขับจึงใช้สิทธิ์บางอย่างเหมือนกันกับไฟล์ทั้งหมด สิทธิ์พร้อมกับเจ้าของและกลุ่มไฟล์นั้นสามารถกำหนดค่าได้ในเวลาเมานท์ สิ่งเหล่านี้อธิบายไว้ภายใต้ "Mount options for fat" ในman mount (8) man page :

ตัวเลือกการเมาท์สำหรับอ้วน
(หมายเหตุ: ไขมันไม่ใช่ระบบไฟล์แยกต่างหาก แต่เป็นส่วนทั่วไปของระบบไฟล์ msdos, umsdos และ vfat)

uid=valueและgid=value
ตั้งค่าเจ้าของและกลุ่มของไฟล์ทั้งหมด (ค่าเริ่มต้น: UID และ GID ของกระบวนการปัจจุบัน)

umask=value
ตั้ง umask (bitmask ของสิทธิ์ที่ไม่ได้อยู่) ค่าเริ่มต้นคือ umask ของกระบวนการปัจจุบัน ค่าถูกกำหนดเป็นฐานแปด

dmask=value
ตั้งค่า umask ที่นำไปใช้กับไดเรกทอรีเท่านั้น ค่าเริ่มต้นคือ umask ของกระบวนการปัจจุบัน ค่าถูกกำหนดเป็นฐานแปด

fmask=value
ตั้งค่า umask ที่ใช้กับไฟล์ปกติเท่านั้น ค่าเริ่มต้นคือ umask ของกระบวนการปัจจุบัน ค่าถูกกำหนดเป็นฐานแปด

โปรดทราบว่าสิทธิ์จะถูกนำเสนอเป็นมาสก์ดังนั้นการอนุญาตขั้นสุดท้ายคือการปฏิเสธของมาสก์ fmask=0133จะส่งผลให้ไฟล์ทั้งหมดที่มีสิทธิ์หรือ0644rw-r--r--

นอกจากนี้ค่าเริ่มต้นยังสืบทอดมาจากการเรียกใช้กระบวนการmount()ดังนั้นหากคุณโทรmountจากบรรทัดคำสั่งเชลล์umaskจะใช้งาน


7
และสาเหตุที่ทำให้การลอกเลียนแบบการอนุญาตเป็นอย่างอื่น ls และโปรแกรมอื่น ๆ ที่พิจารณาสิทธิ์ของไฟล์ (แม้แต่รหัสของคุณที่พยายามอ่านไฟล์) จะต้องมีตรรกะในการจัดการองค์กรระบบไฟล์ที่ต่างกันทั้งหมดที่สร้างขึ้น
jamesqf

4
@jamesqf ใช่และแม้กระทั่งส่วนต่อประสานการโทรของระบบก็ไม่มีตัวเลือก "ไม่มีสิทธิ์" เนื่องจากมีการอนุญาตอยู่เสมอ (นั่นคือสิ่งที่ฉันคิดเมื่อฉันเขียนว่าพวกเขาเป็น "ส่วนที่สำคัญ") ดังนั้นการอนุญาตจะต้องอยู่ที่นั่นเสมอและสิ่งต่าง ๆ เช่น ACLs ถูกสร้างขึ้นมาเพื่อให้พวกเขามีความหมาย
ilkkachu

2
ฉันมักจะเห็นโหมด 777 สำหรับไฟล์ทั้งหมดในระบบไฟล์ FAT (FAT16 พร้อมไดรเวอร์เก่าอย่างน้อย)
ป่า

2
@forest ที่ขึ้นอยู่กับumaskตัวเลือกการเมานท์ซึ่งค่าเริ่มต้นคือ umask ของmountกระบวนการ (ดูหน้า man ที่เชื่อมโยงกับคำตอบนี้)
Ruslan

แต่ FAT จะเก็บสิทธิ์ / คุณลักษณะบางอย่าง (อ่านอย่างเดียวซ่อนอยู่ระบบ ฯลฯ ) แม้ว่าจะไม่ได้แมปกับ Unix อย่างแน่นอน chmod ugo-wไฟล์จะเปิดคุณลักษณะอ่านอย่างเดียว การใช้fmask=0133ตัวเลือกตามตัวอย่างของคุณจะไม่ส่งผลให้ไฟล์ทั้งหมดที่มีสิทธิ์ 0644 สิ่งที่ FAT ไม่ได้จัดเก็บคือ uid และ gid สำหรับแต่ละไฟล์ กรุณาชี้แจง คำตอบที่มันยืนอยู่นั้นทำให้เข้าใจผิดอย่างมาก
mosvy

22

แต่ไฟล์จะมีสิทธิ์ ผู้ใช้johnมีสิทธิ์เข้าถึง RW ในขณะที่ผู้ใช้สุ่มบางรายเท่านั้นที่มีสิทธิ์อ่านเพื่ออ่าน การอนุญาตเหล่านี้ไม่ได้มาจากระบบไฟล์ แต่มาจากตัวเลือกการติดตั้ง (-o uid / gid / umask) ซึ่งไม่ได้ทำให้เกิดความจริงน้อยลง

คุณสามารถติดตั้งพาร์ติชั่น vfat หลายตัวพร้อมตัวเลือกที่แตกต่างกันและคุณสามารถใช้lsเพื่อพิจารณาว่าตัวเลือกเหล่านั้นคืออะไร คุณสามารถใช้mount - ผูกเพื่อให้ไดเรกทอรีเดียวมีไฟล์จากพาร์ทิชัน vfat ที่แตกต่างกันและlsจะแสดงสิทธิ์ที่ถูกต้องสำหรับแต่ละไฟล์


15

lsไม่ทราบเกี่ยวกับ FAT32 แต่จะรู้เกี่ยวกับอินเตอร์เฟสระบบไฟล์เสมือน (VFS) ที่เคอร์เนลแสดงพร้อมกับการเรียก POSIX open/ readdir/ statsystem

Linux ไม่สนับสนุนแนวคิดของไฟล์ที่ไม่มีบิตสิทธิ์ของผู้ใช้ / กลุ่ม / อื่น ๆstruct statเพียงแค่มีmode_t st_mode;สมาชิก (และสมาชิก uid, สมาชิก gid) ที่เคอร์เนลต้องกรอกเมื่อls -lทำการstat(2)โทรของระบบ

ไม่มีรหัสพิเศษที่หมายความว่า "ไม่พร้อมใช้งาน" หรือ "ไม่สามารถใช้งานได้" สำหรับฟิลด์ใด ๆ เหล่านั้นดังนั้นไดรเวอร์ vfat ของเคอร์เนลจะต้องทำบางสิ่งบางอย่างขึ้นมา FAT16 / FAT32 มีแฟล็กแบบอ่านอย่างเดียว แต่อย่างอื่นเจ้าของ / กลุ่มมาจากตัวเลือกการเมานท์และ umask ก็เช่นกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.