2009-03-03

การกู้ไฟล์ในระบบ UNIX และ LINUX

คำนำ
คุณเคยลบไฟล์ /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 ย่อยเพื่อช่วยในการสร้าง โปรแกรมในการอำนวยความสะดวกของการกู้ไฟล์ที่สำคัญที่ถูกลบไปได้


--------------------------------------------------------------------------------

เอกสารอ้างอิง

[1] UNIX File System: http://www.isu.edu/departments/comcom/unix/workshop/fstour.html
[2] Tales from the Abyss: UNIX File Recovery: http://www.samag.com/documents/s=1441/sam0111b/0111b.htm
[3] Recover Program: http://recover.sourceforge.net/linux/recover/download.php3.

Secure WuFTP Step-by-Step

File Transfer Protocol (FTP) เป็นโพรโตคอลหนึ่งที่นิยมใช้ในการโอนย้ายไฟล์ระหว่างเครื่องคอมพิวเตอร์ผ่านเครือข่ายอินเตอร์เน็ต มีโปรแกรมที่ออกแบบมารองรับการทำงานตามโพรโตคอล FTP ทั้งเซิร์ฟเวอร์และไคลเอ็นต์ที่มีรูปแบบการใช้งานง่าย ใช้เวลาในการเรียนรู้ไม่นาน ส่งผลโพรโตคอล FTP เป็นโพรโตคอลหลักที่ใช้ในการโอนย้ายไฟล์ผ่านเครือข่ายอินเตอร์เน็ต และใช้พอร์ต 21 ของเซิร์ฟเวอร์ในการให้บริการเป็น FTP server


รูปที่ 1 การเชื่อมต่อผ่านโพรโตคอล FTP


--------------------------------------------------------------------------------

รูปแบบการให้บริการ FTP
การให้บริการ FTP เซิร์ฟเวอร์ที่อนุญาตให้ทุกคนบนอินเตอร์เน็ตสามารถใช้บริการ FTP บนเซิร์ฟเวอร์ได้เรียกว่า Anonymous FTP server ซึ่งเป็นที่นิยมใช้ในการให้บริการการโอนย้ายไฟล์บนอินเตอร์เน็ตโดยใช้โพรโตคอล FTP และเอกสารในส่วนนี้จะกล่าวเน้นเฉพาะวิธีการปรับปรุง Anonymous FTP server ให้มีความปลอดภัยมากขึ้นเท่านั้น

การให้บริการอีกแบบหนึ่งเป็นบริการที่อนุญาตให้ผู้ใช้บนระบบเท่านั้น สามารถใช้บริการโอนย้ายไฟล์ผ่าน FTP ได้ โดยใช้ล็อกอินและรหัสผ่านเดิมในการเข้าสู่ระบบ เรียกบริการนี้ว่า Real FTP server หรือเรียกได้อีกชื่อหนึ่งว่า Private User-only FTP server ข้อควรระวังคือการโอนย้ายไฟล์ผ่าน FTP มีข้อบกพร่องในเรื่องความปลอดภัยของข้อมูล เพราะใช้การสื่อสารข้อมูลแบบเพลนเท็กซ์ฟหรือข้อมูลในการสื่อสารีไม่มีการเข้ารหัสใดๆ ทำให้สามารถดักจับรหัสผ่านในการเข้าสู่ระบบได้โดยง่าย

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

ข้อแตกต่างระหว่างการให้บริการแบบ Real FTP server กับ Guest FTP server คือผู้ใช้ที่สามารถเข้ามาใช้บริการ Real FTP server ได้นั้นนอกจากจะเป็นผู้ใช้ที่มีตัวตนจริงในระบบแล้ว ผู้ใช้คนดังกล่าวยังสามารถเข้าถึงไดเรกทอรีในระบบได้ทุกไดเรกทอรีเหมือนกับการล็อกอินเข้ามาตามปกติ แต่ Guest FTP server จะสามารถกำหนดขอบเขตการเข้าถึงไดเรกทอรีที่กำหนดสำหรับผู้ใช้ Guest เท่านั้นได้ การจำกัดขอบเขตการเข้าถึงไดเรกทอรีในระบบจะช่วยเพิ่มความปลอดภัยให้ FTP server และเรียกวิธีการนี้ว่าการ Chroot และเรียกไดเรกทอรีที่จำกัดให้เข้าถึงได้เฉพาะผู้ใช้ Guest ว่า Chroot environment หรือ Chroot Jail

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

อย่างไรก็ตาม เนื่องมาจากข้อบกพร่องของการสื่อสารโดยใช้โพรโตคอล FTP เป็นการสื่อสารที่ไม่ได้มีการเข้ารหัส ถ้าเลี่ยงได้ก็ควรเลี่ยงและไม่แนะนำให้เปิดบริการ FTP ในแบบ Real FTP server และ Guest FTP server เพราะมีอัตราความเสี่ยงสูงที่จะถูกดักจับรหัสผ่านได้ หรือควรเลือกใช้โพรโตคอลที่มีการเข้ารหัสในการโอนย้ายไฟล์เช่น โพรโตคอล Secure FTP หรือ SFTP แทน



--------------------------------------------------------------------------------

ไฟล์ configuration สำหรับการเปิดบริการ Anonymous FTP server บน Red Hat Linux

โปรแกรมที่ใช้เป็นบริการ Anonymous FTP Server ในส่วนนี้จะกล่าวถึงโปรแกรม Wu-FTPd เท่านั้น ซึ่งเป็นโปรแกรม ที่ได้รับความนิยมนำไปใช้งานมากโปรแกรมหนึ่ง เพราะ configuration ไม่ซับซ้อน จะขอไม่กล่าวถึงการติดตั้งโปรแกรม Wu-FTPd บน Red Hat Linux เพราะจะถือว่าผู้ดูแลระบบได้เลือกติดตั้งในขั้นตอนการติดตั้ง Red Hat Linux ไปในขั้นต้นแล้ว หรือผู้ดูแลระบบสามารถติดตั้งโดยใช้ RPM ในภายหลังได้

ไฟล์ configuration ของ Wu-FTPd ใน Red Hat Linux ประกอบด้วย (Wu-FTPd ที่ใช้เป็นตัวอย่าง เลือกวิธีการติดตั้งแบบ RPM)

File name Description
/etc/ftpaccess ไฟล์ configuration หลักของ Wu-FTPd
/etc/ftpusers ฐานข้อมูลผู้ใช้ที่ไม่สามารถเข้ามาใช้บริการ Wu-FTPd ได้
/etc/ftphosts ใช้ในการกำหนด Access Control ให้โฮสใดบ้างที่อนุญาตหรือไม่อนุญาตให้เข้ามาใช้บริการ FTP
/etc/ftpgroups กำหนดกลุ่มในการเข้าถึงบริการ FTP
/etc/ftpconversion เก็บคำสั่งที่ใช้สำหรับการบีบข้อมูลการโอนย้ายไฟล์ผ่าน FTP
ตารางที่ 1 ตารางแสดงไฟล์ configuration ของ Wu-FTPd

มีไฟล์ที่ต้องแก้ไขคือ /etc/ftpaccess และ /etc/ftpusers สำหรับไฟล์อื่นสามารถใช้ค่าดีฟอลต์ที่มาจากติดตั้งได้



--------------------------------------------------------------------------------

โครงสร้าง Chroot Environment สำหรับการให้บริการ Anonymous FTP Server

ข้อดีหนึ่งของการติดตั้งโปรแกรมโดยใช้ RPM ของ Red Hat Linux จะช่วยลดขั้นตอนในการติดตั้งโปรแกรมต่างๆ ได้มาก การติดตั้ง Wu-FTPd โดยใช้ RPM นั้นจะมีโครงสร้าง Chroot Environment ที่สามารถใช้งานได้ทันที

ผู้ดูแลระบบควรจะตรวจสอบให้แน่ใจว่ามีการติดตั้งอย่างถูกต้องหรือไม่ โดยตรวจดูในไฟล์ /etc/passwd ว่ามีฟิลด์นี้หรือไม่

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

ฟิลด์ข้างต้นใช้ในการกำหนดผู้ใช้ที่เป็น Anonymous สำหรับการเข้ามาใช้บริการ FTP ในระบบ และยังบอกให้ทราบถึงไดเรกทอรีที่จะใช้เป็น Chroot Environment ของ FTP Server ข้อดีของโปรแกรม Wu-FTPd คือจะใช้วิธี Chroot จำกัดขอบเขตการเข้าถึงไดเรกทอรีในระบบให้โดยอัตโนมัติ โดยเปลี่ยน Chroot Environment ไว้ตามที่กำหนดในฟืลด์ของผู้ใช้ ftp ในไฟล์ /etc/passwd ซึ่งในที่นี้คือ /var/ftp


--------------------------------------------------------------------------------

กำหนดผู้ใช้ที่อนุญาตให้เข้ามาใช้บริการ Anonymous FTP Server

ไฟล์แรกที่ต้องแก้ไขคือไฟล์ /etc/ftpusers เป็นไฟล์ที่ใช้ในการกำหนดชื่อผู้ใช้ที่ไม่อนุญาตให้เข้ามาใช้บริการ FTP ในระบบได้ หมายถึงชื่อผู้ใช้ที่มีชื่ออยู่ในไฟล์ /etc/ftpusers จะไม่สามารถล็อกอินเข้าใช้บริการ Anonymous FTP Server ได้

การเปิดบริการ Anonymous FTP Server จะอนุญาตให้ผู้ใช้ที่ชื่อ ftp เท่านั้นที่สามารถเข้ามาใช้บริการได้ และไม่อนุญาตให้ผู้ใช้อื่นในระบบเข้ามาได้ วิธีการที่ง่ายและรวดเร็วที่สุดคือนำชื่อผู้ใช้ทุกคนที่อยู่ในไฟล์ /etc/passwd มา และลบชื่อ ftp ออก โดยใช้ตำสั่ง

# cat /etc/passwd | awk -F: '{print $1}' > /etc/ftpusers

แล้วลบคำว่า ftp ออกจากไฟล์ /etc/ftpusers

# cat ftpusers
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
gopher
# ftp
nobody
mailnull
rpm
xfs
rpc
rpcuser
nfsnobody
nscd
ident
radvd
pcap
demo
ntp
who
uptime


--------------------------------------------------------------------------------

แก้ไข File Permission ของ /var/ftp

จากที่ได้กล่าวไปแล้วว่าการติดตั้ง Wu-FTPd โดยใช้ RPM นั้นจะมี Chroot Environment ที่เหมาะสมของ Anonymous FTP อยู่ที่ /var/ftp สิ่งที่ต้องทำเพิ่มคือการกำหนด File Permission ให้เหมาะสมด้วยเพื่อเพิ่มความปลอดภัยให้ Anonymous FTP Server

dr-x--x--x 2 root root 4096 Jul 10 23:11 bin
dr-x--x--x 2 root root 4096 Jul 10 23:06 etc
dr-x--x--x 2 root root 4096 Jul 10 23:06 lib
dr-xr-xr-x 4 root root 4096 Jul 20 16:56 pub

จากนั้นแก้ไข File Permission ของไฟล์ configuration ของ Wu-FTPd ด้วยดังนี้

-rw------- 1 root root 1724 Jul 20 18:09 ftpaccess
-rw------- 1 root root 464 Jun 26 2001 ftpconversions
-rw------- 1 root root 39 Jun 26 2001 ftpgroups
-rw------- 1 root root 104 Jun 26 2001 ftphosts
-rw------- 1 root root 173 Jul 20 16:48 ftpusers



--------------------------------------------------------------------------------

แก้ไขไฟล์ configuration ของ Wu-FTPd

ไฟล์ configuration ของ Wu-FTPd คือ /etc/ftpaccess ตามตัวอย่างนี้ได้ปรับแต่งให้มีความปลอดภัยที่สุดแล้ว ซึ่งสามารถคัดลอกไปใช้ได้

# /etc/ftpaccess

# Don't allow system accounts to log in over ftp
deny-uid %-99 %65534-
deny-gid %-99 %65534-
allow-uid ftp
allow-gid ftp

# Class for FTP server
class demo anonymous 192.168.97.*

# Limit number accounts simultaneous login
limit demo 20 /var/ftp/.too_many.msg

# Email
email ftpadmin@demo.thaicert.nectec.or.th

# Login fail times
loginfails 3

# Notify the users of README files at login and when
# changing to a different directory
readme README* login
readme README* cwd=*

# Messages displayed to the user
message /.message.welcome login
message .message cwd=*

# Permission
compress yes all
tar yes all
chmod no anonymous
delete no anonymous
overwrite no anonymous
rename no anonymous
umask no anonymous

# Logging
log commands anonymous
log transfers anonymous inbound,outbound
log security anonymous

# If /etc/shutmsg exists, don't allow logins
# see ftpshut man page
shutdown /etc/shutmsg

# Ask users to use their email address as anonymous
# password
passwd-check rfc822 warn

# We don't want users being able to upload into these areas
upload /var/ftp/* / no
upload /var/ftp/* /etc no
upload /var/ftp/* /bin no
upload /var/ftp/* /lib no
upload /var/ftp/* /pub no

# We'll prevent downloads with noretrieve.
noretrieve /var/ftp/etc
noretrieve /var/ftp/bin
noretrieve /var/ftp/lib

# User restriced
guest-root /var/ftp ftp
guestgroup ftp
restriced-uid ftp
restriced-gid ftp

# Disable Greeting
greeting text ThaiCERT Demo FTP Anonymous Server
signoff text ThaiCERT Demo FTP Anonymous Server Goodbye!

# Others
keepalive yes
noretrieve .notar

# End of Anonymous FTP Demo Server

ตารางที่ 2 ไฟล์ configuration ของ Wu-FTPd
อธิบายเฉพาะส่วนสำคัญได้ดังต่อไปนี้

deny-uid %-99 %65534-
deny-gid %-99 %65534-
allow-uid ftp
allow-gid ftp
อนุญาตให้ผู้ใช้ที่ชื่อ ftp เท่านั้นเข้ามาใช้บริการได้ (เหมือนกับการกำหนดใน /etc/ftpusers)

class demo anonymous 192.168.97.*
กำหนด class เป็นการบอก Wu-FTPd ว่าผู้ใช้ในแบบใดที่สามารถให้บริการได้ สำหรับ Wu-FTPd ได้แบ่ง class ไว้ 3 class คือ real, guest และ anonymous ซึ่งได้อธิบายไปในตอนต้นแล้วว่ามีกี่แบบและมีลักษณะอย่างไร ส่วนคำว่า demo คือชื่อเซิร์ฟเวอร์ และ 192.168.97.* ใช้เพื่อกำหนดว่าไอพีใดอยู่ใน class ใด

limit demo 20 /var/ftp/.too_many.msg
กำหนดจำนวนผู้ใช้ที่สามารถล็อกอินเข้ามาใช้บริการ FTP Server ได้พร้อมกันในเวลาเดียวกัน ในตัวอย่างกำหนดให้มีผู้ใช้สามารถล็อกอินเข้ามาใช้บริการได้พร้อมกันมากที่สุดในเวลาเดียวกันได้ 20 คน ถ้าเข้ามามากกว่าจำนวนที่อนุญาต จะแจ้งเตือนตามข้อความที่อยู่ในไฟล์ /var/ftp/.too_many.msg นอกจากกำหนดจำนวนผู้ใช้แล้ว ยังสามารถกำหนดวันเวลาที่อนุญาตให้เข้ามาใช้บริการได้อีกด้วย ตัวอย่างเช่น
limit demo 20 MoTuWeTh,Fr0000-1800 /var/ftp/.too_many.msg
หมายความว่าสามารถใช้บริการได้ทั้งวันในวันจันทร์ถึงวันพฤหัสบดี ส่วนวันศุกร์เข้ามาได้เฉพาะเวลา 00.00 ถึง 18.00 เท่านั้น และไม่อนุญาตให้เข้ามาใช้บริการในวันวันเสาร์และอาทิตย์ และเข้ามาใช้บริการได้พร้อมกันได้มากที่สุด 20 คน

message /.message.welcome login
message .message cwd=*
กำหนดข้อความในการแสดงผล ข้อความในไฟล์ /var/ftp/.message.welcome จะแสดงตอนเริ่มต้นเมื่อล็อกอินเข้ามาใช้บริการ ส่วนข้อความในไฟล์ .message จะใช้ในการแจ้งรายละเอียดของไดเรกทอรีต่างๆ เมื่อผู้ใช้เข้าสู่ไดเรกทอรีนั้น

compress yes all
tar yes all
chmod no anonymous
delete no anonymous
overwrite no anonymous
rename no anonymous
umask no anonymous
อนุญาตให้ใช้การบีบอัดข้อมูลในขณะโอนย้ายไฟล์ได้ แต่ไม่อนุญาตให้ chmod, delete, overwrite, rename และ umask บนทุกไดเรกทอรีใน Chroot Environment สำหรับ class แบบ anonymous

log commands anonymous
log transfers anonymous inbound,outbound
log security anonymous
กำหนดให้เก็บล็อกของคำสั่งที่ใช้บน FTP Server และข้อมูลการเชื่อมต่อที่เกิดขึ้นไปเก็บไว้ในไฟล์ /var/log/messages และเก็บล็อกการดาวโหลดไฟล์จาก FTP Server ไว้ในไฟล์ /var/log/xferlog

upload /var/ftp/* / no
upload /var/ftp/* /etc no
upload /var/ftp/* /bin no
upload /var/ftp/* /lib no
upload /var/ftp/* /pub no
ไม่อนุญาตให้อัพโหลดไฟล์ขึ้นเซิร์ฟเวอร์ในทุกไดเรกทอรี

noretrieve /var/ftp/etc
noretrieve /var/ftp/bin
noretrieve /var/ftp/lib
ไม่อนุญาตให้แสดงผลไฟล์ในไดเรกทอรี etc/, bin/ และ lib/

guest-root /var/ftp ftp
guestgroup ftp
restriced-uid ftp
restriced-gid ftp
กำหนดให้มีสิทธิ์เป็นผู้ใช้ ftp เท่านั้นเมื่อเข้ามาใช้บริการ Anonymous FTP Server

greeting text ThaiCERT Demo FTP Anonymous Server
signoff text ThaiCERT Demo FTP Anonymous Server Goodbye!
กำหนดข้อความในการตอบรับการเชื่อมต่อ และปิดการเชื่อมต่อการใช้บริการ Anonymous FTP Server โดยปกติแล้วถ้าไม่กำหนดนั้น ข้อความตอบรับการเชื่อมต่อจะเป็นดังนี้ # ftp demo
Connected to demo.thaicert.nectec.or.th.
220 A8-demo1.nectec.or.th FTP server (Version wu-2.6.1-18) ready.
Name (demo:root): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:
เป็นการแสดงตัวตนของโปรแกรมอย่างชัดเจน ใช้โปรแกรมใด เวอร์ชันอะไร และมีชื่อโฮสว่าอะไร การกำหนดข้อความในการตอบรับการเชื่อมต่อจะทำให้ไม่แสดงข้อมูลเหล่านี้ได้
# ftp demo
Connected to demo.thaicert.nectec.or.th.
220 ThaiCERT Demo FTP Anonymous Server
Name (demo:root): ftp
331 Guest login ok, send your complete e-mail address as password.
Password:



--------------------------------------------------------------------------------

เปิดใช้บริการ Anonymous FTP Server ผ่าน xinetd

แก้ไขไฟล์ /etc/xinetd.d/wu-ftpd ให้ xinetd รอรับการเชื่อมต่อผ่านโพรโตคอล FTP

# default: on
# description: The wu-ftpd FTP server serves FTP connections. It uses \
# normal, unencrypted usernames and passwords for authentication.
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.ftpd
server_args = -l -a
log_on_success += DURATION USERID
log_on_failure += USERID
nice = 10
only_from = 192.168.97
}


แก้ไขไอพีที่อนุญาตให้สามารถเข้ามาใช้บริการ Anonymous FTP Server ใน only_from ตามต้องการ

จากนั้นรีสตาร์ต xinetd เพื่อให้ใช้ configuration ที่มีการแก้ไขใหม่นี้โดยใช้คำสั่ง

# /etc/rc.d/init.d/xinetd restart


--------------------------------------------------------------------------------

แก้ไข logrotate ให้เหมาะสม

แก้ไขไฟล์ /etc/logrotate.d/ftpd เพื่อให้ logrotate จัดการไฟล์ล็อก /var/log/xferlog ซึ่งเป็นไฟล์ที่เก็บข้อมูลการโอนย้ายไฟล์ที่เกิดขึ้นกับ FTP Server

/var/log/xferlog {
# ftpd doesn't handle SIGHUP properly
nocompress
}




--------------------------------------------------------------------------------

เครื่องมืออำนวยความสะดวกสำหรับ FTP Server

ftpwho
ใช้แสดงผลผู้ใช้ที่เข้ามาใช้บริการ FTP Server ในขณะใดขณะหนึ่ง และข้อมูลของโพรเซสที่เกิดขึ้นจากการเชื่อมต่อด้วย

# ftpwho
Service class demo:
1886 ? SN 0:00 ftpd: 192.168.97.220: ftp: IDLE
1891 ? SN 0:00 ftpd: 192.168.97.220: ftp: IDLE
- 2 users (20 maximum)

ftpcount
คล้ายกับ ftpwho แต่แสดงเฉพาะผู้ใช้ที่เข้ามาเท่านั้น

# ftpcount
Service class demo - 2 users (20 maximum)

Bastille Linux 2.0.4

กล่าวนำ
Bastille เป็นโปรแกรมที่ช่วยเสริมสร้างความแข็งแกร่ง (hardening) ให้กับระบบปฏิบัติการ Red Hat Linux, Debian Linux, Mandrake Linux และ HP-UX โดย Bastille สามารถทำงานได้ใน 2 โหมด ดังต่อไปนี้

interactively mode: หากรัน bastille ในโหมดนี้ ตัวโปรแกรมจะแสดงคำถามจำนวนมาก โดยจะแบ่งเป็นโมดูล ซึ่งในแต่ละคำถามจะมีคำอธิบายประกอบด้วย
non-interactively mode: โหมดนี้เหมาะสำหรับผู้ดูแลระบบที่มีเครื่องในความดูแลจำนวนมาก ทำให้สามารถบันทึกไฟล์ configuration จากเครื่องที่รันในโหมด interactively แล้วนำไปใช้กับเครื่องอื่นได้ ซึ่งจะช่วยประหยัดเวลาได้เป็นอย่างดี
การติดตั้ง Bastille

ดาวน์โหลด Bastille ฉบับ rpm จาก http://www.bastille-linux.org
ใช้คำสั่งดังนี้เพื่อติดตั้ง Bastille
# rpm -ivh Bastille-2.0.4-1.0.i386.rpm

หากต้องการรัน Bastille ในแบบ
GUI: ให้ดาวน์โหลดและติดตั้ง perl-Tk ดังนี้
เลือกดาวน์โหลด perl-Tk เวอร์ชันที่เหมาะสมจาก http://www.bastille-linux.org/perl-rpm-chart.html

ติดตั้ง perl-Tk โดยใช้คำสั่ง
# rpm -ivh perl-Tk.x.x.x.rpm

Text Mode: ให้ดาวน์โหลดและติดตั้ง perl-Curses ดังนี้
เลือกดาวน์โหลด perl-Curses เวอร์ชันที่เหมาะสมจาก http://www.bastille-linux.org/perl-rpm-chart.html

ติดตั้ง perl-Curses โดยใช้คำสั่ง
# rpm -ivh perl-Curses.x.x.x.rpm

ขั้นตอนการใช้งาน Bastille

ล็อกอินเป็น root
ตัดสินใจว่าจะรัน Bastille ในโหมดใด (interactively หรือ non-interactively) ทั้งนี้ผู้ที่รัน Bastille ครั้งแรก จะต้องรันในโหมด interactively เท่านั้น เพื่อสร้าง configuration profile ขึ้นมาก่อน โดยการรัน Bastille ในโหมด interactively นี้จะใช้ระยะเวลาประมาณ 1 ชั่วโมง
คำสั่งที่ใช้ในการรัน Bastille ในแต่ละโหมดคือ
Interactive Mode
เลือก user interface ที่ต้องการใช้งาน
Graphic user interface (GUI) : เป็นโหมดดีฟอลต์ในการรัน Bastille ซึ่งมีข้อดีคือ จะมี progress bar แสดงความคืบหน้าของกระบวนการทั้งหมดให้เห็นตลอด
text-based: เหมาะสำหรับระบบที่ไม่ได้ติดตั้งการแสดงผลแบบกราฟฟิก
รันคำสั่ง bastille โดยหากต้องการรัน Bastille ในโหมด text-based นี้ให้ใช้คำสั่ง # bastille -c หากไม่ระบุออปชันใดๆ จะเป็นการรันในโหมด GUI
จากนั้นต้องตอบคำถามทีละข้อ ซึ่งเป็นส่วนสำคัญและใช้เวลามากที่สุด
บันทึก configuration
สั่งให้การเปลี่ยนแปลงมีผลในทันที (apply changes)

Non-interactive Mode
Bastille ไม่มี default configuration ดังนั้นการที่จะรันในโหมดนี้ได้จะต้องสร้าง configuration profile จากการรันแบบ interactive ก่อน
คัดลอก configuration file (/etc/Bastille/config) ไปยังเครื่องที่ต้องการรันในโหมด non-interactive
ติดตั้ง Bastille ในเครื่องที่ต้องการรันในโหมด non-interactive จากนั้นจึงรัน Bastille โดยใช้คำสั่ง # bastille -b


ภายหลังจากการรัน Bastille แล้ว จะมีการเปลี่ยนแปลงตามคำตอบหรือ configuration ที่ให้ไป ซึ่งผู้ดูแลระบบสามารถตรวจสอบสิ่งที่ Bastille แก้ไขไป โดยดูได้จากล็อกไฟล์
action log: /var/log/Bastille/action-log
error log: /var/log/Bastille/error-log
ส่วนใหญ่แล้ว Bastille จะทำการแก้ไขระบบเอง แต่อาจจะมีบางส่วนที่ Bastille ไม่สามารถแก้ไขเองได้ ผู้ดูแลระบบจะต้องจัดการด้วยตัวเอง ซึ่งผู้ดูแลระบบสามารถตรวจสอบข้อมูลนี้ได้ที่ /var/log/Bastille/TODO
(เพิ่มเติม) ผู้ดูแลระบบสามารถใช้คำสั่ง # bastille -r เพื่อยกเลิกสิ่งที่ Bastille ได้แก้ไขไปทั้งหมด ซึ่งจะทำให้ระบบกลับคืนสู่สภาพก่อนการรัน Bastille
คำแนะนำอื่นๆ

ภายหลังการรัน Bastille แล้วอาจจะทำให้ซอฟต์แวร์ตัวอื่นไม่สามารถทำงานได้ตามปกติ ดังนั้นจึงควรรัน Bastille ทดสอบในเครื่องทดสอบที่มี environment เหมือนเครื่องใช้งานจริงก่อนเสมอ เพื่อป้องกันปัญหาดังกล่าว
เพื่อป้องกันไม่ให้ระบบมีช่องโหว่ ผู้ดูแลระบบจะต้องติดตั้ง patch ล่าสุดสำหรับระบบปฏิบัติการและซอฟต์แวร์ที่ติดตั้งอยู่เสมอ แต่อย่างไรก็ตาม patch ที่ติดตั้งภายหลังอาจจะเป็นตัวทำให้เกิดช่องโหว่ที่ Bastille เคยจัดการให้แล้วอีกครั้ง ดังนั้นจึงควรรัน Bastille ใหม่อีกครั้งภายหลังการติดตั้ง patch เสมอ
Bastille Modules
ข้อมูลดังต่อไปนี้ เป็นตัวอย่างคำถามในการรัน Bastille เวอร์ชัน 2.0.4-1.0 บน Red Hat Linux 8.0 (ค่าที่อยู่ในเครื่องหมาย [] เป็นคำตอบที่เป็น default ของคำถามนั้นๆ)

Module: File Permissions
Q: Would you like to set more restrictive permissions on the administration utilities (linuxconf, fsck, ifconfig, runlevel and portmap) ? [N]
Q: Would you like to disable SUID status for mount/umount? [Y]
Q: Would you like to disable SUID status for ping? [Y]
Q: Would you like to disable SUID status for at? [Y]
Q: Would you like to disable the r-tools? [Y]
Q: Would you like to disable the r-tools (rsh/remsh, rcp, rlogin, rdist, etc.)? [Y]
Q: Would you like to disable SUID status for usernetctl? [Y]
Q: Would you like to disable SUID status for traceroute? [Y]


Module: ACCOUNT SECURITY
Q: Should Bastille disable clear-text r-protocols that use IP-based authentication? [Y]
Q: Would you like to enforce password aging? [Y] (ถ้าตอบ yes จะตั้งเป็น 180 วัน)
Q: Would you like to restrict the use of cron to administrative accounts? [Y]
Q: Do you want to set a default umask? [Y]
Q: What umask would you like to set for users on the system? [077] (สามารถเลือกได้ตั้งแต่ 002, 022, 027, 077
Q: Should we disallow root login on tty's 1-6? [N]


Module: Boot Security
Q: Would you like to password-protect the GRUB prompt? [N]
Q: Would you like to disable CTRL-ALT-DELETE rebooting? [N]
Q: Would you like to password protect single-user mode? [Y]

Module: Secure Inetd Module
Q: Would you like to set a default-deny on TCP Wrappers and xinetd? [N]
Q: Should Bastille ensure the telnet service does not run on this system? [Y]
Q: Should Bastille ensure the FTP service does not run on this system? [Y]
Q: Would you like to display "Authorized Use" messages at log-in time? [Y]
Q: Who is responsible for granting authorization to use this machine? (ให้ใส่ชื่อผู้รับผิดชอบเครื่องนี้ หรือชื่อหน่วยงาน)

Module: Disable User Tools
Q: Would you like to disable the gcc compiler? [N]

Module: Configure Misc PAM
Q: Would you like to put limits on system resource usage? [N]
Q: Should we restrict console access to a small group of user accounts? [N]
Q: Which accounts should be able to login at console? [root]

Module: Logging
Q: Would you like to add additional logging? [Y]
หากตอบ Yes โปรแกรมจะทำการแก้ไข /etc/syslog.conf ดังนี้

############ BASTILLE ADDITIONS BELOW : #################
# Log warning and errors to the new file /var/log/syslog
*.warn;*.err /var/log/syslog

# Log all kernel messages to the new file /var/log/kernel
kern.* /var/log/kernel

# Log all logins to /var/log/loginlog
auth.*;user.*;daemon.none /var/log/loginlog

# Log additional data to the Alt-F7 and Alt-F8 screens (Pseudo TTY 7 and 8)

*.info;mail.none;authpriv.none /dev/tty7
authpriv.* /dev/tty7
*.warn;*.err /dev/tty7
kern.* /dev/tty7
mail.* /dev/tty8

*.* /dev/tty12
########## BASTILLE ADDITIONS CONCLUDED : ###############

Q: Do you have a remote logging host? [N]

Module: Miscellaneous Daemons
Q: Would you like to deactivate NIS server programs? [Y]

Module: Sendmail
Q: Do you want to stop sendmail from running in daemon mode? [Y]
Q: Would you like to run sendmail via cron to process the queue? [N]

Module: DNS
Q: Would you like to chroot named and set it to run as a non-root user? [N]

Module: Apache
Q: Would you like to bind the web server to listen only to the localhost? [N]
Q: Would you like to bind the web server to a particular interface? [N]
Q: Would you like to deactivate the following of symbolic links? [Y]
Q: Would you like to deactivate server-side includes? [Y]
Q: Would you like to disable CGI scripts, at least for now? [Y]
Q: Would you like to disable indexes? [N]

Module: Printing
Q: Would you like to disable printing? [N]


Module: TMPDIR
Q: Would you like to install TMPDIR/TMP scripts? [N]

Module: Firewall
Q: Would you like to run the packet filtering script? [N]
Q: Are you finished answering the questions, i.e. may we make the changes?

หลังจากการรัน Bastille แล้ว ผู้ดูแลระบบควรรีสตาร์ทเครื่องคอมพิวเตอร์ เพื่อให้การแก้ไขทั้งหมดมีผลในทันที (การแก้ไขบางอย่างมีผลในทันทีโดยไม่ต้องรีสตาร์ทเครื่องคอมพิวเตอร์)

Removing Bastille

หากทำการ uninstall Bastille ไปแล้ว จะไม่สามารถแก้ไขระบบให้คืนสู่สภาพก่อนการรัน Bastille ได้ อย่างไรก็ตาม Bastille ยังมี revert-action script เหลืออยู่ในระบบภายหลังการ uninstall ซึ่งสคริปต์ตัวนี้จะช่วย revert สิ่งที่ Bastille ได้กระทำกับไฟล์ต่างๆ (ในระดับของไฟล์เท่านั้น) เช่น แก้ไข permission ของไฟล์ให้กลับคืนสู่สภาพเดิมก่อนการรัน Bastille โดยผู้ดูแลระบบสามารถเรียกใช้งานสคริปต์นี้ได้ที่ /var/log/Bastille/revert
ไฟล์สำคัญที่เกี่ยวข้อง

Description Filename
Configuration file /etc/Bastille/config
Error log /var/log/Bastille/error-log
Action log /var/log/Bastille/action-log
TODO /var/log/Bastille/TODO
Revert actions script /var/log/Bastille/revert/revert-actions

เอกสารอ้างอิง

Bastille Linux, http://www.bastille-linux.org
Bastille Linux: A Walkthrough, Jay Beale , http://www.securityfocus.com/infocus/1414

Syslog-ng (Syslog new generation)

ผู้ดูแลระบบ *nix ส่วนใหญ่คงคุ้นเคยกับ syslog มาเป็นอย่างดี เพราะ syslog ถือได้ว่าเป็น log daemon ที่ใช้กันมาอย่างยาวนานและกลายเป็นมาตรฐานของการเก็บข้อมูลล็อกของระบบปฏิบัติการ *nix ในหลายๆ ตัว แต่อย่างไรก็ตาม syslog ก็มีข้อเสียบางอย่าง ที่ log daemon ตัวอื่น เช่น syslog-ng, msyslog สามารถแก้ไขข้อบกพร่องดังกล่าวได้ เอกสารฉบับนี้จะแนะนำ syslog-ng ซึ่งเป็น log daemon ตัวใหม่ที่กำลังเป็นที่นิยมกันมากขึ้น และจะกล่าวถึงการสร้าง configuration แบบละเอียดเพื่อให้สามารถนำ syslog-ng ไปใช้งานได้จริง

แนะนำ Syslog-ng (Syslog new generation)
syslog-ng สามารถแก้ไขข้อบกพร่องส่วนใหญ่ของ syslog ได้ โดย


syslog-ng สามารถทำงานได้ทั้งบน TCP และ UDP

syslog-ng สามารถทำการกรอง (filter) ข้อมูลได้ด้วย regular expression

syslog-ng สามารถทำงานในรูปแบบที่อ้างอิง priority/facility ได้ ดังนั้น มันจึงสามารถทำงานแทนที่ syslog ได้

syslog-ng สนับสนุน log forwarding ซึ่งทำให้สามารถทราบได้ว่า ต้นทางของล็อกถูกส่งมาจากเครื่องใด และผ่านเครื่องใดมาบ้าง

นอกจากนี้ syslog-ng ยังมีรูปแบบของไฟล์ configuration ที่ง่าย แต่มีความยืดหยุ่นสูง สามารถนำไปประยุกต์ใช้ให้ตรงความต้องการได้โดยง่าย

การติดตั้ง Syslog-ng
syslog-ng ได้ถูกติดตั้งไว้แล้วใน Debian แต่ในระบบปฏิบัติการอื่นนั้น ผู้ดูแลระบบจะต้องติดตั้งเองโดยการคอมไพล์จาก source ทั้งนี้จะต้องติดตั้ง libol ก่อนจึงจะสามารถติดตั้ง syslog-ng ได้

ผู้ดูแลระบบสามารถดาวน์โหลด libol และ syslog-ng ได้จาก http://www.balabit.com/downloads/ หลังจากนั้นให้ขยายไฟล์ออกมา และทำการติดตั้งดังคำสั่งด้านล่างนี้

# cd libol-x.x
# ./configure; make; make install

# cd syslog-ng-x.x
# ./configure --sysconfdir=/etc; make; make install

คำสั่งด้านบนจะทำการติดตั้ง syslog-ng ไปไว้ที่ตำแหน่งโดยดีฟอลต์ (default location) คือ /usr/local หากต้องการติดตั้ง syslog-ng ไปยัง path อื่นให้ใช้คำสั่ง ./configure --prefix=/your/dir/

หลังจากการติดตั้งแล้ว ผู้ดูแลระบบจำเป็นต้องดำเนินการบางอย่างเพื่อให้ syslog-ng ทำงานได้ตามปกติ ดังนี้

สร้างไดเรกทอรี /etc/syslog-ng
สร้างไฟล์ configuration ของ syslog-ng (หรือคัดลอกมาจากไดเรกทอรี contrib/ และ doc/) ไว้ที่ /etc/syslog-ng/syslog-ng.conf
สร้าง startup script ของ syslog-ng ไว้ที่ /etc/init.d/syslog-ng รวมทั้งสร้าง symbolic link จาก run level ต่างๆ เช่น /etc/rc2.d, /etc/rc3.d, /etc/rc5.d) ผู้ดูแลระบบสามารถคัดลอกตัวอย่าง startup script ของระบบปฏิบัติการที่ต้องการได้จากไดเรกทอรี contrib/
การใช้งาน syslog-ng
ผู้ดูแลระบบควรรัน syslog-ng ภายหลังการสร้างไฟล์ configuration เสร็จสิ้นแล้วเท่านั้น โดย syslog-ng มีออปชันในการรันค่อนข้างง่าย ดังตารางที่ 1

ตารางที่ 1 syslog-ng command line options
Flag Description
-d แสดงข้อความดีบัก
-v แสดงข้อความดีบักมากกว่าเดิม (verbose)
-f filename ใช้ filename เป็นไฟล์ configuration (default = /etc/syslog-ng/syslog-ng.conf)
-V แสดงหมายเลขเวอร์ชัน
-p pidfilename ตั้งชื่อไฟล์ proce-ID (default = /var/run/syslog-ng.pid)

Configuring Syslog-ng
Configuration ของ syslog-ng มีความยุ่งยากมากกว่าของ syslog แต่ก็ให้ประโยชน์ในแง่ของความยืดหยุ่นที่ได้และความสามารถที่มีมากกว่า หลังจากที่ทำความเข้าใจ configuration แล้ว ผู้ดูแลระบบสามารถสร้างไฟล์ configuration ง่ายๆ ขึ้นมาได้ด้วยตัวเอง และสามารถปรับปรุงให้เหมาะสมกับระบบของตนต่อไป

โดยปกติแล้ว syslog-ng จะอ่านข้อมูล configuration จากไฟล์ /etc/syslog-ng/syslog-ng.conf

ตัวอย่างที่ 1 แสดง configuration อย่างง่ายของ syslog-ng
options {
use_fqdn(no);
sync(0);
};

source s_sys { unix-stream("/dev/log"); internal(); };
source s_net { udp(); };

destination d_security { file("/var/log/security"); };
destination d_meages { file("/var/log/meages"); };
destination d_console { usertty("root"); };

filter f_authpriv { facility(auth, authpriv); };
filter f_meages { level(info .. emerg) and not facility(auth, authpriv); };
filter f_emergency { level(emerg); };

log { source(s_sys); filter(f_authpriv); destination(d_security); };
log { source(s_sys); filter(f_meages); destination(d_meages); };
log { source(s_sys); filter(f_emergency); destination(d_console); };


จากตัวอย่างจะเห็นได้ว่า ส่วนประกอบหลักของ configuration ประกอบไปด้วย 5 statement หลักคือ options{}, source{}, destination{}, filter{}, log{} ซึ่งแต่ละ statement จะคั่นด้วยเครื่องหมาย semicolon(;)

จะเห็นได้ว่ารูปแบบ configuration ของ syslog-ng.conf จะคล้ายคลึงกับรูปแบบของภาษาซี (C) ซึ่งทุกๆ statement จะต้องลงท้ายด้วยเครื่องหมาย semicolon ส่วน whitespace หรือช่องว่างนั้นไม่มีผลใดๆ ใน configuration จะใช้งานเพียงเพื่อให้สามารถอ่านได้ง่ายเท่านั้น

Global options
เป็นออปชันที่ถูกประกาศใช้งานภายใน options {} statement ซึ่งบางออปชันนั้นนอกจากสามารถใช้งานได้ใน option {} เองแล้วยังสามารถใช้งานใน statement อื่น เช่น source {}, destination {}, filter {}, log {} ได้อีกด้วย

ตารางที่ 2 options{}
Option Description
chain_hostnames( yes | no ) หลังจากแสดง hostname ของเครื่องที่ส่งล็อกมายังเครื่องนี้ผ่านทาง tcp/udp แล้ว ให้แสดง hostname ของทุกเครื่องที่ข้อมูลล็อกถูก handle (โดย syslog-ng) มาตลอดทาง ซึ่งเหตุการณ์นี้จะเกิดขึ้นเมื่อล็อกถูกส่งต่อจาก syslog-ng server ไปยัง syslog-ng server อื่นๆ เป็นทอดๆ (default = yes)
keep_hostname( yes | no ) ให้เชื่อใจ (trust) ค่า hostname ที่อยู่ใน tcp/udp message (default = no)
use_fqdn( yes | no ) บันทึก full name ของเครื่องที่ส่ง tcp/udp message (default = no)
use_dns( yes | no ) ให้ resolve ค่า IP address ในข้อมูลล็อก เป็น hostname (default = yes)
use_time_recvd( yes | no ) ตั้งค่า message timestamp เป็นเวลาที่ล็อกเดินทางมาถึง ซึ่งโดยปกติแล้วจะใช้เวลาที่ระบุในล็อก (default = no)
time_reopen( NUMBER ) เมื่อมีแพ็กเกต tcp ที่สูญหายระหว่างทางหรือเหตุที่ทำให้ไม่สามารถสื่อสารได้ตามปกติ syslog-ng จะพยายามสร้างการสื่อสารใหม่ขึ้นมา โดยจะรอเวลาตามที่ระบุ (NUMBER) หน่วยเป็นวินาที (default = 60)
time_reap( NUMBER ) เมื่อ syslog-ng เปิดไฟล์ที่เป็น inactive file (ไม่มีการเขียนข้อมูลลงไฟล์) syslog-ng จะพยายามปิดไฟล์ดังกล่าว โดยจะรอเวลาตามที่ระบุ (NUMBER) หน่วยเป็นวินาที (default = 60)
log_fifo_size( NUMBER )a ขนาดของ message ที่จะถูกนำไปเข้าคิวในหน่วยความจำก่อนที่จะถูกประมวลผล

ถ้าคิวเต็มและ syslog-ng ไม่สามารถทำงานได้ตามปกติ (busy) ข้อความล็อกที่ส่งเข้ามาจะถูกละทิ้ง แต่หากระบุขนาด FIFO จำนวนมากเกินไปก็จะทำให้สิ้นเปลืองหน่วยความจำ (default = 100)

sync( NUMBER )a จำนวนบรรทัดของ message ที่จะเขียนลงไฟล์ก่อนที่ไฟล์จะถูก synchronize (default = 0)
owner( string )a ตั้งค่าชื่อ user สำหรับไฟล์ล็อกที่ syslog-ng สร้างขึ้นมาใหม่ (default = root)
group( string )a ตั้งค่าชื่อ group สำหรับไฟล์ล็อกที่ syslog-ng สร้างขึ้นมาใหม่ (default = root)
perm( NUMBER )a ตั้งค่า file permission สำหรับไฟล์ล็อก (default = 0600)
create_dirs( NUMBER )a เป็นตัวบอกว่าจะให้ syslog-ng สร้างไดเรกทอรีใหม่ได้หรือไม่ ในกรณีที่ path ที่ระบุไม่มีอยู่จริงในระบบ (default = no)
dir_owner( string )a ตั้งค่าชื่อ user สำหรับไดเรกทอรีที่ syslog-ng สร้างขึ้นมาใหม่ (default = root)
dir_group( string )a ตั้งค่าชื่อ group สำหรับไดเรกทอรีที่ syslog-ng สร้างขึ้นมาใหม่ (default = root)
dir_perm( NUMBER )a ตั้งค่า directory permission เมื่อ syslog-ng สร้างไดเรกทอรีใหม่ (default = 700)
a : ออปชันที่สามารถนำไปใช้กับ file() ใน destination{} ได้

สำหรับออปชันที่เกี่ยวข้องกับ hostname ได้แก่ chain_hostnames(), keep_hostname(), use_fqdn() และ use_dns() นั้น สนใจเฉพาะค่า hostname ของเครื่องที่ส่งล็อกมาเท่านั้น ไม่เกี่ยวข้องกับ hostname ที่ระบุใน message body แต่อย่างใด

use_dns()
เช่น หากใน syslog-ng.conf มี statement ดังต่อไปนี้

options { use_dns(yes); };

และเครื่อง joe-chong ซึ่งมีไอพีเป็น 10.0.0.7 ส่งล็อกดังต่อไปนี้มาที่ log server

Oct 13 19:56:56 s_sys@10.0.0.7 sshd[1222]: Accepted publickey for ROOT from 10.0.0.222 port 1355 ssh2

เครื่อง log server จะทำการบันทึกล็อกดังนี้

Oct 13 19:56:56 s_sys@joe-chong sshd[1222]: Accepted publickey for ROOT from 10.0.0.222 port 1355 ssh2

จากตัวอย่างจะเห็นว่าไอพี 10.0.0.7 นั้นถูก resolve ให้เป็น joe-chong แต่ข้อมูลไอพีอื่นที่อยู่ใน message body คือ 10.0.0.222 นั้น ไม่ได้ถูก resolve ไปด้วย ดังนั้นจึงสรุปได้ว่าออปชัน use_dns(yes) นั้นจะทำการ resolve เฉพาะ hostname ที่อยู่ในส่วนต้นบรรทัดของ message เท่านั้น

นอกจากนี้ออปชันบางตัวที่เกี่ยวข้องกับไฟล์และไดเรกทอรี ยังสามารถใช้งานได้ทั้งใน global options() และ destination() ซึ่งก็คือ modifier ของออปชัน file() เช่น owner(), group() เป็นต้น ทั้งนี้หากมีการระบุค่าออปชันบางตัวที่ซ้ำกันใน options() section และ section อื่นๆ ค่าที่ระบุใน section อื่นๆ จะถูกนำไปใช้แทนที่ค่าใน options() section

keep_hostname() เป็นออปชันที่ใช้งานค่อนข้างมาก ซึ่งจะตั้งค่าดีฟอลต์เป็น no ซึ่งหมายถึง syslog-ng จะไม่ใช้ค่า hostname ที่ส่งมา มันจะทำการ resolve หา hostname จาก source IP address ของแพ็กเกตที่ส่งล็อกเข้ามา เพื่อป้องกันการปลอม hostname จากเครื่องที่ส่งล็อกเข้ามา ซึ่งจะแตกต่างจาก syslog ซึ่งใช้ค่า hostname ตามที่ได้รับมาจาก log message

chain_hostnames() โดยดีฟอลต์มีค่าเป็น yes ซึ่งหมายถึง syslog-ng จะแสดงรายชื่อ host ทุก host ที่ message ถูกส่งต่อมา (relayed by syslog-ng) โดย host ดังกล่าวต้องเป็น host ที่ติดตั้ง syslog-ng และทำหน้าที่ redirect ข้อมูลล็อกมายัง log server (ไม่ใช่ host ที่เป็น network host ตามปกติ เช่น router, firewall)

ตัวอย่างที่ 2 แสดงผลของการใช้งาน keep_hostname() และ chain_hostnames() ซึ่งทั้งสองค่าถูกตั้งค่าดีฟอลต์ให้เป็น yes โดยในตัวอย่างข้อมูลล็อกจะถูกสร้างขึ้นโดยเครื่องปัจจุบัน (locally) จากนั้นจะถูกส่งต่อไปยัง host1 ซึ่งมี hostname จริงๆ เป็น "linux" ซึ่งจะส่งข้อมูลล็อกต่อไปยัง host2 โดย host2 จะทำหน้าที่ตรวจสอบ hostname ผ่านทาง DNS จากนั้นล็อกจึงจะถูกส่งต่อไปยัง host3 ต่อไป

ตัวอย่างที่ 2 แสดงตัวอย่างล็อกที่ถูกส่งต่อผ่านโฮสต์ Original log entry on host1:
Oct 9 23:57:16 s_loc@linux syslog-ng[1656]: syslog-ng version 1.4.13 starting

Entry as sent to and recorded by host2:
Oct 9 23:57:16 s_loc@linux/host1 syslog-ng[1656]: syslog-ng version 1.4.13 starting

Same log entry as relayed from host2 to host3:
Oct 9 23:57:16 s_loc@linux/host1/host2 syslog-ng[1656]: syslog-ng version 1.4.13 starting


สิ่งที่น่าสนใจจากตัวอย่างที่ 2 คือ

เมื่อ host2 บันทึกข้อมูลล็อก ตัว syslog-ng ได้ตรวจสอบข้อมูลจาก DNS แล้วพบว่า จริงๆ แล้ว host1 นั้นมี DNS name เป็น linux แต่ syslog-ng เองก็ยังไม่มั่นใจ จึงเพิ่ม hostname "linux" ต่อท้าย hostname "host1" (host1 อาจจะเป็นชื่อที่ปลอมมา)
timestamp ที่ระบุในล็อกทั้งสามชุดมีเวลาที่ตรงกัน ซึ่งหมายถึง เวลาที่เห็นนั้นถูกสร้างขึ้นจากเครื่องที่ให้กำเนิดล็อกแล้วจึงส่งล็อกต่อไปเรื่อยๆ ผ่านโฮสต์ต่างๆ ซึ่งโฮสต์เหล่านั้นไม่ได้ตั้งค่า use_time_recd() ให้เป็น yes โฮสต์ต่างๆ จึงไม่ได้แก้ไขข้อมูล timestamp จึงมีผลให้เวลาทั้งสามจุดตรงกันหมด
จากข้อมูลล็อกที่ host1 จะพบคำว่า s_loc อยู่ ซึ่งค่าดังกล่าวเป็นค่า source{} ของ syslog-ng ที่อยู่บน host1
ตัวอย่างที่ 3 แสดง configuration ของ syslog-ng บนเครื่อง host1 options{};
source s_loc {unix-stream("/dev/log"); internal(); };
destination d_host2 { udp("host2" port(514)); };
destination d_local { file("/var/log/messages"); };
log { source(s_loc); source(s_net); destination(d_host2); destination(d_local); };


Sources
จากตัวอย่างที่ 3 มีการประกาศค่า source{} หนึ่งครั้ง โดยข้อมูลภายใน source{} ซึ่งก็คือ source driver ทำหน้าที่ระบุถึงแหล่งที่มาของข้อมูลล็อก ทั้งนี้ใน syslog-ng.conf หนึ่งๆ สามารถประกาศ source{} ได้ไม่จำกัดครั้ง ซึ่งภายใน source{} แต่ละตัวนั้นสามารถบรรจุ driver ได้ไม่จำกัดเช่นกัน

รูปแบบการประกาศ source{}

source sourcelabel1 { drivers([options]); drivers([options]); etc. };

โดย sourcelabel หมายถึง string ที่ใช้เพื่ออ้างอิงกลุ่มของ source driver เพื่อให้สามารถนำไปใช้งานต่อได้อย่างสะดวก เช่น

source s_loc { unix-stream("/dev/log"); internal(); };

จากบรรทัดด้านบน s_loc เป็นชื่อที่ถูกใช้เพื่ออ้างอิงถึงข้อมูลล็อกที่ถูกดึงมาจาก /dev/log และข้อมูลล็อกจาก syslog-ng เอง

syslog-ng มีความหยืดหยุ่นอย่างมากในการใช้งาน source driver ซึ่งสามารถรับข้อมูลล็อกได้จาก Unix socket เช่น /dev/log หรือล็อกจาก syslog-ng เอง รวมทั้งล็อกที่ส่งมาจากเครื่องอื่นผ่านทาง TCP, UDP protocol และยังสามารถรับล็อกจากไฟล์พิเศษเช่น ไฟล์ใน /proc ได้อีกด้วย ตารางที่ 3

ตารางที่ 3 Source drivers
Source Description
internal() ล็อกที่รับมาจาก syslog-ng daemon เอง
file("filename" [options]) ล็อกที่อ่านมาจากไฟล์ที่ระบุไว้ เช่น /proc/kmsg
pipe("filename") ล็อกที่รับมาจาก name pipe
unix-stream("filename" [options]) ล็อกที่รับมาจาก Unix socket ที่อยู่ในโหมด connection-oriented stream เช่น /dev/log (maximum concurrent connections default = 100)
unix-dgram("filename" [options]) ล็อกที่รับมาจาก Unix socket ที่อยู่ในโหมด connectionless datagram เช่น ล็อกของ klogd จาก /dev/log
tcp([ip(address)] [port(#)] [max-connections(#)] ) ล็อกที่รับมาจากเครื่องอื่นที่ส่งข้อมูลผ่านทาง TCP ตามหมายเลขพอร์ตที่ระบุ (default = 514) โดยรับข้อมูลจาก local network interface (default = all) และสามารถระบุจำนวน concurrent connections ได้ (default = 10)
udp([ip(address)] [port(#)]) ล็อกที่รับมาจากเครื่องอื่นที่ส่งข้อมูลผ่านทาง UDP ตามหมายเลขพอร์ตที่ระบุ (default = 514) โดยรับข้อมูลจาก local network interface (default = all)

internal()
syslog-ng เองจะส่งข้อมูลล็อก เช่น startup message, errors หรือล็อกอื่นๆ ไปยัง internal() ดังนั้นหากต้องการรับล็อกของตัวโปรแกรม syslog-ng จะต้องระบุ internal() ไว้ใน source{} ด้วย

file()
file() ใช้เพื่อระบุชื่อไฟล์ที่ต้องการให้ syslog-ng ไปดึงข้อมูลล็อกมา เช่น ไฟล์ /proc/kmsg ซึ่งเป็นไฟล์ข้อมูลล็อกของเคอร์เนลหากต้องการให้ syslog-ng ดึงข้อมูลล็อกจาก text file ปกติ เช่น ล็อกของ httpd นั้น จะต้องสร้างสคริปต์ขึ้นมาเพิ่มเติมเพื่อทำหน้าที่ pipe ผลลัพธ์ของคำสั่ง tail -f [filename] ไปยัง logger (ดูรายละเอียดเพิ่มเติมเกี่ยวกับการใช้งาน logger ได้จากคำสั่ง # man logger)

unix-stream(), unix-dgram()
เป็น source driver ที่สำคัญ โดยจะรับข้อมูลจากการเชื่อมต่อแบบ connection-oriented และ connectionless Unix socket สำหรับลีนุกซ์ที่ใช้เคอร์เนลเวอร์ชัน 2.4.1 หรือสูงกว่านั้น จะใช้งาน Unix datagram socket ดังนั้นหากต้องการเก็บข็อมูลล็อกของ /dev/log จะต้องใช้ unix-dgram("/dev/log") เท่านั้น จึงจะสามารถได้รับล็อกตามปกติ เช่น

source s_loc { unix-dgram("/dev/log"); internal(); };

หากใช้ลีนุกซ์ที่มีเวอร์ชันของเคอร์เนลเป็น 2.4.0 หรือต่ำกว่า จะต้องใช้ unix-stream() ในการเก็บข้อมูลล็อกจาก /dev/log

tcp(), udp()
ทั้ง tcp() และ udp() จะรับข้อมูลล็อกจาก remote host ผ่านทาง TCP protocol (connection-oriented) และ UDP protocol (connectionless) โดยทั้งคู่สามารถตั้งให้รอรับข้อมูลล็อกผ่านทาง IP address และ port ที่ระบุได้ โดยดีฟอลต์แล้ว syslog-ng จะรอรับการเชื่อมต่อที่ 0.0.0.0:514 ซึ่งหมายถึง "รอรับการเชื่อมต่อที่ทุก network interface, port 514"

การระบุ IP address มีประโยชน์สำหรับโฮสต์ที่มี network interface มากกว่าหนึ่ง และต้องการเปิดพอร์ตรอรับล็อกจากบาง interface เท่านั้น ดังตัวอย่างที่ 4

ตัวอย่างที่ 4 ตัวอย่างการระบุ ip, port ใน source{}
source s_tcpmessages { tcp( ip(192.168.1.19) port(10514) ); };
source s_udpmessages { ucp(); };


จากตัวอย่างที่ 4 ซึ่งกำหนดให้ s_tcpmessages รับข้อมูลล็อกทุกอันที่ส่งมายัง network interface ที่มีไอพีเป็น 192.178.190.190 TCP port 10514 ส่วน s_udpmessages นั้นรอรับข้อมูลล็อกทุกอันผ่านทาง UDP port 514 ในทุกๆ local network interface

ip(), port(), max_connections()
นอกเหนือจาก ip() และ port() แล้ว ยังมี max_connections() ซึ่งใช้ร่วมกับ tcp() เพื่อจำกัดจำนวนการเชื่อมต่อพร้อมกันสูงสุด ซึ่งการใช้งานออปชันนี้ต้องใช้ค่าที่เหมาะสมกับระบบ เพราะหากกำหนดค่าที่มากไปอาจจะมีผลให้ล็อกบางส่วนถูกทิ้ง (drop) ไปเมื่อเซิร์ฟเวอร์ทำงานเกินพิกัด หากกำหนดน้อยเกินไปและมีการเชื่อมต่อเพื่อส่งล็อกถึงขีดที่กำหนดไว้ จะมีผลให้ข้อมูลล็อกถูก drop ไป จนกระทั่งจะมีช่องว่างเพียงพอที่จะสร้างการเชื่อมต่อ

ตัวอย่างที่ 5 ตัวอย่างการใช้งาน max-connections()
source s_tcpmessages { tcp( ip(192.168.1.19) port(10514) max-connections(100)); };


ค่าดีฟอลต์ของ max-connections() สำหรับ unix-stream() มีค่าเป็น 100 และสำหรับ tcp() มีค่าเป็น 10

Destinations
syslog-ng สามารถเก็บข้อมูลล็อกในรูปแบบเดียวกันกับที่ syslog เก็บได้ ไม่ว่าจะเป็น ASCII file, name pipe, remote host (ผ่านทาง UDP) และแสดงผลออกทาง TTY นอกจากนี้ syslog-ng ยังสามารถส่งข้อมูลล็อกไปยัง Unix socket, remote host (ผ่าน TCP) และส่งต่อไปยัง standard input ของโปรแกรมอื่น

ตารางที่ 5 Destination drivers Driver Description
file("filename [$MACROS]") เก็บข้อมูลล็อกลง Ascii file ตามปกติ หาก syslog-ng ไม่พบไฟล์ตามที่ระบุ มันจะสร้างให้โดยอัตโนมัติ
ส่วน MACRO นั้น ใช้เพื่อกำหนดชื่อไฟล์แบบ dynamic เช่น ตั้งชื่อไฟล์ตาม facility ของข้อมูลล็อก
(โปรดอ่านรายละเอียดเพิ่มเติม ที่เอกสารเผยแพร่เรื่อง "ทำความรู้จักกับ syslogd" )

tcp("address" [port(#);]) ส่งข้อมูลล็อกไปยัง IP address หรือ hostname ที่ระบุผ่านทาง TCP port ที่ระบุ (default port = 514)
udp("address" [port(#);]) ส่งข้อมูลล็อกไปยัง IP address หรือ hostname ที่ระบุผ่านทาง UDP port ที่ระบุ (default port = 514)
pipe("pipename") ส่งข้อมูลล็อกไปยัง name pipe เช่น /dev/xconsole
unix-stream("filename" [options]) ส่งข้อมูลล็อกไปยัง Unix socket แบบ connection-oriented เช่น /dev/log
unix-dgram("filename" [options]) ส่งข้อมูลล็อกไปยัง Unix socket แบบ connectionless เช่น /dev/log
usertty(username) ส่งข้อมูลล็อกไปยัง console ของ user ที่ระบุ
program("/path/to/program") ส่งข้อมูลล็อกเพื่อนำไปเป็น standard input ของโปรแกรมที่ระบุ

syslog-ng สามารถเก็บข้อมูลลงไฟล์ได้และมีความสามารถมากกว่า syslog ตรงที่มีการใช้งานมาโคร มาโครช่วยให้สามารถตั้งชื่อไฟล์ที่ใช้เก็บข้อมูลล็อกได้อย่างน่าดี เช่น ตั้งชื่อไฟล์ตามปีเดือนวัน หรือตั้งชื่อไฟล์ตาม facility, priority

ตัวอย่างที่ 6 ตัวอย่างการใช้งานมาโคร destination d_dailylog { file("/var/log/messages.$WEEKDAY"); };


จากตัวอย่าง configuration ด้านบน เมื่อ syslog-ng ต้องการเขียนข้อมูลล็อกลงไฟล์ มันจะสร้างไฟล์ชื่อ /var/log/messages.Tues, /var/log/messages.Wed ซึ่งขึ้นกับวันที่เก็บข้อมูลล็อกดังกล่าว

ตารางที่ 6 Macros supported in file() destinations Macro Expands to
Program ชื่อของโปรแกรมที่ส่งล็อกเข้ามา
HOST ชื่อโฮสต์ที่เป็นจุดกำเนิดล็อก
FACILITY facility ของล็อกที่ถูกส่งเข้ามา
PRIORITY or LEVEL priority ของล็อกที่ถูกส่งเข้ามา
YEAR ปีปัจจุบันa
MONTH เดือนปัจจุบันa
DAY วันที่ปัจจุบันa
WEEKDAY วันปัจจุบันa เช่น Monday
HOUR ชั่วโมงปัจจุบันa
MIN นาทีปัจจุบันa
SEC วินาทีปัจจุบันa
a : หากออปชัน use_time_recvd() ถูกตั้งค่า yes แล้ว ข้อมูลเวลาจะอ้างอิงจาก local system ขณะที่ล็อกเดินทางมาถึง แต่หาก use_time_recvd() มีค่าเป็น no ก็จะอ้างอิงเวลาจากเวลาที่ปรากฎในข้อมูลล็อก
syslog-ng จะสร้างไฟล์ขึ้นมาใหม่ หากไฟล์ที่ระบุใน file() ไม่มีอยู่จริง นอกจากนี้ syslog-ng ยังสามารถกำหนดออปชันบางตัวในระดับทั่วไป (general rule) คือให้มีผลกับ configuration ทั้งไฟล์ได้ ขณะเดียวกันก็สามารถกำหนดออปชันในระดับ per-log-file ได้ ซึ่งการกำหนดออปชันชนิดหลังนี้จะเป็นการ overridden ออปชันในระดับ general rule

ตัวอย่างที่ 7 การควบคุม file() destination d_mylog { file("/var/log/ngfiles/mylog" create_dirs(yes)\
dir_owner(root) dir_group(root) dir_perm(700)); };


จากตัวอย่างที่ 7 เป็นการระบุออปชัน dir_owner(), dir_group(), dir_perm() ใน destination{} ซึ่งค่าที่ระบุนี้จะมีผลแทนที่ค่าที่ระบุใน options{} โดยอัตโนมัติ นอกจากนี้ยังสามารถระบุออปชัน owner(), group(), perm() ได้เช่นเดียวกันกับออปชันด้านบน

โดยปกติ syslog-ng จะสร้างไฟล์ล็อกที่ไม่มีอยู่ในระบบโดยอัตโนมัติ เว้นเสียแต่ว่าไฟล์ที่ระบุดังกล่าวจะอยู่ใน path ที่ไม่มีอยู่จริงและออปชัน create_dirs() ถูกตั้งค่าเป็น no

sync() ถูกใช้เพื่อจำกัดความถี่ในการ synchronize ไฟล์ล็อก หากมีค่าสูงๆ จะทำให้ข้อมูลล็อกถูกนำไปเก็บไว้ที่แคช (cache) เป็นจำนวนมากก่อนที่จะถูก synchronize หรือบันทึกลงไฟล์ล็อกต่อไป หาก sync() มีค่าต่ำ ก็เป็นการลดความเสี่ยงในการสูญเสียข้อมูล เพราะข้อมูลที่ถูกประมวลผลแล้วจะถูกบันทึกลงไฟล์ล็อกทันที

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

อย่างไรก็ตามหากระบบที่ติดตั้ง syslog-ng ได้ติดตั้งโปรแกรมจำพวก log monitoring tool เช่น Swatch แล้วไม่ควรตั้งค่า sync() ไว้สูงมากนัก เพราะอาจจะทำให้ไม่สามารถแจ้งเตือนผู้ดูแลระบบได้ในกรณีที่ไฟล์ล็อกโดนลบ

Filters
filter หรือการกรองข้อมูลเป็นส่วนที่มีความสำคัญส่วนหนึ่ง นอกเหนือจากการกรองข้อมูลโดยใช้ facility, priority แล้ว syslog-ng ยังสามารถตรวจสอบชื่อโปรแกรมที่ส่งข้อมูลล็อกมา ชื่อเครื่องที่ทำหน้าที่ส่งต่อล็อกมา และยังสามารถกรองข้อมูลล็อกตาม regular expression ที่ตั้งไว้อีกด้วย

filter{} statement ประกอบไปด้วย label (ชื่อเรียกของ filter{} ชุดนั้นๆ) และคำสั่งในการกรองข้อมูลอย่างน้อย 1 คำสั่ง โดยสามารถใช้ and, or, not ในการเชื่อมคำสั่งในการกรองข้อมูลได้

ตารางที่ 7 filter{} funtions
Function (criteria) Description
facility( facility-name ) facility ที่ต้องการ
priority( priority-name )
priority( priority-name1, priority-name2, etc, )
priority( priority-name1 .. priority-name2 ) ระดับของ priority ที่ต้องการ
- สามารถใช้เครื่องหมาย comma (,) คั่น หากต้องการมากกว่าหนึ่งระดับได้
- สามารถใช้เครื่องหมาย .. แทน priority ที่ต้องการระหว่าง priority ที่กำหนดได้ เช่น info .. warn
level( priority-name ) เช่นเดียวกันกับ priority
program( program-name ) ชื่อโปรแกรมที่สร้างล็อกขึ้นมา
host( hostname ) ชื่อ host ที่ล็อกนี้ถูกสร้าง
match( regular-expression ) regular expression ที่จะถูกนำไปเปรียบกับกับส่วน body ของล็อก
filter( filter-name ) ชื่อ filter อื่นที่ต้องการนำมากรองอีกครั้ง

จากตัวอย่างที่ 8 แสดง syslog-ng.conf ในระบบปฏิบัติการลินุกซ์เดเบียน 2.2 (Debian 2.2)

ตัวอย่างที่ 8 ตัวอย่างการใช้งาน filter{}
filter f_mail { facility(mail); };
filter f_debug { not facility(auth, authpriv, news, mail); };
filter f_messages { level(info .. warn) and not facility(auth, authpriv, cron, daemon, mail, news); };
filter f_cother { level(debug, info, notice, warn) or facility(daemon, mail); };


บรรทัดแรกในตัวอย่างที่ 8 filter f_mail กรองได้ข้อมูลล็อกทุกอันที่อยู่ใน facility mail
บรรทัดที่สอง filter f_debug กรองได้ข้อมูลล็อกทุกอันยกเว้น facility auth, authpriv, news, และ mail
บรรทัดที่สาม filter f_messages กรองได้ข้อมูลล็อกทุกอันที่มี priority ตั้งแต่ info จนถึง warn ยกเว้นข้อมูลล็อกที่มี facility เป็น auth, authpriv, cron, daemon, mail, news
บรรทัดสุดท้าย filter f_cother กรองข้อมูลล็อกที่มี priority เป็น debug, info, notice และ warn หรือ ข้อมูลล็อกที่มี facility เป็น daemin และ mail

Log statements
หลังจากที่ทำความเข้าใจส่วนประกอบต่างๆ คือ sources, filters และ destinations แล้ว ก็จะนำส่วนประกอบทั้งหมดมารวมไว้ใน log{}

ตัวอย่างที่ 9 ตัวอย่าง syslog-ng.conf
source s_loc { unix-stream("/dev/log"); internal(); };
source s_tcpmessages { tcp( ip(192.168.1.19); port(10514);); };

destination d_dailylog { file("/var/log/messages.$WEEKDAY"); };
destination d_untlog { file("/var/log/untlog" owner(unt)) perm(0600)); };

filter f_mail { facility(mail); };
filter f_messages { level(info .. warn) and not facility(auth, authpriv, cron, daemon, mail, news); };

log { source(s_tcpmessages); destination(d_untlog); };
log { source(s_loc); filter(f_mail); destination(d_untlog); };
log { source(s_loc); filter(f_messages); destination(d_dailylog); };


จาก log statement บรรทัดแรกนั้น จะทำให้ข้อมูลล็อกทุกอันที่มาจากเครื่อง 192.168.1.19 จะถูกบันทึกลงในไฟล์ /var/log/untlog
บรรทัดที่สองจะทำให้ข้อมูลล็อกของเมล์ (facility mail) ของ localhost ถูกบันทึกลงในไฟล์ /var/log/untlog
บรรทัดที่สามจะทำให้ข้อมูลล็อกของ localhost ที่ผ่านการกรองของ filter f_messages ถูกบันทึกลงในไฟล์ /var/log/messages.$WEEKDAY เช่น /var/log/Mon, /var/log/Sun

จากตัวอย่างที่ 9 อาจจะเกิดข้อสังสัยว่า ล็อกบางส่วนที่ไม่ได้ถูกจัดเก็บโดย log{} statement ทั้งสามตัวนั้นจะถูกจัดเก็บไว้ที่ใด syslog-ng มีค่า filter(DEFAULT) ซึ่งสามารถใช้ระบุในตอนท้ายเพื่อสั่งให้ syslog-ng บันทึกข้อมูลล็อกที่ไม่ได้ถูกจัดเก็บโดย log{} ก่อนหน้านี้ได้ ดังตัวอย่างที่ 10

ตัวอย่างที่ 10 ตัวอย่าง syslog-ng.conf
log { source(s_tcpmessages); destination(d_untlog); };
log { source(s_loc); filter(f_mail); destination(d_untlog); };
log { source(s_loc); filter(f_messages); destination(d_dailylog); };
log { source(s_loc); filter(DEFAULT); destination(d_dailylog); };


Advanced Configurations
ตัวอย่างที่ 11 แสดงการใช้ syslog-ng เพื่อคอยเฝ้าดูข้อมูลล็อกที่ต้องการ (log monitoring)
ตัวอย่างที่ 11
source s_local { unix_stream("/dev/log"); internal(); };
filter f_denials { match("[Dd]enied|[Ff]ail"); };
destination d_mail { program("/usr/local/sbin/mail.sh"); };
log { source(s_local); filter(f_denials); destination(d_mail); };


ตัวอย่างที่ 12 เป็นตัวอย่าง script ที่ใช้สำหรับส่งอี-เมล์

ตัวอย่างที่ 12
#!/usr/bash
while read line;
do
echo $line |mail -s "Weirdness on that Linux box" your_email@yourcompany.com
done


จุดที่น่าสนใจในตัวอย่างที่ 11 คือ match("[Dd]enied|[Ff]ail") ซึ่งหมายถึง ข้อมูลล็อกใดก็ตามที่มีคำว่า denied, Denied, Fail หรือ fail ปรากฏอยู่ ก็จะถูกส่งในรูปแบบอี-เมล์ไปยัง your_email@yourcompany.com โดย shell script ที่ชื่อ /usr/local/sbin/mail.sh

ข้อควรระวังในการใช้งานดังตัวอย่างที่ 11 คือ การใช้ program() นั้นเป็นการเรียกใช้งานโปรแกรมที่ระบุ โดยโปรแกรมนั้นจะยังคงรันอยู่จนกว่า syslog-ng จะหยุดการทำงานหรือเริ่มการทำงานใหม่ ดังนั้นผู้ดูแลระบบควรไตร่ตรองก่อนการใช้งานออปชันดังกล่าว เช่น หากรัน bash process ก็จะทำให้เกิดการสิ้นเปลืองงานทรัพยากร นอกจากนี้หากรันโปรแกรมในฐานะ root ก็จะเป็นการเพิ่มความเสี่ยงให้กับระบบอีกด้วย นอกจากนี้การใช้ระบบเตือนภัยผ่านทางอี-เมล์ดังตัวอย่างที่ 11 ยังก่อให้เกิดความเสี่ยงที่ทำให้ระบบถูกโจมตีแบบ Denial of Service ได้ เช่น ทำให้ mailbox ของผู้ดูแลระบบเต็ม


สรุป
syslog-ng เป็นโปรแกรมที่มีความหยืดหยุ่นในการทำงาน เหมาะสำหรับการนำมาใช้งานเป็นเป็น log server เป็นอย่างยิ่ง เพราะสามารถเก็บข้อมูลล็อกแยกตามเครื่องที่ส่งล็อกมาได้ นอกจากนี้ยังสามารถทำงานร่วมกับโปรแกรม sqlsyslogd เพื่อนำข้อมูลล็อกทั้งหมดบันทึกลงในฐานข้อมูลได้ ซึ่งจะนำเสนอรายละเอียดในโอกาสต่อไป

ผู้ดูแลระบบควรศึกษาคู่มือการใช้งานเพิ่มเติม เพื่อให้สามารถใช้ syslog-ng ได้อย่างเต็มประสิทธิภาพ โดยสามารถศึกษาได้จาก

ไดเรกทอรี doc ภายใต้ source ที่ขยายออกมาแล้วของ syslog-ng
หรือผ่านทางเมล์ลิงลิสต์ https://lists.balabit.hu/mailman/listinfo/syslog-ng
หรือตาม references ที่ให้ไว้ด้านล่างนี้
References
Balzs Scheidler (2000). syslog-ng reference manual. From http://www.balabit.com/products/syslog_ng/reference/book1.html
Syslog-ng FAQ. From http://www.campin.net/syslog-ng/faq.html
Michael D. Bauer. Building SECURE SERVERS with LINUX. 1st Edition, O'REILLY, 2002

VSFTP (Very Secure FTP)

บทนำ

ในองค์กรส่วนใหญ่มีการติดตั้งเซิร์ฟเวอร์ FTP ขึ้นมาเพื่อความสะดวกในการดำเนินการแลกเปลี่ยนไฟล์ ทำให้มีแนวโน้มของการมีจุดอ่อนทางด้านความปลอดภัยเพิ่มขึ้น เนื่องจากโปรแกรมที่ใช้เป็นเซิร์ฟเวอร์ FTP หลากหลายชนิด ไม่ว่าจะเป็น WU-FTP, ProFTP, หรือ BSD-FTP ล้วนมีช่องโหว่ที่ถูกค้นพบมากมาย จึงทำให้มีความเสี่ยงต่อการถูกผู้ไม่ประสงค์ดีโจมตีได้ อย่างไรก็ตาม มีอีกโปรแกรมหนึ่งชื่อ VSFTP ซึ่งมีออปชันด้านความปลอดภัยสำหรับเซิร์ฟเวอร์ FTP ที่เป็น Linux/UNIX ดังนั้น VSFTP จึงเป็นอีกทางเลือกหนึ่งสำหรับองค์กรที่จำเป็นต้องติดตั้งเซิร์ฟเวอร์ FTP และต้องการความปลอดภัยยิ่งขึ้น

VSFTP เป็นเซิร์ฟเวอร์ FTP ที่มีความมั่นคงและปลอดภัย ซึ่งสามารถลดความเสี่ยงที่ผู้โจมตีจะเข้าถึงเซิร์ฟเวอร์โดยผ่านทางช่องโหว่ของ FTP ได้ ตัวอย่างไซต์ FTP ต่างๆ ที่รัน VSFTP ได้แก่ Red Hat, OpenBSD, และ SuSE แม้กระทั่งสถาบัน SANS ก็แนะนำว่า VSFTP เป็นเดมอน FTP ที่ควรใช้เพราะมีความปลอดภัยสูง


--------------------------------------------------------------------------------
คุณสมบัติของ VSFTP
VSFTP เป็นเดมอน (daemon) ของเซิร์ฟเวอร์ FTP ที่รันบนระบบปฏิบัติการ Linux/UNIX ซึ่งมีคุณสมบัติหลักอยู่ 3 อย่าง ได้แก่

มีความปลอดภัย
มีประสิทธิภาพดี
มีความมั่นคง

นอกจากนี้โปรแกรม VSFTP ยังมีคุณสมบัติอื่นๆ อีก ได้แก่ เป็นระบบที่มีขนาดเล็ก มีความสามารถในการจัดการ virtual users มีทางเลือกในการทำงานเป็นแบบ stand-alone configuration และแบบผ่านทางเดมอน inetd รวมทั้งสามารถจำกัดปริมาณการรับส่งข้อมูล (bandwidth) ในการให้บริการในเซิร์ฟเวอร์ที่ต้องการควบคุมการใช้งานได้อีกด้วย

ในแง่ของความปลอดภัยนั้น VSFTP ได้ถูกออกแบบมาเพื่อแก้ไขจุดบกพร่องที่พบในการติดตั้ง wu-ftpd, proftpd, และแม้แต่ bsd-ftpd โดยการไม่ใช้บัญชีชื่อ root ซึ่งมีความเสี่ยง และใช้คุณสมบัติด้านความปลอดภัยที่มีประสิทธิภาพอย่าง chroot นอกจากนี้ยังมีการใช้เทคนิคการพัฒนาโปรแกรมอย่างปลอดภัยเพื่อแก้ปัญหาหน่วยความจำล้น (buffer overflows) ด้วย อ่านรายละเอียดเพิ่มเติมเกี่ยวกับความปลอดภัยของ VSFTP ได้ที่เอกสารเผยแพร่ ต่อไปนี้: Overview Design Implementation Trust และนอกจากนี้ยังมีการกล่าวถึง vsftpd ในแง่ของความปลอดภัยมากมาย ดังต่อไปนี้

ในเดือนพฤศจิกายน พ.ศ. 2545 ไซต์ ftp.openbsd.org ได้รัน vsftpd ซึ่งเป็นการยืนยันได้ว่า vsftpd มีคุณสมบัติดีเหมาะแก่การใช้เป็นเซิร์ฟเวอร์ FTP
vsftpd ไม่มีจุดบกพร่องชื่อ "globbing" ซึ่งมีผลกระทบต่อเซิร์ฟเวอร์ FTP หลายแห่ง สามารถศึกษาเหตุผลของการกำจัดจุดบกพร่องนี้ได้ในเอกสาร Bugtraq posting โดยมีคำอธิบายเหตุผล และหลักการออกแบบโปรแกรมด้วย
vsftpd ไม่มีจุดบกพร่องชื่อ "globbling" ที่เกี่ยวข้องกับการโจมตีแบบ denial of service ด้วยเหตุผลคล้ายๆ กัน ศึกษารายละเอียดได้ที่ Bugtraq posting
vsftpd ได้รับการสนับสนุนในหน้า Vanderbilt University ITS ภายใต้หัวข้อ "Safe Computing" ศึกษารายละเอียดได้ที่ http://www.vanderbilt.edu/its/security/safe_tools.html
vsftpd ได้รับการกล่าวถึงในหัวข้อความปลอดภัยว่า มีประสิทธิภาพดีและปราศจากช่องโหว่ด้านความปลอดภัย ซึ่งตรงกันข้ามกับเซิร์ฟเวอร์ FTP อื่นๆ รวมถึง OpenBSD ด้วย ศึกษารายละเอียดได้ที่ http://www.seifried.org/security/network/20010926-ftp-protocol.html
ในแง่ของประสิทธิภาพนั้น มีการกล่าวถึงดังนี้

ใน usenet มีการอ้างถึง vsftpd ว่าทำงานได้เร็วเทียบเท่ากับ BSD-ftpd (ซึ่งมีประสิทธิภาพสูง ต่างกับ wu-ftpd) ศึกษาเพิ่มเติมได้ที่ http://groups.google.com/groups?hl=en&selm=Pine.BSF.4.31.0202031625080.1082-100000%40atlantis.dp.ua
มีการเปรียบเทียบประสิทธิภาพของ vsftpd ว่ามีความเร็วถึง 70 Mbyte/sec ซึ่งมากกว่า TUX (55 Mbyte/sec)
มีการกล่าวว่าเครือข่ายของ Linux ที่อยู่บน gigabit ethernet ก็ใช้ vsftpd และมีความเร็วถึง 86 Mbyte/sec ศึกษาเพิ่มเติมได้ที่ http://lists.insecure.org/linux-kernel/2001/Feb/0104.html
ในการใช้ vsftpd บน RedHat นั้น Alan Cox กล่าวว่า "ในที่สุดก็มี ftpd ที่เหมาะสำหรับใช้บน Linux แล้ว" ศึกษาเพิ่มเติมได้ที่ http://www.linux.org.uk/diary/
เวอร์ชันล่าสุดของ VSFTP ขณะนี้คือเวอร์ชัน 1.2.0 สำหรับตัวอย่างที่จะกล่าวถึงในบทความนี้เป็นการใช้งาน VSFTP v.1.2.0 บนเซิร์ฟเวอร์ Red Hat 9.0 เคอร์เนลเวอร์ชัน 2.4.20-9


--------------------------------------------------------------------------------
การติดตั้ง
ทำการติดตั้ง VSFTP เช่นเดียวกับการติดตั้งแอพพลิเคชันอื่นๆ บน Linux โดยดาวน์โหลดได้จากเว็บไซต์ ftp://vsftpd.beasts.org/users/cevans/ มาเก็บไว้ในไดเรกทอรี /tmp
ทำการขยายไฟล์ด้วยคำสั่งต่อไปนี้
# cd /tmp
# gunzip -dc vsftpd-1.2.0.tar.gz

เข้าสู่ไดเรกทอรีที่ถูกสร้างขึ้นหลังจากขยายไฟล์แล้วซึ่งมีชื่อว่า vsftpd-1.2.0 และรันคำสั่ง make
# cd vsftpd-1.2.0
# make

หากต้องการแก้ไขการตั้งค่า สามารถแก้ไขที่ไฟล์ builddefs.h ก่อนที่จะคอมไพล์ด้วยคำสั่ง make เมื่อคอมไพล์เสร็จจะมีไฟล์ไบนารีชื่อ vsftpd ในไดเรกทอรีนี้

สร้างบัญชีชื่อ nobody ซึ่ง VSFTP ใช้เป็นส่วนหนึ่งของการตั้งค่าโดยดีฟอลต์ โดยปกติระบบปฏิบัติการ Linux/UNIX มีบัญชีชื่อนี้อยู่แล้วโดยดีฟอลต์ แต่ถ้าไม่มี ให้ทำการเพิ่มเข้าไปด้วยคำสั่ง

# /usr/sbin/useradd nobody

และกำหนด shell ในไฟล์ /etc/passwd สำหรับบัญชีชื่อ nobody ให้เป็น /sbin/nologin ด้วย เพื่อให้มีความปลอดภัยจากการล็อกอินเข้าใช้ shell ในการโจมตีระบบ ดังนี้

nobody:x:99:99:Nobody:/:/sbin/nologin

หากในเครื่องมีขื่อบัญชีนี้อยู่แล้วจะปรากฏผลดังนี้

useradd: user nobody exists


สร้างบัญชีชื่อ ftp (เฉพาะในกรณีที่ต้องการให้เครื่องเซิร์ฟเวอร์สนับสนุนการ ftp ด้วยการใช้ชื่อ anonymous) โดยต้องกำหนด shell ให้เป็น /sbin/nologin เช่นเดียวกับบัญชีชื่อ nobody ดังนี้

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

แต่ถ้าต้องการอนุญาตให้เฉพาะบัญชีผู้ใช้ในเครื่องสามารถ FTP ได้เท่านั้น ก็ไม่ต้องทำขั้นตอนนี้ อย่างไรก็ตามไดเรกทอรีบ้าน (home directory) ของบัญชีผู้ใช้ชื่อ anonymous จะต้องไม่มีเจ้าของเป็นบัญชีชื่อ ftp และผู้ใช้ไม่ควรมีสิทธิในการเขียนในไดเรกทอรีนี้ด้วย โดยกำหนดได้ด้วยคำสั่งต่อไปนี้

คำสั่ง วัตถุประสงค์
# mkdir /var/ftp เพื่อสร้างไดเรกทอรี /var/ftp
# /usr/sbin/useradd -d /var/ftp ftp เพื่อสร้างบัญชีชื่อ "ftp" พร้อมด้วยไดเรกทอรีบ้าน /var/ftp โดยปกติระบบส่วนใหญ่มีบัญชีผู้ใช้นี้อยู่แล้ว
# chown root.root /var/ftp เปลี่ยนเจ้าของไดเรกทอรี /var/ftp เป็นบัญชีชื่อ "root"
# chmod og-w /var/ftp จำกัดสิทธิของบัญชีผู้ใช้อื่น และบัญชีที่อยู่ในกลุ่มเดียวกันไม่ให้มีสิทธิในการเขียนลงไดเรกทอรีนี้


ติดตั้งไฟล์เอ็กซีคิวท์ ไฟล์ช่วยเหลือ (help pages) และอื่นๆ ซึ่งถูกสร้างไว้แล้ว โดยเข้าสู่ไดเรกทอรีที่สร้าง vsftpd ไว้และรันคำสั่ง make install

# cd /tmp/vsftpd-1.2.0
# make install


สำเนาไฟล์คอนฟิกูเรชันตัวอย่างไปไว้ในไดเรกทอรี /etc ด้วยคำสั่ง

# cp vsftpd.conf /etc


--------------------------------------------------------------------------------
การปรับแต่งค่าคอนฟิกูเรชัน
ไฟล์คอนฟิกูเรชันของ vsftpd ประกอบด้วย 3 ไฟล์ ดังนี้

ไฟล์ /etc/vsftpd.banned_emails -- เก็บรายการอี-เมล์ที่ใช้เป็นรหัสผ่านของผู้ใช้ชื่อ anonymous ซึ่งไม่ต้องการอนุญาตให้เชื่อมต่อเข้ามาใช้ ftp ได้
โดยระบุอี-เมล์แอดเดรสในไฟล์นี้บรรทัดละ 1 รายการเท่านั้น ดังตัวอย่างต่อไปนี้

mozilla@
siriwan@yahoo.com

สำหรับการตั้งค่าคอนฟิกูเรชันของไฟล์นี้มีความสัมพันธ์กับไฟล์ /etc/vsftpd.conf โดยจะต้องนำเครื่องหมาย # ออกจากบรรทัดที่เกี่ยวข้อง ตามที่แสดงไว้ดังต่อไปนี้

...
...
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
deny_email_enable=YES
# (default follows)
banned_email_file=/etc/vsftpd.banned_emails
...
...


ไฟล์ /etc/vsftpd.chroot_list -- เก็บรายชื่อผู้ใช้ในเครื่องที่จะถูกกำหนดให้ใช้งาน ftp ได้ในไดเรกทอรีที่กำหนดเท่านั้น โดยไม่สามารถเปลี่ยนไปเข้าสู่ไดเรกทอรีอื่นได้ (เรียกวิธีนี้ว่า chroot)
สำหรับการกำหนดการใช้งานลักษณะนี้ จะต้องแก้ไขไฟล์ที่เกี่ยวข้องดังนี้

- กำหนดรายชื่อที่ต้องการไว้ในไฟล์ /etc/vsftpd.chroot_list บรรทัดละ 1 รายชื่อ ดังนี้

user1
user2

- แก้ไขไฟล์ /etc/passwd โดยเพิ่ม /./ ในไดเรกทอรีบ้าน (home directory) ของบัญชีผู้ใช้ทั้ง 2 บัญชี ดังนี้

user1:x:500:500::/home/ftp-docs/./:/bin/ftponly
user2:x:501:500::/home/ftp-docs/./:/bin/ftponly

- แก้ไขไฟล์ /etc/vsftpd.conf โดยทำการนำเครื่องหมาย # ออกจากบรรทัดที่เกี่ยวข้อง ตามที่แสดงไว้ดังต่อไปนี้

...
...
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
...
...


ไฟล์ /etc/vsftpd.conf -- เป็นไฟล์หลักที่ใช้กำหนดออปชันการตั้งค่าโดยทั่วไป
โดยปกติ VSFTP จะอ่านไฟล์คอนฟิกกูเรชัน /etc/vsftpd.conf เมื่อมันเริ่มทำงานเท่านั้น ดังนั้นจึงต้องทำการรีสตาร์ท xinetd ทุกครั้งที่มีการแก้ไขไฟล์นี้เพื่อให้การเปลี่ยนแปลงดังกล่าวมีผลต่อการทำงานของ VSFTP ทันที

ไฟล์นี้มีค่าดีฟอลต์จำนวนหนึ่งที่ควรทราบ ได้แก่

- โดยดีฟอลต์ VSFTP จะรันเป็นเซิร์ฟเวอร์ anonymous FTP ดังนั้นถ้าไม่ต้องการให้ผู้ใช้จากภายนอกล็อกอินเข้ามายังไดเรกทอรี FTP ที่เป็นดีฟอลต์ (/var/ftp) โดยใช้ชื่อว่า "anonymous" และรหัสผ่านเป็นอี-เมล์แอดเดรส ก็ให้ทำการปิดฟีเจอร์นี้โดยใส่เครื่องหมาย #ไว้ที่ต้นบรรทัด "anonymous_enable" และสามารถเปิดให้ผู้ใช้ภายในสามารถล็อกอินเข้ามาได้โดยนำเครื่องหมาย # ออกจากบรรทัด "local_enable" ดังนี้

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES

- โดยดีฟอลต์ VSFTP จะอนุญาตให้ผู้ใช้ที่ใช้ชื่อ anonymous สามารถดาวน์โหลดได้เท่านั้น ไม่สามารถอัพโหลดไฟล์มายังเซิร์ฟเวอร์ได้

# Uncomment this to enable any form of FTP write command.
#write_enable=YES
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#

- โดยดีฟอลต์ VSFTP ไม่อนุญาตให้ผู้ใช้ภายนอกสร้างไดเรกทอรีบนเครื่องเซิร์ฟเวอร์ FTP และมันจะเก็บบันทึกล็อกของการเข้าถึง FTP ไว้ที่ไฟล์ /var/log/vsftpd.log

# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
# You may override where the log file goes if you like. The default is shown
# below.
xferlog_file=/var/log/vsftpd.log


--------------------------------------------------------------------------------
ความปลอดภัยของ FTP

การควบคุมการเข้าถึงเครื่องให้บริการ FTP

ก่อนที่จะเริ่มเปิดให้บริการ FTP จะต้องทำการกำหนดสิทธิของการเชื่อมต่อเข้ามาใช้งานก่อน ซึ่งแบ่งวิธีการทำได้ดังนี้

กรณีรัน inetd

ทำการแก้ไขไฟล์ /etc/hosts.allow (TCP Wrapper) โดยเพิ่มบรรทัด "vsftpd:" และตามด้วยรายชื่อหมายเลข IP address ที่จะอนุญาตให้เข้ามาได้ ดังตัวอย่างต่อไปนี้

- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากตัวเครื่องเซิร์ฟเวอร์เอง ระบุในไฟล์ดังนี้ :

vsftpd: 127.0.0.1

- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากทุกคนในวง IP 192.168.1.0/24 ระบุในไฟล์ดังนี้ :

vsftpd: 192.168.1.

- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากเฉพาะ 2 IP address ระบุในไฟล์ดังนี้ :

vsftpd: 192.168.1.100 192.168.5.53

- เพื่ออนุญาตให้ทุกคนสามารถเชื่อมต่อเข้ามาได้ ระบุในไฟล์ดังนี้ :

vsftpd: ALL

กรณีรัน xinetd

สำหรับการรันด้วย xinetd นั้นได้รวมเอาคุณสมบัติควบคุมการเข้าถึงเครื่องให้บริการเหมือนกับ TCP Wrapper ไว้อยู่แล้ว ดังนั้น ทำได้โดยการแก้ไขไฟล์ /etc/xinetd.d/vsftpd โดยเพิ่มบรรทัด "only_from = " และตามต้วยรายชื่อหมายเลข IP address ที่จะอนุญาตให้เข้ามาได้ ดังตัวอย่างต่อไปนี้

- เพื่ออนุญาตให้เชื่อมต่อเข้ามาจากเฉพาะ 2 IP address ระบุในไฟล์ดังนี้ :

only_from = 192.168.1.100 192.168.5.53

และหากต้องการกำหนด IP address ที่ไม่อนุญาตให้เข้าถึง ก็ระบุในไฟล์ดังนี้ :

no_access = 192.168.4.22


การอัพโหลดโดยการ ftp แบบ anonymous

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

# mkdir /var/ftp/pub/upload
# chmod 733 /var/ftp/pub/upload

หมายเหตุ : ต้องทำการแก้ไขที่ไฟล์ /etc/vsftpd.conf ให้อนุญาตการเขียนไฟล์ลงบนเซิร์ฟเวอร์ด้วย ดังนี้

# Uncomment this to enable any form of FTP write command.
write_enable=YES
...
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
anon_upload_enable=YES


การแก้ไขแบนเนอร์ของ FTP

การเปลี่ยนแปลงแบนเนอร์สำหรับเป็นข้อความต้อนรับเมื่อผู้ใช้ล็อกอินเข้ามาใช้งาน ftp นั้น สามารถแก้ไขได้ในไฟล์ /etc/vsftpd.conf เพื่อไม่ให้ผู้ไม่ประสงค์ดีรู้ว่าระบบที่ใช้เป็นประเภทใด ดังนี้

# You may fully customise the login banner string:
ftpd_banner= New Banner Here

(ในที่นี้ใช้ประโยค "Welcome to My FTP service, authorized access only" ดังปรากฎในหัวข้อ "ตัวอย่างการล็อกอินเพื่อทดสอบการ FTP")


การใช้ SCP แทน FTP

ข้อเสียอย่างหนึ่งของ FTP คือ ไม่มีการเข้ารหัสชื่อผู้ใช้และรหัสผ่านสำหรับล็อกอิน ทำให้มีจุดอ่อนต่อการโจมตีโดยผู้อื่นที่จะสามารถดักขโมยชื่อผู้ใช้และรหัสผ่านไปได้จากการเชื่อมต่อเครือข่าย ดังนั้นขอแนะนำให้ทำการแลกเปลี่ยนไฟล์ด้วยวิธี Secure Copy (SCP) ซึ่งมีการเข้ารหัสแทนการใช้ FTP แต่ทั้งนี้ SCP ไม่สนับสนุนบริการ ftp ด้วยการใช้ชื่อ anonymous

--------------------------------------------------------------------------------

วิธีเริ่มต้นการทำงานของ VSFTP

VSFTP สามารถรันได้ 2 โหมด ได้แก่

โหมด stand-alone
โหมด inetd/xinetd

การรันผ่านเดมอน inetd หรือ xinetd สามารถควบคุมการทำงานของโปรแกรมได้ง่ายกว่า และเป็นวิธีที่ควรใช้มากกว่าแบบ stand-alone สิ่งสำคัญที่ต้องคำนึงถึงคือ ในการตั้งค่าของ VSFTP นั้น มันจะรับการเชื่อมต่อแบบ anonymous เท่านั้น (สมมติว่าได้สร้างบัญชีชื่อ "ftp" ไปก่อนหน้านี้แล้ว) ดังนั้นถ้าต้องการอนุญาตให้บัญขีผู้ใช้ในเครื่องสามารถเชื่อมต่อเข้ามาใช้งาน ftp ได้ จะต้องทำการตั้งค่า Pluggable Authentication Modules (PAM) ซึ่งจะกล่าวถึงต่อไปด้วย

การทำงานแบบ stand-alone
สิ่งที่ต้องทำสำหรับการรัน VSFTP ในโหมด stand-alone ได้แก่
- เพิ่มประโยค "listen = YES"ไว้ในบรรทัดสุดท้ายของไฟล์ /etc/vsftpd.conf
- รันคำสั่ง # /usr/local/sbin/vsftpd &


การใช้ xinetd
เนื่องจากในที่นี้ได้ทำการทดสอบและใช้งานบนระบบ Red Hat 9 (ซึ่งใช้ xinetd) ดังนั้นจะเน้นที่การดำเนินการติดตั้งในโหมด xinetd
กรณีรัน inetd
- เพิ่มบรรทัดต่อไปนี้ในไฟล์ /etc/inetd.d
ftp stream tcp nowait root /usr/local/sbin/vsftpd

- รีสตาร์ทเดมอน inetd ด้วยคำสั่ง
# kill -SIGHUP


กรณีรัน xinetd
- ไฟล์คอนฟิกกูเรชันสำหรับการเริ่มต้นทำงานของ VSFTP ในเครื่องที่รัน xinetd นั้น อยู่ภายใต้ไดเรกทอรี /etc/xinetd.d โดยมีชื่อว่า vsftpd หากไม่พบไฟล์ดังกล่าว ให้ทำการสำเนาจากตัวอย่างของ vsftpd ที่มากับ VSFTP distribution (/tmp/vsftpd-1.2.0/xinetd.d/vsftpd) มาไว้ในไดเรกทอรีนี้ ในไฟล์ vsftpd นี้ มีพารามิเตอร์จำนวนหนึ่งภายใต้ "service ftp" ซึ่งระบุให้ทราบวิธีการทำงานของเซิร์ฟเวอร์ VSFTP ดังต่อไปนี้

พารามิเตอร์ ค่าที่กำหนด ความหมาย
socket_type stream เป็นชนิดของ TCP socket ที่ใช้สำหรับโพรโตคอลนี้ นั่นคือ FTP เป็น TCP stream
wait no เกี่ยวกับความสามารถสำหรับ socket ที่จะรับข้อความ
user root ผู้ใช้ที่จะเป็นผู้เปิดให้บริการ ftp คือใคร (ในที่นี้คือ root) หมายเหตุ : VSFTP จะลดสิทธิลงทันทีที่เริ่มทำงาน
server /usr/local/sbin/vsftpd เป็นตำแหน่งของโปรแกรมเซิร์ฟเวอร์ที่เกี่ยวข้องกับไฟล์คอนฟิกกูเรชันนี้ ถ้ามีการตั้ง vsftpd ในไดเรกทอรีที่แตกต่างออกไปก็ต้องแก้ไขเปลี่ยนแปลงค่านี้
nice 10 ออปชันนี้ใช้แก้ไขลำดับตารางเวลาดีฟอลต์สำหรับโพรเซส โดย 10 คือค่าดีฟอลต์ ส่วนค่าสูงสุดคือ 20
disable no เซอร์วิสนี้ไม่ถูกปิด หรืออีกนัยหนึ่งคือ มันควรเริ่มทำงานทันที เมื่อ xinetd เริ่มต้นทำงาน
per_source 5 เป็นการระบุจำนวนของการเชื่อมต่อเข้ามาใช้งานในเวลาเดียวกันจากหมายเลข IP เดียวกัน โดยเพื่อความปลอดภัย ควรตั้งค่าไว้เป็น 5
instances 200 กำหนดจำนวนสูงสุดของการเชื่อมต่อ FTP ไปยังเซิร์ฟเวอร์ในเวลาเดียวกัน ซึ่งมีประโยชน์ต่อการกำหนดโหลดการทำงานของเซิร์ฟเวอร์ โดยเพื่อความปลอดภัยควรตั้งค่าไว้เป็น 200
no_access No default เป็นการระบุรายการ IP address ที่ไม่อนุญาตให้เข้าถึงเซอร์วิสนี้ เช่น 192.168.1.4

- เมื่อปรับแก้ไฟล์ /etc/xinetd.d/vsftpd เรียบร้อยแล้วให้ทำการรีสตาร์ท xinetd ด้วยคำสั่ง


# /etc/init.d/xinetd restart

หรือ

# service xinetd restart

- และเพื่อให้ xinetd เริ่มทำงานทุกครั้งที่เครื่องรีสตาร์ท ให้ใช้คำสั่งต่อไปนี้


# chkconfig --add xinetd
# chkconfig --level 345 xinetd on


หมายเหตุ : ถ้าก่อนหน้านี้ตั้งเป็นโหมด stand-alone ต้องทำการลบบรรทัด "listen =YES" จากไฟล์ /etc/vsftpd.conf ออกด้วย มิฉะนั้นเซอร์วิส vsftpd จะไม่ทำงาน เมื่อ xinetd รีสตาร์ท

หลังจากเสร็จสิ้นกระบวนการแล้ว ไม่ว่าจะเป็นการรันในโหมดใดก็ตาม สามารถตรวจสอบดูให้แน่ใจว่า VSFTP เริ่มทำงานจริงได้โดยใช้คำสั่ง netstat -a และจะต้องได้ผลดังต่อไปนี้ :

# netstat -a | grep ftp
tcp 0 0 *:ftp *:* LISTEN

หมายเหตุ : ในส่วนของผลลัพธ์ที่ได้อาจแสดงเป็น ftp หรือหมายเลขพอร์ต 21


--------------------------------------------------------------------------------
การตั้งค่า Pluggable Authentication Modules (PAM)
การติดตั้งเซิร์ฟเวอร์ FTP เพื่อแจกจ่ายซอฟต์แวร์ให้ผู้ใช้ใดๆ เชื่อมต่อเข้ามานั้น มีประโยชน์มาก แต่บางครั้งอาจต้องทำการควบคุมการเข้าถึงทรัพยากรบางอย่าง เช่น ต้องการให้เพียงลูกค้าเท่านั้นสามารถใช้งาน FTP ได้

ดังนั้นการทำเช่นนี้กับ VSFTP ทำได้โดยใช้ PAM ในการพิสูจน์ตัวตน ซึ่งคล้ายกับเครื่อง Red Hat ส่วนใหญ่ ซึ่งไฟล์ที่เกี่ยวข้องชื่อ pam.conf หรือไดเรกทอรีชื่อ pam.d สำหรับ VSFTP นั้นมีการตั้งค่า PAM ตัวอย่างไว้แล้ว อยู่ในไดเรกทอรีย่อยชื่อ RedHat ของโปรแกรมที่ขยายออกมาในตอนแรกก่อนการติดตั้ง (/tmp/vsftpd-1.2.0/RedHat/vsftpd.pam) ให้ทำการเปลี่ยนชื่อและทำสำเนาไปไว้ในไดเรกทอรี pam.d ซึ่งสามารถทำได้ดังนี้

#cp vsftpd.pam /etc/pam.d/ftp

จากนั้นทำการกำหนดเพื่ออนุญาตให้ผู้ใช้ภายในสามารถล็อกอินได้ โดยแก้ไขที่ไฟล์ /etc/vsftpd.conf และเอาเครื่องหมาย # ออกจากบรรทัด "local_enable=YES" เมื่อผู้ใช้เชื่อมต่อเข้ามาก็จะเข้าสู่ไดเรกทอรีบ้าน (home directory) ของผู้ใช้คนนั้นทันที


--------------------------------------------------------------------------------
ตัวอย่างการตั้งค่าในไฟล์ /etc/vsftpd.conf เพื่ออนุญาตให้ผู้ใช้สามารถเข้าถึงไดเรกทอรีที่แชร์ไว้ในลักษณะอ่านได้อย่างเดียว

ในตัวอย่างนี้ ไม่อนุญาตให้ผู้ใช้ใช้ชื่อ anonymous แต่อนุญาตให้เฉพาะผู้ใช้ภายในที่ต้องการดาวน์โหลดไฟล์จากไดเรกทอรีที่แชร์ไว้เท่านั้นสามารถ ftp ได้ ขั้นตอนการทำมีดังนี้ :

ปิดการล็อกอินด้วยผู้ใช้ชื่อ anonymousโดยใส่เครื่องหมาย # ไว้ที่ต้นบรรทัด "anonymous_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES


เปิดให้ผู้ใช้ภายในแต่ละคนล็อกอินได้ โดยนำเครื่องหมาย # ออกจากต้นบรรทัด "local_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้
# Uncomment this to allow local users to log in.
local_enable=YES


สร้างกลุ่มผู้ใช้ (user group) และ ไดเรกทอรีที่แชร์ไว้ สำหรับกรณีนี้จะสร้าง "/home/ftp-docs" เป็นไดเรกทอรีที่แชร์ไว้และกลุ่มผู้ใช้เป็น "ftp-users" สำหรับผู้ใช้ที่จะล็อกอินเข้ามาดาวน์โหลด

# groupadd ftp-users
# mkdir /home/ftp-docs


สร้างไดเรกทอรีที่เข้าถึงได้จากผู้ใช้ในกลุ่ม ftp-users

# chmod 750 /home/ftp-docs
# chown root:ftp-users /home/ftp-docs


สร้างบัญชีชื่อผู้ใช้ และไดเรกทอรีดีฟอลต์ชื่อ /home/ftp-docs

# useradd -g ftp-users -d /home/ftp-docs user1
# useradd -g ftp-users -d /home/ftp-docs user2
# passwd user1
# passwd user2


ทำสำเนาไฟล์สำหรับดาวน์โหลดไปไว้ที่ไดเรกทอรี /home/ftp-docs
เปลี่ยนสิทธิการเข้าถึงไฟล์ภายใต้ไดเรกทอรี /home/ftp-docs ให้สามารถอ่านได้อย่างเดียวโดยผู้ใช้ในกลุ่ม ftp-users

# chown root:ftp-users /home/ftp-docs/*
# chmod 740 /home/ftp-docs/*

เมื่อถึงขั้นตอนนี้แล้ว ผู้ใช้จะสามารถล็อกอินผ่าน ftp ไปยังเซิร์ฟเวอร์โดยใช้ชื่อและรหัสผ่านใหม่นี้ได้ ถ้าไม่ต้องการให้ผู้ใช้เขียนหรืออัพโหลดไฟล์ในไดเรกทอรีใดๆ ให้ใส่เครื่องหมาย # ที่ต้นบรรทัด "write_enable" ในไฟล์ /etc/vsftpd.conf ดังนี้

# Uncomment this to enable any form of FTP write command.
#write_enable=YES


รีสตาร์ท vsftp เพื่อให้การแก้ไขไฟล์ /etc/vsftpd.conf มีผลต่อการทำงานทันที ดังนี้

# /etc/init.d/xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
#


สำหรับรายละเอียดของการตั้งค่าสำหรับออปชันอื่นๆ ในไฟล์ /etc/vsftpd.conf นี้ สามารถศึกษาเพิ่มเติมได้จากไฟล์ vsftpd.conf.5 (ในที่นี้อยู่ในไดเรกทอรี /usr/share/man/man5 )


--------------------------------------------------------------------------------

ตัวอย่างการล็อกอินเพื่อทดสอบการ FTP



เชื่อมต่อมาที่เซิร์ฟเวอร์โดยผ่านทาง FTP

c:\>ftp 192.168.9.124
Connected to 192.168.9.124.
220 Welcome to My FTP service, authorized access only.
User (192.168.9.124:(none)): user1
331 Please specify the password.
Password:
230 Login successful.
ftp>


ผู้ใช้จะไม่สามารถอัพโหลดไฟล์ "file_4_upload" ได้ ตามที่ได้ตั้งค่าไว้ ดังนี้

ftp> put file_4_upload
200 PORT command successful. Consider using PASV.
550 Permission denied.
ftp>


ตรวจสอบไฟล์ที่ต้องการดาวน์โหลดว่ามีอยู่จริงหรือไม่

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
file_4_download
226 Directory send OK.
ftp: 10 bytes received in 0.00Seconds 10000.00Kbytes/sec.
ftp>

และทำการดาวน์โหลดไฟล์ที่ต้องการ ดังนี้

ftp> get file_4_download
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for file_4_download (8294 bytes).
####
226 File send OK.
ftp: 8294 bytes received in 0.01Seconds 829.40Kbytes/sec.
ftp>


เมื่อทดสอบเชื่อมต่อด้วยการ ftp โดยใช้ชื่อ anonymous จะไม่สามารถทำได้เนื่องจากได้จำกัดไว้ตั้งแต่ต้นแล้ว

C:\>ftp 192.168.9.124
Connected to 192.168.97.124.
220 Welcome to My FTP service, authorized access only.
User (192.168.9.124:(none)): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
ftp> bye
221 Goodbye

--------------------------------------------------------------------------------

บทสรุป

VSFTP ถูกเลือกใช้โดยไซต์ใหญ่ๆ หลายไซต์ รวมถึงโครงการ Open BSD ที่เน้นทางด้านความปลอดภัย หรือแม้แต่ Red Hat Linux เนื่องมาจากคุณสมบัติของมันที่มีขนาดเล็ก สามารถรับโหลดที่หนักได้ รวมถึงมีความปลอดภัยและใช้งานได้ง่ายด้วย จึงทำให้ VSFTP เหมาะที่จะนำมาใช้เป็นเซิร์ฟเวอร์ FTP ที่มีปัญหาด้านความปลอดภัยน้อยมาก


--------------------------------------------------------------------------------

แหล่งข้อมูลอ้างอิง

http://techupdate.zdnet.co.uk/story/0,,t507-s2129119-p1,00.html
http://techupdate.zdnet.co.uk/story/0,,t507-s2129119-p2,00.html
http://vsftpd.beasts.org/
http://www.siliconvalleyccie.com/linux-hn/ftp-server.htm

Linux Security Checklist

กล่าวนำ

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

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

บทความนี้จะใช้วิธีการตั้งคำถามและตอบ คำถามจะเป็นไปในลักษณะ "ได้ดำเนินการแล้วหรือไม่" ถ้ายังไม่ได้ดำเนินการหรือดำเนินการไปบ้างบางส่วน ให้ดูในส่วนของคำตอบซึ่งจะเสนอวิธีการที่ควรจะปฏิบัติเพื่อสร้างความปลอดภัยให้กับระบบ



--------------------------------------------------------------------------------

1. ก่อนทำการติดตั้งระบบปฏิบัติการ ได้ทำการถอดสาย LAN ออกหรือไม่

คำตอบ : ก่อนทำการติดตั้งระบบปฏิบัติการ ควรถอดสาย LAN ออกก่อนเพื่อป้องกันปัญหา ได้แก่ ไวรัสหรือหนอนเครือข่ายที่แพร่กระจายอยู่ ผู้ไม่ประสงค์ดีที่อาจใช้ความพยายามที่จะเข้าถึงระบบในขณะที่ระบบยังไม่ได้รับการปรับแต่งให้แข็งแกร่งและสมบูรณ์

2. การติดตั้งได้เลือกเฉพาะแพ็กเกจเท่าที่จำเป็นต้องใช้งานหรือไม่

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

3. การติดตั้งได้พิจารณาแบ่งพาร์ทิชันให้เหมาะสมต่อการใช้งานหรือไม่

คำตอบ : ให้ทำการแบ่งพาร์ทิชันให้เหมาะสมต่อการใช้งาน ดูรายระเอียดเพิ่มเติมในหัวข้อ Define Partitions จากเว็บ http://thaicert.nectec.or.th/paper/unix_linux/Linux_Installation.php การไม่แบ่งพาร์ทิชันเลยหรือมีเพียงพาร์ทิชันเดียวอาจทำให้พาร์ทิชันนั้นเต็มได้ เช่น โดยการที่ผู้บุกรุกทำการส่งอี-เมล์เข้ามาเป็นจำนวนมากจนทำให้พาร์ทิชันนั้นเต็ม ซึ่งส่งผลให้ระบบไม่สามารถให้บริการได้

4. มีวิธีการเพื่อตรวจสอบรหัสผ่านของ root และผู้ใช้อื่นๆ ในระบบเพื่อให้ยากต่อการเดาหรือไม่ รวมทั้งได้กำหนดให้มีการเปลี่ยนรหัสผ่านอย่างสม่ำเสมอหรือไม่

คำตอบ : ต้องตั้งรหัสผ่านให้ยากต่อการเดา เช่น มีความยาวอย่างน้อย 6 ตัวอักษร ไม่ใช้คำที่มาจากพจนานุกรม ใช้ตัวอักษรที่หลากหลายทั้งตัวพิมพ์ใหญ่ ตัวพิมพ์เล็ก ตัวเลข และสัญลักษณ์ต่างๆ ไม่ใช้ชื่อเฉพาะ ชื่อเพื่อน หรือชื่อสัตว์เลี้ยง รวมทั้งควรเปลี่ยนรหัสผ่านทุกๆ 3 เดือน

5. ได้มีการจัดเตรียมดิสก์เก็ตไว้สำหรับทำการบูตระบบหรือไม่

คำตอบ : เมื่อระบบเกิดปัญหาไม่สามารถบูตได้ จะได้ใช้แผ่นดิสก์เก็ตเพื่อทำการบูตระบบได้

6. ได้มีการใช้รหัสผ่านเพื่อป้องกันบูตโหลดเดอร์หรือไม่

คำตอบ : บูตโหลดเดอร์เป็นโปรแกรมที่ใช้สำหรับทำการบูตเครื่อง ควรทำการตั้งรหัสผ่านเพื่อให้เมื่อเริ่มทำการบูตขึ้นมาจะต้องมีการใส่รหัสผ่านให้ถูกต้องก่อนที่จะดำเนินการบูตต่อไป
ให้ดูการกำหนดรหัสผ่านในหัวข้อ Password protect LILO boots จากเว็บ http://thaicert.nectec.or.th/paper/unix_linux/Linux_Installation.php ให้สังเกตที่บรรทัด password และ restricted หรือ grub ดังนี้

#grub
grub>md5crypt
password ****
$1$ntbLIO$ZlzWu30CZCud0/ydxMQwt1
จากนั้นไปที่ไฟล์ /etc/grub.conf แล้วเพิ่ม
Password --md5 $1$ntbLIO$ZlzWu30CZCud0/ydxMQwt1

7. ได้ทำการตรวจสอบ default user เช่น bin lp mail uucp เป็นต้น หรือเป็น user ที่เกิดจากการติดตั้งเซิร์ฟเวอร์ เช่น www เป็นต้น ให้ไม่สามารถล็อกอินเข้าสู่ระบบแล้วหรือไม่

คำตอบ : ให้ตรวจสอบ default user ต่างๆ ให้ไม่สามารถล็อกอินเข้าสู่ระบบได้ วิธีการคือ
ในไฟล์ /etc/passwd แก้ไขฟิลด์สุดท้ายของ user ที่ต้องการให้เป็น /bin/nologin เช่น


bin:x:1:1:bin:/bin:/sbin/nologin

8. ได้ทำการลบ guest user หรือ user ที่สร้างขึ้นมาเพื่อใช้งานชั่วคราว ซึ่งไม่มีความจำเป็นต้องใช้งานอีกต่อไปแล้วหรือไม่

คำตอบ : ให้ตรวจสอบและลบ user ดังกล่าวจากไฟล์ /etc/passwd ทิ้งไป

9. ได้ทำการตรวจสอบว่าไม่มี user คนใดในระบบที่มี UID เท่ากับ 0 แล้วหรือไม่

คำตอบ : user ที่มี UID เท่ากับ 0 ต้องเป็น root เท่านั้น ให้ใช้คำสั่งดังนี้

#cat /etc/passwd | awk -F: '$3==0 {print $1}'
เพื่อตรวจสอบว่ามี user คนใดในไฟล์ /etc/passwd ที่มี UID เท่ากับ 0 (ยกเว้น root)

10. ได้กำหนดค่าของ umask ไว้อย่างเหมาะสมแล้วหรือไม่

คำตอบ : umask ใช้สำหรับกำหนดเลขฐานแปด เช่น โดยปกติ จะมีค่า 0022 เมื่อนำค่านี้ไป xor กับไฟล์ที่สร้างขึ้นมาใหม่จะได้เป็นสิทธิในการเข้าถึงไฟล์ดังกล่าว ให้กำหนดค่า umask ให้เหมาะสม เช่น ไฟล์โดยปกติเมื่อแรกสร้างขึ้นมาจะมีสิทธิการใช้งานเป็น 0666 หรือ -rw-rw-rw- และเมื่อนำไป xor กับ umask ที่มีค่า 0022 จะได้สิทธิการใช้งานเป็น 0644 หรือ -rw-r--r- ซึ่งหมายถึงว่าเฉพาะเจ้าของเท่านั้นที่สามารถเขียนและอ่านไฟล์นี้ได้ ส่วนผู้อื่นจะสามารถอ่านได้อย่างเดียว หากกำหนดค่า umask ไว้อย่างไม่เหมาะสม ไฟล์ที่สร้างขึ้นมาอาจจะมีสิทธิการใช้งานที่ไม่เหมาะสมได้

11. ได้ทำการอัพเดตโปรแกรมอุดช่องโหว่ (patch) เพื่อปิดช่องโหว่ของระบบอย่างสม่ำเสมอหรือไม่

คำตอบ : ให้ทำการอัพเดตโปรแกรมอุดช่องโหว่อย่างสม่ำเสมอเพื่อปิดช่องโหว่ใหม่ๆ ของระบบ เช่น ในกรณีของลินุกซ์ Red Hat ให้รันโปรแกรม up2date เพื่อตรวจสอบ ดาวน์โหลด และติดตั้งโปรแกรมอุดช่องโหว่ที่จำเป็น ให้ดูรายละเอียดการใช้งานโปรแกรมนี้ที่ http://thaicert.nectec.or.th/paper/unix_linux/up2date.php

12. ได้ทำการค้นหาโปรแกรมหรือไฟล์ที่มี SUID และ SGID อย่างสม่ำเสมอหรือไม่

คำตอบ : โปรแกรมที่มี SUID หรือ SGID หมายถึงโปรแกรมที่เมื่อทำงานสามารถใช้สิทธิของ root เพื่อดำเนินการต่างๆ ได้ ตัวอย่างเช่น โปรแกรม passwd ซึ่งผู้ใช้สามารถใช้เพื่อทำการแก้ไขรหัสผ่านในไฟล์ /etc/passwd และ /etc/shadow (ไฟล์ทั้งสองนี้ สิทธิการเขียนข้อมูลเป็นของ root เท่านั้น ผู้ใช้ทั่วไปไม่สามารถเขียนข้อมูลลงไปที่ไฟล์นี้ได้) โปรแกรมประเภทนี้จึงมีความเสี่ยงต่อการใช้งาน จึงควรที่จะจำกัดทางด้านจำนวนให้ไม่เพิ่มขึ้นหรือเพิ่มเป็นจำนวนน้อยที่สุด ถ้าจำเป็นต้องพัฒนาโปรแกรมเหล่านี้ขึ้นมา ต้องไม่เขียนเป็นเชลล์สคริปต์ และให้ทำการตรวจสอบตัวโปรแกรมโดยละเอียดก่อนที่จะนำไปสู่การใช้งานจริงโดยผู้ใช้
วิธีการค้นหาโปรแกรมเหล่านี้ทำได้โดยใช้คำสั่ง

#find / \( -perm -4000 -o -perm -2000 \) -print

13. ได้ทำการตรวจสอบหรือมีกลไกในการตรวจสอบว่ามีผู้ใช้บางคนที่ไม่ได้กำหนดรหัสผ่านของตนหรือไม่

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

#cat /etc/shadow | awk -F: 'length($2)<1 {print $1}'

14. ได้มีการใช้บริการ syslog ตรวจสอบการปรับแต่งค่าของ syslog รวมทั้งได้ตรวจสอบข้อมูลล็อกของ syslog อย่างสม่ำเสมอหรือไม่

คำตอบ : บริการ syslog เป็นบริการสำคัญที่ใช้บันทึกข้อมูลล็อกซึ่งเป็นสิ่งที่ช่วยบอกได้ว่ามีใครมาทำอะไรกับระบบของเราบ้าง ให้ทำการปรับแต่งค่าพารามิเตอร์ของ syslog ให้เหมาะสมก่อนการใช้งาน ให้ดูการปรับแต่งได้ที่เว็บ http://thaicert.nectec.or.th/paper/unix_linux/linux_syslog.php
สำหรับผู้ดูแลระบบที่สนใจการบันทึกล็อกที่มีขีดความสามารถสูงขึ้น ให้ศึกษา syslog-ng (syslog new generation) ได้จาก http://thaicert.nectec.or.th/paper/unix_linux/syslog-ng.php
รวมทั้งยังมีโปรแกรมเสริมเพื่อช่วยในการบริหารและจัดการข้อมูลล็อก ได้แก่
โปรแกรม swatch ให้ดูรายละเอียดการใช้งานที่ http://thaicert.nectec.or.th/paper/unix_linux/swatch.php

15. ได้ตรวจสอบและปิดการใช้งานบริการเครือข่ายที่ไม่มีความจำเป็นต้องใช้งานหรือไม่ รวมทั้งต้องตรวจสอบอย่างสม่ำเสมอด้วย

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


#netstat -tuan

สำหรับวิธีการปิดบริการเครือข่าย เช่น บนลินุกซ์ Red Hat ให้ดูข้อมูลได้จาก http://thaicert.nectec.or.th/paper/unix_linux/disable_system_services.php

16. ได้จัดทำแบนเนอร์ภายหลังการล็อกอินเพื่อแจ้งเตือนนโยบายการใช้งานระบบ หรือไม่

คำตอบ : แบนเนอร์คือข้อความที่แสดงขึ้นมาภายหลังจากที่ผู้ใช้ได้ทำการล็อกอินสำเร็จแล้ว
ให้จัดทำแบนเนอร์เพื่อแจ้งเตือนให้ผู้ใช้ทราบถึงนโยบายการใช้งานระบบ แบนเนอร์สามารถกำหนดไว้ในไฟล์ /etc/motd ตัวอย่างของแบนเนอร์ ได้แก่
"ระบบที่ใช้งานนี้เป็นระบบที่อนุญาตให้ใช้งานได้เฉพาะผู้ที่มีสิทธิเท่านั้น ห้ามไม่ให้ผู้ไม่มีสิทธิใช้งานระบบนี้อย่างเด็ดขาด การใช้งานระบบนี้จะอยู่ภายใต้เงื่อนไขที่ว่ากิจกรรมการใช้งานทั้งหมดจะได้รับการเฝ้าดูอย่างต่อเนื่อง การใช้งานโดยที่ผู้ใช้ไม่มีสิทธิหรือใช้ผิดวัตถุประสงค์อาจจะถูกฟ้องร้องหรือดำเนินการทางกฎหมาย"
แบนเนอร์ในลักษณะนี้ เมื่อผู้บุกรุกได้เห็น อาจเกิดความรู้สึกเกรงกลัวและออกจากระบบไปโดยที่ไม่ทำให้ระบบได้รับความเสียหาย

17. เมื่อทำการติดตั้งโปรแกรมหรือแพ็กเก็จใหม่ ได้ทำการตรวจสอบว่าเป็นโปรแกรมที่เป็นของแท้ก่อนหรือไม่


คำตอบ : การไม่ตรวจสอบโปรแกรมก่อนอาจเป็นผลให้ได้รับโปรแกรมที่ไม่ใช่เป็นของแท้และอาจแฝงมาด้วยม้าโทรจัน ซึ่งอาจส่งผลข้างเคียงอื่นๆ ได้ การตรวจสอบมีวิธีการที่ทำได้หลายวิธี เช่น ใช้การตรวจสอบผลรวมด้วย md5sum หรือ gpg เพื่อทำการตรวจสอบว่าไฟล์ที่ได้รับของเราตรงกับที่ผู้ผลิตหรือพัฒนาโปรแกรมได้ประกาศไว้หรือไม่ ตัวอย่างเช่น ในเว็บไซต์ของผู้ผลิตโปรแกรม อาจให้ข้อมูลไว้ว่าเมื่อทำการตรวจสอบโปรแกรม xxx.tar.gz ด้วย md5sum จะได้ผลลัพธ์ดังนี้

#md5sum xxx.tar.gz
466c63bb71b710d20a5c353df8c1a19c
หรือตรวจสอบด้วย gpg
#gpg--import KEYS
#gpg --verify xxx.tar.gz.asc
จะมีข้อความบอกให้สังเกตบรรทัดที่มีคำว่า
gpg: Good signature from "Pong Asa " {แสดงว่าไฟล์สมบูรณ์}
หรือ
gpg: BAD signature from "Pong Asa " {แสดงว่าไฟล์ไม่สมบูรณ์}
ดังนั้นผู้ดูแลระบบควรจะได้ตรวจสอบว่าโปรแกรม xxx.tar.gz ที่ตนได้รับเมื่อรันผ่าน md5sum ต้องได้ค่าที่เป็นผลลัพธ์เดียวกันหรือผ่าน gpg จะต้องเป็น Good signature

18. ได้ดำเนินการสร้างความแข็งแกร่งให้กับบริการเครือข่ายต่างๆ เช่น Apache MySQL FTP DNS SMTP หรืออื่นๆ ที่ใช้งานอยู่บนระบบปฏิบัติการนั้นหรือไม่

คำตอบ : การสร้างความแข็งแกร่งให้กับบริการที่ใช้งาน เช่น Apache MySQL FTP DNS SMTP หรืออื่นๆ จะสามารถช่วยลดความเสี่ยงที่ระบบจะถูกบุกรุกได้ เช่น การอุดช่องโหว่ในบริการเหล่านั้น เป็นต้น
การสร้างความแข็งแกร่งให้กับบริการ Apache สามารถดูรายละเอียดได้จาก
http://thaicert.nectec.or.th/paper/unix_linux/apache_chklist.php และ http://thaicert.nectec.or.th/paper/unix_linux/harden_apache.php
สำหรับบริการ MySQL สามารถดูรายละเอียดได้จาก http://thaicert.nectec.or.th/paper/unix_linux/mysql.php
สำหรับบริการ FTP สามารถดูรายละเอียดได้จาก http://thaicert.nectec.or.th/paper/unix_linux/wuftp.php
สำหรับบริการ DNS สามารถดูรายละเอียดได้จาก http://thaicert.nectec.or.th/paper/unix_linux/dns-sec-part1.php
สำหรับบริการ SMTP สามารถดูรายละเอียดได้จาก http://thaicert.nectec.or.th/paper/unix_linux/sendmail.php

19. ในกรณีที่ระบบที่ติดตั้งระบบปฏิบัติการลินุกซ์นี้จำเป็นต้องให้บริการเครือข่าย เช่น Apache SSH หรือ FTP ได้มีการจำกัดการเข้าใช้บริการหรือไม่

คำตอบ : เพื่อลดความเสี่ยงในการบุกรุกระบบ ให้จำกัดการเข้าใช้บริการเครือข่ายโดยอนุญาตให้เฉพาะผู้ที่มีสิทธิหรือไซต์ที่ได้รับอนุญาตเท่านั้นจึงจะสามารถเข้าใช้บริการได้ วิธีการในการจำกัด ได้แก่ การใช้บริการ xinetd (ดูรายละเอียดเพิ่มเติมจาก http://thaicert.nectec.or.th/paper/unix_linux/xinetd.php) หรือใช้ไฟร์วอลล์
เช่น iptables (ดูรายละเอียดเพิ่มที่ http://thaicert.nectec.or.th/paper/firewall/iptables.php)

20. สำหรับระบบที่ต้องการความปลอดภัยสูง ได้อนุญาตให้ root สามารถล็อกอินเข้าใช้งานจากทางไกลหรือไม่

คำตอบ : ในระบบที่ต้องการความปลอดภัยสูง ต้องไม่อนุญาตให้ root สามารถล็อกอินเข้าใช้งานจากทางไกล ต้องกำหนดให้ root เข้าใช้งานจาก console เท่านั้น เพื่อลดโอกาสที่ข้อมูลที่ส่งผ่านทางไกลเข้ามาถูกดักหรือแอบดูในระหว่างทางที่ส่งมา

21. ได้สร้างความปลอดภัยทางกายภาพให้กับระบบอย่างพอเพียงหรือไม่

คำตอบ : ให้สร้างความปลอดภัยทางกายภาพให้กับระบบอย่างพอเพียง ได้แก่ การควบคุมการเข้าใช้งาน console ของระบบ มีกุญแจสำหรับล็อกเครื่อง อาจมีห้องเพื่อควบคุมการเข้าออก มีระบบสำรองไฟ UPS เป็นต้น ดูแนวทางการป้องกันทางกายภาพเพิ่มเติมจาก http://thaicert.nectec.or.th/paper/basic/physical_security.php

22. ได้กำหนดรหัสผ่านที่ BIOS เพื่อป้องกันไม่ให้ผู้ไม่ประสงค์ดีเข้าไปทำการปรับเปลี่ยนค่าพารามิเตอร์ต่างๆ หรือไม่

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

23. ได้ตรวจสอบการกำหนดสิทธิการใช้งานของไฟล์ระบบที่สำคัญๆ อย่างสม่ำเสมอหรือไม่

คำตอบ : การกำหนดสิทธิการใช้งานของไฟล์สำคัญๆ ในระบบอย่างไม่ถูกต้อง อาจทำให้ผู้ไม่ประสงค์ดีสามารถเขียนทับไฟล์ของระบบ แก้ไขหรือสามารถลบบางไฟล์ทิ้งไปได้ จึงต้องกำหนดสิทธิการใช้งานของไฟล์ให้เหมาะสม ให้ทำการศึกษาเรื่องการกำหนดสิทธิได้จาก http://thaicert.nectec.or.th/paper/unix_linux/file_permission.php


ตัวอย่างการกำหนดสิทธิการใช้งานไฟล์ของระบบให้เหมาะสม ได้แก่

/etc/login.defs มีค่า 600
/etc/cron.d มีค่า 600
/etc/xinetd.conf มีค่า 600
/etc/security มีค่า 600
/etc/services มีค่า 644
/etc/utmp มีค่า 644
/etc/adm/wtmp มีค่า 644
/etc/motd มีค่า 644
/etc/mtab มีค่า 644
/etc/syslog.pid มีค่า 644

24. ได้ใช้ SSH สำหรับการเข้าถึงระบบจากทางไกลหรือไม่ (แทนการใช้งาน telnet rlogin, rsh, ftp, rcp)

คำตอบ : SSH เป็นโปรแกรมสำหรับการเข้าถึงระบบจากทางไกลโดยข้อมูลที่มีการส่งผ่านไปมาระหว่างโปรแกรม (เครื่องลูกข่าย) กับระบบ (เครื่องแม่ข่าย) จะได้รับการเข้ารหัส ซึ่งทำให้เป็นการยากที่ผู้ไม่ประสงค์ดีจะนำข้อมูลเหล่านั้นไปใช้ประโยชน์ได้
ถ้าระบบในปัจจุบันยังใช้งานซอฟต์แวร์ประเภท telnet rlogin rsh ftp rcp ในการเข้าถึงเครือข่ายจากทางไกล ให้เปลี่ยนมาใช้ SSH (http://www.openssh.org) แทน ทั้งนี้เพื่อความปลอดภัยของระบบ (ดูรายละเอียดเพิ่มที่ http://thaicert.nectec.or.th/paper/basic/Secure_Shell.php)


25. ได้ทำการสำรองข้อมูลที่สำคัญๆ อย่างสม่ำเสมอหรือไม่

คำตอบ : ให้ทำการสำรองข้อมูลที่สำคัญๆ อย่างสม่ำเสมอ เพราะเมื่อข้อมูลหลักเกิดความเสียหายจะได้สามารถนำเอาข้อมูลที่สำรองไว้กลับมาใช้งานได้อย่างรวดเร็วและลดการสูญเสียข้อมูลทั้งหมด

26. ได้ติดตามข่าวสารเกี่ยวกับความปลอดภัยของระบบที่ใช้งานอย่างสม่ำเสมอหรือไม่

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

27. ได้เคยใช้ซอฟต์แวร์เพื่อช่วยตรวจสอบและแก้ไขความไม่ปลอดภัยของระบบภายหลังการติดตั้งหรือไม่

คำตอบ : เพื่อเป็นการตรวจสอบระบบอีกครั้งเพื่อความมั่นใจ มีซอฟต์แวร์แพ็กเก็จเป็นจำนวนมาก อาทิ Bastille (ให้ดูรายละเอียดเพิ่มเติมได้ที่ http://thaicert.nectec.or.th/paper/unix_linux/bastille2.php) ซึ่งสามารถช่วยค้นหาจุดต่างๆ ที่อาจเป็นจุดอ่อนหรือควรได้รับการปรับแต่งเพื่อให้มีความปลอดภัยที่ดีขึ้น

28. ได้ตรวจสอบว่าโมดูล PAM (Pluggable Authentication Modules) ซึ่งใช้ในการพิสูจน์ตัวตนก่อนที่จะอนุญาตให้ผู้ใช้เข้าสู่ระบบ ได้ถูกใช้งานโดยบริการที่จำเป็นต้องมีการพิสูจน์ตัวตน เช่น บริการ SSH samba chsh reboot smtp แล้วหรือไม่

คำตอบ : ให้ตรวจสอบว่าบริการที่ใช้งาน เช่น SSH (sshd) ใช้งานโมดูล PAM หรือไม่โดยสามารถตรวจสอบได้ดังนี้

#ldd /user/sbin/sshd
libpam.so.0 => /lib/libpam.so.0 (0x40020000)
libdl.so.2 => /lib/libdl.so.2 (0x40029000)
libresolv.so.2 => /lib/libresolv.so.2 (0x4002c000

ให้สังเกตในบรรทัด libpam.so.0 => /lib/libpam.so.0 (0x40020000) ซึ่งจะเห็นได้ว่าได้มีการใช้งาน PAM กับบริการ SSH แล้ว
รวมทั้งให้ตรวจสอบไฟล์ในไดเร็คทอรี่ /etc/pam.d (หรือ /etc/pam.d สำหรับบางระบบปฏิบัติการ) ว่าถูกเปลี่ยนแปลงแก้ไขหรือไม่ ไฟล์ทั้งหมดในไดเร็คทอรี่นี้โดยปกตินับตั้งแต่ติดตั้งระบบเสร็จเรียบร้อยแล้ว ไม่ควรที่จะถูกเปลี่ยนแปลงแก้ไขใดๆ สำหรับวิธีการตรวจสอบการเปลี่ยนแปลงแก้ไขไฟล์ในระบบ ให้ดูข้อมูลได้จาก http://thaicert.nectec.or.th/paper/ids/tripwire.php

29. ได้ทำการตรวจสอบและแก้ไขไฟล์ /etc/login.defs เพื่อกำหนดนโยบายการล็อกอินเข้าสู่ระบบที่มีความปลอดภัยแล้วหรือไม่ เช่น ต้องมีการเปลี่ยนรหัสผ่านตามระยะเวลาที่เหมะสม ความยาวของรหัสผ่านต้องมีความยาวอย่างน้อยตามที่กำหนดไว้ เป็นต้น

คำตอบ : ให้ตรวจสอบและแก้ไขค่าของพารามิเตอร์บางค่าเพื่อให้การล็อกอินของผู้ใช้เข้าสู่ระบบมีความปลอดภัยที่สูงขึ้น เช่น

PASS_MAX_DAYS 90 #คือการให้เปลี่ยนรหัสผ่านทุกๆ 90 วัน
PASS_MIN_LEN 8 #คือความยาวน้อยที่สุดของรหัสผ่าน

และค่าพารามิเตอร์อื่นๆ ที่ควรได้รับการปรับแต่งให้มีความปลอดภัยที่สูงขึ้น

30. ได้กำหนดสิทธิการใช้งานคำสั่ง su เพื่อแปลงผู้ใช้ที่ไม่ได้เป็น root และใช้คำสั่งนี้ให้กลายเป็น root โดยให้สิทธิเฉพาะผู้ใช้บางกลุ่มในระบบเท่านั้นแล้วหรือไม่

คำตอบ : ให้ตรวจสอบและแก้ไขไฟล์ /etc/pam.d/su สมมติว่าต้องการให้กลุ่ม pong เท่านั้นที่สามารถ su มาเป็น root ได้ ให้แก้ไขดังนี้

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=pong

31. ได้ตรวจสอบการเปลี่ยนแปลงแก้ไขไฟล์ในระบบที่สำคัญ ๆ อย่างสม่ำเสมอหรือไม่เช่น ไฟล์ที่เป็นไบนารี่ ไฟล์คอนฟิกต่างๆ ไฟล์ที่อยู่ในไลบรารี่ เป็นต้น ซึ่งไม่สมควรถูกเปลี่ยนแปลงแก้ไขเป็นอย่างยิ่ง เว้นไว้แต่ว่าผู้ดูแลระบบเป็นผู้ดำเนินการเอง

คำตอบ : การบุกรุกระบบที่เกิดขึ้นแล้วหลายๆ ครั้ง ผู้บุกรุกมักจะทำการติดตั้งโปรแกรมประเภทประตูลับ (Backdoor) เอาไว้ เพื่อที่จะสามารถหวนคืนกลับเข้ามาสู่ระบบได้อีก การตรวจสอบการเปลี่ยนแปลงแก้ไขไฟล์อย่างสม่ำเสมอโดยผู้ดูแลระบบอาจจะทำให้พบว่า ณ ขณะนี้ไฟล์บางไฟล์ถูกเปลี่ยนแปลงแก้ไขโดยไม่ได้รับอนุญาต ซึ่งอาจหมายถึงว่าได้มีการบุกรุกเกิดขึ้นแล้ว
สำหรับวิธีการตรวจสอบการเปลี่ยนแปลงแก้ไขไฟล์ในระบบ ให้ดูข้อมูลได้จาก http://thaicert.nectec.or.th/paper/ids/tripwire.php


--------------------------------------------------------------------------------

แหล่งข้อมูลอ้างอิง

http://thaicert.nectec.or.th/paper/unix_linux/Linux_Installation.php
http://thaicert.nectec.or.th/paper/unix_linux/up2date.php
http://thaicert.nectec.or.th/paper/unix_linux/linux_syslog.php
http://thaicert.nectec.or.th/paper/unix_linux/syslog-ng.php
http://thaicert.nectec.or.th/paper/unix_linux/swatch.php
http://thaicert.nectec.or.th/paper/unix_linux/disable_system_services.php
http://thaicert.nectec.or.th/paper/unix_linux/apache_chklist.php
http://thaicert.nectec.or.th/paper/unix_linux/harden_apache.php
http://thaicert.nectec.or.th/paper/unix_linux/mysql.php
http://thaicert.nectec.or.th/paper/unix_linux/wuftp.php
http://thaicert.nectec.or.th/paper/unix_linux/dns-sec-part1.php
http://thaicert.nectec.or.th/paper/unix_linux/sendmail.php
http://thaicert.nectec.or.th/paper/unix_linux/xinetd.php
http://thaicert.nectec.or.th/paper/firewall/iptables.php
http://thaicert.nectec.or.th/paper/basic/physical_security.php
http://thaicert.nectec.or.th/paper/unix_linux/file_permission.php
http://thaicert.nectec.or.th/paper/basic/Secure_Shell.php
http://thaicert.nectec.or.th/paper/unix_linux/bastille2.php
http://thaicert.nectec.or.th/paper/unix_linux/disable_system_services.php
http://thaicert.nectec.or.th/paper/ids/tripwire.php

วิธีการที่ผู้ใช้งานเครื่องคอมพิวเตอร์ควรใช้ในการป้องกันระบบคอมพิวเตอร์ของตนที่บ้าน

CERT/CC แนะนำให้ผู้ใช้งานเครื่องคอมพิวเตอร์ที่บ้านปฏิบัติตามขั้นตอนต่อไปนี้


ขอคำปรึกษาจากผู้ให้บริการหรือผู้ดูแลโดยตรง หากจำเป็นต้องทำงานจากที่บ้าน
นำซอฟต์แวร์ป้องกันไวรัสมาใช้งาน
ใช้ไฟร์วอลล์
ไม่เปิดไฟล์ที่ไม่รู้จักซึ่งถูกแนบมากับ e-mail
ไม่เรียกใช้งานโปรแกรมที่ไม่ทราบที่มา
ยกเลิกการใช้งานออปชัน "hide file extensions"
ติดตั้ง patch ให้กับแอพลิเคชันที่ใช้งาน (รวมถึงระบบปฏิบัติการ)
ปิดเครื่องคอมพิวเตอร์หรือหยุดการเชื่อมต่อกับเครือข่ายทันทีที่เลิกใช้งาน
ยกเลิกการใช้งาน Java, JavaScript และ ActiveX ให้มากที่สุดเท่าที่จะเป็นไปได้
ยกเลิกการใช้งานสคริปต์ที่เกี่ยวกับลักษณะพิเศษต่างๆ ในโปรแกรม e-mail
ทำการสำรองข้อมูลที่สำคัญ
ทำแผ่นบูทเพื่อใช้งานในกรณีที่เครื่องคอมพิวเตอร์เกิดความเสียหายหรือถูกบุกรุก
รายละเอียดเพิ่มเติมของคำแนะนำแต่ละข้อได้อธิบายไว้ด้านล่าง

คำแนะนำ

1. ขอคำปรึกษาจากผู้ให้บริการหรือผู้ดูแลโดยตรง หากจำเป็นต้องทำงานจากที่บ้าน


ถ้าเป็นการใช้งานที่มีเข้าถึงแบบ broadband เพื่อเชื่อมต่อไปยังเครือข่ายขององค์กร ไม่ว่าจะเป็นการใช้ Virtual Private Network (VPN) หรือวิธีอื่นๆ ก็ตาม ทางองค์กรมักจะมีนโยบายหรือกระบวนการที่เกี่ยวข้องกับความปลอดภัยในการใช้งานเครื่องคอมพิวเตอร์ที่บ้านให้ผู้ใช้ปฏิบัติ ดังนั้น ผู้ใช้จึงควรขอคำปรึกษาจากผู้รับผิดชอบดูแลด้านนี้โดยตรงตามความเหมาะสม ก่อนที่จะปฏิบัติตามคำแนะนำภายในเอกสารฉบับนี้

2. นำซอฟต์แวร์ป้องกันไวรัสมาใช้งาน


CERT/CC แนะนำให้นำซอฟต์แวร์ anti-virus มาใช้งานที่เครื่องคอมพิวเตอร์ทุกเครื่องที่เชื่อมต่ออินเทอร์เน็ต โดยที่ผู้ใช้ทุกคนจะต้องปรับปรุงข้อมูลของโปรแกรม anti-virus ในเครื่องคอมพิวเตอร์ของตนให้ทันสมัยอยู่เสมอ ผลิตภัณฑ์ anti-virus หลายอันรองรับการทำงานแบบอัพเดตข้อมูลประวัติไวรัส (บางครั้งเรียกว่า virus definition) โดยอัตโนมัติ ซึ่ง CERT/CC แนะนำให้ผู้ใช้ทุกคนทำการอัพเดตข้อมูลโดยอัตโนมัติทันทีที่มีข้อมูลใหม่ออกมา


อ่านรายละเอียดเพิ่มเติมได้ที่ http://www.cert.org/other_sources/viruses.html#VI

3. ใช้ไฟร์วอลล์


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

4. ไม่เปิดไฟล์ที่ไม่รู้จักซึ่งถูกแนบมากับ e-mail


ก่อนที่ผู้ใช้จะเปิดไฟล์แนบใดๆ ที่ส่งมากับ e-mail ผู้ใช้ควรจะแน่ใจก่อนว่าไฟล์นั้นมาจากที่ใด การทราบเพียงว่าใครเป็นผู้ส่ง e-mail ฉบับนั้นมาให้ตนหรือ e-mail address ต้นทางที่ส่งมาเป็นผู้ที่ตนเองรู้จักเท่านั้นถือว่าไม่พียงพอ ไวรัส Melissa แพร่กระจายได้อย่างรวดเร็ว เนื่องจากถูกส่งจาก e-mail address ที่ผู้รับคุ้นเคย นอกจากนั้นโค้ดโปรแกรมที่มีจุดประสงค์ร้ายหลายอันอาจจะแพร่กระจายผ่านโปรแกรมที่ให้ความบันเทิงหรือโปรแกรมล่อลวงอื่นๆ


หากผู้ใช้มีความจำเป็นจะต้องเปิดไฟล์ที่แนบมาก่อนที่จะสามารถตรวจสอบแหล่งที่มาของไฟล์ได้ ขอให้ปฏิบัติตามขั้นตอนต่อไปนี้

ทำการอัพเดตข้อมูลรูปแบบไวรัสในเครื่องให้ทันสมัยที่สุด (อ่านรายละเอียดเพิ่มเติมได้จากข้อ "นำซอฟต์แวร์ป้องกันไวรัสมาใช้งาน" ด้านบน)
บันทึกไฟล์ดังกล่าวลงในฮาร์ดดิสก์
ตรวจสอบไฟล์โดยใช้ซอฟต์แวร์ anti-virus ที่มีในเครื่อง
เปิดไฟล์
นอกจากนั้น อีกสิ่งที่ควรทำก่อนที่จะเปิดไฟล์คือให้ยกเลิกการเชื่อมต่อเครื่องคอมพิวเตอร์เข้ากับเครือข่าย
การปฏิบัติตามขั้นตอนที่กล่าวมานี้จะช่วยลดความเสี่ยง แต่ไม่สามารถทำให้ความเสี่ยงหมดไปได้ โอกาสที่โปรแกรมทำลายระบบซึ่งแนบมากับ e-mail เหล่านั้นจะแพร่กระจายจากเครื่องคอมพิวเตอร์ของผู้ใช้ไปยังเครื่องอื่นๆ ยังคงมีอยู่

5. ไม่เรียกใช้งานโปรแกรมที่ไม่ทราบที่มา


ไม่ควรใช้งานโปรแกรมใดๆ ที่ไม่ทราบว่าถูกพัฒนาขึ้นโดยนักพัฒนาโปรแกรมหรือบริษัทที่เชื่อถือหรือไม่ และไม่ควรส่งโปรแกรมที่ตนเองไม่รู้ที่มาไปให้เพื่อนหรือเพื่อนร่วมงานโดยเด็ดขาด แม้ว่าโปรแกรมดังกล่าวจะเป็นโปรแกรมที่ให้ความสนุกสนานก็ตาม เพราะโปรแกรมลักษณะดังกล่าวมักจะมีโปรแกรม trojan แฝงมาด้วยเสมอ

6. ยกเลิกการใช้งานออปชัน "hide file extensions"


ในระบบปฏิบัติการวินโดวส์มีออปชันอันหนึ่งคือ "Hide file extensions for known file types" โดยปกติแล้วระบบจะตั้งค่าให้ออปชันนี้ทำงาน แต่ผู้ใช้สามารถยกเลิกการใช้งานออปชันนี้ได้เพื่อให้มีการแสดงนามสกุลของไฟล์ทั้งหมดบนหน้าจอ หลังจากที่ยกเลิกออปชันนี้ จะยังคงมีไฟล์บางไฟล์ที่ไม่แสดงนามสกุลเนื่องจากถูกระบบกำหนดไว้


เนื่องจากมี registry อยู่ 1 ค่าซึ่งหากมีการตั้งค่าให้กับ registry นี้แล้ว จะทำให้ระบบปฏิบัติการซ่อนนามสกุลของไฟล์ โดยไม่คำนึงว่าค่าที่กำหนดให้กับออปชัน "Hide file extensions for known file types" บนระบบปฏิบัติการคืออะไร นั่นคือ registry ชื่อ "NeverShowExt" จะเป็นตัวกำหนดการซ่อนนามสกุลของไฟล์ชนิดพื้นฐานที่ใช้งานในระบบปฏิบัติการวินโดวส์ เช่น ".LNK" ซึ่งเป็นนามสกุลของช็อตคัท (shortcut) จะยังคงถูกซ่อนไว้แม้ว่าจะยกเลิกออปชัน "Hide file extensions for known file types" แล้วก็ตาม


คำสั่งเฉพาะอื่นๆ ที่ใช้ในการยกเลิกการซ่อนนามสกุลของไฟล์ ถูกรวบรวมไว้ใน http://www.cert.org/incident_notes/IN-2000-07.html

7. ติดตั้ง patch ให้กับแอพลิเคชันที่ใช้งาน (รวมถึงระบบปฏิบัติการ)


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


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

8. ปิดเครื่องคอมพิวเตอร์หรือหยุดการเชื่อมต่อกับเครือข่ายทันทีที่เลิกใช้งาน


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

9. ยกเลิกการใช้งาน Java, JavaScript และ ActiveX ให้มากที่สุดเท่าที่จะเป็นไปได้

ผู้ใช้จะต้องระมัดระวังความเสี่ยงที่เกิดขึ้นจากการใช้งาน "mobile code" เช่น ActiveX, Java และ JavaScript ผู้พัฒนาเว็บโดยมีจุดประสงค์ร้ายบางคนบางคนอาจจะเขียนสคริปต์การทำงานบางอย่างรวมไว้ในโค้ดโปรแกรมของตน แล้วส่งไปยังเว็บไซต์ เช่น ค่า URL (Uniform Resource Locator), ส่วนใดส่วนหนึ่งของฟอร์ม หรือการสืบค้นฐานข้อมูล หลังจากนั้น เมื่อเว็บไซต์ดังกล่าวตอบรับการขอใช้งานจากผู้ใช้ สคริปต์ส่วนดังกล่าวนี้จะถูกส่งมายังบราวเซอร์ที่เครื่องคอมพิวเตอร์ของผู้ใช้ด้วย


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


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


รายละเอียดเกี่ยวกับคำสั่งในการยกเลิกการใช้งานภาษาสคริปต์บนบราวเซอร์สามารถอ่านได้ที่ http://www.cert.org/tech_tips/malicious_code_FAQ.html


รายละเอียดเพิ่มเติมเกี่ยวกับความปลอดภัยของ ActiveX รวมไปถึงข้อแนะนำสำหรับผู้ใช้ที่ต้องดูแลเครื่องคอมพิวเตอร์ของตนเอง สามารถอ่านเพิ่มเติมได้ที่ http://www.cert.org/archive/pdf/activeX_report.pdf


รายละเอียดเกี่ยวกับความเสี่ยงที่เกิดจากโปรแกรมการทำงานที่มีจุดประสงค์ในการทำลายระบบผ่านทางเว็บไซต์สามารถอ่านได้จาก CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests

10. ยกเลิกการใช้งานสคริปต์ที่เกี่ยวกับลักษณะพิเศษต่างๆ ในโปรแกรม e-mail


โปรแกรมที่ใช้ในการรับส่ง e-mail หลายโปรแกรมที่ถูกพัฒนาขึ้นในลักษณะเดียวกับโปรแกรมบราวเซอร์ในการเปิดไฟล์ชนิด HTML ส่งผลให้โปรแกรม e-mail เหล่านั้นได้รับผลกระทบจากการใช้งาน ActiveX, Java และ JavaScript ได้เช่นเดียวกับการใช้งานเว็บเพจ ดังนั้น นอกจากยกเลิกการใช้งานสคริปต์ในโปรแกรมเว็บบราวเซอร์แล้ว (อ่านรายละเอียดได้จากหัวข้อ "ยกเลิกการใช้งาน Java, JavaScript และ ActiveX ให้มากที่สุดเท่าที่จะเป็นไปได้") CERT/CC ยังขอแนะนำให้ผู้ใช้ยกเลิกการใช้งานสคริปต์ที่เกี่ยวข้องกับลักษณะพิเศษต่างๆ เหล่านี้บนโปรแกรม e-mail ด้วย

11. ทำการสำรองข้อมูลที่สำคัญ


ผู้ใช้ควรทำการเก็บสำรองไฟล์ที่สำคัญลงบนสื่อเก็บข้อมูลที่สามารถเคลื่อนย้ายได้ง่าย เช่น ZIP disk หรือ CD-ROM ชนิดที่บันทึกข้อมูลได้ อาจทำการสำรองข้อมูลโดยการใช้ซอฟต์แวร์ และนำดิสก์เหล่านี้ไปเก็บที่อื่นให้ห่างจากเครื่องคอมพิวเตอร์

12. ทำแผ่นบูทเพื่อใช้งานในกรณีที่เครื่องคอมพิวเตอร์เกิดความเสียหายหรือถูกบุกรุก

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

Appendix : แหล่งอ้างอิงและข้อมูลเพิ่มเติม


รายละเอียดในส่วนต่อไปนี้ประกอบด้วยลิงก์ไปยังแหล่งอ้างอิง และแหล่งข้อมูลเพิ่มเติมทั้งหมดที่เกี่ยวข้องกับเอกสารฉบับนี้

แหล่งอ้างอิง


ลิงก์ของเอกสารที่นำมารวบรวมไว้ในหัวข้อนี้ เป็นแหล่งข้อมูลที่นำมาใช้อ้างอิงในเอกสารฉบับนี้ทั้งหมด

ข้อมูลจาก CERT Advisory
ข้อมูลจาก CERT Incident Note
ข้อมูลจาก CERT Vulnerability Note
ข้อมูลจาก CERT Tech Tip
ข้อมูลจากเอกสารอื่นๆ ของ CERT
ข้อมูลจาก CERT Advisory


CA-1999-02: Trojan Horses


http://www.cert.org/advisories/CA-1999-02.html

CA-1999-04: Melissa Macro Virus


http://www.cert.org/advisories/CA-1999-04.html

CA-2000-01: Denial-of-Service Developments


http://www.cert.org/advisories/CA-2000-01.html

CA-2000-02: Malicious HTML Tags Embedded in Client Web Requests


http://www.cert.org/advisories/CA-2000-02.html

ข้อมูลจาก CERT Incident Note


IN-2000-01: Windows Based DDOS Agents


http://www.cert.org/incident_notes/IN-2000-01.html

IN-2000-02: Exploitation of Unprotected Windows Networking Shares


http://www.cert.org/incident_notes/IN-2000-02.html

IN-2000-03: 911 Worm


http://www.cert.org/incident_notes/IN-2000-03.html

IN-2000-07: Exploitation of Hidden File Extensions


http://www.cert.org/incident_notes/IN-2000-07.html

IN-2000-08: Chat Clients and Network Security


http://www.cert.org/incident_notes/IN-2000-08.html

ข้อมูลจาก CERT Vulnerability Note


VN-98.07: Back Orifice

http://www.cert.org/vul_notes/VN-98.07.backorifice.html

ข้อมูลจาก CERT Tech Tip


Frequently Asked Questions About Malicious Web Scripts Redirected by Web Sites

http://www.cert.org/tech_tips/malicious_code_FAQ.html

Protecting Yourself from Email-borne Viruses and Other Malicious Code During Y2K and Beyond


http://www.cert.org/tech_tips/virusprotection.html

Spoofed/Forged Email


http://www.cert.org/tech_tips/email_spoofing.html

Windows 95/98 Computer Security Information


http://www.cert.org/tech_tips/win-95-info.html

ข้อมูลจากเอกสารอื่นๆ ของ CERT


Other Computer Virus Resources

http://www.cert.org/other_sources/viruses.html

Securing Desktop Workstations

http://www.cert.org/security-improvement/modules/m04.html

Results of the Security in ActiveX Workshop


http://www.cert.org/archive/pdf/activeX_report.pdf

Security of the Internet

http://www.cert.org/encyc_article/tocencyc.html#PackSnif

แหล่งข้อมูลเพิ่มเติม


ผู้อ่านสามารถหาข้อมูลเพิ่มเติมจากรายละเอียดในเอกสารฉบับนี้ ได้ตามลิงก์ต่อไปนี้
TCP/IP Frequently Asked Questions

http://www.faqs.org/faqs/internet/tcp-ip/tcp-ip-faq/part1/
http://www.faqs.org/faqs/internet/tcp-ip/tcp-ip-faq/part2/

Computer Virus Frequently Asked Questions for New Users


http://www.faqs.org/faqs/computer-virus/new-users/

alt.comp.virus Frequently Asked Questions

http://www.faqs.org/faqs/computer-virus/alt-faq/part1/
http://www.faqs.org/faqs/computer-virus/alt-faq/part2/
http://www.faqs.org/faqs/computer-virus/alt-faq/part3/
http://www.faqs.org/faqs/computer-virus/alt-faq/part4/

VIRUS-L/comp.virus Frequently Asked Questions


http://www.faqs.org/faqs/computer-virus/faq/

Firewalls Frequently Asked Questions

http://www.faqs.org/faqs/firewalls-faq/