Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีที่ setuid ให้ผู้ใช้รันไฟล์ด้วยสิทธิ์สูงขึ้น

เมื่อรันไฟล์ executable ใน Linux มันจะรันด้วย user และ group ID ของผู้ใช้ปกติ แต่มีครั้งที่ต้องรันไฟล์นั้นเป็นผู้ใช้อื่น (เช่น root) แทนที่จะสลับบัญชีผู้ใช้ สามารถใช้ setuid ให้รัน executable เป็นเจ้าของไฟล์ ไม่ใช่ผู้ใช้ปัจจุบัน บทความนี้อธิบายว่า setuid ทำงานอย่างไร และให้ผู้ใช้รัน executables/binaries ด้วยสิทธิ์เพิ่มขึ้น (escalated privileges) ได้อย่างไร

setuid ทำงานอย่างไร?

Setuid ย่อมาจาก SET User ID on execution สมมติมี executable ชื่อ "identity" สร้างโดย root user เมื่อรัน มันจะรันด้วย user ID, group ID และสิทธิ์ของคุณ หากตั้งค่า setuid bit บนไฟล์ "identity" ตอนรัน มันจะรันเป็น root user และสิทธิ์ของ root

เป็นภาพประกอบ ตรวจสอบเจ้าของไฟล์ "identity" ก่อน และยืนยันว่าเป็นของ root permission string แสดง executable (x) bits ตั้งไว้สำหรับ user, group และ others

วิธีที่ setuid ให้ผู้ใช้รันไฟล์ด้วยสิทธิ์สูงขึ้น

User "john1" รันไฟล์ "identity" ซึ่งกลายเป็น process ตอนรัน ตามรายการ process process ถูกสร้างและรันภายใต้ username และ user ID "john1"

วิธีที่ setuid ให้ผู้ใช้รันไฟล์ด้วยสิทธิ์สูงขึ้น

ต่อมา เป็น root user ตั้ง setuid bit ของไฟล์ "identity":

chmod u+s /usr/bin/identity

"u" หมายถึง setuid bit (+s) ต้องตั้งสำหรับ user เท่านั้น

วิธีที่ setuid ให้ผู้ใช้รันไฟล์ด้วยสิทธิ์สูงขึ้น

สำหรับเจ้าของ ในส่วน executable ของ permission string เห็นว่า "x" ถูกแทนที่ด้วย "s" ทุกครั้งที่เจอ "s" สำหรับ executable หมายถึง setuid bit ถูกตั้งไว้

รูปแบบตัวเลขของคำสั่ง chmod ใช้ได้เช่นกัน:

chmod 4755 /usr/bin/identity

การเพิ่ม 4 ใน permission string แบบตัวเลข หมายถึงการรวม setuid bit

ต่อไปนี้คือสิ่งที่เกิดขึ้นเมื่อ "john1" รันไฟล์ "identity" อีกครั้ง ดูรายการ process ที่รันอยู่ ตอนนี้เห็นว่า process ถูกสร้างและรันโดย user "root" แทน "john1"

วิธีที่ setuid ให้ผู้ใช้รันไฟล์ด้วยสิทธิ์สูงขึ้น

การใช้งาน setuid bit ที่สำคัญ

ส่วนใหญ่เชื่อมาจากผู้เชี่ยวชาญว่าไม่ควรรันแอปพลิเคชันเป็น root user แต่มีกรณีที่ไฟล์บางไฟล์ต้องรันด้วยสิทธิ์ root เช่น utility passwd ที่ติดตั้งมาพร้อม Linux โดยค่าเริ่มต้น มี setuid bit ตั้งไว้

เหตุผลง่าย: ข้อมูลรหัสผ่านของผู้ใช้เก็บในไฟล์ "/etc/passwd" และ "/etc/shadow" ซึ่งแก้ไขได้เฉพาะ "root" เมื่อ "john1" พยายามเปลี่ยนรหัสผ่านตัวเอง เขาต้องมีสิทธิ์แก้ไขข้อมูลในสองไฟล์ดังกล่าว การตั้ง setuid bit บน passwd ทำให้ "john1" มีสิทธิ์ root ชั่วคราว เพื่อเปลี่ยนรหัสผ่านและอัปเดตข้อมูลในสองไฟล์

ความเสี่ยงด้านความปลอดภัยของ setuid

หากไม่ระวัง โจมตีอาจ exploit setuid binaries ควบคุมระบบของคุณ ผู้ใช้ปกติไม่ควรมีโปรแกรม setuid ติดตั้ง โดยเฉพาะ setuid ให้ผู้ใช้อื่นที่ไม่ใช่ตัวเอง สำคัญที่สุด ควรไม่มี binary setuid ใดๆ สำหรับ root user ในโฟลเดอร์ Home ของคุณ มักเป็น Trojan Horses หรือ malware

สรุป

Setuid ตั้งได้เฉพาะไฟล์ executable เท่านั้น เช่นเดียวกัน bit setgid สามารถตั้งได้ ซึ่งให้สมาชิกทุกคนในกลุ่มรัน executable ด้วยสิทธิ์เจ้าของ

โปรดทราบว่า bit setuid และ setgid เป็นเรื่องความปลอดภัยที่ละเอียดอ่อน และต้องใช้โดย system administrators ที่มีคุณสมบัติเท่านั้น

อ่านต่อ:

  • วิธีใช้ Sticky Bit จัดการไฟล์บน Shared Directories ใน Linux
  • วิธีตรวจสะอะคำในเทอร์มินัล Linux
  • ใช้คำสั่ง find, locate, which และ whereis ค้นหาไฟล์ใน Linux