Home Linux Unix & Linux Basics

Unix & Linux Basics

0 comment
נהנתם מהמאמר ? שתפו אותו!

כל הזכויות שמורות לטל בן שושן – 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
כעת יצרתי משתמש בשם tal, כעת נבדוק אם המשתמש קיים על ידי הפקודה
cat /etc/passwd
נוכל להבחין שבסוף הרשימה יש משתמש בשם tal, כעת נגדיר לו סיסמא
passwd tal
ואז הגדירו סיסמא חדשה, כך גם ניתן לשנות סיסמא למשתמש.
כעת נניח ואני רוצה ליצור קבוצה חדשה
groupadd managers
כך הוספתי קבוצה חדשה בשם managers
על מנת להוסיף את tal לקבוצה זו אשתמש בפקודה
usermod -g managers tal
פקודה זו תוסיף את tal לקבוצה managers!

אם נקיש את הפקודה

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

מאמרים קשורים

Leave a Comment