BinaryVision

לנהל את השרת, מהטלפון הנייד

מאת בתאריך 03/04/12, תחת כללי

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

השרת שלי מבוסס CentOS ויש לי טלפון נייד מבוסס סימביאן, הקלינט SSH שלי הוא PuTTY שהומר לסימביאן ואני עושה שימוש בהזדהות על-ידי מפתחות א-סמטרים (אני לא אכסה איך יוצרים מפתחות כאלה, איך מגדירים את השימוש שלהם בשרת ואיך ממירים מהסטדנרט של OpenSSH לסטדנדרט של PuTTY או PPK). ההתחברות לשרת קלילה, אך ברגע שאני מגיע לקונסול אני מגלה קושי לשלוח פקודות לשרת, כמו כן אני מעדיף שהמשתמש יהיה מוגבל בפקודות שהוא יכול להריץ. העניין הופך להיות מורכב כי יש פקודות שאני כן מעוניין שהוא יהיה מסוגל להריץ – אך הן דורשות הרשאות מנהל מערכת.

הפתרון שהגעתי אליו הוא שימוש בסקריפט שיוצר תפריט שהמשתמש מוגבל אליו לאחר שהוא מתחבר. התפריט גם בעל קיצורי דרך, כך שלא צריך לכתוב את הפקודה באופן מלא, רק את המספר התואם בתפריט. לבסוף הסקריפט יגבל את המשתמש אך ורק לאפשרויות שבתפריט מה שימנע מהמשתמש להריץ פקודות אחרות. בעניין הפקודות שצריכות הרשאת מנהל מערכת, אני אעשה שימוש ב-sudo.

יצירת הקבוצה (בשביל sudoers, אני מעדיף לעבוד עם הרשאת קבוצות) ויצירת המשתמש. שימו לב ש-shell יצביע על סקריפט עתידי שניצור "שיכלא" את המשתמש לתפריט.

groupadd staff
adduser -c "Mobile access" -d /home/mobile -s /home/mobile/login.sh -G staff -m mobile

השלב הבא הוא מתן הרשאה לחברים בקבוצה staff להריץ פקודות שצריכות הרשאת מנהל מערכת, זאת נעשה על-ידי הוספת השורה הבאה ל-/etc/sudoers

%staff  ALL=/sbin/iptables -nvL, /sbin/ifconfig -a

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

השלב האחרון הוא יצירת הסקריפט login.sh בספריית הבית של המשתמש (/home/mobile/login.sh), אותה ניצור בעזרת המנהל מערכת (המשתמש לא יוכל לערוך, אך עדיין למחוק אותה, אם נרצה להגן על הקובץ גם ממחיקה נעשה שימוש ב-chattr +i)

#!/bin/bash
# Menu skel by iTK98
# for https://binaryvision.co.il
# License, Public Domain

# Setting 'bold' and 'normal' text
bold=`tput bold`
normal=`tput sgr0`

# Getting terminal width,
# The script will not run if there are less than 50 columns
width=`tput cols`

# Default pause method, wait for any input from user or for timeout in 15 seconds
function pause(){
   echo ""
   echo ""
   read -t 15 -s -n 1 -p "$*"
}

if [ "$width" -lt 50 ]; then
  echo "${bold}Terminal isn't width enough --- Aborting.${normal}"
  pause
  exit 1
fi

# Clear the screen.
clear

# If you want to print a banner
echo "Welcome to iTK98 Solutions,"
pause 'Press any key to continue'

# Lock into the menu
while true; do 

# Print the menu to the user
    clear
    echo "Logins        Processes    Network"
    echo "01. last    11. ps         21. ifconfig"
    echo "02. who        12. top        22. iptables"
    echo ""
    echo "Storage        other"
    echo "31. df        41. something"
    echo ""
    echo "99. Quit"

# Get an input from the user

    read -s -n 1 -N 2 command

# Run the respective command

    if [ "$command" = "01" ]; then
      clear
      /usr/bin/last|head -n 10
      pause 'Press any key to continue'
    elif [ "$command" = "02" ]; then
      clear
      /usr/bin/w
      pause 'Press any key to continue'
    elif [ "$command" = "11" ]; then
      clear
      /bin/ps aux
      pause 'Press any key to continue'
    elif [ "$command" = "12" ]; then
      clear
      /usr/bin/top -d 5
    elif [ "$command" = "21" ]; then
      clear
      sudo /sbin/ifconfig -a|more
      pause 'Press any key to continue'
    elif [ "$command" = "22" ]; then
      clear
      sudo /sbin/iptables -nvL|more
      pause 'Press any key to continue'
    elif [ "$command" = "31" ]; then
      clear
      df -h
      pause 'Press any key to continue'
    elif [ "$command" = "41" ]; then
      clear
      echo "${bold}Not implimented yet.${normal}"
      pause 'Press any key to continue'
    elif [ "$command" = "99" ]; then
      echo "Byebye"
      exit 0
    fi

done
exit 255

נוודא כי הקובץ ניתן להרצה על-ידי כולם

chmod ugo+rx /home/mobile/login.sh

ובכדי לבחון אם המשתמש כאשר הוא נכנס למערכת הוא נכנס אל הסקריפט נריץ את הפקודה

su - mobile

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

:, , , , , , ,
2 תגובות:
  1. Misha

    מאמר מעולה איציק.
    אהבתי ולמדתי עוד כמה דברים חדשים 🙂

  2. TAsn

    רעיון יפה.

    אני אישית משתמש במקלדת של המסך מגע (כן, נורא) וסובל בשקט. 🙂

השאר תגובה

מחפש משהו?

תשתמש בטופס למטה כדי לחפש באתר: