ผู้ดูแลระบบ Linux - คู่มือฉบับย่อ
ไม่เหมือนใครในการกระจาย Linux ระดับธุรกิจ CentOS ยังคงเป็นจริงตามลักษณะโอเพนซอร์สที่ Linux ก่อตั้งขึ้น เคอร์เนลลินุกซ์ตัวแรกได้รับการพัฒนาโดยนักศึกษาวิทยาลัยที่มหาวิทยาลัยเฮลซิงกิ (Linus Torvalds) และรวมกับยูทิลิตี้ GNU ที่ก่อตั้งและส่งเสริมโดย Richard Stallman CentOS มีใบอนุญาตโอเพนซอร์สที่ได้รับการพิสูจน์แล้วว่าสามารถขับเคลื่อนโลกธุรกิจในปัจจุบันได้
CentOS ได้กลายเป็นหนึ่งในแพลตฟอร์มเซิร์ฟเวอร์ที่อุดมสมบูรณ์ที่สุดในโลกอย่างรวดเร็ว ผู้ดูแลระบบ Linux ทุกคนเมื่อต้องการจ้างงานจะต้องเจอคำว่า“ CentOS Linux Experience Preferred” จาก บริษัท ที่เพิ่งเริ่มต้นไปจนถึงบริษัทยักษ์ใหญ่ด้านเทคโนโลยีระดับFortune 10 CentOS ได้วางระบบปฏิบัติการเซิร์ฟเวอร์ระดับสูงขึ้นทั่วโลก
สิ่งที่ทำให้ CentOS โดดเด่นจากลีนุกซ์รุ่นอื่น ๆ คือการผสมผสานที่ยอดเยี่ยมของ -
ใบอนุญาตโอเพนซอร์ส
ฐานผู้ใช้เฉพาะของผู้เชี่ยวชาญด้าน Linux
การสนับสนุนฮาร์ดแวร์ที่ดี
เสถียรภาพและความน่าเชื่อถือที่แข็งแกร่ง
มุ่งเน้นไปที่ความปลอดภัยและการอัปเดต
การปฏิบัติตามมาตรฐานบรรจุภัณฑ์ซอฟต์แวร์ที่เข้มงวดซึ่งจำเป็นในสภาพแวดล้อมขององค์กร
ก่อนเริ่มบทเรียนเราคิดว่าผู้อ่านมีความรู้พื้นฐานเกี่ยวกับ Linux และพื้นฐานการบริหารเช่น -
ผู้ใช้รูทคืออะไร?
พลังของผู้ใช้รูท
แนวคิดพื้นฐานของกลุ่มความปลอดภัยและผู้ใช้
สัมผัสประสบการณ์การใช้โปรแกรมจำลองเทอร์มินัลลินุกซ์
แนวคิดพื้นฐานของเครือข่าย
ความเข้าใจพื้นฐานเกี่ยวกับภาษาโปรแกรมที่ตีความ (Perl, Python, Ruby)
โปรโตคอลเครือข่ายเช่น HTTP, LDAP, FTP, IMAP, SMTP
แกนที่ประกอบด้วยระบบปฏิบัติการคอมพิวเตอร์: ระบบไฟล์ไดรเวอร์และเคอร์เนล
ก่อนที่จะเรียนรู้เครื่องมือของผู้ดูแลระบบ CentOS Linux สิ่งสำคัญคือต้องสังเกตปรัชญาที่อยู่เบื้องหลังบรรทัดคำสั่งการดูแลระบบ Linux
Linux ได้รับการออกแบบตามปรัชญาของ Unix ที่ว่า“ เครื่องมือขนาดเล็กและแม่นยำที่เชื่อมโยงเข้าด้วยกันทำให้งานใหญ่ง่ายขึ้น” Linux ที่รูทไม่มีแอพพลิเคชั่นเดี่ยวขนาดใหญ่สำหรับการใช้งานเฉพาะครั้งเดียวเป็นจำนวนมาก มียูทิลิตี้พื้นฐานหลายร้อยรายการที่เมื่อรวมเข้าด้วยกันจะช่วยให้ทำงานใหญ่ ๆ ได้อย่างมีประสิทธิภาพ
ตัวอย่างของปรัชญาลินุกซ์
ตัวอย่างเช่นหากผู้ดูแลระบบต้องการรายชื่อของผู้ใช้ปัจจุบันทั้งหมดในระบบสามารถใช้คำสั่งที่ถูกล่ามโซ่ต่อไปนี้เพื่อรับรายชื่อผู้ใช้ระบบทั้งหมด ในการดำเนินการคำสั่งผู้ใช้ที่อยู่ในระบบจะแสดงรายการตามลำดับตัวอักษร
[root@centosLocal centos]# cut /etc/passwd -d":" -f1 | sort
abrt
adm
avahi
bin
centos
chrony
colord
daemon
dbus
ง่ายต่อการส่งออกรายการนี้เป็นไฟล์ข้อความโดยใช้คำสั่งต่อไปนี้
[root@localhost /]# cut /etc/passwd -d ":" -f1 > system_users.txt
[root@localhost /]# cat ./system_users.txt | sort | wc –l
40
[root@localhost /]#
นอกจากนี้ยังสามารถเปรียบเทียบรายชื่อผู้ใช้กับการส่งออกในภายหลังได้
[root@centosLocal centos]# cut /etc/passwd -d ":" -f1 > system_users002.txt &&
cat system_users002.txt | sort | wc -l
41
[root@centosLocal centos]# diff ./system_users.txt ./system_users002.txt
evilBackdoor [root@centosLocal centos]#
ด้วยวิธีการของเครื่องมือขนาดเล็กที่ถูกล่ามโซ่เพื่อทำงานใหญ่ให้สำเร็จการสร้างสคริปต์ที่ดำเนินการคำสั่งเหล่านี้จะง่ายกว่าการส่งอีเมลผลลัพธ์โดยอัตโนมัติในช่วงเวลาปกติ
คำสั่งพื้นฐานผู้ดูแลระบบ Linux ทุกคนควรมีความเชี่ยวชาญคือ -
- vim
- grep
- มากขึ้นและน้อยลง
- tail
- head
- wc
- sort
- uniq
- tee
- cat
- cut
- sed
- tr
- paste
ในโลกของ Linux ผู้ดูแลระบบใช้ filteringคำสั่งทุกวันเพื่อแยกวิเคราะห์บันทึกเอาต์พุตคำสั่งกรองและดำเนินการกับเชลล์สคริปต์แบบโต้ตอบ ดังที่ได้กล่าวไปแล้วพลังของคำสั่งเหล่านี้มาจากความสามารถในการปรับเปลี่ยนซึ่งกันและกันผ่านกระบวนการที่เรียกว่าpiping.
คำสั่งต่อไปนี้แสดงจำนวนคำที่ขึ้นต้นด้วยตัวอักษร a จากพจนานุกรมผู้ใช้หลักของ CentOS
[root@centosLocal ~]# egrep '^a.*$' /usr/share/dict/words | wc -l
25192
[root@centosLocal ~]#
ในการแนะนำสิทธิ์เมื่อใช้กับทั้งไดเร็กทอรีและไฟล์ใน CentOS Linux ลองดูที่เอาต์พุตคำสั่งต่อไปนี้
[centos@centosLocal etc]$ ls -ld /etc/yum*
drwxr-xr-x. 6 root root 100 Dec 5 06:59 /etc/yum
-rw-r--r--. 1 root root 970 Nov 15 08:30 /etc/yum.conf
drwxr-xr-x. 2 root root 187 Nov 15 08:30 /etc/yum.repos.d
Note - วัตถุหลักสามประเภทที่คุณจะเห็นคือ
"-" - เส้นประสำหรับไฟล์ธรรมดา
"d" - สำหรับไดเร็กทอรี
"l" - สำหรับลิงก์สัญลักษณ์
เราจะมุ่งเน้นไปที่สามบล็อกของเอาต์พุตสำหรับแต่ละไดเร็กทอรีและไฟล์ -
- drwxr-xr-x: root: root
- -rw-r - r--: root: root
- drwxr-xr-x: root: root
ทีนี้มาแยกย่อยเพื่อทำความเข้าใจบรรทัดเหล่านี้ให้ดีขึ้น -
ง | หมายถึงประเภทวัตถุคือไดเร็กทอรี |
rwx | ระบุสิทธิ์ไดเร็กทอรีที่ใช้กับเจ้าของ |
rx | ระบุสิทธิ์ไดเร็กทอรีที่ใช้กับกลุ่ม |
rx | ระบุสิทธิ์ไดเร็กทอรีที่ใช้กับโลก |
ราก | ตัวอย่างแรกระบุเจ้าของไดเร็กทอรี |
ราก | อินสแตนซ์ที่สองระบุกลุ่มที่ใช้สิทธิ์ของกลุ่ม |
เข้าใจความแตกต่างระหว่างเจ้าของ , กลุ่มและโลกเป็นสิ่งสำคัญ การไม่เข้าใจสิ่งนี้อาจส่งผลกระทบอย่างใหญ่หลวงต่อเซิร์ฟเวอร์ที่โฮสต์บริการไปยังอินเทอร์เน็ต
ก่อนที่เราจะให้เป็นตัวอย่างที่แท้จริงของโลกให้แรกเข้าใจสิทธิ์ที่พวกเขานำไปใช้กับไดเรกทอรีและไฟล์
โปรดดูตารางต่อไปนี้จากนั้นดำเนินการตามคำแนะนำต่อไป
ฐานแปด | สัญลักษณ์ | ดัด. | ไดเรกทอรี |
---|---|---|---|
1 | x | ดำเนินการ | เข้าสู่ไดเร็กทอรีและเข้าถึงไฟล์ |
2 | ว | เขียน | ลบหรือแก้ไขไฟล์ในไดเร็กทอรี |
4 | ร | อ่าน | แสดงรายการไฟล์ภายในไดเร็กทอรี |
Note- เมื่อไฟล์ควรเข้าถึงเพื่ออ่านในไดเร็กทอรีเป็นเรื่องปกติที่จะใช้สิทธิ์ในการอ่านและดำเนินการ มิฉะนั้นผู้ใช้จะมีปัญหาในการทำงานกับไฟล์ การปิดใช้งานการเขียนจะทำให้มั่นใจได้ว่าไฟล์จะไม่สามารถเปลี่ยนชื่อลบคัดลอกหรือแก้ไขสิทธิ์ได้
การใช้สิทธิ์ในไดเรกทอรีและไฟล์
เมื่อใช้สิทธิ์มีสองแนวคิดที่ต้องทำความเข้าใจ -
- สิทธิ์สัญลักษณ์
- สิทธิ์ฐานแปด
โดยพื้นฐานแล้วแต่ละอย่างเหมือนกัน แต่เป็นวิธีที่แตกต่างกันในการอ้างถึงและกำหนดสิทธิ์ของไฟล์ สำหรับคำแนะนำโดยย่อโปรดศึกษาและอ้างอิงตารางต่อไปนี้ -
อ่าน | เขียน | ดำเนินการ | |
---|---|---|---|
Octal | 4 | 2 | 1 |
Symbolic | ร | ว | x |
เมื่อกำหนดสิทธิ์โดยใช้ไฟล์ octalวิธีใช้จำนวน 3 ไบต์เช่น 760 ตัวเลข 760 แปลเป็น: Owner: rwx; กลุ่ม: rw; อื่น ๆ (หรือโลก) ไม่มีสิทธิ์
สถานการณ์อื่น: 733 จะแปลเป็น: เจ้าของ: rwx; กลุ่ม: wx; อื่น ๆ : wx.
มีข้อเสียเปรียบประการหนึ่งในการอนุญาตโดยใช้วิธี Octal ไม่สามารถแก้ไขชุดสิทธิ์ที่มีอยู่ได้ เป็นไปได้ที่จะกำหนดชุดสิทธิ์ทั้งหมดของออบเจ็กต์ใหม่เท่านั้น
ตอนนี้คุณอาจสงสัยว่ามีอะไรผิดปกติกับการกำหนดสิทธิ์ใหม่เสมอ? ลองนึกภาพโครงสร้างไดเร็กทอรีขนาดใหญ่ตัวอย่างเช่น/ var / www /บนเว็บเซิร์ฟเวอร์ที่ใช้งานจริง เราต้องการลบwหรือเขียนบิตในไดเร็กทอรีทั้งหมดสำหรับ Other ดังนั้นการบังคับให้มีการเพิ่มโปรแอคทีฟเฉพาะเมื่อจำเป็นสำหรับมาตรการรักษาความปลอดภัย หากเรากำหนดชุดสิทธิ์ใหม่ทั้งหมดเราจะลบการอนุญาตที่กำหนดเองอื่น ๆ ทั้งหมดที่กำหนดให้กับทุกไดเรกทอรีย่อย
ดังนั้นจะทำให้เกิดปัญหากับทั้งผู้ดูแลระบบและผู้ใช้ระบบ ในบางประเด็นบุคคล (หรือบุคคล) จะต้องกำหนดสิทธิ์แบบกำหนดเองทั้งหมดที่ถูกลบออกโดยการกำหนดสิทธิ์ที่กำหนดใหม่ทั้งหมดสำหรับทุกไดเร็กทอรีและออบเจ็กต์
ในกรณีนี้เราต้องการใช้วิธี Symbolic เพื่อแก้ไขการอนุญาต -
chmod -R o-w /var/www/
คำสั่งดังกล่าวจะไม่ "เขียนทับสิทธิ์" แต่จะแก้ไขชุดสิทธิ์ปัจจุบัน ดังนั้นจงคุ้นเคยกับการใช้แนวทางปฏิบัติที่ดีที่สุด
- Octal เท่านั้นเพื่อกำหนดสิทธิ์
- สัญลักษณ์เพื่อแก้ไขชุดสิทธิ์
เป็นสิ่งสำคัญที่ผู้ดูแลระบบ CentOS ต้องมีความเชี่ยวชาญทั้งสิทธิ์OctalและSymbolicเนื่องจากสิทธิ์มีความสำคัญต่อความสมบูรณ์ของข้อมูลและระบบปฏิบัติการทั้งหมด หากสิทธิ์ไม่ถูกต้องผลลัพธ์จะเป็นทั้งข้อมูลที่ละเอียดอ่อนและระบบปฏิบัติการทั้งหมดจะถูกบุกรุก
เมื่อครอบคลุมถึงเรื่องนี้เรามาดูคำสั่งสองสามคำสำหรับการแก้ไขสิทธิ์และเจ้าของวัตถุ / สมาชิก -
- chmod
- chown
- chgrp
- umask
chmod: เปลี่ยนบิตการอนุญาตโหมดไฟล์
คำสั่ง | หนังบู๊ |
---|---|
-ค | เช่นเดียวกับ verbose แต่จะรายงานเฉพาะการเปลี่ยนแปลงที่เกิดขึ้น |
-v | Verbose, เอาต์พุตการวินิจฉัยสำหรับทุกคำขอที่ทำ |
- ร | ใช้การดำเนินการกับไฟล์และไดเร็กทอรีซ้ำ ๆ |
chmod จะอนุญาตให้เราเปลี่ยนสิทธิ์ของไดเร็กทอรีและไฟล์โดยใช้ชุดสิทธิ์ฐานแปดหรือสัญลักษณ์ เราจะใช้สิ่งนี้เพื่อแก้ไขการมอบหมายและอัปโหลดไดเรกทอรีของเรา
chown: เปลี่ยนเจ้าของไฟล์และกลุ่ม
คำสั่ง | หนังบู๊ |
---|---|
-ค | เช่นเดียวกับ verbose แต่จะรายงานเฉพาะการเปลี่ยนแปลงที่เกิดขึ้น |
-v | Verbose, เอาต์พุตการวินิจฉัยสำหรับทุกคำขอที่ทำ |
- ร | ใช้การดำเนินการกับไฟล์และไดเร็กทอรีซ้ำ ๆ |
chownสามารถปรับเปลี่ยนทั้งการเป็นเจ้าของผู้ใช้และกลุ่มของวัตถุ อย่างไรก็ตามหากไม่จำเป็นต้องแก้ไขทั้งสองอย่างในเวลาเดียวกันการใช้chgrpมักจะใช้สำหรับกลุ่ม
chgrp: เปลี่ยนการเป็นเจ้าของกลุ่มของไฟล์หรือไดเรกทอรี
คำสั่ง | หนังบู๊ |
---|---|
-ค | เช่นเดียวกับ verbose แต่จะรายงานเฉพาะการเปลี่ยนแปลง |
-v | Verbose แสดงผลการวินิจฉัยสำหรับทุกคำขอที่ทำ |
- ร | เรียกใช้การดำเนินการกับไฟล์และไดเร็กทอรีซ้ำ ๆ |
chgrp จะเปลี่ยนเจ้าของกลุ่มเป็นที่ให้มา
การปฏิบัติจริงในโลก
มาเปลี่ยนการกำหนดไดเรกทอรีย่อยทั้งหมดใน/ var / www / students /ดังนั้นกลุ่มที่เป็นเจ้าของคือกลุ่มนักเรียน จากนั้นกำหนดรูทของนักเรียนให้กับกลุ่มอาจารย์ ต่อมาให้ดร. เทอร์รี่โทมัสเป็นเจ้าของสมุดรายชื่อนักเรียนเนื่องจากเขาได้รับมอบหมายให้เป็นผู้ดูแลสถาบันวิทยาการคอมพิวเตอร์ทั้งหมดในโรงเรียน
อย่างที่เราเห็นเมื่อสร้างไดเร็กทอรีจะค่อนข้างดิบ
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 root root 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -l /var/www/students/
total 0
drwxr-xr-x. 2 root root 6 Jan 9 22:03 assignments
drwxr-xr-x. 2 root root 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
ในฐานะผู้ดูแลระบบเราไม่ต้องการให้ข้อมูลรับรองรูทของเรากับใคร แต่ในขณะเดียวกันเราต้องให้ผู้ใช้สามารถทำงานของตนได้ ดังนั้นให้ดร. เทอร์รี่โทมัสควบคุมโครงสร้างไฟล์และ จำกัด สิ่งที่นักเรียนทำได้
[root@centosLocal ~]# chown -R drterryt:professors /var/www/students/
[root@centosLocal ~]# ls -ld /var/www/students/
drwxr-xr-x. 4 drterryt professors 40 Jan 9 22:03 /var/www/students/
[root@centosLocal ~]# ls -ls /var/www/students/
total 0
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 assignments
0 drwxr-xr-x. 2 drterryt professors 6 Jan 9 22:03 uploads
[root@centosLocal ~]#
ตอนนี้แต่ละไดเรกทอรีและไดเรกทอรีย่อยมีเจ้าของdrterrytและกลุ่มที่เป็นเจ้าของเป็นอาจารย์ เนื่องจากไดเร็กทอรีงานมีไว้สำหรับนักเรียนในการส่งงานที่ได้รับมอบหมายเราจึงนำความสามารถในการแสดงรายการและแก้ไขไฟล์ออกจากกลุ่มนักเรียน
[root@centosLocal ~]# chgrp students /var/www/students/assignments/ && chmod
736 /var/www/students/assignments/
[root@centosLocal assignments]# ls -ld /var/www/students/assignments/
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[root@centosLocal assignments]#
นักเรียนสามารถคัดลอกงานไปยังไดเร็กทอรีงาน แต่ไม่สามารถแสดงรายการเนื้อหาของไดเร็กทอรีคัดลอกไฟล์ปัจจุบันหรือแก้ไขไฟล์ในไดเร็กทอรีการกำหนด ดังนั้นจึงช่วยให้นักเรียนสามารถส่งงานที่เสร็จสมบูรณ์ได้ ระบบไฟล์ CentOS จะจัดเตรียมการประทับวันที่เมื่อมีการส่งงาน
ในฐานะเจ้าของไดเร็กทอรีการมอบหมาย -
[drterryt@centosLocal assignments]$ whoami drterryt [drterryt@centosLocal assignments]$ ls -ld /var/www/students/assignment
drwx-wxrw-. 2 drterryt students 44 Jan 9 23:14 /var/www/students/assignments/
[drterryt@centosLocal assignments]$ ls -l /var/www/students/assignments/ total 4 -rw-r--r--. 1 adama students 0 Jan 9 23:14 myassign.txt -rw-r--r--. 1 tammyr students 16 Jan 9 23:18 terryt.txt [drterryt@centosLocal assignments]$
เราจะเห็นว่าเจ้าของไดเร็กทอรีสามารถแสดงรายการไฟล์ตลอดจนแก้ไขและลบไฟล์ได้
คำสั่ง umask: จัดหาโหมดเริ่มต้นสำหรับไฟล์และสิทธิ์ไดเร็กทอรีตามที่สร้างขึ้น
umaskเป็นคำสั่งสำคัญที่จัดเตรียมโหมดเริ่มต้นสำหรับไฟล์และสิทธิ์ไดเรกทอรีเมื่อสร้างขึ้น
การอนุญาตumaskใช้ตรรกะเชิงลบ
สิทธิ์ | การดำเนินการ |
---|---|
0 | อ่านเขียนดำเนินการ |
1 | อ่านและเขียน |
2 | อ่านและดำเนินการ |
3 | อ่านเท่านั้น |
4 | อ่านและดำเนินการ |
5 | เขียนอย่างเดียว |
6 | ดำเนินการเท่านั้น |
7 | ไม่มีสิทธิ์ |
[adama@centosLocal umask_tests]$ ls -l ./ -rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir -rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt [adama@centosLocal umask_tests]$ whoami
adama
[adama@centosLocal umask_tests]$ umask 0022 [adama@centosLocal umask_tests]$
ตอนนี้เรามาเปลี่ยนumaskสำหรับผู้ใช้ปัจจุบันของเราและสร้างไฟล์และไดเร็กทอรีใหม่
[adama@centosLocal umask_tests]$ umask 077 [adama@centosLocal umask_tests]$ touch mynewfile.txt
[adama@centosLocal umask_tests]$ mkdir myNewDir [adama@centosLocal umask_tests]$ ls -l
total 0
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myDir
-rw-r--r--. 1 adama students 0 Jan 10 00:27 myFile.txt
drwx------. 2 adama students 6 Jan 10 00:35 myNewDir
-rw-------. 1 adama students 0 Jan 10 00:35 mynewfile.txt
อย่างที่เราเห็นไฟล์ที่สร้างขึ้นใหม่มีข้อ จำกัด มากกว่าเดิมเล็กน้อย
ควรเปลี่ยนumaskสำหรับผู้ใช้อย่างใดอย่างหนึ่ง -
- /etc/profile
- ~/bashrc
[root@centosLocal centos]# su adama
[adama@centosLocal centos]$ umask 0022 [adama@centosLocal centos]$
โดยทั่วไปumaskเริ่มต้นใน CentOS จะไม่เป็นไร เมื่อเราประสบปัญหากับค่าเริ่มต้น0022มักจะเป็นเมื่อแผนกต่างๆที่อยู่ในกลุ่มต่างๆจำเป็นต้องทำงานร่วมกันในโครงการ
นี่คือที่มาของบทบาทของผู้ดูแลระบบเพื่อสร้างความสมดุลระหว่างการทำงานและการออกแบบระบบปฏิบัติการ CentOS
เมื่อพูดถึงการจัดการผู้ใช้เรามีคำศัพท์สำคัญสามคำที่ต้องทำความเข้าใจ -
- Users
- Groups
- Permissions
เราได้กล่าวถึงการอนุญาตในเชิงลึกที่ใช้กับไฟล์และโฟลเดอร์แล้ว ในบทนี้เราจะมาพูดถึงผู้ใช้และกลุ่ม
ผู้ใช้ CentOS
ใน CentOS มีบัญชีสองประเภท -
System accounts - ใช้สำหรับภูตหรือซอฟต์แวร์อื่น ๆ
Interactive accounts - โดยปกติจะกำหนดให้กับผู้ใช้เพื่อเข้าถึงทรัพยากรระบบ
ความแตกต่างหลักระหว่างผู้ใช้สองประเภทคือ -
System accountsถูกใช้โดย daemons เพื่อเข้าถึงไฟล์และไดเร็กทอรี โดยปกติสิ่งเหล่านี้จะไม่ได้รับอนุญาตจากการเข้าสู่ระบบแบบโต้ตอบผ่านเชลล์หรือการเข้าสู่ระบบคอนโซลจริง
Interactive accounts ถูกใช้โดยผู้ใช้ปลายทางเพื่อเข้าถึงทรัพยากรการประมวลผลจากเชลล์หรือล็อกอินฟิสิคัลคอนโซล
ด้วยความเข้าใจพื้นฐานของผู้ใช้ตอนนี้เรามาสร้างผู้ใช้ใหม่สำหรับ Bob Jones ในแผนกบัญชี มีการเพิ่มผู้ใช้ใหม่ด้วยไฟล์adduser คำสั่ง
ต่อไปนี้เป็นบางส่วน adduser สวิตช์ทั่วไป -
สวิตซ์ | หนังบู๊ |
---|---|
-ค | เพิ่มความคิดเห็นในบัญชีผู้ใช้ |
- ม | สร้างโฮมไดเร็กทอรีของผู้ใช้ในตำแหน่งดีฟอลต์หากไม่มีอยู่ |
- ก | กลุ่มเริ่มต้นเพื่อกำหนดผู้ใช้ |
- น | ไม่สร้างกลุ่มส่วนตัวสำหรับผู้ใช้โดยปกติจะเป็นกลุ่มที่มีชื่อผู้ใช้ |
- ม | ไม่สร้างโฮมไดเร็กทอรี |
- ส | เชลล์ดีฟอลต์นอกเหนือจาก / bin / bash |
-ยู | ระบุ UID (กำหนดโดยระบบ) |
- ก | กลุ่มเพิ่มเติมที่จะกำหนดให้กับผู้ใช้ |
เมื่อสร้างผู้ใช้ใหม่ให้ใช้สวิตช์-c, -m, -g, -nดังนี้ -
[root@localhost Downloads]# useradd -c "Bob Jones Accounting Dept Manager"
-m -g accounting -n bjones
ตอนนี้เรามาดูกันว่าผู้ใช้ใหม่ของเราถูกสร้างขึ้นหรือไม่ -
[root@localhost Downloads]# id bjones
(bjones) gid = 1001(accounting) groups = 1001(accounting)
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Bob Jones Accounting Dept Manager:/home/bjones:/bin/bash
[root@localhost Downloads]#
ตอนนี้เราต้องเปิดใช้งานบัญชีใหม่โดยใช้คำสั่ง passwd -
[root@localhost Downloads]# passwd bjones
Changing password for user bjones.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[root@localhost Downloads]#
บัญชีผู้ใช้ไม่ได้เปิดใช้งานเพื่อให้ผู้ใช้สามารถเข้าสู่ระบบได้
ปิดการใช้งานบัญชีผู้ใช้
มีหลายวิธีในการปิดใช้งานบัญชีในระบบ ช่วงเหล่านี้มีตั้งแต่การแก้ไขไฟล์ / etc / passwd ด้วยมือ หรือแม้แต่การใช้คำสั่งpasswdกับไฟล์-lสวิตซ์. ทั้งสองวิธีนี้มีข้อเสียเปรียบใหญ่ประการหนึ่ง: หากผู้ใช้มีการเข้าถึงsshและใช้คีย์ RSA สำหรับการตรวจสอบสิทธิ์ผู้ใช้ยังคงสามารถเข้าสู่ระบบโดยใช้วิธีนี้
ตอนนี้ให้ใช้คำสั่งchageเปลี่ยนวันหมดอายุของรหัสผ่านเป็นวันที่ก่อนหน้า นอกจากนี้อาจเป็นการดีที่จะจดบันทึกไว้ในบัญชีว่าเหตุใดเราจึงปิดใช้งาน
[root@localhost Downloads]# chage -E 2005-10-01 bjones
[root@localhost Downloads]# usermod -c "Disabled Account while Bob out of the country
for five months" bjones
[root@localhost Downloads]# grep bjones /etc/passwd
bjones:x:1001:1001:Disabled Account while Bob out of the country for four
months:/home/bjones:/bin/bash
[root@localhost Downloads]#
จัดการกลุ่ม
การจัดการกลุ่มใน Linux ทำให้สะดวกสำหรับผู้ดูแลระบบในการรวมผู้ใช้ภายในคอนเทนเนอร์โดยใช้ชุดสิทธิ์ที่เกี่ยวข้องกับสมาชิกกลุ่มทั้งหมด ตัวอย่างเช่นผู้ใช้ทุกคนในการบัญชีอาจต้องเข้าถึงไฟล์เดียวกัน ดังนั้นเราจึงสร้างกลุ่มบัญชีเพิ่มผู้ใช้บัญชี
โดยส่วนใหญ่สิ่งที่ต้องการการอนุญาตพิเศษควรทำในกลุ่ม วิธีนี้มักจะช่วยประหยัดเวลาในการใช้สิทธิ์พิเศษกับผู้ใช้เพียงคนเดียว ตัวอย่างเช่น Sally เป็นผู้รับผิดชอบรายงานและมีเพียง Sally เท่านั้นที่ต้องการเข้าถึงไฟล์บางไฟล์เพื่อการรายงาน อย่างไรก็ตามหากวันหนึ่งแซลลีป่วยและบ็อบรายงาน? หรือความจำเป็นในการรายงานเพิ่มขึ้น? เมื่อมีการสร้างกลุ่มผู้ดูแลระบบจะต้องทำเพียงครั้งเดียว ผู้ใช้ที่เพิ่มจะถูกนำไปใช้เมื่อความต้องการเปลี่ยนแปลงหรือขยาย
ต่อไปนี้เป็นคำสั่งทั่วไปที่ใช้สำหรับจัดการกลุ่ม -
- chgrp
- groupadd
- groups
- usermod
chgrp - เปลี่ยนความเป็นเจ้าของกลุ่มสำหรับไฟล์หรือไดเร็กทอรี
มาสร้างไดเร็กทอรีสำหรับบุคคลในกลุ่มบัญชีเพื่อจัดเก็บไฟล์และสร้างไดเร็กทอรีสำหรับไฟล์
[root@localhost Downloads]# mkdir /home/accounting
[root@localhost Downloads]# ls -ld /home/accounting
drwxr-xr-x. 2 root root 6 Jan 13 10:18 /home/accounting
[root@localhost Downloads]#
ต่อไปให้การเป็นเจ้าของกลุ่มกับกลุ่มการบัญชี
[root@localhost Downloads]# chgrp -v accounting /home/accounting/
changed group of ‘/home/accounting/’ from root to accounting
[root@localhost Downloads]# ls -ld /home/accounting/
drwxr-xr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
ตอนนี้ทุกคนในกลุ่มบัญชีได้อ่านและรันสิทธิ์ใน/ home / บัญชี พวกเขาจะต้องมีสิทธิ์ในการเขียนเช่นกัน
[root@localhost Downloads]# chmod g+w /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwxr-x. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
เนื่องจากกลุ่มบัญชีอาจจัดการกับเอกสารสำคัญที่เราจำเป็นต้องใช้สิทธิ์ข้อ จำกัด บางอย่างสำหรับคนอื่น ๆหรือโลก
[root@localhost Downloads]# chmod o-rx /home/accounting/
[root@localhost Downloads]# ls -ld /home/accounting/
drwxrwx---. 2 root accounting 6 Jan 13 10:18 /home/accounting/
[root@localhost Downloads]#
groupadd - ใช้เพื่อสร้างกลุ่มใหม่
สวิตซ์ | หนังบู๊ |
---|---|
- ก | ระบุ GID สำหรับกลุ่ม |
-K | ลบล้างข้อกำหนดสำหรับ GID ใน /etc/login.defs |
-o | อนุญาตให้ลบล้างการไม่อนุญาตรหัสกลุ่มที่ไม่ซ้ำกัน |
-p | รหัสผ่านกลุ่มช่วยให้ผู้ใช้สามารถเปิดใช้งานตัวเองได้ |
มาสร้างกลุ่มใหม่ชื่อลับกันเถอะ เราจะเพิ่มรหัสผ่านให้กับกลุ่มเพื่อให้ผู้ใช้สามารถเพิ่มตัวเองด้วยรหัสผ่านที่ทราบ
[root@localhost]# groupadd secret
[root@localhost]# gpasswd secret
Changing the password for group secret
New Password:
Re-enter new password:
[root@localhost]# exit
exit
[centos@localhost ~]$ newgrp secret Password: [centos@localhost ~]$ groups
secret wheel rdc
[centos@localhost ~]$
ในทางปฏิบัติจะไม่ใช้รหัสผ่านสำหรับกลุ่มบ่อยๆ กลุ่มรองมีความเพียงพอและการแบ่งปันรหัสผ่านระหว่างผู้ใช้รายอื่นไม่ใช่แนวทางปฏิบัติด้านความปลอดภัยที่ดี
groupsคำสั่งใช้เพื่อแสดงว่าผู้ใช้อยู่ในกลุ่มใด เราจะใช้สิ่งนี้หลังจากทำการเปลี่ยนแปลงบางอย่างกับผู้ใช้ปัจจุบันของเรา
usermod ใช้เพื่ออัปเดตแอตทริบิวต์ของบัญชี
ต่อไปนี้เป็นสวิตช์usermodทั่วไป
สวิตซ์ | หนังบู๊ |
---|---|
- ก | ต่อท้ายเพิ่มผู้ใช้ในกลุ่มเสริมโดยใช้ตัวเลือก -G เท่านั้น |
-ค | แสดงความคิดเห็นปรับปรุงค่าความคิดเห็นของผู้ใช้ |
-d | โฮมไดเร็กทอรีอัพเดตโฮมไดเร็กทอรีของผู้ใช้ |
- ก | กลุ่มเพิ่มหรือลบกลุ่มผู้ใช้รอง |
- ก | กลุ่มกลุ่มหลักเริ่มต้นของผู้ใช้ |
[root@localhost]# groups centos
centos : accounting secret
[root@localhost]#
[root@localhost]# usermod -a -G wheel centos
[root@localhost]# groups centos
centos : accounting wheel secret
[root@localhost]#
สามารถเปิดใช้โควต้าดิสก์ CentOS ได้ทั้งสองอย่าง แจ้งเตือนผู้ดูแลระบบและปฏิเสธการเข้าถึงที่เก็บข้อมูลดิสก์เพิ่มเติมให้กับผู้ใช้ก่อนที่ความจุของดิสก์จะเกิน เมื่อดิสก์เต็มขึ้นอยู่กับสิ่งที่อยู่ในดิสก์ระบบทั้งหมดอาจหยุดชะงักจนกว่าจะกู้คืนได้
การเปิดใช้งานการจัดการโควต้าใน CentOS Linux นั้นโดยพื้นฐานแล้วเป็นกระบวนการ 4 ขั้นตอน -
Step 1 - เปิดใช้งานการจัดการโควต้าสำหรับกลุ่มและผู้ใช้ใน / etc / fstab
Step 2 - ติดตั้งระบบไฟล์ใหม่
Step 3 - สร้างฐานข้อมูลโควต้าและสร้างตารางการใช้งานดิสก์
Step 4 - กำหนดนโยบายโควต้า
เปิดใช้งานการจัดการโควต้าใน / etc / fstab
ขั้นแรกเราต้องการสำรองไฟล์ / etc / fstab ของเรา -
[root@centosLocal centos]# cp -r /etc/fstab ./
ตอนนี้เรามีสำเนาของworking / etc / fstab ที่เรารู้จักในไดเร็กทอรีการทำงานปัจจุบัน
#
# /etc/fstab
# Created by anaconda on Sat Dec 17 02:44:51 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root / xfs defaults 0 0
UUID = 4b9a40bc-9480-4 /boot xfs defaults 0 0
/dev/mapper/cl-home /home xfs defaults,usrquota,grpquota 0 0
/dev/mapper/cl-swap swap swap defaults 0 0
เราได้ทำการเปลี่ยนแปลงต่อไปนี้ในส่วนอ็อพชันของ/ etc / fstabสำหรับไดรฟ์ข้อมูลหรือเลเบลที่จะใช้โควต้าสำหรับผู้ใช้และกลุ่ม
- usrquota
- grpquota
อย่างที่คุณเห็นเรากำลังใช้ไฟล์ xfsระบบไฟล์ เมื่อใช้ xfs มีขั้นตอนเพิ่มเติมด้วยตนเองที่เกี่ยวข้อง/homeอยู่บนดิสก์เดียวกันกับ / การตรวจสอบเพิ่มเติมแสดง / ตั้งค่าไว้สำหรับnoquotaซึ่งเป็นตัวเลือกการติดตั้งระดับเคอร์เนล เราต้องกำหนดค่าตัวเลือกการบูตเคอร์เนลของเราใหม่
root@localhost rdc]# mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
[root@localhost rdc]#
การกำหนดค่าตัวเลือกการบูตเคอร์เนลใหม่สำหรับระบบไฟล์ XFS
ขั้นตอนนี้จำเป็นภายใต้เงื่อนไขสองประการเท่านั้น -
- เมื่อดิสก์ / พาร์ติชันที่เราเปิดใช้งานโควต้ากำลังใช้ระบบไฟล์ xfs
- เมื่อเคอร์เนลกำลังส่งพารามิเตอร์ noquota ไปยัง / etc / fstab ในเวลาบูต
Step 1 - ทำการสำรองข้อมูลของ / etc / default / grub
cp /etc/default/grub ~/
Step 2- ปรับเปลี่ยน/ etc / default / ด้วง
นี่คือไฟล์เริ่มต้น
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
เราต้องการแก้ไขบรรทัดต่อไปนี้ -
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
ถึง
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=cl/root rd.lvm.lv
=cl/swap rhgb quiet rootflags=usrquota,grpquota"
Note- สิ่งสำคัญคือเราต้องคัดลอกการเปลี่ยนแปลงเหล่านี้ทุกคำ หลังจากที่เรากำหนดค่า grub.cfg ใหม่แล้วระบบของเราจะไม่สามารถบูตได้หากเกิดข้อผิดพลาดในการกำหนดค่า โปรดลองส่วนนี้ของบทแนะนำเกี่ยวกับระบบที่ไม่ใช่ระบบการผลิต
Step 3 - สำรองข้อมูล grub.cfg ที่ทำงานของคุณ
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
สร้างgrub.cfgใหม่
[root@localhost rdc]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-dbba7fa47f73457b96628ba8f3959bfd
Found initrd image: /boot/initramfs-0-rescuedbba7fa47f73457b96628ba8f3959bfd.img
done
[root@localhost rdc]#
รีบูต
[root@localhost rdc]#reboot
หากการแก้ไขทั้งหมดแม่นยำเราไม่ควรมีความพร้อมในการเพิ่มโควต้าให้กับระบบไฟล์xfs
[rdc@localhost ~]$ mount | grep ' / '
/dev/mapper/cl-root on / type xfs (rw,relatime,seclabel,attr2,inode64,usrquota,grpquota)
[rdc@localhost ~]$
เราได้ส่งผ่านพารามิเตอร์usrquotaและgrpquotaผ่านด้วง
ตอนนี้แก้ไข/ etc / fstabอีกครั้งเพื่อรวม / ตั้งแต่/ homeบนฟิสิคัลดิสก์เดียวกัน
/dev/mapper/cl-root/xfs
defaults,usrquota,grpquota 0 0
ตอนนี้ให้เปิดใช้งานฐานข้อมูลโควต้า
[root@localhost rdc]# quotacheck -acfvugM
ตรวจสอบให้แน่ใจว่าเปิดใช้งานโควต้าแล้ว
[root@localhost rdc]# quotaon -ap
group quota on / (/dev/mapper/cl-root) is on
user quota on / (/dev/mapper/cl-root) is on
group quota on /home (/dev/mapper/cl-home) is on
user quota on /home (/dev/mapper/cl-home) is on
[root@localhost rdc]#
ติดตั้งระบบไฟล์ใหม่
หากพาร์ติชันหรือดิสก์แยกจากพาร์ติชันที่บู๊ตแอ็คทีฟเราสามารถติดตั้งใหม่ได้โดยไม่ต้องรีบูต หากกำหนดโควต้าไว้บนดิสก์ / พาร์ติชันที่บูตในไดเร็กทอรีราก / เราอาจต้องรีบูตระบบปฏิบัติการ การบังคับให้ติดตั้งใหม่และใช้การเปลี่ยนแปลงความจำเป็นในการต่อเชื่อมระบบไฟล์ใหม่อาจแตกต่างกันไป
[rdc@localhost ~]$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/cl-root 22447404 4081860 18365544 19% /
devtmpfs 903448 0 903448 0% /dev
tmpfs 919308 100 919208 1% /dev/shm
tmpfs 919308 9180 910128 1% /run
tmpfs 919308 0 919308 0% /sys/fs/cgroup
/dev/sda2 1268736 176612 1092124 14% /boot
/dev/mapper/cl-var 4872192 158024 4714168 4% /var
/dev/mapper/cl-home 18475008 37284 18437724 1% /home
tmpfs 183864 8 183856 1% /run/user/1000
[rdc@localhost ~]$
อย่างที่เราเห็นมีการใช้โวลุ่ม LVM ดังนั้นจึงเป็นเรื่องง่ายที่จะรีบูต สิ่งนี้จะติดตั้ง/ home ใหม่และโหลดการเปลี่ยนแปลงการกำหนดค่า/ etc / fstabในการกำหนดค่าที่ใช้งานอยู่
สร้างไฟล์ฐานข้อมูลโควต้า
ขณะนี้ CentOS สามารถทำงานกับโควต้าดิสก์ใน / home ได้แล้ว ในการเปิดใช้งานการสนับสนุนโควต้าเต็มรูปแบบเราต้องเรียกใช้ไฟล์quotacheck คำสั่ง
quotacheck จะสร้างสองไฟล์ -
- aquota.user
- aquota.group
สิ่งเหล่านี้ใช้เพื่อจัดเก็บข้อมูลโควต้าสำหรับดิสก์ / พาร์ติชันที่เปิดใช้โควต้า
ต่อไปนี้เป็นสวิทช์ quotacheck ทั่วไป
สวิตซ์ | หนังบู๊ |
---|---|
-ยู | ตรวจสอบโควต้าผู้ใช้ |
- ก | ตรวจสอบโควต้ากลุ่ม |
-ค | ควรเปิดใช้โควต้าสำหรับแต่ละระบบไฟล์โดยเปิดใช้โควต้า |
-v | แสดงเอาต์พุต verbose |
เพิ่มขีด จำกัด โควต้าต่อผู้ใช้
สำหรับสิ่งนี้เราจะใช้คำสั่ง edquota ตามด้วยชื่อผู้ใช้ -
[root@localhost rdc]# edquota centos
Disk quotas for user centos (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/mapper/cl-root 12 0 0 13 0 0
/dev/mapper/cl-home 4084 0 0 140 0 0
มาดูแต่ละคอลัมน์
Filesystem - เป็นโควต้าระบบไฟล์สำหรับผู้ใช้ที่สมัคร
blocks - จำนวนบล็อกที่ผู้ใช้ใช้อยู่ในระบบไฟล์แต่ละระบบ
soft- ตั้งค่าบล็อกสำหรับขีด จำกัด อ่อน Soft limit อนุญาตให้ผู้ใช้มีโควต้าในช่วงเวลาที่กำหนด
hard- ตั้งค่าบล็อกสำหรับขีด จำกัด ยาก ขีด จำกัด ยากคือโควต้าทั้งหมดที่อนุญาต
inodes - จำนวน inodes ที่ผู้ใช้กำลังใช้อยู่
soft - ขีด จำกัด ไอโหนดอ่อน
hard - ขีด จำกัด ไอโหนดยาก
เพื่อตรวจสอบโควต้าปัจจุบันของเราในฐานะผู้ใช้ -
[centos@localhost ~]$ quota
Disk quotas for user centos (uid 1000):
Filesystem blocks quota limit grace files quota limit grace
/dev/mapper/cl-home 6052604 56123456 61234568 475 0 0 [centos@localhost ~]$
ต่อไปนี้เป็นข้อผิดพลาดที่มอบให้กับผู้ใช้เมื่อเกินขีด จำกัด โควต้าฮาร์ด
[centos@localhost Downloads]$ cp CentOS-7-x86_64-LiveKDE-1611.iso.part ../Desktop/
cp: cannot create regular file ‘../Desktop/CentOS-7-x86_64-LiveKDE-
1611.iso.part’: Disk quota exceeded
[centos@localhost Downloads]$
อย่างที่เราเห็นเราอยู่ใกล้กับโควต้าดิสก์ของผู้ใช้รายนี้ มาตั้งคำเตือน Soft Limit ด้วยวิธีนี้ผู้ใช้จะต้องแจ้งให้ทราบล่วงหน้าก่อนที่ขีด จำกัด โควต้าจะหมดอายุ จากประสบการณ์คุณจะได้รับคำร้องเรียนจากผู้ใช้ปลายทางเมื่อพวกเขาเข้ามาทำงานและต้องใช้เวลา 45 นาทีในการล้างไฟล์เพื่อไปทำงานจริง
ในฐานะผู้ดูแลระบบเราสามารถตรวจสอบการใช้โควต้าด้วยไฟล์ repquota คำสั่ง
[root@localhost Downloads]# repquota /home
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------------------------
root -- 0 0 0 3 0 0
centos -+ 6189824 56123456 61234568 541 520 540 6days
[root@localhost Downloads]#
อย่างที่เราเห็น Centos ของผู้ใช้เกินโควต้าฮาร์ดบล็อกและไม่สามารถใช้พื้นที่ดิสก์บน/ บ้านได้อีกต่อไป
- + แสดงว่ามีการใช้งานฮาร์ดโควต้าเกินในระบบไฟล์
เมื่อวางแผนโควต้าจำเป็นต้องทำคณิตศาสตร์เล็กน้อย สิ่งที่ผู้ดูแลระบบต้องรู้คือมีผู้ใช้ในระบบกี่คน? มีพื้นที่ว่างเท่าใดในการจัดสรรให้กับผู้ใช้ / กลุ่ม? ระบบไฟล์มีกี่ไบต์?
กำหนดโควต้าในรูปแบบของบล็อกที่เกี่ยวข้องกับพื้นที่ว่างบนดิสก์ขอแนะนำให้ปล่อยบัฟเฟอร์ "ปลอดภัย" ของพื้นที่ว่างบนระบบไฟล์ซึ่งจะยังคงอยู่ในสถานการณ์ที่เลวร้ายที่สุด: โควต้าทั้งหมดเกินพร้อมกัน โดยเฉพาะอย่างยิ่งบนพาร์ติชันที่ระบบใช้ในการเขียนบันทึก
systemdเป็นวิธีใหม่ในการเรียกใช้บริการบน Linux systemdมีแทนที่sysvinit systemdนำเวลาบูตมาสู่ Linux ได้เร็วขึ้นและตอนนี้เป็นวิธีมาตรฐานในการจัดการบริการ Linux ในขณะที่มีเสถียรภาพsystemdยังคงพัฒนาอยู่
systemdเป็นระบบ init ใช้เพื่อจัดการทั้งเซอร์วิสและ daemons ที่ต้องการการเปลี่ยนแปลงสถานะหลังจากที่บูตเคอร์เนล Linux แล้ว เมื่อการเปลี่ยนแปลงสถานะเริ่มต้นการหยุดการโหลดซ้ำและการปรับสถานะบริการจะถูกนำไปใช้
ขั้นแรกให้ตรวจสอบเวอร์ชันของ systemd ที่กำลังทำงานบนเซิร์ฟเวอร์ของเรา
[centos@localhost ~]$ systemctl --version
systemd 219
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
[centos@localhost ~]$
สำหรับ CentOS เวอร์ชัน 7 การอัปเดตอย่างสมบูรณ์ในขณะที่เขียน systemd เวอร์ชัน 219 เป็นเวอร์ชันเสถียรในปัจจุบัน
นอกจากนี้เรายังสามารถวิเคราะห์เวลาบูตเซิร์ฟเวอร์ครั้งล่าสุดด้วยsystemd-analysis
[centos@localhost ~]$ systemd-analyze
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s
[centos@localhost ~]$
เมื่อเวลาบูตระบบช้าลงเราสามารถใช้คำสั่งsystemd-analysis bl
[centos@localhost ~]$ systemd-analyze blame
40.882s kdump.service
5.775s NetworkManager-wait-online.service
4.701s plymouth-quit-wait.service
3.586s postfix.service
3.121s systemd-udev-settle.service
2.649s tuned.service
1.848s libvirtd.service
1.437s network.service
875ms packagekit.service
855ms gdm.service
514ms firewalld.service
438ms rsyslog.service
436ms udisks2.service
398ms sshd.service
360ms boot.mount
336ms polkit.service
321ms accounts-daemon.service
เมื่อทำงานร่วมกับsystemdมันเป็นสิ่งสำคัญที่จะเข้าใจแนวคิดของหน่วยUnitsเป็นทรัพยากรที่systemdรู้วิธีที่จะตีความ หน่วยแบ่งออกเป็น 12 ประเภทดังนี้ -
- .service
- .socket
- .device
- .mount
- .automount
- .swap
- .target
- .path
- .timer
- .snapshot
- .slice
- .scope
โดยส่วนใหญ่เราจะทำงานร่วมกับ. service เป็นเป้าหมายหน่วย ขอแนะนำให้ทำการวิจัยเพิ่มเติมเกี่ยวกับประเภทอื่น ๆ ในฐานะที่เป็นเพียง.serviceหน่วยจะมีผลกับการเริ่มต้นและหยุดsystemdบริการ
แต่ละหน่วยถูกกำหนดในไฟล์ที่อยู่ใน -
/lib/systemd/system - ไฟล์หน่วยฐาน
/etc/systemd/system - ไฟล์ยูนิตที่แก้ไขเริ่มต้นในเวลาทำงาน
จัดการบริการด้วย systemctl
ในการทำงานกับsystemdเราจะต้องทำความคุ้นเคยกับคำสั่งsystemctl ให้มาก ต่อไปนี้เป็นบรรทัดคำสั่งร่วมกับสวิทช์สำหรับsystemctl
สวิตซ์ | หนังบู๊ |
---|---|
-t | ค่าที่คั่นด้วยเครื่องหมายจุลภาคของประเภทยูนิตเช่นเซอร์วิสหรือซ็อกเก็ต |
- ก | แสดงหน่วยที่โหลดทั้งหมด |
--สถานะ | แสดงหน่วยทั้งหมดในสถานะที่กำหนดเช่น load, sub, active, inactive ฯลฯ .. |
- ฮ | ดำเนินการจากระยะไกล ระบุชื่อโฮสต์หรือโฮสต์และผู้ใช้คั่นด้วย @ |
การใช้งาน systemctl พื้นฐาน
systemctl [operation]
example: systemctl --state [servicename.service]
ดูบริการทั้งหมดที่ทำงานบนกล่องของเราได้อย่างรวดเร็ว
[root@localhost rdc]# systemctl -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
blk-availability.service loaded active exited Availability of block devices
bluetooth.service loaded active running Bluetooth service
chronyd.service loaded active running NTP client/server
การหยุดบริการ
ก่อนอื่นให้หยุดบริการบลูทู ธ
[root@localhost]# systemctl stop bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded inactive dead Bluetooth service
[root@localhost]#
อย่างที่เราเห็นตอนนี้บริการบลูทู ธ ไม่ทำงาน
เพื่อเริ่มบริการบลูทู ธ อีกครั้ง
[root@localhost]# systemctl start bluetooth
[root@localhost]# systemctl --all -t service | grep bluetooth
bluetooth.service loaded active running Bluetooth service
[root@localhost]#
Note- เราไม่ได้ระบุ bluetooth.service เนื่องจากมีการระบุโดยนัยของ. service เป็นแนวทางปฏิบัติที่ดีในการคิดถึงประเภทหน่วยต่อท้ายบริการที่เรากำลังดำเนินการอยู่ ดังนั้นต่อจากนี้เราจะใช้นามสกุล. serviceเพื่อชี้แจงว่าเรากำลังดำเนินการเกี่ยวกับการปฏิบัติงานของหน่วยบริการ
การดำเนินการหลักที่สามารถทำได้กับบริการคือ -
เริ่ม | เริ่มบริการ |
หยุด | หยุดบริการ |
โหลดซ้ำ | โหลดคอนฟิกูเรชันที่แอ็คทีฟของเซอร์วิสโดยไม่ต้องหยุด (เช่น kill -HUP ใน system v init) |
เริ่มต้นใหม่ | เริ่มจากนั้นหยุดบริการ |
เปิดใช้งาน | เริ่มบริการในเวลาบูต |
ปิดการใช้งาน | หยุดบริการไม่ให้เริ่มทำงานโดยอัตโนมัติในขณะทำงาน |
การดำเนินการข้างต้นส่วนใหญ่จะใช้ในสถานการณ์ต่อไปนี้ -
เริ่ม | เพื่อนำบริการที่อยู่ในสถานะหยุดทำงาน |
หยุด | เพื่อปิดบริการชั่วคราว (ตัวอย่างเช่นเมื่อต้องหยุดบริการเพื่อเข้าถึงไฟล์ที่ถูกล็อกโดยบริการเช่นเดียวกับเมื่ออัปเกรดบริการ) |
โหลดซ้ำ | เมื่อไฟล์การกำหนดค่าได้รับการแก้ไขและเราต้องการใช้การเปลี่ยนแปลงใหม่ในขณะที่ไม่หยุดบริการ |
เริ่มต้นใหม่ | ในสถานการณ์เช่นเดียวกับการโหลด แต่บริการไม่สนับสนุนการโหลด |
เปิดใช้งาน | เมื่อเราต้องการให้บริการที่ปิดใช้งานทำงานในเวลาบูต |
ปิดการใช้งาน | ใช้เป็นหลักเมื่อจำเป็นต้องหยุดบริการ แต่จะเริ่มในการบูต |
เพื่อตรวจสอบสถานะของบริการ -
[root@localhost]# systemctl status network.service
network.service - LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago
Docs: man:systemd-sysv-generator(8)
Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)
localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking...
localhost.localdomain network[923]: Bringing up loopback interface: [ OK ]
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.
[root@localhost]#
แสดงสถานะปัจจุบันของบริการเครือข่าย หากเราต้องการดูบริการทั้งหมดที่เกี่ยวข้องกับระบบเครือข่ายเราสามารถใช้ -
[root@localhost]# systemctl --all -t service | grep -i network
network.service loaded active exited LSB: Bring up/
NetworkManager-wait-online.service loaded active exited Network Manager
NetworkManager.service loaded active running Network Manager
ntpd.service loaded inactive dead Network Time
rhel-import-state.service loaded active exited Import network
[root@localhost]#
สำหรับผู้ที่คุ้นเคยกับไฟล์ sysinitวิธีการในการจัดการบริการเป็นสิ่งสำคัญที่จะทำให้การเปลี่ยนไปใช้systemd systemdเป็นวิธีใหม่ในการเริ่มต้นและหยุดบริการ daemon ใน Linux
systemctlเป็นยูทิลิตี้ที่ใช้ในการควบคุม systemd. systemctl ช่วยให้ผู้ดูแลระบบ CentOS สามารถดำเนินการหลายอย่างบน systemd ได้แก่ -
- กำหนดค่าหน่วย systemd
- รับสถานะของ systemd untis
- เริ่มและหยุดบริการ
- เปิด / ปิดบริการ systemd สำหรับรันไทม์ ฯลฯ
ไวยากรณ์คำสั่งสำหรับsystemctlนั้นค่อนข้างธรรมดาแต่สามารถยุ่งเหยิงกับสวิตช์และตัวเลือกต่างๆ เราจะนำเสนอฟังก์ชันที่สำคัญที่สุดของsystemctl ที่จำเป็นสำหรับการจัดการ CentOS Linux
Basic systemctl syntax:
systemctl [OPTIONS] COMMAND [NAME]
ต่อไปนี้เป็นคำสั่งทั่วไปที่ใช้กับsystemctl -
- start
- stop
- restart
- reload
- status
- is-active
- list-units
- enable
- disable
- cat
- show
เราได้กล่าวแล้วเริ่มต้น , หยุด , โหลด , รีสตาร์ท , เปิดใช้งานและปิดการใช้งานกับ systemctl ลองดูคำสั่งที่ใช้กันทั่วไปที่เหลือ
สถานะ
ในรูปแบบที่เรียบง่ายที่สุดคำสั่งสถานะสามารถใช้เพื่อดูสถานะของระบบโดยรวม -
[root@localhost rdc]# systemctl status
● localhost.localdomain
State: running
Jobs: 0 queued
Failed: 0 units
Since: Thu 2017-01-19 19:14:37 EST; 4h 5min ago
CGroup: /
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─user.slice
│ └─user-1002.slice
│ └─session-1.scope
│ ├─2869 gdm-session-worker [pam/gdm-password]
│ ├─2881 /usr/bin/gnome-keyring-daemon --daemonize --login
│ ├─2888 gnome-session --session gnome-classic
│ ├─2895 dbus-launch --sh-syntax --exit-with-session
ผลลัพธ์ข้างต้นได้รับการควบแน่น ในสถานะ systemctl ในโลกแห่งความเป็นจริงจะแสดงสถานะกระบวนการแบบทรีประมาณ 100 บรรทัด
สมมติว่าเราต้องการตรวจสอบสถานะของบริการไฟร์วอลล์ของเรา -
[root@localhost rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-19 19:14:55 EST; 4h 12min ago
Docs: man:firewalld(1)
Main PID: 825 (firewalld)
CGroup: /system.slice/firewalld.service
└─825 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
อย่างที่คุณเห็นบริการไฟร์วอลล์ของเราเปิดใช้งานอยู่และใช้งานมานานกว่า 4 ชั่วโมงแล้ว
รายการหน่วย
คำสั่ง list-units ช่วยให้เราสามารถแสดงรายการหน่วยทั้งหมดในประเภทหนึ่ง ๆ ตรวจสอบซ็อกเก็ตที่จัดการโดยsystemd -
[root@localhost]# systemctl list-units --type=socket
UNIT LOAD ACTIVE SUB DESCRIPTION
avahi-daemon.socket loaded active running Avahi mDNS/DNS-SD Stack Activation Socket
cups.socket loaded active running CUPS Printing Service Sockets
dbus.socket loaded active running D-Bus System Message Bus Socket
dm-event.socket loaded active listening Device-mapper event daemon FIFOs
iscsid.socket loaded active listening Open-iSCSI iscsid Socket
iscsiuio.socket loaded active listening Open-iSCSI iscsiuio Socket
lvm2-lvmetad.socket loaded active running LVM2 metadata daemon socket
lvm2-lvmpolld.socket loaded active listening LVM2 poll daemon socket
rpcbind.socket loaded active listening RPCbind Server Activation Socket
systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe
systemd-journald.socket loaded active running Journal Socket
systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket
systemd-udevd-control.socket loaded active running udev Control Socket
systemd-udevd-kernel.socket loaded active running udev Kernel Socket
virtlockd.socket loaded active listening Virtual machine lock manager socket
virtlogd.socket loaded active listening Virtual machine log manager socket
ตอนนี้เรามาตรวจสอบบริการที่กำลังทำงานอยู่ -
[root@localhost rdc]# systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION
abrt-ccpp.service loaded active exited Install ABRT coredump hook
abrt-oops.service loaded active running ABRT kernel log watcher
abrt-xorg.service loaded active running ABRT Xorg log watcher
abrtd.service loaded active running ABRT Automated Bug Reporting Tool
accounts-daemon.service loaded active running Accounts Service
alsa-state.service loaded active running Manage Sound Card State (restore and store)
atd.service loaded active running Job spooling tools
auditd.service loaded active running Security Auditing Service
ใช้งานอยู่
คือใช้งานคำสั่งนี้เป็นตัวอย่างของคำสั่ง systemctl ที่ออกแบบมาเพื่อส่งกลับข้อมูลสถานะของหน่วย
[root@localhost rdc]# systemctl is-active ksm.service
active
แมว
catเป็นหนึ่งในคำสั่งที่ไม่ค่อยมีใครใช้ แทนการใช้แมวที่เปลือกและพิมพ์เส้นทางไปยังแฟ้มหน่วยเพียงแค่ใช้แมว systemctl
[root@localhost]# systemctl cat firewalld
# /usr/lib/systemd/system/firewalld.service
[Unit]
Description=firewalld - dynamic firewall daemon
Before=network.target
Before=libvirtd.service
Before = NetworkManager.service
After=dbus.service
After=polkit.service
Conflicts=iptables.service ip6tables.service ebtables.service ipset.service
Documentation=man:firewalld(1)
[Service]
EnvironmentFile = -/etc/sysconfig/firewalld
ExecStart = /usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS ExecReload = /bin/kill -HUP $MAINPID
# supress to log debug and error output also to /var/log/messages
StandardOutput = null
StandardError = null
Type = dbus
BusName = org.fedoraproject.FirewallD1
[Install]
WantedBy = basic.target
Alias = dbus-org.fedoraproject.FirewallD1.service
[root@localhost]#
ตอนนี้เรามีการสำรวจทั้งsystemdและsystemctlในรายละเอียดขอใช้พวกเขาในการจัดการทรัพยากรในcgroupsหรือกลุ่มควบคุม
cgroupsหรือ Control Groups เป็นคุณลักษณะของเคอร์เนล Linux ที่อนุญาตให้ผู้ดูแลระบบจัดสรรหรือ จำกัด ทรัพยากรระบบสำหรับบริการและจัดกลุ่ม
ในการแสดงรายการกลุ่มควบคุมที่ทำงานอยู่เราสามารถใช้คำสั่งpsต่อไปนี้-
[root@localhost]# ps xawf -eo pid,user,cgroup,args
8362 root - \_ [kworker/1:2]
1 root - /usr/lib/systemd/systemd --switched-
root --system -- deserialize 21
507 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-journald
527 root 7:cpuacct,cpu:/system.slice /usr/sbin/lvmetad -f
540 root 7:cpuacct,cpu:/system.slice /usr/lib/systemd/systemd-udevd
715 root 7:cpuacct,cpu:/system.slice /sbin/auditd -n
731 root 7:cpuacct,cpu:/system.slice \_ /sbin/audispd
734 root 7:cpuacct,cpu:/system.slice \_ /usr/sbin/sedispatch
737 polkitd 7:cpuacct,cpu:/system.slice /usr/lib/polkit-1/polkitd --no-debug
738 rtkit 6:memory:/system.slice/rtki /usr/libexec/rtkit-daemon
740 dbus 7:cpuacct,cpu:/system.slice /bin/dbus-daemon --system --
address=systemd: --nofork --nopidfile --systemd-activation
การจัดการทรัพยากรใน CentOS 6.X ได้รับการกำหนดใหม่ด้วยการใช้งานsystemd init เมื่อคิดการจัดการทรัพยากรสำหรับการให้บริการสิ่งที่สำคัญที่จะมุ่งเน้นเป็นcgroupscgroupsมีขั้นสูงด้วยsystemdทั้งในด้านการทำงานและความเรียบง่าย
เป้าหมายของ cgroups ในการจัดการทรัพยากรคือ - ไม่มีบริการใดบริการหนึ่งที่สามารถทำให้ระบบล่มโดยรวมได้ หรือไม่มีกระบวนการบริการเดียว (อาจเป็นสคริปต์ PHP ที่เขียนไม่ดี) จะทำให้การทำงานของเซิร์ฟเวอร์เสียไปจากการใช้ทรัพยากรมากเกินไป
cgroupsอนุญาตให้ควบคุมทรัพยากรของหน่วยสำหรับทรัพยากรต่อไปนี้ -
CPU - จำกัด งานที่ต้องใช้ซีพียูมากซึ่งไม่สำคัญเท่ากับงานอื่น ๆ ที่มีความเข้มข้นน้อยกว่า
Memory - จำกัด จำนวนหน่วยความจำที่บริการสามารถใช้งานได้
Disks - จำกัด ดิสก์ i / o
** เวลา CPU: **
งานที่ต้องการลำดับความสำคัญของ CPU น้อยกว่าสามารถกำหนด CPU Slices ที่กำหนดเองได้
ลองดูสองบริการต่อไปนี้เป็นตัวอย่าง
บริการ CPU แบบสุภาพ 1
[root@localhost]# systemctl cat polite.service
# /etc/systemd/system/polite.service
[Unit]
Description = Polite service limits CPU Slice and Memory
After=remote-fs.target nss-lookup.target
[Service]
MemoryLimit = 1M
ExecStart = /usr/bin/sha1sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/polite.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
บริการ CPU ชั่วร้าย 2
[root@localhost]# systemctl cat evil.service
# /etc/systemd/system/evil.service
[Unit]
Description = I Eat You CPU
After=remote-fs.target nss-lookup.target
[Service]
ExecStart = /usr/bin/md5sum /dev/zero
ExecStop = /bin/kill -WINCH ${MAINPID}
WantedBy=multi-user.target
# /etc/systemd/system/evil.service.d/50-CPUShares.conf
[Service]
CPUShares = 1024
[root@localhost]#
มาตั้งค่า Polite Service โดยใช้ลำดับความสำคัญของ CPU น้อยกว่า -
systemctl set-property polite.service CPUShares = 20
/system.slice/polite.service
1 70.5 124.0K - -
/system.slice/evil.service
1 99.5 304.0K - -
อย่างที่เราเห็นในช่วงเวลาปกติของระบบที่ไม่ได้ใช้งานกระบวนการโกงทั้งสองยังคงใช้รอบ CPU อย่างไรก็ตามการตั้งค่าให้มีไทม์สไลซ์น้อยลงคือการใช้เวลา CPU น้อยลง ด้วยเหตุนี้เราจึงสามารถดูได้ว่าการใช้เวลาน้อยลงจะช่วยให้งานที่สำคัญเข้าถึงทรัพยากรระบบได้ดีขึ้นได้อย่างไร
ในการตั้งค่าบริการสำหรับแต่ละทรัพยากรเมธอดset-propertyจะกำหนดพารามิเตอร์ต่อไปนี้ -
systemctl set-property name parameter=value
ชิ้นส่วน CPU | CPUS หุ้น |
ขีด จำกัด หน่วยความจำ | MemoryLimit |
ขีด จำกัด หน่วยความจำแบบซอฟต์ | MemorySoftLimit |
บล็อกน้ำหนัก IO | บล็อก IOW |
Block Device Limit (ระบุใน / volume / path)) | บล็อกไอโอดีอุปกรณ์น้ำหนัก |
อ่าน IO | BlockIOReadBandwidth |
ดิสก์เขียน IO | BlockIOReadBandwidth |
ส่วนใหญ่มักจะให้บริการจะถูก จำกัด โดยการใช้งาน CPU , ขีด จำกัด ของหน่วยความจำและการอ่าน / เขียน IO
หลังจากเปลี่ยนแต่ละครั้งจำเป็นต้องโหลด systemd ใหม่และเริ่มบริการใหม่ -
systemctl set-property foo.service CPUShares = 250
systemctl daemon-reload
systemctl restart foo.service
กำหนดค่า CGroups ใน CentOS Linux
ในการสร้าง cgroups แบบกำหนดเองใน CentOS Linux เราจำเป็นต้องติดตั้งบริการและกำหนดค่าก่อน
Step 1 - ติดตั้ง libcgroup (หากยังไม่ได้ติดตั้ง)
[root@localhost]# yum install libcgroup
Package libcgroup-0.41-11.el7.x86_64 already installed and latest version
Nothing to do
[root@localhost]#
อย่างที่เราเห็นโดยค่าเริ่มต้น CentOS 7 มี libcgroup ติดตั้งพร้อมกับตัวติดตั้งทุกอย่าง การใช้โปรแกรมติดตั้งขั้นต่ำจะทำให้เราต้องติดตั้งยูทิลิตี้libcgroupพร้อมกับการอ้างอิงใด ๆ
Step 2 - เริ่มและเปิดใช้งานบริการ cgconfig
[root@localhost]# systemctl enable cgconfig
Created symlink from /etc/systemd/system/sysinit.target.wants/cgconfig.service to /usr/lib/systemd/system/cgconfig.service.
[root@localhost]# systemctl start cgconfig
[root@localhost]# systemctl status cgconfig
● cgconfig.service - Control Group configuration service
Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; enabled; vendor preset: disabled)
Active: active (exited) since Mon 2017-01-23 02:51:42 EST; 1min 21s ago
Main PID: 4692 (code=exited, status = 0/SUCCESS)
Memory: 0B
CGroup: /system.slice/cgconfig.service
Jan 23 02:51:42 localhost.localdomain systemd[1]: Starting Control Group configuration service...
Jan 23 02:51:42 localhost.localdomain systemd[1]: Started Control Group configuration service.
[root@localhost]#
ต่อไปนี้เป็นคำสั่งทั่วไปที่ใช้กับ Process Management – bg, fg, nohup, ps, pstree, top, kill, killall, free, uptime, nice
ทำงานกับกระบวนการ
Quick Note: Process PID in Linux
ใน Linux ทุกกระบวนการที่รันจะได้รับ PID หรือ Process ID Number PIDนี้เป็นวิธีที่ CentOS ระบุกระบวนการเฉพาะ ดังที่เราได้กล่าวไปแล้วsystemdเป็นกระบวนการแรกที่เริ่มต้นและกำหนด PID เป็น 1 ใน CentOS
Pgrep ใช้เพื่อรับ Linux PID สำหรับชื่อกระบวนการที่กำหนด
[root@CentOS]# pgrep systemd
1
[root@CentOS]#
ตามที่เห็นคำสั่งpgrepจะส่งคืน PID ปัจจุบันของ systemd
ขั้นตอนพื้นฐาน CentOS และการจัดการงานใน CentOS
เมื่อทำงานกับกระบวนการใน Linux สิ่งสำคัญคือต้องทราบว่ากระบวนการเบื้องหน้าและเบื้องหลังขั้นพื้นฐานดำเนินการอย่างไรที่บรรทัดคำสั่ง
fg - นำกระบวนการไปสู่เบื้องหน้า
bg - ย้ายกระบวนการไปที่พื้นหลัง
jobs - รายชื่อกระบวนการปัจจุบันที่แนบมากับเชลล์
ctrl+z - คีย์ผสม Control + z เพื่อพักกระบวนการปัจจุบัน
& - เริ่มกระบวนการในพื้นหลัง
เริ่มต้นลองใช้คำสั่งเปลือกนอนหลับsleepก็จะทำตามที่มันเป็นชื่อการนอนหลับเป็นระยะเวลาที่กำหนดของเวลาการนอนหลับ
[root@CentOS ~]$ jobs [root@CentOS ~]$ sleep 10 &
[1] 12454
[root@CentOS ~]$ sleep 20 & [2] 12479 [root@CentOS ~]$ jobs
[1]- Running sleep 10 &
[2]+ Running sleep 20 &
[cnetos@CentOS ~]$
ตอนนี้ขอนำงานแรกสู่เบื้องหน้า -
[root@CentOS ~]$ fg 1
sleep 10
หากคุณทำตามคุณจะสังเกตเห็นว่างานเบื้องหน้าติดอยู่ในเปลือกของคุณ ตอนนี้ให้นำกระบวนการเข้าสู่โหมดสลีปจากนั้นเปิดใช้งานอีกครั้งในพื้นหลัง
- กดปุ่มควบคุม + z
- พิมพ์: bg 1 ส่งงานแรกไปยังพื้นหลังและเริ่มงาน
[root@CentOS ~]$ fg 1 sleep 20 ^Z [1]+ Stopped sleep 20 [root@CentOS ~]$ bg 1
[1]+ sleep 20 &
[root@CentOS ~]$
nohup
เมื่อทำงานจากเชลล์หรือเทอร์มินัลเป็นที่น่าสังเกตว่าโดยค่าเริ่มต้นกระบวนการและงานทั้งหมดที่แนบมากับเชลล์จะสิ้นสุดลงเมื่อปิดเชลล์หรือผู้ใช้ออกจากระบบ เมื่อใช้nohupกระบวนการจะทำงานต่อไปหากผู้ใช้ออกจากระบบหรือปิดเชลล์ที่เชื่อมต่อกับกระบวนการ
[root@CentOS]# nohup ping www.google.com &
[1] 27299
nohup: ignoring input and appending output to ‘nohup.out’
[root@CentOS]# pgrep ping
27299
[root@CentOS]# kill -KILL `pgrep ping`
[1]+ Killed nohup ping www.google.com
[root@CentOS rdc]# cat nohup.out
PING www.google.com (216.58.193.68) 56(84) bytes of data.
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 1 ttl = 128
time = 51.6 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 2 ttl = 128
time = 54.2 ms
64 bytes from sea15s07-in-f4.1e100.net (216.58.193.68): icmp_seq = 3 ttl = 128
time = 52.7 ms
คำสั่ง ps
psคำสั่งมักใช้โดยผู้ดูแลระบบเพื่อตรวจสอบภาพรวมของกระบวนการเฉพาะ psมักใช้กับgrepเพื่อกรองกระบวนการเฉพาะเพื่อวิเคราะห์
[root@CentOS ~]$ ps axw | grep python
762 ? Ssl 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork -nopid
1296 ? Ssl 0:00 /usr/bin/python -Es /usr/sbin/tuned -l -P
15550 pts/0 S+ 0:00 grep --color=auto python
ในคำสั่งด้านบนเราจะเห็นกระบวนการทั้งหมดโดยใช้ตัวแปลpython รวมทั้งยังมีผลที่ได้คำสั่ง grep เรามองหาสตริงหลาม
ต่อไปนี้เป็นบรรทัดคำสั่งที่พบมากที่สุดสวิทช์ใช้กับPS
สวิตซ์ | หนังบู๊ |
---|---|
ก | ไม่รวมข้อ จำกัด เฉพาะกระบวนการรายงานสำหรับผู้ใช้ปัจจุบัน |
x | แสดงกระบวนการที่ไม่ได้แนบกับ tty หรือเชลล์ |
ว | จัดรูปแบบการแสดงผลแบบกว้างของเอาต์พุต |
จ | แสดงสภาพแวดล้อมหลังคำสั่ง |
-e | เลือกกระบวนการทั้งหมด |
-o | เอาต์พุตที่จัดรูปแบบโดยผู้ใช้กำหนด |
-ยู | แสดงกระบวนการทั้งหมดโดยผู้ใช้เฉพาะ |
-ค | แสดงกระบวนการทั้งหมดตามชื่อหรือรหัสกระบวนการ |
- เรียงลำดับ | จัดเรียงกระบวนการตามคำจำกัดความ |
หากต้องการดูกระบวนการทั้งหมดที่ใช้โดยผู้ใช้ที่ไม่มีใคร -
[root@CentOS ~]$ ps -u nobody PID TTY TIME CMD 1853 ? 00:00:00 dnsmasq [root@CentOS ~]$
หากต้องการดูข้อมูลทั้งหมดเกี่ยวกับกระบวนการfirewalld -
[root@CentOS ~]$ ps -wl -C firewalld F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 0 762 1 0 80 0 - 81786 poll_s ? 00:00:01 firewalld [root@CentOS ~]$
มาดูกันว่ากระบวนการใดใช้หน่วยความจำมากที่สุด -
[root@CentOS ~]$ ps aux --sort=-pmem | head -10 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND cnetos 6130 0.7 5.7 1344512 108364 ? Sl 02:16 0:29 /usr/bin/gnome-shell cnetos 6449 0.0 3.4 1375872 64440 ? Sl 02:16 0:00 /usr/libexec/evolution-calendar-factory root 5404 0.6 2.1 190256 39920 tty1 Ssl+ 02:15 0:27 /usr/bin/Xorg :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-iDefCt/database -seat seat0 -nolisten tcp vt1 cnetos 6296 0.0 1.7 1081944 32136 ? Sl 02:16 0:00 /usr/libexec/evolution/3.12/evolution-alarm-notify cnetos 6350 0.0 1.5 560728 29844 ? Sl 02:16 0:01 /usr/bin/prlsga cnetos 6158 0.0 1.4 1026956 28004 ? Sl 02:16 0:00 /usr/libexec/gnome-shell-calendar-server cnetos 6169 0.0 1.4 1120028 27576 ? Sl 02:16 0:00 /usr/libexec/evolution-source-registry root 762 0.0 1.4 327144 26724 ? Ssl 02:09 0:01 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid cnetos 6026 0.0 1.4 1090832 26376 ? Sl 02:16 0:00 /usr/libexec/gnome-settings-daemon [root@CentOS ~]$
ดูกระบวนการทั้งหมดตาม centos ผู้ใช้และรูปแบบโดยแสดงผลลัพธ์ที่กำหนดเอง -
[cnetos@CentOS ~]$ ps -u cnetos -o pid,uname,comm
PID USER COMMAND
5802 centos gnome-keyring-d
5812 cnetos gnome-session
5819 cnetos dbus-launch
5820 cnetos dbus-daemon
5888 cnetos gvfsd
5893 cnetos gvfsd-fuse
5980 cnetos ssh-agent
5996 cnetos at-spi-bus-laun
คำสั่ง pstree
pstreeคล้ายกับpsแต่ไม่ได้ใช้บ่อย จะแสดงกระบวนการในรูปแบบต้นไม้ที่เรียบง่าย
[centos@CentOS ~]$ pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─caribou───2*[{caribou}]
├─cgrulesengd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
เอาต์พุตทั้งหมดจากpstreeสามารถเกิน 100 บรรทัด โดยปกติแล้วpsจะให้ข้อมูลที่เป็นประโยชน์มากกว่า
คำสั่งด้านบน
topเป็นหนึ่งในคำสั่งที่ใช้บ่อยที่สุดเมื่อแก้ไขปัญหาด้านประสิทธิภาพใน Linux มีประโยชน์สำหรับสถิติแบบเรียลไทม์และการตรวจสอบกระบวนการใน Linux ต่อไปนี้เป็นเอาต์พุตเริ่มต้นของด้านบนเมื่อนำขึ้นมาจากบรรทัดคำสั่ง
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 2.0 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1879668 total, 177020 free, 607544 used, 1095104 buff/cache
KiB Swap: 3145724 total, 3145428 free, 296 used. 1034648 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5404 root 20 0 197832 48024 6744 S 1.3 2.6 1:13.22 Xorg
8013 centos 20 0 555316 23104 13140 S 1.0 1.2 0:14.89 gnome-terminal-
6339 centos 20 0 332336 6016 3248 S 0.3 0.3 0:23.71 prlcc
6351 centos 20 0 21044 1532 1292 S 0.3 0.1 0:02.66 prlshprof
ปุ่มลัดทั่วไปที่ใช้ในขณะที่ทำงานด้านบน ( ปุ่มลัดสามารถเข้าถึงได้โดยการกดปุ่มขณะที่ปุ่มบนกำลังทำงานอยู่ในเชลล์ของคุณ)
คำสั่ง | หนังบู๊ |
---|---|
ข | เปิด / ปิดการไฮไลต์ตัวหนาที่เมนูด้านบน |
z | เปลี่ยนรูปแบบสี |
ล | วนรอบหัวข้อค่าเฉลี่ยการโหลด |
ม | วนรอบส่วนหัวค่าเฉลี่ยหน่วยความจำ |
t | หัวข้อข้อมูลงาน |
ซ | เมนูช่วยเหลือ |
Shift + F | ปรับแต่งฟิลด์การเรียงลำดับและการแสดงผล |
ต่อไปนี้เป็นบรรทัดคำสั่งทั่วไปสวิทช์สำหรับด้านบน
คำสั่ง | หนังบู๊ |
---|---|
-o | จัดเรียงตามคอลัมน์ (สามารถนำหน้าด้วย - หรือ + เพื่อเรียงลำดับจากน้อยไปมากหรือมากไปหาน้อย) |
-ยู | แสดงเฉพาะกระบวนการจากผู้ใช้ที่ระบุ |
-d | อัปเดตเวลาล่าช้าด้านบน |
-O | ส่งคืนรายการคอลัมน์ที่ด้านบนสามารถใช้การเรียงลำดับ |
เรียงลำดับตัวเลือกหน้าจอด้านบนที่นำเสนอโดยใช้Shift + F หน้าจอนี้อนุญาตให้ปรับแต่งการแสดงผลด้านบนและตัวเลือกการจัดเรียง
Fields Management for window 1:Def, whose current sort field is %MEM
Navigate with Up/Dn, Right selects for move then <Enter> or Left commits,
'd' or <Space> toggles display, 's' sets sort. Use 'q' or <Esc> to end!
* PID = Process Id TGID = Thread Group Id
* USER = Effective User Name ENVIRON = Environment vars
* PR = Priority vMj = Major Faults delta
* NI = Nice Value vMn = Minor Faults delta
* VIRT = Virtual Image (KiB) USED = Res+Swap Size (KiB)
* RES = Resident Size (KiB) nsIPC = IPC namespace Inode
* SHR = Shared Memory (KiB) nsMNT = MNT namespace Inode
* S = Process Status nsNET = NET namespace Inode
* %CPU = CPU Usage nsPID = PID namespace Inode
* %MEM = Memory Usage (RES) nsUSER = USER namespace Inode
* TIME+ = CPU Time, hundredths nsUTS = UTS namespace Inode
* COMMAND = Command Name/Line
PPID = Parent Process pid
UID = Effective User Id
ด้านบนแสดงกระบวนการสำหรับผู้ใช้rdcและจัดเรียงตามการใช้งานหน่วยความจำ -
PID USER %MEM PR NI VIRT RES SHR S %CPU TIME+ COMMAND
6130 rdc 6.2 20 0 1349592 117160 33232 S 0.0 1:09.34 gnome-shell
6449 rdc 3.4 20 0 1375872 64428 21400 S 0.0 0:00.43 evolution-calen
6296 rdc 1.7 20 0 1081944 32140 22596 S 0.0 0:00.40 evolution-alarm
6350 rdc 1.6 20 0 560728 29844 4256 S 0.0 0:10.16 prlsga
6281 rdc 1.5 20 0 1027176 28808 17680 S 0.0 0:00.78 nautilus
6158 rdc 1.5 20 0 1026956 28004 19072 S 0.0 0:00.20 gnome-shell-cal
แสดงช่องบนสุดที่ถูกต้อง (ย่อ) -
[centos@CentOS ~]$ top -O
PID
PPID
UID
USER
RUID
RUSER
SUID
SUSER
GID
GROUP
PGRP
TTY
TPGID
ฆ่าคำสั่ง
killคำสั่งใช้เพื่อฆ่ากระบวนการจากเชลล์คำสั่งผ่าน PID เมื่อฆ่ากระบวนการเราจำเป็นต้องระบุสัญญาณที่จะส่ง สัญญาณช่วยให้เคอร์เนลรู้ว่าเราต้องการยุติกระบวนการอย่างไร สัญญาณที่ใช้บ่อยที่สุดคือ -
SIGTERMเป็นนัยว่าเคอร์เนลช่วยให้กระบวนการทราบว่าควรหยุดลงทันทีที่ทำได้อย่างปลอดภัย SIGTERMเปิดโอกาสให้กระบวนการออกอย่างสง่างามและดำเนินการออกอย่างปลอดภัย
SIGHUPภูตส่วนใหญ่จะรีสตาร์ทเมื่อส่งSIGHUP ซึ่งมักจะใช้กับกระบวนการเมื่อมีการเปลี่ยนแปลงไฟล์คอนฟิกูเรชัน
SIGKILLเนื่องจากSIGTERMเทียบเท่ากับการขอให้กระบวนการปิดระบบ เคอร์เนลต้องการตัวเลือกเพื่อยุติกระบวนการที่จะไม่เป็นไปตามคำขอ เมื่อกระบวนการหยุดทำงานตัวเลือกSIGKILLจะถูกใช้เพื่อปิดกระบวนการอย่างชัดเจน
สำหรับรายการปิดสัญญาณทั้งหมดที่สามารถส่งด้วยตัวเลือกkill the -lสามารถใช้ได้ -
[root@CentOS]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
[root@CentOS rdc]#
ใช้SIGHUPเพื่อรีสตาร์ทระบบ
[root@CentOS]# pgrep systemd
1
464
500
643
15071
[root@CentOS]# kill -HUP 1
[root@CentOS]# pgrep systemd
1
464
500
643
15196
15197
15198
[root@CentOS]#
pkillจะอนุญาตให้ผู้ดูแลระบบส่งสัญญาณฆ่าตามชื่อกระบวนการ
[root@CentOS]# pgrep ping
19450
[root@CentOS]# pkill -9 ping
[root@CentOS]# pgrep ping
[root@CentOS]#
killallจะฆ่ากระบวนการทั้งหมด ระวังการใช้killallเป็นรูทเพราะมันจะฆ่ากระบวนการทั้งหมดสำหรับผู้ใช้ทั้งหมด
[root@CentOS]# killall chrome
คำสั่งฟรี
freeเป็นคำสั่งง่ายๆที่มักใช้เพื่อตรวจสอบหน่วยความจำของระบบอย่างรวดเร็ว จะแสดงจำนวนหน่วยความจำฟิสิคัลและสลับที่ใช้ทั้งหมด
[root@CentOS]# free
total used free shared buff/cache available
Mem: 1879668 526284 699796 10304 653588 1141412
Swap: 3145724 0 3145724
[root@CentOS]#
คำสั่งที่ดี
niceจะอนุญาตให้ผู้ดูแลระบบสามารถกำหนดลำดับความสำคัญของการจัดกำหนดการของกระบวนการในแง่ของการใช้งาน CPU ความสวยงามเป็นพื้นฐานที่เคอร์เนลจะกำหนดเวลาส่วนของ CPU สำหรับกระบวนการหรืองาน โดยค่าเริ่มต้นถือว่ากระบวนการได้รับการเข้าถึงทรัพยากร CPU อย่างเท่าเทียมกัน
ขั้นแรกให้ใช้ด้านบนเพื่อตรวจสอบความสวยงามของกระบวนการที่กำลังทำงานอยู่
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
28 root 39 19 0 0 0 S 0.0 0.0 0:00.17 khugepaged
690 root 39 19 16808 1396 1164 S 0.0 0.1 0:00.01 alsactl]
9598 rdc 39 19 980596 21904 10284 S 0.0 1.2 0:00.27 tracker-extract
9599 rdc 39 19 469876 9608 6980 S 0.0 0.5 0:00.04 tracker-miner-a
9609 rdc 39 19 636528 13172 8044 S 0.0 0.7 0:00.12 tracker-miner-f
9611 rdc 39 19 469620 8984 6496 S 0.0 0.5 0:00.02 tracker-miner-u
27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
637 rtkit 21 1 164648 1276 1068 S 0.0 0.1 0:00.11 rtkit-daemon
1 root 20 0 128096 6712 3964 S 0.3 0.4 0:03.57 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.50 ksoftirqd/0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:02.07 rcu_sched
เราต้องการที่จะมุ่งเน้นไปที่NICEคอลัมน์บรรยายโดยNI ช่วงความสวยงามสามารถอยู่ระหว่าง -20 ถึงบวก 19. -20 หมายถึงลำดับความสำคัญสูงสุดที่กำหนด
nohup nice --20 ping www.google.com &
Renice
Reniceช่วยให้เราสามารถเปลี่ยนลำดับความสำคัญปัจจุบันของกระบวนการที่กำลังทำงานอยู่
renice 17 -p 30727
คำสั่งดังกล่าวจะลดลำดับความสำคัญของคำสั่งกระบวนการpingของเรา
firewalldเป็นตัวควบคุมส่วนหน้าเริ่มต้นสำหรับ iptables บน CentOS ส่วนหน้าของfirewalldมีข้อดีหลัก ๆ สองประการเหนือ iptables แบบดิบ -
ใช้ง่ายต่อการกำหนดค่าและใช้งานโซนนามธรรมโซ่และกฎ
ชุดกฎเป็นแบบไดนามิกซึ่งหมายความว่าการเชื่อมต่อแบบ stateful จะไม่มีการหยุดชะงักเมื่อมีการเปลี่ยนแปลงการตั้งค่าและ / หรือแก้ไข
อย่าลืมว่าfirewalldเป็นเครื่องห่อสำหรับ iptables - ไม่ใช่สิ่งทดแทน แม้ว่าคำสั่ง iptables ที่กำหนดเองสามารถใช้กับfirewalldได้ แต่ขอแนะนำให้ใช้ firewalld เพื่อไม่ให้การทำงานของไฟร์วอลล์เสียหาย
ขั้นแรกตรวจสอบให้แน่ใจว่าfirewalldได้เริ่มต้นและเปิดใช้งานแล้ว
[root@CentOS rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago
Docs: man:firewalld(1)
Main PID: 712 (firewalld)
Memory: 34.7M
CGroup: /system.slice/firewalld.service
└─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
เราจะเห็นว่า firewalld ทำงานอยู่ (เพื่อเริ่มการบูต) และกำลังทำงานอยู่ หากไม่มีการใช้งานหรือไม่ได้เริ่มใช้งานเราสามารถใช้ -
systemctl start firewalld && systemctl enable firewalld
ตอนนี้เราได้กำหนดค่าบริการ firewalld แล้วขอให้มั่นใจว่าใช้งานได้
[root@CentOS]# firewall-cmd --state
running
[root@CentOS]#
เราจะเห็นว่าบริการ firewalld ทำงานได้อย่างสมบูรณ์
Firewalld ทำงานบนแนวคิดของโซน โซนถูกนำไปใช้กับอินเทอร์เฟซเครือข่ายผ่าน Network Manager เราจะหารือเรื่องนี้ในการกำหนดค่าเครือข่าย แต่สำหรับตอนนี้โดยค่าเริ่มต้นการเปลี่ยนโซนเริ่มต้นจะเปลี่ยนอะแดปเตอร์เครือข่ายที่เหลืออยู่ในสถานะเริ่มต้นของ "Default Zone"
ลองมาดูอย่างรวดเร็วที่แต่ละโซนที่ออกมาของกล่องกับfirewalld
ซีเนียร์ | โซนและคำอธิบาย |
---|---|
1 | drop ระดับความน่าเชื่อถือต่ำ การเชื่อมต่อและแพ็กเก็ตขาเข้าทั้งหมดจะหลุดออกไปและมีเพียงการเชื่อมต่อขาออกเท่านั้นที่ทำได้ผ่าน statefullness |
2 | block การเชื่อมต่อที่เข้ามาจะได้รับการตอบกลับด้วยข้อความ icmp เพื่อแจ้งให้ผู้เริ่มทราบว่าคำขอเป็นสิ่งต้องห้าม |
3 | public เครือข่ายทั้งหมดถูก จำกัด อย่างไรก็ตามสามารถอนุญาตการเชื่อมต่อขาเข้าที่เลือกไว้อย่างชัดเจนได้ |
4 | external กำหนดค่า firewalld สำหรับ NAT เครือข่ายภายในยังคงเป็นส่วนตัว แต่สามารถเข้าถึงได้ |
5 | dmz อนุญาตเฉพาะการเชื่อมต่อขาเข้าบางรายการเท่านั้น ใช้สำหรับระบบที่แยก DMZ |
6 | work ตามค่าเริ่มต้นให้เชื่อถือคอมพิวเตอร์ในเครือข่ายมากขึ้นโดยถือว่าระบบอยู่ในสภาพแวดล้อมการทำงานที่ปลอดภัย |
7 | hone โดยค่าเริ่มต้นบริการอื่น ๆ จะไม่มีการกรอง สมมติว่าระบบอยู่บนเครือข่ายภายในบ้านที่จะใช้บริการเช่น NFS, SAMBA และ SSDP |
8 | trusted ทุกเครื่องในเครือข่ายได้รับความเชื่อถือ การเชื่อมต่อขาเข้าส่วนใหญ่ได้รับอนุญาตThis is not meant for interfaces exposed to the Internet |
โซนที่ใช้บ่อยที่สุด ได้แก่ สาธารณะสถานที่ทำงานและที่บ้าน
สถานการณ์บางอย่างที่จะใช้แต่ละโซนร่วมกันคือ -
public- เป็นโซนที่ผู้ดูแลระบบใช้บ่อยที่สุด จะช่วยให้คุณใช้การตั้งค่าแบบกำหนดเองและปฏิบัติตามข้อกำหนด RFC สำหรับการดำเนินการบน LAN
drop- ตัวอย่างที่ดีในการใช้ drop คือในการประชุมด้านความปลอดภัยบน WiFi สาธารณะหรือบนอินเทอร์เฟซที่เชื่อมต่อกับอินเทอร์เน็ตโดยตรง drop ถือว่าคำขอที่ไม่ได้ร้องขอทั้งหมดเป็นอันตรายรวมถึงโพรบ ICMP ดังนั้นคำขอใด ๆ ที่ไม่อยู่ในสถานะจะไม่ได้รับการตอบกลับ ข้อเสียของการลดลงคือสามารถทำลายฟังก์ชันการทำงานของแอปพลิเคชันในบางสถานการณ์ที่ต้องปฏิบัติตามข้อกำหนด RFC อย่างเข้มงวด
work- คุณอยู่ใน LAN ขององค์กรแบบกึ่งปลอดภัย ในกรณีที่การจราจรทั้งหมดสามารถสันนิษฐานได้ว่าปลอดภัยในระดับปานกลาง ซึ่งหมายความว่าไม่ใช่ WiFi และเราอาจมี IDS, IPS และความปลอดภัยทางกายภาพหรือ 802.1x เราควรทำความคุ้นเคยกับคนที่ใช้ LAN ด้วย
home- คุณใช้ LAN ที่บ้าน คุณเป็นผู้รับผิดชอบส่วนตัวสำหรับทุกระบบและผู้ใช้บน LAN คุณรู้จักทุกเครื่องบน LAN และไม่มีใครถูกบุกรุก บ่อยครั้งที่บริการใหม่ ๆ ถูกนำมาใช้เพื่อการแบ่งปันสื่อระหว่างบุคคลที่เชื่อถือได้และคุณไม่จำเป็นต้องใช้เวลาเพิ่มเพื่อความปลอดภัย
โซนและอินเทอร์เฟซเครือข่ายทำงานในระดับหนึ่งถึงหลายระดับ อินเทอร์เฟซเครือข่ายเดียวสามารถมีโซนเดียวที่ใช้กับมันได้ในแต่ละครั้ง ในขณะที่โซนสามารถใช้กับอินเทอร์เฟซจำนวนมากพร้อมกันได้
มาดูกันว่ามีโซนอะไรบ้างและโซนที่ใช้อยู่ตอนนี้มีอะไรบ้าง
[root@CentOS]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
พร้อมที่จะเพิ่มกฎที่กำหนดเองใน firewalld แล้วหรือยัง?
ก่อนอื่นมาดูกันว่ากล่องของเรามีหน้าตาเป็นอย่างไรสำหรับพอร์ตสแกนเนอร์จากภายนอก
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00046s latency).
Not shown: 1023 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds
bash-3.2#
อนุญาตให้คำขอขาเข้าพอร์ต 80
ขั้นแรกตรวจสอบเพื่อดูว่าโซนใดถูกใช้เป็นค่าเริ่มต้น
[root@CentOs]# firewall-cmd --get-default-zone
public
[root@CentOS]#
จากนั้นตั้งกฎอนุญาตให้พอร์ต 80 เป็นโซนเริ่มต้นปัจจุบัน
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp
success
[root@CentOS]#
ตอนนี้เรามาทำเครื่องหมายที่ช่องของเราหลังจากอนุญาตการเชื่อมต่อพอร์ต 80
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00053s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
bash-3.2#
ขณะนี้อนุญาตให้มีการรับส่งข้อมูลที่ไม่พึงประสงค์ถึง 80
ขอนำโซนเริ่มต้นที่จะลดลงและดูสิ่งที่เกิดขึ้นกับพอร์ตการสแกน
[root@CentOS]# firewall-cmd --set-default-zone=drop
success
[root@CentOS]# firewall-cmd --get-default-zone
drop
[root@CentOs]#
ตอนนี้มาสแกนโฮสต์ด้วยอินเทอร์เฟซเครือข่ายในโซนที่ปลอดภัยยิ่งขึ้น
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00094s latency).
All 1024 scanned ports on centos.shared (10.211.55.1) are filtered
Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds
bash-3.2#
ตอนนี้ทุกอย่างถูกกรองจากภายนอก
แสดงให้เห็นด้านล่างโฮสต์จะไม่ได้ตอบสนองต่อการร้องขอ ping ICMP เมื่ออยู่ในลดลง
bash-3.2# ping 10.211.55.1
PING 10.211.55.1 (10.211.55.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
มาตั้งค่าโซนเริ่มต้นเป็นสาธารณะอีกครั้ง
[root@CentOs]# firewall-cmd --set-default-zone=public
success
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
ตอนนี้ขอตรวจสอบ ruleset กรองของเราในปัจจุบันในที่สาธารณะ
[root@CentOS]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
[root@CentOS rdc]#
ตามที่กำหนดค่าไว้กฎตัวกรองพอร์ต 80 ของเราจะอยู่ภายในบริบทของการกำหนดค่าที่กำลังทำงานอยู่เท่านั้น ซึ่งหมายความว่าเมื่อรีบูตระบบหรือรีสตาร์ทบริการ firewalld กฎของเราจะถูกยกเลิก
เราจะกำหนดค่าhttpd daemon เร็ว ๆ นี้ดังนั้นเรามาทำการเปลี่ยนแปลงอย่างต่อเนื่อง -
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@CentOS]# systemctl restart firewalld
[root@CentOS]#
ตอนนี้กฎพอร์ต 80 ของเราในโซนสาธารณะยังคงอยู่ตลอดทั้งการรีบูตและการรีสตาร์ทบริการ
ต่อไปนี้เป็นคำสั่ง firewalld ทั่วไปนำไปใช้กับไฟร์วอลล์ cmd
คำสั่ง | หนังบู๊ |
---|---|
ไฟร์วอลล์ -cmd - รับโซน | แสดงรายการโซนทั้งหมดที่สามารถใช้กับอินเทอร์เฟซ |
firewall-cmd - สถานะ | ส่งคืนสถานะปัจจุบันของบริการ firewalld |
ไฟร์วอลล์ cmd - รับเริ่มต้นโซน | รับโซนเริ่มต้นปัจจุบัน |
ไฟร์วอลล์ -cmd --set-default-zone = <zone> | ตั้งค่าโซนเริ่มต้นในบริบทปัจจุบัน |
ไฟร์วอลล์ cmd - รับที่ใช้งานโซน | รับโซนปัจจุบันในบริบทตามที่ใช้กับอินเทอร์เฟซ |
ไฟร์วอลล์ -cmd --zone = <zone> - รายการทั้งหมด | แสดงรายการการกำหนดค่าของโซนที่ให้มา |
firewall-cmd --zone = <zone> --addport = <port / transport protocol> | ใช้กฎพอร์ตกับตัวกรองโซน |
--ถาวร | ทำการเปลี่ยนแปลงโซนอย่างต่อเนื่อง แฟล็กถูกใช้แบบอินไลน์กับคำสั่งแก้ไข |
เหล่านี้เป็นแนวคิดพื้นฐานของการบริหารและการกำหนดค่าfirewalld
การกำหนดค่าบริการไฟร์วอลล์บนโฮสต์ใน CentOS อาจเป็นงานที่ซับซ้อนในสถานการณ์ระบบเครือข่ายที่ซับซ้อนมากขึ้น การใช้งานและการกำหนดค่าขั้นสูงของfirewalldและ iptables ใน CentOS สามารถดูบทช่วยสอนทั้งหมดได้ อย่างไรก็ตามเราได้นำเสนอพื้นฐานที่น่าจะเพียงพอสำหรับการทำงานส่วนใหญ่ประจำวัน
PHP เป็นหนึ่งในภาษาเว็บที่มีการใช้งานมากที่สุดในปัจจุบัน การติดตั้งLAMP Stack บน CentOS เป็นสิ่งที่ผู้ดูแลระบบทุกคนจะต้องดำเนินการซึ่งมักจะเร็วกว่าในภายหลัง
LAMP Stack แบบดั้งเดิมประกอบด้วย (L) inux (A) pache (M) ySQL (P) HP
LAMP Stackบน CentOS มีส่วนประกอบหลักอยู่สามองค์ประกอบ-
- เว็บเซิร์ฟเวอร์
- แพลตฟอร์ม / ภาษาการพัฒนาเว็บ
- เซิร์ฟเวอร์ฐานข้อมูล
Note- คำว่าLAMP Stackยังสามารถรวมเทคโนโลยีต่อไปนี้: PostgreSQL, MariaDB, Perl, Python, Ruby, NGINX Webserver
สำหรับบทช่วยสอนนี้เราจะยึดติดกับLAMP Stackแบบดั้งเดิมของ CentOS GNU Linux: เว็บเซิร์ฟเวอร์ Apache, เซิร์ฟเวอร์ฐานข้อมูล MySQL และ PHP
เราจะใช้ MariaDB จริงๆ ไฟล์คอนฟิกูเรชันฐานข้อมูลและตาราง MySQL นั้นโปร่งใสสำหรับ MariaDB ขณะนี้ MariaDB รวมอยู่ในที่เก็บ CentOS มาตรฐานแทน MySQL เนื่องจากข้อ จำกัด ของการออกใบอนุญาตและการปฏิบัติตามโอเพนซอร์สเนื่องจาก Oracle ได้เข้ามาพัฒนา MySQL
สิ่งแรกที่เราต้องทำคือติดตั้ง Apache
[root@CentOS]# yum install httpd
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
extras/7/x86_64/primary_d
| 121 kB 00:00:00
Loading mirror speeds from cached hostfile
* base: mirror.sigmanet.com
* extras: linux.mirrors.es.net
* updates: mirror.eboundhost.com
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-45.el7.centos will be installed
--> Processing Dependency: httpd-tools = 2.4.6-45.el7.centos for package:
httpd-2.4.6-45.el7.centos.x86_64
--> Processing Dependency: /etc/mime.types for package: httpd-2.4.645.el7.centos.x86_64
--> Running transaction check
---> Package httpd-tools.x86_64 0:2.4.6-45.el7.centos will be installed
---> Package mailcap.noarch 0:2.1.41-2.el7 will be installed
--> Finished Dependency Resolution
Installed:
httpd.x86_64 0:2.4.6-45.el7.centos
Dependency Installed:
httpd-tools.x86_64 0:2.4.6-45.el7.centos
mailcap.noarch 0:2.1.41-2.el7
Complete!
[root@CentOS]#
มากำหนดค่าบริการhttpd
[root@CentOS]# systemctl start httpd && systemctl enable httpd
ตอนนี้ตรวจสอบให้แน่ใจว่าเว็บเซิร์ฟเวอร์สามารถเข้าถึงได้ผ่าน firewalld
bash-3.2# nmap -sS -p 1-1024 -T 5 -sV 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-28 02:00 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00054s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1 (protocol 2.0)
80/tcp open http Apache httpd 2.4.6 ((CentOS))
Service detection performed. Please report any incorrect results at
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.82 seconds bash-3.2#
ดังที่คุณเห็นโดยโพรบบริการ nmap เว็บเซิร์ฟเวอร์ Apache กำลังรับฟังและตอบสนองคำขอบนโฮสต์ CentOS
ติดตั้งเซิร์ฟเวอร์ฐานข้อมูล MySQL
[root@CentOS rdc]# yum install mariadb-server.x86_64 && yum install mariadb-
devel.x86_64 && mariadb.x86_64 && mariadb-libs.x86_64
เรากำลังติดตั้งแพ็คเกจที่เก็บต่อไปนี้สำหรับ MariaDB -
mariadb-server.x86_64
แพ็กเกจ MariaDB Server daemon หลัก
mariadb-devel.x86_64
ไฟล์ต้องคอมไพล์จากต้นทางที่เข้ากันได้กับ MySQL / MariaDB
mariadb.x86_64
โปรแกรมอรรถประโยชน์ไคลเอนต์ MariaDB สำหรับการจัดการเซิร์ฟเวอร์ MariaDB จากบรรทัดคำสั่ง
mariadb-libs.x86_64
ไลบรารีทั่วไปสำหรับ MariaDB ที่จำเป็นสำหรับแอปพลิเคชันอื่น ๆ ที่คอมไพล์ด้วยการสนับสนุน MySQL / MariaDB
ตอนนี้มาเริ่มและเปิดใช้งานบริการ MariaDB
[root@CentOS]# systemctl start mariadb
[root@CentOS]# systemctl enable mariadb
Note- ไม่เหมือนกับ Apache เราจะไม่เปิดใช้งานการเชื่อมต่อกับ MariaDB ผ่านไฟร์วอลล์ที่ใช้โฮสต์ (firewalld) เมื่อใช้เซิร์ฟเวอร์ฐานข้อมูลถือเป็นแนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุดในการอนุญาตการเชื่อมต่อซ็อกเก็ตภายในเท่านั้นเว้นแต่จำเป็นต้องใช้การเข้าถึงซ็อกเก็ตระยะไกลโดยเฉพาะ
ตรวจสอบให้แน่ใจว่าเซิร์ฟเวอร์ MariaDB ยอมรับการเชื่อมต่อ
[root@CentOS#] netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
[root@CentOS rdc]#
อย่างที่เราเห็น MariaDB กำลังฟังบนพอร์ต 3306 tcp เราจะปล่อยให้ไฟร์วอลล์ที่ใช้โฮสต์ (firewalld) บล็อกการเชื่อมต่อขาเข้าไปยังพอร์ต 3306
ติดตั้งและกำหนดค่า PHP
[root@CentOS#] yum install php.x86_64 && php-common.x86_64 && php-mysql.x86_64
&& php-mysqlnd.x86_64 && php-pdo.x86_64 && php-soap.x86_64 && php-xml.x86_64
ฉันขอแนะนำให้ติดตั้งแพ็คเกจ php ต่อไปนี้เพื่อความเข้ากันได้ทั่วไป -
- php-common.x86_64
- php-mysql.x86_64
- php-mysqlnd.x86_64
- php-pdo.x86_64
- php-soap.x86_64
- php-xml.x86_64
[root@CentOS]# yum install -y php-common.x86_64 php-mysql.x86_64 php-
mysqlnd.x86_64 php-pdo.x86_64 php-soap.x86_64 php-xml.x86_64
นี่คือไฟล์ php ง่ายๆของเราที่อยู่ใน Apache webroot ของ / var / www / html /
[root@CentOS]# cat /var/www/html/index.php
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
<?php
echo "We are now running PHP on GNU Centos Linux!<br />"
?>
</body>
</html>
[root@CentOS]#
มาเปลี่ยนกลุ่มการเป็นเจ้าของเพจของเราเป็นผู้ใช้ระบบ http daemon ของเรากำลังทำงานอยู่
[root@CentOS]# chgrp httpd /var/www/html/index.php && chmod g+rx /var/www/html/index.php
---
เมื่อร้องขอด้วยตนเองผ่าน ncat
bash-3.2# ncat 10.211.55.1 80
GET / index.php
HTTP/1.1 200 OK
Date: Sat, 28 Jan 2017 12:06:02 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Content-Length: 137
Connection: close
Content-Type: text/html; charset=UTF-8
<html>
<head>
<title>PHP Test Page</title>
</head>
<body>
PHP Install
We are now running PHP on GNU Centos Linux!<br />
</body>
</html>
bash-3.2#
PHP และ LAMP เป็นเทคโนโลยีการเขียนโปรแกรมบนเว็บที่ได้รับความนิยมมาก การติดตั้งและการกำหนดค่า LAMP จะปรากฏในรายการความต้องการของคุณในฐานะผู้ดูแลระบบ CentOS แพคเกจ CentOS ที่ใช้งานง่ายได้รับงานจำนวนมากจากการรวบรวม Apache, MySQL และ PHP จากซอร์สโค้ด
Python เป็นภาษาตีความที่ใช้กันอย่างแพร่หลายซึ่งนำความเป็นมืออาชีพมาสู่โลกของแอปพลิเคชันที่เขียนโค้ดบน Linux (และระบบปฏิบัติการอื่น ๆ ) ในกรณีที่ Perl เคยเป็นมาตรฐานอุตสาหกรรม Python ได้แซงหน้า Perl หลายประการ
จุดแข็งบางประการของ Python กับ Perl คือ -
ความก้าวหน้าอย่างรวดเร็วในการปรับแต่ง
ไลบรารีที่เป็นมาตรฐานของภาษา
ความสามารถในการอ่านของรหัสถูกคิดออกในนิยามภาษา
เฟรมเวิร์กระดับมืออาชีพมากมายสำหรับทุกสิ่งตั้งแต่การสนับสนุน GUI ไปจนถึงการพัฒนาเว็บ
Python สามารถทำอะไรก็ได้ที่ Perl ทำได้และในหลาย ๆ กรณีก็จะดีกว่า แม้ว่า Perl จะยังคงอยู่ในกล่องเครื่องมือของผู้ดูแลระบบ Linux แต่การเรียนรู้ Python เป็นตัวเลือกที่ยอดเยี่ยมสำหรับชุดทักษะ
ข้อเสียที่ใหญ่ที่สุดของ Python บางครั้งเกี่ยวข้องกับจุดแข็ง ในประวัติศาสตร์เดิม Python ถูกออกแบบมาเพื่อสอนการเขียนโปรแกรม ในบางครั้งรากฐานหลักของ "อ่านได้ง่าย" และ "ทำในสิ่งที่ถูกต้อง" อาจทำให้เกิดความซับซ้อนที่ไม่จำเป็นเมื่อเขียนโค้ดง่ายๆ นอกจากนี้ไลบรารีมาตรฐานยังทำให้เกิดปัญหาในการเปลี่ยนจากเวอร์ชัน 2.X เป็น 3.X
สคริปต์ Python ถูกใช้ที่แกนกลางของ CentOS สำหรับฟังก์ชันที่มีความสำคัญต่อการทำงานของระบบปฏิบัติการ ด้วยเหตุนี้การแยกสภาพแวดล้อม Python การพัฒนาของเราออกจากสภาพแวดล้อม Python หลักของ CentOS จึงเป็นสิ่งสำคัญ
สำหรับผู้เริ่มต้นปัจจุบัน Python มีสองเวอร์ชัน: Python 2.X และ Python 3.X.
ทั้งสองขั้นตอนยังคงอยู่ในระหว่างการผลิตแม้ว่าเวอร์ชัน 2.X จะปิดตัวลงอย่างรวดเร็วด้วยค่าเสื่อมราคา (และเป็นเวลาสองสามปีแล้ว) สาเหตุของ Python สองเวอร์ชันที่ใช้งานอยู่นั้นโดยพื้นฐานแล้วจะแก้ไขข้อบกพร่องของเวอร์ชัน 2.X. สิ่งนี้จำเป็นต้องมีฟังก์ชันหลักบางอย่างของเวอร์ชัน 3.X เพื่อทำใหม่ในรูปแบบที่ไม่รองรับสคริปต์เวอร์ชัน 2.X บางเวอร์ชัน
โดยทั่วไปวิธีที่ดีที่สุดในการเอาชนะการเปลี่ยนแปลงนี้คือ: พัฒนาสำหรับ 3.X และติดตามเวอร์ชัน 2.X ล่าสุดสำหรับสคริปต์ดั้งเดิม ปัจจุบัน CentOS 7.X อาศัยการแก้ไขกึ่งปัจจุบันของเวอร์ชัน 2.X.
ในการเขียนนี้ Python เวอร์ชันล่าสุดคือ: 3.4.6 และ 2.7.13.
อย่าปล่อยให้สิ่งนี้สับสนหรือหาข้อสรุปของ Python การตั้งค่าสภาพแวดล้อม Python นั้นค่อนข้างง่าย ด้วยเฟรมเวิร์กและไลบรารีของ Python งานนี้ทำได้ง่ายมาก
ก่อนตั้งค่าสภาพแวดล้อม Python เราจำเป็นต้องมีสภาพแวดล้อมที่ดี ในการเริ่มต้นตรวจสอบให้แน่ใจว่าการติดตั้ง CentOS ของเราได้รับการอัปเดตอย่างสมบูรณ์และได้รับการติดตั้งระบบสาธารณูปโภคบางอย่าง
Step 1 - อัปเดต CentOS
[root@CentOS]# yum -y update
Step 2 - ติดตั้งสร้างสาธารณูปโภค
[root@CentOS]# yum -y groupinstall "development tools"
Step 3 - ติดตั้งแพ็คเกจที่จำเป็นบางอย่าง
[root@CentOS]# yum install -y zlib-dev openssl-devel sqlite-devel bip2-devel
ตอนนี้เราต้องติดตั้ง Python 2.X และ 3.X ปัจจุบันจากซอร์ส
- ดาวน์โหลดไฟล์เก็บถาวรที่บีบอัด
- แตกไฟล์
- รวบรวมซอร์สโค้ด
เริ่มต้นด้วยการสร้างไดเร็กทอรี build สำหรับการติดตั้ง Python ใน/ usr / src /
[root@CentOS]# mkdir -p /usr/src/pythonSource
ตอนนี้ให้ดาวน์โหลด tarballs ต้นทางสำหรับแต่ละรายการ -
[root@CentOS]# wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
[root@CentOS]# wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
ตอนนี้เราจำเป็นต้องแยกแต่ละไฟล์ออกจากที่เก็บถาวร
Step 1 - ติดตั้ง xz-libs และแยก tarballs
[root@CentOS]# yum install xz-libs
[root@CentOS python3]# xz -d ./*.xz
[root@CentOS python3]# ls
Python-2.7.13.tar Python-3.6.0.tar
[root@CentOS python3]#
Step 2 - ถอนการติดตั้งแต่ละตัวจาก tarball
[root@CentOS]# tar -xvf ./Python-2.7.13.tar
[root@CentOS]# tar -xvf ./Python-3.6.0.tar
Step 3 - ป้อนแต่ละไดเรกทอรีและเรียกใช้สคริปต์กำหนดค่า
[root@CentOS]# ./configure --prefix=/usr/local
root@CentOS]# make altinstall
Note - อย่าลืมใช้ altinstallและไม่ติดตั้ง สิ่งนี้จะแยก CentOS และ Python เวอร์ชันพัฒนาออกจากกัน มิฉะนั้นคุณอาจทำลายการทำงานของ CentOS
ตอนนี้คุณจะเห็นกระบวนการรวบรวมเริ่มต้นขึ้น หยิบกาแฟสักแก้วแล้วพักสัก 15 นาทีจนเสร็จ เนื่องจากเราได้ติดตั้งการอ้างอิงที่จำเป็นทั้งหมดสำหรับ Python กระบวนการคอมไพล์จึงควรเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด
ตรวจสอบให้แน่ใจว่าเราได้ติดตั้ง Python เวอร์ชัน 2.X ล่าสุดแล้ว
[root@CentOS Python-2.7.13]# /usr/local/bin/python2.7 -V
Python 2.7.13
[root@CentOS Python-2.7.13]#
Note - คุณจะต้องนำหน้าบรรทัด shebang ที่ชี้ไปที่สภาพแวดล้อมการพัฒนาของเราสำหรับ Python 2.X
[root@CentOS Python-2.7.13]# cat ver.py
#!/usr/local/bin/python2.7
import sys
print(sys.version)
[root@CentOS Python-2.7.13]# ./ver.py
2.7.13 (default, Jan 29 2017, 02:24:08)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
เช่นเดียวกับที่เรามีการติดตั้ง Python แยกต่างหากสำหรับเวอร์ชัน 2.X และ 3.X จากที่นี่เราสามารถใช้แต่ละรายการและยูทิลิตี้เช่นpip และ virtualenv เพื่อลดภาระในการจัดการสภาพแวดล้อม Python และการติดตั้งแพ็คเกจ
Ruby เป็นภาษาที่ยอดเยี่ยมสำหรับทั้งการพัฒนาเว็บและการดูแลระบบ Linux Ruby ให้ประโยชน์มากมายที่พบในภาษาก่อนหน้าทั้งหมดที่กล่าวถึง: PHP, Python และ Perl
ในการติดตั้ง Ruby ควรบูตผ่านrbenvซึ่งช่วยให้ผู้ดูแลระบบสามารถติดตั้งและจัดการ Ruby En Environmentได้อย่างง่ายดาย
วิธีอื่นในการติดตั้ง Ruby คือแพ็คเกจ CentOS มาตรฐานสำหรับ Ruby ขอแนะนำให้ใช้วิธีrbenvพร้อมประโยชน์ทั้งหมด แพ็คเกจ CentOS จะง่ายขึ้นสำหรับผู้ที่ไม่เข้าใจ Ruby
ก่อนอื่นมารับการอ้างอิงที่จำเป็นสำหรับตัวติดตั้ง rbenv
- git-core
- zlib
- zlib-devel
- gcc-c++
- patch
- readline
- readline-devel
- libyaml-devel
- libffi-devel
- openssl-devel
- make
- bzzip2
- autoconf
- automake
- libtool
- bison
- curl
- sqlite-devel
แพ็คเกจเหล่านี้ส่วนใหญ่อาจได้รับการติดตั้งแล้วทั้งนี้ขึ้นอยู่กับตัวเลือกและบทบาทที่เลือกเมื่อติดตั้ง CentOS เป็นการดีที่จะติดตั้งทุกสิ่งที่เราไม่แน่ใจเนื่องจากอาจทำให้ปวดหัวน้อยลงเมื่อติดตั้งแพ็คเกจที่ต้องพึ่งพา
[root@CentOS]# yum -y install git-core zlib zlib-devel gcc-c++ patch readline
readline-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf
automake libtool bison curl sqlite-devel
วิธีที่ 1: rbenv สำหรับสภาพแวดล้อมการพัฒนา Dynamic Ruby
ตอนนี้ในฐานะผู้ใช้ที่จะใช้Ruby -
[rdc@CentOS ~]$ git clone https://github.com/rbenv/rbenv.git
[rdc@CentOS ~]$ https://github.com/rbenv/ruby-build.git
Ruby-build จะให้คุณสมบัติการติดตั้งแก่rbenv -
Note- เราจำเป็นต้องเปลี่ยนไปใช้ root หรือผู้ดูแลระบบก่อนที่จะรันinstall.sh
[rdc@CentOS ruby-build]$ cd ~/ruby-build
[rdc@CentOS ruby-build]# ./install.sh
มาตั้งค่าเชลล์ของเราสำหรับ rbenv และมั่นใจว่าเราได้ติดตั้งตัวเลือกที่ถูกต้องแล้ว
[rdc@CentOS ~]$ source ~/rbenv/rbenv.d/exec/gem-rehash.bash [rdc@CentOS ruby-build]$ ~/rbenv/bin/rbenv
rbenv 1.1.0-2-g4f8925a
Usage: rbenv <command> [<args>]
คำสั่ง rbenv ที่มีประโยชน์คือ -
คำสั่ง | หนังบู๊ |
---|---|
ท้องถิ่น | ตั้งค่าหรือแสดงเวอร์ชัน Ruby เฉพาะแอปพลิเคชันภายในเครื่อง |
ทั่วโลก | ตั้งค่าหรือแสดงเวอร์ชัน Ruby ส่วนกลาง |
เปลือก | ตั้งค่าหรือแสดงเวอร์ชัน Ruby เฉพาะเชลล์ |
ติดตั้ง | ติดตั้งเวอร์ชัน Ruby โดยใช้ Ruby-build |
ถอนการติดตั้ง | ถอนการติดตั้ง Ruby เวอร์ชันเฉพาะ |
rehash | rehashes rbenv shims (เรียกใช้สิ่งนี้หลังจากติดตั้งไฟล์ปฏิบัติการ) |
รุ่น | แสดงเวอร์ชัน Ruby ปัจจุบันและที่มา |
เวอร์ชัน | แสดงรายการเวอร์ชัน Ruby ทั้งหมดที่มีให้สำหรับ rbenv |
ที่ | แสดงพา ธ แบบเต็มไปยังไฟล์ปฏิบัติการ |
ไหน | แสดงรายการเวอร์ชัน Ruby ทั้งหมดที่มีไฟล์ปฏิบัติการที่กำหนด |
มาติดตั้ง Ruby กันเถอะ -
[rdc@CentOS bin]$ ~/rbenv/bin/rbenv install -v 2.2.1
หลังจากการคอมไพล์เสร็จสิ้น -
[rdc@CentOS ~]$ ./ruby -v
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
[rdc@CentOS ~]$
ขณะนี้เรามีสภาพแวดล้อม Ruby ที่ใช้งานได้พร้อมด้วยเวอร์ชันปรับปรุงและใช้งานได้ของสาขา Ruby 2.X
วิธีที่ 2: ติดตั้ง Ruby จาก CentOS Packages
นี่เป็นวิธีการที่ง่ายที่สุด อย่างไรก็ตามอาจถูก จำกัด ด้วยเวอร์ชันและอัญมณีที่บรรจุจาก CentOS สำหรับการพัฒนาอย่างจริงจังขอแนะนำให้ใช้วิธีrbenvเพื่อติดตั้ง Ruby
ติดตั้ง Ruby แพ็คเกจการพัฒนาที่จำเป็นและอัญมณีทั่วไปบางส่วน
[root@CentOS rdc]# yum install -y ruby.x86_64 ruby-devel.x86_64 ruby-
libs.x86_64 ruby-gem-json.x86_64 rubygem-rake.noarch
น่าเสียดายที่เราเหลือ Ruby เวอร์ชันที่ค่อนข้างล้าสมัย
[root@CentOS rdc]# ruby -v
ruby 2.0.0p648 (2015-12-16) [x86_64-linux]
[root@CentOS rdc]#
Perlมีมานานแล้ว เดิมได้รับการออกแบบให้เป็นภาษารายงานที่ใช้สำหรับการแยกวิเคราะห์ไฟล์ข้อความ ด้วยความนิยมที่เพิ่มขึ้น Perl ได้เพิ่มการรองรับโมดูลหรือ CPAN ซ็อกเก็ตเธรดและคุณสมบัติอื่น ๆ ที่จำเป็นในภาษาสคริปต์ที่มีประสิทธิภาพ
ข้อได้เปรียบที่ใหญ่ที่สุดของ Perl เหนือ PHP, Python หรือ Ruby คือมันทำให้สิ่งต่างๆสำเร็จลุล่วงโดยไม่ยุ่งยาก ปรัชญาของ Perl นี้ไม่ได้หมายความว่าจะทำสิ่งต่างๆให้ถูกต้องเสมอไป อย่างไรก็ตามสำหรับงานการดูแลระบบบน Linux นั้น Perl ถือเป็นตัวเลือก go-to สำหรับภาษาสคริปต์
ข้อดีบางประการของ Perl เหนือ Python หรือ Ruby คือ -
การประมวลผลข้อความที่มีประสิทธิภาพ
Perl ทำให้การเขียนสคริปต์รวดเร็วและสกปรก (โดยปกติสคริปต์ Perl จะสั้นกว่าที่เทียบเท่าใน Python หรือ Ruby หลายสิบบรรทัด)
Perl สามารถทำอะไรก็ได้ (เกือบ)
ข้อเสียบางประการของ Perl คือ -
ไวยากรณ์อาจทำให้สับสนได้
รูปแบบการเข้ารหัสใน Perl อาจเป็นเอกลักษณ์และขัดขวางการทำงานร่วมกัน
Perl ไม่ใช่ Object Oriented จริงๆ
โดยทั่วไปแล้วไม่มีความคิดมากมายที่นำไปสู่การกำหนดมาตรฐานและแนวทางปฏิบัติที่ดีที่สุดเมื่อใช้ Perl
เมื่อตัดสินใจว่าจะใช้ Perl, Python หรือ PHP; ควรถามคำถามต่อไปนี้ -
- แอปพลิเคชันนี้จะต้องมีการกำหนดเวอร์ชันหรือไม่?
- บุคคลอื่นจะต้องแก้ไขโค้ดหรือไม่
- บุคคลอื่นจะต้องใช้แอปพลิเคชันนี้หรือไม่?
- แอปพลิเคชันนี้จะใช้กับเครื่องอื่นหรือสถาปัตยกรรม CPU หรือไม่
หากคำตอบทั้งหมดข้างต้นคือ "ไม่" Perl เป็นตัวเลือกที่ดีและอาจเร่งความเร็วในแง่ของผลลัพธ์สุดท้าย
จากที่กล่าวมาเรามากำหนดค่าเซิร์ฟเวอร์ CentOS ของเราให้ใช้ Perl เวอร์ชันล่าสุด
ก่อนติดตั้ง Perl เราต้องเข้าใจการรองรับ Perl อย่างเป็นทางการ Perl ได้รับการสนับสนุนเมื่อเทียบกับเวอร์ชันเสถียรสองเวอร์ชันล่าสุดเท่านั้น ดังนั้นเราจึงต้องการให้สภาพแวดล้อมการพัฒนาของเราแยกออกจากเวอร์ชัน CentOS
เหตุผลในการแยกคือ: หากมีคนเผยแพร่เครื่องมือใน Perl ไปยังชุมชน CentOS มากกว่าที่จะมีการปรับเปลี่ยนให้ทำงานกับ Perl ตามที่มาพร้อมกับ CentOS อย่างไรก็ตามเรายังต้องการให้มีการติดตั้งเวอร์ชันล่าสุดเพื่อวัตถุประสงค์ในการพัฒนา เช่นเดียวกับ Python CentOS จัดส่ง Perl ที่เน้นความน่าเชื่อถือและไม่ล้ำสมัย
มาตรวจสอบเวอร์ชันปัจจุบันของ Perl บน CentOS 7 กัน
[root@CentOS]# perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
ขณะนี้เรากำลังเรียกใช้ Perl 5.16.3 เวอร์ชันล่าสุด ณ การเขียนนี้คือ: perl-5.24.0
เราต้องการอัพเกรดเวอร์ชันของเราอย่างแน่นอนโดยสามารถใช้โมดูล Perl ที่ทันสมัยในโค้ดของเราได้ โชคดีที่มีเครื่องมือที่ยอดเยี่ยมในการรักษาสภาพแวดล้อม Perl และแยก Perl เวอร์ชัน CentOS ของเราออกไป มันถูกเรียกว่าperlbrew.
มาติดตั้ง Perl Brew กันเถอะ
[root@CentOS]# curl -L https://install.perlbrew.pl | bash
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 170 100 170 0 0 396 0 --:--:-- --:--:-- --:--:-- 397
100 1247 100 1247 0 0 1929 0 --:--:-- --:--:-- --:--:-- 1929
ตอนนี้เราได้ติดตั้ง Perl Brew แล้วเรามาสร้างสภาพแวดล้อมสำหรับ Perl เวอร์ชันล่าสุดกัน
ขั้นแรกเราจะต้องใช้ Perl เวอร์ชันที่ติดตั้งในปัจจุบันเพื่อบูตสแตรปการติดตั้ง perlbrew ดังนั้นเรามารับโมดูล Perl ที่จำเป็นจากที่เก็บ CentOS
Note - เมื่อพร้อมใช้งานเรามักต้องการใช้โมดูล CentOS Perl เทียบกับ CPAN ด้วยการติดตั้ง CentOS Perl ของเรา
Step 1 - ติดตั้งโมดูล CentOS Perl Make :: Maker
[root@CentOS]# yum -y install perl-ExtUtils-MakeMaker.noarch
Step 2 - ติดตั้ง perl เวอร์ชันล่าสุด
[root@CentOS build]# source ~/perl5/perlbrew/etc/bashrc
[root@CentOS build]# perlbrew install -n -j4 --threads perl-5.24.1
ตัวเลือกที่เราเลือกสำหรับการติดตั้ง Perl ของเราคือ -
n - ไม่มีการทดสอบ
j4 - รันเธรด 4 เธรดแบบขนานสำหรับรูทีนการติดตั้ง (เราใช้ซีพียูควอดคอร์)
threads - เปิดใช้งานการสนับสนุนเธรดสำหรับ Perl
หลังจากดำเนินการติดตั้งสำเร็จแล้วให้เปลี่ยนไปใช้สภาพแวดล้อม Perl ใหม่ล่าสุดของเรา
[root@CentOS]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
A sub-shell is launched with perl-5.24.1 as the activated perl. Run 'exit' to finish it.
[root@CentOS]# perl -v
This is perl 5, version 24, subversion 1 (v5.24.1) built for x86_64-linuxthread-multi
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2017, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the GNU General
Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on this system
using "man perl" or "perldoc perl". If you have access to the Internet, point your
browser at http://www.perl.org/, the Perl Home Page.
[root@CentOS]#
เวอร์ชัน perl การพิมพ์สคริปต์ perl อย่างง่ายที่ทำงานภายในบริบทของสภาพแวดล้อม perlbrew ของเรา -
[root@CentOS]# cat ./ver.pl
#!/usr/bin/perl
print $^V . "\n";
[root@CentOS]# perl ./ver.pl
v5.24.1
[root@CentOS]#
เมื่อติดตั้ง perl แล้วเราสามารถโหลดโมดูล cpan ด้วย cpanm ของ perl brew -
[root@CentOS]# perl-brew install-cpanm
ตอนนี้เรามาใช้โปรแกรมติดตั้งcpanmเพื่อสร้างโมดูล LWP ด้วย Perl เวอร์ชัน 5.24.1 ในเวอร์ชันปัจจุบันของเรา
Step 1 - เปลี่ยนไปใช้บริบทของเวอร์ชัน Perl ปัจจุบันของเรา
[root@CentOS ~]# ~/perl5/perlbrew/bin/perlbrew use perl-5.24.1
เชลล์ย่อยถูกเรียกใช้ด้วย perl-5.24.1 เป็น perl ที่เปิดใช้งาน เรียกใช้ 'exit' เพื่อเสร็จสิ้น
[root@CentOS ~]#
Step 2 - ติดตั้ง LWP User Agent Perl Module
[root@CentOS ~]# ~/perl5/perlbrew/bin/cpanm -i LWP::UserAgent
Step 3 - ตอนนี้เรามาทดสอบสภาพแวดล้อม Perl ของเราด้วยโมดูล CPAN ใหม่
[root@CentOS ~]# cat ./get_header.pl
#!/usr/bin/perl
use LWP;
my $browser = LWP::UserAgent->new(); my $response = $browser->get("http://www.slcc.edu/"); unless(!$response->is_success) {
print $response->header("Server");
}
[root@CentOS ~]# perl ./get_header.pl
Microsoft-IIS/8.5 [root@CentOS ~]#
มีแล้ว! Perl Brew ทำให้การแยกสภาพแวดล้อม Perl เป็นเรื่องง่ายและถือได้ว่าเป็นแนวทางปฏิบัติที่ดีที่สุดเมื่อสิ่งต่างๆได้รับจาก Perl
LDAP รู้จักกันในชื่อ Light Weight Directory Access Protocolเป็นโปรโตคอลที่ใช้สำหรับเข้าถึงคอนเทนเนอร์บริการ X.500 ภายในองค์กรที่รู้จักจากไดเร็กทอรี ผู้ที่คุ้นเคยกับการดูแลระบบเซิร์ฟเวอร์ Windows สามารถคิดว่า LDAP มีลักษณะคล้ายกับ Active Directory มาก มันเป็นแนวคิดที่ใช้กันอย่างแพร่หลายในการรวมเวิร์กสเตชัน Windows เข้ากับองค์กร OpenLDAP CentOS ในสเปกตรัมอื่น ๆ เวิร์กสเตชัน CentOS Linux สามารถแบ่งปันทรัพยากรและเข้าร่วมกับฟังก์ชันพื้นฐานในโดเมน Windows
การปรับใช้ LDAP บน CentOS เป็น Directory Server Agent, Directory System Agent หรือ DSA (คำย่อเหล่านี้เป็นคำเดียวกันทั้งหมด) คล้ายกับการติดตั้ง Novell Netware รุ่นเก่าโดยใช้โครงสร้าง Directory Tree กับ NDS
ประวัติโดยย่อของ LDAP
โดยพื้นฐานแล้ว LDAP ถูกสร้างขึ้นเพื่อเป็นวิธีที่มีประสิทธิภาพในการเข้าถึงไดเรกทอรี X.500 ด้วยทรัพยากรขององค์กร ทั้ง X.500 และ LDAP มีลักษณะเหมือนกันและคล้ายคลึงกันมากจนไคลเอนต์ LDAP สามารถเข้าถึงไดเร็กทอรี X.500 ด้วยตัวช่วยบางอย่าง ในขณะที่ LDAP ยังมีไดเร็กทอรีเซิร์ฟเวอร์ของตัวเองที่เรียกว่าslapd. ความแตกต่างหลักระหว่างLDAPและDAPคือรุ่นที่มีน้ำหนักเบาได้รับการออกแบบมาเพื่อทำงานผ่าน TCP
ในขณะที่DAPใช้ OSI Model แบบเต็ม ด้วยการถือกำเนิดของอินเทอร์เน็ต TCP / IP และความโดดเด่นของอีเทอร์เน็ตในเครือข่ายในปัจจุบันจึงเป็นเรื่องยากที่จะพบกับการปลูกถ่าย Directory Services โดยใช้ไดเร็กทอรีองค์กรทั้ง DAP และเนทีฟ X.500 นอกรูปแบบการประมวลผลแบบเดิม
ส่วนประกอบหลักที่ใช้กับ openldap สำหรับ CentOS Linux ได้แก่ -
openldap | ไลบรารีสนับสนุน LDAP |
---|---|
openldap เซิร์ฟเวอร์ | เซิร์ฟเวอร์ LDAP |
openldap ไคลเอนต์ | การใช้งานไคลเอ็นต์ LDAP |
openldap-devel | ไลบรารีการพัฒนาสำหรับ OpenLDAP |
compay-openldap | ไลบรารีที่ใช้ร่วมกันของ OpenLDAP |
ตบ | ไดเร็กทอรีเซิร์ฟเวอร์ daemon ของ OpenLDAP |
slurpd | ใช้สำหรับการจำลองแบบ LDAP ข้ามโดเมนขององค์กร |
Note - เมื่อตั้งชื่อองค์กรของคุณเป็นแนวทางปฏิบัติที่ดีที่สุดในการใช้ไฟล์ .localTLD. การใช้. netหรือ. comอาจทำให้เกิดปัญหาในการแยกโครงสร้างพื้นฐานโดเมนออนไลน์และภายใน ลองจินตนาการถึงงานพิเศษสำหรับ บริษัท ภายในโดยใช้acme.comสำหรับการดำเนินงานทั้งภายนอกและภายใน ดังนั้นจึงสามารถจะฉลาดที่จะมีทรัพยากรอินเทอร์เน็ตที่เรียกว่าacme.comหรือacme.net จากนั้นทรัพยากรขององค์กรเครือข่ายท้องถิ่นเป็นภาพที่acme.local สิ่งนี้จะนำไปสู่การกำหนดค่าระเบียน DNS แต่จะจ่ายด้วยความเรียบง่ายคมคายและความปลอดภัย
ติดตั้ง Open LDAP บน CentOS
ติดตั้ง OpenLDAP, OpenLDAP-เซิร์ฟเวอร์ OpenLDAP-ลูกค้าและ migrationstools จากYUM
[root@localhost]# yum -y install openldap openldap-servers openldap-clients
migration tools
Loaded plugins: fastestmirror, langpacks
updates
| 3.4 kB 00:00:00
updates/7/x86_64/primary_db
| 2.2 MB 00:00:05
Determining fastest mirrors
(1/2): extras/7/x86_64/primary_db
| 121 kB 00:00:01
(2/2): base/7/x86_64/primary_db
| 5.6 MB 00:00:16
Package openldap-2.4.40-13.el7.x86_64 already installed and latest version
Resolving Dependencies
--> Running transaction check
---> Package openldap-clients.x86_64 0:2.4.40-13.el7 will be installed
---> Package openldap-servers.x86_64 0:2.4.40-13.el7 will be installed
--> Finished Dependency Resolution
base/7/x86_64/group_gz
| 155 kB 00:00:00
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
openldap-clients x86_64
2.4.40-13.el7 base 188 k
openldap-servers x86_64
2.4.40-13.el7 base 2.1 M
Transaction Summary
===============================================================================
===============================================================================
Install 2 Packages
Total download size: 2.3 M
Installed size: 5.3 M
Downloading packages:
Installed:
openldap-clients.x86_64 0:2.4.40-13.el7
openldap-servers.x86_64 0:2.4.40-13.el7
Complete!
[root@localhost]#
ตอนนี้ขอเริ่มต้นและเปิดใช้งานslapdบริการ -
[root@centos]# systemctl start slapd
[root@centos]# systemctl enable slapd
ณ จุดนี้ขอให้มั่นใจว่าเรามีของเราOpenLDAPโครงสร้างใน/ etc / OpenLDAP
root@localhost]# ls /etc/openldap/
certs check_password.conf ldap.conf schema slapd.d
[root@localhost]#
จากนั้นตรวจสอบให้แน่ใจว่าบริการตบของเรากำลังทำงานอยู่
root@centos]# netstat -antup | grep slapd
tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1641/slapd
tcp6 0 0 :::389 :::* LISTEN 1641/slapd
[root@centos]#
ต่อไปมากำหนดค่าการติดตั้งOpen LDAPของเรา
ตรวจสอบให้แน่ใจว่าได้สร้างผู้ใช้ldapระบบของเราแล้ว
[root@localhost]# id ldap
uid=55(ldap) gid=55(ldap) groups=55(ldap)
[root@localhost]#
สร้างข้อมูลรับรอง LDAP ของเรา
[root@localhost]# slappasswd
New password:
Re-enter new password:
{SSHA}20RSyjVv6S6r43DFPeJgASDLlLoSU8g.a10
[root@localhost]#
เราจำเป็นต้องบันทึกผลลัพธ์จาก slappasswd
กำหนดค่า Open LDAP
Step 1 - กำหนดค่า LDAP สำหรับโดเมนและเพิ่มผู้ดูแลระบบ
ขั้นแรกเราต้องการตั้งค่าสภาพแวดล้อม openLDAP ของเรา ต่อไปนี้เป็นเทมเพลตที่จะใช้กับคำสั่งldapmodify
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
dn: olcDatabase = {2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: <output from slap
ทำการเปลี่ยนแปลงกับ: /etc/openldap/slapd.d/cn=config/olcDatabase = {1} monitor.ldif ด้วยคำสั่ง ldapmodify
[root@localhost]# ldapmodify -Y EXTERNAL -H ldapi:/// -f /home/rdc/Documents/db.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
modifying entry "olcDatabase = {2}hdb,cn=config"
[root@localhost cn=config]#
ลองตรวจสอบการกำหนดค่า LDAP ที่แก้ไข
root@linux1 ~]# vi /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif
[root@centos]# cat /etc/openldap/slapd.d/cn\=config/olcDatabase\=\{2\}hdb.ldif
# AUTO-GENERATED FILE - DO NOT EDIT!! Use ldapmodify.
# CRC32 a163f14c
dn: olcDatabase = {2}hdb
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
structuralObjectClass: olcHdbConfig
entryUUID: 1bd9aa2a-8516-1036-934b-f7eac1189139
creatorsName: cn=config
createTimestamp: 20170212022422Z
olcSuffix: dc=vmnet,dc=local
olcRootDN: cn=ldapadm,dc=vmnet,dc=local
olcRootPW:: e1NTSEF1bUVyb1VzZTRjc2dkYVdGaDY0T0k =
entryCSN: 20170215204423.726622Z#000000#000#000000
modifiersName: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
modifyTimestamp: 20170215204423Z
[root@centos]#
อย่างที่คุณเห็นการปรับเปลี่ยนองค์กร LDAP ของเราประสบความสำเร็จ
ต่อไปเราต้องการสร้างใบรับรอง ssl ที่ลงนามด้วยตนเองสำหรับ OpenLDAP สิ่งนี้จะรักษาความปลอดภัยในการสื่อสารระหว่างเซิร์ฟเวอร์ขององค์กรและไคลเอนต์
Step 2 - สร้างใบรับรองที่ลงนามด้วยตนเองสำหรับ OpenLDAP
เราจะใช้opensslเพื่อสร้างใบรับรอง ssl ที่ลงนามด้วยตนเอง ไปที่บทถัดไปCreate LDAP SSL Certificate with opensslสำหรับคำแนะนำในการรักษาความปลอดภัยการสื่อสารด้วย OpenLDAP จากนั้นเมื่อกำหนดค่าใบรับรอง ssl เราจะดำเนินการกำหนดค่าองค์กร OpenLDAP ของเราให้เสร็จสิ้น
Step 3 - กำหนดค่า OpenLDAP เพื่อใช้การสื่อสารที่ปลอดภัยพร้อมใบรับรอง
สร้างไฟล์certs.ldif เป็นกลุ่มด้วยข้อมูลต่อไปนี้ -
dn: cn=config
changetype: modify
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/openldap/certs/yourGeneratedCertFile.pem
dn: cn=config
changetype: modify
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/openldap/certs/youGeneratedKeyFile.pem
จากนั้นอีกครั้งใช้คำสั่งldapmodifyเพื่อรวมการเปลี่ยนแปลงลงในคอนฟิกูเรชัน OpenLDAP
[root@centos rdc]# ldapmodify -Y EXTERNAL -H ldapi:/// -f certs.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber = 0+uidNumber = 0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
[root@centos]#
สุดท้ายมาทดสอบการกำหนดค่า OpenLADP ของเรา
[root@centos]# slaptest -u
config file testing succeeded
[root@centos]#
Step 4 - ตั้งค่าฐานข้อมูลตบ
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG &&
chown ldap:ldap /var/lib/ldap/*
อัปเดตสคีมา OpenLDAP
เพิ่มสกีมาโคไซน์และ nis LDAP
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
สุดท้ายสร้างสคีมาขององค์กรและเพิ่มในการกำหนดค่า OpenLDAP ปัจจุบัน
ต่อไปนี้เป็นโดเมนที่เรียกว่า vmnet ท้องถิ่นกับ LDAP ผู้ดูแลระบบที่เรียกว่าldapadm
dn: dc=vmnet,dc=local
dc: vmnet
objectClass: top
objectClass: domain
dn: cn=ldapadm ,dc=vmnet,dc=local
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
dn: ou = People,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: People
dn: ou = Group,dc=vmnet,dc=local
objectClass: organizationalUnit
ou: Group
สุดท้ายนำเข้าสิ่งนี้ในสคีมา OpenLDAP ปัจจุบัน
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f ./base.ldif
Enter LDAP Password:
adding new entry "dc=vmnet,dc=local"
adding new entry "cn=ldapadm ,dc=vmnet,dc=local"
adding new entry "ou=People,dc=vmnet,dc=local"
adding new entry "ou=Group,dc=vmnet,dc=local"
[root@centos]#
Step 5 - ตั้งค่าผู้ใช้ OpenLDAP Enterprise
เปิดกลุ่มหรือโปรแกรมแก้ไขข้อความที่คุณชื่นชอบและคัดลอกรูปแบบต่อไปนี้ นี่คือการตั้งค่าสำหรับผู้ใช้ชื่อ "entacct" บนโดเมน LDAP "vmnet.local"
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
ตอนนี้นำเข้าไฟล์ด้านบนตามที่บันทึกไว้ลงใน OpenLdap Schema
[root@centos]# ldapadd -x -W -D "cn=ldapadm,dc=vmnet,dc=local" -f entuser.ldif
Enter LDAP Password:
adding new entry "uid=entacct,ou=People,dc=vmnet,dc=local"
[root@centos]#
ก่อนที่ผู้ใช้จะสามารถเข้าถึง LDAP Enterprise ได้เราจำเป็นต้องกำหนดรหัสผ่านดังนี้ -
ldappasswd -s password123 -W -D "cn=ldapadm,dc=entacct,dc=local" -x "uid=entacct
,ou=People,dc=vmnet,dc=local"
-s ระบุรหัสผ่านสำหรับผู้ใช้
-x คือชื่อผู้ใช้ที่จะใช้รหัสผ่านที่อัปเดต
-D คือ * ชื่อเฉพาะ "เพื่อพิสูจน์ตัวตนกับสคีมาของ LDAP
สุดท้ายก่อนเข้าสู่ระบบบัญชี Enterprise ให้ตรวจสอบรายการOpenLDAPของเรา
[root@centos rdc]# ldapsearch -x cn=entacct -b dc=vmnet,dc=local
# extended LDIF
#
# LDAPv3
# base <dc=vmnet,dc=local> with scope subtree
# filter: cn=entacct
# requesting: ALL
#
# entacct, People, vmnet.local
dn: uid=entacct,ou=People,dc=vmnet,dc=local
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: entacct
uid: entacct
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/enyacct
loginShell: /bin/bash
gecos: Enterprise User Account 001
userPassword:: e2NyeXB0fXg=
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
การแปลงสิ่งต่างๆเช่น/ etc / passwdและ/ etc / groupsเป็นการพิสูจน์ตัวตน OpenLDAP จำเป็นต้องใช้เครื่องมือการย้ายข้อมูล สิ่งเหล่านี้รวมอยู่ในแพ็คเกจmigrationtools จากนั้นติดตั้งลงใน/ usr / share / migrationtools
[root@centos openldap-servers]# ls -l /usr/share/migrationtools/
total 128
-rwxr-xr-x. 1 root root 2652 Jun 9 2014 migrate_aliases.pl
-rwxr-xr-x. 1 root root 2950 Jun 9 2014 migrate_all_netinfo_offline.sh
-rwxr-xr-x. 1 root root 2946 Jun 9 2014 migrate_all_netinfo_online.sh
-rwxr-xr-x. 1 root root 3011 Jun 9 2014 migrate_all_nis_offline.sh
-rwxr-xr-x. 1 root root 3006 Jun 9 2014 migrate_all_nis_online.sh
-rwxr-xr-x. 1 root root 3164 Jun 9 2014 migrate_all_nisplus_offline.sh
-rwxr-xr-x. 1 root root 3146 Jun 9 2014 migrate_all_nisplus_online.sh
-rwxr-xr-x. 1 root root 5267 Jun 9 2014 migrate_all_offline.sh
-rwxr-xr-x. 1 root root 7468 Jun 9 2014 migrate_all_online.sh
-rwxr-xr-x. 1 root root 3278 Jun 9 2014 migrate_automount.pl
-rwxr-xr-x. 1 root root 2608 Jun 9 2014 migrate_base.pl
Step 6 - ในที่สุดเราต้องอนุญาตให้เข้าถึงบริการแบบตบเพื่อให้สามารถร้องขอบริการได้
firewall-cmd --permanent --add-service=ldap
firewall-cmd --reload
กำหนดค่าการเข้าถึงไคลเอ็นต์ LDAP
การกำหนดค่าการเข้าถึงไคลเอ็นต์ LDAP ต้องการแพ็กเกจต่อไปนี้บนไคลเอ็นต์: openldap ไคลเอ็นต์ open-ldap และ nss_ldap
การกำหนดค่าการพิสูจน์ตัวตน LDAP สำหรับระบบไคลเอ็นต์นั้นง่ายกว่าเล็กน้อย
Step 1 - ติดตั้ง packeges ขึ้นอยู่กับ -
# yum install -y openldap-clients nss-pam-ldapd
Step 2- การกำหนดค่าการรับรองความถูกต้องกับ LDAP authconfig
authconfig --enableldap --enableldapauth --ldapserver=10.25.0.1 --
ldapbasedn="dc=vmnet,dc=local" --enablemkhomedir --update
Step 3 - เริ่มบริการ nslcd ใหม่
systemctl restart nslcd
พื้นหลัง TLS และ SSL
TLS เป็นมาตรฐานใหม่สำหรับการรักษาความปลอดภัยของเลเยอร์ซ็อกเก็ตโดยใช้ SSL TLS นำเสนอมาตรฐานการเข้ารหัสที่ดีขึ้นพร้อมด้วยคุณสมบัติด้านความปลอดภัยและโปรโตคอลห่อหุ้มอื่น ๆ ที่รองรับ SSL บ่อยครั้งคำว่า TLS และ SSL ใช้แทนกันได้ อย่างไรก็ตามในฐานะผู้ดูแลระบบ CentOS มืออาชีพสิ่งสำคัญคือต้องสังเกตความแตกต่างและประวัติที่แยกจากกัน
SSLขึ้นไปเป็นเวอร์ชัน 3.0 SSL ได้รับการพัฒนาและส่งเสริมให้เป็นมาตรฐานอุตสาหกรรมภายใต้ Netscape หลังจาก AOL ซื้อ Netscape (ISP ที่ได้รับความนิยมในยุค 90 หรือที่เรียกว่า America Online) AOL ไม่เคยส่งเสริมการเปลี่ยนแปลงที่จำเป็นสำหรับการปรับปรุงความปลอดภัยของ SSL
ในเวอร์ชัน 3.1 SSLเทคโนโลยีย้ายเข้าไปอยู่ในมาตรฐานระบบเปิดและก็เปลี่ยนไปTLS เนื่องจากAOL ยังคงเป็นเจ้าของลิขสิทธิ์SSLจึงมีการบัญญัติศัพท์ใหม่:TLS - Transport Layer Security. จึงเป็นสิ่งสำคัญที่จะยอมรับว่าTLSในความเป็นจริงที่แตกต่างจากSSL โดยเฉพาะอย่างยิ่งเนื่องจากเทคโนโลยีSSLรุ่นเก่าทราบปัญหาด้านความปลอดภัยและบางส่วนถือว่าล้าสมัยในปัจจุบัน
Note- บทช่วยสอนนี้จะใช้คำว่าTLSเมื่อพูดถึงเทคโนโลยี 3.1 และสูงกว่า จากนั้นSSLเมื่อแสดงความคิดเห็นเฉพาะกับเทคโนโลยี SSL 3.0 และต่ำกว่า
SSL เทียบกับ TLS Versioning
ตารางต่อไปนี้แสดงให้เห็นว่าการกำหนดเวอร์ชัน TLS และ SSL เกี่ยวข้องกันอย่างไร ฉันเคยได้ยินคนไม่กี่คนพูดถึงSSLเวอร์ชัน 3.2 อย่างไรก็ตามพวกเขาอาจได้คำศัพท์จากการอ่านบล็อก ในฐานะผู้ดูแลระบบมืออาชีพเราต้องการใช้คำศัพท์มาตรฐานเสมอ ดังนั้นในขณะที่พูดSSLควรอ้างอิงถึงเทคโนโลยีในอดีต สิ่งง่ายๆสามารถทำให้ผู้หางาน CentOS ดูเหมือน CS Major ที่ช่ำชอง
TLS | SSL |
---|---|
- | 3.0 |
1.0 | 3.1 |
1.1 | 3.2 |
1.2 | 3.3 |
TLSทำหน้าที่หลักสองอย่างที่สำคัญต่อผู้ใช้อินเทอร์เน็ตในปัจจุบัน: หนึ่งคือการตรวจสอบว่าใครเป็นคู่กรณีหรือที่เรียกว่าauthentication. สองข้อเสนอend-to-end encryption ที่เลเยอร์การขนส่งสำหรับโปรโตคอลระดับบนที่ไม่มีคุณลักษณะดั้งเดิมนี้ (ftp, http, โปรโตคอลอีเมลและอื่น ๆ )
ขั้นแรกให้ตรวจสอบว่าใครเป็นคู่กรณีและมีความสำคัญต่อการรักษาความปลอดภัยเป็นการเข้ารหัสจากต้นทางถึงปลายทาง หากผู้บริโภคมีการเชื่อมต่อที่เข้ารหัสไปยังเว็บไซต์ที่ไม่ได้รับอนุญาตให้รับการชำระเงินข้อมูลทางการเงินยังคงมีความเสี่ยง นี่คือสิ่งที่ทุกไซต์ฟิชชิงจะไม่มี:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.
มีเพียงสองวิธีในการหลีกเลี่ยงการไม่มีใบรับรองที่ลงนามอย่างถูกต้อง: หลอกให้ผู้ใช้ให้ความไว้วางใจเว็บเบราว์เซอร์สำหรับใบรับรองที่ลงนามด้วยตนเองหรือหวังว่าผู้ใช้จะไม่เข้าใจเทคโนโลยีและจะไม่รู้ถึงความสำคัญของใบรับรองที่เชื่อถือได้ ผู้มีอำนาจ (หรือ CA)
ในบทแนะนำนี้เราจะใช้สิ่งที่เรียกว่าใบรับรองที่ลงนามด้วยตนเอง ซึ่งหมายความว่าหากไม่ให้ใบรับรองนี้มีสถานะเชื่อถือได้อย่างชัดเจนในทุกเว็บเบราว์เซอร์ที่เข้าเยี่ยมชมเว็บไซต์ข้อผิดพลาดจะแสดงขึ้นเพื่อไม่ให้ผู้ใช้เข้าเยี่ยมชมไซต์ จากนั้นจะทำให้ผู้ใช้ก้าวกระโดดด้วยการดำเนินการบางอย่างก่อนที่จะเข้าถึงไซต์ที่มีใบรับรองที่ลงนามด้วยตนเอง โปรดจำไว้ว่าเพื่อความปลอดภัยนี่เป็นสิ่งที่ดี
ติดตั้งและกำหนดค่า openssl
opensslเป็นมาตรฐานสำหรับการใช้งาน TLS แบบโอเพนซอร์ส opensslใช้กับระบบต่างๆเช่น Linux, BSD distribution, OS X และยังรองรับ Windows
openssl มีความสำคัญเนื่องจากมีการรักษาความปลอดภัยชั้นการขนส่งและสรุปการเขียนโปรแกรมโดยละเอียดของการพิสูจน์ตัวตนและการเข้ารหัสจากต้นทางถึงปลายทางสำหรับนักพัฒนา นี่คือเหตุผลที่ openssl ใช้กับเกือบทุกแอปพลิเคชันโอเพนซอร์สที่ใช้ TLS นอกจากนี้ยังได้รับการติดตั้งตามค่าเริ่มต้นใน Linux ทุกเวอร์ชันที่ทันสมัย
ตามค่าเริ่มต้นควรติดตั้งopensslบน CentOS ตั้งแต่เวอร์ชัน 5 ขึ้นไปเป็นอย่างน้อย เพื่อความมั่นใจลองติดตั้งopensslผ่าน YUM เพียงแค่เรียกใช้การติดตั้งเนื่องจาก YUM ฉลาดพอที่จะแจ้งให้เราทราบว่ามีการติดตั้งแพ็กเกจแล้วหรือยัง หากเราใช้ CentOS เวอร์ชันเก่ากว่าด้วยเหตุผลด้านความเข้ากันได้การติดตั้ง yum -yจะช่วยให้มั่นใจได้ว่า openssl ได้รับการอัปเดตจากช่องโหว่ Heart-bleed ที่ผ่านมา
เมื่อเรียกใช้โปรแกรมติดตั้งพบว่ามีการอัปเดตเป็นopensslจริง
[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Updating:
openssl x86_64
1:1.0.1e-60.el7_3.1 updates 713 k
Updating for dependencies:
สร้างใบรับรองที่ลงนามด้วยตนเองสำหรับ OpenLDAP
นี่เป็นวิธีการสร้างการลงนามด้วยตนเองสำหรับการติดตั้งOpenLDAPก่อนหน้าของเรา
เพื่อสร้างใบรับรอง OpenLDAP ที่ลงนามด้วยตนเอง
openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365
[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem
-keyout /etc/openldap/certs/vmnet.pem -days 365
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#
ตอนนี้ใบรับรอง OpenLDAP ของเราควรอยู่ใน/ etc / openldap / certs /
[root@centos]# ls /etc/openldap/certs/*.pem
/etc/openldap/certs/vmnetcert.pem /etc/openldap/certs/vmnetkey.pem
[root@centos]#
ในขณะที่คุณสามารถดูเรามีทั้งใบรับรองและคีย์ติดตั้งใน/ etc / OpenLDAP / ใบรับรอง /ไดเรกทอรี สุดท้ายเราจำเป็นต้องเปลี่ยนการอนุญาตให้กับแต่ละสิทธิ์เนื่องจากปัจจุบันเป็นของผู้ใช้รูท
[root@centos]# chown -R ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#
สร้างใบรับรองที่ลงนามด้วยตนเองสำหรับ Apache Web Server
ในบทช่วยสอนนี้เราจะถือว่า Apache ได้รับการติดตั้งแล้ว เราได้ติดตั้ง Apache ในบทช่วยสอนอื่น (กำหนดค่า CentOS Firewall) และจะเข้าสู่การติดตั้ง Apache ขั้นสูงสำหรับบทช่วยสอนในอนาคต ดังนั้นหากคุณยังไม่ได้ติดตั้ง Apache โปรดปฏิบัติตาม
เมื่อสามารถติดตั้ง Apache HTTPd ได้ตามขั้นตอนต่อไปนี้ -
Step 1 - ติดตั้ง mod_ssl สำหรับเซิร์ฟเวอร์ Apache httpd
ก่อนอื่นเราต้องกำหนดค่า Apache ด้วย mod_ssl การใช้ตัวจัดการแพ็คเกจ YUM มันค่อนข้างง่าย -
[root@centos]# yum -y install mod_ssl
จากนั้นโหลด Apache daemon ของคุณใหม่เพื่อให้แน่ใจว่า Apache ใช้การกำหนดค่าใหม่
[root@centos]# systemctl reload httpd
ณ จุดนี้ Apache ได้รับการกำหนดค่าให้รองรับการเชื่อมต่อ TLS บนโลคัลโฮสต์
Step 2 - สร้างใบรับรอง ssl ที่ลงนามด้วยตนเอง
ขั้นแรกให้กำหนดค่าไดเรกทอรีคีย์ TLS ส่วนตัวของเรา
[root@centos]# mkdir /etc/ssl/private
[root@centos]# chmod 700 /etc/ssl/private/
Note- ตรวจสอบให้แน่ใจว่าเฉพาะรูทเท่านั้นที่มีสิทธิ์เข้าถึงไดเร็กทอรีนี้แบบอ่าน / เขียน ด้วยการเข้าถึงการอ่าน / เขียนทั่วโลกคุณสามารถใช้คีย์ส่วนตัวของคุณเพื่อถอดรหัสการรับส่งข้อมูลที่ดมกลิ่นได้
การสร้างใบรับรองและไฟล์คีย์
[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:
[root@centos]#
Note - คุณสามารถใช้ที่อยู่ IP สาธารณะของเซิร์ฟเวอร์ได้หากคุณไม่มีชื่อโดเมนที่จดทะเบียน
ลองดูใบรับรองของเรา -
[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Validity
Not Before: Feb 24 07:07:55 2017 GMT
Not After : Feb 24 07:07:55 2018 GMT
Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42:
7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:
นี่คือคำอธิบายสำหรับแต่ละตัวเลือกที่เราใช้กับคำสั่งopenssl -
คำสั่ง | หนังบู๊ |
---|---|
ข้อกำหนด -X509 | ใช้มาตรฐาน X.509 CSR management PKI สำหรับการจัดการคีย์ |
- โหนด | อย่ารักษาใบรับรองของเราด้วยข้อความรหัสผ่าน Apache ต้องสามารถใช้ใบรับรองได้โดยไม่มีการหยุดชะงักของข้อความรหัสผ่าน |
- วันที่ 2555 | บอกอายุการใช้งานของใบรับรองเป็น 7 ปีหรือ 2555 วัน ช่วงเวลาสามารถปรับเปลี่ยนได้ตามต้องการ |
- คีย์ใหม่ rsa: 2048 | ระบุเพื่อสร้างทั้งคีย์และใบรับรองโดยใช้ RSA ที่ความยาว 2048 บิต |
ต่อไปเราต้องการสร้างกลุ่ม Diffie-Heliman สำหรับเจรจา PFS กับลูกค้า
[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
การดำเนินการนี้จะใช้เวลา 5 ถึง 15 นาที
Perfect Forward Secrecy- ใช้เพื่อรักษาความปลอดภัยข้อมูลเซสชันในกรณีที่คีย์ส่วนตัวถูกบุกรุก สิ่งนี้จะสร้างคีย์ที่ใช้ระหว่างไคลเอนต์และเซิร์ฟเวอร์ที่ไม่ซ้ำกันสำหรับแต่ละเซสชัน
ตอนนี้เพิ่มการกำหนดค่า Perfect Forward Secrecy ในใบรับรองของเรา
[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt
กำหนดค่า Apache เพื่อใช้ไฟล์คีย์และใบรับรอง
เราจะทำการเปลี่ยนแปลงกับ/etc/httpd/conf.d/ssl.conf -
เราจะทำให้เกิดการเปลี่ยนแปลงต่อไปนี้เพื่อssl.conf อย่างไรก็ตามก่อนที่เราจะดำเนินการนั้นเราควรสำรองไฟล์ต้นฉบับไว้ เมื่อทำการเปลี่ยนแปลงเซิร์ฟเวอร์ที่ใช้งานจริงในโปรแกรมแก้ไขข้อความขั้นสูงเช่นviหรือemcasแนวทางปฏิบัติที่ดีที่สุดคือต้องสำรองไฟล์คอนฟิกูเรชันเสมอก่อนทำการแก้ไข
[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/
ตอนนี้เรามาแก้ไขต่อหลังจากคัดลอกสำเนา ssl.conf ที่ใช้งานได้ไปยังรูทของโฟลเดอร์บ้านของเรา
- Locate
- แก้ไขทั้ง DocumentRoot และ ServerName ดังต่อไปนี้
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443
DocumentRootนี่คือเส้นทางไปยังไดเร็กทอรี apache เริ่มต้นของคุณ ในโฟลเดอร์นี้ควรเป็นเพจเริ่มต้นที่จะแสดงคำขอ HTTP ที่ขอหน้าเริ่มต้นของเว็บเซิร์ฟเวอร์หรือไซต์ของคุณ
ServerNameคือชื่อเซิร์ฟเวอร์ที่สามารถเป็นได้ทั้งที่อยู่ IP หรือชื่อโฮสต์ของเซิร์ฟเวอร์ สำหรับ TLS แนวทางปฏิบัติที่ดีที่สุดคือการสร้างใบรับรองที่มีชื่อโฮสต์ จากบทช่วยสอน OpenLdap ของเราเราได้สร้างชื่อโฮสต์ของ centos บนโดเมนขององค์กรท้องถิ่น: vmnet.local
ตอนนี้เราต้องการแสดงความคิดเห็นในบรรทัดต่อไปนี้
SSLProtocol
# SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect. Disable SSLv2 access by default:
~~~~> #SSLProtocol all -SSLv2
# SSL Cipher Suite:
# List the ciphers that the client is permitted to negotiate.
# See the mod_ssl documentation for a complete list.
~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
จากนั้นแจ้งให้ Apache ทราบว่าจะค้นหาใบรับรองและคู่คีย์ส่วนตัว / สาธารณะของเราได้จากที่ใด
ระบุเส้นทางไปยังไฟล์ใบรับรองที่ลงนามด้วยตนเอง
# Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate. If
# the certificate is encrypted, then you will be prompted for a
# pass phrase. Note that a kill -HUP will prompt again. A new
# certificate can be generated using the genkey(1) command.
~~~~> SSLCertificateFile /etc/ssl/certs/self-sign-apache.crt
specify path to our private key file
# Server Private Key:
# If the key is not combined with the certificate, use this
# directive to point at the key file. Keep in mind that if
# you've both a RSA and a DSA private key you can configure
# both in parallel (to also allow the use of DSA ciphers, etc.)
~~~~> SSLCertificateKeyFile /etc/ssl/private/self-gen-apache.key
สุดท้ายเราต้องอนุญาตการเชื่อมต่อขาเข้ากับhttpsผ่านพอร์ต 443
ในบทนี้เราจะเรียนรู้เล็กน้อยเกี่ยวกับความเป็นมาของ Apache HTTP Server และจากนั้นติดตั้งเวอร์ชันเสถียรล่าสุดบน CentOS Linux 7
ประวัติโดยย่อเกี่ยวกับ Apache WebServer
Apache เป็นเว็บเซิร์ฟเวอร์ที่มีมาอย่างยาวนาน ในความเป็นจริงเกือบตราบเท่าที่การมีอยู่ของ http เอง!
Apache เริ่มต้นจากโครงการขนาดเล็กที่ National Center for Supercomputing Applications หรือที่เรียกว่า NCSA ในช่วงกลางทศวรรษที่ 90 "httpd" ตามที่เรียกกันว่าเป็นแพลตฟอร์มเว็บเซิร์ฟเวอร์ที่ได้รับความนิยมมากที่สุดบนอินเทอร์เน็ตโดยมีส่วนแบ่งการตลาดประมาณ 90% หรือมากกว่านั้น
ในตอนนี้เป็นโครงการง่ายๆ เจ้าหน้าที่ไอทีที่มีทักษะซึ่งรู้จักกันในชื่อผู้ดูแลเว็บมีหน้าที่รับผิดชอบในการดูแลรักษาแพลตฟอร์มเว็บเซิร์ฟเวอร์และซอฟต์แวร์เว็บเซิร์ฟเวอร์ตลอดจนการพัฒนาไซต์ส่วนหน้าและส่วนหลัง หัวใจหลักของ httpd คือความสามารถในการใช้โมดูลที่กำหนดเองซึ่งเรียกว่าปลั๊กอินหรือส่วนขยาย ผู้ดูแลเว็บยังมีทักษะเพียงพอที่จะเขียนโปรแกรมแก้ไขไปยังซอฟต์แวร์เซิร์ฟเวอร์หลัก
บางครั้งในช่วงปลายทศวรรษที่ 90 ผู้พัฒนาอาวุโสและผู้จัดการโครงการของ httpd ได้ออกจาก NCSA เพื่อทำสิ่งอื่น ๆ สิ่งนี้ทำให้ web-daemon ที่ได้รับความนิยมสูงสุดอยู่ในสภาพชะงักงัน
เนื่องจากการใช้ httpd เป็นที่แพร่หลายมากกลุ่มผู้ดูแลเว็บ httpd ที่มีประสบการณ์จึงเรียกร้องให้มีการประชุมสุดยอดเพื่อขออนาคตของ httpd มีการตัดสินใจที่จะประสานงานและใช้ส่วนขยายและแพตช์ที่ดีที่สุดในรุ่นที่เสถียรในปัจจุบัน จากนั้นปู่ย่าตายายปัจจุบันของเซิร์ฟเวอร์ http ได้ถือกำเนิดขึ้นและตั้งชื่อเซิร์ฟเวอร์ Apache HTTP
Little Known Historical Fact- อาปาเช่ไม่ได้รับการตั้งชื่อตามชนเผ่านักรบพื้นเมืองอเมริกัน ในความเป็นจริงมันได้รับการประกาศเกียรติคุณและตั้งชื่อด้วยการบิด: ถูกสร้างขึ้นจากการแก้ไข (หรือแพทช์) จากนักวิทยาศาสตร์คอมพิวเตอร์ที่มีความสามารถหลายคน:patchy หรือ Apache.
ติดตั้งเวอร์ชันเสถียรปัจจุบันบน CentOS Linux 7
Step 1 - ติดตั้ง httpd ผ่าน yum
yum -y install httpd
ณ จุดนี้ Apache HTTP Server จะติดตั้งผ่าน yum
Step 2 - แก้ไขไฟล์ httpd.conf เฉพาะกับความต้องการ httpd ของคุณ
ด้วยการเริ่มต้น Apache ติดตั้งไฟล์การกำหนดค่าสำหรับ Apache เป็นชื่อhttpd.confและตั้งอยู่ใน/ etc / httpd / ดังนั้นขอเปิดในกลุ่ม
httpd.confสองสามบรรทัดแรกเปิดในกลุ่ม -
#
# This is the main Apache HTTP server configuration file. It contains the
# configuration directives that give the server its instructions.
# See <URL:http://httpd.apache.org/docs/2.4/> for detailed information.
# In particular, see
# <URL:http://httpd.apache.org/docs/2.4/mod/directives.html>
# for a discussion of each configuration directive.
เราจะทำการเปลี่ยนแปลงต่อไปนี้เพื่อให้การติดตั้ง CentOS ของเราให้บริการคำขอ http จาก http พอร์ต 80
โฮสต์การรับฟังและพอร์ต
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
จากที่นี่เราเปลี่ยน Apache เพื่อฟังพอร์ตหรือที่อยู่ IP บางพอร์ต ตัวอย่างเช่นหากเราต้องการเรียกใช้บริการ httpd บนพอร์ตอื่นเช่น 8080 หรือหากเรากำหนดค่าเว็บเซิร์ฟเวอร์ของเราด้วยอินเทอร์เฟซหลายรายการพร้อมที่อยู่ IP แยกกัน
ฟัง
ป้องกันไม่ให้ Apache เชื่อมต่อกับ daemon การฟังทุกตัวในทุก IP Address สิ่งนี้มีประโยชน์ในการหยุดการระบุเฉพาะการรับส่งข้อมูล IPv6 หรือ IPv4 หรือแม้แต่การเชื่อมโยงกับอินเทอร์เฟซเครือข่ายทั้งหมดบนโฮสต์แบบมัลติโฮม
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
Listen 10.0.0.25:80
#Listen 80
DocumentRoot
"document root" เป็นไดเร็กทอรีเริ่มต้นที่ Apache จะค้นหาไฟล์ดัชนีเพื่อใช้สำหรับการร้องขอเมื่อไปที่เซิร์ฟเวอร์ของคุณ: http://www.yoursite.com/ จะดึงและให้บริการไฟล์ดัชนีจากรูทเอกสารของคุณ
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
Step 3 - เริ่มและเปิดใช้งานบริการ httpd
[root@centos rdc]# systemctl start httpd && systemctl reload httpd
[root@centos rdc]#
Step 4 - กำหนดค่าไฟร์วอลล์เพื่ออนุญาตการเข้าถึงพอร์ต 80 คำขอ
[root@centos]# firewall-cmd --add-service=http --permanent
ดังที่ได้สัมผัสไว้ในช่วงสั้น ๆ เมื่อกำหนดค่า CentOS สำหรับใช้กับ Maria DB ไม่มีแพ็คเกจ MySQL ดั้งเดิมในที่เก็บyum CentOS 7 ในการพิจารณาเรื่องนี้เราจะต้องเพิ่มพื้นที่เก็บข้อมูลที่โฮสต์ MySQL
MariaDB กับ MySQL บน CentOS Linux
สิ่งหนึ่งที่ควรทราบคือ MySQL จะต้องใช้ชุดการอ้างอิงฐานที่แตกต่างจาก MariaDB นอกจากนี้การใช้ MySQL จะทำลายแนวคิดและปรัชญาของ CentOS: แพ็คเกจการผลิตที่ออกแบบมาเพื่อความน่าเชื่อถือสูงสุด
ดังนั้นเมื่อตัดสินใจว่าจะใช้ Maria หรือ MySQL ควรมีน้ำหนักสองตัวเลือก: DB Schema ปัจจุบันของฉันจะทำงานร่วมกับ Maria ได้หรือไม่ การติดตั้ง MySQL บน Maria ให้ประโยชน์อะไรกับฉัน?
ส่วนประกอบของ Maria มีความโปร่งใส 100% ต่อโครงสร้าง MySQL พร้อมประสิทธิภาพเพิ่มเติมบางอย่างพร้อมการออกใบอนุญาตที่ดี เว้นแต่จะมีเหตุผลที่น่าสนใจขอแนะนำให้กำหนดค่า CentOS เพื่อใช้ MariaDB
เหตุผลที่สำคัญที่สุดในการชื่นชอบ Maria บน CentOS คือ -
คนส่วนใหญ่จะใช้ MariaDB เมื่อประสบปัญหาคุณจะได้รับความช่วยเหลือเพิ่มเติมจาก Maria
CentOS ออกแบบมาให้ทำงานร่วมกับ Maria ดังนั้นมาเรียจะเสนอเสถียรภาพที่ดีขึ้น
Maria ได้รับการสนับสนุนอย่างเป็นทางการสำหรับ CentOS
ดาวน์โหลดและเพิ่มที่เก็บ MySQL
เราต้องการดาวน์โหลดและติดตั้งที่เก็บ MySQL จาก -
http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
Step 1 - ดาวน์โหลด Repository
ที่เก็บมาพร้อมแพ็กเกจ rpm เพื่อความสะดวกในการติดตั้ง สามารถดาวน์โหลดได้ด้วยwget -
[root@centos]# wget http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
--2017-02-26 03:18:36-- http://repo.mysql.com/mysql-community-release-el75.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 104.86.98.130
Step 2 - ติดตั้ง MySQL จาก YUM
ตอนนี้เราสามารถใช้yum package manager เพื่อติดตั้งMySQL -
[root@centos]# yum -y install mysql-server
Step 3 - เริ่มและเปิดใช้งานบริการ MySQL Daemon
[root@centos]# systemctl start mysql
[root@centos]# systemctl enable mysql
Step 4 - ตรวจสอบให้แน่ใจว่าบริการ MySQL ของเราพร้อมใช้งานแล้ว
[root@centos]# netstat -antup | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 6572/mysqld
[root@centos]#
หมายเหตุ - เราจะไม่อนุญาตให้ใช้กฎไฟร์วอลล์ผ่าน เป็นเรื่องปกติที่จะมีการกำหนดค่า MySQL ให้ใช้Unix Domain Sockets. สิ่งนี้ทำให้มั่นใจได้เฉพาะเว็บเซิร์ฟเวอร์ของ LAMP stack ในเครื่องเท่านั้นที่สามารถเข้าถึงฐานข้อมูล MySQL โดยนำมิติที่สมบูรณ์ในเวกเตอร์การโจมตีออกมาที่ซอฟต์แวร์ฐานข้อมูล
ในการส่งอีเมลจากเซิร์ฟเวอร์ CentOS 7 ของเราเราจะต้องมีการตั้งค่าเพื่อกำหนดค่า Mail Transfer Agent (MTA) ที่ทันสมัย Mail Transfer Agent เป็น daemon ที่รับผิดชอบในการส่งเมลขาออกสำหรับผู้ใช้ระบบหรือโดเมนอินเทอร์เน็ตขององค์กรผ่าน SMTP
เป็นที่น่าสังเกตว่าบทช่วยสอนนี้สอนเฉพาะขั้นตอนการตั้งค่าภูตสำหรับการใช้งานภายในเครื่องเท่านั้น เราไม่ได้ลงรายละเอียดเกี่ยวกับการกำหนดค่าขั้นสูงสำหรับการตั้งค่า MTA สำหรับการดำเนินธุรกิจ นี่คือการรวมกันของทักษะต่างๆซึ่งรวมถึง แต่ไม่ จำกัด เฉพาะ DNS การรับที่อยู่ IP ที่กำหนดเส้นทางแบบคงที่ซึ่งไม่อยู่ในบัญชีดำและการกำหนดการตั้งค่าความปลอดภัยและบริการขั้นสูง ในระยะสั้นบทช่วยสอนนี้มีขึ้นเพื่อให้คุณคุ้นเคยกับการกำหนดค่าพื้นฐาน อย่าใช้บทช่วยสอนนี้สำหรับการกำหนดค่า MTA ของโฮสต์ที่เชื่อมต่อกับอินเทอร์เน็ต
ด้วยการมุ่งเน้นที่การรักษาความปลอดภัยและความสะดวกในการบริหารจัดการร่วมกันเราจึงเลือก Postfixเป็น MTA สำหรับบทช่วยสอนนี้ เอ็มทีเริ่มต้นติดตั้งในรุ่นเก่าของ CentOS เป็นSendmailSendmailเป็น MTA ที่ยอดเยี่ยม อย่างไรก็ตามจากความเห็นที่ต่ำต้อยของผู้เขียน Postfix ได้รับความนิยมเมื่อกล่าวถึงบันทึกย่อต่อไปนี้สำหรับ MTA ด้วย CentOS เวอร์ชันล่าสุด Postfix ได้แทนที่ Sendmail เป็น MTA เริ่มต้น
Postfix เป็น MTA ที่ใช้กันอย่างแพร่หลายและได้รับการบันทึกไว้เป็นอย่างดี ได้รับการบำรุงรักษาและพัฒนาอย่างต่อเนื่อง ต้องมีการกำหนดค่าน้อยที่สุดในใจ (นี่เป็นเพียงอีเมล) และมีประสิทธิภาพด้วยทรัพยากรระบบ (อีกครั้งนี่เป็นเพียงอีเมล)
Step 1 - ติดตั้ง Postfix จาก YUM Package Manager
[root@centos]# yum -y install postfix
Step 2 - กำหนดค่าไฟล์กำหนดค่า Postfix
ไฟล์คอนฟิกูเรชัน Postfix อยู่ใน: /etc/postfix/main.cf
ในการกำหนดค่า Postfix อย่างง่ายต้องกำหนดค่าสิ่งต่อไปนี้สำหรับโฮสต์เฉพาะ: ชื่อโฮสต์โดเมนต้นทาง inet_interfaces และปลายทาง
Configure the hostname- ชื่อโฮสต์คือชื่อโดเมนแบบเต็มของโฮสต์ Postfix ใน OpenLDAP บทเราตั้งชื่อ CentOS กล่อง: CentOS บนโดเมนvmnet.local มาดูกันดีกว่าสำหรับบทนี้
# The myhostname parameter specifies the internet hostname of this
# mail system. The default is to use the fully-qualified domain name
# from gethostname(). $myhostname is used as a default value for many
# other configuration parameters.
#
myhostname = centos.vmnet.local
Configure the domain- ตามที่ระบุไว้ข้างต้นโดเมนที่เราจะใช้ในบทช่วยสอนนี้คือvmnet.local
# The mydomain parameter specifies the local internet domain name.
# The default is to use $myhostname minus the first component. # $mydomain is used as a default value for many other configuration
# parameters.
#
mydomain = vmnet.local
Configure the origin - สำหรับการตั้งค่าเซิร์ฟเวอร์และโดเมนเดียวเราจำเป็นต้องยกเลิกการใส่ข้อคิดเห็นในส่วนต่อไปนี้และปล่อยให้ตัวแปร Postfix เริ่มต้น
# SENDING MAIL
#
# The myorigin parameter specifies the domain that locally-posted
# mail appears to come from. The default is to append $myhostname, # which is fine for small sites. If you run a domain with multiple # machines, you should (1) change this to $mydomain and (2) set up
# a domain-wide alias database that aliases each user to
# [email protected].
#
# For the sake of consistency between sender and recipient addresses,
# myorigin also specifies the default domain name that is appended
# to recipient addresses that have no @domain part.
#
myorigin = $myhostname myorigin = $mydomain
Configure the network interfaces- เราจะปล่อยให้ Postfix ฟังอยู่บนอินเทอร์เฟซเครือข่ายเดียวและโปรโตคอลและที่อยู่ IP ทั้งหมดที่เกี่ยวข้องกับอินเทอร์เฟซนั้น ทำได้โดยเพียงแค่เปิดใช้งานการตั้งค่าเริ่มต้นสำหรับ Postfix
# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on. By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
#inet_interfaces = all
#inet_interfaces = $myhostname #inet_interfaces = $myhostname, localhost
#inet_interfaces = localhost
# Enable IPv4, and IPv6 if supported
inet_protocols = all
Step 3 - กำหนดค่าการรองรับ SASL สำหรับ Postfix
หากไม่มีการสนับสนุน SASL Authentication Postfix จะอนุญาตให้ส่งอีเมลจากผู้ใช้ภายในเท่านั้น หรือจะให้ข้อผิดพลาดที่ปฏิเสธการส่งต่อเมื่อผู้ใช้ส่งอีเมลจากโดเมนภายในเครื่อง
Note - SASL หรือ Simple Application Security Layer Frameworkเป็นเฟรมเวิร์กที่ออกแบบมาสำหรับการพิสูจน์ตัวตนที่สนับสนุนเทคนิคต่างๆระหว่างโปรโตคอล Application Layer ที่แตกต่างกัน แทนที่จะปล่อยให้กลไกการพิสูจน์ตัวตนขึ้นอยู่กับโปรโตคอลเลเยอร์แอปพลิเคชันนักพัฒนา SASL (และผู้บริโภค) ใช้ประโยชน์จากโปรโตคอลการตรวจสอบสิทธิ์ปัจจุบันสำหรับโปรโตคอลระดับที่สูงขึ้นซึ่งอาจไม่มีความสะดวกหรือการตรวจสอบความถูกต้องที่ปลอดภัยมากขึ้น
ติดตั้งแพ็กเกจ "cyrus-sasl *
[root@centos]# yum -y install cyrus-sasl
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.forethought.net
* extras: repos.dfw.quadranet.com
* updates: mirrors.tummy.com
Package cyrus-sasl-2.1.26-20.el7_2.x86_64 already installed and latest version
Nothing to do
กำหนดค่า/etc/postfix/main.cfสำหรับ SASL Auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_sasl_security_options = noanonymous
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
ตัวเลือก SASL ของฉันในmain.conf
##Configure SASL Options Entries:
smtpd_sasl_auth_enable = yes
smptd_recipient_restrictions =
permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtp_sasl_type = dovecot
smtp_sasl_path = private/auth/etc
Step 4 - กำหนดค่า FirewallD เพื่ออนุญาตบริการ SMTP ขาเข้า
[root@centos]# firewall-cmd --permanent --add-service=smtp
success
[root@centos]# firewall-cmd --reload
success
[root@centos]#
ตอนนี้ตรวจสอบให้แน่ใจว่าโฮสต์ CentOS ของเราอนุญาตและตอบสนองต่อคำขอบนพอร์ต 25 (SMTP)
Nmap scan report for 172.16.223.132
Host is up (0.00035s latency).
Not shown: 993 filtered ports
PORT STATE SERVICE
20/tcp closed ftp-data
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
80/tcp open http
389/tcp open ldap
443/tcp open https
MAC Address: 00:0C:29:BE:DF:5F (VMware)
อย่างที่คุณเห็น SMTP กำลังรับฟังและ daemon กำลังตอบสนองต่อคำขอจาก LAN ภายในของเรา
ติดตั้ง Dovecot IMAP และ POP3 Server
Dovecot เป็นเซิร์ฟเวอร์ IMAP และ POP3 ที่ปลอดภัยซึ่งออกแบบมาเพื่อรองรับความต้องการอีเมลขาเข้าขององค์กรขนาดเล็กไปจนถึงขนาดใหญ่ เนื่องจากการใช้งานกับ CentOS เป็นจำนวนมากเราจะใช้ Dovecot เป็นตัวอย่างในการติดตั้งและกำหนดค่าเซิร์ฟเวอร์อีเมลขาเข้าสำหรับ CentOS และ MTA SASL Provider
ตามที่ระบุไว้ก่อนหน้านี้เราจะไม่กำหนดค่าระเบียน MX สำหรับ DNS หรือสร้างกฎที่ปลอดภัยเพื่อให้บริการของเราจัดการอีเมลสำหรับโดเมน ดังนั้นการตั้งค่าบริการเหล่านี้บนโฮสต์ที่เชื่อมต่อกับอินเทอร์เน็ตอาจทำให้มีช่องว่างสำหรับช่องโหว่ด้านความปลอดภัยที่ไม่มีระเบียน SPF
Step 1 - ติดตั้ง Dovecot
[root@centos]# yum -y install dovecot
Step 2 - กำหนดค่า dovecot
แฟ้มการกำหนดค่าหลักสำหรับพิราบตั้งอยู่ที่: /etc/dovecot.conf เราจะสำรองไฟล์คอนฟิกหลักไว้ก่อน เป็นแนวทางปฏิบัติที่ดีในการสำรองไฟล์คอนฟิกูเรชันเสมอก่อนทำการแก้ไข วิธีนี้ id (เช่น) ตัวแบ่งบรรทัดจะถูกทำลายโดยโปรแกรมแก้ไขข้อความและปีของการเปลี่ยนแปลงจะหายไป การเปลี่ยนกลับทำได้ง่ายเหมือนการคัดลอกข้อมูลสำรองปัจจุบันไปยังการผลิต
เปิดใช้งานโปรโตคอลและบริการ daemon สำหรับdovecot
# Protocols we want to be serving.
protocols = imap imaps pop3 pop3s
ตอนนี้เราต้องเปิดใช้งาน dovecot daemon เพื่อฟังเมื่อเริ่มต้น -
[root@localhost]# systemctl start dovecot
[root@localhost]# systemctl enable dovecot
ตรวจสอบให้แน่ใจว่า Dovecot กำลังฟังอยู่ในพอร์ตที่ระบุสำหรับ: imap, pop3, imap ที่ปลอดภัยและ pop3 ที่ปลอดภัย
[root@localhost]# netstat -antup | grep dovecot
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 4368/dovecot
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 4368/dovecot
tcp6 0 0 :::110 :::* LISTEN 4368/dovecot
tcp6 0 0 :::143 :::* LISTEN 4368/dovecot
tcp6 0 0 :::993 :::* LISTEN 4368/dovecot
tcp6 0 0 :::995 :::* LISTEN 4368/dovecot
[root@localhost]#
ดังที่เห็นdovecotกำลังฟังพอร์ตที่ระบุสำหรับ IPv4 และ IPv4
POP3 | 110 |
POP3s | 995 |
IMAP | 143 |
IMAP | 993 |
ตอนนี้เราต้องสร้างกฎไฟร์วอลล์บางอย่าง
[root@localhost]# firewall-cmd --permanent --add-port=110/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=143/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=995/tcp
success
[root@localhost]# firewall-cmd --permanent --add-port=993/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
ตัดจดหมายขาเข้าของเราคือการยอมรับการร้องขอสำหรับPOP3 , POP3S , IMAPและIMAPSไปยังโฮสต์บน LAN
Port Scanning host: 192.168.1.143
Open TCP Port: 21 ftp
Open TCP Port: 22 ssh
Open TCP Port: 25 smtp
Open TCP Port: 80 http
Open TCP Port: 110 pop3
Open TCP Port: 143 imap
Open TCP Port: 443 https
Open TCP Port: 993 imaps
Open TCP Port: 995 pop3s
ก่อนที่จะเจาะลึกการติดตั้ง FTP บน CentOS เราจำเป็นต้องเรียนรู้เล็กน้อยเกี่ยวกับการใช้งานและความปลอดภัย FTPเป็นโปรโตคอลที่มีประสิทธิภาพและได้รับการปรับแต่งมาเป็นอย่างดีสำหรับการถ่ายโอนไฟล์ระหว่างระบบคอมพิวเตอร์ FTP ถูกนำมาใช้และได้รับการปรับปรุงมาหลายสิบปีแล้ว สำหรับการถ่ายโอนไฟล์อย่างมีประสิทธิภาพผ่านเครือข่ายที่มีเวลาแฝงหรือความเร็วสูง FTP เป็นตัวเลือกที่ยอดเยี่ยม มากกว่า SAMBA หรือ SMB
อย่างไรก็ตาม FTP มีปัญหาด้านความปลอดภัยบางประการ จริงๆแล้วปัญหาด้านความปลอดภัยที่ร้ายแรงบางอย่าง FTP ใช้วิธีการพิสูจน์ตัวตนด้วยข้อความธรรมดาที่อ่อนแอมาก ด้วยเหตุนี้เซสชันที่ตรวจสอบสิทธิ์จึงควรใช้ sFTP หรือ FTPS โดยที่ TLS ใช้สำหรับการเข้ารหัสจากต้นทางถึงปลายทางของเซสชันการเข้าสู่ระบบและการถ่ายโอน
ด้วยคำเตือนข้างต้น FTP แบบเก่าธรรมดายังคงมีการใช้งานในสภาพแวดล้อมทางธุรกิจในปัจจุบัน การใช้งานหลักคือที่เก็บไฟล์ FTP ที่ไม่ระบุชื่อ นี่คือสถานการณ์ที่ไม่รับประกันการรับรองความถูกต้องในการดาวน์โหลดหรืออัปโหลดไฟล์ ตัวอย่างบางส่วนของการใช้ FTP แบบไม่ระบุชื่อ ได้แก่ -
บริษัท ซอฟต์แวร์ขนาดใหญ่ยังคงใช้ที่เก็บ ftp แบบไม่ระบุชื่อซึ่งอนุญาตให้ผู้ใช้อินเทอร์เน็ตดาวน์โหลดแชร์แวร์และแพตช์
อนุญาตให้ผู้ใช้อินเทอร์เน็ตอัปโหลดและดาวน์โหลดเอกสารสาธารณะ
แอปพลิเคชันบางตัวจะส่งบันทึกที่เข้ารหัสเก็บถาวรหรือไฟล์การกำหนดค่าไปยังที่เก็บโดยอัตโนมัติผ่าน FTP
ดังนั้นในฐานะผู้ดูแลระบบ CentOS ความสามารถในการติดตั้งและกำหนดค่า FTP ยังคงเป็นทักษะที่ออกแบบมา
เราจะใช้ FTP daemon ที่เรียกว่า vsFTPหรือ FTP Daemon ที่ปลอดภัยมาก vsFTP ถูกใช้ในการพัฒนามาระยะหนึ่งแล้ว มีชื่อเสียงในด้านความปลอดภัยติดตั้งและกำหนดค่าได้ง่ายและเชื่อถือได้
Step 1 - ติดตั้ง vsFTPd ด้วย YUM Package Manager
[root@centos]# yum -y install vsftpd.x86_64
Step 2 - กำหนดค่า vsFTP เพื่อเริ่มการบูตด้วย systemctl
[root@centos]# systemctl start vsftpd
[root@centos]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-
user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
Step 3 - กำหนดค่า FirewallD เพื่ออนุญาตการควบคุม FTP และเซสชันการถ่ายโอน
[root@centos]# firewall-cmd --add-service=ftp --permanent
success
[root@centos]#
ตรวจสอบให้แน่ใจว่า FTP daemon ของเรากำลังทำงานอยู่
[root@centos]# netstat -antup | grep vsftp
tcp6 0 0 :::21 :::* LISTEN 13906/vsftpd
[root@centos]#
Step 4 - กำหนดค่า vsFTPD สำหรับการเข้าถึงแบบไม่ระบุตัวตน
สร้างไดเร็กทอรี FTP รูท
[root@centos]# mkdir /ftp
เปลี่ยนเจ้าของและกลุ่มของรูทFTP เป็น ftp
[root@centos]# chown ftp:ftp /ftp
Set minimal permissions for FTP root:
[root@centos]# chmod -R 666 /ftp/
[root@centos]# ls -ld /ftp/
drw-rw-rw-. 2 ftp ftp 6 Feb 27 02:01 /ftp/
[root@centos]#
ในกรณีนี้เราให้สิทธิ์ผู้ใช้ในการอ่าน / เขียนถึงโครงสร้างราก FTP ทั้งหมด
กำหนดค่า/etc/vsftpd/vsftpd.conf "
[root@centos]# vim /etc/vsftpd/vsftpd.conf
# Example config file /etc/vsftpd/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
เราต้องการเปลี่ยนคำสั่งต่อไปนี้ในไฟล์vsftp.conf
เปิดใช้งานการอัปโหลดแบบไม่ระบุตัวตนโดยยกเลิกการระบุ anon_mkdir_write_enable = YES
chown อัปโหลดไฟล์ที่เป็นของผู้ใช้ftpระบบ
chown_uploads = ใช่
chown_username = ftp
เปลี่ยนผู้ใช้ระบบที่ vsftp ใช้เป็นผู้ใช้ ftp: nopriv_user = ftp
ตั้งค่าแบนเนอร์ที่กำหนดเองเพื่อให้ผู้ใช้อ่านก่อนลงชื่อเข้าใช้
ftpd_banner = ยินดีต้อนรับสู่ FTP Repo แบบไม่ระบุชื่อของเรา การเชื่อมต่อทั้งหมดได้รับการตรวจสอบและบันทึก
มาตั้งค่าการเชื่อมต่อ IPv4 เท่านั้น -
ฟัง = ใช่
Listen_ipv6 = ไม่
ตอนนี้เราต้องรีสตาร์ทหรือHUPบริการ vsftp เพื่อใช้การเปลี่ยนแปลงของเรา
[root@centos]# systemctl restart vsftpd
มาเชื่อมต่อกับโฮสต์ FTP ของเราและตรวจสอบให้แน่ใจว่า FTP daemon ของเราตอบสนอง
[root@centos rdc]# ftp 10.0.4.34
Connected to localhost (10.0.4.34).
220 Welcome to our Anonymous FTP Repo. All connections are monitored and logged.
Name (localhost:root): anonymous
331 Please specify the password.
Password:
'230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
เมื่อพูดถึงการจัดการระยะไกลใน CentOS ในฐานะผู้ดูแลระบบเราจะสำรวจสองวิธี -
- การจัดการคอนโซล
- การจัดการ GUI
การจัดการคอนโซลระยะไกล
การจัดการคอนโซลระยะไกลหมายถึงการดำเนินงานการดูแลระบบจากบรรทัดคำสั่งผ่านบริการเช่น ssh ในการใช้ CentOS Linux อย่างมีประสิทธิภาพในฐานะผู้ดูแลระบบคุณจะต้องมีความเชี่ยวชาญกับบรรทัดคำสั่ง Linux ที่เป็นหัวใจหลักได้รับการออกแบบมาเพื่อใช้งานจากคอนโซล แม้ในปัจจุบันผู้ดูแลระบบบางคนชอบอำนาจของคำสั่งและประหยัดเงินในฮาร์ดแวร์ด้วยการเรียกใช้กล่อง Linux แบบเปลือยเปล่าที่ไม่มีเทอร์มินัลทางกายภาพและไม่ติดตั้ง GUI
การจัดการ GUI ระยะไกล
การจัดการ GUI ระยะไกลมักทำได้สองวิธี: X-Session ระยะไกลหรือโปรโตคอลเลเยอร์แอปพลิเคชัน GUI เช่น VNC แต่ละคนมีจุดแข็งและข้อเสีย อย่างไรก็ตามส่วนใหญ่แล้ว VNC เป็นตัวเลือกที่ดีที่สุดสำหรับการบริหาร ช่วยให้สามารถควบคุมแบบกราฟิกจากระบบปฏิบัติการอื่น ๆ เช่น Windows หรือ OS X ที่ไม่รองรับโปรโตคอล X Windows
การใช้ X Sessions ระยะไกลนั้นมีอยู่ในทั้ง Window-Managers และ DesktopManagers ของ X-Window ที่ทำงานบน X อย่างไรก็ตามสถาปัตยกรรม X Session ทั้งหมดส่วนใหญ่จะใช้กับ Linux ไม่ใช่ผู้ดูแลระบบทุกคนจะมีแล็ปท็อป Linux ในมือเพื่อสร้าง X Session ระยะไกล ดังนั้นจึงเป็นเรื่องปกติที่จะใช้ VNC Server เวอร์ชันดัดแปลง
ข้อเสียที่ใหญ่ที่สุดของ VNC คือ VNC ไม่สนับสนุนสภาพแวดล้อมแบบผู้ใช้หลายคนเช่น X-Sessions ระยะไกล ดังนั้นสำหรับการเข้าถึง GUI ไปยัง XSessions ระยะไกลของผู้ใช้ปลายทางจะเป็นทางเลือกที่ดีที่สุด อย่างไรก็ตามเราส่วนใหญ่เกี่ยวข้องกับการจัดการเซิร์ฟเวอร์ CentOS จากระยะไกล
เราจะพูดถึงการกำหนดค่า VNC สำหรับผู้ดูแลระบบหลายคนเทียบกับ endusers สองสามร้อยตัวด้วย X-Sessions ระยะไกล
การวางรากฐานเพื่อความปลอดภัยด้วย SSH สำหรับการเข้าถึงคอนโซลระยะไกล
ssh หรือ Secure Shellตอนนี้เป็นมาตรฐานสำหรับการดูแลเซิร์ฟเวอร์ Linux จากระยะไกล SSH ซึ่งแตกต่างจาก Telnet ใช้ TLS สำหรับความถูกต้องและการเข้ารหัสการสื่อสารจากต้นทางถึงปลายทาง เมื่อกำหนดค่าอย่างถูกต้องผู้ดูแลระบบจะมั่นใจได้ว่าทั้งรหัสผ่านและเซิร์ฟเวอร์เชื่อถือได้จากระยะไกล
ก่อนกำหนดค่า SSH ให้พูดถึงความปลอดภัยขั้นพื้นฐานและการเข้าถึงทั่วไปน้อยที่สุด เมื่อ SSH กำลังรันบนพอร์ตเริ่มต้นที่ 22; ไม่ช้าก็เร็วคุณจะถูกโจมตีด้วยพจนานุกรมที่ดุร้ายกับชื่อผู้ใช้และรหัสผ่านทั่วไป แค่นี้ก็มาพร้อมอาณาเขต ไม่ว่าคุณจะเพิ่มโฮสต์ลงในไฟล์ปฏิเสธจำนวนเท่าใดก็ตามพวกเขาก็จะมาจากที่อยู่ IP ที่แตกต่างกันทุกวัน
ด้วยกฎทั่วไปสองสามข้อคุณสามารถทำตามขั้นตอนเชิงรุกและปล่อยให้คนเลวเสียเวลาไปเปล่า ๆ ต่อไปนี้เป็นกฎความปลอดภัยบางประการที่ต้องปฏิบัติตามโดยใช้ SSH สำหรับการดูแลระบบระยะไกลบนเซิร์ฟเวอร์ที่ใช้งานจริง -
อย่าใช้ชื่อผู้ใช้หรือรหัสผ่านทั่วไป ชื่อผู้ใช้ในระบบไม่ควรเป็นค่าเริ่มต้นของระบบหรือเชื่อมโยงกับที่อยู่อีเมลของ บริษัท เช่น:[email protected]
ไม่ควรอนุญาตการเข้าถึงรูทหรือการเข้าถึงการดูแลระบบผ่าน SSH ใช้ชื่อผู้ใช้ที่ไม่ซ้ำกันและ su เพื่อรูทหรือบัญชีผู้ดูแลระบบเมื่อตรวจสอบสิทธิ์ผ่าน SSH แล้ว
นโยบายรหัสผ่านเป็นสิ่งที่ต้องทำ: รหัสผ่านผู้ใช้ SSH ที่ซับซ้อนเช่น: "This & IS & a & GUD & P @ ssW0rd & 24 & me" เปลี่ยนรหัสผ่านทุกสองสามเดือนเพื่อกำจัดความอ่อนไหวต่อการโจมตีด้วยกำลังดุร้ายที่เพิ่มขึ้น
ปิดใช้งานบัญชีที่ถูกละทิ้งหรือบัญชีที่ไม่ได้ใช้งานเป็นระยะเวลานาน หากผู้จัดการการจ้างงานมีข้อความเสียงระบุว่าพวกเขาจะไม่ทำการสัมภาษณ์เป็นเวลาหนึ่งเดือน ที่สามารถนำไปสู่บุคคลที่มีความเชี่ยวชาญด้านเทคโนโลยีซึ่งมีเวลาอยู่ในมือมากเช่น
ดูบันทึกของคุณทุกวัน ในฐานะผู้ดูแลระบบอุทิศเวลาอย่างน้อย 30-40 นาทีทุกเช้าเพื่อตรวจสอบระบบและบันทึกความปลอดภัย หากถูกถามให้ทุกคนรู้ว่าคุณไม่มีเวลาที่จะไม่ทำงานเชิงรุก แนวปฏิบัตินี้จะช่วยแยกสัญญาณเตือนก่อนที่ปัญหาจะปรากฏต่อผู้ใช้ปลายทางและผลกำไรของ บริษัท
Note On Linux Security- ใครก็ตามที่สนใจในการดูแลระบบ Linux ควรติดตามข่าวสารและเทคโนโลยี Cyber-Security ในปัจจุบัน แม้ว่าเราส่วนใหญ่จะได้ยินเกี่ยวกับระบบปฏิบัติการอื่น ๆ ที่ถูกบุกรุก แต่กล่อง Linux ที่ไม่ปลอดภัยก็เป็นสมบัติที่อาชญากรไซเบอร์ต้องการ ด้วยพลังของ Linux บนการเชื่อมต่ออินเทอร์เน็ตความเร็วสูงอาชญากรไซเบอร์ที่เชี่ยวชาญสามารถใช้ Linux เพื่อใช้ประโยชน์จากการโจมตีระบบปฏิบัติการอื่น ๆ
ติดตั้งและกำหนดค่า SSH สำหรับการเข้าถึงระยะไกล
Step 1 - ติดตั้งเซิร์ฟเวอร์ SSH และแพ็คเกจที่เกี่ยวข้องทั้งหมด
[root@localhost]# yum -y install openssh-server
'Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repos.centos.net
* extras: repos.dfw.centos.com
* updates: centos.centos.com
Resolving Dependencies
--> Running transaction check
---> Package openssh-server.x86_64 0:6.6.1p1-33.el7_3 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
Step 2 - ใช้งานปกติอย่างปลอดภัยเพื่อเพิ่มการเข้าถึงเชลล์
[root@localhost ~]# useradd choozer
[root@localhost ~]# usermod -c "Remote Access" -d /home/choozer -g users -G
wheel -a choozer
Note- เราได้เพิ่มผู้ใช้ใหม่ลงในกลุ่มล้อทำให้สามารถsuเข้าสู่รูทได้เมื่อตรวจสอบสิทธิ์การเข้าถึง SSH แล้ว เรายังใช้ชื่อผู้ใช้ที่ไม่พบในรายการคำทั่วไป วิธีนี้บัญชีของเราจะไม่ถูกล็อคเมื่อ SSH ถูกโจมตี
การตั้งค่าไฟล์โฮลดิ้งสำหรับเซิร์ฟเวอร์ sshd คือ/ etc / SSH / sshd_config
ส่วนที่เราต้องการแก้ไขในเบื้องต้น ได้แก่ -
LoginGraceTime 60m
PermitRootLogin no
Step 3- โหลด SSH daemon sshdอีกครั้ง
[root@localhost]# systemctl reload sshd
เป็นการดีที่จะตั้งระยะเวลาผ่อนผันการออกจากระบบเป็น 60 นาที งานการดูแลระบบที่ซับซ้อนบางอย่างอาจเกินค่าเริ่มต้น 2 นาที ไม่มีอะไรน่าหงุดหงิดไปกว่าการหมดเวลาเซสชัน SSH เมื่อกำหนดค่าหรือค้นคว้าการเปลี่ยนแปลง
Step 4 - ลองเข้าสู่ระบบโดยใช้ข้อมูลรับรองรูท
bash-3.2# ssh centos.vmnet.local
[email protected]'s password:
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
Step 5- เราไม่สามารถเข้าสู่ระบบจากระยะไกลผ่าน ssh ด้วยข้อมูลประจำตัวของrootได้อีกต่อไป ดังนั้นการเข้าสู่ระบบให้ของกับบัญชีผู้ใช้ของเราด้อยโอกาสและsuเข้าไปในรากบัญชี
bash-3.2# ssh [email protected]
[email protected]'s password:
[choozer@localhost ~]$ su root
Password:
[root@localhost choozer]#
Step 6- สุดท้ายตรวจสอบให้แน่ใจว่าบริการ SSHD โหลดเมื่อบูตและfirewalldอนุญาตการเชื่อมต่อ SSH ภายนอก
[root@localhost]# systemctl enable sshd
[root@localhost]# firewall-cmd --permanent --add-service=ssh
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost]#
SSH ได้รับการตั้งค่าและพร้อมสำหรับการดูแลระบบระยะไกลแล้ว อุปกรณ์ชายแดนกรองแพ็กเก็ตอาจต้องได้รับการกำหนดค่าเพื่ออนุญาตการดูแลระบบระยะไกล SSH ภายนอก LAN ขององค์กรทั้งนี้ขึ้นอยู่กับเส้นขอบองค์กรของคุณ
กำหนดค่า VNC สำหรับ Remote CentOS Administration
7. ที่ง่ายที่สุดวิธีการ จำกัด เป็นเพียงการใช้แพคเกจที่เรียกว่า แต่ - มีกี่วิธีที่จะช่วยให้การบริหารงาน CentOS ระยะไกลผ่านทาง VNC บน CentOS 6 VinoVinoเป็นแอปพลิเคชัน Virtual Network Desktop Connection สำหรับ Linux ที่ออกแบบโดยใช้แพลตฟอร์ม Gnome Desktop ดังนั้นจึงถือว่าการติดตั้งเสร็จสมบูรณ์ด้วย Gnome Desktop หากยังไม่ได้ติดตั้ง Gnome Desktop โปรดดำเนินการก่อนดำเนินการต่อ Vino จะได้รับการติดตั้ง Gnome GUI โดยค่าเริ่มต้น
ในการกำหนดค่าการแชร์หน้าจอกับ Vino ภายใต้ Gnome เราต้องการเข้าไปที่ CentOS System Preferences สำหรับการแชร์หน้าจอ
Applications->System Tools->Settings->Sharing
หมายเหตุสำหรับการกำหนดค่า VNC Desktop Sharing -
Disable New Connections must ask for access- ตัวเลือกนี้จะต้องมีการเข้าถึงทางกายภาพเพื่อตกลงทุกการเชื่อมต่อ ตัวเลือกนี้จะป้องกันการดูแลระบบระยะไกลเว้นแต่จะมีใครอยู่ที่เดสก์ท็อปจริง
Enable Require a password- แยกจากรหัสผ่านผู้ใช้ มันจะควบคุมการเข้าถึงเดสก์ท็อปเสมือนและยังคงต้องใช้รหัสผ่านผู้ใช้เพื่อเข้าถึงเดสก์ท็อปที่ถูกล็อค (ซึ่งดีต่อความปลอดภัย)
Forward UP&P Ports: If available leave disabled- การส่งต่อพอร์ต UP&P จะส่งคำขอ Universal Plug and Play สำหรับอุปกรณ์เลเยอร์ 3 เพื่ออนุญาตการเชื่อมต่อ VNC ไปยังโฮสต์โดยอัตโนมัติ เราไม่ต้องการสิ่งนี้
ตรวจสอบให้แน่ใจว่า vino กำลังฟังอยู่บน VNC Port 5900
[root@localhost]# netstat -antup | grep vino
tcp 0 0 0.0.0.0:5900 0.0.0.0:* LISTEN 4873/vino-server
tcp6 0 0 :::5900 :::* LISTEN 4873/vino-server
[root@localhost]#
ตอนนี้เรามากำหนดค่าไฟร์วอลล์ของเราเพื่ออนุญาตการเชื่อมต่อ VNC ที่เข้ามา
[root@localhost]# firewall-cmd --permanent --add-port=5900/tcp
success
[root@localhost]# firewall-cmd --reload
success
[root@localhost rdc]#
ในที่สุดอย่างที่คุณเห็นเราสามารถเชื่อมต่อ CentOS Box และจัดการกับไคลเอนต์ VNC บน Windows หรือ OS X
การปฏิบัติตามกฎเดียวกันสำหรับ VNC นั้นสำคัญพอ ๆ กับที่เรากำหนดไว้สำหรับ SSH เช่นเดียวกับ SSH VNC จะถูกสแกนอย่างต่อเนื่องในช่วง IP และทดสอบรหัสผ่านที่ไม่รัดกุม นอกจากนี้ยังควรทราบด้วยว่าการเปิดใช้งานการเข้าสู่ระบบ CentOS เริ่มต้นด้วยการหมดเวลาของคอนโซลจะช่วยในการรักษาความปลอดภัย VNC ระยะไกล เนื่องจากผู้โจมตีจะต้องใช้ VNC และรหัสผ่านผู้ใช้ตรวจสอบให้แน่ใจว่ารหัสผ่านการแชร์หน้าจอของคุณแตกต่างกันและคาดเดาได้ยากพอ ๆ กับรหัสผ่านของผู้ใช้
หลังจากป้อนรหัสผ่านการแชร์หน้าจอ VNC เราจะต้องป้อนรหัสผ่านผู้ใช้เพื่อเข้าถึงเดสก์ท็อปที่ถูกล็อก
Security Note- โดยค่าเริ่มต้น VNC ไม่ใช่โปรโตคอลที่เข้ารหัส ดังนั้นการเชื่อมต่อ VNC ควรได้รับการปรับแต่งผ่าน SSH สำหรับการเข้ารหัส
ตั้งค่า SSH Tunnel ผ่าน VNC
การตั้งค่า SSH Tunnel จะให้ชั้นของการเข้ารหัส SSH เพื่ออุโมงค์การเชื่อมต่อ VNC ผ่าน คุณสมบัติที่ยอดเยี่ยมอีกอย่างคือใช้การบีบอัด SSH เพื่อเพิ่มการบีบอัดอีกชั้นหนึ่งในการอัปเดตหน้าจอ VNC GUI ปลอดภัยและเร็วขึ้นเป็นสิ่งที่ดีเสมอเมื่อต้องจัดการกับการดูแลระบบเซิร์ฟเวอร์ CentOS!
ดังนั้นจากไคลเอนต์ของคุณที่จะเริ่มการเชื่อมต่อ VNC มาตั้งค่าอุโมงค์ SSH ระยะไกลกัน ในการสาธิตนี้เราใช้ OS X ก่อนอื่นเราต้องsudo -sเพื่อรูท
bash-3.2# sudo -s
password:
ป้อนรหัสผ่านผู้ใช้และตอนนี้เราควรมีรูทเชลล์พร้อมพรอมต์ # -
bash-3.2#
ตอนนี้ขอสร้างของเราอุโมงค์ SSH
ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
มาทำลายคำสั่งนี้ -
ssh - รันยูทิลิตี้ ssh ในเครื่อง
-f - ssh ควรทำงานในพื้นหลังหลังจากทำงานเสร็จสมบูรณ์
[email protected] - ผู้ใช้ ssh ระยะไกลบนเซิร์ฟเวอร์ CentOS ที่โฮสต์บริการ VNC
-L 2200:192.168.1.143:5900 - สร้างอุโมงค์ของเรา [Local Port]: [โฮสต์ระยะไกล]: [พอร์ตระยะไกลของบริการ VNC]
-N บอก ssh ว่าเราไม่ต้องการดำเนินการคำสั่งบนระบบระยะไกล
bash-3.2# ssh -f [email protected] -L 2200:192.168.1.143:5900 -N
[email protected]'s password:
หลังจากป้อนรหัสผ่านของผู้ใช้ ssh ระยะไกลเรียบร้อยแล้วอุโมงค์ sshของเราจะถูกสร้างขึ้น ตอนนี้สำหรับส่วนที่น่าสนใจ! ในการเชื่อมต่อเราชี้ไคลเอนต์ VNC ของเราที่ localhost บนพอร์ตของอุโมงค์ของเราในกรณีนี้คือพอร์ต 2200 ต่อไปนี้คือการกำหนดค่าบนไคลเอนต์ VNC ของ Mac Laptop -
และในที่สุดการเชื่อมต่อเดสก์ท็อป VNC ระยะไกลของเรา!
สิ่งที่ยอดเยี่ยมเกี่ยวกับ SSH tunneling คือสามารถใช้กับโปรโตคอลเกือบทุกประเภท อุโมงค์ SSH มักใช้เพื่อหลีกเลี่ยงการส่งออกและการกรองพอร์ตขาเข้าโดย ISP รวมถึงการหลอกลวงชั้นแอปพลิเคชัน IDS / IPS ในขณะที่หลีกเลี่ยงการตรวจสอบชั้นเซสชันอื่น ๆ
ISP ของคุณอาจกรองพอร์ต 5900 สำหรับบัญชีที่ไม่ใช่ธุรกิจ แต่อนุญาต SSH บนพอร์ต 22 (หรืออาจเรียกใช้ SSH บนพอร์ตใดก็ได้หากพอร์ต 22 ถูกกรอง)
IPS และ IDS ระดับแอปพลิเคชันดูที่ payload ตัวอย่างเช่นบัฟเฟอร์ล้นทั่วไปหรือ SQL Injection การเข้ารหัส SSH แบบ end-to-end จะเข้ารหัสข้อมูลชั้นแอปพลิเคชัน
SSH Tunneling เป็นเครื่องมือที่ยอดเยี่ยมในกล่องเครื่องมือของผู้ดูแลระบบ Linux เพื่อทำสิ่งต่างๆให้ลุล่วง อย่างไรก็ตามในฐานะผู้ดูแลระบบเราต้องการสำรวจการล็อกความพร้อมใช้งานของผู้ใช้ที่มีสิทธิพิเศษน้อยกว่าที่มีสิทธิ์เข้าถึง SSH tunneling
Administration Security Note- การ จำกัด SSH Tunneling เป็นสิ่งที่ต้องใช้ความคิดในส่วนของผู้ดูแลระบบ การประเมินว่าเหตุใดผู้ใช้จึงต้องการ SSH Tunneling ตั้งแต่แรก สิ่งที่ผู้ใช้ต้องการอุโมงค์ พร้อมกับความน่าจะเป็นของความเสี่ยงในทางปฏิบัติและผลกระทบในกรณีที่เลวร้ายที่สุด
นี่คือหัวข้อขั้นสูงที่ขยายออกไปนอกขอบเขตของไพรเมอร์ระดับกลาง การวิจัยในหัวข้อนี้เหมาะสำหรับผู้ที่ต้องการเข้าถึงระดับบนของ CentOS Linux Administration
ใช้ SSH Tunnel สำหรับ Remote X-Windows
การออกแบบ X-Windows ใน Linux นั้นเรียบร้อยมากเมื่อเทียบกับ Windows หากเราต้องการควบคุมกล่อง Linux ระยะไกลจากกล่อง Linux อื่นเราสามารถใช้ประโยชน์จากกลไกที่สร้างขึ้นใน X
X-Windows (มักเรียกว่า "X") จัดเตรียมกลไกในการแสดงหน้าต่างแอปพลิเคชันที่มาจากกล่อง Linux หนึ่งไปยังส่วนการแสดงผลของ X บนกล่อง Linux อื่น ดังนั้นผ่าน SSH เราสามารถขอให้แอปพลิเคชัน X-Windows ถูกส่งต่อไปยังการแสดงกล่อง Linux อื่นทั่วโลก!
ในการเรียกใช้ X Application จากระยะไกลผ่าน ssh tunnel เราต้องเรียกใช้คำสั่งเดียว -
[root@localhost]# ssh -X [email protected]
The syntax is - ssh -X [user] @ [host] และโฮสต์ต้องรัน ssh กับผู้ใช้ที่ถูกต้อง
ต่อไปนี้เป็นภาพหน้าจอของ GIMP ที่ทำงานบน Ubuntu Workstation ผ่านอุโมงค์ XWindows ssh ระยะไกล
มันค่อนข้างง่ายที่จะเรียกใช้แอปพลิเคชันจากระยะไกลจากเซิร์ฟเวอร์ Linux หรือเวิร์กสเตชันอื่น นอกจากนี้ยังเป็นไปได้ที่จะเริ่มต้น X-Session ทั้งหมดและมีสภาพแวดล้อมเดสก์ท็อปทั้งหมดจากระยะไกลด้วยวิธีการบางอย่าง
XDMCP
แพ็คเกจซอฟต์แวร์ Headless เช่น NX
การกำหนดค่าจอแสดงผลสำรองและเดสก์ท็อปใน X และตัวจัดการเดสก์ท็อปเช่น Gnome หรือ KDE
วิธีนี้มักใช้กับเซิร์ฟเวอร์ headless ที่ไม่มีการแสดงผลทางกายภาพและเกินขอบเขตของไพรเมอร์ระดับกลางจริงๆ อย่างไรก็ตามควรทราบถึงตัวเลือกต่างๆที่มี
มีเครื่องมือของบุคคลที่สามหลายอย่างที่สามารถเพิ่มความสามารถขั้นสูงสำหรับการตรวจสอบปริมาณการใช้งาน CentOS ในบทช่วยสอนนี้เราจะเน้นไปที่ที่บรรจุในที่เก็บการแจกจ่าย CentOS หลักและที่เก็บ Fedora EPEL
มักจะมีสถานการณ์ที่ผู้ดูแลระบบ (ด้วยเหตุผลใดเหตุผลหนึ่ง) เหลือเพียงเครื่องมือในที่เก็บหลักของ CentOS โปรแกรมอรรถประโยชน์ที่กล่าวถึงส่วนใหญ่ได้รับการออกแบบมาเพื่อใช้โดยผู้ดูแลระบบที่มีเปลือกของการเข้าถึงทางกายภาพ เมื่อการตรวจสอบปริมาณการใช้งานด้วย web-gui ที่สามารถเข้าถึงได้การใช้ยูทิลิตี้ของบุคคลที่สามเช่น ntop-ng หรือ Nagios เป็นตัวเลือกที่ดีที่สุด (เทียบกับการสร้างสิ่งอำนวยความสะดวกดังกล่าวใหม่ตั้งแต่ต้น)
สำหรับการวิจัยเพิ่มเติมเกี่ยวกับโซลูชัน web-gui ที่กำหนดค่าได้ต่อไปนี้เป็นลิงก์บางส่วนเพื่อเริ่มต้นการวิจัย
การตรวจสอบการรับส่งข้อมูลสำหรับสถานการณ์ LAN / WAN
Nagios
Nagios มีมานานแล้วดังนั้นจึงมีทั้งทดลองและทดสอบ จนถึงจุดหนึ่งมันเป็นแบบโอเพนซอร์สฟรี แต่ได้ก้าวเข้าสู่โซลูชันระดับองค์กรด้วยรูปแบบการให้สิทธิ์การใช้งานแบบชำระเงินเพื่อรองรับความต้องการของความซับซ้อนขององค์กร ดังนั้นก่อนที่จะวางแผนการเปิดตัวกับ Nagios โปรดตรวจสอบว่าเวอร์ชันลิขสิทธิ์โอเพนซอร์สจะตรงตามความต้องการของคุณหรือวางแผนการใช้จ่ายโดยคำนึงถึงงบประมาณขององค์กร
ซอฟต์แวร์ตรวจสอบการรับส่งข้อมูล Nagios แบบโอเพนซอร์สส่วนใหญ่สามารถพบได้ที่: https://www.nagios.org
สำหรับประวัติโดยสรุปของ Nagious นี่คือหน้าประวัติ Nagios อย่างเป็นทางการ: https://www.nagios.org/about/history/
ntopng
อีกเครื่องมือที่ดีที่ช่วยให้แบนด์วิดธ์และการตรวจสอบการเข้าชมผ่านทางเว็บกุยเรียกว่าntopng ntopngคล้ายกับยูทิลิตี้ Unix ntop และสามารถรวบรวมข้อมูลสำหรับ LAN หรือ WAN ทั้งหมด การจัดเตรียม web-gui สำหรับการดูแลระบบการกำหนดค่าและการสร้างแผนภูมิทำให้ง่ายต่อการใช้งานสำหรับแผนกไอทีทั้งหมด
เช่นเดียวกับ Nagious ntopng มีทั้งเวอร์ชันสำหรับองค์กรแบบโอเพ่นซอร์สและแบบชำระเงิน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับntopngกรุณาเยี่ยมชมเว็บไซต์:http://www.ntop.org/
ติดตั้ง Fedora EPEL Repository Packages Extra Packages สำหรับ Enterprise Linux
ในการเข้าถึงเครื่องมือที่จำเป็นสำหรับการตรวจสอบปริมาณการใช้งานเราจะต้องกำหนดค่าระบบ CentOS ของเราให้ใช้ที่เก็บ EPEL
ที่เก็บ EPEL ไม่ได้รับการดูแลหรือสนับสนุนอย่างเป็นทางการโดย CentOS อย่างไรก็ตามกลุ่มอาสาสมัคร Fedora Core ได้รับการดูแลเพื่อจัดการกับแพ็คเกจที่ผู้เชี่ยวชาญด้าน Enterprise Linux ใช้กันทั่วไปซึ่งไม่รวมอยู่ใน CentOS, Fedora Core หรือ Red Hat Linux Enterprise
Caution -
โปรดจำไว้ว่า EPEL Repository ไม่เป็นทางการสำหรับ CentOS และอาจทำลายความเข้ากันได้และฟังก์ชันการทำงานบนเซิร์ฟเวอร์ที่ใช้งานจริงที่มีการอ้างอิงทั่วไป ด้วยเหตุนี้จึงขอแนะนำให้ทดสอบบนเซิร์ฟเวอร์ที่ไม่ได้ใช้งานจริงที่ใช้บริการเดียวกันกับการใช้งานจริงก่อนที่จะปรับใช้บนกล่องที่สำคัญของระบบ
ข้อได้เปรียบที่ใหญ่ที่สุดของการใช้ EHEL Repository เหนือที่เก็บของบุคคลที่สามอื่น ๆ ที่มี CentOS คือเราสามารถมั่นใจได้ว่าไบนารีจะไม่แปดเปื้อน ถือเป็นแนวทางปฏิบัติที่ดีที่สุดที่จะไม่ใช้ที่เก็บจากแหล่งที่ไม่น่าเชื่อถือ
จากทั้งหมดที่กล่าวมา EPEL Repository อย่างเป็นทางการนั้นใช้ร่วมกับ CentOS มากจนสามารถติดตั้งได้ง่ายผ่าน YUM
[root@CentOS rdc]# yum -y install epel-release
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: repo1.dal.innoscale.net
* extras: repo1.dal.innoscale.net
* updates: mirror.hmc.edu
Resolving Dependencies
--> Running transaction check
---> Package epel-release.noarch 0:7-9 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
--{ condensed output }--
หลังจากติดตั้ง EPEL Repository เราจะต้องการอัปเดต
[root@CentOS rdc]# yum repolist
Loaded plugins: fastestmirror, langpacks
epel/x86_64/metalink
| 11 kB 00:00:00
epel
| 4.3 kB 00:00:00
(1/3): epel/x86_64/group_gz
| 170 kB 00:00:00
(2/3): epel/x86_64/updateinfo
| 753 kB 00:00:01
(3/3): epel/x86_64/primary_db
--{ condensed output }--
ณ จุดนี้ที่เก็บ EPEL ของเราควรได้รับการกำหนดค่าและพร้อมใช้งาน เริ่มต้นด้วยการติดตั้งnloadสำหรับการตรวจสอบแบนด์วิดท์ของอินเทอร์เฟซ
เครื่องมือที่เราจะเน้นในบทช่วยสอนนี้ ได้แก่ -
- nload
- ntop
- ifstst
- iftop
- vnstat
- หมูสุทธิ
- Wireshark
- TCP Dump
- Traceroute
ทั้งหมดนี้เป็นมาตรฐานสำหรับการตรวจสอบการรับส่งข้อมูลใน Linux Enterprises การใช้งานของแต่ละช่วงมีตั้งแต่ระดับง่ายไปจนถึงขั้นสูงดังนั้นเราจะพูดถึงเครื่องมือสั้น ๆ เช่น Wireshark และ TCP Dump เท่านั้น
ติดตั้งและใช้ nload
ด้วยการติดตั้งและกำหนดค่าที่เก็บ EPEL ของเราใน CentOS ตอนนี้เราควรจะสามารถติดตั้งและใช้งานnloadได้แล้ว ยูทิลิตี้นี้ออกแบบมาเพื่อทำแผนภูมิแบนด์วิดท์ต่ออินเทอร์เฟซแบบเรียลไทม์
เช่นเดียวกับการติดตั้งขั้นพื้นฐานอื่น ๆ ส่วนใหญ่มีการติดตั้งnloadผ่านตัวจัดการแพ็คเกจ YUM
[root@CentOS rdc]# yum -y install nload
Resolving Dependencies
--> Running transaction check
---> Package nload.x86_64 0:0.7.4-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
nload x86_64
0.7.4-4.el7 epel 70 k
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 70 k
Installed size: 176 k
Downloading packages:
--{ condensed output }--
ตอนนี้เราได้ติดตั้งnloadแล้วและใช้งานได้ค่อนข้างตรงไปตรงมา
[root@CentOS rdc]# nload enp0s5
nloadจะตรวจสอบอินเทอร์เฟซที่ระบุ ในกรณีนี้ enp0s5 อินเทอร์เฟซอีเธอร์เน็ตแบบเรียลไทม์จากเทอร์มินัลสำหรับโหลดทราฟฟิกเครือข่ายและการใช้แบนด์วิดท์ทั้งหมด
ตามที่เห็นnloadจะทำแผนภูมิข้อมูลทั้งขาเข้าและขาออกจากอินเทอร์เฟซที่ระบุพร้อมกับการแสดงทางกายภาพของกระแสข้อมูลด้วยเครื่องหมายแฮช "#"
ภาพหน้าจอที่ปรากฎเป็นของหน้าเว็บธรรมดาที่เต็มไปด้วยการรับส่งข้อมูลภูตพื้นหลัง
สวิตช์บรรทัดคำสั่งทั่วไปสำหรับnloadคือ -
คำสั่ง | หนังบู๊ |
---|---|
- ก | ช่วงเวลา |
-t | ช่วงเวลาอัปเดตเป็นมิลลิวินาทีค่าเริ่มต้นคือ 500 |
-ยู | ตั้งค่าการแสดงการวัดปริมาณการใช้งาน h |
-ยู | ตั้งค่าหน่วยวัดปริมาณการเข้า / ออกทั้งหมดเช่นเดียวกับ -u |
ไวยากรณ์มาตรฐานสำหรับ nload คือ -
nload [options] <interface>
หากไม่ได้ระบุอินเทอร์เฟซnloadจะคว้าอินเทอร์เฟซอีเทอร์เน็ตแรกโดยอัตโนมัติ ลองวัดข้อมูลทั้งหมดเข้า / ออกเป็นเมกะไบต์และความเร็วในการถ่ายโอนข้อมูลปัจจุบันเป็นเมกะบิต
[root@CentOS rdc]# nload -U M -u m
ข้อมูลที่เข้า / ออกอินเทอร์เฟซปัจจุบันวัดเป็นเมกะบิตต่อวินาทีและแต่ละแถว "Ttl" ซึ่งแสดงข้อมูลทั้งหมดเข้า / ออกจะแสดงเป็นเมกะไบต์
nloadมีประโยชน์สำหรับผู้ดูแลระบบในการดูปริมาณข้อมูลที่ส่งผ่านอินเทอร์เฟซและปริมาณข้อมูลที่เข้า / ออกในอินเทอร์เฟซที่ระบุ
หากต้องการดูอินเทอร์เฟซอื่น ๆ โดยไม่ต้องปิด nload เพียงใช้ปุ่มลูกศรซ้าย / ขวา การดำเนินการนี้จะวนไปตามอินเทอร์เฟซที่มีอยู่ทั้งหมดในระบบ
เป็นไปได้ที่จะตรวจสอบหลายอินเทอร์เฟซพร้อมกันโดยใช้สวิตช์-m -
[root@CentOS rdc]# nload -u K -U M -m lo -m enp0s5
โหลดการตรวจสอบสองอินเทอร์เฟซพร้อมกัน (lo และ enp0s5) -
systemd ได้เปลี่ยนวิธีจัดการบันทึกระบบสำหรับ CentOS Linux แทนที่จะใช้ daemon ทุกตัวบนระบบที่วางบันทึกในแต่ละตำแหน่งแทนที่จะใช้เครื่องมือเช่นtailหรือgrepเป็นวิธีหลักในการเรียงลำดับและกรองรายการบันทึกjournald ได้นำจุดเดียวของการดูแลระบบมาวิเคราะห์บันทึกของระบบ
ส่วนประกอบหลักที่อยู่เบื้องหลังการบันทึกsystemdได้แก่ journal, jounralctl และ journald.conf
journaldเป็นภูตเข้าสู่ระบบหลักและมีการกำหนดค่าโดยการแก้ไขjournald.confขณะjournalctlถูกนำมาใช้ในการวิเคราะห์เหตุการณ์ที่บันทึกไว้โดยjournald
เหตุการณ์ที่บันทึกโดยjournaldรวมถึงเหตุการณ์เคอร์เนลกระบวนการผู้ใช้และเซอร์วิส daemon
ตั้งค่าโซนเวลาของระบบที่ถูกต้อง
ก่อนใช้journalctlเราต้องตรวจสอบให้แน่ใจว่าเวลาระบบของเราถูกตั้งค่าเป็นเวลาที่ถูกต้อง การทำเช่นนี้เราต้องการที่จะใช้timedatectl
มาตรวจสอบเวลาของระบบปัจจุบันกัน
[root@centos rdc]# timedatectl status
Local time: Mon 2017-03-20 00:14:49 MDT
Universal time: Mon 2017-03-20 06:14:49 UTC
RTC time: Mon 2017-03-20 06:14:49
Time zone: America/Denver (MDT, -0600)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: yes
Last DST change: DST began at
Sun 2017-03-12 01:59:59 MST
Sun 2017-03-12 03:00:00 MDT
Next DST change: DST ends (the clock jumps one hour backwards) at
Sun 2017-11-05 01:59:59 MDT
Sun 2017-11-05 01:00:00 MST
[root@centos rdc]#
ขณะนี้ระบบถูกต้องตามเขตเวลาท้องถิ่น หากระบบของคุณไม่ใช่ให้ตั้งค่าเขตเวลาที่ถูกต้อง หลังจากเปลี่ยนการตั้งค่าแล้ว CentOS จะคำนวณเขตเวลาออฟเซ็ตจากเขตเวลาปัจจุบันโดยอัตโนมัติปรับนาฬิการะบบทันที
มาแสดงรายการโซนเวลาทั้งหมดด้วยtimedatectl -
[root@centos rdc]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
Africa/Bissau
นั่นคือการส่งออกเกี่ยงจากtimedatectl รายการเขตเวลา หากต้องการค้นหาโซนเวลาเฉพาะที่คุณสามารถใช้คำสั่ง grep -
[root@centos rdc]# timedatectl list-timezones | grep -i "america/New_York"
America/New_York
[root@centos rdc]#
ป้ายกำกับที่ CentOS ใช้มักจะเป็น Country / Region โดยมีเครื่องหมายขีดล่างแทนการเว้นวรรค (New_York เทียบกับ "New York")
ตอนนี้มากำหนดเขตเวลาของเรา -
[root@centos rdc]# timedatectl set-timezone "America/New_York"
[root@centos rdc]# date
Mon Mar 20 02:28:44 EDT 2017
[root@centos rdc]#
นาฬิการะบบของคุณควรปรับเวลาโดยอัตโนมัติ
ใช้ journalctl เพื่อวิเคราะห์บันทึก
บรรทัดคำสั่งทั่วไปจะสลับเมื่อใช้journalctl -
สวิตซ์ | หนังบู๊ |
---|---|
-k | แสดงเฉพาะข้อความเคอร์เนล |
-ยู | แสดงรายการตามหน่วยเฉพาะ (httpd, sshd, ฯลฯ ... ) |
- ข | เริ่มต้นการชดเชยฉลาก |
-o | บันทึกรูปแบบผลลัพธ์ |
-p | กรองตามประเภทบันทึก (ชื่อหรือหมายเลข) |
-F | ชื่อฟิลด์หรือค่าฟิลด์ |
--utc | เวลาในการชดเชย UTC |
--ตั้งแต่ | กรองตามกรอบเวลา |
ตรวจสอบบันทึกการบูต
ขั้นแรกเราจะตรวจสอบและกำหนดค่าบันทึกการบูตใน CentOS Linux สิ่งแรกที่คุณจะสังเกตเห็นคือโดยค่าเริ่มต้น CentOS จะไม่เก็บบันทึกการบูตที่คงอยู่ตลอดเวลาในการรีบูต
ในการตรวจสอบบันทึกการบูตต่ออินสแตนซ์การรีบูตเราสามารถออกคำสั่งต่อไปนี้ -
[root@centos rdc]# journalctl --list-boots
-4 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-3 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-2 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-1 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
0 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:07:36 MDT
[root@centos rdc]#
หลังจากรีบูตระบบเราจะเห็นรายการอื่น
[root@centos rdc]# journalctl --list-boots
-5 bca6380a31a2463aa60ba551698455b5 Sun 2017-03-19 22:01:57 MDT—Sun 2017-03-19 22:11:02 MDT
-4 3aaa9b84f9504fa1a68db5b49c0c7208 Sun 2017-03-19 22:11:09 MDT—Sun 2017-03-19 22:15:03 MDT
-3 f80b231272bf48ffb1d2ce9f758c5a5f Sun 2017-03-19 22:15:11 MDT—Sun 2017-03-19 22:54:06 MDT
-2 a071c1eed09d4582a870c13be5984ed6 Sun 2017-03-19 22:54:26 MDT—Mon 2017-03-20 00:48:29 MDT
-1 9b4e6cdb43b14a328b1fa6448bb72a56 Mon 2017-03-20 00:48:38 MDT—Mon 2017-03-20 01:09:57 MDT
0 aa6aaf0f0f0d4fcf924e17849593d972 Mon 2017-03-20 01:10:07 MDT—Mon 2017-03-20 01:12:44 MDT
[root@centos rdc]#
ตอนนี้เรามาตรวจสอบอินสแตนซ์การบันทึกการบูตล่าสุด -
root@centos rdc]# journalctl -b -5
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Mon 2017-03-20 01:20:27 MDT. --
Mar 19 22:01:57 localhost.localdomain systemd-journal[97]: Runtime journal is using 8.0M
(max allowed 108.4M
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuset
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpu
Mar 19 22:01:57 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
Mar 19 22:01:57 localhost.localdomain kernel: Linux version 3.10.0514.6.2.el7.x86_64
([email protected].
Mar 19 22:01:57 localhost.localdomain kernel: Command line:
BOOT_IMAGE=/vmlinuz-3.10.0-514.6.2.el7.x86_64 ro
Mar 19 22:01:57 localhost.localdomain kernel: Disabled fast string operations
Mar 19 22:01:57 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
ด้านบนคือเอาต์พุตแบบย่อจากการบูตครั้งสุดท้ายของเรา นอกจากนี้เรายังสามารถอ้างอิงกลับไปที่บันทึกการบูตจากชั่วโมงวันสัปดาห์เดือนและปี อย่างไรก็ตามโดยค่าเริ่มต้น CentOS จะไม่เก็บบันทึกการบูตแบบต่อเนื่อง ในการเปิดใช้งานการจัดเก็บบันทึกการบูตอย่างต่อเนื่องเราจำเป็นต้องทำการเปลี่ยนแปลงการกำหนดค่าบางอย่าง -
- สร้างจุดจัดเก็บส่วนกลางสำหรับบันทึกการบูต
- ให้สิทธิ์ที่เหมาะสมกับโฟลเดอร์บันทึกใหม่
- กำหนดค่า journald.conf สำหรับการบันทึกแบบต่อเนื่อง
กำหนดค่า Boot Location สำหรับ Persistent Boot Logs
สถานที่เริ่มต้นjournaldจะต้องการที่จะเก็บบันทึกบูตถาวร/ var / log / วารสาร เนื่องจากสิ่งนี้ไม่มีอยู่ตามค่าเริ่มต้นมาสร้างมัน -
[root@centos rdc]# mkdir /var/log/journal
ตอนนี้ให้สิทธิ์เข้าถึงไดเร็กทอรีที่เหมาะสมjournald daemon -
systemd-tmpfiles --create --prefix /var/log/journal
สุดท้ายขอบอกว่าjournaldควรเก็บบันทึกการบูตแบบต่อเนื่อง ในกลุ่มหรือแก้ไขข้อความที่คุณชื่นชอบเปิด/etc/systemd/jounrald.conf"
# See journald.conf(5) for details.
[Journal]=Storage=peristent
บรรทัดที่เรามีความกังวลกับมีการจัดเก็บข้อมูล = ก่อนอื่นให้ลบความคิดเห็น#จากนั้นเปลี่ยนเป็นStorage = persistentดังภาพด้านบน บันทึกและรีบูตระบบ CentOS ของคุณและดูแลว่าควรจะมีรายการหลายรายการเมื่อทำงานjournalctl รายการรองเท้า
Note- รหัสเครื่องที่เปลี่ยนแปลงตลอดเวลาเช่นนี้จากผู้ให้บริการ VPS อาจทำให้journaldล้มเหลวในการจัดเก็บบันทึกการบูตแบบต่อเนื่อง มีวิธีแก้ปัญหามากมายสำหรับสถานการณ์ดังกล่าว วิธีที่ดีที่สุดคือการอ่านการแก้ไขปัจจุบันที่โพสต์ไปยังฟอรัม CentOS Admin มากกว่าทำตามคำแนะนำที่เชื่อถือได้จากผู้ที่พบวิธีแก้ปัญหา VPS ที่เป็นไปได้
ในการตรวจสอบบันทึกการบูตเฉพาะเราจำเป็นต้องได้รับแต่ละออฟเซ็ตโดยใช้journald --list - บูทออฟเซ็ตด้วยสวิตช์-b เพื่อตรวจสอบบันทึกการบูตครั้งที่สองที่เราใช้ -
journalctl -b -2
ค่าดีฟอลต์สำหรับ-b ที่ไม่มีการระบุออฟเซ็ตบันทึกการบูตจะเป็นบันทึกการบูตปัจจุบันเสมอหลังจากการรีบูตครั้งล่าสุด
วิเคราะห์บันทึกตามประเภทบันทึก
เหตุการณ์จากjournaldมีหมายเลขและแบ่งออกเป็น 7 ประเภทแยกกัน -
0 - emerg :: System is unusable
1 - alert :: Action must be taken immediatly
2 - crit :: Action is advised to be taken immediatly
3 - err :: Error effecting functionality of application
4 - warning :: Usually means a common issue that can affect security or usilbity
5 - info :: logged informtation for common operations
6 - debug :: usually disabled by default to troubleshoot functionality
ดังนั้นหากเราต้องการดูคำเตือนทั้งหมดสามารถออกคำสั่งต่อไปนี้ผ่านjournalctl -
[root@centos rdc]# journalctl -p 4
-- Logs begin at Sun 2017-03-19 22:01:57 MDT, end at Wed 2017-03-22 22:33:42 MDT. --
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: RSDP 00000000000f6a10 00024
(v02 PTLTD )
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: XSDT 0000000095eea65b 0005C
(v01 INTEL 440BX 06040000 VMW 01
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACP 0000000095efee73 000F4
(v04 INTEL 440BX 06040000 PTL 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: DSDT 0000000095eec749 1272A
(v01 PTLTD Custom 06040000 MSFT 03
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: FACS 0000000095efffc0 00040
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: BOOT 0000000095eec721 00028
(v01 PTLTD $SBFTBL$ 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: APIC 0000000095eeb8bd 00742 (v01 PTLTD ? APIC 06040000 LTP 00 Mar 19 22:01:57 localhost.localdomain kernel: ACPI: MCFG 0000000095eeb881 0003C (v01 PTLTD $PCITBL$ 06040000 LTP 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: SRAT 0000000095eea757 008A8
(v02 VMWARE MEMPLUG 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: HPET 0000000095eea71f 00038
(v01 VMWARE VMW HPET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: ACPI: WAET 0000000095eea6f7 00028
(v01 VMWARE VMW WAET 06040000 VMW 00
Mar 19 22:01:57 localhost.localdomain kernel: Zone ranges:
Mar 19 22:01:57 localhost.localdomain kernel: DMA [mem 0x000010000x00ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: DMA32 [mem 0x010000000xffffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Normal empty
Mar 19 22:01:57 localhost.localdomain kernel: Movable zone start for each node
Mar 19 22:01:57 localhost.localdomain kernel: Early memory node ranges
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x000010000x0009dfff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x001000000x95edffff]
Mar 19 22:01:57 localhost.localdomain kernel: node 0: [mem 0x95f000000x95ffffff]
Mar 19 22:01:57 localhost.localdomain kernel: Built 1 zonelists in Node order,
mobility grouping on. Total pages: 60
Mar 19 22:01:57 localhost.localdomain kernel: Policy zone: DMA32
Mar 19 22:01:57 localhost.localdomain kernel: ENERGY_PERF_BIAS: Set to
'normal', was 'performance'
ด้านบนแสดงคำเตือนทั้งหมดในช่วง 4 วันที่ผ่านมาในระบบ
วิธีใหม่ในการดูและอ่านบันทึกด้วย systemd ใช้เวลาฝึกฝนและค้นคว้าเพียงเล็กน้อยเพื่อให้คุ้นเคย อย่างไรก็ตามด้วยรูปแบบเอาต์พุตที่แตกต่างกันและข้อสังเกตโดยเฉพาะอย่างยิ่งในการสร้างบันทึก daemon แบบแพ็กเกจทั้งหมดเป็นแบบสากลจึงควรค่าแก่การยอมรับ journaldมีความยืดหยุ่นและประสิทธิภาพสูงกว่าวิธีการวิเคราะห์บันทึกแบบเดิม
ก่อนที่จะสำรวจวิธีการเฉพาะสำหรับ CentOS สำหรับการปรับใช้แผนสำรองมาตรฐานก่อนอื่นเรามาพูดถึงข้อควรพิจารณาทั่วไปสำหรับนโยบายการสำรองข้อมูลระดับมาตรฐาน สิ่งแรกที่เราต้องการทำความคุ้นเคยคือ3-2-1 backup rule.
3-2-1 กลยุทธ์การสำรองข้อมูล
ทั่วทั้งอุตสาหกรรมคุณมักจะได้ยินคำว่าโมเดลการสำรองข้อมูล 3-2-1 นี่เป็นแนวทางที่ดีมากในการดำเนินชีวิตโดยใช้แผนสำรอง 3-2-1 กำหนดไว้ดังนี้:3สำเนาข้อมูล ตัวอย่างเช่นเราอาจมีสำเนาการทำงาน สำเนาวางลงบนเซิร์ฟเวอร์ CentOS ที่ออกแบบมาสำหรับการสำรองโดยใช้ rsync และหมุนเวียนการสำรองข้อมูล USB นอกสถานที่ทำจากข้อมูลบนเซิร์ฟเวอร์สำรอง2สื่อสำรองที่แตกต่างกัน ในกรณีนี้เราจะมีสื่อสำรองข้อมูลที่แตกต่างกันสามแบบ ได้แก่ สำเนาที่ใช้งานได้บน SSD ของแล็ปท็อปหรือเวิร์กสเตชันข้อมูลเซิร์ฟเวอร์ CentOS บน RADI6 Array และการสำรองข้อมูลนอกสถานที่ใส่ไดรฟ์ USB1สำเนาข้อมูลนอกสถานที่ เรากำลังหมุนไดรฟ์ USB นอกสถานที่เป็นประจำทุกคืน อีกแนวทางที่ทันสมัยอาจเป็นผู้ให้บริการสำรองข้อมูลบนคลาวด์
การกู้คืนระบบ
โลหะเปลือยเรียกคืนแผนเป็นเพียงแผนวางโดยผู้ดูแลระบบ CentOS เพื่อให้ได้ระบบที่สำคัญออนไลน์ที่มีข้อมูลทั้งหมดครบถ้วน สมมติว่าระบบล้มเหลว 100% และสูญเสียฮาร์ดแวร์ระบบที่ผ่านมาทั้งหมดผู้ดูแลระบบจะต้องมีแผนเพื่อให้ได้ช่วงเวลาพร้อมใช้งานด้วยข้อมูลผู้ใช้ที่ยังคงอยู่โดยมีค่าใช้จ่ายในการหยุดทำงานน้อยที่สุด เคอร์เนลเสาหินที่ใช้ใน Linux ทำให้การคืนค่าโลหะเปลือยโดยใช้อิมเมจระบบง่ายกว่า Windows มาก โดยที่ Windows ใช้สถาปัตยกรรมไมโครเคอร์เนล
โดยปกติแล้วการกู้คืนข้อมูลแบบเต็มและการกู้คืนแบบเปลือยจะทำได้โดยใช้วิธีการหลายอย่างรวมถึงการทำงานการกำหนดค่าดิสก์อิมเมจการผลิตของเซิร์ฟเวอร์ที่ใช้งานหลักการสำรองข้อมูลซ้ำซ้อนของข้อมูลผู้ใช้ที่เป็นไปตามกฎ 3-2-1 แม้แต่ไฟล์ที่มีความละเอียดอ่อนบางไฟล์ที่อาจถูกจัดเก็บไว้ในตู้เซฟที่ปลอดภัยและกันไฟได้โดยมีเจ้าหน้าที่ของ บริษัท ที่เชื่อถือได้เข้าถึงได้
แผนการคืนค่าโลหะเปลือยแบบหลายเฟสและการกู้คืนข้อมูลโดยใช้เครื่องมือ CentOS ดั้งเดิมอาจประกอบด้วย -
dd เพื่อสร้างและกู้คืนดิสก์อิมเมจการผลิตของเซิร์ฟเวอร์ที่กำหนดค่าไว้
rsync เพื่อทำการสำรองข้อมูลส่วนเพิ่มของข้อมูลผู้ใช้ทั้งหมด
tar & gzip เพื่อจัดเก็บข้อมูลสำรองที่เข้ารหัสของไฟล์ด้วยรหัสผ่านและบันทึกย่อจากผู้ดูแลระบบ โดยทั่วไปสิ่งนี้สามารถใส่ลงในไดรฟ์ USB เข้ารหัสและล็อกไว้ในตู้นิรภัยที่ผู้จัดการอาวุโสเข้าถึงได้ นอกจากนี้สิ่งนี้ช่วยให้มั่นใจได้ว่าคนอื่นจะรู้ข้อมูลรับรองความปลอดภัยที่สำคัญหากผู้ดูแลระบบปัจจุบันชนะลอตเตอรีและหายตัวไปที่เกาะที่มีแดด
หากระบบล่มเนื่องจากฮาร์ดแวร์ล้มเหลวหรือภัยพิบัติต่อไปนี้จะเป็นขั้นตอนต่างๆของการกู้คืนการดำเนินการ -
สร้างเซิร์ฟเวอร์ที่ใช้งานได้ด้วยอิมเมจโลหะเปล่าที่กำหนดค่าไว้
กู้คืนข้อมูลไปยังเซิร์ฟเวอร์ที่ใช้งานได้จากการสำรองข้อมูล
มีสิทธิ์เข้าถึงข้อมูลประจำตัวที่จำเป็นในการดำเนินการสองครั้งแรก
ใช้ rsync สำหรับการสำรองข้อมูลระดับไฟล์
rsyncเป็นยูทิลิตี้ที่ยอดเยี่ยมสำหรับการซิงค์ไดเร็กทอรีของไฟล์ทั้งในเครื่องหรือไปยังเซิร์ฟเวอร์อื่น rsyncถูกใช้โดยผู้ดูแลระบบเป็นเวลาหลายปีดังนั้นจึงมีการปรับปรุงอย่างมากเพื่อจุดประสงค์ในการสำรองข้อมูล ในความเห็นของผู้เขียนหนึ่งในคุณสมบัติที่ดีที่สุดของการซิงค์คือความสามารถในการเขียนสคริปต์จากบรรทัดคำสั่ง
ในบทช่วยสอนนี้เราจะพูดถึง rsync ในรูปแบบต่างๆ -
- สำรวจและพูดคุยเกี่ยวกับตัวเลือกทั่วไปบางอย่าง
- สร้างการสำรองข้อมูลในเครื่อง
- สร้างการสำรองข้อมูลระยะไกลผ่าน SSH
- กู้คืนข้อมูลสำรองในเครื่อง
rsyncได้รับการตั้งชื่อตามวัตถุประสงค์: Remote Syncและทั้งมีประสิทธิภาพและยืดหยุ่นในการใช้งาน
ต่อไปนี้เป็นการสำรองข้อมูลระยะไกลrsyncพื้นฐานผ่าน ssh -
MiNi:~ rdc$ rsync -aAvz --progress ./Desktop/ImportantStuff/
[email protected]:home/rdc/ Documents/RemoteStuff/
[email protected]'s password:
sending incremental file list
6,148 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=23/25)
2017-02-14 16_26_47-002 - Veeam_Architecture001.png
33,144 100% 31.61MB/s 0:00:00 (xfr#2, to-chk=22/25)
A Guide to the WordPress REST API | Toptal.pdf
892,406 100% 25.03MB/s 0:00:00 (xfr#3, to-chk=21/25)
Rick Cardon Technologies, LLC..webloc
77 100% 2.21kB/s 0:00:00 (xfr#4, to-chk=20/25)
backbox-4.5.1-i386.iso
43,188,224 1% 4.26MB/s 0:08:29
sent 2,318,683,608 bytes received 446 bytes 7,302,941.90 bytes/sec
total size is 2,327,091,863 speedup is 1.00
MiNi:~ rdc$
การซิงค์ต่อไปนี้ส่งข้อมูลเกือบ 2.3GB ผ่าน LAN ของเรา ความสวยงามของ rsync คือการทำงานแบบเพิ่มขึ้นในระดับบล็อกแบบไฟล์ต่อไฟล์ ซึ่งหมายความว่าหากเราเปลี่ยนตัวอักษรเพียงสองตัวในไฟล์ข้อความขนาด 1MB จะมีการถ่ายโอนเพียงหนึ่งหรือสองบล็อกข้าม LAN ในการซิงค์ครั้งถัดไป!
นอกจากนี้ฟังก์ชันที่เพิ่มขึ้นยังสามารถปิดใช้งานได้เพื่อเพิ่มแบนด์วิดท์เครือข่ายที่ใช้สำหรับการใช้งาน CPU น้อยลง สิ่งนี้อาจพิสูจน์ได้ว่าแนะนำหากคัดลอกไฟล์ฐานข้อมูล 10MB ทุก ๆ 10 นาทีบน Backup-Lan เฉพาะ 1Gb เหตุผลคือสิ่งเหล่านี้จะมีการเปลี่ยนแปลงอยู่เสมอและจะส่งสัญญาณเพิ่มขึ้นทุกๆ 10 นาทีและอาจต้องเสียภาษีโหลดของ CPU ระยะไกล เนื่องจากโหลดการถ่ายโอนทั้งหมดจะไม่เกิน 5 นาทีเราอาจต้องการเพียงแค่ซิงค์ไฟล์ฐานข้อมูลให้ครบถ้วน
ต่อไปนี้เป็นสวิตช์ทั่วไปที่ใช้rsync -
rsync syntax:
rsync [options] [local path] [[remote host:remote path] or [target path
สวิตซ์ | หนังบู๊ |
---|---|
- ก | โหมดเก็บถาวรและถือว่า -r, -p, -t, -g, -l |
-d | ซิงค์เฉพาะไดเร็กทอรีทรีไม่มีไฟล์ |
- ร | เรียกซ้ำในไดเรกทอรี |
-l | คัดลอกลิงก์สัญลักษณ์เป็นลิงก์สัญลักษณ์ |
-p | รักษาสิทธิ์ |
- ก | รักษากลุ่ม |
-v | เอาต์พุต Verbose |
-z | บีบอัดผ่านลิงค์เครือข่าย |
-X | รักษาคุณลักษณะเพิ่มเติม |
- ก | รักษา ACL |
-t | รักษาการประทับเวลา |
- ว | ถ่ายโอนไฟล์ทั้งหมดไม่ใช่บล็อกที่เพิ่มขึ้น |
-ยู | อย่าเขียนทับไฟล์ตามเป้าหมาย |
- ความคืบหน้า | แสดงความคืบหน้าการโอน |
--ลบ | ลบไฟล์เก่ากว่าเป้าหมาย |
--max-size = XXX | ขนาดไฟล์สูงสุดที่จะซิงค์ |
เมื่อใดควรใช้ rsync
ความชอบส่วนตัวของฉันสำหรับrsyncคือเมื่อสำรองไฟล์จากโฮสต์ต้นทางไปยังโฮสต์เป้าหมาย ตัวอย่างเช่นไดเรกทอรีบ้านทั้งหมดสำหรับการกู้คืนข้อมูลหรือแม้กระทั่งนอกสถานที่และในระบบคลาวด์สำหรับการกู้คืนระบบ
การสำรองข้อมูลในเครื่องด้วย rsync
เราได้เห็นวิธีการถ่ายโอนไฟล์จากโฮสต์หนึ่งไปยังอีกโฮสต์หนึ่งแล้ว สามารถใช้วิธีเดียวกันนี้เพื่อซิงค์ไดเร็กทอรีและไฟล์ในเครื่อง
มาทำการสำรองข้อมูลเพิ่มเติมด้วยตนเองของ/ etc /ในไดเร็กทอรีผู้ใช้รูทของเรา
ขั้นแรกเราต้องสร้างไดเร็กทอรี off ~ / root สำหรับการสำรองข้อมูลที่ซิงค์ -
[root@localhost rdc]# mkdir /root/etc_baks
จากนั้นตรวจสอบให้แน่ใจว่ามีเนื้อที่ว่างบนดิสก์เพียงพอ
[root@localhost rdc]# du -h --summarize /etc/
49M /etc/
[root@localhost rdc]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/cl-root 43G 15G 28G 35% /
เราเหมาะสำหรับการซิงค์ไดเรกทอรี / etc / ทั้งหมดของเรา -
rsync -aAvr /etc/ /root/etc_baks/
ไดเร็กทอรี / etc / ที่ซิงค์ของเรา -
[root@localhost etc_baks]# ls -l ./
total 1436
drwxr-xr-x. 3 root root 101 Feb 1 19:40 abrt
-rw-r--r--. 1 root root 16 Feb 1 19:51 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Feb 27 19:06 aliases.db
drwxr-xr-x. 2 root root 51 Feb 1 19:41 alsa
drwxr-xr-x. 2 root root 4096 Feb 27 17:11 alternatives
-rw-------. 1 root root 541 Mar 31 2016 anacrontab
-rw-r--r--. 1 root root 55 Nov 4 12:29 asound.conf
-rw-r--r--. 1 root root 1 Nov 5 14:16 at.deny
drwxr-xr-x. 2 root root 32 Feb 1 19:40 at-spi2
--{ condensed output }--
ทีนี้มาทำ rsync แบบเพิ่มหน่วย -
[root@localhost etc_baks]# rsync -aAvr --progress /etc/ /root/etc_baks/
sending incremental file list
test_incremental.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=1145/1282)
sent 204620 bytes received 2321 bytes 413882.00 bytes/sec
total size is 80245040 speedup is 387.77
[root@localhost etc_baks]#
คัดลอกเฉพาะไฟล์test_incremental.txtของเรา
การสำรองข้อมูลส่วนต่างระยะไกลด้วย rsync
มาทำการสำรองข้อมูล rsync เริ่มต้นของเราไปยังเซิร์ฟเวอร์ที่มีการใช้แผนสำรอง ตัวอย่างนี้กำลังสำรองโฟลเดอร์บน Mac OS X Workstation ไปยังเซิร์ฟเวอร์ CentOS อีกแง่มุมที่ยอดเยี่ยมของrsyncคือสามารถใช้กับแพลตฟอร์มใด ๆ ที่ rsync ได้รับการพอร์ต
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
A Guide to the WordPress REST API | Toptal.pdf
Rick Cardon Tech LLC.webloc
VeeamDiagram.png
backbox-4.5.1-i386.iso
dhcp_admin_script_update.py
DDWRT/
DDWRT/.DS_Store
DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
DDWRT/ddwrt_mod_notes.docx
DDWRT/factory-to-ddwrt.bin
open_ldap_config_notes/
open_ldap_config_notes/ldap_directory_a.png
open_ldap_config_notes/open_ldap_notes.txt
perl_scripts/
perl_scripts/mysnmp.pl
php_scripts/
php_scripts/chunked.php
php_scripts/gettingURL.php
sent 2,318,281,023 bytes received 336 bytes 9,720,257.27 bytes/sec
total size is 2,326,636,892 speedup is 1.00
MiNi:~ rdc$
ขณะนี้เราได้สำรองข้อมูลโฟลเดอร์จากเวิร์กสเตชันไปยังเซิร์ฟเวอร์ที่เรียกใช้โวลุ่ม RAID6 พร้อมด้วยสื่อการกู้คืนระบบที่หมุนเก็บไว้นอกสถานที่ การใช้ rsync ทำให้เรามีการสำรองข้อมูลมาตรฐาน 3-2-1 โดยมีเซิร์ฟเวอร์เพียงเครื่องเดียวที่มีดิสก์อาร์เรย์ราคาแพงและการสำรองข้อมูลที่แตกต่างกัน
ตอนนี้เรามาทำการสำรองข้อมูลในโฟลเดอร์เดียวกันโดยใช้ rsync หลังจากเพิ่มไฟล์ใหม่ชื่อtest_file.txtแล้ว
MiNi:~ rdc$ rsync -aAvz Desktop/ImportanStuff/
[email protected]:Documents/RemoteStuff
[email protected]'s password:
sending incremental file list
./
test_file.txt
sent 814 bytes received 61 bytes 134.62 bytes/sec
total size is 2,326,636,910 speedup is 2,659,013.61
MiNi:~ rdc$
ที่คุณสามารถดูเฉพาะไฟล์ใหม่จะถูกส่งไปยังเซิร์ฟเวอร์ผ่านrsync การเปรียบเทียบความแตกต่างเกิดขึ้นแบบไฟล์ต่อไฟล์
สิ่งที่ควรทราบมีดังนี้: นี่เป็นการคัดลอกไฟล์ใหม่เท่านั้น: test_file.txt เนื่องจากเป็นไฟล์เดียวที่มีการเปลี่ยนแปลง rsync ใช้ ssh เราไม่จำเป็นต้องใช้บัญชีรูทของเราบนเครื่องใด ๆ
rsync ที่เรียบง่ายทรงพลังและมีประสิทธิภาพเหมาะอย่างยิ่งสำหรับการสำรองข้อมูลทั้งโฟลเดอร์และโครงสร้างไดเร็กทอรี อย่างไรก็ตามrsyncด้วยตัวเองไม่ได้ทำให้กระบวนการเป็นไปโดยอัตโนมัติ นี่คือที่ที่เราต้องขุดลงไปในกล่องเครื่องมือของเราและค้นหาเครื่องมือที่ดีที่สุดเล็กและเรียบง่ายสำหรับงาน
ในการสำรองข้อมูล rsync โดยอัตโนมัติด้วยcronjobsจำเป็นอย่างยิ่งที่ผู้ใช้ SSH จะต้องตั้งค่าโดยใช้คีย์ SSH สำหรับการตรวจสอบสิทธิ์ สิ่งนี้รวมกับ cronjobs ทำให้ rsync ทำได้โดยอัตโนมัติในช่วงเวลาที่กำหนด
ใช้ DD สำหรับ Block-by-Block Bare Metal Recovery Images
DD เป็นยูทิลิตี้ของ Linux ที่มีมาตั้งแต่รุ่งอรุณของเคอร์เนล Linux ที่พบกับ GNU Utilities
ddในแง่ที่ง่ายที่สุดคัดลอกภาพของพื้นที่ดิสก์ที่เลือก จากนั้นให้ความสามารถในการคัดลอกบล็อกที่เลือกของฟิสิคัลดิสก์ ดังนั้นหากคุณไม่มีการสำรองข้อมูลเมื่อ dd เขียนบนดิสก์บล็อกทั้งหมดจะถูกแทนที่ การสูญเสียข้อมูลก่อนหน้านี้เกินความสามารถในการกู้คืนสำหรับการกู้คืนข้อมูลระดับมืออาชีพที่มีราคาสูง
กระบวนการทั้งหมดในการสร้างอิมเมจระบบที่สามารถบู๊ตได้ด้วยddมีดังนี้ -
- บูตจากเซิร์ฟเวอร์ CentOS ด้วยการแจกจ่ายลินุกซ์ที่บูตได้
- ค้นหาการกำหนดของดิสก์สำหรับบู๊ตที่จะอิมเมจ
- กำหนดตำแหน่งที่จะจัดเก็บอิมเมจการกู้คืน
- ค้นหาขนาดบล็อกที่ใช้บนดิสก์ของคุณ
- เริ่มการดำเนินการ dd image
ในบทช่วยสอนนี้เพื่อประโยชน์ของเวลาและความเรียบง่ายเราจะสร้างอิมเมจ ISO ของบันทึกมาสเตอร์บูตจากเครื่องเสมือน CentOS จากนั้นเราจะจัดเก็บภาพนี้ไว้นอกสถานที่ ในกรณีที่ MBR ของเราเสียหายและจำเป็นต้องกู้คืนกระบวนการเดียวกันนี้สามารถนำไปใช้กับดิสก์หรือพาร์ติชันที่สามารถบู๊ตได้ทั้งหมด อย่างไรก็ตามเวลาและพื้นที่ว่างบนดิสก์ที่จำเป็นต้องใช้จริงๆสำหรับบทช่วยสอนนี้
ขอแนะนำให้ผู้ดูแลระบบ CentOS มีความเชี่ยวชาญในการกู้คืนดิสก์ / พาร์ติชันที่สามารถบู๊ตได้อย่างสมบูรณ์ในสภาพแวดล้อมการทดสอบและทำการกู้คืนโลหะเปล่า สิ่งนี้จะลดความกดดันลงอย่างมากเมื่อในที่สุดก็ต้องฝึกปฏิบัติให้สำเร็จในสถานการณ์ชีวิตจริงกับผู้จัดการและผู้ใช้ปลายทางอีกไม่กี่โหลที่นับเวลาหยุดทำงาน ในกรณีเช่นนี้ 10 นาทีในการค้นหาสิ่งต่าง ๆ อาจดูเหมือนชั่วนิรันดร์และทำให้เหงื่อออก
Note- เมื่อใช้ dd อย่าลืมสับสนระหว่างแหล่งที่มาและปริมาณเป้าหมาย คุณสามารถทำลายข้อมูลและเซิร์ฟเวอร์ที่บูตได้โดยคัดลอกตำแหน่งสำรองของคุณไปยังไดรฟ์สำหรับเริ่มระบบ หรืออาจแย่กว่านั้นคือทำลายข้อมูลตลอดไปโดยการคัดลอกข้อมูลในระดับที่ต่ำมากด้วย DD
ต่อไปนี้เป็นสวิตช์บรรทัดคำสั่งทั่วไปและพารามิเตอร์สำหรับdd -
สวิตซ์ | หนังบู๊ |
---|---|
ถ้า = | ในไฟล์หรือแหล่งที่จะคัดลอก |
ของ = | ออกไฟล์หรือสำเนาของไฟล์ใน |
bs | กำหนดขนาดบล็อกอินพุตและเอาต์พุต |
obs | กำหนดขนาดบล็อกไฟล์เอาต์พุต |
ibs | กำหนดขนาดบล็อกไฟล์อินพุต |
นับ | กำหนดจำนวนบล็อกที่จะคัดลอก |
Conv | ตัวเลือกพิเศษเพื่อเพิ่มสำหรับการถ่ายภาพ |
Noerror | อย่าหยุดประมวลผลข้อผิดพลาด |
ซิงค์ | วางบล็อกอินพุตที่ไม่ได้ติดตั้งไว้ในกรณีที่เกิดข้อผิดพลาดหรือไม่ตรงแนว |
Note on block size- ขนาดบล็อกเริ่มต้นสำหรับ dd คือ 512 ไบต์ นี่คือขนาดบล็อกมาตรฐานของฮาร์ดดิสก์ไดรฟ์ความหนาแน่นต่ำ HDD ที่มีความหนาแน่นสูงขึ้นในปัจจุบันได้เพิ่มขนาดบล็อกเป็น 4096 ไบต์ (4kB) เพื่อให้รองรับดิสก์ตั้งแต่ 1TB ขึ้นไป ดังนั้นเราต้องการตรวจสอบขนาดบล็อกดิสก์ก่อนที่จะใช้ dd กับฮาร์ดดิสก์รุ่นใหม่ที่มีความจุสูงกว่า
สำหรับบทช่วยสอนนี้แทนที่จะทำงานบนเซิร์ฟเวอร์ที่ใช้งานจริงด้วยddเราจะใช้การติดตั้ง CentOS ที่ทำงานใน VMWare เราจะกำหนดค่า VMWare ให้บูตอิมเมจ ISO ของ Linux ที่สามารถบู๊ตได้แทนที่จะทำงานกับ USB Stick ที่สามารถบู๊ตได้
ครั้งแรกที่เราจะต้องดาวน์โหลดภาพ CentOS สิทธิ: CentOS Gnome ISO นี่คือเกือบ 3GB และขอแนะนำให้เก็บสำเนาไว้เสมอสำหรับการสร้างธัมบ์ไดรฟ์ USB ที่สามารถบู๊ตได้และบูตเข้าสู่การติดตั้งเซิร์ฟเวอร์เสมือนสำหรับการแก้ไขปัญหาและภาพโลหะเปลือย
Linux distros อื่น ๆ ที่สามารถบู๊ตได้ก็ใช้งานได้เช่นกัน Linux Mint สามารถใช้สำหรับ ISO ที่บูตได้เนื่องจากมีการสนับสนุนฮาร์ดแวร์ที่ยอดเยี่ยมและเครื่องมือดิสก์ GUI ที่ขัดเงาสำหรับการบำรุงรักษา
สามารถดาวน์โหลดอิมเมจสำหรับบูต CentOS GNOME Live ได้จาก: http://buildlogs.centos.org/rolling/7/isos/x86_64/CentOS-7-x86_64-LiveGNOME.iso
มากำหนดค่าการติดตั้ง VMWare Workstation ของเราให้บูตจากอิมเมจที่บูตได้ของ Linux ขั้นตอนนี้ใช้สำหรับ VMWare บน OS X อย่างไรก็ตามมีความคล้ายคลึงกันใน VMWare Workstation บน Linux, Windows และแม้แต่ Virtual Box
Note- การใช้โซลูชันเดสก์ท็อปเสมือนเช่น Virtual Box หรือ VMWare Workstation เป็นวิธีที่ยอดเยี่ยมในการตั้งค่าสถานการณ์ในห้องปฏิบัติการสำหรับการเรียนรู้งานการดูแลระบบ CentOS ให้ความสามารถในการติดตั้งการติดตั้ง CentOS หลายตัวโดยแทบไม่มีการกำหนดค่าฮาร์ดแวร์ที่ให้บุคคลนั้นมุ่งเน้นไปที่การดูแลระบบและแม้แต่บันทึกสถานะเซิร์ฟเวอร์ก่อนทำการเปลี่ยนแปลง
ก่อนอื่นให้กำหนดค่า cd-rom เสมือนและแนบอิมเมจ ISO ของเราเพื่อบูตแทนการติดตั้งเซิร์ฟเวอร์เสมือน CentOS -
ตอนนี้ตั้งค่าดิสก์เริ่มต้น -
ตอนนี้เมื่อบูตเครื่องเสมือนของเราจะบูตจากอิมเมจ ISO ที่บูตได้ของ CentOS และอนุญาตให้เข้าถึงไฟล์บนเซิร์ฟเวอร์ Virtual CentOS ที่กำหนดค่าไว้ก่อนหน้านี้
ลองตรวจสอบดิสก์ของเราเพื่อดูว่าเราต้องการคัดลอก MBR จากที่ใด (เอาต์พุตแบบย่อเป็นดังนี้)
MiNt ~ # fdisk -l
Disk /dev/sda: 60 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
เราได้ตั้งอยู่ทั้งดิสก์ทางกายภาพของเรา: SDAและSDB แต่ละบล็อกมีขนาด 512 ไบต์ ดังนั้นตอนนี้เราจะเรียกใช้คำสั่งddเพื่อคัดลอก 512 ไบต์แรกสำหรับ MBR ของเราบน SDA1
วิธีที่ดีที่สุดคือ -
[root@mint rdc]# dd if=/dev/sda bs=512 count=1 | gzip -c >
/mnt/sdb/images/mbr.iso.gz
1+0 records in
1+0 records out
512 bytes copied, 0.000171388 s, 3.0 MB/s
[root@mint rdc]# ls /mnt/sdb/
mbr-iso.gz
[root@mint rdc]#
เช่นเดียวกับที่เรามีภาพเต็มของบันทึกการบูตหลัก หากเรามีพื้นที่เพียงพอสำหรับอิมเมจไดรฟ์สำหรับบูตเราสามารถสร้างอิมเมจสำหรับบูตระบบแบบเต็มได้อย่างง่ายดาย
dd if=/dev/INPUT/DEVICE-NAME-HERE conv=sync,noerror bs=4K | gzip -c >
/mnt/sdb/boot-server-centos-image.iso.gz
แปลง = ซิงค์จะใช้เมื่อไบต์จะต้องสอดคล้องสำหรับสื่อทางกายภาพ ในกรณีนี้ dd อาจได้รับข้อผิดพลาดหากไม่ได้อ่านการจัดแนว 4K ที่แน่นอน (พูดว่า ... ไฟล์ที่มีขนาดเพียง 3K แต่ต้องใช้บล็อก 4K ขั้นต่ำเดียวบนดิสก์หรือมีเพียงข้อผิดพลาดในการอ่านและ dd ไม่สามารถอ่านไฟล์ได้) ดังนั้นdd ที่มีConv = sync, noerrorจะเติม 3K ด้วยข้อมูลเล็กน้อย แต่มีประโยชน์ไปยังสื่อทางกายภาพในการจัดแนวบล็อก 4K ในขณะที่ไม่แสดงข้อผิดพลาดที่อาจยุติการดำเนินการขนาดใหญ่
เมื่อทำงานกับข้อมูลจากดิสก์เรามักต้องการรวม: conv = sync, noerrorพารามิเตอร์
นี่เป็นเพียงเพราะดิสก์ไม่ใช่สตรีมเช่นข้อมูล TCP ประกอบด้วยบล็อกที่จัดเรียงตามขนาดที่กำหนด ตัวอย่างเช่นหากเรามีบล็อก 512 ไบต์ไฟล์ที่มีขนาดเพียง 300 ไบต์ยังคงต้องการพื้นที่ดิสก์เต็ม 512 ไบต์ (อาจเป็น 2 บล็อกสำหรับข้อมูล inode เช่นสิทธิ์และข้อมูลระบบไฟล์อื่น ๆ )
ใช้ gzip และ tar สำหรับ Secure Storage
gzip และ tar เป็นสองยูทิลิตี้ที่ผู้ดูแลระบบ CentOS ต้องคุ้นเคยกับการใช้งาน มีการใช้งานมากกว่าการขยายไฟล์เก็บถาวร
ใช้ Gnu Tar ใน CentOS Linux
Tar เป็นยูทิลิตี้การเก็บถาวรที่คล้ายกับwinrarบน Windows ชื่อTape Archiveย่อว่าtarสรุปยูทิลิตี้ได้ดีทีเดียว tarจะนำไฟล์และวางไว้ในที่เก็บถาวรเพื่อความสะดวกในเชิงตรรกะ ดังนั้นแทนที่จะเป็นไฟล์หลายสิบไฟล์ที่เก็บไว้ใน / etc เราก็สามารถ "tar" ลงในไฟล์เก็บถาวรเพื่อความสะดวกในการสำรองและจัดเก็บข้อมูล
tarเป็นมาตรฐานในการจัดเก็บไฟล์ที่เก็บถาวรบน Unix และ Linux มาหลายปีแล้ว ดังนั้นการใช้ tar ร่วมกับgzipหรือbzipจึงถือเป็นแนวทางปฏิบัติที่ดีที่สุดสำหรับไฟล์เก็บถาวรในแต่ละระบบ
ต่อไปนี้เป็นรายการสวิตช์บรรทัดคำสั่งทั่วไปและตัวเลือกที่ใช้กับ tar -
สวิตซ์ | หนังบู๊ |
---|---|
-ค | สร้างไฟล์. tar ใหม่ |
-ค | แยกไปยังไดเร็กทอรีอื่น |
-j | ใช้การบีบอัด bzip2 |
-z | ใช้การบีบอัด gzip |
-v | Verbose แสดงความคืบหน้าในการเก็บถาวร |
-t | แสดงรายการเนื้อหาที่เก็บถาวร |
-f | ชื่อไฟล์ของไฟล์เก็บถาวร |
-x | แยกไฟล์ tar |
ต่อไปนี้เป็นไวยากรณ์พื้นฐานสำหรับการสร้างไฟล์เก็บถาวรtar
tar -cvf [tar archive name]
Note on Compression mechanisms with tar- ขอแนะนำให้ใช้หนึ่งในสองรูปแบบการบีบอัดทั่วไปเมื่อใช้ tar: gzip และ bzip2 ไฟล์ gzip ใช้ทรัพยากร CPU น้อยกว่า แต่มักมีขนาดใหญ่กว่า แม้ว่า bzip2 จะใช้เวลาบีบอัดนานขึ้น แต่ก็ใช้ทรัพยากร CPU มากขึ้น แต่จะส่งผลให้ไฟล์ท้ายมีขนาดเล็กลง
เมื่อใช้การบีบอัดไฟล์เรามักจะต้องการใช้นามสกุลไฟล์มาตรฐานเพื่อให้ทุกคนรวมถึงตัวเราเองทราบ (เทียบกับการเดาโดยการลองผิดลองถูก) สิ่งที่ต้องใช้รูปแบบการบีบอัดเพื่อแยกไฟล์เก็บถาวร
bzip2 | .tbz |
bzip2 | .tar.tbz |
bzip2 | .tb2 |
gzip | .tar.gz |
gzip | .tgz |
เมื่อจำเป็นต้องแยกไฟล์เก็บถาวรในกล่อง Windows หรือสำหรับการใช้งานบน Windows ขอแนะนำให้ใช้. tar.tbzหรือ. tar.gzเนื่องจากส่วนขยายสามอักขระเดี่ยวส่วนใหญ่จะสร้างความสับสนระหว่างผู้ดูแลระบบ Windows และ Windows เท่านั้น (อย่างไรก็ตามนั่นคือ บางครั้งผลลัพธ์ที่ต้องการ)
มาสร้างไฟล์เก็บถาวรgzipped tar จากการสำรองข้อมูลระยะไกลที่คัดลอกมาจาก Mac Workstation -
[rdc@mint Documents]$ tar -cvz -f RemoteStuff.tgz ./RemoteStuff/
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[rdc@mint Documents]$ ls -ld RemoteStuff.tgz
-rw-rw-r--. 1 rdc rdc 2317140451 Mar 12 06:10 RemoteStuff.tgz
Note- แทนที่จะเพิ่มไฟล์ทั้งหมดโดยตรงไปเก็บที่เราเก็บไว้ทั้งโฟลเดอร์RemoteStuff นี่เป็นวิธีการที่ง่ายที่สุด เนื่องจากเมื่อแตกไฟล์RemoteStuffทั้งไดเร็กทอรีจะถูกแตกไฟล์ทั้งหมดภายในไดเร็กทอรีการทำงานปัจจุบันเป็น. / currentWorkingDirectory/RemoteStuff/
ตอนนี้เรามาแยกไฟล์เก็บถาวรภายในไดเร็กทอรี / root / home
[root@centos ~]# tar -zxvf RemoteStuff.tgz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
./RemoteStuff/php_scripts/gettingURL.php
./RemoteStuff/A Guide to the WordPress REST API | Toptal.pdf
./RemoteStuff/Rick Cardon Tech LLC.webloc
./RemoteStuff/VeeamDiagram.png
./RemoteStuff/backbox-4.5.1-i386.iso
./RemoteStuff/dhcp_admin_script_update.py
./RemoteStuff/test_file.txt
[root@mint ~]# ping www.google.com
ดังที่เห็นข้างต้นไฟล์ทั้งหมดจะถูกแยกลงในไดเร็กทอรีที่มีอยู่ภายในไดเร็กทอรีการทำงานปัจจุบันของเรา
[root@centos ~]# ls -l
total 2262872
-rw-------. 1 root root 1752 Feb 1 19:52 anaconda-ks.cfg
drwxr-xr-x. 137 root root 8192 Mar 9 04:42 etc_baks
-rw-r--r--. 1 root root 1800 Feb 2 03:14 initial-setup-ks.cfg
drwxr-xr-x. 6 rdc rdc 4096 Mar 10 22:20 RemoteStuff
-rw-r--r--. 1 root root 2317140451 Mar 12 07:12 RemoteStuff.tgz
-rw-r--r--. 1 root root 9446 Feb 25 05:09 ssl.conf [root@centos ~]#
ใช้ gzip เพื่อบีบอัดข้อมูลสำรองไฟล์
ตามที่ระบุไว้ก่อนหน้านี้เราสามารถใช้ bzip2 หรือ gzip จาก tar ด้วยไฟล์ -j หรือ -zสวิตช์บรรทัดคำสั่ง เรายังสามารถใช้ gzip เพื่อบีบอัดไฟล์แต่ละไฟล์ อย่างไรก็ตามการใช้ bzip หรือ gzip เพียงอย่างเดียวไม่ได้มีคุณสมบัติเป็นจำนวนมากเมื่อรวมกับน้ำมันดิน
เมื่อใช้gzipการดำเนินการเริ่มต้นคือการลบไฟล์ต้นฉบับโดยแทนที่แต่ละไฟล์ด้วยเวอร์ชันบีบอัดโดยเพิ่มนามสกุล. gz
สวิตช์บรรทัดคำสั่งทั่วไปสำหรับ gzip ได้แก่ -
สวิตซ์ | หนังบู๊ |
---|---|
-ค | เก็บไฟล์หลังจากวางลงในที่เก็บถาวร |
-l | รับสถิติสำหรับไฟล์บีบอัด |
- ร | บีบอัดไฟล์ซ้ำ ๆ ในไดเรกทอรี |
-1 ถึง 9 | ระบุระดับการบีบอัดในมาตราส่วน 1 ถึง 9 |
gzip ทำงานได้มากหรือน้อยในแต่ละไฟล์และไม่ได้อยู่บนพื้นฐานการเก็บถาวรเช่นยูทิลิตี้ zip O / S ของ Windows เหตุผลหลักคือtarมีคุณสมบัติการเก็บถาวรขั้นสูงอยู่แล้ว gzipออกแบบมาเพื่อให้มีกลไกการบีบอัดเท่านั้น
ดังนั้นเมื่อนึกถึงgzipให้นึกถึงไฟล์เดียว เมื่อนึกถึงไฟล์หลายไฟล์ให้นึกถึงไฟล์เก็บถาวรtar ตอนนี้ขอให้สำรวจนี้กับเราก่อนหน้านี้tarเก็บ
Note - ผู้เชี่ยวชาญด้าน Linux ที่มีประสบการณ์มักจะอ้างถึงไฟล์เก็บถาวร tarred ว่าเป็น tarball
มาสร้างไฟล์เก็บถาวรtarอื่นจากข้อมูลสำรองrsyncของเรา
[root@centos Documents]# tar -cvf RemoteStuff.tar ./RemoteStuff/
[root@centos Documents]# ls
RemoteStuff.tar RemoteStuff/
เพื่อจุดประสงค์ในการสาธิตลองgzip tarball ที่สร้างขึ้นใหม่และบอกgzipให้เก็บไฟล์เก่าไว้ โดยค่าเริ่มต้นหากไม่มีตัวเลือก-c gzip จะแทนที่ไฟล์เก็บถาวร tar ทั้งหมดด้วยไฟล์. gz
[root@centos Documents]# gzip -c RemoteStuff.tar > RemoteStuff.tar.gz
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz
We now have our original directory, our tarred directory and finally our gziped tarball.
ลองทดสอบ-lสลับกับgzip
[root@centos Documents]# gzip -l RemoteStuff.tar.gz
compressed uncompressed ratio uncompressed_name
2317140467 2326661120 0.4% RemoteStuff.tar
[root@centos Documents]#
เพื่อแสดงให้เห็นว่าgzipแตกต่างจาก Windows Zip Utilities อย่างไรให้เรียกใช้ gzip ในโฟลเดอร์ของไฟล์ข้อความ
[root@centos Documents]# ls text_files/
file1.txt file2.txt file3.txt file4.txt file5.txt
[root@centos Documents]#
ตอนนี้ให้ใช้ตัวเลือก -r เพื่อบีบอัดไฟล์ข้อความทั้งหมดในไดเร็กทอรีซ้ำ
[root@centos Documents]# gzip -9 -r text_files/
[root@centos Documents]# ls ./text_files/
file1.txt.gz file2.txt.gz file3.txt.gz file4.txt.gz file5.txt.gz
[root@centos Documents]#
ดู? ไม่ใช่สิ่งที่บางคนอาจคาดการณ์ไว้ ไฟล์ข้อความต้นฉบับทั้งหมดถูกลบออกและแต่ละไฟล์จะถูกบีบอัดทีละไฟล์ เนื่องจากลักษณะการทำงานนี้จึงควรคิดถึงgzipเพียงอย่างเดียวเมื่อจำเป็นต้องทำงานในไฟล์เดียว
การทำงานกับtarballsเรามาแยกrsynced tarball ของเราไปยังไดเร็กทอรีใหม่
[root@centos Documents]# tar -C /tmp -zxvf RemoteStuff.tar.gz
./RemoteStuff/
./RemoteStuff/.DS_Store
./RemoteStuff/DDWRT/
./RemoteStuff/DDWRT/.DS_Store
./RemoteStuff/DDWRT/ddwrt-linksys-wrt1200acv2-webflash.bin
./RemoteStuff/DDWRT/ddwrt_mod_notes.docx
./RemoteStuff/DDWRT/factory-to-ddwrt.bin
./RemoteStuff/open_ldap_config_notes/
./RemoteStuff/open_ldap_config_notes/ldap_directory_a.png
./RemoteStuff/open_ldap_config_notes/open_ldap_notes.txt
./RemoteStuff/perl_scripts/
./RemoteStuff/perl_scripts/mysnmp.pl
./RemoteStuff/php_scripts/
./RemoteStuff/php_scripts/chunked.php
ดังที่เห็นด้านบนเราแยกและคลายการบีบอัด tarball ของเราลงในไดเร็กทอรี / tmp
[root@centos Documents]# ls /tmp
hsperfdata_root
RemoteStuff
เข้ารหัสไฟล์เก็บถาวร TarBall
การเข้ารหัสไฟล์เก็บถาวร tarball สำหรับจัดเก็บเอกสารที่ปลอดภัยซึ่งอาจจำเป็นต้องเข้าถึงโดยพนักงานคนอื่นขององค์กรในกรณีของการกู้คืนระบบอาจเป็นแนวคิดที่ยุ่งยาก โดยทั่วไปมีสามวิธีในการดำเนินการนี้: ใช้ GnuPG หรือใช้ openssl หรือใช้ยูทิลิตี้ส่วนที่สาม
GnuPG ได้รับการออกแบบมาเพื่อการเข้ารหัสแบบอสมมาตรเป็นหลักและมีการเชื่อมโยงข้อมูลประจำตัวมากกว่าข้อความรหัสผ่าน จริงอยู่ที่สามารถใช้ได้กับการเข้ารหัสแบบสมมาตร แต่นี่ไม่ใช่จุดแข็งหลักของ GnuPG ดังนั้นฉันจะลด GnuPG สำหรับการจัดเก็บที่เก็บถาวรด้วยการรักษาความปลอดภัยทางกายภาพเมื่อมีผู้คนมากกว่าบุคคลเดิมอาจต้องการการเข้าถึง (เช่นผู้จัดการองค์กรที่ต้องการป้องกันผู้ดูแลระบบที่ถือกุญแจทั้งหมดของอาณาจักรเป็นประโยชน์)
Openssl เช่น GnuPG สามารถทำสิ่งที่เราต้องการและมาพร้อมกับ CentOS แต่อีกครั้งไม่ได้ออกแบบมาโดยเฉพาะเพื่อทำสิ่งที่เราต้องการและการเข้ารหัสถูกตั้งคำถามในชุมชนความปลอดภัย
ทางเลือกของเราคือยูทิลิตี้ที่เรียกว่า 7zip. 7zip เป็นยูทิลิตี้การบีบอัดเช่นgzipแต่มีคุณสมบัติอื่น ๆ อีกมากมาย เช่นเดียวกับ Gnu Gzip, 7zip และมาตรฐานอยู่ในชุมชนโอเพ่นซอร์ส เราต้องติดตั้ง 7zip จาก EHEL Repository ของเรา (ในบทต่อไปจะกล่าวถึงการติดตั้ง Extended Enterprise Repository โดยละเอียด)
ติดตั้ง 7zip บน Centos
7zip ติดตั้งง่ายเมื่อที่เก็บ EHEL ของเราถูกโหลดและกำหนดค่าใน CentOS
[root@centos Documents]# yum -y install p7zip.x86_64 p7zip-plugins.x86_64
Loaded plugins: fastestmirror, langpacks
base
| 3.6 kB 00:00:00
epel/x86_64/metalink
| 13 kB 00:00:00
epel
| 4.3 kB 00:00:00
extras
| 3.4 kB 00:00:00
updates
| 3.4 kB 00:00:00
(1/2): epel/x86_64/updateinfo
| 756 kB 00:00:04
(2/2):
epel/x86_64/primary_db
| 4.6 MB 00:00:18
Loading mirror speeds from cached hostfile
--> Running transaction check
---> Package p7zip.x86_64 0:16.02-2.el7 will be installed
---> Package p7zip-plugins.x86_64 0:16.02-2.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
ง่ายๆเพียงแค่นั้น 7zip ได้รับการติดตั้งและพร้อมใช้งานด้วยการเข้ารหัส AES 256 บิตสำหรับไฟล์เก็บถาวร tarball ของเรา
ตอนนี้เรามาใช้ 7z เพื่อเข้ารหัสไฟล์เก็บถาวร gzipped ของเราด้วยรหัสผ่าน ไวยากรณ์สำหรับการทำเช่นนั้นค่อนข้างง่าย -
7z a -p <output filename><input filename>
ที่ไหน a: เพิ่มในที่เก็บถาวรและ -p: เข้ารหัสและแจ้งข้อความรหัสผ่าน
[root@centos Documents]# 7z a -p RemoteStuff.tgz.7z RemoteStuff.tar.gz
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R)
Core(TM) i5-4278U CPU @ 2.60GHz (40651),ASM,AES-NI)
Scanning the drive:
1 file, 2317140467 bytes (2210 MiB)
Creating archive: RemoteStuff.tgz.7z
Items to compress: 1
Enter password (will not be echoed):
Verify password (will not be echoed) :
Files read from disk: 1
Archive size: 2280453410 bytes (2175 MiB)
Everything is Ok
[root@centos Documents]# ls
RemoteStuff RemoteStuff.tar RemoteStuff.tar.gz RemoteStuff.tgz.7z slapD
text_files
[root@centos Documents]#
ตอนนี้เรามีไฟล์เก็บถาวร. 7z ที่เข้ารหัส tarball gzipped ด้วย AES 256 บิต
Note- 7zip ใช้การเข้ารหัส AES 256 บิตพร้อมแฮช SHA-256 ของรหัสผ่านและตัวนับโดยทำซ้ำมากถึง 512K ครั้งสำหรับการได้มาของคีย์ ควรมีความปลอดภัยเพียงพอหากใช้คีย์ที่ซับซ้อน
กระบวนการเข้ารหัสและบีบอัดที่เก็บถาวรใหม่อาจใช้เวลาสักครู่กับไฟล์เก็บถาวรขนาดใหญ่
7zip เป็นข้อเสนอขั้นสูงที่มีคุณสมบัติมากกว่า gzip หรือ bzip2 อย่างไรก็ตามมันไม่ได้เป็นมาตรฐานกับ CentOS หรือในโลกของ Linux ดังนั้นควรใช้ยูทิลิตี้อื่น ๆ ให้บ่อยที่สุด
ระบบ CentOS 7 สามารถอัปเดตได้สามวิธี -
- Manually
- Automatically
- อัปเดตด้วยตนเองสำหรับปัญหาด้านความปลอดภัยที่สำคัญและกำหนดค่าการอัปเดตอัตโนมัติ
ในสภาพแวดล้อมการใช้งานจริงขอแนะนำให้อัพเดตด้วยตนเองสำหรับเซิร์ฟเวอร์ที่ใช้งานจริง หรืออย่างน้อยก็จัดทำแผนการอัปเดตเพื่อให้ผู้ดูแลระบบสามารถรับรองบริการที่มีความสำคัญต่อการดำเนินธุรกิจ
เป็นไปได้ที่การอัปเดตความปลอดภัยอย่างง่ายอาจทำให้เกิดปัญหาซ้ำกับแอปพลิเคชันทั่วไปที่ต้องมีการอัปเกรดและกำหนดค่าใหม่โดยผู้ดูแลระบบ ดังนั้นอย่าเบื่อกับการตั้งเวลาอัปเดตอัตโนมัติในการผลิตก่อนที่จะทดสอบในเซิร์ฟเวอร์การพัฒนาและเดสก์ท็อปก่อน
อัปเดต CentOS 7 ด้วยตนเอง
ในการอัปเดต CentOS 7 เราต้องการทำความคุ้นเคยกับคำสั่งyumyumใช้เพื่อจัดการกับที่เก็บแพ็กเกจใน CentOS 7 yumเป็นเครื่องมือที่มักใช้เพื่อ -
- อัปเดตระบบ CentOS 7 Linux
- ค้นหาแพ็คเกจ
- ติดตั้งแพ็คเกจ
- ตรวจหาและติดตั้งการอ้างอิงที่จำเป็นสำหรับแพ็คเกจ
ในการใช้ยำสำหรับการอัปเดตเซิร์ฟเวอร์ CentOS ของคุณจะต้องเชื่อมต่อกับอินเทอร์เน็ต การกำหนดค่าส่วนใหญ่จะติดตั้งระบบฐานจากนั้นใช้yumเพื่อสอบถามที่เก็บ CentOS หลักสำหรับฟังก์ชันเพิ่มเติมในแพ็กเกจและใช้การอัปเดตระบบ
เราได้ใช้ประโยชน์จากยำเพื่อติดตั้งแพ็คเกจบางส่วนแล้ว เมื่อใช้yumคุณจะต้องทำเช่นนั้นในฐานะผู้ใช้รูทเสมอ หรือผู้ใช้ที่มีสิทธิ์เข้าถึงรูท ดังนั้นขอให้ค้นหาและติดตั้งง่ายต่อการใช้โปรแกรมแก้ไขข้อความที่เรียกว่านาโน
[root@centos rdc]# yum search nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.rackspace.com
* epel: mirror.chpc.utah.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
======================================================================
N/S matched: nano
======================================================================
nano.x86_64 : A small text editor
nodejs-nano.noarch : Minimalistic couchdb driver for Node.js
perl-Time-Clock.noarch : Twenty-four hour clock object with nanosecond precision
Name and summary matches only, use "search all" for everything.
[root@centos rdc]#
ตอนนี้มาติดตั้งโปรแกรมแก้ไขข้อความนาโน
[root@centos rdc]# yum install nano
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch
Version Repository Size
================================================================================
Installing:
nano x86_64
2.3.1-10.el7 base 440 k
Transaction Summary
Install 1 Package
Total download size: 440 k
Installed size: 1.6 M
Is this ok [y/d/N]: y
Downloading packages:
nano-2.3.1-10.el7.x86_64.rpm
| 440 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : nano-2.3.1-10.el7.x86_64
1/1
Verifying : nano-2.3.1-10.el7.x86_64
1/1
Installed:
nano.x86_64 0:2.3.1-10.el7
Complete!
[root@centos rdc]#
เราได้ติดตั้งโปรแกรมแก้ไขข้อความนาโนแล้ว วิธีนี้ IMO ง่ายกว่าการค้นหายูทิลิตี้บนเว็บไซต์และเรียกใช้โปรแกรมติดตั้งด้วยตนเอง นอกจากนี้ที่เก็บยังใช้ลายเซ็นดิจิทัลเพื่อตรวจสอบความถูกต้องของแพ็กเกจเพื่อให้มั่นใจว่ามาจากแหล่งที่เชื่อถือได้พร้อมกับยำ ขึ้นอยู่กับผู้ดูแลระบบในการตรวจสอบความถูกต้องเมื่อเชื่อถือที่เก็บใหม่ ด้วยเหตุนี้จึงถือเป็นแนวทางปฏิบัติที่ดีที่สุดในการเบื่อหน่ายกับที่เก็บของบุคคลที่สาม
Yum ยังสามารถใช้เพื่อลบแพ็คเกจได้
[root@centos rdc]# yum remove nano
Loaded plugins: fastestmirror, langpacks
Resolving Dependencies
--> Running transaction check
---> Package nano.x86_64 0:2.3.1-10.el7 will be erased
--> Finished Dependency Resolution
Dependencies Resolved
ตอนนี้เรามาตรวจสอบการอัปเดต
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.keystealth.org
* epel: pubmirror1.math.uh.edu
* extras: centos.den.host-engine.com
* updates: repos.forethought.net
Updated Packages
NetworkManager.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-17.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-17.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
audit-libs.x86_64 2.6.5-3.el7_3.1 updates
audit-libs-python.x86_64
ตามภาพเรามีการอัปเดตหลายสิบรายการที่รอการติดตั้ง จริงๆแล้วมีการอัปเดตทั้งหมดประมาณ 100 รายการเนื่องจากเรายังไม่ได้กำหนดค่าการอัปเดตอัตโนมัติ ดังนั้นเรามาติดตั้งการอัปเดตที่รอดำเนินการทั้งหมด
[root@centos rdc]# yum update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.usc.edu
* epel: pubmirror1.math.uh.edu
* extras: repos.forethought.net
* updates: repos.forethought.net
Resolving Dependencies
--> Running transaction check
---> Package NetworkManager.x86_64 1:1.4.0-14.el7_3 will be updated
---> Package NetworkManager.x86_64 1:1.4.0-17.el7_3 will be an update
selinux-policy noarch 3.13.1102.el7_3.15 updates 414 k
selinux-policy-targeted noarch 3.13.1102.el7_3.15 updates 6.4 M
systemd x86_64 21930.el7_3.7 updates 5.2 M
systemd-libs x86_64 21930.el7_3.7 updates 369 k
systemd-python x86_64 21930.el7_3.7 updates 109 k
systemd-sysv x86_64 21930.el7_3.7 updates 63 k
tcsh x86_64 6.18.01-13.el7_3.1 updates 338 k
tzdata noarch 2017a1.el7 updates 443 k
tzdata-java noarch 2017a1.el7 updates 182 k
wpa_supplicant x86_64 1:2.021.el7_3 updates 788 k
Transaction Summary
===============================================================================
Install 2 Packages
Upgrade 68 Packages
Total size: 196 M
Total download size: 83 M
Is this ok [y/d/N]:
หลังจากกดปุ่ม "y" แล้วการอัปเดต CentOS 7 จะเริ่มขึ้น กระบวนการทั่วไปที่ยำต้องผ่านเมื่ออัปเดตคือ -
- ตรวจสอบแพ็คเกจปัจจุบัน
- ค้นหาในที่เก็บสำหรับแพ็กเกจที่อัพเดต
- คำนวณการอ้างอิงที่จำเป็นสำหรับแพ็คเกจที่อัปเดต
- การอัปเดตการดาวน์โหลด
- ติดตั้งการอัปเดต
ตอนนี้ตรวจสอบให้แน่ใจว่าระบบของเราทันสมัย -
[root@centos rdc]# yum list updates
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* updates: mirror.compevo.com
[root@centos rdc]#
อย่างที่คุณเห็นไม่มีการอัปเดตในรายการ
กำหนดค่าการอัปเดตอัตโนมัติสำหรับ YUM
ในสภาพแวดล้อมองค์กรดังที่กล่าวไว้ก่อนหน้านี้การอัปเดตอัตโนมัติอาจเป็นวิธีการติดตั้งที่ต้องการหรือไม่ก็ได้ มาดูขั้นตอนการกำหนดค่าการอัปเดตอัตโนมัติด้วยยำ
ครั้งแรกที่เราติดตั้งแพคเกจที่เรียกว่าyum-cron
[root@centos rdc]# yum -y install yum-cron
Install 1 Package
Total download size: 61 k
Installed size: 51 k
Downloading packages:
yum-cron-3.4.3-150.el7.centos.noarch.rpm
| 61 kB 00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Verifying : yum-cron-3.4.3-150.el7.centos.noarch
1/1
Installed:
yum-cron.noarch 0:3.4.3-150.el7.centos
Complete!
[root@centos rdc]#
โดยค่าเริ่มต้นyum-cronจะดาวน์โหลดเฉพาะการอัปเดตและไม่ติดตั้ง การติดตั้งการอัปเดตโดยอัตโนมัตินั้นอยู่ที่ผู้ดูแลระบบหรือไม่ ข้อแม้ที่ใหญ่ที่สุดคือการอัปเดตบางอย่างจะต้องมีการรีบูตระบบ นอกจากนี้การอัปเดตบางอย่างอาจต้องมีการเปลี่ยนแปลงการกำหนดค่าก่อนที่จะให้บริการอีกครั้ง
การอัปเดตการอ้างอิงอาจทำให้เกิดปัญหาซ้ำซากในสถานการณ์ต่อไปนี้ -
ขอแนะนำให้อัปเดตโดย yum สำหรับห้องสมุดบางแห่ง
ไลบรารีรองรับ Apache Server 2.4 เท่านั้น แต่เรามีเซิร์ฟเวอร์ 2.3
ไซต์การค้าของเราใช้ PHP เวอร์ชันหนึ่ง
Apache เวอร์ชันใหม่ที่ติดตั้งสำหรับไลบรารีต้องอัปเกรด PHP
เว็บแอปพลิเคชันที่ใช้งานจริงของเรายังไม่ได้รับการทดสอบกับ PHP เวอร์ชันที่ใหม่กว่า
Yum อาจดำเนินการต่อและอัปเกรด Apache และ PHP โดยอัตโนมัติโดยไม่ต้องแจ้งให้ทราบเว้นแต่จะกำหนดค่าไม่ให้เป็น
หากสถานการณ์ทั้ง 5 เกิดขึ้นอาจส่งผลให้เกิดอาการปวดหัวในตอนเช้าไปจนถึงการรักษาความปลอดภัยที่อาจเกิดขึ้นโดยเปิดเผยข้อมูลผู้ใช้ แม้ว่าตัวอย่างข้างต้นจะเป็นพายุที่สมบูรณ์แบบ แต่เราไม่ต้องการให้สถานการณ์เช่นนี้เกิดขึ้น
ขึ้นอยู่กับผู้ดูแลระบบในการเข้าถึงสถานการณ์ที่เป็นไปได้ของการสูญเสียรายได้ที่อาจเกิดขึ้นจากเวลาที่จำเป็นในการกู้คืนบริการเนื่องจากการหยุดทำงานที่อาจเกิดขึ้นจากการรีบูตการอัปเดตและการกำหนดค่าใหม่ แนวทางปฏิบัตินี้อาจไม่ระมัดระวังเพียงพอสำหรับไซต์อีคอมเมิร์ซมูลค่าหลายล้านดอลลาร์ต่อวันที่มีลูกค้าหลายล้านราย
ตอนนี้มากำหนดค่าyum-cronเพื่อติดตั้งการอัปเดตระบบโดยอัตโนมัติ
[root@centos rdc]# vim /etc/yum/yum-cron.conf
# Whether updates should be applied when they are available. Note
# that download_updates must also be yes for the update to be applied.
apply_updates = yes
เราต้องการที่จะเปลี่ยนแปลงapply_updates = ไม่มีการapply_updates = yes ตอนนี้ขอกำหนดค่าช่วงเวลาการปรับปรุงสำหรับyum-cron
อีกครั้งว่าการใช้การอัปเดตอัตโนมัติและการติดตั้งการอัปเดตตามความต้องการอาจเป็นดาบสองคมและจำเป็นต้องได้รับการพิจารณาจากผู้ดูแลระบบสำหรับแต่ละสถานการณ์ที่ไม่ซ้ำกัน
รู้เบื้องต้นเกี่ยวกับ Bash Shell
เช่นเดียวกับรสชาติของ GNU Linux เชลล์มีหลายแบบและเข้ากันได้แตกต่างกันไป เชลล์เริ่มต้นใน CentOS เรียกว่า Bash หรือ Bourne Again Shell Bash shell เป็น Bourne Shell รุ่นดัดแปลงที่พัฒนาโดย Stephen Bourne Bash เป็นการแทนที่โดยตรงกับ Thompson Shell ดั้งเดิมบนระบบปฏิบัติการ Unix ที่พัฒนาโดย Bell Labs โดย Ken Thompson และ Dennis Ritchie (Stephen Bourne เป็นพนักงานของ Bell Labs ด้วย)
ทุกคนมีเปลือกที่ชอบและแต่ละคนมีจุดแข็งและความยากลำบาก แต่ส่วนใหญ่แล้ว Bash จะเป็นเชลล์เริ่มต้นสำหรับลีนุกซ์ทุกรุ่นและมีให้ใช้งานมากที่สุด ด้วยประสบการณ์ทุกคนจะต้องการสำรวจและใช้เปลือกที่ดีที่สุดสำหรับพวกเขา อย่างไรก็ตามในเวลาเดียวกันทุกคนก็ต้องการที่จะควบคุม Bash shell
ลินุกซ์เชลล์อื่น ๆ ได้แก่ Tcsh, Csh, Ksh, Zsh และ Fish
การพัฒนาทักษะเพื่อใช้ลินุกซ์เชลล์ในระดับผู้เชี่ยวชาญเป็นสิ่งสำคัญอย่างยิ่งสำหรับผู้ดูแลระบบ CentOS ดังที่เราได้กล่าวไว้ก่อนหน้านี้แตกต่างจาก Windows ลินุกซ์ที่เป็นหัวใจของระบบปฏิบัติการบรรทัดคำสั่ง เชลล์เป็นเพียงส่วนต่อประสานผู้ใช้ที่อนุญาตให้ผู้ดูแลระบบ (หรือผู้ใช้) ออกคำสั่งไปยังระบบปฏิบัติการ หากผู้ดูแลระบบ Linux เป็นนักบินของสายการบินการใช้เชลล์จะคล้ายกับการนำเครื่องบินออกจากนักบินอัตโนมัติและใช้การควบคุมด้วยตนเองเพื่อการบินที่คล่องแคล่วมากขึ้น
ลินุกซ์เชลล์เช่น Bash เป็นที่รู้จักในศัพท์วิทยาศาสตร์คอมพิวเตอร์ว่าเป็นไฟล์ Command Line Interpreter. Microsoft Windows ยังมีตัวแปลบรรทัดคำสั่งสองตัวที่เรียกว่า DOS (เพื่อไม่ให้สับสนกับระบบปฏิบัติการ DOS ดั้งเดิม) และ PowerShell
เปลือกหอยที่ทันสมัยที่สุดเช่น Bash มีให้ constructsช่วยให้เชลล์สคริปต์ที่ซับซ้อนมากขึ้นสามารถทำงานทั้งทั่วไปและงานที่ซับซ้อนได้โดยอัตโนมัติ
โครงสร้าง ได้แก่ -
- การควบคุมโฟลว์สคริปต์ (ifthen และอื่น ๆ )
- การดำเนินการเปรียบเทียบเชิงตรรกะ (มากกว่าน้อยกว่าความเท่าเทียมกัน)
- Loops
- Variables
- พารามิเตอร์กำหนดการทำงาน (คล้ายกับสวิตช์พร้อมคำสั่ง)
การใช้เชลล์สคริปต์กับภาษาสคริปต์
บ่อยครั้งเมื่อคิดถึงการปฏิบัติงานของผู้ดูแลระบบถามตัวเองว่า: ฉันควรใช้เชลล์สคริปต์หรือภาษาสคริปต์เช่น Perl, Ruby หรือ Python หรือไม่?
ไม่มีการตั้งกฎที่นี่ มีเพียงความแตกต่างทั่วไประหว่างเชลล์กับภาษาสคริปต์
เปลือก
Shell อนุญาตให้ใช้คำสั่ง Linux เช่นsed , grep , tee , catและยูทิลิตี้บรรทัดคำสั่งอื่น ๆ ทั้งหมดบนระบบปฏิบัติการ Linux ในความเป็นจริงยูทิลิตี้ลินุกซ์บรรทัดคำสั่งสามารถเขียนสคริปต์ในเชลล์ของคุณได้
ตัวอย่างที่ดีของการใช้เชลล์คือสคริปต์ด่วนเพื่อตรวจสอบรายชื่อโฮสต์สำหรับการแก้ปัญหา DNS
Bash Script ง่ายๆของเราเพื่อตรวจสอบชื่อ DNS -
#!/bin/bash
for name in $(cat $1); do host $name.$2 | grep "has address"
done
exit
รายการคำศัพท์ขนาดเล็กเพื่อทดสอบความละเอียด DNS บน -
dns
www
test
dev
mail
rdp
remote
ผลลัพธ์เทียบกับโดเมน google.com -
[rdc@centos ~]$ ./dns-check.sh dns-names.txt google.com
-doing dns
dns.google.com has address 172.217.6.46
-doing www
www.google.com has address 172.217.6.36
-doing test
-doing dev
-doing mail
googlemail.l.google.com has address 172.217.6.37
-doing rdp
-doing remote
[rdc@centos ~]$
การใช้ประโยชน์จากคำสั่ง Linux อย่างง่ายในเชลล์ของเราเราสามารถสร้างสคริปต์ 5 บรรทัดง่ายๆเพื่อตรวจสอบชื่อ DNS จากรายการคำ การดำเนินการนี้จะต้องใช้เวลาพอสมควรใน Perl, Python หรือ Ruby แม้ว่าจะใช้ DNS Library ที่ใช้งานได้ดีก็ตาม
ภาษาสคริปต์
ภาษาสคริปต์จะให้การควบคุมนอกเชลล์มากขึ้น สคริปต์ Bash ด้านบนใช้ wrapper รอบ ๆคำสั่งโฮสต์ Linux จะเป็นอย่างไรถ้าเราต้องการทำมากขึ้นและสร้างแอปพลิเคชันของเราเองเช่นโฮสต์เพื่อโต้ตอบนอกเชลล์? นี่คือที่ที่เราจะใช้ภาษาสคริปต์
นอกจากนี้ด้วยภาษาสคริปต์ที่ได้รับการดูแลอย่างดีเราทราบดีว่าการกระทำของเราจะทำงานในระบบต่างๆเป็นส่วนใหญ่ ตัวอย่างเช่น Python 3.5 จะทำงานบนระบบอื่น ๆ ที่ใช้ Python 3.5 พร้อมกับไลบรารีเดียวกันที่ติดตั้ง ไม่เช่นนั้นหากเราต้องการรันสคริปต์ BASH ของเราทั้งบน Linux และ HP-UX
บางครั้งเส้นแบ่งระหว่างภาษาสคริปต์และเชลล์ที่มีประสิทธิภาพอาจเบลอได้ เป็นไปได้ที่จะทำให้งานการดูแลระบบ CentOS Linux ทำงานโดยอัตโนมัติด้วย Python, Perl หรือ Ruby การทำเช่นนี้ถือเป็นเรื่องธรรมดาจริงๆ นอกจากนี้ผู้พัฒนาเชลล์สคริปต์ที่ร่ำรวยได้สร้างดีมอนเว็บเซิร์ฟเวอร์ที่เรียบง่าย แต่ใช้งานได้ดีใน Bash
ด้วยประสบการณ์ในภาษาสคริปต์และการทำงานอัตโนมัติในเชลล์ผู้ดูแลระบบ CentOS จะสามารถระบุได้อย่างรวดเร็วว่าจะเริ่มต้นที่ใดเมื่อจำเป็นต้องแก้ปัญหา เป็นเรื่องปกติที่จะเริ่มต้นโปรเจ็กต์ด้วยเชลล์สคริปต์ จากนั้นไปยังภาษาสคริปต์ (หรือคอมไพล์) เนื่องจากโปรเจ็กต์มีความซับซ้อนมากขึ้น
นอกจากนี้ยังสามารถใช้ทั้งภาษาสคริปต์และเชลล์สคริปต์สำหรับส่วนต่างๆของโปรเจ็กต์ได้ ตัวอย่างอาจเป็นสคริปต์ Perl เพื่อขูดเว็บไซต์ จากนั้นใช้สคริปต์เปลือกการแยกและรูปแบบด้วยsed , awkและegrep สุดท้ายใช้สคริปต์ PHP เพื่อแทรกข้อมูลที่จัดรูปแบบลงในฐานข้อมูล MySQL โดยใช้เว็บ GUI
ด้วยทฤษฎีบางอย่างที่อยู่เบื้องหลังเปลือกหอยเรามาเริ่มต้นด้วยหน่วยการสร้างพื้นฐานเพื่อทำงานอัตโนมัติจาก Bash shell ใน CentOS
อินพุตเอาต์พุตและการเปลี่ยนเส้นทาง
การประมวลผล stdout ไปยังคำสั่งอื่น -
[rdc@centos ~]$ cat ~/output.txt | wc -l
6039
[rdc@centos ~]$
ด้านบนเราได้ส่งต่อcat'sstoudไปยังwcเพื่อประมวลผลด้วยอักขระไปป์ จากนั้นwcประมวลผลเอาต์พุตจากcatพิมพ์จำนวนบรรทัดของ output.txt ไปยังเทอร์มินัล คิดว่าอักขระไปป์เป็นเอาต์พุตที่ส่งผ่าน "ไปป์" จากคำสั่งหนึ่งเพื่อประมวลผลโดยคำสั่งถัดไป
ต่อไปนี้เป็นแนวคิดหลักที่ต้องจำเมื่อจัดการกับการเปลี่ยนเส้นทางคำสั่ง -
จำนวน | ตัวอธิบายไฟล์ | ตัวละคร |
---|---|---|
0 | อินพุตมาตรฐาน | < |
1 | เอาต์พุตมาตรฐาน | > |
2 | มาตรฐานบกพร่อง | |
ต่อท้าย stdout | >> | |
กำหนดการเปลี่ยนเส้นทาง | & | |
ท่อ stdout เป็น stdin | | |
เราแนะนำเรื่องนี้ในบทที่หนึ่งโดยไม่ได้พูดถึงการเปลี่ยนเส้นทางหรือกำหนดการเปลี่ยนเส้นทางมากนัก เมื่อเปิดเทอร์มินัลใน Linux เชลล์ของคุณจะถูกมองว่าเป็นเป้าหมายเริ่มต้นสำหรับ -
- อินพุตมาตรฐาน <0
- เอาต์พุตมาตรฐาน> 1
- ข้อผิดพลาดมาตรฐาน 2
มาดูวิธีการทำงาน -
[rdc@centos ~]$ lsof -ap $BASHPID -d 0,1,2 COMMAND PID USER **FD** TYPE DEVICE SIZE/OFF NODE NAME bash 13684 rdc **0u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **1u** CHR 136,0 0t0 3 /dev/pts/0 bash 13684 rdc **2u** CHR 136,0 0t0 3 /dev/pts/0 [rdc@centos ~]$
/ dev / pts / 0คือเทอร์มินัลหลอกของเรา CentOS Linux ดูสิ่งนี้และนึกถึงแอปพลิเคชั่นเทอร์มินัลแบบเปิดของเราเหมือนเทอร์มินัลจริงพร้อมแป้นพิมพ์และจอแสดงผลที่เสียบผ่านอินเทอร์เฟซแบบอนุกรม อย่างไรก็ตามเช่นเดียวกับไฮเปอร์ไวเซอร์แยกฮาร์ดแวร์ไปยังระบบปฏิบัติการ/ dev / ptsนามธรรมเทอร์มินัลของเราไปยังแอปพลิเคชัน
จากคำสั่งlsofด้านบนเราจะเห็นภายใต้FDคอลัมน์ที่ตัวอธิบายไฟล์ทั้งสามถูกตั้งค่าเป็นเทอร์มินัลเสมือนของเรา (0,1,2) ตอนนี้เราสามารถส่งคำสั่งดูเอาต์พุตคำสั่งตลอดจนข้อผิดพลาดที่เกี่ยวข้องกับคำสั่ง
ต่อไปนี้เป็นตัวอย่างสำหรับ STDIN และ STDOUT -
STDOUT
[root@centosLocal centos]# echo "I am coming from Standard output or STDOUT." >
output.txt && cat output.txt
I am coming from Standard output or STDOUT.
[root@centosLocal centos]#
นอกจากนี้ยังสามารถส่งทั้งstdoutและstderrไปยังไฟล์แยก -
bash-3.2# find / -name passwd 1> good.txt 2> err.txt
bash-3.2# cat good.txt
/etc/pam.d/passwd
/etc/passwd
bash-3.2# cat err.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
bash-3.2#
เมื่อค้นหาระบบไฟล์ทั้งหมดพบข้อผิดพลาดสองข้อ แต่ละไฟล์จะถูกส่งไปยังไฟล์แยกต่างหากสำหรับการตรวจสอบในภายหลังในขณะที่ผลลัพธ์ที่ส่งคืนจะถูกวางไว้ในไฟล์ข้อความแยกต่างหาก
การส่งstderrไปยังไฟล์ข้อความจะมีประโยชน์เมื่อทำสิ่งที่ส่งออกข้อมูลจำนวนมากไปยังเทอร์มินัลเช่นการรวบรวมแอปพลิเคชัน สิ่งนี้จะช่วยให้สามารถตรวจสอบข้อผิดพลาดที่อาจสูญหายไปจากประวัติการเลื่อนกลับของเทอร์มินัล
หมายเหตุหนึ่งเมื่อส่ง STDOUT ไปยังไฟล์ข้อความคือความแตกต่างระหว่างไฟล์ >> และ >. ">>" สองครั้งจะต่อท้ายไฟล์ในขณะที่รูปแบบเอกพจน์จะปิดบังไฟล์และเขียนเนื้อหาใหม่ (ข้อมูลก่อนหน้านี้ทั้งหมดจะหายไป)
STDIN
[root@centosLocal centos]# cat < stdin.txt
Hello,
I am being read form Standard input, STDIN.
[root@centosLocal centos]#
ในคำสั่งข้างต้นแฟ้มข้อความstdin.txtถูกเปลี่ยนเส้นทางไปยังแมวคำสั่งซึ่งสะท้อนเนื้อหาในการSTDOUT
อักขระไปป์ "|"
อักขระไปป์จะรับเอาต์พุตจากคำสั่งแรกส่งเป็นอินพุตไปยังคำสั่งถัดไปเพื่อให้คำสั่งรองดำเนินการกับเอาต์พุต
ตอนนี้เรามา "ท่อ" stdout ของ cat ไปยังคำสั่งอื่น -
[root@centosLocal centos]# cat output.txt | wc -l
2
[root@centosLocal centos]#
ด้านบนwcทำการคำนวณเอาต์พุตจากcatที่ส่งผ่านจากท่อ คำสั่ง pipe มีประโยชน์อย่างยิ่งเมื่อกรองเอาต์พุตจากgrepหรือegrep -
[root@centosLocal centos]# egrep "^[0-9]{4}$" /usr/dicts/nums | wc -l
9000
[root@centosLocal centos]#
ในคำสั่งด้านบนเราส่งตัวเลข 4 หลักไปยังwcจากไฟล์ข้อความที่มีตัวเลขทั้งหมดจาก 65535 ผ่านตัวกรองegrep
การเปลี่ยนเส้นทางเอาต์พุตด้วย &
สามารถเปลี่ยนทิศทางเอาต์พุตได้โดยใช้ไฟล์ &ตัวละคร. หากเราต้องการกำหนดให้เอาต์พุตทั้ง STDOUT และ STDERR ลงในไฟล์เดียวกันสามารถทำได้ดังนี้ -
[root@centosLocal centos]# find / -name passwd > out.txt 2>&1
[root@centosLocal centos]# cat out.txt
find: /dev/fd/3: Not a directory
find: /dev/fd/4: Not a directory
/etc/passwd
[root@centosLocal centos]#
การเปลี่ยนเส้นทางโดยใช้ &ตัวละครที่ทำงานเช่นนี้: ครั้งแรกที่ส่งออกจะถูกนำเข้าสู่out.txt ประการที่สอง STDERR หรือไฟล์บ่ง 2 จะกำหนดให้สถานที่เดียวกับ STDOUT ในกรณีนี้out.txt
การเปลี่ยนเส้นทางมีประโยชน์อย่างมากและมีประโยชน์ในขณะที่แก้ปัญหาที่เกิดขึ้นเมื่อจัดการกับไฟล์ข้อความขนาดใหญ่รวบรวมซอร์สโค้ดเปลี่ยนเส้นทางเอาต์พุตในเชลล์สคริปต์และออกคำสั่ง Linux ที่ซับซ้อน
ในขณะที่มีประสิทธิภาพ แต่การเปลี่ยนเส้นทางอาจเป็นเรื่องซับซ้อนสำหรับผู้ดูแลระบบ CentOS รุ่นใหม่ การฝึกฝนการค้นคว้าและการตั้งคำถามในฟอรัม Linux เป็นครั้งคราว (เช่น Stack Overflow Linux) จะช่วยแก้ปัญหาขั้นสูงได้
Bash Shell สร้าง
ตอนนี้เรามีความคิดที่ดีแล้วว่าBash shellทำงานอย่างไรมาเรียนรู้โครงสร้างพื้นฐานที่ใช้กันทั่วไปในการเขียนสคริปต์ ในส่วนนี้เราจะสำรวจ -
- Variables
- Loops
- Conditionals
- การควบคุมลูป
- การอ่านและการเขียนไฟล์
- การดำเนินการทางคณิตศาสตร์ขั้นพื้นฐาน
คำแนะนำการแก้ไขปัญหา BASH
BASH อาจเป็นเรื่องยุ่งยากเล็กน้อยเมื่อเทียบกับภาษาสคริปต์เฉพาะ การแฮงค์อัพที่ใหญ่ที่สุดบางส่วนในสคริปต์ BASH มาจากการหลบหนีอย่างไม่ถูกต้องหรือการไม่หลบหนีการดำเนินการของสคริปต์ที่ส่งผ่านไปยังเชลล์ หากคุณดูสคริปต์สองสามครั้งแล้วและไม่ได้ผลตามที่คาดไว้อย่ากังวล ซึ่งเป็นเรื่องปกติแม้กระทั่งกับผู้ที่ใช้ BASH เพื่อสร้างสคริปต์ที่ซับซ้อนทุกวัน
การค้นหา Google อย่างรวดเร็วหรือลงทะเบียนที่ฟอรัมผู้เชี่ยวชาญ Linux เพื่อถามคำถามจะนำไปสู่การแก้ปัญหาอย่างรวดเร็ว มีความเป็นไปได้สูงที่จะมีคนพบปัญหาที่แน่นอนและได้รับการแก้ไขแล้ว
การเขียนสคริปต์ BASH เป็นวิธีการที่ยอดเยี่ยมในการสร้างสคริปต์ที่มีประสิทธิภาพอย่างรวดเร็วสำหรับทุกอย่างตั้งแต่งานการดูแลระบบอัตโนมัติไปจนถึงการสร้างเครื่องมือที่มีประโยชน์ การเป็นนักพัฒนาสคริปต์ BASH ระดับผู้เชี่ยวชาญต้องใช้เวลาและการฝึกฝน ดังนั้นให้ใช้สคริปต์ BASH ทุกครั้งที่ทำได้จึงเป็นเครื่องมือที่ยอดเยี่ยมที่มีในกล่องเครื่องมือการดูแลระบบ CentOS ของคุณ
การจัดการแพ็คเกจใน CentOS สามารถทำได้สองวิธี: จากเทอร์มินัลและจากอินเทอร์เฟซผู้ใช้แบบกราฟิก
บ่อยครั้งที่เวลาส่วนใหญ่ของผู้ดูแลระบบ CentOS จะใช้เครื่องเทอร์มินัล การอัปเดตและติดตั้งแพ็คเกจสำหรับ CentOS นั้นไม่แตกต่างกัน ด้วยเหตุนี้เราจะสำรวจการจัดการแพ็คเกจในเทอร์มินัลก่อนจากนั้นแตะที่โดยใช้เครื่องมือการจัดการแพ็คเกจกราฟิกที่ CentOS จัดเตรียมไว้ให้
ผู้จัดการแพ็คเกจ YUM
YUMเป็นเครื่องมือที่จัดเตรียมไว้สำหรับการจัดการแพ็คเกจใน CentOS เราได้สัมผัสหัวข้อนี้สั้น ๆ ในบทก่อน ๆ ในบทนี้เราจะทำงานจากการติดตั้ง CentOS ทั้งหมด ก่อนอื่นเราจะอัปเดตการติดตั้งของเราอย่างสมบูรณ์จากนั้นติดตั้งแอปพลิเคชัน
YUMได้นำการติดตั้งและการจัดการซอฟต์แวร์ใน Linux มายาวนาน YUM "โดยอัตโนมัติ" จะตรวจสอบการอ้างอิงที่ล้าสมัยนอกเหนือจากแพ็กเกจที่ล้าสมัยสิ่งนี้ทำให้ผู้ดูแลระบบ CentOS ลดภาระลงเมื่อเทียบกับสมัยก่อนในการรวบรวมทุกแอปพลิเคชันจากซอร์สโค้ด
อัปเดตการตรวจสอบยำ
ตรวจสอบแพ็คเกจที่สามารถอัปเดตผู้สมัครได้ สำหรับบทช่วยสอนนี้เราจะถือว่าระบบนี้เป็นระบบการใช้งานจริงที่จะหันหน้าไปทางอินเทอร์เน็ตโดยไม่มีแอปพลิเคชันที่ใช้งานจริงที่ต้องทดสอบโดย DevOps ก่อนที่จะอัปเกรดแพ็คเกจ ตอนนี้ให้เราติดตั้งผู้สมัครที่อัปเดตลงในระบบ
[root@localhost rdc]# yum check-update
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
NetworkManager.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-adsl.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-glib.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-libnm.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-team.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-tui.x86_64 1:1.4.0-19.el7_3 updates
NetworkManager-wifi.x86_64 1:1.4.0-19.el7_3 updates
audit.x86_64 2.6.5-3.el7_3.1 updates
vim-common.x86_64 2:7.4.160-1.el7_3.1 updates
vim-enhanced.x86_64 2:7.4.160-1.el7_3.1 updates
vim-filesystem.x86_64 2:7.4.160-1.el7_3.1 updates
vim-minimal.x86_64 2:7.4.160-1.el7_3.1 updates
wpa_supplicant.x86_64 1:2.0-21.el7_3 updates
xfsprogs.x86_64 4.5.0-9.el7_3 updates
[root@localhost rdc]#
อัปเดตยำ
สิ่งนี้จะติดตั้งตัวเลือกที่อัปเดตทั้งหมดทำให้การติดตั้ง CentOS ของคุณเป็นปัจจุบัน การติดตั้งใหม่อาจใช้เวลาสักครู่ขึ้นอยู่กับการติดตั้งและความเร็วในการเชื่อมต่ออินเทอร์เน็ตของคุณ
[root@localhost rdc]# yum update
vim-minimal x86_64 2:7.4.160-1.el7_3.1 updates 436 k
wpa_supplicant x86_64 1:2.0-21.el7_3 updates 788 k
xfsprogs x86_64 4.5.0-9.el7_3 updates 895 k
Transaction Summary
======================================================================================
Install 2 Packages
Upgrade 156 Packages
Total download size: 371 M
Is this ok [y/d/N]:
ติดตั้งซอฟต์แวร์ผ่าน YUM
นอกเหนือจากการอัปเดตระบบ CentOS แล้ว YUM package manager ยังเป็นเครื่องมือ go-to ของเราสำหรับการติดตั้งซอฟต์แวร์ ทุกอย่างจากเครื่องมือการตรวจสอบเครือข่าย, เครื่องเล่นวิดีโอ, บรรณาธิการข้อความที่สามารถติดตั้งได้จากพื้นที่เก็บข้อมูลกลางกับYUM
ก่อนที่จะติดตั้งโปรแกรมอรรถประโยชน์ซอฟต์แวร์ลองดูคำสั่งYUMบางคำสั่ง สำหรับการทำงานประจำวัน 90% ของการใช้ YUM ของ CentOS Admin จะอยู่ที่คำสั่งประมาณ 7 คำสั่ง เราจะกล่าวต่อไปด้วยความหวังว่าจะคุ้นเคยกับการใช้งาน YUM ในระดับที่เชี่ยวชาญสำหรับการใช้งานประจำวัน อย่างไรก็ตามเช่นเดียวกับยูทิลิตี้ Linux ส่วนใหญ่ YUM นำเสนอคุณสมบัติขั้นสูงมากมายที่เหมาะสำหรับการสำรวจผ่านทาง man page การใช้man yumจะเป็นขั้นตอนแรกในการดำเนินการที่ไม่คุ้นเคยกับยูทิลิตี้ Linux ใด ๆ
คำสั่ง YUM ที่พบบ่อยที่สุด
ต่อไปนี้เป็นคำสั่ง YUM ที่ใช้กันทั่วไป
คำสั่ง | หนังบู๊ |
---|---|
ติดตั้งรายการ | แสดงรายการแพ็คเกจที่ติดตั้งผ่าน YUM |
รายการทั้งหมด | แสดงรายการแพ็คเกจที่มีอยู่ในปัจจุบันทั้งหมด |
รายชื่อกลุ่ม | แสดงรายการแพ็คเกจที่จัดกลุ่ม |
ข้อมูล | ให้ข้อมูลโดยละเอียดเกี่ยวกับแพ็คเกจ |
ค้นหา | ค้นหาคำอธิบายและชื่อแพ็กเกจ |
ติดตั้ง | ติดตั้งแพ็คเกจ |
localinstall | ติดตั้งแพคเกจรอบต่อนาทีภายใน |
ลบ | ลบและติดตั้งแพ็คเกจ |
ทำความสะอาดทั้งหมด | ล้าง / var / cache / yum เพื่อเพิ่มพื้นที่ว่างบนดิสก์ |
มนุษย์ยำ | เช่นเดียวกับคำสั่ง linux ทั้งหมดไฟล์วิธีใช้ |
ติดตั้งซอฟต์แวร์ด้วย YUM
ตอนนี้เราจะติดตั้งเว็บเบราว์เซอร์แบบข้อความที่เรียกว่า Lynx. ก่อนการติดตั้งเราต้องได้รับชื่อแพคเกจที่มีเว็บเบราว์เซอร์ Lynx ก่อน เราไม่แน่ใจ 100% ด้วยซ้ำว่าที่เก็บ CentOS เริ่มต้นของเรามีแพ็คเกจสำหรับเว็บเบราว์เซอร์ Lynx ดังนั้นลองค้นหาและดู -
[root@localhost rdc]# yum search web browser
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
=================================================================
N/S matched: web, browser
==================================================================
icedtea-web.x86_64 : Additional Java components for OpenJDK - Java browser
plug-in and Web Start implementation
elinks.x86_64 : A text-mode Web browser
firefox.i686 : Mozilla Firefox Web browser
firefox.x86_64 : Mozilla Firefox Web browser
lynx.x86_64 : A text-based Web browser
Full name and summary matches only, use "search all" for everything.
[root@localhost rdc]#
เราเห็นว่า CentOS เสนอเว็บเบราว์เซอร์ Lynx ในพื้นที่เก็บข้อมูล มาดูข้อมูลเพิ่มเติมเกี่ยวกับแพ็คเกจกัน
[root@localhost rdc]# lynx.x86_64
bash: lynx.x86_64: command not found...
[root@localhost rdc]# yum info lynx.x86_64
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Packages
Name : lynx
Arch : x86_64
Version : 2.8.8
Release : 0.3.dev15.el7
Size : 1.4 M
Repo : base/7/x86_64
Summary : A text-based Web browser
URL : http://lynx.isc.org/
License : GPLv2
Description : Lynx is a text-based Web browser. Lynx does not display any images,
: but it does support frames, tables, and most other HTML tags. One
: advantage Lynx has over graphical browsers is speed; Lynx starts and
: exits quickly and swiftly displays web pages.
[root@localhost rdc]#
ดี! เวอร์ชัน 2.8 เป็นเวอร์ชันปัจจุบันเพียงพอแล้วมาติดตั้ง Lynx กัน
[root@localhost rdc]# yum install lynx
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Resolving Dependencies
--> Running transaction check
---> Package lynx.x86_64 0:2.8.8-0.3.dev15.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
===============================================================================
===============================================================================
Package Arch
Version Repository Size
===============================================================================
===============================================================================
Installing:
lynx x86_64
2.8.80.3.dev15.el7 base 1.4 M
Transaction Summary
===============================================================================
===============================================================================
Install 1 Package
Total download size: 1.4 M
Installed size: 5.4 M
Is this ok [y/d/N]: y
Downloading packages:
No Presto metadata available for base
lynx-2.8.8-0.3.dev15.el7.x86_64.rpm
| 1.4 MB 00:00:10
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Verifying : lynx-2.8.8-0.3.dev15.el7.x86_64
1/1
Installed:
lynx.x86_64 0:2.8.8-0.3.dev15.el7
Complete!
[root@localhost rdc]#
ต่อไปตรวจสอบให้แน่ใจว่า Lynx ติดตั้งอย่างถูกต้อง
[root@localhost rdc]# yum list installed | grep -i lynx
lynx.x86_64 2.8.8-0.3.dev15.el7 @base
[root@localhost rdc]#
เยี่ยมมาก! ลองใช้ Lynx เพื่อดูว่าเว็บเป็นอย่างไรโดยไม่มี "ไลค์" และรูปภาพสวย ๆ
[root@localhost rdc]# lynx www.tutorialpoint.in
เยี่ยมมากตอนนี้เรามีเว็บเบราว์เซอร์สำหรับเซิร์ฟเวอร์ที่ใช้งานจริงซึ่งสามารถใช้งานได้โดยไม่ต้องกังวลกับการหาประโยชน์จากระยะไกลบนเว็บ นี่เป็นสิ่งที่ดีสำหรับเซิร์ฟเวอร์การผลิต
เราเกือบจะเสร็จสมบูรณ์แล้วอย่างไรก็ตามก่อนอื่นเราต้องตั้งค่าเซิร์ฟเวอร์นี้เพื่อให้นักพัฒนาทดสอบแอปพลิเคชัน ดังนั้นให้แน่ใจว่าพวกเขามีเครื่องมือที่จำเป็นสำหรับงานของพวกเขา เราสามารถติดตั้งทุกอย่างทีละรายการ แต่ CentOS และ YUM ทำให้สิ่งนี้เร็วขึ้นมาก มาติดตั้งDevelopment Group Packageกันเถอะ
[root@localhost rdc]# yum groups list
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Available Groups:
Compatibility Libraries
Console Internet Tools
Development Tools
Graphical Administration Tools
Legacy UNIX Compatibility
Scientific Support
Security Tools
Smart Card Support
System Administration Tools
System Management
Done
[root@localhost rdc]#
นี่คือรายการกลุ่มแพ็กเกจขนาดเล็กที่จัดทำโดย CentOS มาดูกันว่ามีอะไรบ้างใน "Development Group"
[root@localhost rdc]# yum group info "Development Tools"
Loaded plugins: fastestmirror, langpacks
There is no installed groups file.
Maybe run: yum groups mark convert (see man yum)
Loading mirror speeds from cached hostfile
* base: mirror.scalabledns.com
* extras: mirror.scalabledns.com
* updates: mirror.clarkson.edu
Group: Development Tools
Group-Id: development
Description: A basic development environment.
Mandatory Packages:
autoconf
automake
binutils
bison
หน้าจอแรกของผลลัพธ์เป็นดังที่เห็นด้านบน รายการทั้งหมดนี้ค่อนข้างครอบคลุม อย่างไรก็ตามโดยปกติแล้วกลุ่มนี้จะต้องได้รับการติดตั้งอย่างครบถ้วนเมื่อเวลาผ่านไป มาติดตั้งกลุ่มการพัฒนาทั้งหมด
[root@localhost rdc]# yum groupinstall "Development Tools"
นี่จะเป็นการติดตั้งที่ใหญ่ขึ้น เมื่อเสร็จสิ้นเซิร์ฟเวอร์ของคุณจะมีไลบรารีและคอมไพเลอร์สำหรับการพัฒนาส่วนใหญ่สำหรับ Perl, Python, C และ C ++
การจัดการแพ็คเกจกราฟิกใน CentOS
Gnome Desktop มีเครื่องมือจัดการแพ็คเกจกราฟิกที่เรียกว่า Software. มันค่อนข้างใช้งานง่ายและตรงไปตรงมา ซอฟต์แวร์เครื่องมือจัดการแพ็คเกจ Gnome สำหรับ CentOS สามารถพบได้โดยไปที่: แอปพลิเคชั่น→เครื่องมือระบบ→ซอฟต์แวร์
เครื่องมือการจัดการแพ็คเกจซอฟต์แวร์แบ่งออกเป็นกลุ่มเพื่อให้ผู้ดูแลระบบสามารถเลือกแพ็คเกจสำหรับการติดตั้งได้ แม้ว่าเครื่องมือนี้จะยอดเยี่ยมสำหรับการใช้งานที่ง่ายและเรียบง่ายสำหรับผู้ใช้ปลายทาง YUM มีประสิทธิภาพมากกว่ามากและผู้ดูแลระบบอาจใช้มากกว่านี้
ต่อไปนี้เป็นภาพหน้าจอของ Software Package Management Tool ซึ่งไม่ได้ออกแบบมาสำหรับผู้ดูแลระบบจริงๆ
Logical Volume Management (LVM)เป็นวิธีการที่ Linux ใช้ในการจัดการไดรฟ์ข้อมูลของหน่วยเก็บข้อมูลบนฮาร์ดดิสก์ฟิสิคัลชนิดต่างๆ สิ่งนี้ไม่ควรสับสนกับ RAID อย่างไรก็ตามสามารถคิดได้ในแนวคิดที่คล้ายกันเช่น RAID 0 หรือ J-Bod ด้วย LVM เป็นไปได้ที่จะมี (เช่น) ฟิสิคัลดิสก์สามแผ่นละ 1TB จากนั้นโลจิคัลวอลุ่มประมาณ 3TB เช่น / dev / sdb หรือแม้แต่โลจิคัลวอลุ่ม 1.5TB 2 ตัว, 500GB 5 เล่มหรือชุดใดก็ได้ สามารถใช้ดิสก์เดียวสำหรับสแน็ปช็อตของโลจิคัลวอลุ่ม
Note- การใช้โลจิคัลวอลุ่มจะเพิ่มดิสก์ I / O เมื่อกำหนดค่าอย่างถูกต้อง วิธีนี้ทำงานในลักษณะเดียวกับ RAID 0 การสตริปข้อมูลในดิสก์ที่แยกจากกัน
เมื่อเรียนรู้เกี่ยวกับการจัดการระดับเสียงด้วย LVM จะง่ายกว่าถ้าเรารู้ว่าแต่ละองค์ประกอบใน LVM คืออะไร โปรดศึกษาตารางต่อไปนี้เพื่อทำความเข้าใจองค์ประกอบแต่ละส่วนให้ชัดเจน หากจำเป็นให้ใช้ Google เพื่อศึกษา การทำความเข้าใจแต่ละส่วนของโลจิคัลวอลุ่มเป็นสิ่งสำคัญในการจัดการ
PV | ปริมาณทางกายภาพ | sda |
พี. พี | พาร์ติชันทางกายภาพ | sda1, sda2 |
วีจี | กลุ่มปริมาณ | รวมทรัพยากรทางกายภาพ |
LV | โลจิคัลวอลุ่ม | เห็นว่าเป็นที่เก็บข้อมูลของระบบปฏิบัติการ |
ก physical volumeจะเห็นเป็น / dev / sda, / dev / sdb; ฟิสิคัลดิสก์ที่ Linux ตรวจพบ
ก physical partitionจะเป็นส่วนของดิสก์ที่แบ่งโดยยูทิลิตี้ดิสก์เช่น fdisk โปรดทราบว่าไม่แนะนำให้ใช้ฟิสิคัลพาร์ติชันในการตั้งค่า LVM ทั่วไปส่วนใหญ่ ตัวอย่าง: disk / dev / sda ถูกแบ่งพาร์ติชันเพื่อรวมฟิสิคัลพาร์ติชันสองพาร์ติชัน: / dev / sda1และ/ dev / sda1
หากเรามีฟิสิคัลดิสก์ขนาด 1TB สองแผ่นเราสามารถสร้างกลุ่มวอลุ่มเกือบ 2TB ระหว่างสองดิสก์
จากกลุ่มวอลุ่มเราสามารถสร้างโลจิคัลวอลุ่มสามขนาดแต่ละขนาดไม่เกินขนาดกลุ่มวอลุ่มทั้งหมด
เครื่องมือการดูแลดิสก์ Linux แบบดั้งเดิม
ก่อนที่จะทำความคุ้นเคยกับเครื่องมือที่โดดเด่นล่าสุดและยิ่งใหญ่ที่สุดสำหรับ LVM Management ใน CentOS 7 เราควรสำรวจเครื่องมือดั้งเดิมเพิ่มเติมที่ใช้สำหรับการจัดการดิสก์ของ Linux ก่อน เครื่องมือเหล่านี้จะมีประโยชน์และยังคงใช้กับเครื่องมือ LVM ขั้นสูงในปัจจุบันเช่น System Storage Manager: lsblk, parted และ mkfs.xfs
ตอนนี้สมมติว่าเราได้เพิ่มดิสก์อื่นหรือสองดิสก์ในระบบของเราเราจำเป็นต้องระบุดิสก์ที่ Linux ตรวจพบ ฉันมักจะแนะนำให้ระบุดิสก์ทุกครั้งก่อนดำเนินการที่ถือว่าเป็นการทำลายล้างlsblkเป็นเครื่องมือที่ยอดเยี่ยมในการรับข้อมูลดิสก์ มาดูกันว่า CentOS ตรวจพบดิสก์อะไรบ้าง
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
sdc 8:32 0 4G 0 disk
sr0 11:0 1 1024M 0 rom
อย่างที่คุณเห็นเรามีดิสก์สามตัวในระบบนี้: sda, sdb และ sdc
Disk sda มีการติดตั้ง CentOS ที่ใช้งานได้ดังนั้นเราจึงไม่ต้องการเล่นกับ sda เพิ่มทั้งsdbและsdcลงในระบบสำหรับบทช่วยสอนนี้ มาทำให้ดิสก์เหล่านี้ใช้งานได้กับ CentOS
สร้างป้ายชื่อดิสก์
[root@localhost rdc]# parted /dev/sdb mklabel GPT
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this
disk will be lost. Do you want to continue?
Yes/No? Yes
[root@localhost rdc]#
ตอนนี้เรามีดิสก์หนึ่งแผ่นที่ติดป้ายกำกับ เพียงแค่เรียกใช้แยกคำสั่งในลักษณะเดียวกันบนSDC
สร้างพาร์ติชันบนดิสก์
เราจะสร้างพาร์ติชันเดียวในแต่ละดิสก์เท่านั้น ในการสร้างพาร์ติชันคำสั่งpartedจะถูกใช้อีกครั้ง
[root@localhost rdc]# parted -a opt /dev/sdb mkpart primary ext4 0% 100%
Warning - คุณขอพาร์ติชันตั้งแต่ 0.00B ถึง 6442MB (ภาค 0..12582911)
ตำแหน่งที่ใกล้ที่สุดที่เราสามารถจัดการได้คือ 17.4kB ถึง 1048kB (ภาค 34..2047)
คุณยังยอมรับได้หรือไม่?
ใช่ไม่ใช่? ไม่
[root@localhost rdc]# parted -a opt /dev/sdc mkpart primary ext4 0% 100%
Information - คุณอาจต้องอัปเดต / etc / fstab
[root@localhost rdc]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part / boot
└─sda2 8:2 0 19G 0 part
├─cl-root 253:0 0 17G 0 lvm /
└─cl-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 6G 0 disk
└─sdb1 8:17 0 6G 0 part
sdc 8:32 0 4G 0 disk
└─sdc1 8:33 0 4G 0 part
sr0 11:0 1 1024M 0 rom
[root@localhost rdc]#
ดังที่คุณเห็นจากเอาต์พุต lsblk ตอนนี้เรามีสองพาร์ติชั่นแต่ละพาร์ติชันบน sdb และ sdc
สร้างระบบไฟล์
สุดท้ายก่อนที่จะติดตั้งและใช้โวลุ่มใด ๆ เราจำเป็นต้องเพิ่มระบบไฟล์ เราจะใช้ระบบไฟล์ XFS
root@localhost rdc]# mkfs.xfs -f /dev/sdb1
meta-data = /dev/sdb1 isize = 512 agcount = 4, agsize = 393088 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1572352, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]# mkfs.xfs -f /dev/sdc1
meta-data = /dev/sdc1 isize = 512 agcount = 4, agsize = 262016 blks
= sectsz = 512 attr = 2, projid32bit = 1
= crc = 1 finobt = 0, sparse = 0
data = bsize = 4096 blocks = 1048064, imaxpct = 25
= sunit = 0 swidth = 0 blks
naming = version 2 bsize = 4096 ascii-ci = 0 ftype = 1
log = internal log bsize = 4096 blocks = 2560, version = 2
= sectsz = 512 sunit = 0 blks, lazy-count = 1
realtime = none extsz = 4096 blocks = 0, rtextents = 0
[root@localhost rdc]#
ตรวจสอบให้แน่ใจว่าแต่ละระบบมีระบบไฟล์ที่ใช้งานได้
[root@localhost rdc]# lsblk -o NAME,FSTYPE
NAME FSTYPE
sda
├─sda1 xfs
└─sda2 LVM2_member
├─cl-root xfs
└─cl-swap swap
sdb
└─sdb1 xfs
sdc
└─sdc1 xfs
sr0
[root@localhost rdc]#
ขณะนี้แต่ละคนใช้ระบบไฟล์ XFS ลองเมานต์ตรวจสอบการเมานต์และคัดลอกไฟล์ไปยังแต่ละไฟล์
[root@localhost rdc]# mount -o defaults /dev/sdb1 /mnt/sdb
[root@localhost rdc]# mount -o defaults /dev/sdc1 /mnt/sdc
[root@localhost ~]# touch /mnt/sdb/myFile /mnt/sdc/myFile
[root@localhost ~]# ls /mnt/sdb /mnt/sdc
/mnt/sdb:
myFile
/mnt/sdc:
myFile
ณ จุดนี้เรามีดิสก์ที่ใช้งานได้สองแผ่น อย่างไรก็ตามจะใช้งานได้ก็ต่อเมื่อเราติดตั้งด้วยตนเองเท่านั้น ในการติดตั้งแต่ละครั้งในการบูตเราต้องแก้ไขไฟล์fstab นอกจากนี้ต้องตั้งค่าสิทธิ์สำหรับกลุ่มที่ต้องการเข้าถึงดิสก์ใหม่
สร้างกลุ่มวอลุ่มและโลจิคัลวอลุ่ม
หนึ่งนอกจากนี้ที่ยิ่งใหญ่ที่สุดใน CentOS 7 เป็นที่รวมของยูทิลิตี้ที่เรียกว่าระบบ Storage ManagerหรือSSMSystem Storage Manager ลดความยุ่งยากในกระบวนการจัดการพูล LVM และไดรฟ์จัดเก็บข้อมูลบน Linux
เราจะเข้าสู่ขั้นตอนการสร้างพูลโวลุ่มอย่างง่ายและโลจิคัลวอลุ่มใน CentOS ขั้นตอนแรกคือการติดตั้ง System Storage Manager
[root@localhost rdc]# yum install system-storage-manager
ลองดูดิสก์ของเราโดยใช้คำสั่งรายการ ssm
ดังที่แสดงไว้ข้างต้นดิสก์ทั้งหมดสามตัวถูกติดตั้งบนระบบ
/sdba1 - โฮสต์การติดตั้ง CentOS ของเรา
/sdb1 - ติดที่ / mnt / sdb
/sdc1 - ติดตั้งที่ / mnt / sdc
สิ่งที่เราต้องการทำคือสร้างVolume Groupโดยใช้สองดิสก์ (sdb และ sdc) จากนั้นสร้างโลจิคัลวอลุ่ม 3GB สามชุดให้กับระบบ
มาสร้าง Volume Group ของเรากัน
[root@localhost rdc]# ssm create -p NEW_POOL /dev/sdb1 /dev/sdc1
ตามค่าเริ่มต้นssmจะสร้างโลจิคัลวอลุ่มเดียวขยายทั้ง 10GB ของพูล เราไม่ต้องการสิ่งนี้จึงขอลบสิ่งนี้ออก
[root@localhost rdc]# ssm remove /dev/NEW_POOL/lvol001
Do you really want to remove active logical volume NEW_POOL/lvol001? [y/n]: y
Logical volume "lvol001" successfully removed
[root@localhost rdc]#
สุดท้ายเรามาสร้างโลจิคัลวอลุ่มทั้งสาม
[root@localhost rdc]# ssm create -n disk001 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk002 --fs xfs -s 3GB -p NEW_POOL
[root@localhost rdc]# ssm create -n disk003 --fs xfs -s 3GB -p NEW_POOL
ตอนนี้เรามาตรวจสอบปริมาณใหม่ของเรา
ตอนนี้เรามีโลจิคัลวอลุ่มแยกกันสามตัวที่ครอบคลุมในฟิสิคัลดิสก์พาร์ติชันสองพาร์ติชัน
โลจิคัลวอลุ่มเป็นคุณลักษณะที่มีประสิทธิภาพใน CentOS Linux เราได้สัมผัสพื้นผิวในการจัดการสิ่งเหล่านี้ การเรียนรู้พูลและโลจิคัลวอลุ่มมาพร้อมกับการฝึกฝนและการเรียนรู้เพิ่มเติมจาก Tutorials Point สำหรับตอนนี้คุณได้เรียนรู้พื้นฐานของการจัดการ LVM ใน CentOS และมีความสามารถในการสร้าง Logical Volumes พื้นฐานบนโฮสต์เดียว