ความแตกต่างระหว่างเจ้าของ / รูทกับ RUID / EUID


24

ฉันค่อนข้างใหม่กับแนวคิดที่กล่าวถึงในคำถามและการอ่านเกี่ยวกับพวกเขาจากแหล่งต่าง ๆ เท่านั้นทำให้พวกเขาสับสนมากขึ้น ดังนั้นนี่คือสิ่งที่ฉันเข้าใจจนถึง:

เมื่อเราได้รับอนุญาตสำหรับไฟล์มันจะมีลักษณะดังนี้:

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

เราคิดว่าผู้ใช้user2ที่อยู่ในกลุ่มที่พยายามที่จะดำเนินการusers file.binถ้าบิต setuid ไม่ได้ตั้งค่านี้จะหมายถึงว่าทั้ง RUID และ EUID ของfile.binเท่ากับ UID user2ของ แต่เนื่องจากบิต setuid มีการตั้งค่าที่นี้หมายถึงว่า RUID อยู่ในขณะนี้เท่ากับ UID ของuser2ขณะ EUID user1เป็นโพสต์ของเจ้าของไฟล์ที่

คำถามของฉันคือ:

  1. อะไรคือความแตกต่างระหว่างเจ้าของไฟล์และroot? ไม่rootมีสิทธิ์เดียวกันเป็นเจ้าของ? หรือเราจะต้องมีรายการแยกต่างหากในรายการสิทธิ์สำหรับroot?
  2. ความแตกต่างระหว่าง RUID และ EUID หรือไม่
    • ตามที่ฉันเข้าใจแล้ว RUID และ EUID จะใช้กับกระบวนการเท่านั้น หากเป็นเช่นนั้นเหตุใดพวกเขาจึงมีค่ารหัสผู้ใช้
    • หาก RUID เป็นผู้ใช้ที่สร้างกระบวนการและ EUID เป็นผู้ใช้ที่กำลังดำเนินการอยู่ในขณะนั้นประโยคแรกของคำตอบแรกในคำถามนี้ก็ไม่สมเหตุสมผลเลย
    • ฉันเข้าใจถูกต้องหรือไม่ว่าบิต setuid ทำอะไรได้บ้าง

คำตอบ:


35

นี่คือคำตอบ:

  1. rootมีการเข้าถึงไฟล์และไดเรกทอรีอย่างเต็มรูปแบบเสมอ เจ้าของไฟล์ก็มักจะมีเช่นกัน แต่ก็ไม่ได้เป็นเช่นนั้นเสมอไป ตัวอย่างเช่น:

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1เป็นเจ้าของ ; อย่างไรก็ตามพวกเขาสามารถอ่านและดำเนินการเท่านั้น แต่rootยังคงสามารถเข้าถึงไฟล์ ( rwx )

  2. RUID เป็นID ผู้ใช้จริงและไม่มีการเปลี่ยนแปลง (เกือบ) หากบันทึกในระบบเปลือกจะเปิดตัวแล้วกับชุดประชาชนตัวจริงในการuser2 user2กระบวนการทั้งหมดที่พวกเขาเริ่มต้นจากเชลล์จะรับรหัสจริงuser2เป็นรหัสจริงของพวกเขา

    EUID เป็นมีผลบังคับใช้ User IDจะเปลี่ยนกระบวนการ (ไม่ได้สำหรับผู้ใช้) ที่รันผู้ใช้ที่มีการตั้งค่าบิต setuid

    ถ้าuser2รันfile.bin, RUID จะเป็นuser2และ EUID user1ของกระบวนการเริ่มต้นจะเป็น

มาใช้กรณีของpasswd:

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • เมื่อuser2ต้องการเปลี่ยนรหัสผ่านของพวกเขา/usr/bin/passwdพวกเขาดำเนินการ

  • RUID จะเป็นuser2แต่ EUID rootของกระบวนการที่จะได้รับ

  • user2สามารถใช้passwdเพื่อเปลี่ยนรหัสผ่านของตนเองเท่านั้นเนื่องจากpasswdตรวจสอบภายในRUID และหากไม่ได้rootเป็นการกระทำของมันจะถูก จำกัด ให้ใช้รหัสผ่านของผู้ใช้จริง

  • มันเป็นความจำเป็นที่จะกลายเป็น EUID rootในกรณีของpasswdเพราะความต้องการของกระบวนการที่จะเขียนไปและ/etc/passwd / หรือ/etc/shadow


ขอขอบคุณ! ตอนนี้ทุกอย่างชัดเจนขึ้น ฉันมีคำถามอีกหนึ่งคำถาม EUID จะเปลี่ยนแปลงก็ต่อเมื่อผู้ใช้ดำเนินการตามกระบวนการซึ่งมี setuid bit set เท่านั้น? หรือมันสามารถเปลี่ยนแปลงได้ในสถานการณ์อื่นหรือไม่? และถ้าเป็นเช่นนั้นสถานการณ์นั้นคืออะไร?
user1956190

1
ฉันคิดว่าไม่มีวิธีอื่นนอกจากดำเนินการกระบวนการที่มีการsetuidตั้งค่าบิต
jcbermu

3
กระบวนการที่รันจากโปรแกรม“ setuid” (เช่นกระบวนการที่มี UID ที่มีประสิทธิภาพ≠ Real UID) สามารถตั้งค่า EUID กลับเป็น RUID ในบางกรณีสามารถเปลี่ยน EUID ไปมาระหว่างค่าเริ่มต้น (เช่นเจ้าของไฟล์โปรแกรม) และ RUID นอกจากนี้อาจสามารถตั้งค่า RUID ให้เท่ากับ EUID … (ต่อ)
สกอตต์

2
(ต่อ) ... กระบวนการสิทธิ์ (ผู้ที่มี EUID = 0 aka root) สามารถตั้งค่า EUID และ RUID ไปเป็นค่าโดยพลการ (ตัวอย่างเช่นlogin, suและsudoโปรแกรมทำอย่างนั้น) โดยทั่วไปเมื่อกระบวนการที่มีสิทธิพิเศษเปลี่ยน UID เป็นค่าที่ไม่ใช่ศูนย์จะไม่มีสิทธิ์อีกต่อไปและไม่สามารถกลายเป็นrootอีกครั้งได้ ดูหน้าคนsetuid (2) , seteuid (2)และsetreuid (2)
สกอตต์

1
(ต่อ) มันถูกนำมาใช้เป็นแฮ็คเพื่อแก้ปัญหาหนึ่งซึ่งได้รับการแก้ไขในภายหลังในวงกว้าง มันอาจถูกลบออกจาก Linux ยกเว้นว่าการตัดแต่งกิ่งจะทำลายโปรแกรมที่ใช้งาน ไมเคิลเคอร์ริส, ผู้เขียนของลินุกซ์ Programming Interface ,กล่าวว่าในรุ่นของเขาsetfsuid (2) หน้าคนsetfsuid()เป็นที่ไม่จำเป็นในปัจจุบันและควรหลีกเลี่ยงในการใช้งานใหม่.”
สกอตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.