Thursday, 25 February 2010

How to Protect or Change the MySQL Unix Socket File


The default location for the Unix socket file that the server uses for communication with local clients is/tmp/mysql.sock. (For some distribution formats, the directory might be different, such as /var/lib/mysql for RPMs.)
On some versions of Unix, anyone can delete files in the /tmp directory or other similar directories used for temporary files. If the socket file is located in such a directory on your system, this might cause problems.
On most versions of Unix, you can protect your /tmp directory so that files can be deleted only by their owners or the superuser (root). To do this, set the sticky bit on the /tmp directory by logging in as root and using the following command:
shell> chmod +t /tmp
You can check whether the sticky bit is set by executing ls -ld /tmp. If the last permission character is t, the bit is set.
Another approach is to change the place where the server creates the Unix socket file. If you do this, you should also let client programs know the new location of the file. You can specify the file location in several ways:
You can test whether the new socket location works by attempting to connect to the server with this command:
shell> mysqladmin --socket=/path/to/socket version

ความสามารถของ .htaccess สำหรับ apache

ความสามารถของ .htaccess สำหรับ apache

วันนี้มาว่ากันด้วยเรื่องเบาอย่างไฟล์ .htaccess สำหรับ Apache กันครับ
ไฟล์ .htaccess นั้นเป็นไฟล์ที่ใช้ในการ override configuration ของ Apache
ซึ่งมีการใช้คำจำกัดความในภาษาอังกฤษว่า “Distributed Configuration File” โดยการทำงานจะเป็นการ configuration ของแต่ละ directory ทั้งหมดนี้ใน configuation file หลักจะต้องมีการ set AllowOverride ด้วยนะครับ
มาดูการใช้งานกันครับ
Authentication เราสามารถทำการ Authentication สำหรับ user ได้โดยการใช้ไฟล์ .htaccess ดังนี้ครับ
AuthType Basic
AuthName “Password Required”
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
โดยจะต้องมีการสร้างไฟล์ password ไว้ด้วยเพื่อเก็บรายชื่อของ user ครับ
Server-side include เป็นการสั่งให้ Apache ทำการ parse ค่าเอกสารโดยใช้ Server-side include ครับ ทำได้โดย
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
เป็นการสั่งให้ Apache รู้จักเอกสาร .shtml เมื่อมีการเรียกร้องขอไฟล์ .shtml จะเป็นการทำงานโดยใช้ Server-Side include
CGI Handler เป็นการสั่งให้ Apache ทำการ execute ไฟล์ CGI สามารถทำได้โดย
Options +ExecCGI
AddHandler cgi-script cgi pl
หรือในอีกแบบ เป็นการสั่งให้ทุกไฟล์ใน directory นั้นทำงานในลักษณะ CGI script
Options +ExecCGI
SetHandler cgi-script
Error document เป็นการสั่งให้ Apache ใช้งาน error document ตามรูปแบบของเรา สามารถทำได้โดย
ErrorDocument code /directory/filename.ext
เช่น ถ้าต้องการทำการแสดง error ในแบบของเราสำหรับ error code 404 (Not found) ทำได้โดย
ErrorDocument 404 /errors/notfound.html
เมื่อมีการเรียกเอกสารที่ไม่มีใน directory นี้ Apache จะทำการแสดงเอกสาร notfound.html
โดยรหัส error ของ HTTP Server หลักๆนั้น มีดังนี้
400 Bad request
401 Authorization required
403 Forbidden
404 Not found
405 Method not allowed
408 Requested timed out
409 Conflicting request
410 Gone
500 Internal Server Error
501 Not Implement
502 Bad Gateway
503 Service Unavailable
Blocking by IP เป็นการสั่งให้ Apache ทำการ block ผู้ใช้งานจาก IP ที่ระบุ สามารถทำได้โดย
order allow,denydeny from 123.45.6.7deny from 012.34.5.allow from allจากตัวอย่างจะเป็นการ block จาก IP 123.45.6.7 และ IP ที่ขึ้นต้นด้วย 012.34.5 ทั้งหมดBlocking user/site by referrer เป็นการสั่งให้ Apache ทำการ block ผู้ใช้งานที่มีการลิงค์มาจากเว็บที่ระบุ สามารถทำได้โดย
RewriteEngine on# Options +FollowSymlinksRewriteCond %{HTTP_REFERER} badsite\.com [NC]RewriteCond %{HTTP_REFERER} anotherbadsite\.comRewriteRule .* - [F]จากตัวอย่างเป็นการ block ผู้ใช้ที่การ referrer จาก badsite.com และ anotherbadsite.com โดย [NC,OR] NC เป็นการบอกว่าให้เปรียบเทียบแบบ case insensitive และ OR หมายถึง referrer ที่มาจาก domain นั้นทั้งหมด โดย Apache จะใช้การเปรียบเทียบโดย Regular Expressions ซึ่ง “\.” ก็หมายถึง “.” ตามมาตรฐานของ Regular Expressions เมื่อมีการร้องของจาก referrer ดังที่ระบุ Apache จะส่ง header 403 Forbidden ไปยัง Client
Blocking bad bots เป็นการสั่ง Apache ให้ block bots หรือโปรแกรมดูดเว็บต่างๆ สามารถทำได้โดย
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
…….
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule ^.* - [F,L]
จากตัวอย่างเป็นแค่เพียงส่วนหนึ่งเท่านั้นครับ โดยการ block bots หรือโปรแกรมดูดเว็บนั้นจะช่วยลดแบนด์วดธ์ที่ไม่มีประโยชน์ลงได้เยอะเลยครับ
Default page เป็นการสั่งให้ Apache ทำการ index default ไฟล์ตามที่ต้องการครับ โดยปกติแล้วจะเป็น index.html index.php เราอาจจะเปลี่ยนให้เป็น myfile.html ก็ได้ครับ สามารถทำได้โดย
DirectoryIndex myfile.html
Redirect เป็นการสั่งให้ redirect ไปยังหน้าเพจที่เราต้องการเมื่อมีการเรียกไฟล์หรือ directory ที่ระบุไว้ สามารถทำได้โดย
Redirect /olddirectory http://modoeye.com/newdirectory/
ป้องกันการเปิดไฟล์  ถ้าเราไช้ไฟล์ในการเก็บ password เราสามารถป้องกันการร้องขอเอกสารนั้นๆได้โดย

order allow,deny
deny from all
เมื่อมีการร้องขอไฟล์ชื่อ password Apache จะมีการส่ง header 403 Forbidden ไปยัง client
การเพิ่ม MIME types เป็นการสั่งให้ Apache รู้จักไฟล์ชนิดที่เราระบุเพื่อจะได้มีการส่ง header ที่ถูกต้องไปยัง client สามารถทำได้โดย
AddType application/x-shockwave-flash swf
ป้องกันการ Hot link เป็นการสั่งให้ Apache ทำการป้องกัน การเรียกใช้ไฟล์ที่ไม่ใช้ไฟล์ที่เราต้องการโดยตรง เช่น cascading style sheet, Javascript หรือไฟล์ที่เป็นความลับอื่นๆได้ โดย
RewriteEngine onRewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http://(www\.)?modoeye.com.com/.*$ [NC]RewriteRule \.(css|js|gif|jpg)$ http://www.modoeye.com/hotlink.gif[R,L]จากตัวอย่าง เป็นการป้องกันการเรีกใช้ไฟล์ .css, .js, .gif, .jpg โดยตรงที่ไม่ได้มาจาก modoeye.com และเมื่อมีการ hotlink จะมีการแสดง hotlink.gif แทน
ป้องกัน Directory listing เป็นการสั่งให้ Apache ทำการป้องการ listing ไฟล์ที่อยู่ใน directory นั้น (ในกรณีที่ใน directory นั้นไม่มีไฟล์ index และ main configuration file ทำการเปิด directory listing ไว้) เมื่อมีการเรียกมายัง directory นั้นๆปกติ Apache จะทำการ list ไฟล์ทั้งหมดออกมาแสดงผล ซึ่งเป็นการไม่ดีแน่ถ้าข้อมูลนั้นเป็นรูปหรือไฟล์สำคัญๆ เราสามารถทำการป้องกันได้โดย
IndexIgnore *หรือOptions -IndexesIndexIgnore *.gif *.jpgจากตัวอย่างที่ 1 และ 2 นั้นเป็นการสั่งให้ Apache ไม่ทำการ list ไฟล์ใดๆทั้งสิ้น ส่วนตัวอย่างล่างสุดนั้นเป็นการสั่งให้ Apache ไม่ทำการ list เฉพาะไฟล์ .gif และ .jpg เท่านั้น
การ override module PHP สามารถอ่านเพิ่มเติมได้ที่ การ Override Directive ของ Apache
ทั้งหมดนั้นเป็นการใช้งาน .htaccess สำหรับ Apache ซึ่งสามารถนำไปประยุกต์ใช้กับ เว็บของท่านได้ตามต้องการครับ

missing mysql.sock


Found this on another board and it solved an issue I had with a brand new server that I probably caused...


Problem (1) /tmp/mysql.sock missing .

Solution -

i) login as root through ssh
ii) type "ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock"

Problem (2) Can not connect to /var/lib/mysql/mysql.sock

Solution -

1) Stop MySQL server,
2) Type safe_mysqld --socket=/var/lib/mysql/mysql.sock
3) ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
4) Start MySQL . ( Recommended )

I used step two. of problem 2 only and it worked.
__________________

Tuesday, 23 February 2010

10 จุดตาย..ระบบปฏิบัติการลินุกซ์


เราต่างทราบกันดีว่า ซอฟต์แวร์ทุกชนิดล้วนมีข้อบกพร่องให้โปรแกรมเมอร์ต้องแก้ไข ปรับปรุง พัฒนากันไม่รู้จบ โชคดีที่ระบบปฏิบัติการลีนุกซ์ถูกสร้างขึ้นโดยอาศัยโมเดลการพัฒนาซอฟต์แวร์โอเพ่นซอร์ส ทำให้ได้รับการปรับปรุงแก้ไขต่อเนื่องไม่มีวันจบสิ้น แต่ถึงอย่างไรก็ตามในโลกนี้ใม่มีอะไรที่จะสมบูรณ์แบบไปทั้งหมด แม้แต่ระบบปฏิบัติการลีนุกซ์เองก็ยังคงมี “จุดอ่อน” ที่เมื่อสะกิดโดนเมื่อใดก็ถือเป็น “จุดตาย” ได้ทันที ด้วยการทำความเข้าใจอย่างลึกซึ้งเท่านั้นจึงจะเป็น “เกราะป้องกัน” ได้อย่างดีที่สุด“จุดตาย” ที่ผู้เขียนนำมาเสนอนี้ มีจุดประสงค์เพื่อบอกเล่าประสบการณ์ และเป็นแนวทางให้แก่ผู้สนใจ ศึกษาระบบปฏิบัติการลีนุกซ์ได้นำไปวางแผนป้องกัน เพิ่มความระมัดระวังในการปฏิบัติงาน รวมไปถึงช่วยให้เข้าใจการทำงานของระบบปฏิบัติการลีนุกซ์มากยิ่งขึ้นในโอกาสต่อไป มาเริ่มกันเลยนะครับจุดตายที่ 1 MBRMBR ย่อมาจาก Master Boot Record เป็นจุดเริ่มต้นของระบบปฏิบัติการทุกชนิดที่บูตด้วยฮาร์ดดิสก์ พื้นที่ขนาดจิ๋วแค่ 512 ไบต์ที่อยู่บริเวณส่วนแรกสุดของฮาร์ดดิสก์นี้เอง เป็นที่เก็บโปรแกรมประเภท Boot Loader ไว้ สำหรับระบบปฏิบัติการลินุกซ์รุ่นปัจจุบันนิยมใช้กันก็คือโปรแกรมชื่อ GRUB นั่นเอง ซึ่งโปรแกรม GRUB นี้มีหน้าที่เริ่มต้นโหลดเคอร์เนลลินุกซ์เข้าสู่หน่วยความจำของเครื่องพีซี อันเป็นขั้นตอนสำคัญที่สุดของการเริ่มต้นระบบเลยก็ว่าได้ส่วนของโปรแกรม GRUB ที่ติดตั้งอยู่ที่ MBR นี้ ไม่ใช่ตัวโปรแกรมทั้งหมด หากแต่เป็นเพียงเฉพาะส่วนหนึ่งที่เรียกกันว่า Stage 1 ของ GRUB เท่านั้น ซึ่งมันจะค้นหา Stage 1.5 ของตัวมันเองไล่ลำดับไปจนถึงเคอร์เนลในที่สุด จากความสำคัญดังกล่าวมานี้ จะเห็นได้ว่าหาก MBR และ GRUB ที่ฝังอยู่ในส่วนต้นของฮาร์ดดิสก์ได้รับความเสียหายย่อมส่งผลให้ระบบไม่สามารถทำงานได้ นั่นคือ ระบบปฏิบัติการลินุกซ์ของเราจะบูตไม่ขึ้นอย่างแน่นอน และถือว่าเป็นจุดตายที่พบค่อนข้างบ่อยมากอาการหนึ่งแนวทางป้องกัน “จุดตายที่ 1” ทำได้โดยสำรอง MBR ไว้ในแผ่นดิสก์ โดยใช้คำสั่งหรือโปรแกรมสำเร็จรูปก็ได้ และในกรณีที่ต้องการใช้หลายระบบปฏิบัติการในเครื่องเดียวกันควรติดตั้งระบบปฏิบัติการวินโดวส์ “ก่อน” ลีนุกซ์เสมอ เพราะการติดตั้งวินโดวส์จะเขียนข้อมูลทับ GRUB Stage 1 ให้เสียหายได้ ส่วนการแก้ไขปัญหากรณีที่ GRUB Stage 1 โดนทำลายไปแล้ว จะต้องใช้แผ่นบูตของลีนุกซ์บูตแทนฮาร์ดดิสก์ หรือใช้เทคนิคที่เรียกว่า Linux Rescue ก็ได้เช่นกันจุดตายที่ 2 คอนฟิกของ GRUBเราได้ทราบถึงความสำคัญของโปรแกรม GRUB ไปพอสมควรแล้ว และทราบแล้วว่า GRUB ไม่ได้อยู่ที่ MBR เท่านั้น แต่ยังมีส่วนประกอบอื่นๆ อีกในไดเร็คทอรี่ /boot/grub เรียกว่าเป็นคอนฟิกทั้งหมดของ GRUB ก็ได้ ในพื้นที่นี้มีไฟล์สำคัญๆ ได้แก่ grub.conf stage1 e2fs_stage1_5 และ stage2โดยเฉพาะไฟล์ grub.conf นั้น มีรายละเอียดการทำงานระบุไว้ภายใน ทั้งยังเป็นไฟล์ข้อความธรรมดาอีกด้วย จึงมีความเสี่ยงสูงมากที่จะถูกเปลี่ยนแปลงแก้ไข จนมีผลทำให้ระบบไม่สามารถบูตได้ตามปรกติ หรือมีโอกาสที่ผู้ที่บุกรุกเข้าสู่ระบบจะทำการแก้ไขคอนฟิกเพื่อให้เคอร์เนล (ซึ่ง GRUB เป็นผู้กระตุ้นให้ทำงาน) มีการทำงานที่เอื้อต่อการเปิดช่องโหว่ขึ้น ซึ่งอาจนำไปสู่หายนะที่ร้ายแรงยิ่งขึ้นสำหรับเซิร์ฟเวอร์ในระบบอินเตอร์เน็ตแนวทางการป้องกัน “จุดตายที่ 2” คือ ควรใช้เซ็ต immutable bit เพื่อป้องกันการแก้ไขไฟล์โดยไม่ตั้งใจ และ ควรกำหนดพารามิเตอร์ในการเม้าต์พื้นที่นี้เป็นแบบอ่านได้เท่านั้น (Read Only) สำหรับการแบ๊คอัพคอนฟิกไว้คงไม่ต้องกล่าวให้เปลืองเวลาเพราะเป็นภารกิจปรกติของผู้ดูแลระบบที่ทราบกันดีอยู่แล้วจุดตายที่ 3 เคอร์เนลและไฟล์ประกอบทั้งหมดคงปฏิเสธไม่ได้ว่า เคอร์เนล คือ หัวใจสำคัญของระบบปฏิบัติการลีนุกซ์ “จุดตายที่ 3” จึงตกอยู่ที่ /boot ซึ่งเป็นไดเร็คทอรี่ที่จัดเก็บไฟล์เคอร์เนลรวมทั้งไฟล์อื่นๆ ที่ร่วมกันทำงานกับเคอร์เนล โดยเฉพาะในขั้นตอนของการบูตระบบในครั้งแรกที่เปิดเครื่อง เราไม่อาจย้ายตำแหน่งที่เก็บเคอร์เนลไปที่อื่นได้ เหตุผลเนื่องมาจากข้อจำกัดของโปรแกรมประเภท Boot Loader (เช่น GRUB) จะต้องสามารถค้นหาและโหลดไฟล์เคอร์เนลได้ง่ายที่สุดนั่นเองไดเร็คทอรี่ /boot จึงกลายเป็น “เป้านิ่ง” ให้ผู้ไม่หวังดีโจมตีได้ง่ายมาก โดยเฉพาะเมื่อโปรแกรมแอปพลิเคชั่นที่กำลังทำงานอยู่มีช่องโหว่ด้านความปลอดภัยทางเครือข่าย ประเด็นสำคัญอีกข้อก็คือ เนื่องจากไฟล์เคอร์เนลและไฟล์ประกอบทั้งหลายใน /boot นี้ไม่ใช่ไฟล์ข้อความธรรมดา การโจมตีจึงเป็นลักษณะ “เช็คบิล” ล้วนๆ คือ ทำลายให้เสียหายเท่านั้น ผลลัพธ์คือ บูตไม่ได้นั่นเองสำหรับแนวทางการป้องกัน ยังคงเหมือนกับ /boot/grub ที่ได้กล่าวไปแล้ว เพราะทั้งสองพื้นที่นี้อยู่ร่วมกัน การแยกเม้าต์เฉพาะ /boot และทำให้เม้าต์แบบ Read Only จึงเป็นวิธีการที่เหมาะสมที่สุดสำหรับทั้งจุดตายที่ 2 และจุดตายที่ 3จุดตายที่ 4 SELinuxSELinux ย่อมาจาก Security Enhanced Linux เป็นคุณสมบัติด้านการรักษาความปลอดภัยที่เพิ่มเติมขึ้นในเคอร์เนลลีนุกซ์รุ่นใหม่ตั้งแต่ 2.6 ขึ้นไปก็จะมีรวมไว้เสมอ ซึ่งมีความซับซ้อนในการบริหารจัดการอยู่พอสมควร และยังถือว่าเป็นของใหม่สำหรับหลายๆ ท่านอยู่ในเวลานี้ ดังนั้นคุณสมบัตินี้จึงถูกออกแบบให้ผู้ใช้งานสามารถเลือกโหมดในการทำงานและสามารถเปิดปิดการทำงานได้ตามความต้องการมีข้อดีอย่างนี้แล้ว SELinux จะเป็น “จุดตายที่ 4” ได้อย่างไร ดังที่ได้กล่าวไปแล้วว่า SELinux มีความสัมพันธ์ใกล้ชิดกับเคอร์เนลมาก คือ เป็นส่วนหนึ่งในเคอร์เนลเลยทีเดียว ดังนั้นเมื่อมีความผิดปรกติใดก็ตามเกี่ยวกับ SELinux ย่อมทำให้การทำงานของเคอร์เนลผิดปรกติไปด้วยอย่างหลีกเลี่ยงไม่ได้ตัวอย่างหนึ่งก็คือ ไฟล์คอนฟิกของ SELinux ที่มีปรากฏในลีนุกซ์ตระกูล Red Hat ทั้งหมด ได้แก่ Red Hat Enterprise Linux ,Fedora Core ,CentOS จะมีไฟล์ชื่อ /etc/sysconfig/selinux ซึ่งใช้ในการกำหนดการทำงานให้แก่เคอร์เนลในเรื่องเกี่ยวกับ SELinux หากไฟล์นี้ถูกแก้ไขผิดเพี้ยนไป ผลลัพธ์ที่เกิดขึ้นคือ บูตไม่ขึ้นครับ อาการที่ปรากฏก็คือ ถึงกับ Kernel Panic เลยทีเดียว เพราะฉะนั้นจึงใคร่ขอแนะนำว่า การที่จะไปแก้ไขคอนฟิกไฟล์โดยตรงด้วยโปรแกรมแก้ไขข้อความ ( vim หรือ nano ) เป็นทางเลือกที่ต้องระมัดระวัง หากสามารถใช้โปรแกรมคำสั่งที่กำหนดให้ใช้ก็จะปลอดภัยกว่า แต่ถ้าถนัดที่จะแก้ไขโดยตรงเองก็ต้องเพิ่มความละเอียดรอบคอบมากยิ่งขึ้นสรุปแล้ว “จุดตายที่ 4” นี้ เป็นตัวอย่างหนึ่งของสิ่งที่เราเรียกกันว่า “Admin Error” ก็คงไม่ผิดจุดตายที่ 5 ไฟล์ธรรมดา..ที่ไม่ธรรมดาจุดตายที่ 5 นี้ อันที่จริงยังไม่ถึงขั้นร้ายแรงนัก เรียกว่า แค่เอ๋อ..ยังไม่ถึงตาย ไฟล์คอนฟิกบางไฟล์นั้น ดูเผินๆ ก็เป็นแค่ไฟล์ธรรมดาที่คุ้นๆ กันอยู่ (ผ่านไปผ่านมา..ไม่เคยสนใจ) แต่อาจจะสร้างความผิดปรกติให้ระบบได้อย่างคาดไม่ถึง และมีอำนาจมากพอจะเปลี่ยนให้ “แอดมินผู้เชี่ยวชาญ” ให้กลายเป็น “แอดมึนผู้มืดมน” ไปได้ง่ายๆยกตัวอย่างเช่นไฟล์ /etc/hosts ซึ่งเป็นไฟล์ที่มีปรากฏในโฮสต์ทุกระบบปฏิบัติการที่ทำงานกับระบบเครือข่าย TCP/IP โดยหน้าที่แล้วไฟล์นี้ใช้เก็บรายชื่อโฮสต์จับคู่กับหมายเลขไอพีไว้เท่านั้นเอง ไม่ว่าเมื่อใดก็ตามที่มีการติดต่อกับโฮสต์ต่างๆ แม้แต่การติดต่อกับโฮสต์ตัวเองก็จะต้องเปิดไฟล์นี้เพื่ออ้างอิงชื่อและหมายเลขไอพีที่ถูกต้อง แล้วเพราะเหตุใดจึงนับว่าเป็น “จุดตาย”ประเด็นอยู่ตรงที่โปรแกรมแอปพลิเคชั่นทุกๆ โปรแกรมที่ทำงานเกี่ยวข้องกับชื่อโฮสต์ จะต้องสามารถอ้างอิงถึง “ตัวเอง” ได้ เช่น localhost หรือชื่อใดๆ ที่ตั้งขึ้นก็ตาม เพื่อให้วงจรของการสื่อสารดำเนินไปอย่างถูกต้อง ดังนั้นหากชื่อโฮสต์ของ “ตัวเอง” ที่ระบุไว้ในไฟล์นี้ ไม่ถูกต้องแล้ว ผลก็คือจะทำให้โฮสต์ของเราไม่รู้จัก “ตัวเอง” ว่าชื่ออะไรกันแน่ผลที่เกิดขึ้นจะทำให้ระบบของเราเกิดอาการ “เอ๋อ” ได้อย่างไม่ต้องแปลกใจ เช่น โฮสต์ของเราชื่อ nomnam.example.com เมื่อได้รับอีเมล์ที่ส่งมาถึง user@nomnam.example.com โฮสต์ของเราก็ไปมองในไฟล์ /etc/hosts ปรากฏว่าระบุไว้เป็นชื่ออื่น โฮสต์ของเราก็จะปฏิเสธ (reject) อีเมล์ฉบับนั้นไปซะนี่ แทนที่จะรับไว้ให้แก่ user ซึ่งมันคงคิดไปว่า “ฉันไม่ได้ชื่อ nomnam.example.com ซะหน่อย..นี่ไม่ใช่อีเมล์ของฉัน..” เพราะฉะนั้นโปรดอย่ามองข้ามจุดเล็กๆ น้อยๆ มิฉะนั้นมันอาจกลายเป็น “จุดตาย” ขึ้นมาก็ได้จุดตายที่ 6 เข้าเกียร์ไม่ได้..ก็จอดสนิทลีนุกซ์ทุกสายพันธุ์จะมีศูนย์กลางของการควบคุมการทำงานของโปรเซสที่รับช่วงต่อจากเคอร์เนลที่เหมือนกันหมด คือ โปรแกรม init และไฟล์คอนฟิกที่ทำงานคู่กันก็คือไฟล์ /etc/inittab เปรียบเสมือนฟันเฟืองชิ้นเล็กๆ ที่ใช้ควบคุมการส่งกำลังของรถยนต์ ไฟล์ทั้งสองนี้มีหน้าที่ควบคุมการบูตเข้าสู่การทำงานในโหมดต่างๆ ของระบบปฏิบัติการลีนุกซ์ไปจนถึงการปิดเครื่องหรือการรีบูตเครื่อง ซึ่งโหมดต่างๆ เหล่านี้เราเรียกว่า Run Level โดยใช้ค่าตัวเลขในการแทนความหมาย เช่น runlevel 0 หมายถึงการปิดเครื่อง (halt) เป็นต้นจากความสำคัญที่กล่าวมา จึงทำให้เราค้นพบ “จุดตาย” อีกจุดหนึ่ง ซึ่งโอกาสที่ /sbin/init จะถูกโจมตีในลักษณะ Rootkits ก็มีปรากฏมาแล้ว (ถูกดัดแปลงโค๊ดภายในจนกลายเป็นเครื่องมือของแฮกเกอร์) ไฟล์ /etc/inittab ที่มีสภาพเป็นไฟล์ข้อความธรรมดาย่อมถูก “รบกวน” ได้ไม่ยากเลย แม้กระทั่งความผิดพลาดของผู้ดูแลระบบเองก็ทำให้ถึงกับ “จอดสนิท” ได้เช่นกันไม่เพียงเท่านั้น ภายใต้การทำงานของโปรแกรม init ยังมีไฟล์ย่อยๆ อีกจำนวนมาก ที่รวมกันทำงานเพื่อควบคุมการเริ่มต้นทำงานของระบบปฏิบัติการ คือ /etc/rc.d/rc.sysinit และ /etc/rc.d/rc ซึ่งมีหน้าที่ควบคุมระบบย่อยที่เรียกว่า System Services แบบ SysV เพื่อเริ่มต้นการทำงานหรือยุติการทำงานของโปรแกรมบริการ (เช่น บรรดาเซิร์ฟเวอร์ต่างๆ) ทั้งหมดในระบบอีกด้วยหนทางป้องกัน “จุดตายที่ 6” นี้ คงหนีไม่พ้น “immutable bit” เท่านั้น เนื่องจากทุกส่วนที่เกี่ยวข้องกับเรื่องนี้อยู่ร่วมกันในเม้าต์พอยต์ “/” ทั้งสิ้น เรียกว่า One Problem One Solution จริงๆ (ไม่เช่นนั้นคงไม่เรียกว่า “จุดตาย” จริงไหมครับ)จุดตายที่ 7 ร่างกาย..ขาดรุ่งริ่งโครงสร้างของทุกสรรพสิ่งในโลกของเรา เกิดจากส่วนประกอบย่อยๆ นำมาประกอบเข้าด้วยกัน การที่ระบบปฏิบัติการจะรวมกันและทำงานได้นั้น จำเป็นต้องมี “ข้อต่อ” ที่ช่วยยึดส่วนต่างๆ เช่นเดียวกัน ศูนย์กลางของการเชื่อมโยงดิสก์พาร์ทิชั่นทั้งหลายของระบบปฏิบัติการลีนุกซ์ ก็คือ “จุดตาย” ที่จะกล่าวถึง ในที่นี้ก็คือไฟล์ /etc/fstab ซึ่งเป็น “ผู้ให้ข้อมูล” เกี่ยวกับการเชื่อมโยงดิสก์พาร์ทิชั่นทั้งหมดของระบบปฏิบัติการลีนุกซ์เข้าด้วยกัน ทั้งระบบไฟล์ที่เชื่อมโยง (mount) แบบถาวร และระบบไฟล์ของอุปกรณ์ประเภทถอดเปลี่ยนได้ (Removable Data Storage)ไฟล์ /etc/fstab เป็นไฟล์ข้อความธรรมดา จึงมีปัญหาที่คล้ายกับ “จุดตาย” อื่นๆ ที่ได้กล่าวมาแล้ว มันถูกเปลี่ยนแปลงข้อความภายในได้ง่าย สิ่งที่อยู่ภายในมีความสำคัญต่อการเชื่อมโยงระบบไฟล์ทั้งหมดเข้าด้วยกัน แล้วจะมีอะไรที่ “เสี่ยง” มากไปกว่านี้อีกในเบื้องลึกไฟล์ /etc/fstab ไม่ได้ทำงานอย่างเอกเทศ แต่มันยังมีส่วนประกอบอื่นๆ ที่ “ยากต่อการป้องกัน” อีกด้วย ตั้งแต่โปรแกรมคำสั่ง /bin/mount ซึ่งทำหน้าที่ในการเชื่อมโยงระบบไฟล์ต่างๆ เข้าด้วยกัน โดยอ้างอิงข้อมูลจาก /etc/fstab อีกที แถมโบนัสความเสี่ยงด้วยการที่มีการกำหนดสิทธิแบบพิเศษเป็น SUID อีกต่างหาก ซึ่งทำให้ผู้ที่รันโปรแกรม mount นี้จะมีสิทธิ์สูงเทียบเท่า root เลยทีเดียว ลองคิดดูสิครับว่าอะไรจะเกิดขึ้นถ้าไฟล์ mount นี้ถูกสวมรอยโดย Rootkits ...???นอกจากนี้ในกระบวนการ mount อันเป็นสิ่งปรกติในระบบปฏิบัติการลีนุกซ์ ยังมีส่วนประกอบที่คุณไม่สามารถ “ป้องกันการเขียน” (Write Protect) ได้อีกด้วย นั่นคือไฟล์ /etc/mtab ซึ่งคล้ายกับกระดาษทดที่ใช้ตลอดเวลาที่มีการ mount เกิดขึ้น ถ้าไฟล์นี้เสียหายหรือเปลี่ยนแปลงไประบบย่อมเพี้ยนไปอย่างแน่นอนจุดตายที่ 8 แหล่งกบดาน..ของวายร้ายถ้าสิ่งที่กล่าวมานี้เป็นฝันร้ายแล้วล่ะก็... คุณคงจะต้องนิยามความหมายของคำว่าฝันร้ายใหม่ซะแล้ว เพราะ “จุดตาย” ที่จะชึ้ให้เห็นต่อไปนี้เป็นเสมือนแหล่งซ่อนตัวหรือกบดานของเหล่าวายร้ายที่จะแฝงเข้ามาอาศัยในเซิร์ฟเวอร์ของเรา แล้วจากนั้นจะใช้เครื่องของเราเป็นฐานในการโจมตีผ่านเครือข่ายไปยังโฮสต์อื่นๆ ต่อไป ซึ่งพฤติกรรมเช่นนี้จะคุ้นเคยกันในชื่อต่างๆ เช่น Backdoor หรือTrojans นอกจากนี้ยังเป็นช่องทางที่เหล่าวายร้ายจะนำสิ่งที่เรียกว่า Shell Code มาฝังไว้ได้ โดยจะทยอยส่งโค๊ดเข้ามาทีละเล็กทีละน้อยจนกลายเป็นโปรแกรมใหญ่มากพอที่จะทำงานได้ตามที่ต้องการแน่นอนว่าพื้นที่เหล่านี้จะต้องมีช่องโหว่มากพอที่ใครก็ตามสามารถ “เขียน” ข้อมูลลงไปได้ คือ มี Permission Mode เป็น w (write) ตามมาด้วย Permission Mode เป็น x (Execute) ซึ่งจะทำให้โค๊ดที่ผ่านการ “ประกอบร่าง” สำเร็จแล้วสามารถรันได้อีกด้วย“จุดตายที่ 8” นี้ มีอยู่ทั่วไปในระบบปฏิบัติการลีนุกซ์ ที่เห็นได้ชัดเจนว่ามี Permission Mode สูงพอสำหรับการ “เขียน” และการ “รัน” ( ค่าของ Permission Mode สูงประมาณ 755 ขึ้นไป) ได้แก่ /tmp ,/var/tmp และ /dev/shm ทั้งสามจุดนี้มี Permission Mode เป็น drwxrwxrwt หรือ 1777การป้องกันทำได้โดยแยก mount point ออกไปจาก mount point “/” กำหนด option ของการเม้าต์ไม่อนุญาตให้สามารถรันโปรแกรมได้ และใช้โปรแกรมประเภท Local IDS ต่างๆ มาช่วยในการเฝ้าระวัง (ถึงแม้จะได้แค่เฝ้าระวังก็ยังดีกว่าไม่รู้ว่าเกิดอะไรขึ้นบ้าง)สิ่งสำคัญที่ต้องเตือนให้ทราบไว้ก็คือ กรุณาอย่าคิดว่าจะไปเปลี่ยน Permission Mode ของ “จุดตาย” เหล่านี้ให้น้อยลงนะครับ เพราะจะส่งผลกระทบต่อระบบและโปรแกรมต่างๆ ทำให้ทำงานผิดปรกติได้ เท่ากับไป “วางยา” ตัวเองเสียอีกจุดตายที่ 9 ไม่ขาด..แต่เกินก็มีปัญหาได้เป็นที่เข้าใจกันดีอยู่แล้วว่า ถ้าส่วนประกอบของระบบสูญหายไป ย่อมทำให้ระบบทำงานไม่ได้หรือเกิดความผิดปรกติขึ้น เช่น ไฟล์คอนฟิกสำคัญหายไป หรือข้อความภายในผิดเพี้ยนไป เป็นต้น แต่ในทางกลับกัน ถ้ามีไฟล์แปลกปลอมหลงเข้าไปในระบบบ้างล่ะ จะเกิดปัญหาได้หรือไม่“จุดตายที่ 9” นี้ เป็น พื้นที่ไดเร็คทอรี่ที่มีความอ่อนไหวเป็นพิเศษ ส่วนใหญ่แล้วจะเป็นพื้นที่เก็บคอนฟิกไฟล์ของโปรแกรมต่างๆ ทั้งส่วนที่เกี่ยวข้องกับตัวระบบปฏิบัติการมากๆ ไปจนถึงส่วนเฉพาะโปรแกรมบริการบางโปรแกรม ที่มีข้อจำกัดในด้านการทำงานมากๆ ถ้ามีไฟล์ “ส่วนเกิน” หลงเข้าไปแล้วล่ะก็จะไม่สามารถทำงานต่อไปได้ ความเปราะบางเช่นนี้พิจารณาดูดีๆ แล้ว น่าจะจัดว่าเป็น “ข้อบกพร่อง” (Bug) ของโปรแกรมก็คงไม่ผิดยกตัวอย่างเช่น พื้นที่ /etc/xinetd.d/ ที่ไดเร็คทอรี่นี้จะเป็นที่เก็บไฟล์คอนฟิกย่อยๆ ของ Xinetd ซึ่งเป็น Super Server ที่ให้บริการด้านระบบเครือข่ายต่างๆ เนื่องจากรูปแบบของไฟล์คอนฟิกย่อยๆ เหล่านี้จะต้องมีไวยกรณ์ต่างๆ ตรงตามกำหนดไว้เท่านั้น ผิดเพี้ยนแม้แต่น้อยก็จะทำให้ Super Server หรือลูกพี่ใหญ่เริ่มต้นทำงานไม่ได้เลย ดังนั้นหากมีไฟล์อะไรก็ตามหลงเข้ามาปะปนในพื้นที่นี้ การแปลความหมายก็จะเข้าใจว่าเป็นไวยกรณ์ที่ผิดปรกติ และส่งผลให้ไม่สามารถทำงานต่อไปได้ในที่สุด บริการเซิร์ฟเวอร์ทั้งหลายภายใต้ Xinetd ก็พลอยได้รับผลกระทบตามไปด้วยนั่นเองกรณีปัญหาที่เกิดจากไฟล์ “ขาดหาย” ไม่ครบตามปรกติคงเป็นปัญหาที่แสนธรรมดามากเมื่อเทียบกับปัญหาที่มีไฟล์ “เกิน” เข้ามาในระบบเช่นนี้จุดตายที่ 10 ยังไม่ถึงตาย...แค่หายใจติดขัดปัญหาบางลักษณะที่เกิดขึ้นกับเซิร์ฟเวอร์ลีนุกซ์ของเรา บางครั้งจะไม่ถึงขนาดที่รุนแรงนัก เพียงแต่สร้างความไม่ปรกติให้เห็นได้ หรือส่งผลกระทบกับบางเรื่องเท่านั้น แต่ถ้าไม่เตรียมการป้องกันไว้ก็จะเกิดปัญหาขึ้นบ่อยๆ หรือหากเกิดปัญหาขึ้นก็จำเป็นต้องเร่งแก้ไขอยู่ดี ดังนั้นหากจะนับรวมเป็นอีกหนึ่ง “จุดตาย” ก็คงไม่ผิดกติกาตัวอย่างของอาการปัญหาประเภทนี้ ได้แก่ ปัญหาเนื้อที่ดิสก์เต็ม (Disk Full) ในบางจุด โดยเฉพาะที่พบบ่อยมากๆ คือ พื้นที่ /tmp และ /var เนื่องจากโปรแกรมบางตัวไม่มีระบบป้องกันตัวเองเมื่อพื้นที่จัดเก็บข้อมูลเกิดความขัดข้อง ทำให้ไม่สามารถบันทึกหรือเขียนข้อมูลได้ เช่น โปรแกรมประเภทเว็บที่เขียนด้วยภาษา PHP หรือโปรแกรมในกลุ่มฐานข้อมูล อาจจะออกแบบให้พักข้อมูลที่ /tmp เมื่อใดก็ตามที่พื้นที่นี้เต็มหรือไม่สามารถเขียนข้อมูลลงไปได้ ก็จะมีอาการผิดปรกติขึ้นทันที และเป็นเช่นนั้นไปจนกว่าจะได้รับการแก้ไขปัญหาทำนองเดียวกันนี้จะพบได้ในเรื่องของการจัดเก็บบันทึกไฟล์สถานะหรือ Log ต่างๆ อีกด้วย เช่น พื้นที่ /var/log เกิดอาการเต็มขึ้นมาระบบจะไม่สามารถบันทึก log ต่อไปได้ อาจมีผลทำให้โปรแกรมต่างๆ หยุดทำงานได้เช่นกันหนทางป้องกันก็คือ ควรตรวจดูว่าแต่ละโปรแกรมที่เราใช้งานนั้นมีการพักข้อมูลที่ใดบ้าง ควรจัดสรรให้มีเนื้อที่เพียงพอต่อการทำงานของระบบและโปรแกรมต่างๆ ทั้งหมด บางโปรแกรมจะสามารถกำหนดค่าในคอนฟิกได้ว่าจะย้ายไปใช้พื้นที่อื่นๆ หรือไม่ ซึ่งมีประโยชน์มากเมื่อต้องการเปลี่ยนแปลงในภายหลัง หรือขยับมิให้โปรแกรมหลายๆ โปรแกรมมาใช้พื้นที่เดียวกันมากจนเกินไป และสมควรเป็นอย่างยิ่งที่จะนำโปรแกรมที่ช่วยบริหารจัดการดิสก์ ระบบจัดการเกี่ยวกับบันทึก Log File ได้แก่ Log watch ,Log Rotate และ SysLOG มาช่วยจัดการก็จะลดภาระผู้ดูแลระบบไปได้มากถึงเวลา..สำรวจจุดตายผู้เขียนได้ชี้ “จุดตาย” ในระบบปฏิบัติการลีนุกซ์ให้ได้ทราบกันแล้วถึง 10 จุด พร้อมเสนอแนะแนวทางการป้องกัน ตลอดจนเครื่องมือที่เกี่ยวข้อง ในทางปฏิบัติแล้วผู้ดูแลระบบควรตั้งอยู่บนความไม่ประมาท ควรศึกษาหาความรู้ และมีกำหนดการที่จะตรวจตราดูสภาพการทำงานของระบบทั้งหมดอย่างสม่ำเสมอ อย่าปล่อยให้เซิร์ฟเวอร์ลีนุกซ์ของเราต้องตกอยู่ในสภาพ “เฉียดตาย” แล้วจึงจะหาทางแก้ปัญหา เพราะเมื่อถึงเวลานั้นมันอาจจะสายเกินไปแล้วก็ได้

การเปลี่ยนฐานเวลาบน Linux ด้วยคำสั่ง hwclock


* ย้ำท่านที่ใช้ Linux ทำ Mail Server / webmail / Proxy ในการเก็บ Log file ต้องทำนะครับ มิงั้น วันเวลาจะไม่เป็นปัจจุบัน
ขั้นตอน
1. ก่อนอื่นติดตั้ง Linux ให้เสร็จเรียบร้อยก่อน
อันนี้ถึงเราตั้งเวลาตอนติดตั้งและเปลี่ยน Time Zone เป็น Asia/Bangkok แล้วก็ตามเวลาของระบบจะยังไม่เป็นปัจจุบัน ลองดูด้วยคำสั่ง #date หรือ #hwclock --show
2. หากวันที่และเวลาไม่เป็นปัจจบันลองใช้คำสั่งเปลี่ยนแปลงตามรูปแบบดังนี้
# date [enter] ตรวจสอบก่อน
# date --utc [enter] ตรวจสอบ utc
# date -s "13:20:30" [enter] เปลี่ยนเวลาอย่างเดียว
# date -s "6 Aug 2009 13:20:30 " [enter] เปลี่ยนเวลาและวันที่
# hwclock --systohc [enter] สั่งให้เป็นวัน เวลาปัจจุบัน (หากไม่ใช้คำสั่งนี้หลัง reboot ข้อมูลจะไม่เปลี่ยนแปลง)
# hwclock –show [enter] ตรวจสอบ
แค่นี้ก็เสร็จสิ้นการตั้งค่าวัน เวลาใน Linux
ท่านสามารถดูรายละเอียดคำสั่งนี้แบบเจาะลึกได้ที่ลิงค์เหล่านี้
- http://linux.die.net/man/8/hwclock
- http://www.easyzonecorp.net/network/view.php?ID=904
- http://www.cyberciti.biz/faq/howto-set-date-time-from-linux-command-prompt/

การแก้ปัญหากรณีลืมรหัสผ่าน root บนระบบ Linux


วิธีแก้ขึ้นอยู่กับว่าเราใช้ระบบการ boot Linux แบบใดโดยปัจจุบันมีให้เลือกสองแบบคือ LILO , GRUB
กรณีระบบบู๊ตแบบ LILO
1. ทำการบู๊ตเครื่องใหม่
2.ขณะที่ขึ้นข้อความว่า boot : linux single < พิมพ์คำนี้เข้าไป
3.จะขึ้นคอมมานด์พร็อมท์เป็น #
4. ทำการเปลี่ยนรหัสผ่าน root ใหม่
# passwd root [enter]
ป้อนรหัสผ่านสองครั้ง
5. พิมพ์ reboot หรือ shutdown -r now [enter] เพื่อทำการบู๊ตเครืองใหม่
กรณีระบบบู๊ตแบบ GRUB
1. ทำการบู๊ตเครื่องใหม่
2. ขณะแสดงเมนูบู๊ตของ GRUB ให้เลือกเมนูบู๊ตเข้า Linux แล้วกดปุ่ม E [enter] เพื่อเข้าหน้าแก้ไขการบู๊ต
3. เลื่อนไปบนบรรทดที่ขึ้นต้นด้วย kernel
4. กดปุ่ม E [enter] เพื่อแก้ไขข้อมูล
5. เคาะ backspace เพื่อเว้นว่าง 1 ครั้ง
6. พิมพ์ single [enter]
7. กดปุ่ม B [enter]
8. จะขึ้นคอมมานด์พร็อมท์เป็น #
9 . ทำการเปลี่ยนรหัสผ่าน root ใหม่
# passwd root [enter]
ป้อนรหัสผ่านสองครั้ง
10 . พิมพ์ reboot หรือ shutdown -r now [enter] เพื่อทำการบู๊ตเครืองใหม่

คำสั่งในการดู CPU, RAM และความจุ Hard Disk


ในระบบลีนุกซ์หากท่านต้องการดู CPU, RAM และความจุ Hard Disk ท่านสามารถดูด้วยคำสั่งต่อไปนี้
# cat /proc/cpuinfo ดูหน่วยประมวลผลกลาง (CPU)
# cat /proc/meminfo ดูหน่วยความจำ (RAM)
# free -m ดูหน่วยความจำที่ใช้งานไป หน่วยเป็น m
# top ดูเปอร์เซ็นต์การใช้งาน CPU และ RAM
# df -h ดูความจุฮาร์ดดิสก์ที่ใช้งาน
#du -sh
#du -sh *