Subscribe to fs Linux |File Server Linux Subscribe to fs Linux |File Server Linux's comments

  KitchenSource GREAT PRICES ON BLUETOOTH HEADSETS!

DNS ทั้งกรณี forward และ reversed ล้วนเป็นภาระงานที่
เว็บเซิร์ฟเวอร์ต้องเสียเวลาทำงานไปไม่ใช่น้อย
การเตรียมพร้อมในเรื่อง DNS resolve จึงสามารถลดเวลา
และเพิ่มประสิทธิภาพได้มากยิ่งขึ้น

LogResolve สามารถเสริมการทำงานเช่นนี้ได้
ดูรายละเอียดเพิ่มเติมได้ที่
http://www.aceldama.com/~tomr/progs/logresolve/

ฟังดูอาจจะแปลกๆ ซักหน่อย แต่อาจจะมีประโยชน์มากสำหรับ
การดัดแปลงระบบเพื่อทำงานเฉพาะบางอย่าง
หรือเครื่องที่ใช้งานส่วนตัว หรือเครื่องที่ใช้ทดสอบโปรแกรม
ที่ต้องการความรวดเร็ว เป็นต้น

วิธีการง่ายมากสมมุติว่ามียูสเซอร์ชื่อ user1 อยู่ให้ทำคำสั่ง
# passwd -d user1
รหัสผ่านจะถูกยกเลิก จากนี้เมื่อล๊อกอินเข้ามาด้วยชื่อ user1
จะไม่ถามรหัสผ่านอีกต่อไปจนกว่าจะใช้คำสั่ง passwd ตั้งรหัสใหม่อีกครั้ง

การใช้ Name Virtual Host เป็นการทำให้เว็บเซิร์ฟเวอร์ 1 เครื่อง
สามารถเป็นเว็บไซต์ได้มากกว่า 1 ชื่อ
โดยทั่วไปจะใช้ระบบ DNS ช่วยเหลือในการสร้างชื่อโดเมนขึ้น

อีกส่วนหนึ่งที่จะทำให้ 1 โฮสต์มีได้หลายชื่อ
คือใช้ไดเร็คทีฟ ServerAlias ในไฟล์คอนฟิกของ Apache
เช่น
ServerAlias www.one.com w3.two.com mail.three.com

การเขียนสคริปต์ใช้ในการบริหารจัดการระบบลินุกซ์
เป็นงานที่ต้องอาศัยความชำนาญในการใช้คำสั่งและรูปแบบ
ของภาษาเพื่อให้ได้ผลลัพธ์ของงานที่ต้องการ
ผู้ที่ถนัดภาษา PHP จะสามารถนำความรู้มาใช้ในการเขียนโปรแกรมสคริปต์บนลินุกซ์
ได้เช่นกันซึ่งช่วยให้งานต่างๆ สำเร็จเร็วขึ้น

ลองใช้โค๊ดตัวอย่างนี้ดูคงเป็นการเริ่มต้นที่ดี
#!/usr/bin/php -qn
echo “Hello world!\n”;
?>

มีบ่อยครั้งที่ผู้ที่ใช้งานลินุกซ์ ทำการปิดเครื่องโดยการกดปุ่ม Power Off บนตัวเครื่องคอมพิวเตอร์เลย โดยที่ไม่ผ่านการใ้ช้คำสั่งบนระบบปฏิบัติการ Linux ทำให้บางาครั้งระบบมีปัญหาขึ้นมาได้ เราจะมารู้จักกับวิธีปิดเครื่องอย่างถูกวิธีกัน
การปิดระบบ (Shutdown)
ในการปิดระบบบนลินุกซ์นั้น สามารถทำได้หลายวิธีด้วยกัน ดังนี้
1. การปิดระบบโดยการเปลี่ยนรันเลเวล (Runlevel) ให้เป็นเลเวล 0 สามารถใช้คำสั่งได้ดังนี้
# init 0
2. การปิดระบบโดยใช้คำสั่ง shutdown ซึ่งมีพารามิเตอร์ -h เพื่อระบุให้ระบบปิดตัวเอง และมีอีกพารามิเตอร์ก็คือ เวลา ที่จะให้ระบบปิด ซึ่งถ้าต้องการให้ปิดตอนนี้เลย ก็สามารถกำหนดให้เวลาเป็น 0 หรือจะ
ใช้คำว่า now ก็ได้เหมือนกัน ดังนี้
# shutdown -h now
# shutdown -h 0
เริ่มต้นระบบใหม่ (Reboot)
การเริ่มต้นระบบใหม่ สามารถทำได้หลายวิธี ดังนี้
1. การเริ่มต้นระบบใหม่โดยการเปลี่ยนรันเลเวล ให้เป็นเลเวล 6 ดังนี้
# init 6
2. การเริ่มต้นระบบใหม่ โดยการใช้คำสั่ง reboot
# reboot
Broadcast message from root (pts/0) (Sat May 6 12:39:31 2007):
The system is going down for reboot NOW!
3. การเริ่มต้นระบบใหม่ โดยใช้คำสั่ง shutdown โดยเพิ่มพารามิเตอร์ -r เข้าไป ซึ่งสามารถตั้งเวลาให้ เริ่มระบบใหม่ได้ และส่งข้อความเตือนไปยังผู้ที่กำลังล็อกอินอยู่ในระบบอยู่ ตัวอย่างเช่น ต้องการเริ่มต้นระบบใหม่ในอีก 5 นาที ก็สามารถใช้คำสั่งได้ด้งนี้
# shutdown -r 5

ปัจจุบันได้มีการนำระบบปฏิบัติการลีนุกซ์ไปประยุกต์เป็นระบบปฏิบัติการสำหรับงานด้านต่างๆเช่นงานด้านการคำนวณทางวิทยาศาสตร์ใช้เป็นสถานีงาน สถานีบริการ อินเทอร์เน็ต อินทราเน็ต หรือใช้ใน การเรียนการสอนและการทำงิจัยทางคอมพิวเตอร์ใช้พัฒนาโปรแกรมเนื่องจาก มีเครื่องมือมากมาย เช่น โปรแกรมภาษาซี (C) ซีพลัสพลัส (C++) ปาสคาล (Pascal) ฟอร์แทรน (Fortran) ลิสป์ (Lisp) โปรล็อก (Prolog) เอดา (ADA) มีภาษาสคริปต์ เช่น เชลล์ (Shell) บาสช์เชลล์ (Bash Shell) ซีเชลล์ (C Shell) คอร์นเชลล์ (Korn Shell) เพิร์ล (Perl) พายตัน (python) TCL/TK
นอกจากนี้ยังมีโปรแกรมประยุกต์ในสาขาต่างๆ อีกมากมาย โดยข้อมูลของโปรแกรมเหล่านี้ได้รวบรวมไว้ที่ Linux Software Map (LSM)

ลีนุกซ์นั้นมีนักพัฒนาโปรแกรมจากทั่วโลกช่วยกันทำให้การขยายตัวของลีนุกซ์เป็นไปอย่างรวดเร็วโดยในส่วนของแกนระบบปฏิบัติการ หรือเคอร์เนลนั้นจะมีการพัฒนาเป็นรุ่นที่ 2.2 (Linux Kernel 2.2) ซึ่งได้เพิ่มขีดความสามารถและสนับสนุนการทำงานแบบหลายตัวประมวลผลแบบ SMP (Symmetrical Multi Processors) ซึ่งทำให้ระบบลีนุกซ์สามารุนำไปใช้สำหรับทำงานเป็นเซิร์ฟเวอร์ขนาดใหญ่ได้ และยังมีโครงการสนับสนุนการใช้งานบรระบบลีนุกซ์อีกหลายโครงการ เช่น KDE (The K Desktop Environment) และ GNOME (GNU Network Object Model Environment) ซึ่งจะช่วยพัฒนา desktop บนลีนุกซ์ให้สมบูรณ์เทียบเท่ากับ Windows 98 ของไมโครซอฟท์ และบรรดาบริษัทผู้ผลิตซอฟท์แวร์ทางด้านระบบฐานข้อมูลชั้นนำ อย่างเช่น Informix, Oracle, IBM DB2 ก็เริ่มให้มีสนับสนุนการใช้งานบนระบบลีนุกซ์ แล้วเช่นเดียวกัน

ก่อนที่จะทำการติดตั้งก็ต้องเตรียมความพร้อมทางด้านอุปกรณ์ฮาร์ดแวร์และซอฟต์แวร์ให้เป็นที่เรียบร้อยก่อน ระบบลีนุกซ์ต้องการฮาร์ดแวร์ที่มีคุณสมบัต ิขั้นต่ำสุดดังต่อไปนี้
1. หน่วยประมวลผลกลางของ Intel 80386 ขึ้นไป
2. หน่วยประมวลผลทางคณิตศาสตร์ มีหรือไม่มีก็ได้ เพราะระบบปฏิบัติการ Red Hat Linux ได้มีการจำลอง หน่วยประมวลผลทางคณิตศาสตร์ไว้ในระดับของเคอร์เนล (Kernel) แล้ว
3. หน่วยความจำอย่างน้อย 8 เมกะไบต์ แต่แนะนำให้มีอย่างน้อย 16 เมกะไบต์จะทำให้ระบบมีประสิทธิภาพที่ดีกว่า
4. ฮาร์ดดิสก์อย่างน้อย 101 เมกะไบต์ สำหรับการติดตั้งแบบพื้นฐาน 266 เมกะไบต์ สำหรับการติดตั้งแบบทั่วไป และ 716 เมกะไบต์ สำหรับการติดตั้งแบบทั้งหมดตัวเลขที่ระบุทั้งหมดเฉพาะส่วนระบบปฏิบัติการ ถ้าต้องการใช้เป็น File Server หรือ Database Server จะ ต้องเผื่อเนื้อที่ไว้สำหรับใช้งานด้วย ส่วนแหล่งของโปรแกรมลีนุกซ์นั้นสามารถหาได้ฟรีตามเว็บไซท์ เช่น www.linux.org/dist/ftp.html

สิ่งที่ควรทราบก่อนการติดตั้ง
คุณสมบัติของฮาร์ดดิสก็ที่ต้องการติดตั้ง
จำนวนของฮาร์ดดิสก็ที่ต้องการติดตั้ง
ขนาดความจุของฮาร์ดดิสก์ที่จะใช้ในการติดตั้ง
ประเภทการเชื่อมต่อของฮาร์ดดิสก์ที่จะใช้ในการติดตั้ง IDE, EIDE หรือ SCSI
มีการใช้ประเภทการเชื่อมต่อของฮาร์ดดิสก์หลายๆ ประเภทในเครื่องเดียวกันหรือไม่
ขนาดของหน่วยความจำหลัก เพื่อที่จะคำนวณหาขนาดของ Linux Swap Partition
ประเภทการเชื่อมต่อของเครื่องอ่านซีดีรอม IDE (ATAPI), SCSI
รุ่นและยี่ห้อของแผงวงจรเชื่อมต่อ SCSI
รุ่นและยี่ห้อของแผงวงจรเชื่อมต่อเครือข่าย
จำนวนปุ่มกด และประเภทเชื่อมต่อของเมาส์
รุ่นและยี่ห้อของแผงวงจรเชื่อมต่อจอภาพ รุ่นและยี่ห้อของจอภาพ
รายละเอียดการกำหนดโปรโตคอล TCP/IP ของเครื่องที่ต้องการติดตั้ง
IP Address
Net Mask
GateWay Address
Name Server Address
Domain Name
Host Name

คำนำ
คุณเคยลบไฟล์ /etc/passwd หรือไม่ ? คุณเคยใช้คำสั่งนี้หรือไม่ # perl updateDB.pl > ./updateDB.pl ? คุณเคยใช้คำสั่ง rm จนเคยตัวทำให้ลบไฟล์ หรือ ไดเรกทรอรี่ใน Home ของตนเองหรือไม่ คาดว่าผู้ใช้หรือผู้ดูแลระบบ UNIX หรือ LINUX ไม่มากก็น้อยย่อมเจอปัญหานี้ คุณจะทำอย่างไรหละ ?? ถ้าในระบบ windows คุณคงจะไปคลิกที่ไอคอล recycle bin แล้วใช้คำสั่ง restore เพื่อเรียกไฟล์พวกนั้นกลับมา หรือ แม้ใช้โปรแกรม Norton Utility เพื่อกู้คืนไฟล์กับมา แล้วใน UNIX หรือ LINUX จะทำอย่างไรดี ??
ในของระบบโครงสร้างไฟล์ใน UNIX หรือ LINUX จะประกอบด้วย inode ที่เก็บข้อมูลต่างๆ เกี่ยวกับไฟล์ เข่น ตำแหน่งของข้อมูลในดิสก์, ข้อมูลความเป็นเจ้าของ ,สิทธิ ,ขนาดของไฟล์ เป็นต้น เมื่อมีการลบไฟล์ระบบจะไม่มีการลบค่าของ inode ทิ้งแต่จะสร้างสัญลักษณ์ให้เป็นช้อมูลที่ว่างเปล่าแทน ดังนั้นข้อมูลที่ลบไปยังคงอยู่ในระบบ ในบทความนี้จะกล่าวถึงวิธีการของการกู้ไฟล์ในระบบ UNIX และ LINUX

การกู้ข้อมูลในระบบ UNIX

ในระบบ UNIX หรือ LINUX จะใช้ระบบของ device file system ในการติดต่อใช้งานข้อมูลระหว่างระบบและ ดิสก์ [1] เข่น ใน /dev/hda ดังนั้นระบบไฟล์จะทำงานใน device ดังกล่าวจะสามารถมองเป็นรูปแบบของ text ไฟล์ได้ ซึ่งการค้นหาและกู้ไฟล์สามารถใช้คำสั่งที่เกียวกับการค้นหาข้อความได้ เช่น grep, seekcat เป็นต้น รูปแบบทั่วไปของคำสั่งที่ใช้ในการเรียกไฟล์ในระบบ UNIX มีดังนี้

grep -a -B[size before] -A[size after] ‘text’ /dev/[your_partition]

** grep ต้องเป็นเวอร์ชั่นของ GNU
size before ขนาดของข้อมูลที่ต้องการตัดก่อนหน้าข้อความ ‘text’
size after ขนาดของข้อมูลที่ต้องการตัดหลังข้อความ ‘text’
your_partition ไฟล์ device ของดิสก์
ในบางครั้งโครงสร้างของไฟล์อาจจะไม่ต่อเนื่องกัน ส่งผลทำให้ข้อมูลที่ได้รับเข้ามาอาจจะไม่ถูกต้องตามความต้องการ ดังนั้นเมื่อได้รับผลมาควรใช้ script perl ในการตัดเอาส่วนที่ไม่ต้องการออก แต่อย่างไรก็ตามข้อมูลในส่วนของ CVS และ RCS ที่เป็นข้อมูลเกี่ยวกับไฟล์ที่ต้องการกู้ยังสามารถนำมาส่วนในการค้นหาได้

การกู้ข้อมูลในระบบ LINUX

ระบบ LINUX จะมีโปรแกรมช่วยในการดีบัก device file system ที่เรียกว่า debugfs ในโปรแกรมจะมีคำสั่ง lsdel เพื่อเรียกดูไฟล์ต่างๆ ที่ถูกลบออกจากระบบ
เช่น
# debugfs /dev/hda6
debugfs 1.19, 13-Jul-2000 for EXT2 FS 0.5b, 95/08/09
debugfs: lsdel
1844 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
749300 1000 100664 27018 2/ 7 Tue May 9 19:08:17 2000
749301 1000 100444 1671 1/ 1 Tue May 9 19:08:17 2000
…… …. …… …. .. ……………………..
944887 1037 100600 597 1/ 1 Sat May 26 18:00:00 2001
717281 1000 100400 1 1/ 1 Sat May 26 18:08:13 2001
32605 1000 100644 15 1/ 1 Sat May 26 18:09:06 2001

จากตัวอย่างโปรแกรมจะแสดงค่าต่างๆ ของ inode หากต้องการนำ output แสดงลงไฟล์ทำได้โดยใช้คำสั่ง
# echo lsdel | debugfs /dev/hda6 > /tmp/lsdel-output
ใช้คำสั่ง dump -p เพื่อนำกู้ข้อมูลตามหมายเลข inode เช่น
debugfs: dump -p <32605> /tmp/recovered_file
ดังนั้นในการใช้งานโปรแกรม debugfs เพื่อกู้ไฟล์คืน นั้นจำเป็นต้องมีข้อมูลของไฟล์ดังนี้
- เจ้าของไฟล์เป็นของใคร
- เมื่อไรที่ไฟล์ถูกลบ
- ค่าประมาณของขนาดของไฟล์
หากไฟล์ที่ต้องการค้นหามีจำนวนมากแล้วผู้ใช้ต้องทำการเขียน script เพื่อช่วยค้นหา และ กู้ไฟล์ที่ต้องการ Recover [3] เป็นโปรแกรมแบบ shell script ที่ช่วยในการค้นหาและกู้ไฟล์ ในระบบ LINUX ให้ง่ายในการใช้งาน โปรแกรมจะอาศัยหลักการทำงานของ โปรแกรม debugfs ผ่านคำถามที่เป็นลำดับขั้นเพื่อการค้นหา ไฟล์ที่ผู้ใช้ต้องการ ซึ่งคำถามคร่าวๆ มีดังนี้
- ชื่อของ Device ของดิสก์
- วัน/เดือน/ปี โดยอาจจะบอกเป็นช่วงได้
- ขนาดสูงสุด และต่ำสุดของไฟล์
- ไอดีของผู้ใช้ (User ID)
- ตัวอักษรที่อยู่ในไฟล์
โปรแกรมจะทำการสรุป ค่าของ inode และรายละเอียดของไฟล์ที่ต้องการกู้และข้อมูลที่กู้มาได้

——————————————————————————–

สรุป
เอกสารนี้เป็นจะกล่าวถึงการกู้ไฟล์ในระบบ UNIX และ LINUX รวมทั้งการแนะนำโปรแกรม recover ที่ช่วยในการกู้ไฟล์ในระบบ LINUX ซึ่งในเอกสารนี้จะเป็นแนวทางแก้ผู้ดูแลระบบในการพัฒนาคำสั่ง หรือ script ย่อยเพื่อช่วยในการสร้าง โปรแกรมในการอำนวยความสะดวกของการกู้ไฟล์ที่สำคัญที่ถูกลบไปได้

Have I been Hacked

หลังจาก hacker ได้ทำการ compromise ระบบแล้วนั้น ส่วนใหญ่ hacker จะไม่ทำการลบข้อมูลหรือทำอะไรที่จะเป็นผลเสียต่อระบบของท่าน แต่ hackers จะทำการติดตั้ง back door ในระบบซึ่งทำให้ hacker สามารถเข้าถ้าระบบในฐานะ root หรือบางที hacker อาจใช้ระบบของท่านในการโจมตีระบบอื่นๆต่อไป

เพราะฉะนั้นหากท่านประสบปัญหาอย่างเช่น ระบบของท่านเกิดช้าขึ้นมาอย่างผิดปกติแต่เมื่อท่านได้ทำการตรวจสอบ disk space และ process แล้วก็ไม่มีสิ่งใดผิดปกติ checklist ต่อไปนี้คือสิ่งที่ท่านควรตรวจสอบเพื่อบอกว่าระบบของท่านถูก hacked หรือไม่

1. เหตุการณ์หรือสัญญาณที่ผิดปกติ

ถ้าท่านไม่สามารถทำการ ssh, telnet หรือ login เข้าสู่เครื่องได้เป็นสิ่งบอกเหตุว่าท่านอาจจะถูก hacked ได้
ท่านควรจะทำการตรวจสอบเหตุต่างๆ ที่ไม่สามารถอธิบาย เช่น network ซึ่งผิดปกติ resource ถูกใช้ไปเยอะมากทั้งที่มี users เข้าใช้อยู่เพียงไม่กี่คน
ควรตรวจสอบ /etc/password file ว่ามี account ใดบ้างที่เพิ่งถูกเพิ่มเข้ามาโดยที่คุณไม่ได้ทำการเพิ่มเอง รวมทั้งตรวจสอบ accounts ที่ไม่มี password หรือ UID ถูก set ให้เท่ากับ “0″
2. ตรวจหา sniffer

เนื่องจาก sniffer จะทำให้ network interface รับ packet ทุกชนิดที่เข้ามาและทำการบันทึก packet ซึ่งประกอบด้วย username และ password ของ ftp และ telnet แม้ว่าท่านจะแก้ปัญหานี้โดยการใช้ switching แทน hub แต่ถ้าเครื่องดังกล่าวเป็น Internet gateway แล้วปัญหาก็ไม่ได้หมดไป ท่านสามารถทำการ check promiscoous mode ได้โดย # ifconfig - a/grep PROMISC

แต่มี rootkit บางตัวที่ทำการเปลี่ยนแปลง ifconfig เพื่อหลบซ่อนจากการใช้ parameters นี้ เพื่อความแน่ใจให้ท่าน run antisniff (http://www.securitysoftwaretech.om/antisniff/) จาก remote machine

3. ตรวจสอบ logs

ทำการตรวจสอบ log files โดยการใช้คำสั่ง last เพื่อที่จะ list logins ท้ายๆออกมาแล้วตรวจสอบว่ามี unknown users หรือ usernames ที่แปลกๆหรือไม่ รวมทั้ง access time ของแต่ละ user ด้วยว่ามีความผิดปกติหรือไม่

# last | head

ตรวจสอบ message file ใน /var/log/ (สำหรับ Linux) หรือ /var/adm/ (สำหรับ Solaris)
รวมทั้งตรวจสอบ log files อื่นๆ ซึ่งใช้โดย syslog (โดยดูจาก /etc/syslog.conf) โดยการ grep su failures ทั้งหลายและเหตุการณ์ที่ vid = 0

# grap “vid = 0″ /var/log/
และ
# grep “su” /var/log/

log files ซึ่งมีขนาดเท่ากับ “0″ ก็อาจเป็นสัญญาณของการถูกบุกรุกเช่นเดียวกัน
เนื่องจาก rootkit ใหม่ๆ จะทำการลบ usermane จาก wtmp, utmp และ lastlog files เพราะฉะนั้นหากท่านไม่ได้ใช้อุปกรณ์ที่เรียกว่า write once read many เช่น CD-R ในการบันทึก log files ท่านไม่ควรไว้ใจ log files เท่าใดนัก
4. ไม่ควรเชื่อ ps command

ตรวจสอบชื่อและจำนวนของ running processes และพยายามหา processes ที่ไม่ค่อยคุ้น ข้อแปลกๆ หรือ startup time ที่ไม่ค่อยปกติ รวมทั้ง process ที่ใช้ CPU time มากๆอย่างไรก็ตามโดยปกติแล้วผู้บุกรุกจะ run sniffers อยู่ภายใต้ daemon ปกติ เช่น sendmail หรือ named และ rootkits โดยส่วนใหญ่ก็จะทำการเปลี่ยนแปลง ps และ pidof เพื่อที่จะหลบซ่อน process ของพวกเขา ดังนั้นท่านควรจะเปรียบเทียบระหว่างผลลัพธ์ของ ps กับผลลัพธ์ใน /proc เช่น

#ps –no-headers -ef | wc

เมื่อท่าน run คำสั่งต่อไปนี้ใน RedHat 7.0 # ps - -no- headers- ef | wc แล้วผลต่างกันกับที่ run # ls - d /proc/ [0-9]* นั่นคืออาจมี process ที่แอบซ่อนอยู่
ในระบบ Solaris อาจใช้คำสั่ง crash เพื่อที่จะแสดง list ของ processes แล้วเปรียบเทียบกับ ps output
violin $ crash dumpfile = /dev/mem, namelist = /dev/ksyms, outfile = stdout > proc
หรือท่านอาจจะติดตั้งและ run Isof [ftp://vic.cc.purdue.edu/pub/tools/] ซึ่งโปรแกรมนั้นจะบอกท่านว่า process ไหนกำลังใช้ files อะไร

5. ตรวจสอบ ports

ทำการ scan ports ของเครื่องโดยใช้ port scanner เช่น nmap [http://www.insecure.org/nmap/] ซึ่งค่า defaults ของ nmap นั้นคือ port1-1024 แต่ trojan horses ส่วนใหญ่จะใช้ ports ที่สูงกว่านั้น หากท่านต้องการเฉพาะเจาะจง ports ที่ต้องการจะ scan ให้ใช้ option-p เช่น

# nmap - p 1 - 65535 your_machin_address
หลังจากนั้น ให้ทำการใช้คำสั่ง netstat -a เพื่อตรวจสอบ port ที่เปิดอยู่บนเครื่องนั้นๆ
# netstat -a

หากพบว่ามี ports ที่ปรากฎใน output ของการใช้ nmap แต่ไม่ปรากฎใน output เมื่อใช้คำสั่ง netstat นั้นอาจหมายถึง netstat ได้ถูกเปลี่ยนแปลงเพื่อหลบซ่อน service บางอย่าง

6. ตรวจสอบ binaries

rootkits ส่วนใหญ่จะทำการเปลี่ยนแปลง system binaries เพื่อทำการหลบซ่อน file, sniffer หรือ port ที่ถูกเปิดอยู่ บน RedHat ท่านสามารถตรวจสอบ binaries ได้โดยใช้คำสั่ง

altis $ rpm - va | grep ‘1…5′
ซึ่งผลลัพธ์ที่เกิดขึ้นอาจเป็นลักษณะนี้คือ
s.5…..T c/etc/services
s.5….T c/etc/info-dir
s.5….T c/etc/inetd.conf
นั้นหมายถึงขนาดของ file เปลี่ยน (5)
MD5 checksum เปลี่ยน (5)
และเวลาที่ได้รับการเปลี่ยนแปลงถูกเปลี่ยน (T)

บนระบบซึ่งเป็น UNIX ท่านสามารถใช้คำสั่ง find ค้นหา files ที่ถูกเปลี่ยนแปลงในช่วงเวลาหนึ่งๆ ส่วน option ที่ใช้น่าจะใช้ -ctime option ดังนี้

# find/ bin -ctime -7

แต่วิธีที่ดีที่สุดคือใช้คำสั่ง cmp แล้วเปรียบเทียบ วันที่ ขนาดของไฟล์ และ time-stamp ของ system files กับ machine ที่เป็น clean machine และใช้ OS ประเภทเดียวกันซึ่งโดยปกติ binaries files ที่ถูกเปลี่ยนคือ

chsh, crontab, du, df, find, ifconfig, inedd, killall, login, ls, netstat, passwd, ps, sshd, syslogd และ top

ท่านสามารถใช้โปรแกรม tripwire หรือ samhain เพื่อให้แจ้งเตือนเมื่อ system files ถูกเปลี่ยนแปลง

Tripwire [ http://www.tripwire.org]
samhain [http://samhain.sourceforge.net]

7. ตรวจสอบ Config Files

ท่านควรตรวจสอบ files ซึ่งถูกเปลี่ยนแปลงบ่อยๆได้แก่

/etc/inetd.conf file
หรือ
/etc/xinetd.conf file
หรือ
/etc/xinetd.d directory

พยายามตรวจดู service ที่เพิ่มเข้ามา ถูกเปลี่ยนแปลงหรือเป็น service ที่ท่านไม่คุ้นเคย

/etc/hosts.eguiv, ~/.rhosts

พยายามตรวจดู creationdate และ “+” รวมทั้ง host names ที่ท่านไม่คุ้นเคย

/dev/* เนื่องจากมี rootkits บางประเภทที่จะติดตั้ง configuration files ใน /dev/ ท่านสามารถตรวจสอบ text files ใน /dev directory ได้ดัวนี้

# file /dev/* | grep text
/ dev/ ptyp : ASCIItext
/ dev/ ptyq : ASCIItext
/ dev/ ptyr : ASCIItext

จากตัวอย่างนี้ท่านจะเห็นว่า rootkit ได้ใช้ text file ptyr เพื่อจะหลบซ่อนจาก command lsใช้ ptyq เพื่อจะลบ sockets/ addresses ออกจาก netstat และใช้ ptyq เพื่อจะลบ processes ออกจาก ps

ในฐานะ root ให้ท่าน run crontab - l and atq เพื่อตรวจดูว่ามีโปรแกรมใดที่กำลังรอการทำงานอยู่หรือไม่

8. ตรวจสอบ setuid, setgid และไฟล์อื่นๆที่หลบซ่อนอยู่

ทำ setuid และ setgid files จะ run อยู่ในฐานะ root แม้ว่าจะถูก executed โดย user ธรรมดาก็ตาม
หากท่านต้องการค้นหา setuid files ให้ใช้คำสั่ง

# find / - perm -4000 -print

และในการค้นหา setgid ให้ใช้คำสั่ง

# find / -perm -2000 -print

โดยปกติแล้วผู้บุกรุกจะแอบซ่อน setuid files และ tools ท่านไว้ใน hidden directories ท่านสามารถตรวจสอบหา files ที่แอบซ่อนอยู่ได้โดยใช้คำสั่ง find

# find / -name ” . * ”

หรือบางทีผู้บุกรุกจะเลือก directory ไปในการแอบซ่อน files เช่น ~/ gnome, ~/.xauth เหล่านี้เป็นต้น

สรุป

หากท่านคิดว่าท่านถูก hacked แน่นอนแล้ว ให้ทำการ disconnect จาก network ทันทีและทำการ back up data แล้ว reinstall OS หรือว่าหากท่านไม่สามารถปิดระบบได้ทันทีก็ควรจะเปลี่ยน root password, ลบ user account ที่คิดว่าเป็นอันตรายและทำการ set เวลาที่จะปิดระบบหลังทำการ reinstall OS