คุณจะรู้ได้อย่างไรว่าการรันโปรแกรมต้องการรูท


10

ฉันเข้าใจว่านี่เป็นพื้นฐานเล็กน้อยและอาจเป็นคำถามที่โง่ แต่ฉันไม่สามารถหาคำตอบได้

ฉันเข้าใจว่าทุกไฟล์มี"Executable"บิต

ฉันสันนิษฐานว่าโปรแกรมที่ต้องการrootซึ่งเป็นของrootผู้ใช้และrootกลุ่มจะไม่มีExecutableบิตOtherและจะป้องกันผู้ใช้ที่ไม่ใช่รูทที่ดำเนินการสิ่งเหล่านี้ แต่ใน/binและ/sbinไดเรกทอรีฉันเห็นว่าไฟล์ทั้งหมดมีสิทธิ์เช่น-rwxr-xr-x

ดังนั้นสิ่งที่กำหนดว่าผู้ใช้จะต้องมีสิทธิ์การใช้งานรูทเพื่อรันอะไร


1
โดยค่าเริ่มต้นคุณหรือผู้ใช้สามารถเรียกใช้โปรแกรมใด ๆ จาก/binหรือ/sbinไดเรกทอรี ปัญหาคือว่าบางโปรแกรมกำลังทำงานแตกต่างกันขึ้นอยู่กับผู้ใช้ที่เรียกใช้พวกเขา
Radu Rădeanu

คำตอบ:


13

บางครั้งมันอยู่ในรหัส ตัวอย่างเช่นคุณอยู่ตรงกลางของhwclock.c:

if (getuid() == 0)
            permitted = TRUE;
else {
            /* program is designed to run setuid (in some situations) */
            if (set || systohc || adjust) {
                    warnx(_("Sorry, only the superuser can change "
                            "the Hardware Clock."));
[...]

ซึ่งจะเปลี่ยนพฤติกรรมของโปรแกรมถ้าคุณรูทหรือไม่

ในกรณีอื่น ๆ ส่วนใหญ่มันเป็นนัย มอบหมายให้เคอร์เนล ตัวอย่างเช่นหากโปรแกรมเรียกการเรียกของระบบที่ให้คุณรีบูตระบบมันจะทำงานเฉพาะในกรณีที่คุณเป็นรูท หากคุณไม่ใช่รูทคุณจะพบข้อผิดพลาด "สิทธิ์ถูกปฏิเสธ" ที่แอปพลิเคชัน (ถ้าเขียนได้ดี) เพียงรายงานให้คุณทราบ หรือคุณกำลังพยายามลบไฟล์ หากคุณมีสิทธิ์ที่ถูกต้องในไฟล์ที่จะทำมันก็จะประสบความสำเร็จ; ถ้าไม่ขึ้นอยู่กับว่าคุณรูทหรือไม่ --- เมื่อrmโทรunlink()เคอร์เนลจะตรวจสอบการอนุญาต

ดังนั้นโดยหลักการแล้วคุณไม่สามารถพูดได้เพียงแค่ดูที่สิทธิ์ของโปรแกรมที่สามารถเรียกใช้งานได้หากโปรแกรมนั้นต้องการสิทธิ์รูทหรือไม่ โปรแกรมจำนวนมากจะต้องใช้สำหรับการดำเนินการบางอย่างเท่านั้นดังนั้นจึงเป็นการยากที่จะทำสิ่งนั้น กรณีที่hwclockเป็นหนึ่ง (ทุกคนสามารถอ่านนาฬิกา แต่รากเท่านั้นที่สามารถตั้งค่า) แต่มีหลายร้อยของพวกเขา ( kill, rm, cat... )

จากนั้นมีโลกที่เกี่ยวข้องและน่าสนใจของโปรแกรม setuid ...


ดังนั้นโดยทั่วไปเคอร์เนลคือ "รับผิดชอบมัน"? หากโปรแกรมทำการเรียกระบบเคอร์เนลจะพิจารณาว่าผู้ใช้ที่รันโปรแกรมนั้นต้องเป็นรูทและบังคับใช้หรือไม่
คณบดี

2
โดยทั่วไปแล้วใช่ โปรแกรมสามารถทำการทดสอบเพิ่มเติม แต่การตรวจสอบสิทธิ์อยู่ที่ระดับเคอร์เนล โปรแกรม Setuid-root เป็นข้อยกเว้น พวกเขาทำงานเป็นรูทเสมอดังนั้นพวกเขาจึงต้องตรวจสอบการอนุญาตด้วยตนเอง (และเป็นตัวอักษรที่ดีของข้อบกพร่องด้านความปลอดภัย ... )
Rmano
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.