ถอดรหัสการอนุญาตระบบไฟล์ Linux
เผยแพร่แล้ว: 2017-02-24การอนุญาตไฟล์ลีนุกซ์อาจดูเหมือนเป็นอักษรอียิปต์โบราณสำหรับบางคนและเข้าใจได้ โมเดลการอนุญาตระบบไฟล์ของ Linux มีต้นกำเนิดมาจาก UNIX อย่างไรก็ตาม พวกมันค่อนข้างเข้าใจได้ง่าย เมื่อคุณเข้าใจตรรกะเบื้องหลังพวกมันแล้ว
กลุ่มสิทธิ์และประเภท
การควบคุมการเข้าถึงไฟล์และโฟลเดอร์ทั้งหมดถูกกำหนดไว้ในระบบไฟล์โดยใช้ข้อมูลต่อไปนี้:
- กลุ่มสิทธิ์สามกลุ่ม: u สำหรับเจ้าของ g กลุ่ม o หรือ a ผู้ใช้ทั้งหมด
- อนุญาตสามประเภท: r , อ่าน , x , ดำเนินการ, w , เขียน
ประเภทการอนุญาตคืออักขระ “r”, ”x” และ “w” ซึ่งเรียกว่าแฟล็ก และจะแสดงในลักษณะนี้หากคุณแสดงรายการสิทธิ์ของไฟล์หรือโฟลเดอร์ด้วยวิธีใดวิธีหนึ่ง แฟล็กที่ไม่ได้ตั้งค่าจะแสดงด้วยอักขระ "-" กลุ่มสิทธิ์ที่ใช้ในคำสั่งที่เปลี่ยนความเป็นเจ้าของและกลุ่มของไฟล์ ซึ่งเราจะเจาะลึกในไม่ช้า
กำลังดูสิทธิ์
คุณสามารถดูสิทธิ์ของไฟล์หรือโฟลเดอร์ได้โดยใช้ตัวจัดการไฟล์ GUI หรือโดยการตรวจสอบผลลัพธ์ของคำสั่ง ls ในคอนโซลเทอร์มินัล
เปิดเทอร์มินัลของคุณและพิมพ์คำสั่งต่อไปนี้:
$ ทดสอบการสัมผัส
$ ls -la test
-rw-r–r– 1 yorgos staff 0 ก.พ. 23 17:07 ทดสอบ
สตริง “-rw-r–r–” มีข้อมูลการอนุญาตระบบไฟล์ที่เราสนใจ ฟิลด์ที่เหลือจากซ้ายไปขวาจะแสดงข้อมูลต่อไปนี้:
- ไฟล์นี้มีลิงก์กี่ลิงก์ (1)
- เจ้าของ userid (ยอร์กอส)
- รหัสกลุ่ม (พนักงาน)
- ความยาวไฟล์เป็นไบต์ (0)
- วันที่สร้าง (23 ก.พ.)
- สร้างเวลา (17:07)
- ชื่อไฟล์ (ทดสอบ)
บิตการอนุญาต
คุณจะสังเกตเห็นว่ามีกลุ่มและประเภทการอนุญาตที่แตกต่างกัน 9 แบบ แต่มีตำแหน่งตั้งค่าสถานะ 10 ตำแหน่ง อันแรกแสดงแฟล็กประเภทไฟล์ในขณะที่อันหลังระบุการอนุญาตด้วยตนเอง ประเภทไฟล์อาจเป็น "-" สำหรับไฟล์ "l" สำหรับลิงก์สัญลักษณ์ (นี่คือลิงก์ระบบไฟล์ที่ชี้ไปที่ไฟล์อื่น) และ "d" สำหรับไดเร็กทอรี เนื่องจากอักขระ/แฟล็กตัวแรกในตัวอย่างของเราคือ “-” เรากำลังพูดถึงไฟล์ธรรมดา ต่อไป เรามาทำลายช่องการอนุญาตกัน:
– : ประเภทไฟล์ (สามารถมี l, - หรือ d)
rw- : สิทธิ์ในการอ่านและเขียน (ไม่ดำเนินการ) สิทธิ์เหล่านี้มีไว้สำหรับเจ้าของ
r– : สิทธิ์ในการอ่าน, ไม่มีสิทธิ์ในการเขียนและดำเนินการ สิทธิ์เหล่านี้ถือว่าผู้ใช้ที่อยู่ในกลุ่ม
r– : สิทธิ์ในการอ่าน, ห้ามเขียนและดำเนินการ สุดท้ายนี้ สิทธิ์เหล่านี้เกี่ยวข้องกับทุกคน
ดังนั้น จึงหมายความว่า "ไฟล์นี้สามารถอ่านและเขียนได้โดยเจ้าของ และทุกคนสามารถอ่านได้อย่างเดียว" กลุ่มแชร์สิทธิ์เดียวกัน
แก้ไขการอนุญาต
ในการแก้ไขการอนุญาตของไฟล์หรือโฟลเดอร์ คุณสามารถใช้คำสั่ง GUI อีกครั้ง (ซึ่งอยู่นอกขอบเขตของบทความนี้ เราจะไม่ไปที่นั่น) หรือใช้คำสั่ง linux บางอย่างในเทอร์มินัลของคุณ คำสั่งที่เราจะใช้เรียกว่า chmod (เปลี่ยนโหมดไฟล์) คำสั่ง chmod ยอมรับพารามิเตอร์ต่างๆ ที่เปลี่ยนลักษณะการทำงานได้หลายวิธี แต่การใช้งานทั่วไปมีดังต่อไปนี้:
$ chmod <โหมด> <ไฟล์>
<mode> ถูกกำหนดโดยสัญลักษณ์ต่อไปนี้:
r ธงการอ่าน
w ธงการเขียน
x ธงดำเนินการ
u ธงการอนุญาตผู้ใช้ / เจ้าของ
g ธงการอนุญาตกลุ่ม
o แฟล็กการอนุญาตผู้ใช้รายอื่น
มีอีกสองสามข้อ แต่เราจะพูดถึงในส่วนสุดท้ายของบทความของเรา
สมมติว่าคุณต้องการให้สิทธิ์ดำเนินการกับผู้ใช้ที่อยู่ในกลุ่ม (แต่ต้องแน่ใจว่าคุณเป็นเจ้าของไฟล์ก่อน!):
$ chown g+x ทดสอบ
$ ls -l ทดสอบ
-rwxrwxrwx 1 yorgos staff 0 ก.พ. 23 17:07 ทดสอบ
หรือบางทีคุณอาจต้องล็อกเอาต์ทุกคนโดยสิ้นเชิง พวกเขาจะไม่สามารถอ่าน เขียน หรือรันไฟล์ได้:
$ chown o-rwx ทดสอบ
$ ls -l ทดสอบ
-rwxrwx— พนักงาน 1 คนของ yorgos 0 ก.พ. 23 17:07 น. ทดสอบ
ที่นี่เราเห็นแฟล็กสุดท้ายทั้งหมดไม่ได้ตั้งค่าเป็น "-"
หากคุณต้องการดูตัวอย่างเพิ่มเติม ให้ดูที่หน้าคู่มือสำหรับ chmod โดยออกคำสั่งต่อไปนี้:
$ man chmod
เจ้าของและกลุ่ม
คุณยังสามารถเปลี่ยนความเป็นเจ้าของไฟล์และกลุ่มของไฟล์ได้โดยใช้ คำสั่ง chown
คำ สั่ง chown ยอมรับพารามิเตอร์ต่างๆ ที่เปลี่ยนแปลงพฤติกรรมของมันในทางใดทางหนึ่ง แต่การใช้งานทั่วไปส่วนใหญ่มีดังต่อไปนี้:
# chown <เจ้าของ> <ไฟล์>
หรือ
# chown <owner:group> <file>
ตัวอย่างแรกใช้เพื่อเปลี่ยนเจ้าของไฟล์เป็นคนอื่น อย่างไรก็ตาม โปรดทราบว่าคุณต้องมีสิทธิ์เข้าถึงรูทเพื่อเปลี่ยนความเป็นเจ้าของไฟล์ ดังนั้น โดยดำเนินการดังต่อไปนี้:
#ชวนใครมาทดสอบ
# ls -l ทดสอบ
-rwxrwxrwt 1 ไม่มีพนักงาน 0 ก.พ. 23 17:07 ทดสอบ
มันถูกเปิดเผยว่าไฟล์นี้เป็นเจ้าของโดย ID ผู้ใช้ 'ไม่มีใคร' และไม่ใช่โดย 'yorgos' อีกต่อไป
ในทำนองเดียวกันคำสั่ง:
# chown none: การทดสอบล้อ
# ls -l ทดสอบ
-rwxrwxrwt 1 ไม่มีคนล้อ 0 ก.พ. 23 17:07 ทดสอบ
เปลี่ยนความเป็นเจ้าของไฟล์เป็น none และกลุ่ม เป็น wheel
หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งและพารามิเตอร์ต่างๆ ให้ดูที่หน้าคู่มือ chown โดยออกคำสั่ง:
$ man chown
สิทธิ์พิเศษ
นอกจากประเภทและกลุ่มสิทธิ์ที่เราได้กล่าวถึงไปแล้วในบทความ ยังมีอีกสองสามประเภทที่เรียกว่า “สิทธิ์พิเศษ”
เหล่านี้มีดังต่อไปนี้:
ส ตั้งค่าสถานะ ID ผู้ใช้และตั้งค่า ID กลุ่ม
t ธงเหนียว.
ค่าแรกถูกกำหนดโดยใช้แฟล็ก "s" ในคำสั่ง chmod ในลักษณะปกติ เช่น:
$ chmod u+s ทดสอบ
$ ls -l ทดสอบ
-rwsrwx— 1 ยอร์กอส พนักงาน 0 ก.พ. 23 17:07 น. ทดสอบ
แฟล็กนี้เรียกอีกอย่างว่าแฟล็ก SUID (Set User ID) หรือ SGID (Set Group ID) หากมีการตั้งค่าบิตนี้ ไฟล์จะสืบทอดสิทธิ์การเข้าถึงของเจ้าของ ซึ่งหมายความว่าใครก็ตามที่รันไฟล์นั้นกำลังดำเนินการดังกล่าวในฐานะเจ้าของ SGID นั้นคล้ายคลึงกัน แต่ไฟล์จะสืบทอดสิทธิ์การเข้าถึงของกลุ่ม แน่นอนว่าสิ่งนี้อาจนำไปสู่ปัญหาด้านความปลอดภัย ดังนั้นจึงต้องระมัดระวัง
บิตเหนียวหรือ "t" มีประโยชน์อย่างยิ่ง เมื่อตั้งค่าในไดเร็กทอรีซึ่งมักจะแชร์เช่น /tmp ไฟล์ที่สร้างขึ้นในนั้นสามารถเปลี่ยนชื่อหรือลบได้โดยเจ้าของที่เกี่ยวข้องเท่านั้น หากไม่ได้ตั้งค่าสติ๊กกี้บิต เจ้าของไดเร็กทอรีจะไม่สามารถควบคุมไดเร็กทอรีได้
คุณสามารถสร้างไดเร็กทอรี "เหนียว" โดยออกคำสั่งต่อไปนี้:
$ chmod +t /directory
เลขฐานแปด
นอกจากการใช้แฟล็กเพื่อกำหนดสิทธิ์ เช่น “r” และ “w” แล้ว คุณยังสามารถใช้ค่าตัวเลขได้อีกด้วย คำสั่ง chmod กำหนดค่าต่อไปนี้ให้กับสิทธิ์:
“r” = 4
“w” = 2
“x” = 1
ดังนั้น เพื่อตั้งค่าไฟล์ให้มีการอ่าน/เขียน/ดำเนินการสำหรับเจ้าของ และอ่าน/ดำเนินการสำหรับคนอื่น ๆ ซึ่งหมายถึง "-rwxr-xr-x" เราคำนวณค่าตัวเลขดังนี้:
rwx = 4+2+1 = 7
rx = 4+1 = 5
ในที่สุดเราก็ออกคำสั่ง:
$ chmod 755 ทดสอบ
$ ls – ทดสอบ
-rwxr-xr-x 1 ยอร์กอส พนักงาน 21 ก.พ. 24 02:08 ทดสอบ
ฝึกฝนด้วยตัวเองโดยใช้การอนุญาตและค่าตัวเลขที่แตกต่างกันเพื่อทำความเข้าใจ!