เมื่อคุณเรียกใช้ไฟล์ปฏิบัติการใน Linux ไฟล์นั้นมักจะรันด้วย ID ผู้ใช้และกลุ่มปัจจุบัน อย่างไรก็ตาม มีบางครั้งที่คุณต้องเรียกใช้ไฟล์นั้นในฐานะผู้ใช้รายอื่น (เช่น รูท) แทนที่จะเปลี่ยนบัญชีผู้ใช้ คุณสามารถใช้ setuid เพื่อเรียกใช้ไฟล์สั่งการในฐานะเจ้าของไฟล์ ไม่ใช่ผู้ใช้ปัจจุบัน ในที่นี้เราจะอธิบายวิธีการทำงานของ setuid และวิธีที่อนุญาตให้ผู้ใช้เรียกใช้ไฟล์เรียกทำงาน/ไบนารีที่มีสิทธิ์ยกระดับ
setuid ทำงานอย่างไร
Setuid ย่อมาจาก SET User ID ในการดำเนินการ . สมมติว่าเรามีไฟล์ปฏิบัติการที่เรียกว่า "identity" ที่สร้างโดยผู้ใช้รูท เมื่อคุณรัน มันจะรันด้วย ID ผู้ใช้ ID กลุ่ม และสิทธิ์ผู้ใช้ของคุณ หาก setuid bit ถูกตั้งค่าในไฟล์ “identity” เมื่อคุณเรียกใช้ ไฟล์นั้นจะถูกเรียกใช้ในฐานะผู้ใช้รูทและสิทธิพิเศษของผู้ใช้
จากภาพประกอบ เราสามารถตรวจสอบความเป็นเจ้าของไฟล์ "ข้อมูลประจำตัว" ก่อนและตรวจสอบว่าเป็นเจ้าของโดยผู้ใช้รูท สตริงการอนุญาตยังแสดงบิตปฏิบัติการ (x) ที่กำหนดไว้สำหรับผู้ใช้ กลุ่ม และอื่นๆ
ผู้ใช้ "john1" เรียกใช้ไฟล์ "identity" ซึ่งจะกลายเป็นกระบวนการในการดำเนินการ ดังที่แสดงในรายการกระบวนการ กระบวนการจะถูกสร้างขึ้นและทำงานภายใต้ชื่อผู้ใช้และ ID ผู้ใช้ “john1”
ต่อไป ในฐานะผู้ใช้รูท เราตั้งค่าบิต setuid ของไฟล์ “identity”:
chmod u+s /usr/bin/identity
“u” หมายถึง setuid bit (+s) ที่กำหนดให้ผู้ใช้เท่านั้น
สำหรับเจ้าของ ในส่วนปฏิบัติการของสตริงการอนุญาต เราจะเห็นว่า “x” ถูกแทนที่ด้วย “s” เมื่อใดก็ตามที่คุณพบ "s" สำหรับไฟล์สั่งการ แสดงว่ามีการตั้งค่าบิต setuid ไว้
ตัวแปรตัวเลขของ chmod
สามารถใช้คำสั่งได้ตามที่แสดงด้านล่าง
chmod 4755 /usr/bin/identity
การเพิ่ม 4 ในสตริงการอนุญาตที่เป็นตัวเลขหมายถึงการรวมบิต setuid
ต่อไปนี้คือสิ่งที่เกิดขึ้นเมื่อ "john1" เรียกใช้งานไฟล์ "identity" อีกครั้ง เมื่อดูรายการกระบวนการที่ทำงานอยู่ ตอนนี้เราจะเห็นว่ากระบวนการนี้สร้างและเรียกใช้โดยผู้ใช้ "รูท" แทนที่จะเป็น "john1"
การใช้งานที่สำคัญของ setuid บิต
ส่วนใหญ่คุณจะได้ยินจากผู้เชี่ยวชาญว่าคุณไม่ควรเรียกใช้แอปพลิเคชันในฐานะผู้ใช้รูท อย่างไรก็ตาม มีบางกรณีที่จำเป็นต้องเรียกใช้ไฟล์บางไฟล์โดยได้รับอนุญาตจากรูท ตัวอย่างเช่น passwd
ยูทิลิตี้ที่ติดตั้งโดยค่าเริ่มต้นบนระบบ Linux จะมีการตั้งค่าบิต setuid ไว้
เหตุผลง่ายๆ คือ ข้อมูลรหัสผ่านสำหรับผู้ใช้ถูกเก็บไว้ในไฟล์ “/etc/passwd” และ “/etc/shadow” ซึ่งสามารถแก้ไขได้โดย “root” เท่านั้น เมื่อ “john1” พยายามเปลี่ยนรหัสผ่านสำหรับตัวเอง เขาจะต้องได้รับอนุญาตให้แก้ไขข้อมูลในสองไฟล์ดังกล่าว ตั้งค่าบิต setuid บน passwd
ช่วยให้ “john1” มีสิทธิ์รูทชั่วคราวเพื่อเปลี่ยนรหัสผ่านของผู้ใช้และอัปเดตข้อมูลในทั้งสองไฟล์
Setuid Security Risk
ถ้าคุณไม่ระวัง ผู้โจมตีสามารถใช้ประโยชน์จากไบนารี setuid เพื่อควบคุมระบบของคุณ โดยปกติผู้ใช้ไม่ควรติดตั้งโปรแกรม setuid โดยเฉพาะ setuid สำหรับผู้ใช้อื่นที่ไม่ใช่ตนเอง สิ่งสำคัญที่สุดคือ คุณไม่ควรเปิดใช้งานไบนารี setuid สำหรับผู้ใช้รูทในโฟลเดอร์โฮมของคุณ สิ่งเหล่านี้มักเป็นม้าโทรจันหรือมัลแวร์
บทสรุป
Setuid สามารถตั้งค่าได้ในไฟล์ปฏิบัติการเท่านั้น ในทำนองเดียวกัน setgid
สามารถตั้งค่าบิตได้เช่นกัน ซึ่งช่วยให้สมาชิกทุกคนในกลุ่มสามารถเรียกใช้ไฟล์สั่งการโดยได้รับอนุญาตจากเจ้าของ
โปรดทราบว่า setuid
และ setgid
บิตมีความอ่อนไหวต่อความปลอดภัยและต้องใช้โดยผู้ดูแลระบบที่ผ่านการรับรองเท่านั้น
อ่านต่อ:
- วิธีใช้ Sticky Bit เพื่อจัดการไฟล์บน Shared Directory ใน Linux
- วิธีการตรวจสอบการสะกดใน Linux Terminal
- การใช้ find,location, which and whereis Commands to Search for Files in Linux