כל הזכויות שמורות לטל בן שושן – Shushan.co.il
Unix & Linux Basics
במאמר זה אסביר על מערכת ההפעלה לינוקס ועל כל הפעולות הבסיסיות ביותר במערכת ההפעלה
בעולם מערכות ההפעלה שולטות 3 ענקים: מייקרוסופט, אפל ולינוקס
האחת Windows השניה Macintosh והשלישית היא Linux.
לינוקס מערכת הפעלה מסוג Unix, היא כתובה בקוד פתוח ואילו Linux = Kernel, הקרנל אפשר לומר הוא בסיס מערכת הפעלה ואילו GNU + Linux הוא מערכת ההפעלה כולה הכוללת את הממשק והKernel
המיוחדות של לינוקס זה ההפצות הרבות שקיימות וכיצד קיימות כל כך הרבה הפצות? בגלל הקוד פתוח, יכול מתכנת או קבוצת מתכנתים לקחת את הLinux Kernel ועליו לבנות איזה הפצה שרק ירצו.
הלינוקס קרנל הראשון נכתב על ידי לינוקס טורוואלדס.
בגלל ההמרה (היותו קוד פתוח) שבוצע ללינוקס לטלפונים חכמים (Android) שרתים (RedHat ועוד הפצות) מחשבי על וMainframe הוא הנפוץ ביותר בעולם ומותקן על הכי הרבה מכשירים
הפצה נוספת לדוגמה היא ה ChromeOS שמותקנת על מחשבים ניידים רבים והיא הפצה של לינוקס.
הפצות של לינוקס הן בבסיסן Linux Kernel אך כל הפצה שונה במהותה, הפצות לדוגמה: CentOS , Fedora, Debian , Red Hat, ArchLinux , OpenSuse, Ubuntu ואלו ההפצות הנפוצות ביותר.
לכל הפצה יכול להיות גרסה שונה של הקרנל (את הגרסאות אפשר להוריד כאן), ה Boot System יכול להיות שונה אף הוא מהפצה להפצה, המילה "לינוקס" היא הרכבה של הלינוקס Kernel ומערכת ההפעלה שהיא הGNU כמו הרכיבים: דרייברים, מנהל החבילות ( Package Manager), סביבת שולחן העבודה (אם הממשק הוא GUI) ואפליקציות כמו ( Apache, FTP,PHP וכו')
למשל CentOS דומה כמעט בכל הפעולות שלו ל Rad Hat ואילו Ubuntu דומה ל Debian, אז כיצד ניתן לפשט את ההסבר? מUNIX יצא הקרנל של לינוקס ובתוכו קיים ה GNU שאיתו יש את ההפצות שהזכרנו לעיל ואילו BSD שגם הגיע מUNIX קיים למשל ה MACOS
הסמל שמסמל את לינוקס הוא טוקס, Tux הוא פינגווין והוא סימלו של לינוקס!
ההפצה שאני משתמש בה היא CentOS בגרסה 7
לינוקס בנוי כך:
החומרה -> מערכת הקבצים, דרייברים, Boot -> התוכנות כמו Bash, sh, cat ,vim, ls
לינוקס מגיע ב2 גרסאות עיקריות שאולי אתם מכירים ממיקרוסופט גרסת ה GUI וגרסת ה Core רק שבלינוקס השמות הם Desktop וגרסת Minimal \ Server \ CLI
Super User Vs Normal User
למערכת ההפעלה יש משתמש רגיל ו"סופר" משתמש או באנגלית User and Super User, משתמש רגיל בדומה למייקרוסופט לא יכול לבצע פעולות אשר דורשות הגדרות מנהל בשפה של לינוקס הגדרות שדורשות Super User
בCentOS והפצות נוספות שם המשתמש של ה SuperUser הוא Root ואילו של המשתמש הרגיל זה כל שם משתמש שאתם בוחרים.
לכל משתמש יש UID מספר מזהה שמזהה רק את המשתמש המסוים, לRoot יש UID של 0 ואילו למשתמש שלכם הUID מתחיל מ100 וגודל לפי כמות המשתמשים במחשב
כאשר מערכת ההפעלה עולה, עולה Banner שלרוב יסמל על איזה הפצה אתם עובדים ניתן לראות בתמונה שכתוב CentOS Linux 7 גרסת Core
ואילו בשורה למטה באיזה קרנל אנו משתמשים
לאחר מכן תאלצו להזין את שם המשתמש שלכם והסיסמא במקרה שלי הוא Root ( משתמש ה Super User) והסיסמא שלו
אם תהיתם מדוע כאשר אתם מקלידים את הסיסמא לא מופיע לכם ******* זה מכוון שתאי הסיסמא בלינוקס לרוב ללא Echo ולכן אינם מוצגים לכם.
לאחר שהתחברים עם משתמש Super User שהוא Root יופיע שם המשתמש ושם השרת root@localhost ואחריו לרוב #, סימול זה אומר שאתם נמצאים במצב Root (או Super User)
Shell
לאחר שהתחברתם למערכת ההפעלה תגיע אל ה Shell "המעטפת" שהיא אחראית על גישה למערכת ההפעלה עצמה ולתוכנות הקיימות:
המעטפות המפורסמות ביותר הן:
Sh - Bourne Shell
מעטפת הפקודה של בורן, היא מעטפת פקודה כחלק מUnix והיא הומצאה על ידי סטפן בורן ב1977 במעבדות בל ולאחר 1977 מעטפת פקודה זו הפכה לנפוצה ביותר ולברירת המחדל לכתיבת תוכנות ופקודות אצווה למערכות מבוססות יוניקס
Bash – Bourne Again Shell
השם מוכר לכם? ונשמע כמו "מעטפת אשר נולדה מחדש" מעטפת זו הומצאה עבור GNU שמה של המעטפת נגזר מSh אותו Bournce Shell ואילו Bash מתקדמת הרבה יותר, לעומת Sh מעטפת Bash יכולה לערוך את הפקודות עצמן, כתיבת פונקציות , שליטה בתהליכי המשתמש וכיום Bash הפך דה פקטו לברירת מחדל בהפצות מבוססות Unix למעטפת הרשמית, בדומה למייקרוסופט ולקבצי ה BAT שלה גם Bash יכול (עם התחבר שלו כמובן) להריץ קבצי אצווה.
* מיקרוסופט החל מווינדוס 10 מאפשרת על ידי כלי שפיתחה עם יצרנית ההפצה Ubuntu להריץ Bash.
Ksh – C Shell
כבר לא בשימוש נרחב היא נוצרה בשנות ה70 עבור פרויקט BSD ומעטפת זו נכתבה בשפת C
Csh – Korn Shell
היא נכתבה במעבדות בל בשנות ה80 כמה שנים לאחר Bourne Shell ונכתבה על בסיס קוד המקור שלו והיה מתקדם יותר ממנו, אך לא מBash
פקודות בסיסיות והצגה של המעטפת:
אם נקיש
echo $0 – נקבל -bash שכן זהו המעטפת שאנו משתמשים בה
uname -a – נקבל מידע על ההפצה שאנו משתמשים ועל הקרנל שלה Linux localhost.localdomain 3.10.0-514.26.2.el7.x86_64 GNU/Linux
חשוב לזכור:
Unix רגיל לאותיות גדולות או קטנות – A a Bb Cc
פקודה תתחיל בתחילה ולאחר מכן יגיע ה Argument, ככל שנקיש יותר פקודות ב Bash נלמד יותר על התהליך.
מבנה ה Shell
[root@localhost ~]# ls /root
[root@localhos – המשתמש ושם המחשב שאנו משתמשים כעת
~] – הנתיב בו אנו נמצאים ~ אומר שאנו נמצאים בתיקיית ה /root
# – ה Shell Propmt, במצב זה # אנו נמצאים גם בהרשאות של Super User
ls – פקודה, פקודה זו אומרת "לנבור" או להציג מה יש בתוך התיקייה (מה יש בתוך ה Argument)
/ – התיקייה הראשית (ה Root Directory)
root – תיקיית המשתמש Root
מקשי מקלדת ב Bash:
TAB – כאשר אתם מקלידים פקודה או Argument ה Bash יכול להשלים לכם את המילה לבד, לחצו על Tab
Ctrl + c – יסגור \ יבטל את הפקודה שכרגע הרצתם או שאתם כרגע כותבים
Ctrl + u – ימחק את השורה כולה
Ctrl + h – ימחק אות מהשורה ממשכמו BackSpace
ברוב המקרים בהם תוסיפו לפקודה את –help תקבלו הסבר על הפקודה ועל הצורה בה יש לעבוד איתה, לדוגמה
[root@localhost ~]# ls --help Usage: ls [OPTION]... [FILE]... List information about the FILEs (the cur......................................
ויש עוד המשך להסבר…
החלפה למשתמש אחר – SU
כאשר אני רוצה להחליף משתמש שיצרתי במערכת, אחליף אותו באמצעות הפקודה
su root
ניתן להזין במקום root כל משתמש אחר שיצרתם במערכת
Permissions הרשאות
הרשאות בלינוקס מוצגות בתצורה הבאה
RWX Read Write Excute
ויש 3 סוגי קבוצות
User Group Others
לכל קבוצה יש את 3 סוגי ההרשאות RWX לכן כאשר אתם מקישים
מופיע לכם
-
- --- --- ---
d Owner Group Others
הd שמופיע מסמן לנו Directory שזה אומר תיקייה, ואילו מצב בו לא רשום זה אומר קובץ
Owner – בעל התיקייה או הקובץ, רשום לנו שהוא Root
Group – קבוצה, יכול להיות קבוצה שנקראת "ווב" ובה כל המשתמשים שיש להם את ההרשאות שרשומות
*אדגיש שבתמונה למעלה יש קבוצה בשם Root , הRoot הכי ימני זה הקבוצה, ואילו ה Root השמאלי הוא המשתמש
Others – כל אחד אחר, כל משתמש או קבוצה במערכת
הכנתי טבלה שמציגה את סוגי ההרשאות
בפקודה למטה יצרתי קובץ
touch tal.txt
הצגתי את ההרשאות של הקובץ
ls -l tal.txt
ניתן להבחין, למשתמש יש | כתיבה וקריאה|
לקבוצה יש | קריאה בלבד|
לאחרים יש | קריאה בלבד|
אם הייתי רוצה לשנות ללכל אחד מהם את ההרשאות היינו משתמשים בפקודות
chmod – משנה את ההרשאות על התייקיה ( אבל משאיר את הבעלים שהוא Root ואת הקבוצה ללא שינוי!)
chmod u+rwx,g+rw,o-r tal.txt
כאשר משתמשים ב chmod יש להשתמש ב+ או – שכן ה+ מוסיף הרשאות, וה – מוריד הרשאות
כמו בתמונה
u - משתמש g - קבוצה o - אחרים
הוספתי למשתמש הרשאות מלאות , כתיבה קריאה והפעלה
לקבוצה הוספתי קריאה וכתיבה
ולאחרים הורדתי את ההרשאות
לכן אחרי שהקשתי שוב את הפקודה
ls -l tal.txt
קיבלתי בדיוק את ההרשאות שנתתי.
צורה נוספת להרשאות בלינוקס, הוא סדרת מספרים —
למשל הרשאות מלאות , כך שיהיה כתיבה קריאה והרצה למשתמש\קבוצה\אחרים הוא למשל 777
אבל אך ההרשאות האלו עובדות?
הכנתי טבלה נוספת שאסביר עליה בהמשך
נניח ואני רוצה לתת הרשאות לקובץ tal.txt
chmod 777 tal.txt
זה אומר שה7 הראשון הוא לUser, ה 7 השני הוא לקבוצה וה7 השלישי הוא לאחרים
נניח והייתי רוצה לתת רק לroot ולקבוצה שכרגע יש בעלות על הקובץ הרשאות מלאות אבל לאחרים לא לתת כלל הרשאות
הייתי משתמש בפקודה הבאה
הבנתם את הרעיון, מצויין!
בעל הקובץ\תיקייה Chown | יצירת קבוצה ושינוי בעל הקבוצה או הבעלים על הקובץ \ תיקייה
נניח שאני רוצה ליצור משתמש, על מנת ליצור משתמש , אשתמש בפקודה
adduser tal
cat /etc/passwd
passwd tal
groupadd managers
usermod -g managers tal
אם נקיש את הפקודה
id
נוכל להבחין באילו קבוצות root שלנו חבר ועם איזה משתמש אנחנו כרגע נמצאים
אבל אם נקיש
id tal
נוכל לבדוק באיזה קבוצות tal חבר
[root@~]# id tal
uid=1001(tal) gid=1002(managers) groups=1002(managers)
למה כתוב פעמיים managers? זה בגלל שמשתמש יכול להיות חבר בקבוצה ראשית ובקבוצה משנית
אז כיצד משנים קבוצה\משתמש על קובץ או תיקייה?
בפקודה chown הגדרתי שהמשתמש tal הוא בעל הקובץ
בפקודה chgrp שיניתי את הקבוצה.
בהמשך, אני מסביר שוב את עניין ההרשאות, שכן נושא זה חשוב מאוד וגם שם תמצאו פירוט על נושא זה
מערכת הקבצים
כאשר אנו מדברים על מערכת הקבצים, אנו מדברים על מערכת קבצים בדומה לווינדוס
Folder 1 - Folder 1.1 - Folder 1.2 Folder 2 - File 1 Folder 3 Folder 4
ממש כמו בווינדוס יש לנו תיקיות, ובתוכן עוד תיקיות או עוד קבצים וכו'
בקבצי לינוקס יכול להיות סיומות חדשות לחלוטין וזה בגלל שבונה התוכנה החליט שקובת ההגדרות הוא .conf ואילו מתכנת אחר החליט על .con ואילו אחר על .config ולכן לא תמצאו קבצים עם סיומות שאתם בהכרח מכירים.
התיקייה הראשית של לינוקס היא /
/
Bin Bin Home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
ואך זה נראה בסייר קבצים
אפשר לראות שהכי למעלה אנחנו נמצאים ב / שהוא תיקיית ה Root ( התיקייה הראשית) ואז מתחת יש לנו את כל תיקיות המערכת, אבל מי שחד בטח הבחין בתיקייה root הקיימת בתוך / וזה בסדר גמור
התקייה הראשית רק נקראת root והסימול שלה הוא / ובתוכה יש תיקייה בשם Root, כך אם נרצה להיכנס אליה נקיש
[root@localhost ~]# cd /root
אפשר לראות שהקשנו cd שזהו פקודה להיכנס לתיקייה ואנחנו רוצים להיכנס ל / ואז לתיקייה Root שנמצאת שם
אם ניכנס דרך סייר הקבצים לדוגמה ל/var/ נגיע ל:
אם רשום לכם Working Directory או Current Directory זה התיקייה בה אתם נמצאים:
רק לפני שאני אכנס אני רוצה לראות מה יש בתיקיית ה root שנמצאת בתוך /
[root@localhost ~]# ls anaconda-ks.cfg
קיבלתי את הקבצים שנמצאים בתיקייה זו, ואילו אם אני אכנס ל
[root@localhost ~]# cd /var [root@localhost var]#
ניתן לראות במודגש בשורה השניה שנכנסו לvar ואם נקיש רק
[root@localhost var]# ls
נוכל לראות קבצים שונים מאשר בפעם הראשונה שעשינו ls שכן אילו הקבצים והתיקיות הנמצאים ב var
יש לנו
Relative Path-name – נאמר אתם נמצאים בתוך cd /var/run/ אתם רוצים להגיע לתוך התיקייה ppp אתם רק צריכים להקיש
[root@localhost run]# cd ppp
למה לא להקיש /? כי / הוא ה Root Directory ואנחנו כאן נמצאים בתוך תיקייה Var ושם בתוך התיקייה run
כאשר אתם מקישים חלק מהנתיב כי אתם כבר בתוך חלק מהנתיב אתם מקשים Relative Path-name שכן אתם ב Working Directory (נמצאים כבר בתוך var)
Absolut Path-name – זה כל הכתובת של הנתיב, נאמר ואתם בתוך תיקיית usr
[root@localhost usr]#
עכשיו אתם מעוניינים להגיע ל
[root@localhost usr]# cd /sys/dev/char/
כאשר אתם מקישים את הכתובת המלאה, זה כתובת אבסוטלטית שכן זה כל הכתובת אל היעד
נאמר ואנחנו עכשיו ב /sys/dev/char/
[root@localhost char]# cd .. [root@localhost dev]#
אם נקיש cd .. ה .. אומר לו לנבור תיקייה אחד אחורה, ולכן מchar נגיע לתיקייה dev
פקודות נוספות כאשר עוסקים בתיקיות וקבצים
cd – לנבור \ להיכנס אל התיקייה
pwd – מציג באיזה נתיב אתם עובדים
ls – להציג מה יש בתיקייה בה אתם נמצאים כעת
ls | grep * – אם נשנה את הכובית לשם של קובץ, נוכל לחפש אותו בתיקייה בה אנו נמצאים
הזזה \ מחיקה \ העתקה \ שינוי שם \ יצירה \ הצגה של תוכן \ של קבצים
CP
על מנת להעתיק קבצים ממקום למקום אפשר להשתמש בפקודת cp
בתיקייה root יצרתי קובץ בשם tal.txt
[root@localhost ~]# ls anaconda-ks.cfg tal.txt
כעת אני רוצה לשכפל את הקובץ לתיקיית var
אני אקיש
[root@localhost ~]# cp tal.txt /var
cp – העתק
tal.txt – את הקובץ tal.txt
/var – ל var
כעת בתוך /var/ יש קובץ נוסף בשם tal.txt
MV
על מנת להזיז קובץ ניתן להשתמש בMV אבל גם בשביל לשנות שם אנו צריכים את פקודת ה MV
נאמר ואנחנו רוצים להזיז את הקובץ tal.txt מתיקיית var לתיקיית usr
[root@localhost ~]# cd /var [root@localhost var]# ls | grep tal* tal.txt
כעת אנו רואים שיש את הקובץ tal.txt בתוך var כעת נשתמש בפקודה MV על מנת להזיז אותו ל/usr
[root@localhost var]# mv tal.txt /usr
כעת אם נבדוק האם הקובץ עבר לשם
[root@localhost var]# ls /usr | grep tal*
tal.txt
מעולה!, כעת נעבור ל usr ונשנה את השם של הקובץ של tal.txt ל shushan.txt
[root@localhost var]# cd /usr [root@localhost usr]# mv tal.txt shushan.txt
כעת נחפש את כל קבצי ה txt בתיקייה usr
[root@localhost usr]# ls | grep .txt
shushan.txt
והיחיד שמצאנו הוא shushan.txt וזה בגלל ששיננו את השם שלו.
rm
מחיקה של תיקייה או קובץ יעשו על ידי הפקודה rm
לדוגמה, נרצה למחוק את הקובץ shushan.txt
נבצע זאת כך
[root@localhost usr]# rm shushan.txt rm: remove regular empty file ‘shushan.txt’? y
כאשר לחצתי enter הוא שאם האם למחוק , סימנתי שכן y
אם נמחק תיקייה ונוסיף -r זה ימחוק את כל הקבצים ותיקיות המשנה
[root@localhost usr]# rm -R Folder
אם התיקייה ריקה נשתמש ב
[root@localhost usr]# rmdir Folder
mkdir
יצירת תיקייה תעשה על ידי הפקודה mkdir
[root@localhost usr]# mkdir FolderTal
cat
יצרתי קובץ בשם tal.txt וכתבתי שם Hello Users Of Shushan Websites ( את זה עשיתי עם הפקודות touch ו vi שמוסברות למטה)
אז מה עושה הפקודה cat? פקודה זו למעשה מציגה מה יש בקובץ
[root@localhost usr]# cat tal.txt Users Of Shushan Websites
ניתן לערוך וליצור קובץ על ידי cat באופן הבא:
cat > tal.txt – אם הקובץ קיים הוא ידרוס אותו ויצור קובץ חדש ויפתח לכם ישירות את העריכה שלו
cat >> tal.txt – אם קיים הקובץ הוא ימזג אותו עם העריכה שתבצעו
על מנת לצאת מהעריכה יש להקיש CTL + C
echo " Hi Shushan" > tal.txt – אם קיים הקובץ הוא ידרוס אותו ויזין אל הקובץ ישירות מה שתכתבו בגרשיים
touch
על מנת ליצור קובץ, כל קובץ עם כל סיומת ניתן להשתמש ב touch (כמובן שלא ניתן ליצור קובץ כיוון כמו tar כי tuch יוצר קובץ ולא מכווץ)
למשל אני רוצה ליצור את הקובץ tal.conf
[root@localhost usr]# touch tal.conf
כעת יצרתי את הקובץ, ואני יכול לערוך אותו עם עורך כמו vi על מנת לשנות את תוכנו.
VI
הוא עורף טקסט, יש את הגרסה המתקדמת בשם VIM, שזה קיצור של VI Improved, אני אסביר על vi
כאשר אני רוצה לערוך קובץ טקסט ולבצע בו עריכה אני אשתמש בעורך vi
לדוגמה, אני יערוך את קובץ ההגדרות הבא
[root@localhost ~]# vi hosts
על מנת להתחיל לכתוב יש להשתמש במקש Insert שנמצא מעל Delete במקלדת, בנוסף יש להשתמש בחיצים על מנת להגיע למקומות אותם תרצו לערוך במסמך
בסיום עליכם ללחוץ על Esc במקלדת ואז Shift + : אשר במקלדת
על מנת לצאת ללא שמירה יש להקיש
Shift + :
ואז להקיש q ואז ! זה אמור להיראות כך
:q!
ואז enter, על מנת לשמור מסמך יש להקיש
Shift + :
ואז
wq!
ואז enter והמסמך ישמר
*ל Vi אפשרויות רבות אך רשמתי לכם את הקריטי בערכית מסמכים ב VI
הרשאות \ סיסמאות \ קבוצות ומשתמשים
אם נקיש
[root@localhost etc]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
UID = User ID GID = Group ID Groups = 0
נוכל לראות את הUID של היוזר שלנו, ובאיזה קבוצה הוא נמצא
passwd – שינוי סיסמת המשתמש שאיתו אתם כרגע מחוברים
רק המשתמש שיצר את התיקייה או הקובץ יכול לשנות את ההרשאות ( חוץ מ Root כמובן)
על מנת לראות מי בעל הקובץ \ התיקייה ואילו הרשאות יש
[root@localhost ~]# ls -l total 4
-rw——-. 1 root root 1263 Aug 20 02:14 anaconda-ks.cfg
-rw-r–r–. 1 root root 0 Aug 28 07:50 tal.txt
הדגשתי לדוגמה את הבעלים של הקובץ tal.txt , כל קובץ משוייך לקובץ ולקבוצה ויש גם תיקיות עם הרשאות של משתמש וקבוצה
root – הקבוצה אליה שייך הקובץ
root – המשתמש אליה שייך הקובץ
Root תמיד יכול לשנות כל הרשאה שיש.
יש שלושה סוגים של משתמשים: User – Group – Other
שלושה סוגים של הרשאות: Read – Write – Execute
לכל משתמש יש את שלושת סוגי ההרשאות
User - RWX Group - RWX Other - RWX
ניקח את השורה לפני המשתמש והקבוצה:
–rw-r–r–. 1
-rw – הרשאות המשתמש (מותר ליוזר Root לכתוב ולקרוא ולא מוגדר Execute)
r– – הרשאות הקבוצה Root (מותר לקבוצה לקרוא אך לא לכתוב או להפעיל)
r– – וכל משתמש אחר (מותר לקרוא, אך לא לכתוב או להפעיל)
על מנת לשנות הרשאות יש להשתמש בפקודות:
לשינוי שם המשתמש:
[root@localhost ~]# chown root tal.txt
לשינוי הקבוצה
[root@localhost ~]# chgrp root tal.txt
שינוי של הרשאות גישה לקובץ
[root@localhost ~]# chmod +rw tal.txt
הרשאות גישה:
W – הרשאות כתיבה לקובץ
R – הרשאות קריאה לקובץ
X – הרשאות הפעלה לקובץ אם זה סקריפט
הוספה מוגדרת של משתמש:
G – קבוצה
O – כל משתמש אחר שלא מוגדר
U – משתמש
A – כל סוגי המשתמשים
הוספה \ הסרה או הגדרה של הרשאות
= – להגדיר הרשאות חדשות ולמחוק את הישנות אם היה
+ – להוסיף למה שקיים הרשאות
– – להסיר הרשאות שאותם תגדירו להסרה
chmod g+rw tal.txt chmod -R go-wx Folder chmod g+rw tal.txt chmod go= tal.txt chmod u+x tal.txt
נוכל לשנות הרשאות לפי "מספרי הרשאות" או "Octal"
chmod 777 tal.txt chmod 775 tal.txt chmod 644 tal.txt
כל תחילה של מספר היא רמת ההרשאה, על מנת לבחון זאת תוכלו להתקין WinSCP ושם ללחוץ קליק ימני על קובץ ואז Properties ושם לבדוק את ה Octal
UID
UID הוא קיצור של UserID
משתמש Root הוא תמיד UID=0 ואילו משתמשים אחרים, תמיד יהיו מעל 1000
Root UID=0
System Users = מתחת ל 1000
Normal Users = מעל 1000
אם תקישו את הפקודה
cat /etc/login.defs
נקבל את ההגדרות שמצביעות על המספור של ה UID
/etc/passwd & /etc/shadow
כאשר נקיש את הפקודה
cat /etc/passwd
נקבל רשימה, ניקח לדוגמה מתוך הרשימה
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
mysql – שם המשתמש
x – הסיסמא מאוחסנת ב /etc/shadow
27:27 ה 27 הראשון הוא הUID של הקבוצה הראשית בה הוא חבר ואילו ה 27 השני הוא הקבוצה המשנית בה הוא חבר
MariaDB – מידע על המשתמש ולמה הוא משמש
server:/var/lib/mysql באיזה תיקייה הוא פועל
sbin/nologin – משתמש זה לא יכול להתחבר ואין לו shell להשתמש בו.
tal:x:1001:1002::/home/tal:/bin/bash
tal שם המשתמש
x הסיסמא מאוחסנת ב /etc/shadow
1001 – הקבוצה הראשית בה הוא חבר
1002 – הקבוצה המשנית בה המשתמש חבר
home/tal הנתיב של התיקייה הראשית של המשתמש
bin/bash – ה Shell בו המשתמש בוחר
Shadow File
כאשר נוצר משתמש, והוגדר לו סיסמא , הסיסמא תיהיה בתוך קובץ בשם shadow
נבצע את הפקודה הבאה
cat /etc/shadow
כעת נפרק את השורה שאוכל להסביר על כל דבר
tal:$6$54JwnLnM$HYiPUg2J6gC/EoUK/cAjHWKEDIK9I7HAejBgM6hfAB0IrXRsnMdcD7aXD9Mt1fg6/qOgQIzGlGm3lc3hZkMPz1:18009:0:99999:7:::
tal – שם המשתמש
$6$54J…. – זהו הסיסמא של המשתמש שנמצאת ב Hash ספציפית SHA512 + Salt (אם היה נניח $5$ היינו יודעים שהHash הוא SHA256)
54JwnLnM – מה שמגיע אחרי ה$6$ עד ה $ אחריו, הוא ה Salt
18009 – מספר הימים מינואר 1970 ועד היום
0 – כמה ימים עד שיהיה ניתן לאפס סיסמא – אפס ימים אומר שניתן לאפס סיסמא
99999 – עוד כמה ימים נצטרך לאפס סיסמא
7 – כמה ימים נקבל אזהרה לאפס סיסמא
::: עדיין לא הוגדר, כמו מתי החשבון ינוטרל אם הסיסמא לא תוחלף וכו'
!! – אם תמצאו !! בהתחלה במקום סיסמא, זה אומר שאין סיסמא ולא הוגדרה עדיין
* – אם יש בהתחלה * זה אומר שהמשתמש מוגדר שאסור לו להתחבר
הגדרת "חוקים" תקנון לסיסמאות בלינוקס
על מנת להגדיר מתי חובה לאפס סיסמא, מתי נקבל אזהרה וכו' יש לערוך את הקובץ הבא
nano /etc/login.defs
Pass_Max_Days – כמה זמן סיסמא תיהיה תקפה עד שתאלצו להחליף
Pass_Min_Days – ממתי יהיה אפשר לאפס סיסמא
Pass_Min_Len –
Pass_WARN_Aage – מתי נקבל אזהרה שיש להחליף סיסמא (שבע ימים לפני)
בהמשך המסמך, נוכל להבחין באיזה SHA משתמשים להגדרת הסיסמא
ENCRYPT_METHOD SHA512
נוכל להגדיר למשתמש בודד את החוקים הללו ולא לכל המערכת על ידי הפקודה
chage tal
Symbolic Link
אחד המונחים שתתקלו בהם הרבה הוא Symbolic Link הוא קיצור דרך , בדיוק כמו קיצור דרך לתיקייה במייקרוסופט, אך בלינוקס משתמשים בו דיי הרבה
זאת אומרת אני יכול ליצור תיקייה בתוך /usr/ בשם Tal
[root@localhost ~]# cd /usr [root@localhost ~]# mkdir tal
כעת אני מעוניין ליצור קיצור דרך או בשמו השני Symbolic Link לתיקייה Tal בנתיב הבא: /home/
[root@localhost usr]# ln -s tal /home
הפקודה ln שהיא יצירת קיצור דרך ואז -s על מנת לסמן לו ליצור Symbolic Link
כעת נעבור לhome
[root@localhost usr]# cd /home [root@localhost home]# ls tal
המערכת אפילו לא רואה שזה Symbolic Link על מנת לבדוק נוכל להשתמש בפקודה או ב WinSCP (קיים מדריך באתר כיצד להתחבר עם Winscp ו SSH)
סימנתי לכם שרשום שזהו Symbolic Link וניתן לראות בתוך הקובץ חץ קטן ממש כמו בווינדוס שמציג שזהו Symbolic Link
Diff and Find
פקודת Diff יכולה להשוות בין 2 קבצים ניקח 2 קבצים בשם tal1.txt ו tal2.txt בשורה של שניהם נכתוב Hello ואילו רק באחד מהם נכתוב בשורה השניה World
[root@localhost home]# diff tal1.txt tal2.txt
1a2 >
World
נקבל תשובה שבTal2 ההבדל הוא בשורה 2 המשפט World
הפקודה Find ממש כמו החיפוש בווינדוס מחפשת קבצים, דוגמה
[root@localhost home]# find tal* tal tal1.txt tal2.txt
Deamon \ Program \ Process
Deamon
– תהליך שמספק לUnix אפשרות לעבוד , אפשר להשוות אותו ל Windows Services של מייקרוסופט
למשל אם נתקין שירות DHCP בשרת הלינוקס שלנו, אז יוקם DHCP Deamon שתמיד ירוץ בשרת ויספק את שירות ה DHCP למחשבים ברשת.
ניתן לשנות את שירותי הDeamons לפני ההפעלה שלהם או אחרי ההפעלה שלהם, לחלקם יש אפילו GUI משלהם או סט פקודות משלהם.
כאשר תרצו לבצע ריסטרט לשירות מסוים כמו Apache (קיימים באתר כמה מדריכים ל Apache) שה Deamon שלו הוא httpd לרוב באמת הסיומת של שירותים אלו יהיה עם d בסוף.
Deamon אמור לספק שירותים לאפליקציות מסוימות או שהוא השירות של האפלקציה כדוגמת DHCP שכן יש שירות שתמיד עובד ותמיד מספק כתובות IP
כאשר אנו עושים שינוי בהגדרות Apache או מתקינים תוסף ל Apache רוב הסיכויים שצריך לעשות לDeamon של ה Apache ריסט והפקודה היא
systemctl restart httpd
שירותי Deamon מפורסמים למשל:
mysqld dhcpd crond httpd
*אכן ההתייחסות כאן היא יותר ל CentOS
על מנת לראות אילו Deamons עובדים יש להקיש את הפקודה
[root@localhost ~]# ps -ax
קיימים הרבה שירותים , אך לדוגמה התקנתי Apache, אחד השירותים שרצים זה
[root@localhost ~]# ps -ax | grep httpd 10026 ? Ss 0:00 /usr/sbin/httpd -DFOREGROUND
-DFOREGROUND אומר שהשירות אינו קשור ל Shell או יותר נכון אינו קשור לBash אילו הוא מקושר ל Systemd זה שהפעיל את השירות והוא למעשה systemctl start httpd
קיים FOREGROUND ו Background
FOREGROUND הוא למעשה עובד ברקע תמיד, זאת אומרת לשירות אין דד-ליין או סיום לעבודתו ועליו תמיד להיות דלוק ולתת שירות
Background זה תהליך שיכול להיות זמני או הופעל עכשיו וברגע שיסיים לתת שירות הוא יסגר אך הוא יעבוד ברקע אם נקיש jobs בשורת הפקודה נראה עבודות שמבוצעות ברקע
Process
תהליך שרץ בזיכרון כעת ממש כמו תהליך שרץ בווינדוס, דוגמה הפעלתי vi והוא נתקע האם vi הוא Deamon? כמובן שלא, vi הוא תהליך ואני יכול לסגור את התהליך גם אם הוא נתקע, למשל גם ההתחברות למעטפת היא תהליך ולכל תהליך יש PID קיצור של Process ID, כיצד נסגור תהליך? דוגמה פתחתי VI ברקע, יותר נכון רץ ב Background
ניכנס לvi ואז נלחץ על CTRL + Z וVI תכנס להשהיה (פתוחה ברקע)
אם נקיש
[root@localhost ~]# jobs [1]+ Stopped vi tal.txt
נוכל גם להקיש, על מנת לראות מה עובד ברקע
[root@localhost ~]# bg 1
[1]+ vi tal.txt &
כעת נסגור את התהליך הזה שפתוח, כי נאמר שהוא תקוע
נקיש את הפקודה ps -a על מנת לאתר את התהליך vi ואת הPID שלו, הרי אמרנו שלכל תהליך יש PID אחר ממש כמו בווינדוס
[root@localhost ~]# ps -A | grep vi
10056 pts/0 00:00:00 vi
[1]+ Stopped vi tal.txt
אנו רואים שמספר התהליך הוא 10056 אז "נחסל" אותו
[root@localhost ~]# kill 10056
וכעת אם תבצעו חיפוש שוב תראו ש
[1]+ Stopped vi tal.txt
נעלם!
אם אני מעוניין להגדיר לJob מסוים לרוץ נאמר מחר בשעה 7:00 אני אוכל להגדיר זאת כך:
נתקין קודם את at
[root@localhost ~]# yum -y install at
[root@localhost ~]# systemctl start atd
[root@localhost ~]#
at 7:00 tomorrow at> echo "Visit Shushan.co.il"
at> Ctrl + D – לחצו על
Program
– קובץ שהוא סקריפט או קובץ הרצה הנמצא במערכת ההפעלה, כל התוכנות כמו למשל תוכנת vim או vi נמצאים ב
/bin/
גם Bash הוא תוכנה או יותר נכון הם אפליקציות
/bin/bash
שכן כאשר המערכת עולה היא מעלה את כל האפליקציות וחלקן דורשות לעלות בעליית המערכת כדוגמת Bash
פקודות מובנות: כמו cd,pwd,echo
הן חלק מBash ומובנות בו וכאשר Bash עולה גם הן עולות
פקודות חיצוניות: ls,cat,vi,more
הן לא חלק מהShell עצמו והן תוכנות חיצוניות שיכולות להיות בהפצה אחת ובאחרת לא, הן גם נטענות ל Bash אבל רק אחרי שה Bash עלה ועשה סריקה לאיזה עוד תוכנות הוא צריך לעלות.
TOP and df
שתי תכונות מעניינות על מנת לבדוק את מצב הזיכרון ה CPU קובץ ההחלפה והדיסק
נקיש df -h
יציג לנו את גודל הכוננים וכמה פנוי במגה וג'יגה , חשוב מאוד בשרתים שאתם מתחזקים
כעת נקיש רק top
נראה את כל התהליכים וכמה CPU וRAM הם משתמשים
CRON
הוא למעשה Task Scheduler כמו בווינדוס, המטרה שלו היא לקבוע מתי ירוץ X או מתי יבוצע Y כך למעשה ניתן להריץ סקריפט גיבוי כל יום שבת בשעה 8 בבוקר
קודם נבדוק האם קיים Cron ביוזר root
[root@localhost ~]# crontab -l no crontab for root
נערוך את crontab
[root@localhost ~]# crontab -e
על מנת למחוק את כל ה cron שיש למשתמש יש להקיש
[root@localhost ~]# crontab -r
על מנת לערוך למשתמש אחר את ה cron (עליכם להיות root) נשתמש בפקודה
[root@localhost ~]# crontab -u User -l
הזמנים בcron עובדים כך:
דקות – 0-59
השעה ביום: 0-23
תאריך בחודש – 1-31
חודש: 1-12
יום מסוים: 0-7 למשל 7 זה יום שבת
נאמר שיש לנו סקריפט שרץ כך:
Minute דקות – 10,50 – הוא ירוץ בתוך השעה ב10 דקות ולאחר מכן ב50 דקות
Hour השעה ביום: 1,5,15 – הוא ירוץ בשעה 1 בלילה ב5 בבוקר וב15:00 (שלוש בצהריים) (בכל אחת מהשעות האלו הוא ירוץ פעמיים ב10 דקות וב50 דקות של אותה השעה)
Date תאריך בחודש – 8,30 – הוא ירוץ ב30 לחודש וב8 לחודש בשעות והימים שרשומים למעלה
Month חודש: 5,6 – הוא ירוץ ב30 לחודש יוני ומאי וגם ב8 לחודש של יוני ומאי
DOW היום בשבוע: 2,4 – ובימים שני ורביעי
*אם נכניס כוכבית באחד הפרמטרים הוא ירוץ בכל השעות \ ימים שיש בפרמטר דוגמה אנו רוצים שסקריפט הגיבוי ירוץ כל חודש וחודש אז נכניס בחודש *
בתוך ה Cron נרשום את הסדר כך
Minute - Hour - Date - Month - DOW
נגדיר גיבוי בשעה ויום מסוימים
[root@localhost ~]# crontab -e
נגדיר את הגיבוי לכל יום שני בחודש כל החודשים כל השנה, והמידע יועתק מ home/tal ל usr/tal
0 15 * * 2 cp /home/tal /usr/tal crontab: installing new crontab
ניתן לראות שהוגדר crontab חדש
Network
על מנת להגדיר את הרשת ב CentOS נוכל להקיש NMTUI
[root@localhost ~]# nmtui
קראו את המאמר "הגדרות ראשוניות בלינוקס – WinScp ו Putty" הקיים באתר על מנת להגדיר את כרטיס רשת
Hosts File
ממש כמו בווינדוס גם ללינוקס יש קובץ Hosts, בקובץ זה נוכל להגדיר DNS מקומי לכתובות IP על ידי עריכה של קובץ הHosts
[root@localhost ~]# vi /etc/hosts
נוסיף בשורה התחתונה
192.168.1.100 tal.com
זאת אומרת שברגע שלינוקס מחפש את הכתובת tal.com הוא ילך לכתובת 192.168.1.100 שכידוע מערכות ההפעלה תמיד הולכות לבדוק קודם את קובץ ה Hosts ורק אז את ה DNS
גם ללינוקס קיים ping ו traceroute (קיימים מאמרים באתר בנושא זה)
RPM VS YUM & Dependencies
RPM
הוא למעשה התקנה או הסרה של תוכניות ממערכת ההפעלה, הוא קצת מיושן ואילו yum הוא חדש יותר RPM אינו יודע להתקין Dependencies של תוכנות, אך עדיין RPM הוא בשימוש נרחב מאוד שכן ניתן להוריד את החבילה על ידי wget ואז להתקין על ידי RPM
לדוגמה: Apache זקוק לתוכנות נוספות על מנת לעבוד וכאשר אנו מתקינים על ידי RPM אנחנו צריכים לוודא שיש לApache את כל ה Dependencies ואילו RPM אינו יודע להתקין את ה Dependencies הדרוש
אנו נצטרך לאסוף את כל החבילות כולל את ה Aapache ואז להתקין. YUM לעומת זאת פותר את הבעיה
הקובץ חייב להיות קובץ rpm, נתקין MySql דרך RPM ודרך yum על ידי כך נוכל לבדוק את ההבדלים
דוגמה להתקנה של mysql
[root@localhost ~]# wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm [root@localhost ~]# rpm -i mysql57-community-release-el7-7.noarch.rpm
הסרה דרך rpm מבוצעת כך:
[root@localhost ~]#rpm -e MySql
RPM מחזיק "תעודות" וע"י התעודות בודק האם ה RPM שהורדתם חתום על ידי היוצר המקורי של הקובץ
rpm -qa gpg-pubkey
פקודה זו תציג את כל התעודות, על מנת למחוק אחת מהתעודות (אין לבצע מחיקה, אלא אם המפתח פגום)
יש להעתיק את אחת התעודות
gpg-pubkey-00f97f56-467e318a
gpg-pubkey-f4a80eb5-53a7ff4b
והפקודה למחיקה היא
rpm -e gpg-pubkey-f4a80eb5-53a7ff4b
כעת אם נרצה לבדוק אם קובץ חתום על ידי אחת התעודות, ניקח קובץ RPM ונקיש
rpm -K mysql.rpm
בתוך ההתקנה של CentOS קיימים כל התעודות, על מנת לייבצא אותם יש לרשום את הפקודה (גם אם בטעות מחקתם את המפתח)
rpm --import /media/CentOS_*/RPM-GPG*
YUM
כלי להסרה, התקנה ועדכון של תוכנות \ אפליקציות ב CentOS ( או Red Hat) והחוזק שלו הוא לבדוק אילו Dependencies צריך התוכנה שאתם מעוניינים בה והוא יתקין גם את ה Dependencies שלה
דוגמה:
נתקין MySQL
[root@localhost ~]#yum install mysql
כאשר אני ינסה להתקין MySql ה Yum יחפש ב Repository (מאגר שבו נמצא כמות גדולה של אפליקציות לאותה ההפצה) ומשם יוריד את ההתקנה, כמובן שYum בודק לפני איזה Dependencies הוא צריך וברגע שבאים להתקין נקבל הודעה
נוכל לראות שההודעה אומרת שיש חבילה אחת להתקנה + 27 Dependencies שזה המון, והאם הוא יוריד אותם ויתקין? ואז נסמן y
אם נרצה להתקין את הקרנל החדש ביותר נבצע
yum install kernel kernel-firmware
הסרה
כאשר נרצה להסיר את האפליקציה ZIP נאמר ואת כל ה Dependencies נשתמש בפקודה
[root@localhost ~]# yum history
7 | root <root> | 2017-08-28 12:05 | Install | 1
נקבל רשימה של כל מה שהתקנו, נלך לדוגמה על ID מספר 7
[root@localhost ~]# yum history info 7
נקבל פלט שזה ZIP
Command Line : -y install zip
כעת נסיר אותו
[root@localhost ~]#yum history undo 7
וזהו, תוכלו גם להסיר כך: (אם אתם זוכרים את שם החבילה)
[root@localhost ~]#yum remove zip
או כך אם אתם רוצים להסיר גם את כל הDependencies
[root@localhost ~]#yum autoremove zip
YUM משתמש ב repository שהסברתי למעלה, אך יש עוד repository שהקימו חברות \ משתמשים אחרים ואחד מהם הוא epel הרבה תוכנות שקיימות לא נמצאות ב repository המקורי אלא ב epel ולכן נוסיף אותו על ידי ההתקנה
[root@localhost ~]# yum install epel-release
SELinux
הוא קיצור של Secure Linux והוא פיצ'ר אבטחה של לינוקס.
המערכת בודקת 2 אובייקטים
Object – אובייקט, יכול להיות קובץ או תיקייה
Subject – תהליך או משתמש
כאשר משתמש נניח או תהליך מנסים לגשת זה אל זה, ה SElinux בודק על ידי סט של חוקים (ממש כמו FW) האם הגישה מוצדקת, אם כן תתן לפעולה לקרות ואם לא, תחסום אותה.
יש 3 מצבי "חוקים"
Targeted – שהוא ברירת המחדל
Minimum – מינימלי
MLS – עריכה לרוב של ה Policy והגדרתו לפי הצרכים שלכם
בנוסף יש 3 "מצבים" Modes
Enforcing – הוא אוכף את החוקים וחוסם לפיהם
Permissive – לא חוסם, אך מתעד את כל הפעולות
Disabled – מנוטרל ואינו עובד כלל
ניתן לקבל חיווי אם ה SElinux עובד או לא על ידי הפקודה
sestatus
אם נרצה להפעיל את selinux נוכל להפעיל על ידי הפקודה
setenforce 0
– Permissive
setenforce 1
– Enforcing
הפקודה
getenforce
תתן לנו חיווי באיזה Mode נמצא ה SELinux