บทที่ 5 · File System & Protection ออก
ชีท file and protection(4_1) หน้า 106–117 (12 หน้า) — อาจารย์เปิดในคลิปนาที 23:54–28:50 และวาดรูปใน Paint เพิ่ม
ไปเรื่องสุดท้าย file กับระบบความปลอดภัยนะครับ ก็ให้รู้อย่างน้อย minimum ก็ต้องรู้ว่ามีสิทธิ์ มี file property มีอะไรบ้าง มีชื่อ file, ตำแหน่ง pointer ที่ชี้ไปยังตำแหน่งใน hard disk แล้วก็ขนาด แล้วก็สิทธิ์ในการเข้าถึง มี 3 สิทธิ์ 3 level ก็คือ เขียน อ่าน แล้วก็ execute … 3 user group คือ เจ้าของไฟล์ กลุ่มที่เจ้าของไฟล์ set ไว้ แล้วก็บุคคลทั่วไป คล้ายๆ กับ share file ใน Google Drive
2) อธิบายสิทธิ์ r/w/x × owner/group/others และแปลงเป็นเลข 3 บิตได้
3) อธิบายระบบ secure ด้วย state transition ได้
4) รู้โครงสร้าง directory, access method และอ่าน access matrix ได้
5.1 พื้นฐานของระบบไฟล์
🤔 ไฟล์คืออะไร
File = ข้อมูลที่ถูกเก็บไว้ในหน่วยความจำสำรองแบบมีชื่อเรียก เพื่อให้ผู้ใช้และโปรแกรมเรียกใช้ได้ภายหลัง ส่วน OS ทำหน้าที่ซ่อนรายละเอียดของดิสก์ (บล็อก, track) ให้เราเห็นเป็นแค่ "ไฟล์ชื่อนี้"
⚙️ ข้อมูลซ้อนกันเป็นชั้นๆ (รูป 4.1.A) — ตัวอย่างข้อมูลพนักงาน
Field : code001 | Mr. Sombat Tanee | 5000 ← ข้อมูลทีละช่อง Record : code001 : Mr. Sombat Tanee : 5000 ← 1 แถว = 1 คน File : เรคคอร์ดของพนักงานทุกคน (หลายแถว) Database : หลายไฟล์ที่เชื่อมกัน (ไฟล์พนักงาน + ไฟล์แผนก + ไฟล์เงินเดือน)
- Field = ข้อมูลแต่ละชนิด (รหัส, ชื่อ, เงินเดือน) → Record = กลุ่มฟิลด์ 1 แถว เช่น
code001 : Mr. Sombat Tanee : 5000→ File = กลุ่มเรคคอร์ดแบบเดียวกัน → Database = กลุ่มไฟล์ที่มีความสัมพันธ์กัน
Layered file system (ล่าง → บน)
[5] Application programs โปรแกรมผู้ใช้
[4] Logical file system directory structure, symbolic file name
[3] File-organization module รู้จักไฟล์และบล็อก แปลงเป็น address ของบล็อก
[2] Basic file system อ่าน/เขียนบล็อกตามตำแหน่งกายภาพ เช่น drive1, cylinder 70, surface 2, sector 5
[1] I/O control device driver + interrupt handler
Devices
⚙️ ทำไมต้องแบ่งเป็นชั้น และทำงานยังไง
แต่ละชั้นทำงานของตัวเองแล้วส่งต่อให้ชั้นล่าง จึงแก้หรือเปลี่ยนชั้นหนึ่งได้โดยไม่กระทบชั้นอื่น (เช่น เปลี่ยนรุ่นดิสก์ก็แก้แค่ device driver) ลองดูว่าคำสั่ง "อ่านไฟล์ report.txt" ไหลผ่านชั้นต่างๆ อย่างไร:
- Application: โปรแกรมสั่ง
read("report.txt") - Logical file system: ดู directory ว่าไฟล์ชื่อนี้มีอยู่ไหม มีสิทธิ์อ่านไหม และข้อมูลของไฟล์อยู่ตรงไหน
- File-organization module: แปลงว่า "byte ที่ 0–4095 ของไฟล์" อยู่บล็อกเลขอะไร บนดิสก์
- Basic file system: สั่งอ่านบล็อกนั้นตามตำแหน่งกายภาพ (drive, cylinder, surface, sector)
- I/O control: device driver สั่งงานฮาร์ดแวร์จริง และรับ interrupt เมื่ออ่านเสร็จ
File operations: create, write, read, delete, reset (ชี้กลับต้นไฟล์) + open, close, seek, attribute, rename, append
5.2 Access methods
🤔 Access method คืออะไร
คือวิธีเข้าถึงข้อมูลข้างในไฟล์ ซึ่งมี 3 แบบ
- Sequential = อ่านเรียงจากต้นไปท้ายทีละส่วน เหมือนเทปคาสเซ็ต อยากฟังเพลงที่ 5 ต้องกรอผ่านเพลง 1–4 ก่อน ระบบจำ "ตำแหน่งปัจจุบัน" (current position) ไว้ อ่านทีไรก็ขยับไปข้างหน้า
- Direct = กระโดดไปบล็อกที่ต้องการได้ทันที เหมือนเลือกเพลงจากเพลย์ลิสต์ (ดิสก์ทำได้ เพราะทุกบล็อกมีเลข)
- ISAM = มีสารบัญซ้อนสารบัญ เหมือนหนังสือเล่มหนา ดูสารบัญหลัก → สารบัญย่อย → หน้าที่ต้องการ แล้วค่อยไล่อ่านตามลำดับในหน้านั้น
- Sequential access (แบบเทป) อ่าน/เขียนตามลำดับ ใช้ rewind ย้อนกลับ
- Direct access (แบบดิสก์) กระโดดไปบล็อกที่ต้องการได้เลย ทำ sequential บน direct ได้ดังนี้ reset →
cp := 0, read next →read cp; cp := cp + 1, write next →write cp; cp := cp + 1 - ISAM: master index (binary search) → secondary index (binary search) → actual file block (อ่านแบบ sequential)
5.3 File property (ข้อมูลใน directory) ★
🤔 File property คืออะไร
คือข้อมูลเกี่ยวกับไฟล์ (ไม่ใช่เนื้อหาในไฟล์) ที่ OS เก็บไว้ใน directory เช่น ชื่อ อยู่ตรงไหนบนดิสก์ ใหญ่เท่าไร ใครทำอะไรได้บ้าง เหมือนข้อมูลที่เห็นเมื่อคลิกขวาที่ไฟล์แล้วกด Properties
| Property | ความหมาย |
|---|---|
| file name | ชื่อไฟล์ + นามสกุล เช่น .exe/.com (รันได้), .txt (ข้อความ), .obj (object file) |
| file type | ประเภท เช่น binary, text (สัมพันธ์กับนามสกุล) |
| location | pointer ไปยังอุปกรณ์และตำแหน่งบนดิสก์ (volume, cylinder, track, block number) |
| size | ขนาด (byte, word, block) |
| current position | pointer ตำแหน่งที่กำลังอ่าน/เขียน |
| protection | สิทธิ์: read only, read and write, execute |
| time and date | วันเวลาที่สร้าง/แก้ไขล่าสุด |
Directory operations: search, create file, delete file, list directory, back up
5.4 โครงสร้าง directory
🤔 Directory คืออะไร ทำไมต้องมีหลายแบบ
Directory (หรือโฟลเดอร์) = สมุดรายชื่อไฟล์ ที่จดว่ามีไฟล์อะไรบ้าง และ property ของแต่ละไฟล์ ปัญหาคือ เมื่อมีไฟล์เยอะและมีผู้ใช้หลายคน จะจัดยังไงให้หาง่าย และชื่อไม่ชนกัน จึงมีโครงสร้างหลายแบบ ไล่จากง่ายไปยืดหยุ่น:
- Single-level = ลิ้นชักเดียวใส่ทุกไฟล์ของทุกคน (ชื่อชนกันง่าย)
- Two-level = แต่ละคนมีลิ้นชักของตัวเอง (MFD = ตู้รวม, UFD = ลิ้นชักของแต่ละคน)
- Tree = โฟลเดอร์ซ้อนโฟลเดอร์ได้ไม่จำกัด (แบบที่เราใช้ใน Windows/Mac)
- Acyclic graph = tree ที่ให้แชร์ไฟล์/โฟลเดอร์เดียวกันได้จากหลายที่ (เหมือน shortcut) แต่ห้ามวน
- General graph = ลิงก์วนกลับได้ (มี cycle) จึงต้องระวังการค้นหาวนไม่จบ
Path = เส้นทางไปหาไฟล์: absolute เริ่มจาก root เสมอ (เช่น /root/spell/mail/prt/first) ส่วน relative เริ่มจากโฟลเดอร์ที่เรากำลังอยู่ (ถ้าอยู่ /root/spell/mail → prt/first)
| แบบ | ลักษณะ | ข้อจำกัด / จุดสำคัญ |
|---|---|---|
| 1. Single-level | ชั้นเดียว ทุกไฟล์อยู่รวมกัน | ชื่อไฟล์ห้ามซ้ำทั้งระบบ ซึ่งยากเมื่อมีผู้ใช้หลายคน |
| 2. Two-level | MFD (รายชื่อผู้ใช้) → UFD (ไฟล์ของแต่ละคน) | ถ้ามีไฟล์มากก็ยังต้องระวังชื่อซ้ำใน UFD ตัวเอง |
| 3. Tree | root + subdirectory อ้างไฟล์ด้วย path name | absolute = ไล่จาก root เช่น /root/spell/mail/prt/first ส่วน relative = ไล่จาก working directory เช่น อยู่ /root/spell/mail → prt/first |
| 4. Acyclic graph | แชร์ไฟล์/subdirectory ได้ (link, symbolic link) | ไม่มี cycle |
| 5. General graph | มี cycle ได้ | ท่องแล้วอาจวนไม่จบ (infinite loop) จึงใช้ garbage collection (mark ไฟล์ที่เข้าถึงได้ ส่วนที่เหลือคืนเป็น free space) ซึ่งเสียเวลา |
/program/p1 จะเขียน relative path ของไฟล์ p11_2 อย่างไร5.5 สิทธิ์ไฟล์: 3 สิทธิ์ × 3 กลุ่ม (3 bit) ★
สิทธิ์ของ file ไปทบทวนครับ สิทธิ์ของ file 3 level … owner แล้วก็ group แล้วก็ other บุคคลทั่วไปครับ แต่ละ user ก็จะมีสิทธิ์ 3 อย่าง ซึ่งเราสามารถ set ผ่าน bit ได้เป็น 3 bit ไปดูเอาเองนะครับอยู่ในหนังสือ
- ชนิดสิทธิ์ (ชีท): Read, Write (รวม rewrite), Execute, Append, Delete และอื่นๆ เช่น Rename, Copy, Edit
- วิธีควบคุม: Naming, Password, Access list (ระบุรายคน ถ้าจะให้ทุกคนอ่านได้ต้องใส่ชื่อทุกคน ซึ่งยุ่งยาก) และ Access group แก้ปัญหานี้ด้วยการแบ่งกลุ่มเป็น owner / group / universe
🤔 rwx คืออะไร
ระบบ Unix/Linux กำหนดสิทธิ์ของไฟล์เป็น 3 กลุ่มผู้ใช้ × 3 สิทธิ์
- กลุ่มผู้ใช้: owner (เจ้าของไฟล์) · group (กลุ่มที่เจ้าของกำหนด) · others (คนอื่นทั้งหมด หรือ universe ในชีท)
- สิทธิ์: r = read อ่าน · w = write เขียน/แก้ · x = execute รัน
- แต่ละสิทธิ์คือ 1 บิต (มี = 1, ไม่มี = 0) กลุ่มหนึ่งจึงใช้ 3 บิต และทั้งไฟล์ใช้ 9 บิต
⚙️ แปลงเป็นเลข 3 หลักทีละขั้น (ตัวอย่าง rwxr-xr--)
- แบ่งเป็น 3 กลุ่ม กลุ่มละ 3 ตัว:
rwx|r-x|r-- - เปลี่ยนเป็นบิต (มี = 1, ขีด = 0):
111|101|100 - แปลงแต่ละกลุ่มเป็นเลข (r = 4, w = 2, x = 1): 4+2+1 = 7 | 4+0+1 = 5 | 4+0+0 = 4
- เอามาเรียงกัน → 754 (คำสั่ง
chmod 754 ไฟล์)
r = 4 (อ่าน) w = 2 (เขียน) x = 1 (execute) แต่ละกลุ่มรวมเลขกัน → ได้เลข 3 หลัก: owner | group | others rwx r-x r-- = (4+2+1)(4+0+1)(4+0+0) = 754 rw- r-- --- = 640 (owner อ่าน/เขียน, group อ่าน, others ไม่ได้อะไร) chmod 750 file → rwx r-x ---
rwxr-xr-- เขียนเป็นเลขฐาน 8 ได้เท่าไร644 หมายถึงอะไร5.6 นิยามของระบบที่ secure (state machine) ★
นิยามของระบบที่ secure คืออะไร ก็คือ transition ของ state มันไม่ไปยัง non-secure … automata … สถานะ S0 S1 S2 เกิดเหตุการณ์ string a b ก็ transition วนอยู่ในนี้ ถ้ามันวนอยู่ใน secure state ก็ถือว่าระบบมันผ่าน cyber security … OS หรือตัวจัดการส่วนอื่นมันผิดพลาด มันก็จะเกิด transition ที่เราไม่พึงประสงค์ เช่นส่งโทรจันมาทำให้เกิดการ backdoor ออกไปยัง non-secure … พอรู้ปุ๊บก็ปิด transition … คือนิยามด้วย finite state machine
🤔 State machine (finite state machine / automata) คืออะไร
คือแบบจำลองของระบบที่ "ตอนนี้อยู่ในสถานะหนึ่ง" แล้วจะเปลี่ยนสถานะเมื่อเกิดเหตุการณ์ (input) ประกอบด้วย:
- State (สถานะ) = วงกลม เช่น S0, S1, S2
- Input / event = สิ่งที่เกิดขึ้น เช่น a, b
- Transition = ลูกศรที่บอกว่า "อยู่ที่ state นี้ แล้วเกิด input นี้ จะไปที่ state ไหน" เช่น
S0 -a-> S1
🔍 ตัวอย่างใกล้ตัว: ไฟจราจร
state = {แดง, เขียว, เหลือง}, input = "หมดเวลา" → แดง -หมดเวลา-> เขียว -หมดเวลา-> เหลือง -หมดเวลา-> แดง วนอยู่แค่ 3 state นี้ ถ้าวันหนึ่งไฟเสียแล้วกลายเป็น "เขียวทั้งสองทาง" ก็คือหลุดไป state อันตราย
⚙️ ใช้นิยามความปลอดภัยยังไง
- แบ่ง state เป็น secure set (สถานะที่ปลอดภัย) กับ non-secure
- ระบบ secure เมื่อทุก transitionที่ออกจาก secure state พาไปได้แค่ secure state ไม่ว่า input จะเป็นอะไร ระบบจึงวนอยู่ใน secure set เสมอ
- ถ้ามี transition ใดพาออกไป non-secure (เช่น ช่องโหว่ / trojan / backdoor) ระบบไม่ secure และวิธีแก้คือปิด transition นั้น (patch)
ถ้ามีประตูลับ (ช่องโหว่ / backdoor / trojan) ที่พาออกไปนอกบ้านได้ ระบบก็ไม่ secure และวิธีแก้คือปิดประตูนั้น (patch)
มองระบบเป็น finite state machine: แบ่ง state เป็น secure set กับ non-secure ระบบจะ secure เมื่อทุก transition (ทุก input/เหตุการณ์) ที่ออกจาก secure state พาไปได้แค่ secure state เท่านั้น ระบบจึงวนอยู่ใน secure set เสมอ ถ้า OS ผิดพลาดหรือมีช่องโหว่ (เช่น trojan ทำ backdoor) จะมี transition ไป non-secure ต้องปิด transition หรือเหตุการณ์ที่ trigger นั้น (patch)
5.7 Domain of protection และ access matrix
🤔 Domain และ access matrix คืออะไร
- Object = สิ่งที่ต้องป้องกัน ทั้งฮาร์ดแวร์ (CPU, printer, disk) และซอฟต์แวร์ (file, program, semaphore)
- Access right = การกระทำที่ทำกับ object ได้ เช่น read, write, execute, print
- Domain = ชุดของสิทธิ์ หรือ "บทบาท" เช่น domain ของนักศึกษา กับ domain ของแอดมิน ซึ่งเขียนเป็นคู่ <object, สิทธิ์> ส่วน process ทำงานอยู่ใน domain ใดก็ได้สิทธิ์ของ domain นั้น
- Access matrix = ตารางรวมทุกอย่าง: แถว = domain, คอลัมน์ = object ช่องที่ตัดกันคือสิทธิ์ เช่น ช่อง (D3, F3) = execute แปลว่า process ใน D3 รัน F3 ได้
- Switch (dynamic protection) = เปลี่ยนไปอยู่อีก domain ได้ (คล้ายการใช้
sudoหรือสลับบัญชี) แล้วได้สิทธิ์ของ domain ใหม่
- Object: hardware (CPU, printer, disk, memory segment, tape drive) และ software (file, program, semaphore)
- Domain เขียนเป็นคู่ <object-name, rights-set> เช่น D2 = { <O2, {write}>, <O4, {print}> } (O4 ใช้ร่วมกับ D3)
- Access matrix: แถว = domain, คอลัมน์ = object, ช่อง Access(i, j) = สิทธิ์ที่ Di ทำกับ Oj ได้ และ global table เขียนเป็น <domain, object, rights-set> (ถ้าการกระทำ M ∈ Rk จึงอนุญาต)
- Static = กำหนดตายตัว ส่วน dynamic = มีคอลัมน์ D1–D4 ที่เขียนว่า "switch" ให้สลับไปโดเมนอื่นได้ แล้วได้สิทธิ์เท่ากับโดเมนนั้น เช่น D2 switch ไป D3 จะได้ read F2, execute F3