ושוב SHELL_EXEC

thezal

New member
ושוב SHELL_EXEC

שלום יש לי בעיה עם המשפט הבא: shell_exec("sudo repquota -a | grep ".$data[0]." | awk \´{ print $5 }\´"); מה שאני מנסה לעשות הוא : לבודד QUOTA של משתמש ספציפי ולהציג אותו על המסך. הערות: אין בעיה עם SUDO ,הוא עובד לפקודות אחרות. המשתנה DATA קיים ולא ריק. הפקודה ב SHELL עובדת. תודה רבה רבה יריב
 

תמר,

New member
אולי זה ה-$

$ מייצג ב-php שם של משתנה. נסה לשים לפניו סלש הערה: קצת קשה לקרוא את הקוד. נסה להשתמש ב:
div align=left dir=ltr​
בתור תג html, ולפי הסדר הזה. לסיום כתוב
/div​
 

thezal

New member
הבעיה נפתרה....

קודם כל תודה לך תמר. הבעיה לא הייתה בגלל ה $ בפקודת AWK . בידדתי את הבעיה הורדתי את כל השורה מלבד REPQUOTA ,אך שום פלט לא יצא. מה שעשיתי הוא : הכנסתי את כל שורת SHELL_EXEC לתוך משתנה ואחר כך הצגתי את המשתנה. הפלט היה כמו שרציתי : גבול QUOTA למשתמש. יריב
 

thezal

New member
חידוש יפה (עבורי..)

זה נהדר אני אשתמש בו בעתיד..... רק שזה גורם לי קצת לבעיות אבטחה (בגלל זה אני משתמש עם SUDO +סיסמא) יריב
 
רעיונות לפתרון בעיות מסוג זה

דברים שכדאי לעשות: א. הפנייה של הפלט לתוך קובץ. ב. לשים את הפקודה בתוך משתנה, ואז להריץ את shell_exec או כל דבר, עם פרמטר של משתנה, ולא hard coded string. זה מין הרגל בתכנות שעושה רק טוב. ג. להדפיס את הפקודה סמוך מקום שאתה מריץ אותה. ד. בכלל מגניב: להפנות את השגיאות לקובץ, בשביל לבדוק אותו אח"כ דוגמא:
$output_filename = "temp.txt"; $error_filename = "err.txt"; $command = "shutdown -h now"; $command = "$command 1> $output_filename 2> $error_filename"; print "<!-- executing: $command -->\n"; system ($command);​
עכשיו אתה יכול לקרוא את הקבצים out.txt וגם err.txt ולראות בדיוק מה עבר למערכת (איך אומרים shell בעברית? "מעטפת"??) וגם, תוכל לעשות view source ולקרוא את הפקודה כפי ש-PHP הבין אותה
 

thezal

New member
שאלה לגבי גרש הפוך `

שלום למיטב הבנתי ניתן בעזרת גרש הפוך לפנות למ"ע אשר תבצעה פקודה מסויימת. במקרה זה כאמור מ"ע שלי היא לינוקס +APACHE . האם יש להגדיר SUDO כדי לעבוד עם גרש הפוך בשביל פקודות למ"ע? אני יודע שבשביל SHELL_EXEC צריך להגדיר SUDO . בתודה יריב
 

תמר,

New member
למיטב הבנתי

גרש הפוך ו-shell_exec הם זהים (לפחות כך כתוב ב-manual) בעניין ה-sudo וההרצה, לא מובן לי למה אתה צריך sudo. אם אלו פקודות ש-nobody יכול להריץ, לא צריך sudo. ואם לא - לא כדאי להריץ
בכל מקרה, יש ב-apache מודול שנקרא suexec, והוא גורם לכך שפקודות שמריצים מ-cgi ירוצו עם uid ו-gid מסויים. אני לא יודעת אם זה פועל באותה דרך עם php. בכל מקרה, נראה לי שכדאי שתנסה את המודול הזה.
 

thezal

New member
הרעיון הכללי.....

שאני מנסה לבנות הוא מעייןWEB HOSTING עם אפשרויות נוספות. לכן אני צריך לחשוב על דרך מאובטחת יחסית . כאשר אדם מסויים יבנה ווב לדוגמא, הוא לא יוכל להריץ פקודות שקשורות לSYS שלא יוכל לגרום נזק לפלטפורמה עצמה. יריב
 

תמר,

New member
רעיון

אתה יכול להריץ מהסקריפט ב-php סקריפט אחר שתכתוב (shell או perl), שיבצע פעולות מסויימות שאתה צריך. יש אפשרות להשתמש ב-include על מנת להשתמש בקבצי הגדרה חיצוניים ל-apache. אתה גם יכול לעשות include לספריה, ואז כל הקבצים בספריה מוכלים ב-apache. אם תשתמש באפשרות הזאת, תוכל לייצר את httpd.conf כלא-קריא לעולם, ואת הספריה הנ"ל עם אפשרות קריאה, ולשנות את הקבצים שם. אם לא הבנת את ההסבר שלי, וגם אם כן - תסתכל פה.
 
עוד פתרון אפשרי (אבל כבד)

זה להריץ daemon שמקבל בקשות מטפל בהן אינדיבידואלית, ועושה מה שצריך, עם הuid שמריץ את הdaemon. לא נראה לי שזה המקרה כאן, אבל זאת אופציה.
 
למעלה