איך אני מריץ CHROOT

amosexy

New member
איך אני מריץ CHROOT

היי חברים
איך אני יכול להריץ CHROOT דרך הקוד
לא כ ROOT USER

תודה רבה
 

N i X

New member
מה אתה רוצה להשיג?

http://il.php.net/chroot
אתה חייב הרשאות של root, כי זה מה שה system call מתחת דורש.
אתה יכול לעלות עם הרשאות של root ואז להוריד אותם עם setuid/setgid, אבל לא יודע אם זו הדרך כי לא אמרת מה התוצאה הרצויה בסוף =)
 

amosexy

New member
אני מריץ קוד של מישהו אחר

דרך השרת שלי
והבנתי שככה אני מונע ממנו לעשות לי צרות במערכת..

בגדול..
 

bnayal

New member
תגדיר את זה חד פעמי ברמת השרת

ובכל מקרה, אם אתה לא סומך על הקוד הזה על תריץ אותו אצלך...
 

amosexy

New member
הקוד הוא של סטודנטים

והרצת הקוד הוא חלק ממטרות המערכת
אז בעזרת חבר בפורום לינוקס הגבלתי את הקוד מבחינת CPU ומקום בדיסק

עכשיו אני רוצה להגביל אותו ברמת ההרשאה שלו
איך אני מגדיר את זה חד פעמי?
התיקיות נוצרות דינאמית פר יוזר שמעלה קוד
תודה
 

N i X

New member
מזה היית צריך להתחיל =)

ולא ללכת סחור סחור.

אתה יכול להוסיף לקוד שאיתי הביא לך שיעשה את ה chroot אחרי ה fork בילד לפני שהוא מריץ את התוכנה עצמה.
שהתוכנה תעלה כ-ROOT, הילד ירוץ גם כ-root, יעשה Chroot, יזרוק את ההרשאות עם setgid/setuid ויריץ את מה שאתה רוצה להריץ.

בנוסף אין בקוד שלו הגבלה על זכרון שהתוכנה יכולה לתפוס.

בספרייה שאתה עושה אלייה chroot צריך שיהיה לך את כל הספריות שתוכנה צריכה בשביל לרוץ, ספריות C סטנדרטיות (libc.so) וכל דבר אחר שהיא משתמשת וזה כמו שכבר הבנת כאב ראש לא קטן, אבל במקרה שלך, לסטודנטים שי בטח סט מאוד מוגבל של דברים שהם משתמשים אז זה אמור להיות יותר פשוט ואפשר להסתדר =)
 

amosexy

New member
ובעברית


איך אפשר לבדוק מה התלויות ומה הכרחי...
אם נניח הוא משתמש ב MATH
האם אני אצטרך להעתיק עוד משהו חוץ מ MATH
או שכל אחד כזה אני צריך לסרוק רקורסיבית כדי להעתיק את כל ה INCLUDE שיש בו

תודה
 

N i X

New member
לא אמור להיות לך אכפת מהאינקלודים

תקמפל את הקוד בלי קשר להרצה, בלי chroot ובלי הרשאות מיוחדות,
רק בשביל ההרצה אתה צריך את הספריות, תוכל לקבל מהפלט של ldd :


yury@server:~> ldd ./a.out
./a.out:
libc.so.7 => /lib/libc.so.7 (0x800646000)
yury@server:~>


מתוך MAN:

The ldd utility displays all shared objects that are needed to run the
given program or to load the given shared object. Contrary to nm(1), the
list includes “indirect” dependencies that are the result of needed
shared objects which themselves depend on yet other shared objects.
 

N i X

New member
איזה סוג של קוד?

קוד PHP? בינארי?

איך אתה מגביל מבחינת זכרון, מעבד ותראפיק שהוא יכול להוציא \ לקבל?

לדעתי כדאי לוותר על הרעיון אם אתה לא סומך על מקור הקוד הזה.
 

N i X

New member
אז פה יהיה לך עוד בעיה

בשביל שהבינארי יעבוד אתה צריך להזיז את כל הספריות שהוא משתמש בהן ( נגיד iconv ) לתיקיה שלו, כי אחרי שתעשה chroot לא יהיה לו גישה לכל הספריות ב /usr/lib (לצורך הדוגמא).
 

amosexy

New member
מרד.. זה אומר לשכפל מלא DATA כל הרצה

דממ
זה לא רעיון כל כך טוב
יש משהו אחר אולי?
 
למעלה