כל פרילאנסר (שמכיר Linux), כל איש לינוקס (במיוחד אנשי סיסטם) מכיר את הסיטואציה הבאה: אתה נמצא לך אי-שם מתעסק בעניינך הפרטיים, כשלפתע לקוח מתקשר בהיסטריה: "האתר נפל!", "האפליקציה לא עובדת!", "תציל אותי מיד!".
במצב רגיל אתה שולף את המחשב הנייד עם המודם הסלולרי (או הטלפון הסלולרי בחיבור בלוטות'), מתחבר לאינטרנט ובודק מה שצריך לבדוק.
אבל מה קורה כשאתה זקוק לטפל בבעיה של לקוח אחד ואתה נמצא אצל לקוח אחר? במקרים רבים יכול להיות מצב שאינך יכול להתחבר (קליטה זוועה בבניין, הלקוח הנוכחי לא מחבב את הרעיון של מחשב נייד זר פתוח, המחשב הנייד שלך בדיוק עסוק בלהיתקע, אין לך מחשב נייד כרגע זמין)? אתה די תקוע. חברות רבות לא אוהבות פתיחת פורטים חיצוניים החוצה (הכל עובר דרך פרוקסי וזהו), כך ששימוש בפורט 22 לא אפשרי.
בקיצור, מצב בעייתי. לא קורה הרבה, אבל כשזה קורה, מזיעים המון.
לאלו שלא מכירים, אני מעוניין להציג אפליקציית web נחמדה ושמה: Shell In a Box. מה שהאפליקציה הזו עושה זה משהו פשוט מאוד: מדמה טרמינל לינוקס (xterm ליתר דיוק), ומאפשרת לך להתחבר דרך ה-web לשרת שלך. אתה נכנס לכתובת ומקבל פרצוף מוכר: Login prompt. האמולציה עצמה היא אמולציה מעולה, כולל תמיכה בדברים כמו CTRL Z, CTRL C ועוד, יש לה תמיכה לחיצים, אפשר לערוך איתה קבצים מבלי לשבור את האצבעות בקיצורי דרך שהיו ב-Solaris, ומנסיון שלי איתה, פשוט כיף לעבוד איתה.
האפליקציה עצמה פותחת פורט 4200, ומאפשרת חיבור דרך http רגיל ו-https עם תעודת SSL (אם יש לכם). היא כוללת אפשרויות רבות (שאפשר לראותם כאן), כולל תמיכה בפורטים אחרים, תמיכה וביטול ביפ (אודיו ו-ויזואל). האפליקציה רצה כ-Daemon, אך אפשר להריץ אותה ב-CGI ש"ימות" בתום שימוש לדוגמא. דבר חביב על אוהבי אבטחה.
שיחקתי עם האפליקציה ותיקנתי בה מס' תיקונים פשוטים, כך שהיא יכולה לרוץ על פדורה 15 וגם על סנטוס 5.6. לאלו המעוניים לרוץ ולהתקין, כאן נמצא קובץ ההתקנה עבור פדורה 15, כאן עבור CentOS וכאן יש קובץ ה-SRPM לאלו שמעוניינים לקמפל וליצור חבילות חדשות להפצות כמו SuSE ואחרות (לחובבי האובונטו, דביאן – זה נמצא ב-repository שלכם. אגב, הקרדיט לקובץ SPEC לא מגיע לי אלא לבחור ששם את זה כאן).
מטבע הדברים, פורט 4200 הוא לא בדיוק פורט סטנדרטי ובחברות רבות לא תוכלו לגשת לשרת ולפורט הזה. מה עוד שפורט נוסף פתוח הוא לא בדיוק דבר נחמד וטוב מבחינת אבטחה. לשם כך, נשתמש במודול Proxy של אפאצ'י, כדי שאפאצ'י ישמש כפרוקסי לאפליקציית Web, כך שדרך פורט 80 (או 443 אם אתם משתמשים ב-https) נוכל לגשת ל-Shell.
רק מה, אם נפתח את ה-Shell לגישה לעולם, גוגל מהר מאוד יסרוק את המחיצה, וסקריפטים עולצים קופצים ינסו להיכנס דרך הכניסה הזו. לשם כך נוסיף שכבת אבטחה מינימלית של אפאצ'י, מה שנקרא Auth Basic שתבקש מאיתנו שם משתמש וסיסמא לפני שבכלל נקבל את הדף לעשות Login.
אז ראשית ניצור קובץ conf לאפאצ'י. בפדורה/סנטוס מכניסים את הקובץ בתוך תיקיית etc/httpd/conf.d/ ונקרא לזה shl.conf
ומה יהיה לנו בקובץ shl.conf? הגדרות של הפרוקסי ושל אותנטיקציה בסיסית. מכיוון שוורדפרס לא אוהב כל כך שורות טקסט של קונפיגורציה, שמתי את הדברים ב-Pastebin לעיונכם כאן. ה-RAW (החלק התחתון בדף בקישור) הוא הקובץ האקטואלי שאתם יכולים להעתיק לתוך shl.conf
עכשיו יש צורך ליצור קובץ htpasswd. (עם הנקודה). לשם כך ניכנס לאותה תיקיה ששם ימצא הקובץ שלנו (שימו לב שהמיקום אמור להיות בתוך שורה 5 כפי שניתן לראות בקישור), ונכתוב את הפקודה:
htpasswd -c .htpasswd myuser (כאשר ה-myuser הוא שם המשתמש שתבחרו). התוכנה תשאל אתכם לסיסמא ותבקש אותה שוב לוידוא (כדאי לשים סיסמא חזקה, לא משהו שכל אחד יכול לנחש).
עתה, לאחר שהתקנתם את ה-RPM וכתבתם קובץ זה, יש צורך לאמר ל-Apache לטעון את הקונפיגורציה מחדש. אין צורך לאתחל מחדש את שרת האפאצ'י. שורת service httpd reload תספיק.
עתה פיתחו דפדפן, הכניסו את כתובת האתר שלכם עם תוספת shell/ לדוגמא: http://mysite.com/shell ואם הכל תקין, המערכת תבקש ממכם שם משתמש וסיסמא שהכנסתם מקודם. אם השלב הזה עבר, אתם תקבלו סמן שובב מקפץ (אם הסמן האדום חלול, אז ה-TAB אינו בפוקוס. לחצו על הדף עם העכבר). הכניסו שם משתמש וסיסמא (לא מומלץ root!), ואם הכל תקין, תקבלו shell רגיל להנאתכם.
עד כאן ההגדרות. אלו כמובן הגדרות בסיסיות לחלוטין, וניתן לשפר את ההגנות בשימוש טכניקות שונות (שיטות אותנטיקציה אחרות, כתיבת אפליקציית PHP פשוטה שתוכלו להעלות מפתח פרטי משלכם ושאותו מפתח ישלח לפרוקסי כדי לעשות אותנטיקציה ללא הכנסת סיסמא אלא בחילופי מפתחות – ועוד), אך בסופו של דבר עם אפליקציה זו תוכלו לעשות כרצונכם גם בתוך חברה עם חומת אש סגורה (שמאפשרת רק גלישה ברשת), וכך תוכלו לטפל בדברים גם אם אתם נמצאים באינטרנט קפה, או מהמחשב שאינו שלכם. כך גם יתאפשר לכם לבדוק אם שינויים שעשיתם לאתר חיצוני אכן פועלים מבחוץ בצורה תקינה.
תהנו.