ลีนุกซ์ (Linux)
Home  Contents KMArticlesMembersSponsorsAbout us

ปรับปรุง : 2556-10-06 (ปรับเป็นรุ่น 3)
ขอบซ้ายขอบบน
Linux : ok
:: กลับหน้าแรก :: แสดงเนื้อหาทั้งหมด ::

1.1 คำสั่ง ls
: ใช้แสดงรายชื่อแฟ้มทั้งหมดในห้องเก็บข้อมูลปัจจุบัน
: list directory contents
ทุกท่านที่มี account ใน linux จะมี home directory ของตนเอง เพื่อใช้เก็บแฟ้มต่าง ๆ ภายใต้ระบบ linux เมื่อต้องการทราบว่ามีแฟ้มอะไร เก็บไว้บ้าง สามารถใช้คำสั่ง ls ได้ และสามารถกำหนด parameter ได้หลายตัว เช่น -al --sort เป็นต้น ถ้าต้องการทราบว่าปัจจุบันตนเองอยู่ใน Directory ใด ให้ใช้คำสั่ง pwd
    ตัวอย่างคำสั่ง และการใช้งาน
    ls -alt :: เพื่อแสดงรายชื่อแฟ้ม และจัดเรียงตามเวลา (a=all, l=long listing, t=sort by modification time)
    ls -alt | more :: เพื่อแสดงรายชื่อแฟ้มทั้งหมด แต่หยุดทีละหน้า ถ้ามีจำนวนแฟ้มเกินที่จะแสดงได้ ใน 1 หน้า
    ls -al --sort=time | more :: แสดงรายชื่อแฟ้มเรียงตามเวลา แยกทีละหน้า แบบ long listing
    ls -R | more :: แสดงรายชื่อในทุก directory ในห้องปัจจุบัน (R=Recursive)
    ls -alSR | grep Trash | more :: แสดงข้อมูลแฟ้ม Trash จากทุก Sub directory
    ls -alS | more :: แสดงรายชื่อแบบจัดเรียงตามขนาดแบบ Descending ใช้ดูขนาด mail box ใน /var/mail ได้ดี
    ถ้าสังเกตนะครับ แฟ้มที่มี . หน้าชื่อแฟ้ม หมายถึง แฟ้มที่ซ่อนไว้ ถ้าใช้คำสั่ง ls หรือ ls -l จะไม่เห็นแฟ้มเหล่านี้
    ถ้ามีอักษร D ที่ Column แรก ในส่วนแสดงรายชื่อแฟ้ม ด้วยคำสั่ง ls -al จะหมายถึง directory
Android
in
Terminal Emulator
$ls
$ls -al
lrwxrwxrwx root root     2013-02-22 20:41 sdcard -> /mnt/sdcard
-rw-r--r-- root root 145 1970-01-01 07:00 default.prop
$su
#

1.2 คำสั่ง chmod
: ใช้เปลี่ยนสิทธิของแฟ้ม เจ้าของ(Owner), คนในกลุ่ม(Group), คนอื่น(Other) สามารถทำอะไรได้บ้าง
: change file access permissions
เมื่อใช้คำสั่ง ls ท่านจะเห็นตัวอักษร RWXRWXRWX หรือทำนองนี้หน้าชื่อแฟ้ม ซึ่งเป็นการกำหนด สิทธิของแต่ละแฟ้ม ว่า อ่านได้ เขียนได้ และประมวลผลได้ โดยแยกเป็นส่วนของ เจ้าของ กลุ่ม คนอื่น ซึ่งเป็นคำสั่งที่จำเป็นมากสำหรับ webmaster ในการดูแลระบบ และท่านที่ต้องการเขียน CGI จะต้องรู้คำสั่งนี้ เพราะ เมื่อส่งแฟ้ม CGI เข้าไปใน server และต้องการให้คนทั่วไปเข้ามาใช้บริการ โปรแกรมของตนที่เขียนขึ้นด้วย Perl จะไม่สามารถใช้ได้ ถ้าไม่กำหนดให้คนอื่น สามารถประมวลผลได้ (x) จึงจำเป็นต้องใช้คำสั่ง เช่น chmod 755 hello.pl หรือ chmod 775 fileforyou.pl หรือ chmod +x test.pl เป็นต้น
ในแต่ละกลุ่มจะมีการกำหนดสิทธิได้ 3 แบบ
ตัวอักษร R มาจาก Read หมายถึง อ่าน
ตัวอักษร W มาจาก Write หมายถึง เขียน
ตัวอักษร X มาจาก Execute หมายถึง ประมวลผล
ตัวอย่างเช่น
--- : ไม่มีสิทธิอะไรเลย (เลขที่ใช้คือ 0)
--X : ประมวลผลได้อย่างเดียว (เลขที่ใช้คือ 1)
R-- : อ่านได้อย่างเดียว (เลขที่ใช้คือ 4)
RW- : อ่าน และเขียนได้ (เลขที่ใช้คือ 6)
R-X : อ่าน และประมวลผลได้ (เลขที่ใช้คือ 5)
RWX : อ่าน เขียน และประมวลผลได้ (เลขที่ใช้คือ 7)
ความหมายของ RWXRWXRWX จะเห็นว่ามีอักษร 9 ตัว
3 ตัวแรกหมายถึง เจ้าของ
3 ตัวที่สองหมายถึง กลุ่ม
3 ตัวที่สามหมายถึง คนอื่น
ตัวอย่างเช่น
RWX------ : เจ้าของเท่านั้นที่มีสิทธิทุกอย่าง (เลขที่ใช้คือ 700)
RWXRWX--- : เจ้าของ และสมาชิกกลุ่มเดียวกันมีสิทธิทุกอย่าง (เลขที่ใช้คือ 770)
RWXR-XR-X : เจ้าของทำได้หมด ส่วนกลุ่มและคนอื่นอ่านและประมวลผลได้ (เลขที่ใช้คือ 755)
R--R--R-- : ทุกคนอ่านได้อย่างเดียว (เลขที่ใช้คือ 444)
    ตัวอย่างคำสั่ง และการใช้งาน
    chmod 777 index.php :: ทำให้แฟ้มนี้ อ่าน เขียน และประมวลผล โดยทั้ง 3 กลุ่ม
    chmod 755 * -Rf :: ทำให้ทุกแฟ้ม ทุกห้องเก็บข้อมูล ในห้องปัจจุบัน เปลี่ยนตามที่กำหนด
Android
in
Terminal Emulator
$chmod
#

1.3 คำสั่ง man
: เป็นคำสั่งที่สำคัญมาก เพราะจะช่วยให้อธิบายคำสั่งต่าง ๆ ให้ท่านได้
: format and display the on-line manual pages
ผมเชื่อว่าทุกคนที่ใช้ unix หรือ linux ต้องเคยใช้คำสั่งนี้มาก่อน เพราะจะเป็นคำสั่งที่ช่วยอธิบายหน้าที่ของคำสั่ง พร้อมกับแสดง parameter ที่สามารถใช้ได้ทั้งหมดของคำสั่งนั้น และยังมีตัวอย่างการใช้ และคำสั่งที่เกี่ยวข้องอีก ทำให้ประหยัดเวลาในการค้นเอกสารได้อย่างมาก บางท่านอาจศึกษา linux ด้วยการอ่านจาก man อย่างเดียวเลยก็มีนะครับ โดยไม่ต้องไปหาซื้อหนังสือที่ไหนมาอ่านก็ทำได้
    ตัวอย่างคำสั่ง และการใช้งาน
    man man :: เพื่ออธิบายคำสั่ง man เอง ว่าตัวคำสั่งนี้ใช้อย่างไร
    man ls :: เพื่ออธิบายคำสั่ง ls ว่าใช้อย่างไร
    man useradd :: เพื่ออธิบายคำสั่ง useradd ว่าใช้อย่างไร
Android
in
Terminal Emulator
$man not found
#man not found

1.4 คำสั่ง mkdir, rmdir, cd
: งานต่าง ๆ เกี่ยวกับ directory
: make, remove empty, change working directory
ผู้ใช้คอมพิวเตอร์ที่ใช้ dos มาก่อนต้องคุ้นเคยกับห้องเก็บข้อมูลแน่นอน สำหรับคำสั่งเกี่ยวกับห้องเก็บข้อมูล ในที่นี้มี 3 คำสั่ง
mkdir หมายถึง สร้างห้องเก็บข้อมูล (make directories)
rm หมายถึง ลบแฟ้ม หรือห้องเก็บข้อมูล (remove files or directories) และคำสั่งนี้ยังใช้ลบแฟ้มตามปกติได้อีกด้วย
cd หมายถึงเปลี่ยนห้องเก็บข้อมูล (change working directory)
    ตัวอย่างคำสั่ง และการใช้งาน
    mkdir hello :: สร้าง directory ชื่อ hello ในห้องปัจจุบัน
    rmdir hello.htm :: จะลบแฟ้มชื่อ hello.htm
    cd / :: ย้าย directory ไปยัง root หรือห้องนอกสุด
    cd .. :: ย้าย directory ออกไปข้างบน 1 ระดับ
    cd ~/x :: เข้าไปยังห้อง x ของ home directory เช่น /home/thaiall/x ถ้า home directory คือ /home/thaiall
Android
in
Terminal Emulator
$cd
$mkdir
$rmdir
#

1.5 โปรแกรม pico
: เป็น editor ที่ใช้สำหรับแก้ไขแฟ้มแบบ text คล้าย vi แต่มีประสิทธิภาพกว่ามาก
เพียงแต่พิมพ์คำว่า pico แล้ว enter ก็ใช้งานได้เลย การจะจัดเก็บ หรืองานต่าง ๆ ที่มีบริการไว้มากมาย ท่านสามารถอ่านได้จากเมนูด้านล่าง ซึ่งเครือ่งหมาย ^ หมายถึงการกดปุ่ม Ctrl ประกอบอักษรต่าง ๆ นั่นเอง ผมคิดว่าท่านน่าจะพออ่านรู้เรื่อง หรือจะพิมพ์ว่า pico xx ก็จะเป็นการสร้างแฟ้มชื่อ xx ให้ทันที แต่หากมีแล้ว ก็จะเปิดแฟ้ม xx มาให้แก้ไขในโปรแกรม xx เมื่อท่านต้องการเลิกก็ทำได้โดยกดปุ่ม Ctrl-X เป็นอันเรียบร้อย หากท่านใดเคยใช้ vi เมื่อลองใช้โปรแกรมนี้จะติดใจอย่างแน่นอน เพราะใช้งานได้ง่ายกว่า หลายเท่านัก
หลายครั้ง ที่พิมพ์คำว่า pico แล้วไม่มีในเครื่อง ก็เพราะไม่ได้ลงโปรแกรม pine เมื่อต้องการใช้ pico ก็ต้องติดตั้งโปรแกรม pine เข้าไปในเครื่อง จากแผ่น CD ด้วยคำสั่ง rpm -i pine*
Android
in
Terminal Emulator
$pico not found
#pico not found

1.6 โปรแกรม emacs
: เป็น editor ที่ใช้สำหรับแก้ไขแฟ้มแบบ text คล้าย vi แต่มีประสิทธิภาพกว่ามาก
ทำงานได้คล้าย ๆ กับ pico แต่หลายคนบอกว่า ตัวนี้ทำงานได้ดีกว่า แต่ผมว่า pico ใช้งานได้ง่ายกว่ากันเยอะเลย เพราะเห็นเมนูด้านล่าง แต่ของ emacs จะใช้ ctrl-h ดูส่วนช่วยเหลือ และกด ctrl-x + ctrl-c จึงจะออกจากโปรแกรม อาจเป็นเพราะผมใช้ไม่ชำนาญมังครับ ในเมื่อผมใช้ pico เป็น editor ผมคงไม่จำเป็นต้องศึกษา emacs เพิ่มเติมแล้ว ยกเว้นว่าสักวันอาจมีเหตุจำเป็นที่ความสามารถของ pico ให้ไม่ได้ แต่ emacs ให้ได้ก็เป็นได้
    Welcome to GNU Emacs, one component of a Linux-based GNU system.
    Get help           C-h  (Hold down CTRL and press h)
    Undo changes       C-x u       Exit Emacs               C-x C-c
    Get a tutorial     C-h t       Use Info to read docs    C-h i
    Ordering manuals   C-h RET
    Activate menubar   F10  or  ESC `  or   M-`
    (`C-' means use the CTRL key.  `M-' means use the Meta (or Alt) key.
    If you have no Meta key, you may instead type ESC followed by the character.)
    
Android
in
Terminal Emulator
$emacs not found
#emacs not found

1.7 โปรแกรม vi
: เป็น editor ที่ใช้สำหรับแก้ไขแฟ้มแบบ text
: a programmers text editor
Text editor ที่ใช้งานได้ยาก แต่มีใน linux ทุกรุ่น ในบางเครื่องไม่มี pico เพราะไม่ได้ติดตั้ง mail หรือ pine จึงจำเป็นต้องใช้โปรแกรม vi สำหรับแก้ไขข้อมูลในแฟ้มต่าง ๆ ของ linux เช่นการใช้คำสั่ง man ก็คือการใช้ความสามารถของ vi ในการนำข้อมูลมาแสดงผลนั่นเอง
    ตัวอย่างคำสั่ง และการใช้งาน
    esc     กลับไปยังโหมดคำสั่ง
    enter   ย้ายไปยังต้นบรรทัดของบรรทัดถัดไป
    i       ใส่ข้อความก่อนเคอร์เซอร์
    a       ใส่ข้อความหลังเคอร์เซอร์
    A       ใส่ข้อความที่ท้ายบรรทัดปัจจุบัน
    dd      ลบบรรทัดปัจจุบันทั้งบรรทัด
    x       ลบอักษร 1 ตัวอักษร
    cw      เปลี่ยนข้อความ
    :w      บันทึกแฟ้ม
    :q!     ออกโดยไม่ เปลี่ยนแปลงใด ๆ
    :wq     บันทึกแฟ้ม และออกจากโปรแกรม vi
    
Android
in
Terminal Emulator
$vi not found
#vi

1.8 คำสั่ง id, finger, who, w
: ทุกคำสั่งข้างต้นใช้สำหรับตรวจสอบผู้ใช้ แต่จะให้รายละเอียดต่างกันไป
: print real and effective UIDs and GIDs
    ตัวอย่างคำสั่ง และการใช้งาน
    id uname :: ใช้ตรวจดูว่ามี account ในระบบหรือไม่ (ผลแสดงรหัสผลู้ใช้ และชื่อกลุ่ม)
    finger uname :: ใช้ตรวจดูว่ามี account uname นี้ในระบบหรือไม่ ให้ผลละเอียด ทั้ง last login หรือ email ฉบับล่าสุด
    finger :: ใช้แสดงรายชื่อทุกคนในระบบที่กำลัง login อยู่
    finger @www.isinthai.com :: ใช้แสดงรายชื่อทุกคนในระบบที่กำลัง login อยู่ ตรวจ server นอกระบบได้ ถ้าเขาไม่ปิด
    who |grep thai :: ใช้แสดงรายชื่อทุกคนในระบบ แต่ใช้นอกระบบตนเองไม่ได้ และเลือกเฉพาะบรรทัดที่มีอักษร thai
    w :: ใช้แสดงรายชื่อทุกคนในระบบ แต่ใช้นอกระบบตนเองไม่ได้
Android
in
Terminal Emulator
$id
$who is blank
$w not found
$finger not found
#id
#who is blank
#w not found
#finger not found

1.9 คำสั่ง cat
: แสดงข้อมูลในแฟ้ม คล้ายคำสั่ง type ในระบบ DOS
: concatenate files and print on the standard output
    ตัวอย่างคำสั่ง และการใช้งาน
    cat /etc/passwd :: แสดงข้อมูลในแฟ้ม /etc/passwd
    cat /etc/passwd | more :: แสดงข้อมูลในแฟ้ม /etc/passwd ทีละหน้า
    ตัวอย่างข้อมูลในแฟ้ม passwd
    suwit:x:500:500:Suwit:/home/suwit:/bin/bash
    prasert:x:501:501::/home/prasert:/bin/bash
    bcom101:x:502:502::/home/bcom302:/bin/bash
Android
in
Terminal Emulator
$cat /default.prop
#

1.10 คำสั่ง ifconfig
: แสดงข้อมูลเกี่ยวกับ Network interface และแสดง ip ต่าง ๆ ที่มีการเพิ่มเข้าไปใน server ได้
: configure a network interface
    ดูผลการทำงานของคำสั่ง ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:20:18:C0:06:C4
              inet addr:202.29.78.12  Bcast:202.29.78.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:673054 errors:0 dropped:0 overruns:0 frame:0
              TX packets:666268 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:100
              RX bytes:74892865 (71.4 Mb)  TX bytes:680121131 (648.6 Mb)
              Interrupt:9 Base address:0xcf00
    eth0:1    Link encap:Ethernet  HWaddr 00:20:18:C0:06:C4
              inet addr:202.29.78.1  Bcast:202.29.78.255  Mask:255.255.255.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              Interrupt:9 Base address:0xcf00

    เพิ่ม ip ใหม่อีก 1 ip เช่น #/sbin/ifconfig eth0:1 202.29.78.1
    สามารถดูวิธีเพิ่มหลาย IP ในคอมพิวเตอร์เครื่องเดียว ได้จากหัวข้อ 9.10 ด้วยการแก้ไขแฟ้ม /etc/rc.d/rc.local
Android
in
Terminal Emulator
$netcfg
$ifconfig wlan0
#

1.11 คำสั่ง netstat
: แสดงสถานะของเครือข่ายว่ามีโปรแกรมใดเปิดให้บริการ
: Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships
    ดูผลการทำงานของคำสั่ง netstat -a
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State
    tcp        0      0 *:mysql                 *:*                     LISTEN
    tcp        0      0 *:http                  *:*                     LISTEN
    tcp        0      0 *:ftp                   *:*                     LISTEN
    tcp        0      0 *:ssh                   *:*                     LISTEN
    tcp        0      0 *:smtp                  *:*                     LISTEN
    tcp        0      0 *:https                 *:*                     LISTEN
    tcp        0      0 www.isinthai.com:ssh    202.29.78.200:1225      ESTABLISHED
    Active UNIX domain sockets (servers and established)
    Proto RefCnt Flags       Type       State         I-Node Path
    unix  2      [ ACC ]     STREAM     LISTENING     855    /var/lib/mysql/mysql.sock
    unix  2      [ ACC ]     STREAM     LISTENING     119    /dev/log
    unix  2      [ ]         STREAM     CONNECTED     3007
    unix  2      [ ]         STREAM     CONNECTED     859
    
Android
in
Terminal Emulator
$netstat
#

1.12 คำสั่ง service
: ดูสถานะการเปิดปิดของบริการในเครื่อง (Internet network services list)
: ใช้เปิดปิดบริการที่ต้องการ
    ดูผลการทำงานของคำสั่ง service --status-all
    httpd (pid 2160 2159 2158 2155 2114 583 579 578 577 576 575 573) is running...
    mysqld (pid 446 429 427 414) is running...
    sendmail (pid 1700 1690) is running...
    sshd (pid 2970 358) is running...
    xinetd (pid 3923 369) is running...
    
    #service sshd start
    
Android
in
Terminal Emulator
$service list
#

1.13 คำสั่ง xinetd
: ดูบริการภายใน xinetd ว่าอะไรเปิดอยู่บ้าง ทำให้เข้าไปเปิดที่ห้อง /etc/xinetd.d แล้วเลือกเปิดบริการเฉพาะที่ต้องการ เช่นแก้แฟ้ม talk เพื่อให้เปิดบริการ talk ใน server เป็นต้น แต่ใน Fedora ที่ผมติดตั้งไม่มีคำสั่งนี้ครับ
    ดูผลบางส่วนจากการทำงานของคำสั่ง xinetd -d
    Service configuration: ftp
            id = ftp
            flags = IPv4
            socket_type = stream
            Protocol (name,number) = (tcp,6)
            Nice = 10
            Groups = no
            Bind = All addresses.
            Server = /usr/sbin/vsftpd
            Server argv = vsftpd
            Only from: All sites
            No access: No blocked sites
            Logging to syslog. Facility = authpriv, level = info
            Log_on_success flags = HOST PID
            Log_on_failure flags = HOST
    
Android
in
Terminal Emulator
$xinetd not found
#xinetd not found

1.14 คำสั่ง whereis
: ค้นหาแฟ้มที่ต้องการว่าอยู่ที่ห้องใด แต่ค้นได้เฉพาะที่กำหนดไว้ใน PATH เท่านั้น หากต้องการค้นทั้งเครื่องต้องใช้คำสั่ง find
: locate the binary, source, and manual page files for a command
    ตัวอย่างคำสั่ง และการใช้งาน
    whereis usermod :: แสดงห้องที่เก็บคำสั่ง usermod ทำให้สามารถสั่ง run จากห้องที่เก็บคำสั่งโดยตรงได้
    whereis ifconfig :: แสดงห้องที่เก็บคำสั่ง ifconfig ทำให้ใช้คำสั่งเช่น /sbin/ifconfig ได้โดยตรง
Android
in
Terminal Emulator
$whereis not found
#whereis not found

1.15 คำสั่ง cp, rm, mv
: จัดการแฟ้มเช่น คัดลอก ลบ และย้าย
    ตัวอย่างคำสั่ง และการใช้งาน
    cp x y :: เดิมมีแฟ้มชื่อ x ต้องการแฟ้ม y ที่เหมือน x ขึ้นมาใหม่ สามารถใช้คำสั่ง cp
    rm y :: ลบแฟ้ม y ออกจากเครื่อง ซึ่งอยู่ใน directory ปัจจุบัน
    rm -r [directoryname] :: จะลบ directory ในเครื่อง sun และแฟ้มทั้งหมดใน directory นั้น และการลบแฟ้ม จะมีการถาม confirm ทุกแฟ้มเสมอ
    rm -rf [directoryname] :: จะลบ directory ใช้ใน Redhat และแฟ้มทั้งหมดใน directory นั้น และการลบแฟ้ม จะมีการถาม confirm ทุกแฟ้มเสมอ
    rm -f * :: ลบแฟ้มทั้งหมดโดยไม่ถาม yes
    mv x /root :: ย้ายแฟ้ม x จากห้องปัจจุบันไปไว้ในห้อง /root
Android
in
Terminal Emulator
$cp not found
$mv
$rm
#cp
#mv
#rm

1.16 คำสั่ง ping
: ตรวจสอบ ip ของเครื่องเป้าหมาย และการเชื่อมต่อ internet
: send ICMP ECHO_REQUEST to network hosts
ICMP = Internet Control Message Protocol
ICMP คือ โพรโทคอลที่ทำหน้าที่รายงานความผิดพลาดใน IP packet
ตัวอย่างคำสั่ง และการใช้งาน
ping www.thaiall.com :: ตรวจสอบการมีอยู่ของ www.thaiall.com แล้วแสดงเลข IP
ping 161.20.192.248 -n 5 :: แสดงผลการทดสอบจำนวน 5 ครั้ง
ping 161.20.192.248 :: ถ้าตอบมา Request timed out อาจไม่พบ หรือไม่ตอบ

+ ping service on network-tools.com
Android
in
Terminal Emulator
$ping www.facebook.com
#ping www.facebook.com
Blog : เก็บตกเรื่อง ping
1. คำสั่ง ping ใช้ตรวจการตอบสนองของเครื่องบริการ
ค่า buffer หรือ package size
กำหนด default ไว้ 32 bytes
เวลาตอบกลับก็จะทำให้ทราบว่า เครื่องบริการตอบได้เร็วหรือไม่
2. ถ้าเปลี่ยน buffer เป็น 900 bytes
ก็จะเห็นว่าเครื่องบริการ ใช้เวลาคิดนานขึ้น
ping www.chula.ac.th -l 900 -t
แล้วกด ctrl-c จะเห็นความต่างในส่วนค่าเฉลี่ยครับ
3. OS มักกำหนด limit การถูก ping
โดยทั่วไปจำกัด 65500 แต่กำหนด limit ได้
เครื่อง winserver ตัวหนึ่งจำกัดไม่เกิน 1472
แต่ sanook.com จำกัดไม่เกิน 1464
แต่ kapook.com จำกัดไม่เกิน 14792
4. เหตุผลที่จำกัด (Limit)
เพราะกำหนดเพดานรับการตอบสนองผ่านคำสั่งนี้
ซึ่ง แกกเกอร์ มักใช้ในการตรวจสอบ เครื่องเป้าหมาย
บางเครื่องก็ปฏิเสธไปเลยครับ เช่น manager.co.th

1.17 คำสั่ง env
: แสดงค่า environment ปัจจุบัน
: run a program in a modified environment
    ตัวอย่างคำสั่ง และการใช้งาน
    env
      HISTSIZE=1000 SSH_CLIENT=202.29.78.100 1091 22 OLDPWD=/usr/sbin QTDIR=/usr/lib/qt3-gcc3.2 SSH_TTY=/dev/pts/0 USER=burin LS_COLORS=no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;.... : PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin MAIL=/var/spool/mail/burin PWD=/etc INPUTRC=/etc/inputrc LANG=en_US.UTF-8 HOME=/root SHLVL=2 LOGNAME=burin LESSOPEN=|/usr/bin/lesspipe.sh %s G_BROKEN_FILENAMES=1 _=/bin/env
Android
in
Terminal Emulator
$env not found
#env

1.18 คำสั่ง lynx
: Text browser ที่ใช้งานง่าย ใช้ดู source หรือ download ได้ (ในเครื่องผมไม่ได้ลงไว้)
    ตัวอย่างคำสั่ง และการใช้งาน
    lynx www.thaiall.com :: เพื่อเปิดเว็บ www.thaiall.com แบบ text mode
    lynx http://www.nation.ac.th :: เพื่อเปิดเว็บ www.nation.ac.th แบบ text mode
    lynx -dump http://www.nation.ac.th :: เพื่อแสดงผลลัพธ์แบบไม่ interactive คือการ view ผลแล้วหยุดทันที
    lynx -dump -width=500 http://piology.org/.procmailrc.html|grep '^|'|cut -c3- :: ตัวอย่างการนำไปใช้
Android
in
Terminal Emulator
$lynx not found
#lynx not found

1.19 คำสั่ง nslookup
: แสดงข้อมูลเกี่ยวกับ name server จาก ip หรือ domain name
: query Internet name servers interactively
    คำสั่งนี้ ถูกประกาศว่าต่อไปอาจไม่พบใน Redhat รุ่นใหม่ ถ้าต้องการใช้คำสั่งแบบนี้สามารถใช้ dig หรือ host แทนได้ เช่น host yn1.yonok.ac.th หรือ dig yn1.yonok.ac.th เมื่อเข้าไปใน nslookup สามารถออกมาได้ด้วยการพิมพ์คำสั่ง exit หลังเครื่องหมาย >
    ตัวอย่างคำสั่ง และการใช้งาน nslookup 202.28.18.65
      Non-authoritative answer: 65.18.28.202.in-addr.arpa name = mars.uni.net.th. Authoritative answers can be found from: 18.28.202.in-addr.arpa nameserver = mars.uni.net.th. 18.28.202.in-addr.arpa nameserver = ns.netserv.chula.ac.th. mars.uni.net.th internet address = 202.28.18.65
    nslookup www.thaiall.com
      Name: www.thaiall.com Address: 66.150.1.141
Android
in
Terminal Emulator
$nsookup not found
#nslookup www.nation.ac.th
Name: www.nation.ac.th
Adress 1: 127.154.225.7


1.20 คำสั่ง tail
: แสดงส่วนท้ายของแฟ้มที่มีขนาดใหญ่ ตรงข้ามกับ cat ที่ดูตั้งแต่เริ่มแฟ้ม
: output the last part of files
    ตัวอย่างคำสั่ง และการใช้งาน
    tail index.html :: ดูส่วนท้ายของแฟ้ม index.html ใน Current directory
    tail --lines=5 /var/log/messages :: ดูส่วนท้ายของแฟ้ม /var/log/messages แต่ต้องเป็น root จึงจะดูได้
    tail /var/log/html/access.log :: ดูส่วนท้ายเพียง 10 บรรทัด ซึ่งเป็นค่า default ที่ไม่ได้กำหนดจำนวนบรรทัด
    tail --lines=100 /var/log/html/access_log > access_bak :: เป็นการ backup ในขั้นแรก ก่อนใช้ mv ย้ายไปทับแฟ้มเดิม
Android
in
Terminal Emulator
$tail not found
#ps | tail

1.21 คำสั่ง telnet
: ใช้ติดต่อเข้า server ต่าง ๆ ตาม port ที่ต้องการ แต่ปัจจุบัน server ต่าง ๆ ปิดบริการ telnet แต่เปิด SSH แทน
: user interface to the TELNET protocol
    ตัวอย่างคำสั่ง และการใช้งาน
    telnet 202.202.202.202 :: ขอติดต่อเข้าเครื่อง 202.202.202.202 การไม่กำหนด port คือเข้า port 23
    telnet www.school.net.th 21 :: ขอติดต่อผ่าน port 21 ซึ่งเป็น FTP port
    telnet mail.loxinfo.co.th 25 :: ตรวจ smtp ว่าตอบสนองกลับมา หรือไม่
    telnet class.yonok.ac.th 110 :: ทดสอบ pop service ของ windows server 2003
    Microsoft Windows POP3 Service Version 1.0 ready.
    USER aa@class.yonok.ac.th
    +OK
    PASS xxxxxxx
    +OK User successfully logged on
    telnet 202.29.78.13 80 :: ให้พิมพ์คำสั่ง GET แม้มองไม่เห็นหลังกดปุ่ม enter(ใช้ทดสอบการตอบสนองของ server)
    GET /index.html
    <frameset>
    <frame src=index.php>
    </frameset>
    Connection to host lost.
    C:\>
100 : Continue
101 : Switching Protocols
200 : OK
201 : Created
202 : Accepted
203 : Non-Authoritative Information
204 : No Content
205 : Reset Content
206 : Partial Content
300 : Multiple Choices
301 : Moved Permanently
302 : Moved Temporarily
303 : See Other
304 : Not Modified
305 : Use Proxy
400 : Bad Request
401 : Unauthorized
402 : Payment Required
403 : Forbidden
404 : Not Found
405 : Method Not Allowed
406 : Not Acceptable
407 : Proxy Authentication Required
408 : Request Time-out
409 : Conflict
410 : Gone
411 : Length Required
412 : Precondition Failed
413 : Request Entity Too Large
414 : Request-URI Too Large
415 : Unsupported Media Type
500 : Internal Server Error
501 : Not Implemented
502 : Bad Gateway
503 : Service Unavailable
504 : Gateway Time-out
505 : HTTP Version not supported
Android
in
Terminal Emulator
$telnet not found
#telnet www.kapook.com 80
GET /

2.1 คำสั่ง df
: แสดงเนื้อที่ใช้งานทั้งหมดของ Harddisk ว่าเหลือเท่าใด
: report filesystem disk space usage
ช่วยให้ผู้ดูแลระบบรู้ว่าตอนนี้เนื้อที่ใน Harddisk เหลืออยู่เท่าใด และอาจใช้ตรวจสอบได้ว่า มีใครแอบมา upload แฟ้มขนาดใหญ่ไว้หรือไม่ จะได้ตรวจสอบในรายละเอียดของแต่ละ user ต่อไป (ผมเองก็ใช้บ่อย เพราะถ้า server เล็ก ๆ จะเต็มบ่อยครับ ต้องคอย clear เสมอ)
    ตัวอย่างคำสั่ง และการใช้งาน
    df :: เพื่อแสดงรายงานสรุปการใช้ในแต่ละส่วน
      Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda5 505605 82764 396737 18% / /dev/hda1 101089 9180 86690 10% /boot /dev/hda3 1423096 41956 1308848 4% /home none 30740 0 30740 0% /dev/shm /dev/hda2 3889924 1551872 2140456 43% /usr /dev/hda6 1027768 952876 22684 98% /var
Android
in
Terminal Emulator
$df
#df

2.2 คำสั่ง du
: แสดงเนื้อที่ใช้งาน ของแต่ละ directory โดยละเอียด
: estimate file space usage
ช่วยให้ผู้ดูแลระบบรู้ว่า directory ใด ใช้เนื้อที่ใด หรือใช้ดูรวม ๆ ว่า ผู้ใช้แต่ละคนใช้เนื้อที่เก็บข้อมูลกันเท่าใด เพราะผู้ใช้ปกติจะใช้กันไม่เยอะ แต่ถ้าตรวจสอบแล้วเยอะผิดปกติ ก็จะเข้าไปดูว่า เยอะเพราะอะไร จะได้แก้ไขได้
    ตัวอย่างคำสั่ง และการใช้งาน
    du :: เพื่อแสดงรายชื่อ directory และเนื้อที่ที่ใช้ไป
    du -all :: เพื่อแสดงโดยละเอียดว่าแต่ละแฟ้มมีขนาดเท่าใด ใน directory ปัจจุบัน
    du | sort -g :: แสดงการใช้พื้นที่ของแต่ละ directory พร้อม sort จากน้อยไปมาก มีหน่วยเป็น Kb
    du -b :: แสดงหน่วยเป็น byte ของแต่ละ directory
Android
in
Terminal Emulator
$du not found
#du /

2.3 คำสั่ง ps
: แสดง Process หรือโปรแกรมที่ประมวลผลอยู่ในระบบขณะนั้น
: report a snapshot of the current processes.
ช่วยให้ผู้ดูแลระบบ ติดตามได้ว่ามีโปรแกรมอะไรที่ไม่ถูกต้อง run อยู่ หรือโปรแกรมอะไร ที่ผู้ศึกษาลองประมวลผลแล้วค้างอยู่ จะได้ทำการแก้ไข มิเช่นนั้นระบบก็จะทำงานค้าง เพราะโปรแกรมที่ไม่ควรอยู่ในระบบ กำลังประมวลผลโดยไม่จำเป็น โดยเฉพาะพวก bot จะทำให้ server ล่มง่ายมาก
    ตัวอย่างคำสั่ง และการใช้งาน
    ps -ef :: แสดงข้อมูลของ process โดยละเอียด
    ps -ax :: แสดงข้อมูลของ process พร้อมชื่อโปรแกรมได้ละเอียด
    ps -aux :: แสดงข้อมูลของ process พร้อมชื่อโปรแกรม และชื่อผู้สั่งได้ละเอียดมาก
    ps -aux | grep sendmail :: sendmail เชื่อมต่อไปที่ใดขณะนี้
Android
in
Terminal Emulator
$ps
#ps

2.4 คำสั่ง kill
: เมื่อทราบว่า process ใดที่มีปัญหา สามารถลบ process ตามเลข process ออกจากระบบได้
: terminate a process
ช่วยยกเลิก process ที่ไม่ถูกต้องออกจากระบบ ถ้าขณะนั้นผู้ใช้คนหนึ่งกำลังใช้งานอยู่ หาก process หลักของเขาถูก kill จะทำให้ผู้ใช้ท่านนั้น หลุดออกจากระบบทันที (สำหรับคำสั่งนี้จะถูกใช้โดย super user เท่านั้น ผู้ใช้ธรรมดาไม่มีสิทธิ)
    ตัวอย่างคำสั่ง และการใช้งาน
    kill -9 เลขประจำprocess :: เลขประจำ process ท่านจะได้จากการใช้ ps -ef อยู่แล้ว
    kill -9 1255 :: ลบ process ที่ 1255 ออกจากระบบไป
Android
in
Terminal Emulator
$kill
#kill

2.5 คำสั่ง find
: ค้นหาแฟ้มที่ต้องการว่าอยู่ที่ใดในเครื่องเรา
    ตัวอย่างคำสั่ง และการใช้งาน
    find / -name hello.pl :: ใช้ค้นหาแฟ้ม hello.pl ในทุก directory
    find / -name hello* :: ใช้ค้นหาแฟ้มที่ขึ้นต้นด้วยคำว่า hello
    find /bin -size 626188c :: ใช้ค้นหาแฟ้มที่มีขนาด 626188 ถ้าเป็น RH8 จะพบแฟ้ม bash
Android
in
Terminal Emulator
$find not found
#find

2.6 คำสั่ง gzip
: ใช้สำหรับแตกแฟ้มที่ถูกบีบอัด ซึ่งมีสกุล .gz .z แต่อาจใช้ tar แทนได้สำหรับ .tar.gz
    ตัวอย่างคำสั่ง และการใช้งาน
    gzip -d x.tar.gz :: ใช้แตกแฟ้มที่นามสกุล gz
    man gzip :: ใช้ดูว่า gzip ใช้งานอะไรได้บ้าง
    gzip -d radius-1.16.1.tar.Z :: ได้แฟ้มนี้จาก ftp.livingston.com/pub/le/radius/ เป็นระบบรับโทรศัพท์เข้าเครือข่าย
    gzip -dc x.tar.Z|tar xvf - :: ประหยัดขั้นตอนในการใช้คำสั่ง 2 ครั้ง เพราะคำสั่งชุดนี้จะใช้ทั้ง gzip และ tar กับ x.tar.z ได้ตามลำดับ
Android
in
Terminal Emulator
$gzip
#gzip

2.7 คำสั่ง tar
: ใช้สำหรับแตกแฟ้มที่ถูกบีบอัด แล้วนามสกุล tar
    ตัวอย่างคำสั่ง และการใช้งาน
    tar xvf x.tar :: ใช้สำหรับแตกแฟ้มที่นามสกุล tar ปกติแล้วจะมีการสร้าง directory ของแฟ้มพร้อมโปรแกรมอีกเพียบ
    tar xvfz squid-2.3-200103110000-src.tar.gz :: จะคลาย gz พร้อมกับใช้คำสั่ง tar ได้พร้อม ๆ กัน ไม่ต้องใช้ gzip และมาใช้ tar
    man tar :: ใช้ดูว่า tar ใช้งานอะไรได้บ้าง
    tar zcvf abc.tar.gz /etc :: ใช้ copy /etc เก็บเป็นแฟ้ม abc.tar.gz แบบบีบอัด
    tar zxvf abc.tar.gz :: ใช้คลายแฟ้ม abc.tar.gz ซึ่งจะได้ directory /etc ออกมาทั้งหมด
Android
in
Terminal Emulator
$tar not found
#tar

2.8 คำสั่ง last
: ใช้แสดงรายชื่อผู้ login เข้ามาล่าสุด
    ตัวอย่างคำสั่ง และการใช้งาน
    last |grep reboot :: ใช้ดูระบบถูก reboot เมื่อใดบ้าง
    last |more :: ใช้รายชื่อผู้ login เข้ามาในระบบล่าสุดทีละหน้า
Android
in
Terminal Emulator
$last not found
#last not found

2.9 คำสั่ง grep
: ใช้สำหรับเลือกข้อมูลเฉพาะบรรทัดที่ต้องการ
    ตัวอย่างคำสั่ง และการใช้งาน
    more /etc/passwd|grep thaiall :: ใช้แสดงข้อมูลในแฟ้ม /etc/passwd แต่เลือกเฉพาะบรรทัดที่มีคำว่า thaiall
    rpm -qa|grep ftp :: ใช้ดูว่าระบบลงโปรแกรม ftp หรือยัง เวอร์ชั่นใดบ้าง
    last |grep reboot :: ใช้ดูระบบถูก reboot เมื่อใดบ้าง
Android
in
Terminal Emulator
$grep not found
#grep

2.10 คำสั่ง date
: ใช้ดูวันที่ หรือเปลี่ยนวันที่ และเวลาได้ date [OPTION] [MMDDhhmm[[CC]YY][.ss]]
    ตัวอย่างคำสั่ง และการใช้งาน
    date +%x :: ดูวันที่ปัจจุบัน เช่นการแสดงเลข 04/27/01 ออกมา
    date +%d :: ดูวันที่ปัจจุบัน เช่นการแสดงเลข 27 ออกมา
    date 04271340 :: กำหนดวันที่ใหม่ให้เป็น วันที่ 27 เดือน 4 เวลา 13.40 น. (mmddhhmmccyy)
    hwclock --systohc :: เมื่อเปลี่ยนเวลาด้วย date หาก restart เครื่องเวลาจะผิดเหมือนเดิมต้องใช้คำสั่งนี้ เพื่อเขียนเวลาลงไปใน hardware clock จึงจะเปลี่ยนเวลา hardware ได้
Android
in
Terminal Emulator
$date
Sat Feb 23 13:23:20 ICT 2013
#date

2.11 คำสั่ง top
: ใช้แสดงสถานะการใช้ทรัพยากร ภายในเครื่อง
    ตัวอย่างคำสั่ง และการใช้งาน
    top :: แสดงการใช้ทรัพยากรของเครื่อง จากแต่ละ process ทดสอบคำสั่งนี้ใน Redhat 8.0
    ตัวอย่างผลของการใช้คำสั่ง
    CPU states:  0.5% user,  1.3% system,  0.0% nice, 98.0% idle
    Mem:    31328K av,   28872K used,    2456K free,       0K shrd,    1032K buff
    Swap: 1718912K av,    2608K used, 1716304K free                   16528K cached
    
      PID USER     PRI  NI  SIZE  RSS SHARE STAT  LIB %CPU %MEM   TIME COMMAND
    18306 root      14   0   852  852   672 R       0  1.5  2.7   0:00 top
    18229 root       1   0  1684 1536  1240 S       0  0.3  4.9   0:00 sshd
        1 root       0   0   160  116    92 S       0  0.0  0.3   0:08 init
        2 root       0   0     0    0     0 SW      0  0.0  0.0   0:01 kflushd
    
Android
in
Terminal Emulator
$top
#top

2.12 คำสั่ง ntsysv หรือ setup
: ใช้เปิด-ปิด บริการของเครื่องที่สะดวกรวดเร็ว
    ตัวอย่างคำสั่ง และการใช้งาน
    setup :: แสดงการตัวเลือกให้กำหนดบริการต่าง ๆ ปกติจะเลือก system services
    บริการที่เปิดใน server ของผมประกอบด้วย httpd, imap, ipop3, iptables, named, network, sendmail, servers, services, vsftpd, xinetd เพื่อให้บริการ web, mail, ftp และ dns
    ntsysv :: ใช้เปิด-ปิดบริการ ให้ผลเหมือน setup, services (แต่คำสั่งนี้ถูกยกเลิกใน RH รุ่นใหม่ ลองใน Fedora พบว่าใช้ได้ครับ)
Android
in
Terminal Emulator
$ntsysv not found
$setup not found
#ntsysv not found
#setup not found

2.13 คำสั่ง route
: ใช้เส้นทางการเชื่อมเครือข่าย
    ตัวอย่างคำสั่ง และการใช้งาน
    # route
    
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    202.29.78.0     *               255.255.255.0   U     0      0        0 eth0
    127.0.0.0       *               255.0.0.0       U     0      0        0 lo
    default         202.29.78.254   0.0.0.0         UG    0      0        0 eth0
    
Android
in
Terminal Emulator
$cat /proc/net/route
$route
Invalid argument
#route
Invalid argument

2.14 คำสั่ง shutdown, reboot
: ใช้ปิดเครื่อง หรือ ปิดและเปิดเครื่องใหม่อย่างถูกวิธี
    ตัวอย่างคำสั่ง และการใช้งาน
    shutdown -h now หรือ halt :: สั่งปิดเครื่องทันที (แต่ใช้เวลาประมาณ 1 นาทีเพื่อปิดบริการต่าง ๆ)
    reboot หรือ shutdown -r now :: ปิด และเปิดเครื่องใหม่ หากติดตั้งโปรแกรมบางตัว และ clear ค่าต่าง ๆ หากไม่แน่ใจ
Android
in
Terminal Emulator
$shutdown not found
$reboot
operation not permitted
#shutdown not found
#reboot

2.15 คำสั่ง runlevel
: คู่กับแฟ้ม /etc/inittab เพื่อบอกว่าปัจจุบันอยู่ใน level ใด
: ถ้าต้องการเปลี่ยน level ต้องใช้คำสั่ง chkconfig ให้ดูเพิ่มเติมจาก 2.18
    ตัวอย่างคำสั่ง และการใช้งาน
    #/sbin/runlevel :: แสดง level ปัจจุบัน
    #cat /etc/inittab :: แสดงตาราง กำหนดการสั่งเครื่อง ว่าใช้ level ใด
Android
in
Terminal Emulator
$runlevel not found
#runlevel not found

2.16 คำสั่ง fsck
: ซ่อมแซมระบบแฟ้มใน linux
    ตัวอย่างคำสั่ง และการใช้งาน
    #fsck / :: ใช้ซ่อม harddisk ในห้อง / เมื่อ harddisk เกิดปัญหา
    #fsck /dev/hdc :: ใช้ซ่อม harddisk ที่ชื่อ /dev/hdc ถ้าต่อ harddisk ไว้หลายตัว
Android
in
Terminal Emulator
$fsck not found
#fsck

2.17 คำสั่ง chown, chgrp
: เปลี่ยนเจ้าของ หรือเปลี่ยนกลุ่ม
ตามหัวข้อ 1.2 เรื่องคำสั่ง chmod ทำให้ทราบว่า แฟ้มแต่ละแฟ้มมี 3 ส่วน คือเจ้าของ กลุ่ม และทั่วไป เมื่อต้องการเปลี่ยนความเป็นเจ้าของ หรือกลุ่ม ก็สามารถทำได้ ซึ่งเป็นหลักการง่าย ๆ ไม่ยุ่งยาก
    ตัวอย่างคำสั่ง และการใช้งาน
    #chown burin:users x :: เปลี่ยนเจ้าของของแฟ้ม x ให้เป็น burin และอยู่ในกลุ่มของ users
    #chgrp users y :: เปลี่ยนกลุ่มของแฟ้ม x ให้เป็น users
Android
in
Terminal Emulator
$chown
$chgrp not found
#chown
#chgrp

2.18 คำสั่ง chkconfig
: กำหนด หรือแสดง บริการที่สั่งประมวลผลใน level ต่าง ๆ ขณะเปิดเครื่อง
คำว่า level คือระดับในการเปิดเครื่อง ดูได้จากแฟ้ม /etc/inittab โดยโปรแกรมต่าง ๆ ที่สั่งให้ประมวลผล สามารถเลือกให้ทำงานใน level ใดได้ หากสั่งให้ประมวลผลปิด level เมื่อมีการ start linux ใน level หนึ่ง โปรแกรมที่คิดว่าสั่งให้ทำงานขณะเปิดเครื่อง ก็จะไม่ทำงาน
    # /etc/inittab
    # Default runlevel. The runlevels used by RHS are:
    #   0 - halt (Do NOT set initdefault to this)
    #   1 - Single user mode
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #   3 - Full multiuser mode
    #   4 - unused
    #   5 - X11
    #   6 - reboot (Do NOT set initdefault to this)
    #id:5:initdefault:
    id:3:initdefault:
    
    ตัวอย่างคำสั่ง และการใช้งาน
    #/sbin/chkconfig --add mysql :: สั่งให้เพิ่ม mysql เข้าไปในระบบ system services
    #/sbin/chkconfig --list :: แสดงรายการโปรแกรมทั้งหมด ที่สั่งให้ทำงานใน level ต่าง ๆ
    #/sbin/chkconfig --level 3 sendmail on :: สั่งโปรแกรม sendmail ทำงานใน level 3 (Text mode)
    #/sbin/chkconfig --level 5 sendmail on :: สั่งโปรแกรม sendmail ทำงานใน level 5 (X Windows)
Android
in
Terminal Emulator
$chkconfig not found
#chkconfig not found

2.19 คำสั่ง mount, umount
: เชื่อมต่ออุปกรณ์ หรือ partition เช่น Diskette หรือ Handy drive
การใช้ mount เป็นสิ่งที่ผู้ดูแลระบบต้องเข้าใจหลักการให้ได้ เพราะเป็นช่องทางในการติดต่อกับอุปกรณ์ต่าง ๆ ล่าสุด ผมต่อ harddisk เข้าไปในเครื่อง server เพิ่มอีก 1 ตัว ซึ่งระบบมอง harddisk ตัวที่เพิ่มเข้าไปเป็น hdc ด้วยคำสั่ง fdisk -l เมื่อต้องการ partition ที่ 1 ของ hdc มาเป็นห้อง /x ก็เพียงแต่ใช้คำสั่งสร้างห้องคือ #mkdir /x สำหรับครั้งแรก แล้วใช้คำสั่ง #mount /dev/hdc1 /x ก็จะใช้ห้อง /x ซึ่งอยู่ใน harddisk อีกตัวหนึ่งได้ทันที
    คำสั่งที่เกี่ยวข้องกับคำสั่ง mount
      #cat /etc/fstab : ดู file system table เพื่อบอกว่ามีอะไร mount ไว้แล้วบ้าง
      #cat /etc/mtab : ดูรายละเอียดการ mount ในอีกรูปแบบหนึ่ง
      #cat /proc/mounts : บอกว่ามีอะไร mount ไว้แล้วบ้าง
      #cat /proc/partitions : บอกชื่อ และขนาดของแต่ละ partitions
      #cat /proc/filesystems : บอกประเภทของ filesystems ที่มีการสนับสนุน
      #/sbin/fdisk -l : แสดง partition จาก harddisk ทุกตัวที่เชื่อมต่อในเครื่องนั้น

    ตัวอย่างคำสั่ง และการใช้งาน
    #mount --bind /var/www /home/yourname/www
    #mount
    แสดงข้อมูลที่เคย mount ไว้ทั้งหมด

    วิธีใช้แผ่น Floppy Disk ใน linux
      #mkdir /floppy
      #mkfs -t ext3 /dev/fd0 1440
      #mount -t ext3 /dev/fd0 /floppy
      - or -
      #mkdir /floppy
      #mkfs -t msdos /dev/fd0 1440
      #mount -t msdos /dev/fd0 /floppy

      ต่อไปในห้อง /floppy ก็คือแผ่น disk ใน drive A ส่วน /dev/fd1 ก็คือ drive B แต่ต้องเริ่มทำใหม่นะครับ
    วิธีใช้ Handy Drive เช่น Apacer (ต้อง umount ก่อนดึง apacer ออกก่อนเสมอ)
      #mkdir /mnt/apacer (Just first time)
      #mount /dev/sda1 /mnt/apacer
      ...
      #cd /
      #umount /dev/sda1
      - and -
      #pico /etc/fstab Add: /dev/sda1 /mnt/apacer auto noauto,user 0 0
    วิธีเรียกใช้แฟ้มใน Partition อื่น เช่น WindowsXP
    cd / :: ย้ายตัวเองไปยัง root directory
    mkdir hd :: สร้างห้องชื่อ hd ซึ่งเป็นห้องเปล่าไม่มีอะไร
    fdisk -l :: ดูว่ามี partition อะไรในเครื่องบ้าง ที่ต้องการ mount เข้ากับ /hd
    mount /dev/hdb2 /hd :: ทำให้เรียกใช้ /dev/hdb2 จาก /hd ได้ เช่น cd /hd/etc ถ้าใน hdb2 มีห้องชื่อ etc
    umount /hd :: ยกเลิกการ mount /hd

    วิธีใช้ CDROM
    mount :: แสดงรายการอุปกรณ์ หรือห้องต่าง ๆ ที่ถูก mount ไว้แล้ว
    mount -t ext3 :: แสดงให้เห็นว่า partition แบบ ext3 มีอะไรถูก mount ไว้บ้าง
    mount -t vfat :: แสดงให้เห็นว่า partition แบบ vfat มีอะไรถูก mount ไว้บ้าง
    mount /dev/cdrom :: ใช้ติดต่อ CD ROM เมื่อเข้าไปใช้เช่น #cd /mnt/cdrom และใช้ #ls
    umount /dev/cdrom :: เพื่อเลิกใช้ CD ROM หรือต้องการดึงแผ่นออก แต่ท่านต้องออกมาก่อนด้วยคำสั่ง #cd / เป็นต้น
    eject :: ถ้าไม่ umount ด้านล่าง ก็สั่ง eject เพื่อดีด CD-ROM ออกได้เลยครับ และไม่ต้องสั่ง umount หรือออกจากห้องก่อนนะ

    ตัวอย่างผลการใช้คำสั่ง #mount ใน server ตัวหนึ่ง
    /dev/hda5 on / type ext3 (rw)
    none on /proc type proc (rw)
    /dev/hda1 on /boot type ext3 (rw)
    none on /dev/pts type devpts (rw,gid=5,mode=620)
    /dev/hda3 on /home type ext3 (rw)
    none on /dev/shm type tmpfs (rw)
    /dev/hda2 on /usr type ext3 (rw)
    /dev/hda6 on /var type ext3 (rw)
Android
in
Terminal Emulator
$mount
$umount
#mount
#umount

2.20 คำสั่ง mkbootdisk
: สร้างแผ่น boot disk เพื่อใช้ boot ระบบ linux ขึ้นมาภายหลัง และมีการทำงานแบบ stand alone
คำสั่งนี้ผมเคยใช้ตอนคัดลอก harddisk ที่เป็น linux 2 ตัว แต่ตัวลูกเมื่อนำไปเสียบเข้าเครื่องใหม่ พบว่า boot ด้วยตนเองไม่ได้ จึงต้องหาแผ่น boot จนเข้าไปใน harddisk ได้ จากนั้นก็สั่ง #lilo เพื่อให้การ boot ครั้งต่อไปสามารถทำงานตาม /etc/lilo.conf ได้ตามปกติ ส่วนตัวเลข 2.4.18-14 เป็นเลขรุ่นของ kernel ใน Redhat 8.0 สังเกตเลขนี้ได้ตอน boot เครื่อง
    ตัวอย่างคำสั่ง และการใช้งาน
    mkbootdisk --device /dev/fd0 2.4.18-14 :: สร้างแผ่น disk เพื่อใช้ boot เข้า linux ในกรณีที่ระบบ boot ของเครื่องมีปัญหา
Android
in
Terminal Emulator
$mkbootdisk not found
#mkbootdisk not found

2.21 คำสั่ง traceroute
: แสดงเลข ip ของเครื่องที่ถูกเชื่อมต่อทั้งหมด ไปยังปลายทางที่ต้องการ
ตัวอย่างข้างล่างนี้แสดงให้เห็นว่า เมื่อในวิทยาลัยโยนกเปิดเว็บ www.thai.net จะต้องติดต่อผ่านเครื่องบริการ 8 ตัว ดังตัวอย่างล่างนี้ ถ้าเปิดเว็บไซต์ต่างประเทศ ก็จะมีจำนวนเครื่องในการติดต่อมากขึ้นไปด้วย เครื่องบริการในที่นี้ มักเป็นอุปกรณ์ที่เรียกว่า router และ router ทุกตัวจะมี ip และความสามารถเฉพาะตัวที่ต่างกันไป โดยหน้าที่หลักของ router ก็คือการกำหนดเส้นทางในการติดต่อนั่นเอง
    ตัวอย่างคำสั่ง และการใช้งาน
    /usr/sbin/traceroute www.thai.net
      traceroute to www.thai.net (203.150.13.2), 30 hops max, 38 byte packets
       1  door.yonok.ac.th (202.29.78.254)  2.046 ms  1.962 ms  2.532 ms
       2  202.28.29.41 (202.28.29.41)  3.703 ms  3.294 ms  3.760 ms
       3  UniNet-BKK2-ATM1-0-0.700.uni.net.th (202.28.28.129)  14.185 ms  13.226 ms  14.614 ms
       4  202.28.28.18 (202.28.28.18)  13.705 ms  13.227 ms  14.130 ms
       5  202.47.255.2 (202.47.255.2)  13.222 ms  13.890 ms  13.210 ms
       6  202.129.63.182 (202.129.63.182)  16.649 ms  14.960 ms  15.659 ms
       7  juliet-vlan-2.bkk.inet-th.net (203.150.14.22)  14.817 ms  15.573 ms  15.610 ms
       8  www.thai.net (203.150.13.2)  15.628 ms  14.775 ms  14.222 ms
      
Android
in
Terminal Emulator
$traceroute not found
#traceroute

2.22 คำสั่ง rpm
: ใช้ตรวจสอบ เพิ่ม หรือลบ package ของระบบ linux เกือบทั้งหมด
ในกรณีที่ท่านมีโปรแกรมตัวใหม่มา สามารถที่จะลบโปรแกรมเพิ่มโดยใช้คำสั่ง rpm ได้ หรือต้องการตรวจสอบว่า มี package บางตัว install อยู่หรือไม่ หรือจะยกเลิกโปรแกรมบางตัวออกจากระบบก็ทำได้ หรือจะแสดงรายชื่อ package ทั้งหมดในระบบก็ทำได้อีก รวมทั้งการตรวจ version ของ package แต่ละตัว
จากประสบการณ์ ไม่แน่ใจว่าเกิดจากอะไร เมื่อลง Redhat 7.2 แล้ว แต่ระบบไม่บริการ pop3 จึงได้ทำการ mount /dev/cdrom จากนั้นก็ทำการ install package pop เพิ่มเข้าไป ที่รู้เพราะลองใช้คำสั่ง telnet localhost 110 แล้ว error จึงต้องทำการเพิ่ม package pop เข้าไปใหม่ โดยใช้คำสั่ง rpm -i imap-4.7-5.i386.rpm ที่รู้เพราะได้ใช้ cd เข้าไปในห้อง /mnt/cdrom/RedHat/RPMS จึงพบแฟ้มมากมายที่สามารถ install เพิ่มได้
    ตัวอย่างคำสั่ง และการใช้งาน
    rpm -i imap-4.7-5.i386.rpm :: ใช้ install package pop เข้าไปใน linux ใหม่ เพราะไม่มี และให้ดูเพิ่มเติมจาก 8.99 เกี่ยวกับการติดตั้งโปรแกรมจาก CD-ROM
    rpm -qa|grep imap :: ใช้ดูว่ามี package อะไรบ้างที่ขึ้นต้นด้วย imap
    rpm -qa :: ใช้ดูรายชื่อ package ทุกตัวที่ install ไว้แล้ว
    rpm -q telnet :: ใช้ตรวจว่ามี package ชื่อ telnet อยู่หรือไม่
    rpm -qpl imap-4.7-5.i386.rpm :: แสดงชื่อแฟ้มใน package แต่ต้องเข้าไปที่ /mnt/cdrom/RedHat/RPMS ก่อนนะครับ
    rpm -qf /usr/sbin/vi :: จะแสดง vim-minimal-5.6-11 ซึ่งเป็นรุ่นของ vi นั้น
    rpm -qf /usr/sbin/httpd :: จะได้ apache-1.3.12-2 ซึ่งเป็นรุ่นที่ติดตั้งมาใน linux 6.2
    rpm -e apache-1.3.12-2 :: ลบ หรือ erase โปรแกรม apache-1.3.12-2 ออกจากเครื่อง
    rpm -Fvh openssl-0.9.5a-2.6.x.i386.rpm :: Upgrade โปรแกรม แต่ต้องลงโปรแกรมก่อนมิเช่นนั้น ไม่สำเร็จนะครับ
    rpm -qi vsftpd :: แสดงรายละเอียดของ Application เช่น ขนาด วันติดตั้ง รุ่น ผู้ผลิต เป็นต้น
Android
in
Terminal Emulator
$rpm not found
#rpm

2.23 คำสั่ง SU
: ขอเปลี่ยนตนเองเป็น Super user หรือ root เพื่อใช้สิทธิสูงสุดในการบริหารระบบ
การจะใช้ su ได้จะต้องเป็นผู้ใช้ตามปกติ เมื่อพิมพ์ su แล้วระบบจะถามรหัสผ่านของ user root หากพิมพ์รหัสผ่านถูกต้อง ท่านก็จะสามารถกระทำการใด ๆ ก็ได้ ในฐานะ root เพราะ root หรือ super user คือผู้ที่มีอำนาจสูงสุดในระบบ เช่น เพิ่มผู้ใช้ท่านใหม่ ลบผู้ใช้คนเดิม เป็นต้น (เพียงแต่พิมพ์คำว่า su ท่านก็สามารถเปลี่ยนสิทธิได้แล้ว ถ้าท่านมีรหัสผ่านของ su) เดิมผมใช้แค่คำว่า su ต่อมาคุณประเสริฐ แนะนำว่าต้องใช้ su - จึงจะสมบูรณ์ พอทดสอบก็พบว่า $PATH ที่ได้แตกต่างกันจริง
    ตัวอย่างคำสั่ง และการใช้งาน
    #su - :: เปลี่ยนตนเองเป็น super user เพื่อกระทำการใด ๆ ก็ได้กับตัวระบบ
    #su prasert :: ไม่ว่าขณะที่ login เป็น user ใด เมื่อต้องการเปลี่ยนเป็น user prasert ก็ไม่ต้อง logout แล้ว login ใหม่ ใช้คำสั่งนี้ได้เลย
คำสั่ง sudo คือ execute a command as another user เมื่อเรียกด้วยภาษา php
shell_exec("sudo -u root -S /usr/sbin/useradd $user"); ใช้ความเป็นผู้ใช้ root เรียกใช้คำสั่ง useradd
shell_exec("echo $pass |sudo -u root -S /usr/bin/passwd $user --stdin"); ใช้กำหนดรหัสผ่าน หลังสร้างรหัสผู้ใช้แล้ว
Android
in
Terminal Emulator
$su is blank
#su

2.24 คำสั่ง useradd
: เพิ่มผู้ใช้รายใหม่เข้าไปในระบบ
    ตัวอย่างคำสั่ง และการใช้งาน
    #useradd theman :: เพิ่มผู้ใช้รายใหม่เข้าไปในระบบชื่อ theman ในกลุ่ม theman และมี home directory เป็น /home/theman
    #useradd -g users -d /home/theman -c "user name here" theman :: เพิ่มผู้ใช้รายใหม่เข้าไปในระบบชื่อ theman
Android
in
Terminal Emulator
$useradd not found
#useradd not found

2.25 คำสั่ง userdel
: ลบผู้ใช้รายเดิม ออกจากระบบ
    ตัวอย่างคำสั่ง และการใช้งาน
    #userdel -r theman :: ลบ theman และ home directory ของ theman ออกหมด
Android
in
Terminal Emulator
$userdel not found
#userdel not found

2.26 คำสั่ง usermod
: แก้ไขข้อมูลของผู้ใช้ได้
    ตัวอย่างคำสั่ง และการใช้งาน
    #usermod -s /rbin/menu theman :: กำหนดให้ shell สำหรับ user ที่ชื่อ theman ใหม่ เพื่อจำกัดสิทธิในการเข้าใช้ shell
    #usermod -d /home/theman theman :: กำหนดให้ theman มี homedirectory อยู่ที่ /home/theman
    #usermod -c "Mr.Suwit Somsupabrungyod" theman :: กำหนดให้ comment หรือชื่อ เป็น Mr.Suwit Somsupabrungyod ซึ่ง comment จะไปแสดงผลให้เห็นชัดเจนตอนที่ใช้ pine เมื่อพิมพ์คำว่า theman ในช่อง to ขณะที่กำลัง compose จะแสดง comment หน้า email ให้ทันที
Android
in
Terminal Emulator
$usermod not found
#usermod not found

2.27 คำสั่ง crontab
: ตั้งเวลาสั่งงานคอมพิวเตอร์
    ตัวอย่างคำสั่ง และการใช้งาน
    #crontab -l :: แสดงกำหนดการของการสั่งให้คอมพิวเตอร์ทำงานอย่างอัตโนมัติ ตามเวลาที่กำหนด
    #cat /etc/crontab :: แสดงตาราง crontab ในเครื่อง
    #ls /etc/cron.daily :: แสดงรายชื่อแฟ้มที่จะส่งให้ crontab ดำเนินการ
Android
in
Terminal Emulator
$crontab not found
#crontab : unknown uid 0

2.28 คำสั่ง lspci
: ตรวจสอบอุปกรณ์ที่เชื่อมต่อภายในเครื่อง
    ตัวอย่างคำสั่ง และการใช้งาน
    #lspci
      00:00.0 Host bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (rev 03)
      00:01.0 PCI bridge: Intel Corp. 440BX/ZX/DX - 82443BX/ZX/DX AGP bridge (rev 03)
      00:07.0 ISA bridge: Intel Corp. 82371AB/EB/MB PIIX4 ISA (rev 02)
      00:07.1 IDE interface: Intel Corp. 82371AB/EB/MB PIIX4 IDE (rev 01)
      00:07.2 USB Controller: Intel Corp. 82371AB/EB/MB PIIX4 USB (rev 01)
      00:07.3 Bridge: Intel Corp. 82371AB/EB/MB PIIX4 ACPI (rev 02)
      00:0f.0 PCI bridge: Digital Equipment Corporation DECchip 21152 (rev 03)
      00:11.0 Ethernet controller: 3Com Corporation 3c905B 100BaseTX [Cyclone] (rev 24)
      01:00.0 VGA compatible controller: ATI Technologies Inc 3D Rage Pro AGP 1X/2X (rev 5c)
      
Android
in
Terminal Emulator
$lspci not found
#lspci not found

2.29 คำสั่ง nmap
: ตรวจสอบเครือข่ายแบบกวาดทั้งในเครื่อง และ class C
    ตัวอย่างคำสั่ง และการใช้งาน
      #nmap -sP 202.29.78.* 
      Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
      Host   (202.29.78.0) seems to be a subnet broadcast address (returned 1 extra pings). 
      Note -- the actual IP also responded.
      Host www.isinthai.com (202.29.78.1) appears to be up.
      Host course.yonok.ac.th (202.29.78.5) appears to be up.
      Host yonok.ac.th (202.29.78.12) appears to be up.
      Host w2kdhcp.yonok.ac.th (202.29.78.17) appears to be up.
      Host  (202.29.78.31) appears to be up.
      Host  (202.29.78.32) appears to be up.
      Host  (202.29.78.33) appears to be up.
      
      #nmap -sT www.yonok.ac.th (on TCP)
      Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
      Interesting ports on yonok.ac.th (202.29.78.12):
      (The 1590 ports scanned but not shown below are in state: closed)
      Port       State       Service
      21/tcp     open        ftp
      22/tcp     open        ssh
      25/tcp     open        smtp
      53/tcp     open        domain
      80/tcp     open        http
      109/tcp    open        pop-2
      110/tcp    open        pop-3
      
      #nmap www.yonok.ac.th -sU (on UDP)
      Starting nmap V. 3.00 ( www.insecure.org/nmap/ )
      Interesting ports on yn1.yonok.ac.th (202.29.78.12):
      (The 1465 ports scanned but not shown below are in state: closed)
      Port       State       Service
      53/udp     open        domain
      111/udp    open        sunrpc
      867/udp    open        unknown
      
Android
in
Terminal Emulator
$nmap not found
#nmap not found

3.1 เริ่มต้นกับ perl
: เมื่อเขียน perl สักโปรแกรมหนึ่ง แล้วใช้ ftp upload เข้าไปใน home directory ของท่าน ก็ถือว่าผ่านจุดแรกแล้ว
    ตัวอย่างโปรแกรม perl ที่ใช้ในการทดสอบ 3 บรรทัด
    #!/usr/bin/perl
    print"Content-type:text/html\n\n";   
    print"<body bgcolor="#ffffdd">";
    print"<h1>This is test.</h1><br>By tester</body>";
    
    วิธีการทำให้ perl ใช้งานได้
  1. Host name ที่ท่านจะใช้อ้างอิงในการ upload คือ www.isinthai.com
  2. ก่อน upload ต้องให้แน่ใจว่า โปรแกรมของท่าน มีนามสกุลเป็น .pl
  3. ก่อน upload ต้องให้แน่ใจว่ากำหนด mode การส่งแบบ ascii ไม่ใช่ bin เพราะถ้าเป็น binary จะใช้งานไม่ได้
  4. หลัง upload แล้วให้ใช้ ftp version ใหม่หน่อย ทำการ chmod เป็น 755 เช่น chmod 755 f.pl เป็นต้น
  5. ตอนเรียกใช้ให้เรียกทาง url ดังนี้ http://www.isinthai.com/uname/f.pl
  6. ถ้าเรียกใช้แบบ http://www.isinthai.com/uname/f.pl จะแสดง source code ออกมาตรง ๆ ไม่ผ่านการประมวลผล
  7. ควรทราบว่า Home directory อยู่ที่ /home/uname

3.2 Perl สำหรับสร้างแฟ้ม
: โปรแกรมเล็ก ๆที่ใช้ในการสร้างแฟ้ม ตัวอย่างนี้มี 6 ระเบียน 5 เขตข้อมูล
    perlcrt.pl
    Html ที่ใช้เรียก perl มาทำงาน
    <form action=http://www.isinthai.com/thaiall/perlcrt.pl method=post>
    <input type=submit value=Create_dataperl.txt> perlcrt.pl
    </form>
    
    หรือ จะเรียกตรง ๆ ผ่าน URL ก็ได้เช่น http://www.isinthai.com/thaiall/perlcrt.pl
    ตัวอย่างโปรแกรม perl
    #!/usr/bin/perl
    print"Content-type:text/html\n\n";   
    $filename = "/home/burin/public_html/dataperl.txt";
    open(myfile,">$filename");
    $dat = "3101001:Tom:Jojo:16000:A:\n";
    print myfile $dat;
    $dat = "3101002:Naja:Rujj:5600:R:\n";
    print myfile $dat;
    $dat = "3101003:Packman:Somsu:7000:L:\n";
    print myfile $dat;
    $dat = "3101004:Nichole:Jaiboon:15000:A:\n";
    print myfile $dat;
    $dat = "3101005:Suwi:Hancharn:10600:A:\n";
    print myfile $dat;
    $dat = "3101006:Nirund:Jiva:9700:A:\n";
    print myfile $dat;
    close(myfile);   
    print "<body bgcolor="#ddffff">Create 6 Records and 5 Fields : Finish";
    

3.3 Perl สำหรับแสดงข้อมูลจากแฟ้ม
: โปรแกรมเล็ก ๆ ที่อ่านข้อมูลจากแฟ้มมาแสดง
    perllst.pl
    Html ที่ใช้เรียก perl มาทำงาน
    <form action=http://www.isinthai.com/thaiall/perllst.pl method=post>
    <input type=submit value=List_dataperl.txt> perllst.pl
    </form>
    
    หรือ จะเรียกตรง ๆ ผ่าน URL ก็ได้เช่น http://www.isinthai.com/thaiall/perllst.pl
    ตัวอย่างโปรแกรม perl
    #!/usr/bin/perl
    print"Content-type:text/html\n\n";   
    $filename = "/home/burin/public_html/dataperl.txt";
    print "<body bgcolor="#ddffff"><pre>";
    open(myfile,"<$filename");
    @getrec = <myfile>;
    close(myfile);      
    $i = 1;
    foreach $rec (@getrec) {
      @r = split(/:/,$rec);
      print $i,$r[0]," - ",$r[1],$r[2],$r[3],$r[4],$r[5],"\n";
      $i++;
    }
    

3.4 Perl สำหรับเพิ่มระเบียนใหม่
: โปรแกรมเล็ก ๆ เพิ่มระเบียนใหม่อย่างง่าย ๆ ทีละระเบียน
    Add new
    s-id :
    s-name :
    s-surname :
    s-salary :
    status:
    Html ที่ใช้เรียก perl มาทำงาน
    <form action=http://www.isinthai.com/thaiall/perladd.pl method=post>Add new<br>
    s-id : <input type=text name=sid><br>
    s-name : <input type=text name=sn><br>
    s-surname : <input type=text name=ss><br>
    s-salary : <input type=text name=ssal><br>
    status: <input type=text name=stat><br>
    <input type=submit value=Add_dataperl.txt>
    </form>
    
    ตัวอย่างโปรแกรม perl
    #!/usr/bin/perl
    &parse_form;
    print"Content-type:text/html\n\n";   
    $filename = "/home/burin/public_html/dataperl.txt";
    open(myfile,">>$filename");
    $dat = "$config{'sid'}:$config{'sn'}:$config{'ss'}:$config{'ssal'}:$config{'stat'}:\n";
    print myfile $dat;
    close(myfile);   
    print "Add new : Finish";
    exit;
    
    sub parse_form {
      if ($ENV{'REQUEST_METHOD'} eq 'GET') {
        @pairs = split(/&/, $ENV{'QUERY_STRING'});
      } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
        @pairs = split(/&/, $buffer);
      }  
      foreach $pair (@pairs) {
        local($name, $value) = split(/=/, $pair);
        $name =~ tr/+/ /;
        $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ s/<!--(.|\n)*-->//g; 
        $config{$name} = $value;
      }
    }
    

3.5 Perl สำหรับลบระเบียน
: โปรแกรมเล็ก ๆ ที่ใช้ลบระเบียนตาม key field ที่ป้อนเข้าไป
    Delete record on s-id :
    Html ที่ใช้เรียก perl มาทำงาน
    <form action=http://www.isinthai.com/thaiall/perldel.pl method=post>Delete record on
    s-id : <input type=text name=sid> <input type=submit value=Del_dataperl.txt>
    </form>
    
    ตัวอย่างโปรแกรม perl
    #!/usr/bin/perl
    &parse_form;
    print"Content-type:text/html\n\n";   
    $filename = "/home/burin/public_html/dataperl.txt";
    print "<body bgcolor="#ddffff"><pre>";
    open(myfile,"<$filename");
    @getrec = <myfile>;
    close(myfile);      
    $i = 1;
    open(myfile,">$filename");
    foreach $rec (@getrec) {
      @r = split(/:/,$rec);
      if ($r[0] ne $config{'sid'}) {
        print myfile $rec;
      }
    }
    close(myfile);
    print "Delete : Finish";
    exit;
    
    sub parse_form {
      if ($ENV{'REQUEST_METHOD'} eq 'GET') {
        @pairs = split(/&/, $ENV{'QUERY_STRING'});
      } elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
        read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
        @pairs = split(/&/, $buffer);
      }  
      foreach $pair (@pairs) {
        local($name, $value) = split(/=/, $pair);
        $name =~ tr/+/ /;
        $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $value =~ s/<!--(.|\n)*-->//g; 
        $config{$name} = $value;
      }
    }
    

3.6 Perl เรียกตัวเองมาแสดงผล
: โปรแกรมนี้เป็น ภาษา perl ซึ่งทดสอบให้ ประมวลผลได้ใน linux เครื่อง isinthai.com นี้
โปรแกรมนี้ชื่อ testf.pl ถูกเก็บไว้ในห้อง /home/burin/public_html และ link ไปยังห้อง /var/www/html/burin ซึ่งต้องกำหนดให้ chmod 700 เพื่อให้สั่งประมวลผล shell script ตัวนี้ได้ การเรียก Perl script ตัวนี้ ให้ทำตามข้างล่างนี้ >> http://www.isinthai.com/thaiall/testf.pl
    ตัวอย่างโปรแกรมที่ใช้ทดสอบ
    #!/usr/bin/perl
    $filename = "/home/burin/public_html/testf.pl";
    print"Content-type:text/html\n\n";
    print"<body bgcolor="#ffffdd"><pre>";
    open(myfile,"$filename");
    @getrec = <myfile>
    close(myfile);  
    $i = 1;
    foreach $r (@getrec) {
       $r =~ s/</</g;
       $r =~ s/>/>/g;
       $r =~ s/"/"/g;
       print $i,". ",$r,"<br>";
       $i++;
    }    
    print"<hr>";
    

3.7 การเปิด perl ให้เฉพาะ account
: กำหนดว่าห้องใดสามารถใช้ภาษา perl หรือ cgi ได้
    เพื่อความปลอดภัย server ส่วนใหญ่จะไม่เปิดบริการ cgi หรือ perl ให้กับทุกคน หากต้องการเปิดบริการให้ใคร ก็จะกำหนดให้เฉพาะคนนั้น หลักการนี้ผมนำไปใช้กับการกำหนดในส่วนของ virtual host ทำให้ใช้งานได้ยืดหยุน และปลอดภัย มากกว่าการเปิดให้บริการทุกคน
    การกำหนดว่าห้องใด หรือ host name ใด สามารถใช้บริการ perl หรือ cgi ได้สามารถกำหนดในแฟ้ม /etc/httpd/conf/httpd.conf มีหลายจุดในแฟ้มนี้ที่สามารเปิด หรือปิดบริการได้ โดยใช้คำว่า options ExecCGI หรือ options all กำหนดบริการ ดูรายละเอียดเพิ่มเติมได้จากหัวข้อ 9.11 และ 9.62

4.1 PHP พิมพ์ข้อความอย่างง่าย
: แสดงการใช้ PHP พิมพ์ 1 ถึง 5 ซึ่งโครงสร้างภาษาคล้าย Perl และ C
    ข้อควรทราบ
  1. ไม่ต้อง chmod แฟ้ม php ก็ประมวลผลได้
  2. ไม่ต้องอยู่ใน cgi-bin โปรแกรม php ก็ทำงานได้
    ตัวอย่างโปรแกรมที่ใช้ทดสอบ
    <?
    for ($i=1;$i<=5;$i++){
      echo "$i<br>";
    }
    ?>
    

4.2 อ่านข้อมูลจาก Mysql มาแสดงผล
: การใช้ความสามารถของ Mysql ในการเลือกข้อมูลมาให้ PHP
    ตัวอย่างโปรแกรม listall.php
    <?
    echo "First line of the printing on screen.";
    $link = mysql_connect("localhost","thaiall","some_pass");
    if ($link) {
      echo "Connect OK<hr>";
      mysql_select_db("test",$link);
      $query = "select * from testf";
      $process = mysql_query($query,$link);
      $i = 1;
      while ($obj = mysql_fetch_object($process)) {
        echo $i.$obj->fld1." - ";
        echo $obj->fld2." - ";
        echo $obj->fld3."<br>";
    	$i++;
      }
      mysql_close($link);
    } else {
      echo "Connect error"; 
    }
    ?>
    

4.3 เพิ่มระเบียนใหม่เข้า Mysql
: รับข้อมูลทีละรายการส่งเข้า Mysql
    ตัวอย่างโปรแกรม addone.php
    <?
    $link = mysql_connect("localhost","thaiall","some_pass");
    if ($link) {
      echo "Connect OK<hr>";
      mysql_select_db("test",$link);
      $query = "insert into testf values('abc','def',5)";
      $result = mysql_db_query("test",$query);
      if (!result) {
        echo "ผิดพลาด";
      } else {
        echo "เพิ่มเรียบร้อย";
      }
      mysql_close($link);
    } else {
      echo "Connect error"; 
    }
    ?>
    

4.4 เพิ่มระเบียนใหม่เข้า Mysql หลายระเบียนผ่าน form
: รับข้อมูลได้หลายรายการพร้อม ๆ กันส่งเข้า Mysql
    ตัวอย่างโปรแกรมที่ใช้ป้อนข้อมูล เตรียมส่งเข้า mysql (addmany.htm)
    
    ข้อมูลที่ส่งเข้าจะใช้เครื่องหมาย , แยกระหว่างเขตข้อมูล และ 1 บรรทัดก็คือ 1 ระเบียน ทำให้ผู้ใช้สามารถนำข้อมูลจาก Excel มา export CSV และใช้ที่นี่ได้
    <form action=addmany.php> <textarea name=manyrecord rows=6 cols=40></textarea> <input type=submit></form>
    ตัวอย่างโปรแกรมที่ใช้ส่งข้อมูลเข้า Mysql (addmany.php ถูกสั่งจาก addmany.htm)
    <?
    $getline = preg_split("/[\s\n]+/",$manyrecord);
    for ($j=0;$j<count($getline);$j++) {
      $l = $j + 1;
      $getfield = preg_split("/[\s,]+/",$getline[$j]);   
      print "$l $getfield[0] - $getfield[1] - $getfield[2]<br>";
    }
    $link = mysql_connect("localhost","thaiall","some_pass");
    if ($link) {
      echo "Connect OK<hr>";
      mysql_select_db("test",$link);
      for ($j=0;$j<count($getline);$j++) {
        $l = $j + 1;
        $getfield = preg_split("/[\s,]+/",$getline[$j]);   
        print "$l $getfield[0] - $getfield[1] - $getfield[2]";
        $query = "insert into testf values('$getfield[0]','$getfield[1]',$getfield[2])";
        $result = mysql_db_query("test",$query);
        if (!$result) {
          echo "ผิดพลาด";
        } else {
          echo "เพิ่มเรียบร้อย";
        }		
    	echo "<br>";
      }  
      mysql_close($link);
    } else {
      echo "Connect error"; 
    }
    ?>
    

4.21 บริการส่ง mail ด้วย php
: เพื่อให้ web server ที่เปิดบริการ SMTP (/usr/sbin/sendmail) ถูกเรียกใช้โดย php สำหรับส่ง mail
บริการนี้เปิดให้ทดสอบว่าส่งถึงท่านไหม แต่อาจใช้ไม่ได้ทุกเครือข่าย เพราะกำหนด RELAY ให้เฉพาะบางเครือข่ายเท่านั้น แต่ถ้า copy source code ไปใช้ก็น่าจะใช้ได้เลย โดยโปรแกรมตัวอย่างได้มีการตรวจสอบอะไรนิดหน่อย ซึ่งอาจนำไปประยุกต์ใช้งานสำหรับริการต่าง ๆ ได้ง่ายขึ้น เช่น contact us หรือ e-commerce เป็นต้น โปรแกรมนี้ได้ทดสอบแล้วที่ http://www.isinthai.com/~php/mail.htm และ http://lampang.thcity.com/mail.htm
ข้อควรทราบ : โปรแกรมนี้ไม่ได้ตรวจสอบอะไรมากมาย โดยแบ่งโปรแกรมออกเป็น 2 ส่วน เพื่อให้ง่ายสำหรับผมในการอธิบาย ว่า ส่วนที่ 1 ใช้รับค่าจากผู้ใช้ ส่วนที่ 2 ใช้ส่ง e-mail โดยตรง แต่การจะส่ง mail ได้ เครื่องที่ท่านนำโปรแกรมทั้ง 2 นี้ไปวางต้องมีคุณสมบัติ 2 ประการ 1. ต้องเป็น web server ที่บริการ php 2. ต้องให้บริการ smtp โดยเปิด relay ให้กับผู้ใช้เข้ามาใช้ได้
    Source code : mail.htm
    <body>
    <form action=mail.php method=get>
    <input name=refer type=hidden value="http://www.isinthai.com/~php/mail.htm">
    From : <input name=from value="saleman@oho.com" size=30><br>
    To : <input name=to value="burin@yonok.ac.th" size=30><br>
    Subject : <input name=subject value="test sendmail by isinthai.com" size=50><br>
    <textarea name=message rows=5 cols=80>
    Test form isinthai.com/~php/mail.htm
    </textarea><br>
    <input type=submit value=send>
    </form>
    </body>
    Source code : mail.php : สำหรับรับข้อมูลเพื่อส่ง mail ออกไป (ทำหน้าที่ส่ง e-mail โดยตรง)
    <body>
    <font color=blue>Send mail : </font><font color=red>
    <?
      $lf = chr(13). chr(10);
      $msg = $_GET['message'] . $lf ."IP address: " . $_SERVER["REMOTE_ADDR"];
      $msg = $msg . $lf ."Service by: http://www.isinthai.com/~php/mail.htm";  
      // mail ("burin@yonok.ac.th","your order","want 100 car today","From: saleman@oho.com");
      if ($_GET['to'] <> "burin@yonok.ac.th" || $_GET['from'] <> "saleman@oho.com") {
        mail($_GET['to'],":: ".$_GET['subject'],$msg,"From : ".$_GET['from']);
        echo "ok";
      } else {
        echo "invalid";
      }
    ?>
    </font><br><a href=<? echo $_GET['refer']; ?>><? echo $_GET['refer']; ?></a>
    </body>
    
อีก code หนึ่ง /var/www/html/isinthai/sndform.php ที่ใช้งานอยู่จริง
    
    <?
    $mto = $_POST["mto"];
    $msubj = $_POST["msubj"];
    $mfrom = $_POST["mfrom"];
    $message = $_POST["message"];
    $redirect = $_POST["redirect"];
    if (empty($redirect)) { $redirect = "http://www.isinthai.com/isinthai/sndform.php"; }
    if (empty($mto) || empty($msubj) || empty($mfrom) || empty($message)) {
    echo "<body bgcolor="#ffffdd"><font face='courier new'>";
    echo "<form action=sndform.php method=post>";
    echo ".... To : <select name=mto size=3>";
    echo "<option value=nirund@yonok.ac.th selected>ดร.นิรันดร์ จิวะสันติการ";
    echo "<option value=atichart@yonok.ac.th>อติชาต หาญชาญชัย";
    echo "<option value=burin@yonok.ac.th>ผู้ดูแลเครือข่าย, HW, SW, ฐานข้อมูล";
    echo "</select><br>.. From : <input name=mfrom size=30> EX. yourname@hotmail.com<br>";
    echo "Subject : <input name=msubj size=50> EX. Why the name is YONOK?<br>";
    echo "Messages: <textarea name=message rows=10 cols=80>";
    echo "</textarea> <input type=submit value=Send_mail><br>";
    echo "<input name=redirect type=hidden value=http://www.isinthai.com/isinthai/sndform.php>";
    echo "</form>";
    $message = "hi\nthis is test\nthis is line.";
    $mto = "burin@yonok.ac.th";
    $msubj = "the subject";
    $mfrom = "burin@thaiall.com";
    } else {
    $message=$message."\n\nService from http://".$_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"];
    $message=$message."\nScript developer by webmaster@yonok.ac.th";
    $message=$message."\nIP address : ".$_SERVER["REMOTE_ADDR"];
    $msubj = "Subject_".$msubj;
    $txtfrom = "From: ".$mfrom."\nX-Mailer: PHP/" . phpversion();
    mail($mto, $msubj, $message, $txtfrom );
    echo "<html><head><meta http-equiv=Refresh CONTENT='50; URL=$redirect'>";
    echo "</head><body><font face='courier new'>";
    echo "Your message sending [ <b>completely</b> ]<hr color=red><pre>";
    echo "From    : $mfrom \n";
    echo "To      : $mto \n";
    echo "Subject : $msubj \n";
    echo "Message : $message</pre>";
    }
    ?>
    

4.22 ดูข้อมูลในแฟ้มต่าง ๆ ด้วยโปรแกรม php
: โปรแกรมนี้ช่วยให้ดูแฟ้มต่าง ๆ ในระบบโดยไม่ต้องเข้า Linux ไม่ควรใช้ถ้าผู้ให้บริการไม่ยอมให้ใช้ ลองถามเขาก่อนใช้นะครับ
    ตัวอย่างโปรแกรม lastmsg.php
    <form action=http://www.isinthai.com/lock/lastmsg.php method=get>
    File: <input name=file value=messages>
    Line: <input name=l value=20>
    Password: <input name=p type=password value=suwit>
    <input type=submit value=tail>
    </form><font face='courier new'><pre>
    <?
    if ($_GET['p'] == "prasert") {
    $x = "tail --lines=" . $_GET['l'] . " ". $_GET['file'];
    echo `$x`;
    }
    ?>
    

4.23 ใช้ php อ่านข้อมูลจาก /var/log/maillog
: เพื่อรายงานสถิติการใช้ e-mail ของบุคลากร
วันหนึ่งผมอ่านข้อมูลการเข้าใช้ e-mail จาก /var/www/html/mail/database/username_yn1.yonok.ac.th/inbox โดยเช็คจากเวลา update filectime() แต่พบว่าข้อมูลที่ได้คือ ไม่รวมไปถึง user ที่ใช้ outlook อ่าน e-mail ผ่าน pop3 จึงต้องไปอ่านข้อมูลการเข้าใช้ e-mail จากแฟ้ม /var/log/maillog ทำให้รายงายได้ละเอียดขึ้น สามารถดูผลของโปรแกรมนี้ที่ http://www.isinthai.com/mail/database/index.php
อันที่จริง โปรแกรมนี้จะอยู่ที่ไหนก็ได้ แต่ผมเก็บไว้ที่นี่ เพราะห้องนี้ยังไม่เก็บอะไรเกี่ยงกับ mail ที่สำคัญ แต่สิ่งที่ต้องทำคือการ chmod 644 maillog แต่เดิมคุณสมบัติของแฟ้มเป็น 600 จะใช้ php ของ apache ไปอ่านมาไม่ได้
    ตัวอย่างโปรแกรม /var/www/html/mail/database/index.php
    <html><head><title>Username of /var/log/maillog</title></head>
    <body bgcolor=gray topmargin=0 leftmargin=0><font face="fixedsys" size=0><?
    $datefull = date("F d, Y");
    if(date("j") < 10) {$d = date("M")."  ".date("j");}else{$d = date("M j");}
    echo "Today : <font color=yellow>".$datefull."</font><br>";
    echo "Last login: <a href=index.php?act=total>total</a> ";
    if ($_GET['act'] <> "view" && $_GET['act'] <> "total") {
      echo ", <a href=index.php?act=view>today</a> ";
    } else {
    echo "<ol><font color=white>";
    $ar = file("/var/log/maillog");
    if ($_GET['act'] == "total") { $max = 0; } else { $max = count($ar) - 500; }
    $j = 0;
    for ($i=count($ar);$i>=$max;$i--) {  
      if (strpos($ar[$i],"Login user=") && _
         (strpos($ar[$i],"$d") > -1 || $_GET['act'] == "total")) {
        $user = stristr($ar[$i],"user=");
        $uofar = substr($user,5,strpos($user," ")-5);
        $found = "no";
        for($k=0;$k<$j;$k++) { 
          if (strpos($ur[$k],"$uofar") > -1) { $found = "yes"; }
        }
        if ($found == "no") {
          if (strpos($ar[$i],"host=yonok.ac.th") == false) {
            $p="pop";
          } else {
            $p=" ";
          }
          $ur[$j] = $uofar." <font color=black>".substr($ar[$i],7,8)."</font> ".$p;
          $ut[$j] = $uofar." <font color=black>".substr($ar[$i],0,6)."</font> ".$p;
          $j = $j + 1;
        }
      }
    }
    for ($i=0;$i<$j;$i++) { 
      if ($_GET['act'] == "total") {
        echo "<li>".$ut[$i]; 
      } else {
        echo "<li>".$ur[$i]; 
      } 
    }
    }
    ?>
    </ol></body></html>
    

4.81 Upload ด้วย php
: รับชื่อแฟ้มแล้วส่งเข้าไปในห้องที่ต้องการ โดยตรวจรหัสผ่านที่เก็บไว้ในห้องนั้น
    upload.htm ส่วนนี้เป็น html สำหรับส่งค่าให้ upload.php
    <body>
    <form enctype="multipart/form-data" method=post action=upload.php>
    <input type=hidden name="MAX_FILE_SIZE" value=200000>
    User <input type=text name=guser><br>
    Password <input type=password name=gpassword><br>
    Select file <input type=file name=upload><br>
    <input type=submit value=Upload>
    </form>
    <form enctype="multipart/form-data" method=post action=listfile.php>
    User <input type=text name=guser><br>
    Password <input type=password name=gpassword><br>
    <input type=submit value=List>
    </form>
    </body>
    
    upload.php ทำหน้าที่ส่งแฟ้มจากเครื่องท่านเข้าไปเก็บใน server
    โปรแกรมนี้เขียนได้เพราะอ่านวิธี upload จากหนังสือ PHP ของสุพิน วรรณา เล่มสีส้ม มีรูปหน้าคนครึ่งหน้า หน้า 494
    แต่ได้ปรับปรุงนิดหน่อย เพื่อให้ใช้งานใน isinthai.com ขณะที่ปิด telnet หรือ ftp (เดือนพฤษภาคม 2544)
    <?
    include("updateinclude.php");
    setupinit();
    if ($upload <> "none" and $upload_size < 200000) {
      echo "User: $guser<br>";
      echo "Local File: $upload<br>";
      echo "Name: $upload_name<br>";
      echo "Size: $upload_size<br>";
      echo "Type: $upload_type<br>";
      copy($upload,"$fpath/$upload_name");
      chmod("$fpath/$upload_name",0700);
      unlink($upload);
      } else {
      echo "Please select file";
    }
    ?>
    
    uploadinclude.php ใช้ในทุกโปรแกรม เพื่อตรวจสิทธิที่จะเข้า update
    ใช้ตรวจ guser และ gpassword กับแฟ้ม password.pl เพื่อตรวจว่าเป็นผู้ใช้ที่ถูกต้องหรือไม่
    ในการเขียนแบบนี้ทำให้ ระบบข้อมูลถูก hack ได้ง่ายมาก แต่ต้องใช้ php เข้าไป hack
    <?
    function setupinit() {
      global $guser,$gpassword,$fpath;
      $fpath="/home/burin/public_html/$guser";  
      if ($guser) {
        $f = fopen("$fpath/password.pl","r");
        if (!feof($f)) {
         $d = fgets($f,14);
          fclose($f);
        }
        if (strlen($d) <> 13){    
          $d = crypt(substr($d,0,strlen($d)),$guser);
          if ($d == crypt($gpassword,$guser)) {
            $f = fopen("$fpath/password.pl","w");
            if ($f) {
              fputs($f,$d);
              fclose($f);
            }
          }  
          echo "Crypt password.pl : OK $d".crypt($gpassword,$guser)."<hr>";
        }
      }
      if ($d == crypt($gpassword,$guser)) {
        echo "Welcome.. <b>$guser</b> : OK<hr>";
        } else {
        echo "Password invalid of $guser";
        exit;
      }
    }
    ?>
    
    listfile.php ดูรายชื่อแฟ้ม
    โดยใช้ include file สำหรับตรวจ guser และ gpassword ที่เหมาะสมกับแฟ้ม password.pl
    <?
    include("updateinclude.php");
    setupinit();
    $dir_handle = opendir($fpath);
    echo "<pre><font size=4 face=fixed>";
    while($list = readdir($dir_handle)) {
      if (substr($list,0,1) <> "." and $list <> "mail" and $list <> "bash_profile" and
          $list <> "pico.save" and $list <> "password.pl") { 
         echo  $list." - ".filesize("$fpath/$list")." Byte<br>"; 
      }
    }
    closedir($dir_handle);
    ?>
    

4.82 เพิ่มสมาชิกใหม่ผ่าน php ใน Linux
: เพิ่มสมาชิกใหม่ด้วย shell_exec
    โดยปกติผลการ ทดสอบ 1 จะประมวลผลได้สำเร็จ ใช้งานได้ทั้งในระบบปฏิบัติการ Windows และ Linux แต่ถ้าผู้ดูแลระบบไม่ต้องการให้นักพัฒนาใช้ shell_exec สามารถทำได้โดยกำหนด safe_mode เป็น On ใน php.ini ก็จะใช้ฟังก์ชัน shell_exec ไม่ได้
    การใช้ sudo และ useradd
    - ต้องเปลี่ยนสิทธิ์ของ /etc/sudoers จาก 440 เป็น 777
    - แล้วเพิ่ม apache ALL= NOPASSWD: /usr/sbin/useradd, /usr/bin/passwd เข้าไปในแฟ้ม /etc/sudoers
    - ต้องเปลี่ยนสิทธิ์ของ /etc/sudoers กลับเป็น 440
    // ทดสอบ 1
    $host = "127.0.0.1";
    $output = shell_exec("ping -c1 $host"); 
    echo "<pre>$output</pre>";
    
    // ทดสอบ 2
    $user = "hello";
    $pass = "wow";
    echo shell_exec("sudo -u root -S /usr/sbin/useradd $user");
    echo shell_exec("echo $pass |sudo -u root -S /usr/bin/passwd $user --stdin");
    echo shell_exec("id $user");
    

5.1 การติดตั้ง Mysql
: Mysql คือส่งบริการฐานข้อมูล เพื่อให้ใช้ภาษาต่าง ๆ เข้ามาดึงข้อมูลไปได้เช่น PHP, VB เป็นต้น
โปรแกรมจาก www.mysql.com mysql-3.22.32.tar.gz ขนาด 4,295,387
เว็บที่เกี่ยวข้อง www.apache.org, www.php3.net, www.mysql.com
ตรวจสอบ process mysql run อยู่หรือไม่ด้วยคำสั่ง ps aux|grep mysql
วิธี set password ของ root /usr/local/bin/mysqladmin -u root password helloisinthai คำว่า helloisinthai เป็นคำที่ท่านเปลี่ยนได้ ครั้งต่อไปที่จะเข้า mysql ในฐานะ root ก็จะต้องกรอก password
    start Mysql ด้วยคำสั่ง
    cd /usr/local/bin
    ./safe_mysqld &
    
    ทดสอบ run Mysql
    ./mysql
    mysql>status
    mysql>exit
    
    ขั้นตอนการติดตั้ง
    su
    cd /usr/local
    tar xfvz /home/burin/mysql-3.22.32.tar.gz
    ln -sf mysql-3.22.32 mysql
    adduser mysql
    chown -R mysql:root mysql-3.22.32 mysql 
    su mysql
    เป็น su ก็ทำได้ พอเป็น mysql มีปัญหา ว่าไม่สามารถใช้ gcc ที่ถูก lock ตาม 9.52
    cd mysql
    ./configure --with-charset=tis620
    make
    su
    make install
    ./scripts/mysql_install_db
    cd /usr/local
    chown -R mysql:root var
    cd /etc/rc.d/init.d
    cp /usr/local/mysql/support-files/mysql.server mysql
    chmod +x mysql
    /sbin/chkconfig --del mysql
    /sbin/chkconfig --add mysql
    

5.2 วิธีใช้งาน Mysql เบื้องต้น
: เพื่อให้เห็นการทำงานอย่างง่าย ๆ ของ Mysql ก่อนนำไปใช้ในภาษาอื่น
ตัวอย่างข้างล่างนี้จะแสดงการสร้างตาราง แสดงข้อมูล เพิ่ม ลบ และแก้ไข
    ตัวอย่างการใช้งาน Mysql
    [thaiall@www thaiall]$ mysql -u username
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 5 to server version: 3.22.32
    Type 'help' for help.
    mysql> status
    mysql> show databases;
    mysql> use test
    mysql> show tables;
    mysql> create table testf ( 
        -> fld1 char(20),
        -> fld2 char(20),	
        -> fld3 integer(3),	
        -> fld4 date );	
    mysql> select * from testf;
    mysql> insert into testf (fld1, fld2, fld3)
        -> values ('tom','dang',5 );	
    mysql> insert into testf (fld1, fld2, fld3) value ('siri','maru',19);
    mysql> select * from testf;
    +------+------+------+
    | fld1 | fld2 | fld3 |
    +------+------+------+
    | tom  | dang |    5 |
    | siri | maru |   19 |
    +------+------+------+
    2 rows in set (0.00 sec)
    mysql> exit
    

5.90 การเพิ่มผู้ใช้ใน Mysql
: การเพิ่มผู้ใช้ จะทำให้ Databases ที่สร้างขึ้นมีความเป็นส่วนตัว
ในอันที่จริง ถ้าท่านเป็นเจ้าของระบบ และมี user เดียว หรือกำหนดสิทธิให้ทุกคนสามารถเข้าใช้ mysql ได้หมด ก็ไม่จำเป็นต้อง สร้าง user ใน mysql เพราะท่านสามารถสร้าง table ใน test database และใช้งานได้เลย แต่ถ้าสร้าง user ขึ้นมา ทุกคนที่จะใช้ database จะต้องมี user และ password ที่ถูกต้อง แต่ถ้าสร้างใน test ใคร ๆ ที่เข้าระบบได้ก็จะเข้าส่วนของ mysql ได้ .. ก็พิจารณาตามกรณีไป สำหรับใน server นี้จะให้ทุกคนเข้าใช้ mysql ได้เต็มที่ .. และขอให้เป็นไปตามความเหมาะสม
หากไม่กำหนด user ก็สามารถใช้งานได้บางประการ แต่อาจไม่ทั้งหมด เมื่อกำหนด user ได้แล้ว ก็สามารถใช้งานตามขอบเขตของ database ที่กำหนดได้ แต่เรื่องที่สำคัญอีกประการหนึ่งก็คือ การกำหนดรหัสผ่านให้กับ root มิเช่นนั้น อาจมีคนเข้าไปกำหนด ซึ่งไม่เป็นการดีแน่ ซึ่งคำสั่งสำหรับกำหนดรหัสผ่านของ root ของ mysql คือ /usr/bin/mysqladmin -u root password helloisinthai ควรทำเมื่อติดตั้ง Mysql เสร็จสิ้นตามขั้นตอน 5.1
    ข้อมูลเกี่ยวกับการเพิ่มผู้ใช้
    http://www.mysql.com/doc/A/d/Adding_users.html
    MySQL root user, and the root user must have the insert privilege for the
    mysql database and the reload administrative privilege. Also, if you have
    changed the root user password, you must specify it for the mysql commands
    below.
    You can add new users by issuing GRANT statements:
    shell> mysql --user=root -phelloisinthai
    mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
           IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
    mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%"
           IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
    mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
    mysql> GRANT USAGE ON *.* TO dummy@localhost;
    
These GRANT statements set up three new users:
monty
A full superuser who can connect to the server from anywhere, but who must use a password 'some_pass' to do so. Note that we must issue GRANT statements for both monty@localhost and monty@"%". If we don't add the entry with localhost, the anonymous user entry for localhost that is created by mysql_install_db will take precedence when we connect from the local host, because it has a more specific Host field value and thus comes earlier in the user table sort order.
admin
A user who can connect from localhost without a password and who is granted the reload and process administrative privileges. This allows the user to execute the mysqladmin reload, mysqladmin refresh, and mysqladmin flush-* commands, as well as mysqladmin processlist . No database-related privileges are granted. (They can be granted later by issuing additional GRANT statements.)
dummy
A user who can connect without a password, but only from the local host. The global privileges are all set to 'N' -- the USAGE privilege type allows you to create a user with no privileges. It is assumed that you will grant database-specific privileges later.
6.1 slowaris.labs.pulltheplug.com
: Server ที่แข็ง และมี user:guest password:guest ให้เข้าไปลอง telnet ได้
ระบบนี้เป็น Solaris 5.8 ของ Sun ลองเข้าไปแล้วใช้อะไรได้หลายอย่าง ผมว่า ว่าง ๆ h cker ลองเข้าไปดูก็ได้นะครับ เป็น server ที่แนะนำโดย Mr.RobiUz Miora (robiuz@yahoo.com)
จดหมายด้านล่างนี้เขาแนะนำผมหลายอย่างเช่น ให้ใช้ OpenBSD ดีกว่า .. อ่านแล้วก็ได้ข้อคิดหลายอย่าง

    Date: Wed, 13 Jun 2001 06:10:30 -0700 (PDT)
    From: Mr RobiUz Miora [robiuz@yahoo.com]
    Dear Webmaster.
    As I see www.isinthai.com.. I know you install SSH in your server and restrict user behavior.In my opinion, you miss in 2 point....First as in my previous e-mail, restrict shell isn't good idea.You want to make "Open host" not "Restrict host", Right. But now I see your host like a seller machine,choose the drink and get it. Not doing anything much more. If you don't want any user or h cker I suggest you to disable and Close it.And second , SSH is good for every host but it's duty is ENCRYPT , AUTHENTICATION and AUTHORIZATION... it's not protect your system directly.
    If you go to hacking website that provice Exploit Code you'll see very very hole in REDHAT , Slackware and others software. I know it's difficult to patch all.... So..LET'S TRY TO CHANGE OS TO SAFER ONE... As I know OpenBSD has less bug than REDHAT or Slackware...You can Change to..
    It's my opinion.Decider is YOU....

    FYI.
    RobiUz
    คุณ robiuz mail มาอีกครั้ง และแนะนำว่าสามารถเปลี่ยน shell ของตนเองด้วยคำสั่ง chsh ผมลองแล้วก็เป็นตามนั้นจริง แต่การใช้คำสั่งนี้ ก็ต้องออกไปที่ shell ปกติ ซึ่งผมก็ยังหาจุดออกไปไม่เจอ เพราะปัจจุบันจำกัด account ด้วย Restrict shell
    Date: Thu, 26 Jul 2001 01:26:07 -0700 (PDT)
    From: Mr RobiUz Miora
    To: webmaster@isinthai.com
    Subject: change shell

    Dear webmaster,
    All users can change his/her shell by chsh command so demo user change his shell himself.Don't worry he doesn't gain root.
    regard,
    RobiUz
    คนแบบนี้สิครับ ที่โลกต้องการ

6.2 academic.cmri.ac.th
: Server ที่แข็งมากอีกตัว เป็นของคนไทย ได้รับการแนะนำจาก apples@chek.com
ที่นี่เขียนบทความการลง Server ไว้น่าอ่าน และละเอียดดีครับ และคุณ apples@chek.com ยังให้คำแนะนำผมมากมาย เช่นเรื่องของ restricted shell ที่หาอ่านที่ไหนก็ไม่รู้เรื่อง มาได้ code และวิธีของท่านนี่หละครับ จึงสำเร็จเรื่อง restrict ได้ด้วยดี
ผมรู้จักคุณ apples@chek.com เพราะเขาเป็นผู้คอยให้คำแนะนำ และช่วยเหลือ ผู้คนใน wwwboard ของหลายที่ เช่น linux.thai.net เป็นต้น
http://academic.cmri.ac.th/downloads.php/howto/
http://academic.cmri.ac.th/downloads.php/howto/Apache%20Module.txt
ภาพนี้จากจอที่ telnet login ของ academic.cmri.ac.th (ผมเองก็ไม่มี account)

       Welcome to Academic Services Machine
                     ,
                  ,  ;:._.-`''.
                ;.;'.;`      _ `.
                 ',;`       ( \ ,`-.
              `:.`,         (_/ ;\  `-.
               ';:              / `.   `-._
             `;.;'              `-,/ .     `-.
             ';;'              _    `^`       `.
            ';;            ,'-' `--._          ;
   ':      `;;        ,;     `.    ':`,,.__,,_ /
    `;`:;`;:`       ,;  '.    ;,      ';';':';;`
                 .,; '    '-._ `':.;
               .:; `          '._ `';;,
             ;:` `    :'`'       ',__.)
           `;:;:.,...;'`'
         ';. '`'::'`''  .'`'
       ,'   `';;:,..::;`'`'
   , .;`      `'::''`
   ,`;`.


academic login:

6.71 จดหมายแจ้งปรับปรุงระบบ ของ se-ed.net
: มีรายละเอียดหลายอย่างเขียนได้ดีมาก น่าอ่านเป็นกรณีศึกษา
    Date: 2 สิงหาคม 2544
    From: webmaster@se-ed.com (Sanyapong Kridakarn)
    
    เรียนสมาชิกทุกท่าน
     
        หลังจากที่ทางซีเอ็ดให้บริการฟรีอีเมล์ และฟรีโฮมเพจมา 1 ปี ขณะนี้ก็ถึงเวลาที่ทางทีมงานขอแจ้งให้ทราบว่า จะมีการปรับปรุงเปลี่ยนแปลง
    เซิร์ฟเวอร์เพื่อให้สามารถให้บริการทุกท่านได้มากขึ้น และเพิ่มเติมความสามารถให้รองรับการใช้งานของทุกท่านได้มากกว่าเดิมในทุกๆ ด้าน
        ทุกท่านคงพอจะทราบว่า ช่วงสองเดือนที่ผ่านมา เซิร์ฟเวอร์เกิดปัญหาหลายครั้ง โดยเกิดขึ้นจากหลายสาเหตุ เช่น
    - พื้นที่ฮาร์ดดิสก์ 60 GB ของเซิร์ฟเวอร์เหลืออยู่ประมาณ 2 GB เท่านั้น
    - การถูกถล่มด้วยเมล์จำนวนมาก (mail bomb) จากสมาชิก SE-ED.net ของเราท่านหนึ่ง
    - ข้อจำกัดของ Linux ที่โฟลเดอร์หนึ่งจะมีไฟล์และโฟลเดอร์ได้เพียงประมาณ 32,000 โฟลเดอร์เท่านั้น ทำให้ไม่สามารถรองรับสมาชิกเพิ่มเติมได้
    - ข้อจำกัดเว็บเซิร์ฟเวอร์ Apache ที่รองรับผู้ใช้พร้อมกันได้เพียง 256 ราย และทำให้เซิร์ฟเวอร์ทำงานช้ามากสำหรับผู้ใช้รายที่ 257 ขึ้นไป เมื่อคอมไพล์โปรแกรม 
    Apache ใหม่เพื่อให้รองรับผู้ใช้ได้มากขึ้นจนกระทั่งเกิด Error โดยไม่คาดหมาย ทำให้ไม่สามารถอ่านเมล์ผ่านเว็บและเปิดเว็บเพจของสมาชิกได้ประมาณ 2 วัน
    - การระบาดของไวรัส Sircam
    - ล่าสุด ระบบไฟล์บนฮาร์ดดิสก์ของลินุกซ์เกิดขัดข้อง จนเซิร์ฟเวอร์หยุดทำงาน ต้องไปแก้ไขเครื่องถึงอินเทอร์เน็ตประเทศไทย ระบบทุกอย่างหยุดทำงาน~ 24 ชั่วโมง
    
        ต้องขออภัยทุกท่านที่เกิดปัญหาและข้อติดขัดเหล่านี้ ทีมงานจะทุ่มเทอย่างเต็มที่เพื่อให้เกิดเหตุการณ์เหล่านี้น้อยที่สุด และในกรณีที่เกิดเหตุสุดวิสัย
    ก็จะรีบแก้ไขให้บริการทุกอย่างกลับมาเป็นปกติอีกครั้งในเวลารวดเร็วที่สุดเท่าที่จะทำได้
         ขณะนี้ทางทีมงานกำลังอัปเกรดเครื่องใหม่ และเปลี่ยนแปลงระบบปฏิบัติการที่ใช้ดังนี้
     ตารางเปรียบเทียบเซิร์ฟเวอร์ใหม่และเก่า
    New ServerCurrent Server
    CPUDual Pentium III 933 MHzPentium III 650 MHz
    MotherboardIntel Server Board STL2Intel Server Board L440GX
    Memory1 GB512 MB
    Harddisk300 GB60 GB
    OSWindows 2000 Advanced ServerRedhat Linux 6.2
    Web serverApache 1.3.20 for WindowsApache 1.3.20
    นอกจากนี้จะยังมีระบบไฟร์วอลล์เพื่อป้องกันระบบให้ปลอดภัยจากการโจมตีและการแฮกได้มากขึ้น     เนื่องจากเราต้องเปลี่ยนระบบปฏิบัติการ ทำให้ต้องเปลี่ยนระบบรับส่งอีเมล์ใหม่ทั้งหมด * ท่านที่ใช้ Outlook หรือ Eudora ไม่ต้องปรับเปลี่ยนใดๆ ทั้งสิ้น เนื่องจากเมล์เดิมจะได้รับการจัดเก็บไว้ในเครื่องของสมาชิกอยู่แล้ว * ท่านที่ใช้การอ่านเมล์ผ่านเว็บเบราเซอร์ จะไม่สามารถอ่านเมล์เดิมได้ เพราะระบบใหม่จะเสมือนการสร้างตู้จดหมายขึ้นมาใหม่ทั้งหมด (ทีมงานจะจัดระบบให้สามารถตรวจสอบเมล์ในระบบเดิมได้ โดยจะเก็บเมล์เหล่านี้อีกระยะหนึ่ง เพื่อให้ท่านสามารถ Forward เมล์เหล่านั้นไป เก็บไว้ในระบบใหม่ได้) สำหรับวันเวลาที่จะดำเนินการเปลี่ยนแปลงระบบจริงๆ นั้น จะแจ้งให้ทุกท่านทราบในโอกาสต่อไป (คาดว่าจะอยู่ในช่วงสัปดาห์นี้) ในช่วงที่ดำเนินการเปลี่ยนระบบจริงนั้น อาจเกิดข้อขัดข้องอยู่บ้าง ทีมงานจึงขออภัยล่วงหน้าถ้าเกิดกรณีดังกล่าวขึ้น และหวังว่าทั้งหมดนี้ เพื่อให้บริการที่ดีที่สุดสำหรับสมาชิกทุกท่าน

6.72 thcity.com (เปลี่ยน Linux เป็น Windows)
: Free hosting ที่ถือได้ว่าเร็วที่สุดแห่งหนึ่งของเมืองไทย ผมเองก็ใช้บริการ เพราะประทับใจในความเร็ว และ datatransfer ปีละ 900 บาท
    ข้อมูลจากเว็บหน้าแรกของ thcity.com เมื่อ 1 ตุลาคม 2545
    ศูนย์ พิษณุโลก.com เราได้เปิด Free Hosting ขึ้นมาครั้งแรกในปี 2542 ความตั้งใจคือหวังแค่เพียงว่า ให้นักเรียนนักศึกษา ในจังหวัดพิษณุโลกเราได้มีที่ฝึกฝนฝีมือในการทำโฮมเพจเพื่อพัฒนาบุคลากรภายในจังหวัด ให้เที่ยบเท่ากับเมืองใหญ่ๆ จากที่เราเป็นเพียงศูนย์เล็กๆ การดูแล Server และข้อมูลจึงยังไม่ดีเท่าที่ควร จึงทำ ให้ข้อมูล ศูนย์หายไปบ้าง ปิดไปบ้าง แต่ วันหนึ่งเราจะโตเที่ยบเท่ากับ Hosting ทั่วๆ ไป (ความหวังสูงสุด)
    หลังจากได้เปิด Thcity ขึ้นมาเป็น Free Hosting แล้ว ก็มีสมาชิกทั่วประเทศเข้ามาขอกันเป็นจำนวนมาก User ของเราเคยมากถึง 20,000 กว่า ในต้นปี 2544 แต่ ข้อมูลได้ศูนย์หายหมดเนื่องจาก เปิดเครื่องขึ้นมา ติดที่ Scan Disk เราปล่อยให้ Scan ไป 3 วัน ก็ได้แค่ 21 %เราจึงจัดสินใจทำใหม่ แต่การทำใหม่ในครั้งนั้น ไม่สมบูรณ์ เหมือน ครั้งแรก เนื่องจาก ทีมงานเรามีงานมากกว่าเดิม จึงมิได้ให้ความสำคัญกับ Free Hosting เท่าที่ควร จนมาถึง กลางปี 2545 ที่ผ่านมา เริ่มทำขึ้นมาใหม่เป็น Server Linux เราตั้งความหวังไว้ว่าจะทำ ให้ดีเหมือนเดิม เปิดได้เพียง 6 เดือน เท่านั้นก็ต้องปิดไปเนื่องจาก ทีมงานเราไปเก่ง Linux เท่าที่ควร ทำให้ Security ไม่ดีพอ
    เปิดใหม่ครั้งนี้ ด้วยความสามารถของ NTFS และ IIS 5 ทำให้ทีมงานพิษณุโลก.com เรามั่นใจเท่าที่ควร ที่เราจะบริการ Free Hosting ให้ดีกว่าครั้งที่ผ่านมา ขอประกาศเปิด Free Hosting ครั้งใหม่ ณ วันที่ 1 ตุลาคม 2545 อย่างเป็นทางการ ถึงแม้ว่าระบบจะยังไม่สมบูรณ์ เท่าที่ควร แต่เราจะพัฒนาจน เต็มความสามารถ เลยทีเดียว (ข้อมูลเก่าท่านยังอยู่ครบ แต่อยู่ใน Linux อยู่ จะเปิดให้เข้ามา Load กลับคืนไป เร็วๆ นี้ )

7.1 วิธีใช้โปรแกรม FTP ส่งแฟ้มเข้าเครื่อง isinthai.com
: file transfer protocal สำหรับนำแฟ้มใน Pc ส่งเข้าเครื่อง server isinthai.com ซึ่ง server ตั้งอยู่ที่วิทยาลัยโยนก เมื่อส่งเข้าแล้ว จะทำให้คนทั่วโลกสามารถเปิดข้อมูลที่ท่านส่งเข้ามาได้ แต่ถ้าไม่ส่ง ท่านจะเป็นผู้เดียวที่เห็นข้อมูลของท่าน และวิธีที่ผมใช้เป็นวิธีพื้นฐานที่ windows ทุกเครื่องทำได้ แต่ถ้าเป็นมืออาชีพ เขาจะไปใช้ ws_ftp หรือ cute_ftp เพราะทำงานแบบ graphic ซึ่งผมไม่แนะนำสำหรับมือสมัครเล่น เพราะจะต้องไป download โปรแกรมมายุ่งยาก วิธีที่ผมจะเสนอ ปกติใช้ได้กับทุกเครื่อง ท่านสามารถพิมพ์ตามนี้ได้เลย
การใช้คำสั่ง ftp -i www.hypermart.net จะทำให้ใช้ mput หรือ mget โดยไม่ขึ้น prompt ถามแต่ละแฟ้ม ทำให้ upload หรือ download รวดเดียวได้แฟ้มทั้งหมด
    รูปแบบคำสั่งของ FTP ใน DOS
    FTP [-v] [-d] [-i] [-n] [-g] [-s:filename] [-a] [-w:windowsize] [-A] [host]
      -v             Suppresses display of remote server responses.
      -n             Suppresses auto-login upon initial connection.
      -i             Turns off interactive prompting during multiple file transfers.
      -d             Enables debugging.
      -g             Disables filename globbing (see GLOB command).
      -s:filename    Specifies a text file containing FTP commands
      -a             Use any local interface when binding data connection.
      -A             login as anonymous.
      -w:buffersize  Overrides the default transfer buffer size of 4096.
      host           Specifies the host name or IP address of the remote host to connect to.
    
      สิ่งที่ต้องเตรียมการก่อนปฏิบัติ
    1. มี host name ที่อนุญาต และไปสมัครไว้แล้ว ทราบชื่อ host ที่ยอมให้ upload เช่น www.isinthai.com
    2. มี username ในตัวอย่างนี้ใช้ demo
    3. มี password ในตัวอย่างนี้ใช้ istest
    4. มีแฟ้มข้อมูลที่เป็น text เช่น index.html, friend.htm
    5. มีแฟ้มข้อมูลที่ไม่เป็น text เช่น face.jpg, hello.gif, wow.doc
    6. มีข้อมูลทั้งหมดเตรียมไว้ในแผ่น diskette เช่น drive A
    7. ถ้างง ไปอ่านเพิ่มที่ http://www.thaiall.com/learn/useftp.htm
    เปิด msdos และ cd c:\windows (ถ้ามีแฟ้มใน server ต้องการ copy ออกมาก็ให้ใช้ get)
    C:\WINDOWS>ftp.exe
    ftp> open www.isinthai.com
    Connected to www.isinthai.com.
    220 www.isinthai.com FTP server (Version wu-2.6.0(1) Fri Jun 23 09:17:44 EDT 2000
    0) ready.
    User (www.isinthai.com:(none)): demo
    331 Password required for demo.
    Password:
    230 User demo logged in.
    ftp> lcd c:\isinthai
    Local directory now C:\isinthai
    ftp> ascii
    200 Type set to A.
    ftp> hash
    Hash mark printing On (2048 bytes/hash mark).
    ftp> put index.html
    200 PORT command successful.
    150 Opening ASCII mode data connection for index.html.
    ########################################
    226 Transfer complete.
    162886 bytes sent in 0.39 seconds (417.66 Kbytes/sec)
    ftp> lcd a:\
    ftp> ascii
    ftp> put index.html
    ftp> put friend.htm
    ftp> bin
    ftp> put face.jpg
    ftp> put hello.gif
    ftp> put wow.doc
    ftp> bye
    221-You have transferred 1601416xx bytes in 6 files.
    221-Total traffic for this session was 160563xx bytes in 6 transfers.
    

7.2 การติดตั้งโปรแกรม .rpm ใน Redhat เพิ่มเติม
: เมื่อมีโปรแกรมใหม่ ๆ ที่ต้องการติดตั้งเพิ่ม และเป็นโปรแกรมสกุล rpm
    ตัวอย่างการติดตั้ง rblcheck
    download จาก http://prdownloads.sourceforge.net/rblcheck/rblcheck-1.5-1.i386.rpm?download ซึ่งมี mirror site หลายแห่งให้เลือก
    เมื่อได้โปรแกรมนี้มา ก็ติดตั้ง และทดสอบใช้ แต่โปรแกรมนี้เป็นเพียงโปรแกรมใช้ตรวจสอบ ip อย่างง่าย ๆ ว่า ip นั้นอยู่ใน list ของ server ที่เราต้องการตรวจสอบ หรือไม่ ถ้ายอมรับ server ตัวนั้น และเพิ่มชื่อ server ในแฟ้ม /etc/mail/sendmail.mc เพื่อทุกครั้งที่มีคนส่ง e-mail เข้ามา ตัว server ของเราจะตรวจสอบ หากไม่เป็น blacklist ก็จะส่งให้กับสมาชิกในระบบได้
    1. download โปรแกรม เช่น #lynx http://umn.dl.sourceforge.net/sourceforge/rblcheck/rblcheck-1.5-1.i386.rpm
    2. ติดตั้ง #rpm -i rblcheck-1.5-1.i386.rpm
    3. จะมีโปรแกรมไปเก็บใน /usr/bin โปรแกรมที่เราได้คือ rblcheck
    4. ตัวอย่างการใช้
      #rblcheck -s orbs.dorkslayers.com 127.0.0.1 (จะพบว่าไม่มีปัญหา)
      #rblcheck -s orbs.dorkslayers.com 127.0.0.2 (จะพบว่ามีปัญหา และอยู่ใน black list)
      #rblcheck -s dev.null.dk 127.0.0.2 (จะพบว่ามีปัญหา และอยู่ใน black list)
      #rblcheck -s bl.spamcop.net 127.0.0.2 (จะพบว่ามีปัญหา และอยู่ใน black list)
      #rblcheck -s relays.osirusoft.com 127.0.0.2 (จะพบว่ามีปัญหา และอยู่ใน black list)
      #rblcheck -s relays.visi.com 127.0.0.2 (จะพบว่ามีปัญหา และอยู่ใน black list)
      #rblcheck -s list.dsbl.org 127.0.0.2 (จะพบว่ามีปัญหา และอยู่ใน black list)
      #rblcheck -s relays.ordb.org 127.0.0.2 (จะพบว่ามีปัญหา และอยู่ใน black list)

    5. การใช้โปรแกรมนี้ต้องทดสอบทีละบรรทัด จึงสร้าง shell script เพื่อช่วยให้พิมพ์ครั้งเดียวแต่ ตรวจสอบจาก list ได้ ด้วยการเขียน script ด้วย pico ชื่อ rblcheckx ตัวอย่างคำสั่งสร้างคือ #pico /usr/bin/rblcheckx
    6. สิ่งที่เขียนใน /usr/bin/rblcheckx
      rblcheck -s orbs.dorkslayers.com $1
      rblcheck -s dev.null.dk $1
      rblcheck -s bl.spamcop.net $1
      rblcheck -s relays.osirusoft.com $1
      rblcheck -s relays.visi.com $1
      rblcheck -s list.dsbl.org $1
      rblcheck -s relays.ordb.org $1

    7. ให้ใช้ chmod 755 rblcheckx จึงจะทำให้แฟ้มนี้สามารถทำงานได้
    8. ทดสอบด้วย #rblcheckx 202.28.18.65 และแสดงผลดังข้างล่าง ว่า ip นี้ไม่อยู่ใน black list
      202.28.18.65 not RBL filtered by orbs.dorkslayers.com
      202.28.18.65 not RBL filtered by dev.null.dk
      202.28.18.65 not RBL filtered by bl.spamcop.net
      202.28.18.65 not RBL filtered by relays.osirusoft.com
      202.28.18.65 not RBL filtered by relays.visi.com
      202.28.18.65 not RBL filtered by list.dsbl.org
      202.28.18.65 not RBL filtered by relays.ordb.org
      
    พบในเอกสาร http://www.redhat.com/support/resources/faqs/RH-sendmail-FAQ/book1.html หัวข้อ 3.13 ว่าบางเว็บที่ถูก blocked โดย RBL หากต้องการยกเลิกการ blocked เฉพาะบางเว็บ ให้เพิ่มบรรทัดที่เขียนว่า yourwebsitename OK เพิ่มเข้าไปในแฟ้ม /etc/mail/access แล้วปรับ config ใหม่ตามหัวข้อ 9.78

    บริการตรวจสอบว่า server ถูก blacklist หรือไม่
    1. http://openrbl.org
    2. http://www.moensted.dk/spam/
    3. http://www.spamhaus.org/sbl/index.lasso (Spam black listing)
    4. http://member.se-ed.net/modules.php?op=modload&name=News&file=article&sid=9&mode=thread&order=0&thold=0 (มีรายละเอียด blacklist)

7.3 การติดตั้ง Secure Shell
: เพื่อให้เครื่องเปิดรับการเชื่อมต่อ เข้าไปดูแลปรับปรุงระบบทางไกลได้
: โปรแกรมที่นิยมใช้ติดต่อเข้าไปคือ putty ผ่าน port 22
    คำสั่งที่สำคัญ
    #service sshd status
    #service sshd start
    #chkconfig --level 3 sshd on
    #chkconfig --level 5 sshd on
    #chkconfig --list

8.1 การกำหนดค่าในแฟ้มต่าง ๆ
: เนื่องจาก linux ทำงานแบบ text mode ถึงจะมี graphic ช่วย แต่พื้นฐานก็ยังเป็น text mode
ท่านสามารถใช้โปรแกรม vi หรือ pico ในการแก้ไขตามที่ต้องการได้ ซึ่งในแต่ละแฟ้มจะมีการกำหนดไม่เหมือนกัน และรูปแบบแต่ละแฟ้มก็ต่างกันด้วย สำหรับทีมงานของเราไม่ใช้ผู้ชำนาญ ในหัวข้อนี้จึงนำข้อมูลที่ทดสอบ แล้วใช้งานได้ แต่อาจผิดในทาง Theory ซึ่งอาจก่อผลที่ผิดพลาดในอีกมุมมองหนึ่ง ที่ใด ทราบว่าเรากำหนดอะไรผิดไป ขอได้ชี้แนะด้วย
    
    8.1.1 :: /etc/login.defs
      - ใช้กำหนดว่าเครื่องจะมี account สูงสุดได้เท่าใด - เพราะเลขที่กำหนดประจำตัวผู้ใช้ เริ่มต้นที่ 500 UID_MIN 500 UID_MAX 60000

    8.1.2 :: /etc/security/limits.conf
      # ใช้จำกัดสิทธิของผู้ใช้ # คำสั่งจริงมี 2 บรรทัดล่างสุด # ส่วนที่มี # เป็นคำอธิบายทั้งสิ้น #<domain> <type> <item> <value> # #Where: #<domain> can be: # - an user name # - a group name, with @group syntax # - the wildcard *, for default entry # #<type> can have the two values: # - "soft" for enforcing the soft limits # - "hard" for enforcing hard limits # #<item> can be one of the following: # - core - limits the core file size (KB) # - data - max data size (KB) # - fsize - maximum filesize (KB) # - memlock - max locked-in-memory address space (KB) # - nofile - max number of open files # - rss - max resident set size (KB) # - stack - max stack size (KB) # - cpu - max CPU time (MIN) # - nproc - max number of processes # - as - address space limit # - maxlogins - max number of logins for this user # #<domain> <type> <item> <value> #* soft core 0 #* hard rss 10000 #@student hard nproc 20 #@faculty soft nproc 20 #@faculty hard nproc 50 #ftp hard nproc 0 #@student - maxlogins 4 # # ผู้ใช้ในกลุ่ม users มีเนื้อที่ใน home directory ได้เพียง 1 Mb @users hard rss 1000 * soft core 0

    8.1.3 :: /etc/lilo.conf
      # คู่แข่งของ /etc/grub.conf # เมื่อแก้แฟ้มนี้แล้ว ให้สั่งประมวลผล /sbin/lilo # เพื่อให้การ update แฟ้มข้างล่างนี้เป็นผล สำหรับการ boot ครั้งใหม่ # และครั้งต่อไปที่บูตเครื่องจะ default ไปที่ linux boot=/dev/hda map=/boot/map install=/boot/boot.b prompt timeout=50 default=linux image=/boot/vmlinuz-2.2.14-5.0 label=linux read-only root=/dev/hda5 other=/dev/hda1 label=window

    8.1.5 :: /etc/crontab
      - ตารางเวลาการสั่งประมวลผลโปรแกรม - หากต้องการสั่งงานต้องสร้างแฟ้มในห้อง /etc/cron.daily - แฟ้มที่สร้างให้ใส่คำสั่งได้เลยเช่น /home/radius/runacct - อย่าลืมกำหนด 755 ให้แฟ้มนั้นเช่น chmod 755 runradius SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly # minute (0-59), # hour (0-23), # day of the month (1-31), # month of the year (1-12), # day of the week (0-6 with 0=Sunday)

    8.1.6 :: /etc/default/useradd
      - ในบางเครื่องอาจกำหนดเป็นดังข้างล่างนี้จะสะดวก - และสิทธิของห้องเป็น 700 จึงต้องใช้ script _crt กำหนดสิทธิเป็น 705 - อีกครั้งหนึ่ง จึงจะทำให้เปิดห้องผ่าน www ได้ปลอดภัย # useradd defaults file GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= #SHELL=/bin/bash SHELL=/rbin/menu SKEL=/etc/skel

    8.1.7 :: /etc/inittab
      - ทำให้ Boot ไม่เข้า xwindows โดยแก้บรรทัดหนึ่ง - ที่อยู่ในแฟ้ม inittab เท่านั้นเอง # Default runlevel. The runlevels used by RHS are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) #id:5:initdefault: id:3:initdefault:

8.2 แฟ้มต่าง ๆ ที่ควรรู้จัก
: แฟ้มต่าง ๆ ในระบบมีมากมาย ขอนำมา list ให้เฉพาะที่ทีมงานรู้จัก ท่านสามารถเรียนรู้ได้มากกว่านี้อีกมาก .. ขอเอาใจช่วยครับ
    Group 1: ควร config ได้
    /etc/rc.d/rc.local :: คล้าย autoexec.bat สำหรับผม จะเพิ่มคำสั่ง ifconfig เพิ่ม ip (9.10)
    /etc/named.conf :: กำหนดเงื่อนไขเพิ่มเติมเรื่อง named
    /etc/rndc.conf :: กำหนดเงื่อนไขเพิ่มเติมเรื่อง NS control utility 
    /etc/resolv.conf :: กำหนดว่า nameserver ตัวใดที่จะตีความ ip หรือ domain name ให้
    /etc/httpd/conf/httpd.conf :: กำหนดค่าเกี่ยวกับการบริการ http เช่นกัน
    /etc/sysconfig/network-scripts/ifcfg-eth0 :: กำหนดค่าประกอบ card LAN
    /etc/security/limits.conf :: กำหนดข้อจำกัดให้กับผู้ใช้ ถ้าไม่แก้ ก็ไม่จำกัด
    /etc/php.ini :: กำหนดเกี่ยวกับภาษา PHP เช่น เดิม post_max_size = 8M พอไหมครับ
    /var/run/named :: ใน RH9 ผมต้องเปลี่ยนสิทธิห้องนี้เป็น 777 จึงจะ start named สำเร็จ
    /etc/procmailrc :: กำหนดเงื่อนไขการกรอง e-mail เป็นด่านแรก
    Group 2 : ควรรู้จักไว้
    /etc/crontab :: กำหนดโปรแกรมให้ประมวลผลตามช่วงเวลา แฟ้มนี้เก็บ config หลักของ crontab
    /etc/inittab :: กำหนดการเริ่มต้น ที่จะเข้าสู่ text mode หรือ graphic mode เป็นต้น
    /etc/rc.d/init.d :: ภายในห้องนี้เก็บ shell script ที่ใช้สั่ง ให้มีการทำงานเมื่อเปิดเครื่องไว้มาก
    /etc/named.custom :: ระบุว่า directory ที่เก็บแฟ้มเกี่ยวกับ named เก็บไว้ที่ใด
    /etc/login.defs :: กำหนดจำนวนเลข uid สูงสุด หรือค่าเริ่มต้นของผู้ใช้อีกหลายเรื่อง
    /etc/default/useradd :: กำหนดค่าเกี่ยวกับสมาชิกใหม่เมื่อใช้คำสั่ง useradd
    /etc/syslog.conf :: เก็บข้อกำหนดของบริการ syslog เพื่อใช้ตรวจร่องรอยของบริการต่าง ๆ แต่ใน ntsysv ต้องเปิดบริการ syslog ไว้
    /etc/services :: แสดงเลข socket ทั้งหมดที่เปิดให้บริการ เลขใดมี # หมายถึงปิดบริการ
    /etc/protocols :: แสดงเลข protocol ทั้งหมดที่เปิดให้บริการได้
    /etc/login.defs :: กำหนดหมายเลขสูงสุด และต่ำสุด สำหรับการ assign acccount ใหม่ให้กับ user
    /etc/skel/.bash_profile :: แฟ้มนี้ถูกคัดลอกไปให้ผู้ใช้ เพื่อเป็นค่าเริ่มต้นในการทำงาน
    /etc/sysconfig/hwconf :: เก็บรายละเอียด และข้อกำหนดเกี่ยวกับ hardware มักถูก update โดย kudzu
    /var/log :: เก็บ log ต่าง ๆ 
    Group 3 : ไม่พบในเครื่องที่ผมลง
    /etc/inetd.conf :: ใช้กำหนดการเปิดปิดบริการเช่น finger หรือ telnet เป็นต้น
    /etc/httpd/conf/srm.conf :: กำหนดค่าเกี่ยวกับการบริการ http เช่นกัน
    /etc/httpd/conf/access.conf :: กำหนดค่าเกี่ยวกับการบริการ http เช่นกัน
    /usr/X11R6/bin/startx ::  สั่ง start x windows จาก text mode
    

8.98 การติดตั้ง Linux Redhat
: การติดตั้ง Linux Redhat 2 วิธี คือติดตั้งทั้ง Windows และ Linux หรือติดตั้ง Linux อย่างเดียว เป็นกรณีศึกษาจาก Redhat Linux 7.1
เรียบเรียงโดย :: สุวิทย์ สมสุภาพรุ่งยศ(suwit@yonok.ac.th) ประเสริฐ ประสารยา(prasert@cat.net.th) พงศ์สนิท เดชะบุญ(namagnitman@hotmail.com) สุพจน์ ทูลมาก(supot.toon@chaiyo.com)
การติดตั้ง Redhat Linux สามารถติดตั้งได้ 2 กรณี
    1. กรณีที่ต้องการติดตั้งทั้ง Windows และ Linux ในเครื่องเดียวกัน
    2. กรณีที่ต้องการติดตั้ง Linux อย่างเดียว

    1. ข้อควรทราบก่อนการติดตั้ง Redhat Linux ในกรณีที่ต้องการใช้ระบบปฏิบัติการ 2 ระบบในเครื่องเดียว
    1. ในตัวอย่างต่อไปนี้จะเป็น Harddisk ที่ค่าความจุ อยู่ที่ 40 GB ผมแบ่งเป็น 4 Partition สำหรับใช้ใน Windows จำนวน 2 Partition ( คือ C:,D:) กำหนด FAT 32 และสำหรับติดตั้ง Linux จำนวน 2 Partition (ตอนที่ยังไม่ติดตั้ง Linux อาจจะมองเห็นเป็น Drive E:,F:)
    2. วิธีการแบ่ง Partition ผมใช้วิธี Fdisk จาก Dos (จะใช้วิธีการแบ่ง Partition วิธีไหนก็ได้ตามสะดวก ชนิดของ Partition กำหนดให้เป็น FAT 32 ก่อนก็ได้ แล้วค่อยไปเปลี่ยนชนิดที่จะใช้สำหรับ Linux ในตอนที่เราติดตั้ง)
    3. หลังจากที่ทำการแบ่ง Partition ได้ตามความต้องการแล้วทำการ Format Drive C:,D: ตามลำดับ ส่วน Drive E:,F: สำหรับติดตั้ง Linux ยังไม่ต้อง Format เมื่อทำการ Format เสร็จแล้วก็ให้ทำการติดตั้ง Windows ตามวิธีการติดตั้งจนแล้วเสร็จ
    4. กรณีที่ได้ทำการติดตั้ง Windows ไปแล้ว ก่อนอื่นต้องทำการตรวจสอบว่าเมื่อทำการติดตั้ง Windows ไปแล้วนั้นใช้งานได้ปกติดีไม่มีปัญหาในด้านต่างๆ เช่น การใช้งานในระบบเครือข่าย ค่าสีต่างๆ ของจอภาพ หลังจากนั้นดูว่าใน Harddisk ได้ทำการแบ่ง Partition เป็นกี่ Drive (กรณีที่ไม่ได้แบ่ง Partition ไว้รองรับการติดตั้ง Linux "อาจจะใช้โปรแกรม PartitionMagic จัดการกับการแบ่ง Partition " !!! Windows ต้องการแค่ Partition หรือที่เรียกว่า Drive เพียง Drive เดียว(คือ C: ) แต่ถ้าต้องการเป็น drive สำรองเราอาจแบ่งเพิ่มอีก 1 Partition (คือ D:) ส่วน" Linux" ต้องการ 2 Partition คือ Drive ที่เป็น Linux native และ Linux swap) อันนี้ขึ้นอยู่กับความต้องการของผู้ใช้เอง และความจุของ Harddisk ว่ามีมากน้อยเพียงใด !!!ทางที่ดี ควรแบ่ง Partition ก่อนการติดตั้ง Windows เพราะว่ามันง่ายกว่าการที่จะมาแบ่ง Partition หลังจากที่เราทำการติดตั้ง Windows แล้ว
    5. หน่วยความจำ (RAM)ควรจะมีขนาด สูงกว่า 16 MB ขึ้นไป
    2. การสร้างแผ่น Boot สำหรับติดตั้ง Redhat Linux
    1. ใส่แผ่นซีดีรอมโปรแกรมติดตั้งในไดรฟ์ขณะใช้ระบบปฏิบัติการ DOS แล้วเปลี่ยนไดรฟ์ไปยังไดรฟ์ซีดีรอม เช่น C:\> d:
    2. เรียกใช้โปรแกรม Rawrite สำหรับสร้างแผ่นติดตั้งใน Floppy disk พิมพ์ดังนี้ D:\>dosuntils\rawrite
    3. โปรแกรมจะให้ป้อนชื่อแฟ้มที่ต้องการเขียนลงแผ่น ให้ป้อนดังนี้ D:\Images\boot.img
    4. ใส่แผ่นฟลอบบี้ที่ฟอร์แมตแล้วใส่ในไดรฟ์ A: แล้วกด ENTER
    5. ถ้าเครื่องที่จะทำการติดตั้ง Redhat Linux สามารถทำการบูตจากแผ่นซีดีรอมได้ยิ่งง่ายเลย เพราะปกติผม ติดตั้ง Redhat 7.3 หรือ Redhat 6.0 ก็ตาม ผมจะใช้วิธีการบูตจากแผ่นซีดีรอมซึ่งสะดวกกว่าการบูตโดยการใช้แผ่นฟลอปบี้ดิสก์ (เรื่องการสั่งให้ BOOT จาก CD-ROM เป็น Option ของ CMOS )
    3. การติดตั้ง Redhat Linux (การติดตั้งแบบ None Graphic สำหรับเครื่องที่มีความเร็วต่ำกว่า 400 MHz) เมื่อทำการสร้างแผ่นบูตและทำการบูตแล้ว หรือจะให้บูตจากแผ่นซีดีรอม จะเข้าสู่การกระบวนการติดตั้ง ให้ดำเนินต่อไปดังนี้
    1. เมื่อโปรแกรมติดตั้งทำงาน จะแสดงหน้าจอให้เลือกภาษาที่จะใช้ในการติดตั้งให้เลือก English
    2. เลือกภาษาสำหรับคีย์บอร์ด ให้เลือก US
    3. กรอบแสดงการยินดีต้อนรับ ให้ยืนยันการติดตั้งเลือก OK
    4. เลือกชนิดของการติดตั้งให้เลือก Custom System ซึ่งคุณสามารถกำหนดได้เองว่าจะมี Partitionใดบ้างรวมถึงการเลือกโปรแกรม
    5. ต่อไปเป็นขั้นตอนของการแบ่งPartition สำหรับเครื่องที่ได้ทำการแบ่ง Partition มาดีแล้วแต่ยังไม่ได้กำหนดชนิดของ Partition ก็ให้เลือก fdisk แล้วเลือก Edit เพื่อเข้าไปกำหนดชนิดของPartition ถึงตรงนี้จะเป็นคำสั่งที่ใช้ในการทำงาน ดังตัวอย่าง
        a :: ถ้าเราพิมพ์ m จะเป็น Menu ให้เราเลือกทำงาน
        b :: ผมจะเลือก p เพราะผมรู้ว่า p คือการแสดงรายละเอียดPartitionต่าง ๆที่มีอยู่ จะเห็นว่า
          dev/hda1 คือ Partition ที่ 1 ที่เราแบ่งไว้สำหรับติดตั้ง Windows ค่าของ System=FAT32
          dev/hda2 คือ Partition ที่เป็น Extended ภายในก็จะมี Partition Logic ดังนี้
            dev/hda5 คือ Partition ที่ 2 ที่เราแบ่งไว้สำหรับติดตั้ง Windows ค่าของ System=FAT32
            dev/hda6 คือ Partition ที่ 3 ที่เราแบ่งไว้สำหรับติดตั้ง Linux ค่าของ System=FAT32
            dev/hda7 คือ Partition ที่ 4 ที่เราแบ่งไว้สำหรับติดตั้ง Linux ค่าของ System=FAT32
            ส่วนที่เราต้องเข้าไปแก้ไขก็คือ hda6,hda7 จะเป็นการเปลี่ยนชนิดของ system ให้เป็น linux system
        c :: ถ้าไม่รู้ว่าคำสั่งที่ใช้ในการทำงานให้ กด m เพื่อดูรายละเอียด
        d :: ผมจะเลือก t เพื่อเปลี่ยนชนิดของ System จากนั้นเป็นการเลือก Partition number เราจะเปลี่ยน hda6 จาก FAT32 ให้เป็น Linux native ผมเลือก 6 แล้วกด Enter
        e :: เลือก Hex code ถ้าไม่รู้ให้กด l เพื่อดูรายละเอียด ผมกด 83 เพื่อทำการเปลี่ยน System
        f :: ลองกด p เพื่อดูรายละเอียดของ System เปลี่ยนหรือยัง จะเห็นว่า System เปลี่ยนจาก FAT 32 เป็น Linux
        g :: ทำการเปลี่ยน System ของ hda7 ให้เป็น linux swap โดยกด t เลือก Hex code เป็น 82
        h :: ทำการ Save โดยการ กด W
    6. หน้าจอขึ้น Disk setup จะมี Menu ให้เลือก Done
    7. เลือก Mount Point เพื่อกำหนด Root directory สำหรับการติดตั้ง ให้เลือก hda 6 แล้วกด Enter ในช่องหลัง Mount Point ให้พิมพ์ " / " แล้วเลือก ok
    8. เมื่อทำการเลือกแล้วจะกลับมาที่หน้า Current Disk Partition อีกรอบหนึ่ง เพื่อให้เรายืนยันการกำหนด Mount point อีกครั้งหนึ่ง เลือก Ok
    9. ขั้นตอนต่อไปเป็นการ Format partition ที่กำหนดให้ Mount เป็น Root partition หรือ Root filesystem จะมี Option หนึ่งที่น่าสนใจคือ Check for bad blocks during format นั่นคือการตรวจหา Bad Block ด้วย โดยการ Tab มาที่หน้า Option และกด Space bar แล้วเลือก Ok เพื่อดำเนินการต่อไป
    10. เลือก LILO Configuration ที่ hda1 แล้ว OK ยืนยันอีกรอบหนึ่ง
    11. กำหนดชื่อ HostName เช่น suwit.yonok.ac.th หรือ thaiall.yonok.ac.th เป็นต้น
    12. กำหนด Firewall configuration ใน Security level เป็น Medium ต่อไปสามารถกำหนดใหม่ได้
    13. ใน Option customize เป็นการเลือกใช้ Firewall กับตัวให้บริการ
    14. เลือกชนิดของ Mouse
    15. เลือกภาษาในการ Install
    16. เลือก Time Zone ที่ Asia/Bangkok
    17. กำหนด Root password (อย่างน้อย 6 ตัวอักษร)
    18. Add User สำหรับผู้ใช้บริการ
    19. หน้า Authentication Configuration ให้เลื่อน Tab ไปที่ OK เลยแล้วกด Enter
    20. เลือก Packet ตามต้องการ (ถ้ามีเนื้อที่ Harddisk มากพอให้เลือกหมดเลย)
    21. เลือก Video Card
    22. เข้าสู่กระบวนการเริ่ม Install โดยการ Format
    23. การตั้งค่า Configuration ต่างดูในรายละเอียดต่อไป ใน http://www.isinthai.com
    4. การติดตั้ง Redhat Linux (การติดตั้งแบบ Graphic เหมาะกับเครื่องที่มีความเร็วสูงกว่า 400 MHz ขึ้นไป) เมื่อทำการสร้างแผ่นบูตและทำการบูตแล้ว หรือจะให้บูตจากแผ่นซีดีรอม จะเข้าสู่การกระบวนการติดตั้ง ให้ดำเนินการดังนี้
    1. เมื่อโปรแกรมติดตั้งทำงานจะแสดงหน้าจอให้เลือกภาษาที่จะใช้ในการติดตั้งให้เลือก English
    2. เลือกภาษา Mouse และเลือกภาษาสำหรับคีย์บอร์ด ให้เลือก US
    3. กรอบแสดงการยินดีต้อนรับ ให้ยืนยันการติดตั้งเลือก Next
    4. เลือกชนิดของการติดตั้งให้เลือก Custom System ซึ่งคุณสามารถกำหนดได้เองว่าจะมี Partitionใดบ้างรวมถึงการเลือกโปรแกรม
    5. ต่อไปเป็นขั้นตอนของการแบ่ง Partition สำหรับเครื่องที่ได้ทำการแบ่ง Partition มาดีแล้วแต่ยังไม่ได้กำหนดชนิดของ Partition ก็ให้เลือก Manually partition with fdisk (export only) แล้วเลือก hda เพื่อเข้าไปกำหนดชนิดของ Partition จะเป็นคำสั่งที่ใช้ในการทำงานดังตัวอย่าง

        a :: ถ้าเราพิมพ์ m จะเป็น Menu ให้เราเลือกทำงาน
        b :: ผมจะเลือก p เพราะผมรู้ว่า p คือการแสดงรายละเอียดPartitionต่าง ๆที่มีอยู่ จะเห็นว่า
          dev/hda1 คือ Partition ที่ 1 ที่เราแบ่งไว้สำหรับติดตั้ง Windows ค่าของ System=FAT32
          dev/hda2 คือ Partition ที่เป็น Extended ภายในก็จะมี Partition Logic ดังนี้
            dev/hda5 คือ Partition ที่ 2 ที่เราแบ่งไว้สำหรับติดตั้ง Windows ค่าของ System=FAT32
            dev/hda6 คือ Partition ที่ 3 ที่เราแบ่งไว้สำหรับติดตั้ง Linux ค่าของ System=FAT32
            dev/hda7 คือ Partition ที่ 4 ที่เราแบ่งไว้สำหรับติดตั้ง Linux ค่าของ System=FAT32
            ส่วนที่เราต้องเข้าไปแก้ไขก็คือ hda6,hda7 จะเป็นการเปลี่ยนชนิดของ system ให้เป็น linux system มีวิธีการดังนี้คือ
        c :: ถ้าไม่รู้ว่าคำสั่งที่ใช้ในการทำงานให้ กด m เพื่อดูรายละเอียด
        d :: ผมจะเลือก t เพื่อเปลี่ยนชนิดของ System จากนั้นเป็นการเลือก Partition number เราจะเปลี่ยน hda6 จาก FAT32 ให้เป็น Linux native ผมเลือก 6 แล้วกด Enter
        e :: เลือก Hex code ถ้าไม่รู้ให้กด l เพื่อดูรายละเอียด ผมกด 83 เพื่อทำการเปลี่ยน System
        f :: ลองกด p เพื่อดูรายละเอียดของ System เปลี่ยนหรือยัง จะเห็นว่า System เปลี่ยนจาก FAT 32 เป็น Linux
        g :: ทำการเปลี่ยน System ของ hda7 ให้เป็น linux Swap โดยการ t เลือก Hex code เป็น 82
        h :: ทำการ Save โดยการ กด W
    6. หน้าจอขึ้น Using fdisk อีกรอบ ให้เลือก Next
    7. เลือก Mount point เพื่อกำหนด Root directory สำหรับการติดตั้ง ให้ดับเบิ๊ลคลิกเลือก hda 6 แล้วในช่องหลัง Mount point ให้เลือก " / " แล้วเลือก OK
    8. เมื่อทำการเลือกแล้วจะกลับมาที่หน้า Partition อีกรอบหนึ่ง เพื่อให้เรายืนยันการกำหนด Mount point อีกครั้งหนึ่ง เลือก Next
    9. ขั้นตอนต่อไปเป็นการ Format partition ที่กำหนดให้ Mount เป็น Root partition หรือ Root filesystem ตรงนี้จะมี Option หนึ่งที่น่าสนใจคือ Check for bad blocks during format นั่นคือการตรวจหา Bad Block ด้วย โดยการคลิกที่หน้า Option แล้วเลือก Next เพื่อดำเนินการต่อไป
    10. เลือก LILO Configuration ให้เลือก Install LILO boot record on dev/had Master Boot record เลือก Default Boot Image ไปที่ Dos
    11. กำหนด IP Address ตั้งชื่อ HostName เช่น suwit.yonok.ac.th หรือ mis.yonok.ac.th
    12. กำหนด Firewall Configuration ใน Security Level เป็น Medium ใน Option Customize เป็นการเลือกใช้ Firewall กับตัวให้บริการ
    13. เลือกภาษาในการ Install
    14. เลือก Time Zone ที่ Asia/Bangkok
    15. กำหนด Root Password (อย่างน้อย 6 ตัวอักษร)
    16. Add User สำหรับผู้ใช้บริการ
    17. หน้า Authentication Configuration ให้ Next
    18. เลือก Packet ตามต้องการ (ถ้ามีเนื้อที่ Harddisk มากพอให้เลือกหมดเลย)
    19. เลือก Video Card /Monitor/color pepht/Screen Resolution/Default Desktop/Login Type
    20. เข้าสู่กระบวนการเริ่ม Install โดยการ Format
    21. การตั้งค่า Configuration ต่าง ๆ ดูรายละเอียดต่อไปใน http://www.isinthai.com

8.99 การติดตั้ง Linux Redhat เมื่อแผ่น 2 ใช้ไม่ได้
: นี่คือวิธีหนีปัญหา เพราะจะแก้ปัญหาก็คือหาแผ่น CD ที่ใช้ได้มาให้ได้
    วันหนึ่ง ผมตั้งใจลง Redhat 8.0 ทับไปใน 7.2 โดยไม่สนใจข้อมูลในส่วน Redhat เดิม ส่วนข้อมูล Windows ทั้งหมดต้องการใช้งานอยู่ ก็ลงไปตามปกติ เลือก Package ต่าง ๆ แบบสมบูรณ์ใช้เนื้อที่ประมาณ 1500 Mb เริ่มติดตั้งจากการ boot Redhat 8.0 เมื่อติดตั้งจนจบแผ่นที่ 1 เสร็จ ก็ถามหาแผ่นที่ 2 ปรากฏว่าเครื่องไม่รับแผ่นที่ 2 วิธีแก้ตอนนั้นมีทางเดียวคือปิดเครื่องด้วยการกดปุ่ม power ... หลังจากเปิดใหม่พบว่าเครื่องบูตไม่ได้ตามปกติ แล้วเครื่องผมก็ไม่มีช่องใส่ Drive A ด้วย ขณะนั้นก็ไม่มี CD Windows ที่เป็น Bootable ด้วย .. เสร็จล่ะสิงานนี้
    ถ้าท่านพบเหตุการแบบผม ก็แก้ไขด้วยการ ลง Redhat 8.0 เข้าไปใหม่ แต่ลงแบบไม่ต้องเลือก Package อะไรเข้าไปเลย ระบบจะติดตั้งได้ตามปกติ โดยใช้เนื้อที่ใน Harddisk ประมาณไม่ถึง 500 Mb เพียงเท่านี้ก็เข้าสู่ Text mode ของ linux ได้ตามปกติ
      คำสั่งที่ท่านอาจต้องการทราบเมื่อต้องทำงานใน Text mode กับ CDROM
      mount /dev/cdrom (ใช้หลังจากใส่แผ่น CD เข้าไปในเครื่องแล้ว)
      cd /mnt/cdrom (ใช้เข้าไปใน CD และใช้คำสั่งอื่น ๆ ได้ เช่น ls เป็นต้น)
      cd /mnt/cdrom/RedHat/RPMS (เป็นห้องที่เก็บโปรแกรมต่าง ๆ ใน CD-ROM)
      rpm -i xxx.2.2.1.rpm (ใช้สำหรับติดตั้ง package หรือ โปรแกรมที่ต้องการ)
      ปกติท่านจะดึง CD ออกจากเครื่องไม่ได้ถ้าไม่ใช้คำสั่ง umount
      cd / (เพื่อย้ายตัวเองออกจาก cd จึงจะใช้คำสั่ง umount ได้ มิเช่นนั้นจะบอกว่า busy อยู่)
      umount /dev/cdrom (ใช้เมื่อต้องการดึงแผ่น CD ออก แต่ท่านต้องใช้คำสั่ง)
      ข้อควรทราบเพิ่มเติม (/mnt/cdrom/RedHat/RPMS)
      ติดตั้ง httpd ก่อนจึงจะติดตั้ง php ได้
      ติดตั้ง pine จะทำให้ใช้คำสั่ง pico ได้ (CD#3)
      ติดตั้ง lynx(CD#3) ต้องติดตั้ง indexhtml และ perl-cgi(CD#2)

9.1 กำหนด IP address และ host name
: เพื่อกำหนด ip ให้กับ eth0 (Ethernet card เบอร์แรกคือเบอร์ 0)
    ขั้นตอนการแก้ไข IP และ Host name
    /etc/hosts
    
      127.0.0.1 localhost.localdomain localhost 202.29.78.1 www.isinthai.com isinthai.com www
    /etc/sysconfig/network
      NETWORKING = yes HOSTNAME = yn1 GATEWAY = 202.29.78.254
    /etc/sysconfig/network-scripts/ifcfg-eth0
      DEVICE=eth0 BOOTPROTO=static BROADCAST=202.29.78.255 IPADDR=202.29.78.12 NETMASK=255.255.255.0 NETWORK=202.29.78.0 ONBOOT=yes TYPE=Ethernet
    /etc/resolv.conf
      nameserver 202.29.78.12
    สามารถใช้คำสั่ง setup แล้วเลือก Network Configuration เป็นอีกวิธีหนึ่ง เพื่อเข้าแก้ IP Address ซึ่งจะแก้ไขแฟ้มต่าง ๆ ให้อัตโนมัติ จากนั้นก็สั่ง #/etc/init.d/network restart

9.5 โปรแกรมเพิ่มผู้ใช้ /usr/bin/_crt
: โปรแกรมนี้เป็น shell script สำหรับเพิ่มผู้ใช้อย่างง่าย สร้างด้วย pico และกำหนดให้ประมวลผลด้วย chmod
โปรแกรมนี้ชื่อ _crt ถูกเก็บไว้ในห้อง /usr/bin โดยกำหนดให้ chmod 700 เพื่อให้สั่งประมวลผล shell script ตัวนี้ได้ และการจะใช้โปรแกรมนี้ได้จะต้องกำหนด PATH ไว้ที่ห้อง /usr/bin และ /usr/sbin จึงต้องกำหนด PATH เพิ่มเติม
จากเดิม PATH=$PATH:$HOME/bin (ถ้า admin ไม่แก้ไขให้ก่อนนะครับ)
เป็นใหม่ PATH=$PATH:$HOME/bin:/sbin:/usr/bin:/usr/sbin
ตรวจสอบตัวแปร PATH ด้วยคำสั่ง echo $PATH
ปัญหานี้จะไม่เกิดขึ้น ถ้ากำหนดไว้ในแฟ้ม .bash_profile ในห้อง /etc/skel เพราะเป็นห้องที่เก็บค่าเริ่มต้น
    Version 1: ตัวอย่างโปรแกรมที่ใช้งานอยู่
    #!/bin/bash
    echo Username
    read un
    echo Realname
    read cm
    finger $un
    echo ===============================
    read sure
    RESULT="Error - Try other username again .. "
    EXIST=0
    id $un >/dev/null 2>/dev/null && EXIST=1
    if [ $EXIST = 0 ]; then
    useradd -g users -d /home/httpd/cgi-bin/$un -c "$cm" $un
    chown $un:users /home/httpd/cgi-bin/$un
    chmod 705 /home/httpd/cgi-bin/$un
    usermod -d /home/httpd/cgi-bin/$un $un
    ln -s /home/httpd/cgi-bin/$un /home/httpd/html/$un
    passwd $un
    RESULT="Complete"
    fi
    echo "Add new user : $RESULT"
    
    Version 2: โปรแกรมข้างล่างนี้ใช้กับเครื่องที่ใช้งาน ssi ได้
    #!/bin/bash
    clear
    echo _CRT version 2.June42001
    echo User name
    read un
    echo Real Name
    read cm
    finger $un
    echo =============================== 
    echo Are you ok?
    RESULT="Error - Try other username again .. "
    EXIST=0
    id $un >/dev/null 2>/dev/null && EXIST=1
    if [ $EXIST = 0 ]; then
    read sure
    useradd -g users -d /home/httpd/html/$un -c "$cm" $un
    chmod 705 /home/httpd/html/$un
    passwd $un
    RESULT="Complete"
    fi
    echo "Add new user : $RESULT"
    
    Version 3: โปรแกรมข้างล่างนี้ใช้กับ isinthai.com ในช่วงปิด telnet เพื่อให้ upload ผ่านเว็บ
    เหตุที่ใช้แฟ้มชื่อ password.pl เพราะป้องกันการแอบเปิดดูรหัสผ่าน แล้วแฟ้มนี้ใช้สำหรับบริการ upload (ซึ่งไม่ได้เข้ารหัสไว้)
    #!/bin/bash
    echo Username
    read un
    echo Real name
    read cm
    echo Password
    read password
    finger $un
    echo =============================== 
    echo Are you ok?
    RESULT="Error - Try other username again .. "
    EXIST=0
    id $un >/dev/null 2>/dev/null && EXIST=1
    if [ $EXIST = 0 ]; then
    read sure
    useradd -g users -d /home/httpd/html/$un -c "$cm" $un
    chmod 777 /home/httpd/html/$un
    echo $password>/home/httpd/html/$un/password.pl
    chown nobody:nobody /home/httpd/html/$un/password.pl
    chmod 700 /home/httpd/html/$un/password.pl
    passwd $un
    RESULT="Complete"
    fi
    echo "Add new user : $RESULT"
    

    เจอปัญหาใช้ useradd ไม่ได้เพราะ lock
    มีเรื่องแปลกเกิดขึ้นครับ ทำให้ไม่สามารถเพิ่ม user ได้
    useradd: error locking shadow group file หรืออะไรทำนองนี้
    ไม่แน่ใจว่าเกิดขึ้นเพราะเหตุใด แต่แก้ไขด้วยการลบแฟ้มที่ ls -al *.lock
    หรือที่มีนามสกุลเป็น .lock ในห้อง /etc เช่น passwd.lock group.lock เป็นต้น
    และทุกแฟ้มก็มีค่าเป็น 741 เหมือนกันหมด สันนิฐฐานว่าเป็นเลข ps ที่ทำการ lock ไว้

9.6 โปรแกรมลบผู้ใช้ /usr/bin/_del
: โปรแกรมนี้เป็น shell script สำหรับลบผู้ใช้อย่างง่าย สร้างด้วย pico และกำหนดให้ประมวลผลด้วย chmod
รายละเอียดอ้างอิงจากการเพิ่มผู้ใช้ได้เลย
โปรแกรมนี้ชื่อ _del ถูกเก็บไว้ในห้อง /usr/bin โดยกำหนดให้ chmod 700 เพื่อให้สั่งประมวลผล shell script ตัวนี้ได้
    ตัวอย่างโปรแกรมที่ใช้งานอยู่
    echo Username
    read un
    finger $un
    echo =============================================
    echo If already exist, you can delete this account.
    echo If you are not sure, Please Ctrl-C
    read sure
    echo Ask you again and last time? Ctrl-C if you are not sure.
    read sure
    userdel -r $un
    rm -r /home/httpd/html/$un
    echo complete
    

9.9 แก้ไข aliases ของ user account
: ช่วยกระจาย e-mail ของผู้ใช้ 1 คนไปหลายคน เช่น มีคนส่ง mail ถึง webmaster จะกระจายไปให้สมาชิกได้หลาย ๆ คน
สร้าง account ชื่อ webmaster แล้วแก้ไข /etc/aliases ด้วย pico สำหรับส่ง mail forward ไปยังบุคคลที่เป็น webmaster@isinthai.com หลังแก้ไขแล้วให้ใช้คำสั่ง newaliases เพื่อให้ผลการ update มีผล
หลังใช้ newaliases เมื่อมีคนส่ง mail ถึง webmaster@isinthai.com จะ forward mail ไปให้บุคคล 3 คน พร้อม ๆ กัน ถ้าหากเพิ่มก็เข้าไปแก้ไขแฟ้ม /etc/aliases ใหม่ ก็สามารถกระทำได้
    ขั้นตอน
    #pico /etc/aliases
    
      webmaster:suwit@yonok.ac.th,prasert@cat.net.th,phimine@yonok.ac.th,burin@yonok.ac.th,atichart@yonok.ac.th news: webmaster@yonok.ac.th pattama: pattamageng@hotmail.com chalermchai: chal@yonok.ac.th
    #newaliases
    /etc/aliases: 76 aliases, longest 40 bytes, 801 bytes total

9.10 เพิ่ม IP ใน server ตัวเดียวด้วย IFCONFIG
: เพื่อให้ server 1 ตัวมี ip ได้หลาย ๆ ตัว
เดิมที ไม่ทราบความสามารถนี้ และไม่เคยคิดจะใช้ แต่เมื่อวันที่ 11 เมษายน 2544 เครื่อง Web server และ Radius server เครื่องเดียวกัน เกิดหยุดทำงานในระดับ Media error แถมเป็นเครื่อง sun ที่ผมไม่มี software สำหรับลงใหม่ จึงต้องใช้เครื่อง Redhat 7.2 อีกเครื่องหนึ่งมากู้สถานการณ์ โดยสมมติว่าเครื่องที่ล่มไป มี ip เป็น 202.29.78.2 ผมเพียงกำหนด ip ในเครื่อง Redhat ให้เพิ่ม ip สำหรับเครื่องขึ้นอีก 1 หมายเลข คำสั่งข้างล่างนี้จะทำให้มีผลทันที แต่เมื่อเปิดเครื่องใหม่จะไม่คงอยู่ จึงต้องแก้แฟ้ม /etc/rc.d/rc.local หรือ /etc/rc.d/rc.localโดยเพิ่มบรรทัดข้างล่างนี้เข้าไป ก็เป็นอันเรียบร้อย
สำหรับ Web server ผมต้อง copy ข้อมูลทั้งหมดมาใส่ในเครื่องใหม่จึงจะใช้งานได้ ส่ง radius server ก็ต้อง copy config มาทับ ซึ่งมี 2 แฟ้มคือ users และ clients เพียงเท่านี้ ตัว Modem ก็สามารถติดต่อกับ Radius server ตัวใหม่ได้อย่างไม่มีปัญหา
    /sbin/ifconfig eth0:1 192.168.3.1 เพิ่ม IP ปลอม ก็ทำได้ เพื่อใช้เป็น DHCP server
    /sbin/ifconfig eth0:2 202.29.78.15
    /sbin/ifconfig eth0:3 202.29.78.1
    
    + หลังเปลี่ยนชื่อ hosts และ ip ใน /etc/hosts /etd/sysconfig/network และ /etc/sysconfig/network-scripts/ifcfg-eth0 แล้ว
    + ไม่ต้อง reboot เครื่องก็ได้ แต่ใช้คำสั่ง #/etc/init.d/named restart ได้นะครับ

9.11 เพิ่ม Virtual hosts
: เพื่อให้ server 1 ตัว มีหลายเว็บไซต์
    การทำ Virtual hosts มี 2 วิธี
  1. Name-based virtual hosts (ผมเลือกใช้ตัวนี้ เพราะในเครือข่ายมีจำนวน ip จำกัด)
  2. IP-based virtual hosts (แบบนี้ในสำนักงานแห่งหนึ่งใช้ เพราะมี ip ใช้ไม่จำกัด)

1. Name-based virtual hosts
    เทคนิคนี้ ผู้บริหาร host หลายแห่งใช้ เพราะทำให้ได้ชื่อมากมายตามที่ต้องการในเครื่องบริการเพียงเครื่องเดียว ในวิทยาลัยโยนก ใช้วิธีนี้ เพราะมีผู้ดูแลเพียงไม่กี่คน และมี IP จำนวนจำกัด จึงใช้ server เครื่องเดียว และ IP เบอร์เดียว เช่น 202.29.78.12 เป็นต้น เว็บไซต์ที่ใช้หลักการนี้คือ thaiall.com ที่สมัครใช้บริการของ hypermart.net เมื่อทดสอบ ping www.thaiall.com จะพบเลข ip แต่เมื่อเปิดเว็บตาม ip จะไม่พบเว็บของ thaiall.com เพราะ thaiall.com มิใช่เจ้าของ ip เพียงคนเดียว
    การเพิ่ม Virtual hosts แบบนี้ต้องทำคู่กับการแก้ไขระบบ named ในห้อง /var/named เพื่อสร้าง ip หรือ host name สำหรับเว็บไซต์ใหม่ภายใน server ตัวเดียวกัน เพิ่มในแฟ้ม /etc/httpd/conf/httpd.conf มีรายละเอียดเพิ่มเติมเรื่อง virtual hosts ที่ http://httpd.apache.org/docs-2.0/vhosts/ ตัวอย่างข้างล่างนี้คือการเพิ่มชื่อ http://science.yonok.ac.th เข้าไปใน server ที่บริการ http://www.yonok.ac.th
      มีขั้นตอนดังนี้
    1. แก้ไขแฟ้ม /var/named/db.yonok.ac.th กำหนดให้เครื่องเดียวมีหลายชื่อ
        www     IN  A  202.29.78.12
        science IN  A  202.29.78.12
    2. แก้ไขแฟ้ม /etc/httpd/conf/httpd.conf กำหนดห้องเก็บเว็บ ให้กับชื่อโฮส
        
        NameVirtualHost 202.29.78.12
        <VirtualHost 202.29.78.12>
         ServerAdmin webmaster@yonok.ac.th
         DocumentRoot /var/www/html
         ServerName star.yonok.ac.th
        </VirtualHost>
        <VirtualHost 202.29.78.12>
         ServerAdmin phimine@yonok.ac.th
         DocumentRoot /var/www/html/science
         ServerName science.yonok.ac.th
        </VirtualHost>
        <VirtualHost 202.29.78.12>
         ServerAdmin burin@yonok.ac.th
         DocumentRoot /var/www/html/e-learning
         ServerName e-learning.yonok.ac.th
         <Directory /var/www/html/e-learning>
         Options All
         AllowOverride None
         Order deny,allow
         Allow from all
         Deny from 41.217.0.0/16 
         Deny from 82.0.0.0/24
         AddType text/html .shtml .htm .html
         AddHandler server-parsed .shtml .htm .html
        
         </Directory>
        </VirtualHost>
        
    3. #/etc/init.d/named restart
    4. #/etc/init.d/httpd restart
2. IP-based virtual hosts
    การเพิ่ม Virtual hosts มักทำงานคู่กับ ifconfig และแฟ้มในห้อง /var/named เพื่อสร้าง ip หรือชื่อ host สำหรับเว็บไซต์ขึ้นใหม่ การสร้างเว็บไซต์ใหม่ สำหรับ server ตัวเดียวกัน เพิ่มในแฟ้ม /etc/httpd/conf/httpd.conf มีรายละเอียดเพิ่มเติมเรื่อง virtual host ที่ http://httpd.apache.org/docs-2.0/vhosts/ ตัวอย่างบริการนี้จะพบตาม web hosting ต่าง ๆ ที่ระบุว่า เมื่อใช้บริการ เจ้าของ domain name จะได้ ip ส่วนตัว เป็นต้น
    เทคนิคนี้ ทำให้ประหยัดเครื่องบริการ ในบริษัทที่ผมเป็นที่ปรึกษามี local ip จึงใช้ ip แยก directory ต่าง ๆ ออกจากกัน แต่ใช้ server เพียงเครื่องเดียว เช่น 192.168.16.1 หมายถึงเครื่องสมาชิก 192.168.16.2 หมายถึงเครื่องพนักงาน แต่ทั้งบริษัทมีเครื่อง server เพียงเครื่องเดียว ก็สามารถมี ip สำหรับสมาชิกแต่ละคนได้ ผู้ให้บริการ hosting หลายแห่งก็ใช้วิธีนี้ เมื่อกำหนด virtual host แล้ว ผู้ใช้สามารถเปิดเว็บด้วยตัวเลข หรือตัวอักษรก็ได้ เพราะกำหนดห้องปลายทางที่ต้องการ เช่น http://www.isinthai.com หรือ http://202.29.78.1 เป็นต้น
      มีขั้นตอนดังนี้
    1. แก้ไขแฟ้ม /etc/rc.d/rc.local โดยเพิ่ม /sbin/ifconfig eth0:1 202.29.78.1 อีก 1 บรรทัด
    2. แก้ไขแฟ้ม /var/named/db.202.29.78 โดยเพิ่ม 1 IN PTR www.isinthai.com.
    3. แก้ไขแฟ้ม /etc/httpd/conf/httpd.conf กำหนดห้องเก็บเว็บ ให้กับชื่อโฮส
        <VirtualHost 202.29.78.12>
            ServerAdmin webmaster@yonok.ac.th
            DocumentRoot /var/www/html
            ServerName star.yonok.ac.th
        </VirtualHost>
        <VirtualHost 202.29.78.1>
            ServerAdmin burin@yonok.ac.th
            DocumentRoot /var/www/html/isinthai
            ServerName www.isinthai.com
        </VirtualHost>
        	
        <VirtualHost yoso.yonok.ac.th>
         ServerAdmin webmaster@yonok.ac.th
         DocumentRoot c:\appserv\www\yoso
         ServerName yoso.yonok.ac.th
         <Directory c:\appserv\www\yoso>
         Options All
         AddType text/html .shtml .htm .html
         AddHandler server-parsed .shtml .htm .html
         </Directory>
        </VirtualHost>
    4. #/etc/init.d/named restart
    5. #/etc/init.d/httpd restart
    หมายเหตุ : index.php เป็นแฟ้มที่ใช้แยกห้องตามชื่อที่ส่งเข้ามา เป็นความต้องการพิเศษของโยนก
    
    เมื่อพิมพ์ว่า http://www.yonok.ac.th และ http://www.isinthai.com จะเรียกจุดเดียวกัน แต่ใช้ php แยกห้องให้
    <? if($_SERVER["SERVER_NAME"]=="www.isinthai.com" || $_SERVER["SERVER_NAME"]=="202.29.78.1"){ header("Location: http://".$_SERVER["SERVER_NAME"]."/isinthai/"); } else { header("Location: http://".$_SERVER["SERVER_NAME"]."/main/"); } exit; ?>

9.12 ตัวอย่าง router configuration และการ block port
: config ของ router ทำโดยผู้ดูแลเท่านั้น และมักทำไม่บ่อย บางคน config ครั้งเดียวจบครับ
    เคยมีอาจารย์บางโรงเรียนที่เปิดบริการอินเทอร์เน็ต แล้วยอมให้นักเรียนเล็ก ๆ ของพวกเขาเล่นเกม online ได้ แต่ firewall ปิดการเล่นเกม online ไว้ ทำให้เล่นกันไม่ได้เลย ผมก็เลยหาจากเว็บว่า ragnarok ใช้ port อะไร จะได้เปิดให้นักเรียนได้เล่น เรื่องห้าม ไม่ห้ามเล่น block หรือ ไม่ block ragnarok หรือเกมอื่น ๆ กำลังเป็นที่ถกเถียงกัน เพียงแต่ port ที่ ragnarok เข้าใช้คือ 5000 และ 6900 ซึ่งอ่านได้จาก http://www.ragnarok.in.th/faq_n.html
    # show ip interface brief ใช้แสดงสถานะ FastEthernet ซึ่งเป็นฝั่ง LAN และ Serial0/0 ซึ่งเป็นฝั่ง WAN
    ตัวอย่างการ config router
    c:\telnet router.yonok.ac.th
    username : superman
    password : supergirl
    yonok-router>help
    yonok-router>enable
    Password:
    yonok-router#?
    yonok-router#config terminal
    yonok-router(config)#
    . . . . . . .
    yonok-router(config)#interface Serial0/0
    yonok-router(config)#ip access-group 101 out
    yonok-router(config)#access-list 101 deny tcp host 202.29.78.9 any eq 5000
    yonok-router(config)#access-list 101 deny tcp host 202.29.78.9 any eq 6900
    yonok-router(config)#access-list 101 permit ip any any
    . . . . . . .
    type command by your self
    type no in the front of the command if you want to delete 
    webguide: http://www.cisco.com/en/US/products/hw/switches/ps718/products_command_reference_chapter09186a00800ed9dc.html
    . . . . . . .
    . . . . . . .
    yonok-router(config)#
    yonok-router(config)#exit
    yonok-router#write
    yonok-router#reload
    
    yonok-router#show run Building configuration... Current configuration : 1905 bytes ! version 12.2 service timestamps debug uptime service timestamps log uptime service password-encryption service udp-small-servers service tcp-small-servers ! hostname yonok-router ! aaa new-model ! aaa session-id common enable secret 5 aaaaQT$u.xb5Wxpxk5aaaaaaa enable password 7 aaaa3080aaa ! username superman password 7 aaaa81F1C354aaa ip subnet-zero ! interface FastEthernet0/0 ip address 202.29.78.254 255.255.255.0 speed auto full-duplex no cdp enable ! interface Serial0/0 ip address 202.28.202.74 255.255.255.252 ip access-group 102 in ip access-group 101 out no cdp enable ! router igrp 1 redistribute connected network 202.28.29.0 network 202.29.78.0 ! ip classless ip route 0.0.0.0 0.0.0.0 Serial0/0 ip route 0.0.0.0 0.0.0.0 202.28.29.41 no ip http server ip pim bidir-enable ! access-list 101 deny tcp host 202.29.78.13 any eq ftp access-list 101 deny tcp host 202.29.78.13 any gt 6000 access-list 101 permit ip any any access-list 102 deny tcp any 202.29.78.0 0.0.0.255 eq 135 access-list 102 deny udp any 202.29.78.0 0.0.0.255 eq 135 access-list 102 permit ip any any access-list 103 deny tcp host 202.29.78.18 any eq ftp access-list 103 deny tcp host 202.29.78.18 any gt 2000 access-list 103 permit ip any any dialer-list 1 protocol ip permit dialer-list 1 protocol ipx permit no cdp run snmp-server community public RO banner login ^CC ********************************************************************** * www.yonok.ac.th * ********************************************************************** ^C ! line con 0 line aux 0 line vty 0 4 password 7 aaa385F5A0aaa ! end yonok-router#

    แสดงสถานะการเชื่อมต่อกับอุปกรณ์นอกสถาบันว่า Serial กับ Protocol ปกติหรือไม่ ถ้า Protocol ไม่ up ก็จะ ping ไม่ได้ แต่ถ้า Serial ขึ้น แสดงว่าเชื่อมต่อกับ TOT ได้ yonok-router#show ip interface brief yonok-router#show interface serial0/0 Serial0/0 is up, line protocol is up Hardware is PowerQUICC Serial Internet address is 202.28.202.74/30 MTU 1500 bytes, BW 1544 Kbit, DLY 20000 usec, reliability 255/255, txload 33/255, rxload 37/255 Encapsulation HDLC, loopback not set Keepalive set (10 sec) Last input 00:00:01, output 00:00:00, output hang never Last clearing of "show interface" counters never Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0 Queueing strategy: weighted fair Output queue: 0/1000/64/0 (size/max total/threshold/drops) Conversations 0/12/256 (active/max active/max total) Reserved Conversations 0/0 (allocated/max allocated) Available Bandwidth 1158 kilobits/sec 5 minute input rate 227000 bits/sec, 46 packets/sec 5 minute output rate 203000 bits/sec, 67 packets/sec 25507 packets input, 15405951 bytes, 0 no buffer Received 136 broadcasts, 0 runts, 6 giants, 0 throttles 158 input errors, 40 CRC, 102 frame, 0 overrun, 0 ignored, 16 abort 41777 packets output, 13772824 bytes, 0 underruns 0 output errors, 0 collisions, 21 interface resets 0 output buffer failures, 0 output buffers swapped out 2 carrier transitions DCD=up DSR=up DTR=up RTS=up CTS=up yonok-router#

9.50 ความผิดพลาด
: ถ้าไม่ทำอะไร ก็คงไม่ผิดพลาด ผมทำอะไรหลายอย่างจนพบว่า ความผิดพลาดนั้นเป็นเรื่องปกติ ซึ่งสามารถนำมาเล่าสู่กันฟังได้ดังนี้
  1. linux vga=791 เป็นวิธีเข้า linux แบบ graphic mode เพราะเครื่องผมเป็น notebook ECS 29,900 บาท เมื่อ Boot ด้วย CD ของ Redhat9.0 หน้าจอจะเป็นสีฟ้า ไม่ว่าจะเข้าแบบใด และการเข้าไม่ว่าแบบใด เมื่อเติม vga=791 ก็จะทำให้เข้าสู่ Redhat ได้ไม่มีปัญหาด้านการแสดงผล
  2. imap-2000 เป็นโปรแกรมสำหรับ upgrade imap ตัวเดิม ผมไม่สามารถให้บริการ imap ผ่าน pop จึงต้องใช้ตัวเก่า แต่ก็ไม่รู้วิธีลบออก ผมหาวิธีลบตั้งนาน แต่พอใช้ rpm -e imap โดยไม่ต้องตามด้วย version ก็ลบได้ แล้วลงตัวเก่า ปรากฏว่าให้บริการ ได้ตามปกติ แต่ต้องไม่ปิด hosts.deny นะครับ ผมพยายามเลือกเปิดแล้วไม่สำเร็จ จึงต้องเปิดหมด .. ปัญหาที่ค้างอยู่คือต้องเปิดหมด ไม่รู้จะเลือกเปิดตัวไหน จึงจะให้บริการ pop3 ได้
  3. การคัดลอก passwd, shadow, group จากเครื่องหนึ่งมาใส่อีกเครื่องหนึ่ง พร้อม copy mail และ folder ทั้งหมดมา ปัญหาที่ผมมองข้ามไปคือ account บาง account ในเครื่องเดิมมี uid แบบหนึ่ง หากนำ passwd มาทับ หากไม่ mathch กันกับ user เดิมจะเกิดปัญหา ต้องดูว่ามี account เดิมอะไรที่เคย install โปรแกรม เข้าไป ก็ต้องแก้ไขให้ตรงกันก่อน ในเครื่องเก่า แล้วค่อยย้ายมา
  4. การ upgrade apache ไม่แน่ใจว่าทำไม โปรแกรมจึงไปเรียก /usr/sbin/httpd(เก่า) แทน /home/httpd/bin/httpd(ใหม่) ซึ่งตอนลงครั้งแรกไม่มีปัญหา แต่พอนำโปรแกรม upgrade apache หลังจากลง version ของ apache ใหม่ ก็เกิดปัญหา ผมแก้ไขด้วยการ copy โปรแกรมใหม่ มาทับโปรแกรมเดิม ก็แก้ปัญหาที่ปลายเหตุ ได้ผล
  5. จุดบกพร่องของระบบคือ software มีรอยรั่ว ต้อง upgrade software โปรแกรมมากมายที่ นำมา upgrade อาจใช้ไม่ได้ เพราะมีเงื่อนไข ในการ upgrade โปรแกรมแต่ละตัว โปรแกรมหนึ่งที่ทำให้ผมเสียเวลาไป 2 วันคือ kernel ซึ่งเป็นโปรแกรมสำคัญ มี 2 (i386 และ i686) ตัวที่ผมได้ทดสอบ upgrade แต่ทั้ง 2 ตัวทำให้เครื่องไม่รู้จัก eth0 ผมอาจแก้ปัญหาไม่ตรงจุดก็ได้ ใช้ route หรือ reboot ก็แล้ว ไม่ work สรุปว่า upgrade kernel ด้วยโปรแกรมจากเว็บของ redhat ไม่ได้ครับ แต่โปรแกรมผมอื่น ก็พยายาม upgrade เข้าไป .. น่าจะป้องกันปัญหา h cker ได้ระดับหนึ่ง
  6. Named อยู่ ๆ ก็หยุดทำงานไปเฉย ๆ ผมต้อง stop และ start ใหม่ ตอนนี้ไปได้ bind มา upgrade ไม่แน่ใจว่าสำเร็จหรือไม่ ก็ต้องรอดูกันต่อไป
  7. เคยสั่ง 700 /tmp ซึ่งไม่เกิดปัญหา แต่มาพบว่า การใช้ห้ามใช้ห้อง /tmp จะทำให้ pop ใช้งานไม่ได้ และใช้ pine เปิด mail box ก็จะฟ้องว่าเป็น read only ผมจึงไม่สามารถปิด
  8. ลง apache ใหม่ ใช้เวลาตั้งนานหาวิธีแก้ไข สุดท้ายก็ไม่ได้ เพราะจำไม่ได้ว่าแก้ไขอะไร /etc/httpd/conf/httpd.conf ก็ไม่ได้ backup ไว้แต่แรก สุดท้ายต้อง upgrade ใหม่ด้วยคำสั่ง rpm -U --fource apache-1.3.14..... แต่ก็ไม่ได้ต้องเข้าไปลบแฟ้ม httpd.conf ออกก่อน จึงจะทำการสร้างใหม่ได้
  9. เปิดเว็บโดยใช้ default index.html แล้วมีปัญหา ปัญหานี้แก้ได้ แต่ไม่แน่ใจว่าแก้ถูกวิธีหรือไม่ เพราะเดิม ไม่ว่าส่ง หรือรับ จาก telnet ต้องอ้างถึง host name แต่ผมพอแก้แฟ้ม hosts และ sendmail.cf เพื่อทำให้เป็น default แบบไม่มี host name กลับไปมีผลต่อระบบ web ที่เป็น httpd ถ้าไม่แก้ host จะเข้าเว็บเช่น http://www.yonok.ac.th/mba ได้ พอแก้ hosts โดยนำชื่อออกเช่น 202.29.78.12 yonok.ac.th star จากเดิม 202.29.78.12 star.yonok.ac.th star เป็นต้น ดังนั้นเพื่อให้ได้ทั้งระบบตัด host name และ default ของทุก directory เป็น index.html จึงต้องแยก web server กับ mail server ออกจากกัน พบว่าปัญหามาจากการตัด host เวลาเข้าเว็บจะเหลือเพียง http://yonok.ac.th/mba ทั้งที่พิมพ์ว่า http://www.yonok.ac.th/mba ซึ่ง error message บอกว่า page not found

9.51 ประสบการณ์การถูกโจมตี (Hacked Recording)
: ผลของการถูก hack มีลักษณะตามอาการที่ h cker ต้องการ ไม่ซ้ำแบบกัน
    40. 2549-07-03 อ.อิทธิพล ทดสอบ sniffer ในเครือข่าย ทำให้รู้ว่าเราใช้ Hub และ Mail Server ของเราไม่ป้องกันเหมือนกัน scb.co.th ที่เปิดโอกาสให้โปรแกรม sniffer จับรหัสผ่านที่เชื่อมต่อกับ Server ปัญหาอยู่ที่ Server ปลายทางเช่น Web-based mail ที่ไม่มีบริการ SSL ในการเข้ารหัส จึงเริ่มต้นที่การใส่ SSL เข้าไปใน yn1 และ www ซึ่งเขียนไว้ใน 9.79
    39. 2549-03-27 windows2003 ถูก Hack โดยส่งแฟ้ม index.html เข้ามาแทนหน้าแรก
    แต่ไม่สามารถทับแฟ้มเดิมได้ แฟ้มที่ส่งเข้ามาเป็นมีเจ้าของเป็น IUSER พอกำหนดให้ IUSER เขียนไม่ได้ ก็น่าจะแก้ปัญหาการเข้ามาสร้างแฟ้มได้ในระดับหนึ่ง แต่ที่สำคัญต้องหาว่า เขาส่งแฟ้ม index.html เข้ามาได้อย่างไร เพราะระบบใช้แฟ้ม index.php แต่ IIS กำหนดให้ index.html มี Priority มากกว่า เราสงสัยว่า script ของ moodle.org อาจมีจุดบกพร่องก็ได้
    38. 2548-03-19 windows2003 ถูก hack และ Redhat 9.0 ก็ล่ม
    ประมาณ 11 เมษายน ที่ผ่านมา พบว่า Windows 2003 ถูก hack ผมกับอ.วิเชพ พบว่า server ของเรายิงชาวบ้านไป port 445 ด้วยการใช้ netstat -an และ ftp ของเราก็ถูกปิด และเปลี่ยน เข้าใจว่าเขา remote control เข้ามาลงโปรแกรมต่าง ๆ ไว้ สุดท้ายต้องเลือก basic firewall ของ OS แล้วเปิด service เฉพาะที่ต้องการ ทำให้ไม่ยอมรับการถูก ping และทดสอบใช้โปรแกรม hack เข้าไป ผ่านจุดบกพร่องที่เคยมี ก็เข้าไม่ได้
    Windows2003 ที่มีหลายตัว เป็นทั้ง DHCP และ Web พึ่งติดตั้งใหม่เสร็จไม่ถึงสัปดาห์ แผนการ backup mail server หลัก ก็ไม่ทันได้ใช้ harddisk ที่เคยใช้ backup ก็ถูกนำไปใช้กับงานอื่นหมด เพราะ server เสีย จนบูธไม่ขึ้น จึงตัดสินใจลงใหม่ และพิมพ์ user name ใหม่หมด .. และเป็นโอกาสที่ได้ update หลาย ๆ เรื่องในเว็บเพจหน้านี้อีกครั้ง
    37. 2547-11-15 เครื่อง class.yonok.ac.th เปิดจากภายนอกไม่ได้
    ปัญหานี้ไม่น่าเกิดขึ้น แต่ผมปล่อยเรื้อรังมานาน ประเด็นของปัญหาคือ เปิดเว็บของ server ตัวนี้ผ่าน proxy ไม่ได้ เช่นผู้ใช้จาก 1222 หรือในโรงเรียนต่าง ๆ ที่มี proxy ขวางอยู่ เพราะการเข้าผ่าน proxy จะส่งคำขอเป็น random port เข้า web server เพราะเป็น server ที่เปิดในองค์กรได้ แต่เปิดจากข้างนอก บางองค์กรไม่ได้ จากการตรวจสอบอย่างจริงจัง ก็พบว่า router มีความสามาร block port ที่มากกว่า 3000 แล้ว ทีมงานเคยกำหนดข้อจำกัดนี้กับ ip ของเครื่อง class.yonok.ac.th เมื่อเอาออก ปัญหานี้ก็หมดไป
    36. 2547-10-19 ส่ง e-mail จากโยนก เข้า ISP รายหนึ่งไม่ได้
    ทดสอบใช้ #telnet post.xxx.co.th 25 แล้ว server ของ ISP รายนั้นไม่ตอบกลับมา หลังจากพยายามติดต่อทีมงานของเขาเกือบครึ่งเดือน จึงทราบว่าขนาด banner ที่ตอบกลับมาก ถูก block ระหว่างทาง พอเขาเปลี่ยนขนาด banner ก็สามารถส่ง e-mail ไปถึง SMTP server ของเขาได้ ทางคุณยอด ซึ่งเป็นทีมงานได้ให้ข้อมูลกับผมว่า สิงคโปร์เทเลคอม เคย block package ขนาดนี้ ผลการใช้ traceroute post.xxx.co.th พบ router ที่ต้องผ่านไปหลายตัว จึงต้องไปหาว่า router ตัวไหนของใคร เป็นคนจำกัด package ขนาดเท่านี้บ้าง .. และผมก็ไม่มีความสามารถมากพอที่จะอธิบาย ผู้ดูแล router แต่ละตัว ทาง ISP จึงอาสาจะไป clear ให้
    #traceroute post.loxinfo.co.th
    traceroute to post.loxinfo.co.th (203.146.237.154), 30 hops max, 38 byte packets
    1 door.yonok.ac.th (202.29.78.254) 0.682 ms 0.674 ms 0.717 ms
    2 202.28.29.41 (202.28.29.41) 6.826 ms 4.458 ms 3.469 ms
    3 atm-0-0-0.700.R01.MUA.uni.net.th (202.28.28.129) 18.444 ms 13.924 ms 14.145 ms
    4 202.28.28.18 (202.28.28.18) 15.069 ms 19.641 ms 16.107 ms
    5 202.129.63.82 (202.129.63.82) 14.641 ms 14.266 ms 15.081 ms
    6 cor36-G-cor22.csloxinfo.net (210.1.46.35) 14.843 ms 15.029 ms 14.958 ms
    7 cor35-G-cor22.csloxinfo.net (210.1.46.34) 15.403 ms 16.626 ms 14.658 ms
    8 post.loxinfo.co.th (203.146.237.154) 15.064 ms 15.687 ms 14.859 ms

    35. 2546-12-22 Uni.net.th ล่มในส่วนของขาอออกต่างประเทศ เพราะสาย fiber ขาดในทะเลอีกแล้ว
    uni.net.th แจ้งว่าถ้าสถาบันใดเปิด net ในประเทศไม่ได้ ให้แก้ไขแฟ้ม /etc/named.conf ส่วนขาออกต่างประเทศ ถ้ารอบริษัทที่ LA แก้อาจใช้เวลา 5-7 วัน ขณะนี้กำลังขอทาง กสท. เพื่อใช้ขอเชื่อมต่อขาออกนอกประเทศชั่วคราว ถ้าได้ก็จะให้บริการใน spedd ที่ต่ำในระยะสั้นนี้ก่อน สำหรับแฟ้ม /etc/named.conf ที่มีตัวอย่างให้แก้ไข สำหรับสถาบันที่มีปัญหาการเปิดเว็บในประเทศไม่ได้ เป็นดังนี้
    zone "th" in {
    type forward;
    forward first;
    forwarders { 202.28.0.1; };
    };

    34. 2546-12-17 Server ล่มเพราะ Harddisk มีปัญหา ใช้ fsck ก็ไม่ได้ จึงต้องลง HD ตัวใหม่
    HD ที่ backup ไว้ก็ใช้ไม่ได้ จึงต้องลง RH9.0 แล้ว copy ห้องต่าง ๆ เข้า HD ใหม่ จากนั้นก็ใช้ dd backup เข้า HD อีกตัวหนึ่ง ปัญหาที่พบใหญ่มี 2 ปัญหาคือ ระบบบริการ free webhosting โดยฐานข้อมูล user เดิมใช้ไม่ได้ พอติดตั้งใหม่ ก็ได้ แสดงว่าโปรแกรมของ cyberscript.net ไม่เหมาะกับการ copy ข้าม HD อีกปัญหาหนึ่งคือรับ mail จาก server ภายนอกไม่ได้ พอตรวจสอบก็พบว่า sendmail.mc กำหนดเรื่อง procmail แต่ใน HD ใหม่ไม่ได้ใช้ procmail จึงรับฉบับที่มาจากต่างเครือข่ายไม่ได้
    33. 2546-11-10 เข้า Linux server แบบ Single mode จาก Grub menu
    ครั้งนี้ไม่ได้ถูกใคร hack เพราะติดตั้ง 9.0 แล้วปัญหาต่าง ๆ น้อยลงมาก แต่สิ่งที่อยากเล่าให้ฟังคือ การ hack ตนเอง เพราะครั้งหนึ่งทีมงานได้ติดตั้ง RH9.0 โดยเลือก Grub เป็นตัวเริ่มต้นเข้าระบบ ปัญหาคือลืมรหัสผ่านของ root วิธีแก้ใน Redhat รุ่นเก่าคือ การกดปุ่ม ALT-X และพิมพ์ linux single ก็เข้าเป็น root ได้แล้ว แต่สำหรับ Grub จะต้องกดปุ่ม e
    เมื่อพบ kernel (hd0,0)/vmlinuz root=/dev/hda8 devfs=mount hdb=ide-scsi
    ให้เปลี่ยนเป็น kernel (hd0,0)/vmlinuz root=/dev/hda8 devfs=mount hdb=ide-scsi single แล้วกด g ก็จะเข้า single mode ในฐานะ root ได้
    32. 2545-11-31 DNS server 6.2 ถูก hack ผ่าน ftp
    เนื่องจากมีแผนเปลี่ยน upgrade DNS server จึงเปิด ftp เพื่อดึง mail ทั้งหมดลง server ตัวใหม่ แต่ปรากฏว่า h cker เข้ามาตอนตี 1 และเปลี่ยนรหัสผ่านของ root พร้องกับปิด ssh ทำให้ผมไม่สามารถปล่อย server ตัวนี้ต่อไปได้ ต้อง upgrade โดยด่วน
      เมื่อตรวจสอบแล้วผมสิ่งผิดปกติบางส่วนดังต่อไปนี้
    1. แฟ้ม /etc/rc.d/init.d/network ถูกแก้ไขโดยเพิ่มโปรแกรม /usr/bin/ssh2d -q
    2. แฟ้ม network ดังกล่าว เป็น text file แต่ไม่สามารถลบ chmod ได้ แม้จะเป็น root
    3. ห้อง /lib/security/.config ถูกสร้างขึ้น และเก็บโปรแกรมร่าง ๆ ที่น่าสงสัยเช่น login และ network เป็นต้น
    4. ประวัติการใช้งานในฐานะ root ไม่มีใน .bash_history เพราะถูกลบและเปลี่ยนด้วยคำสั่ง #ln -s /dev/null /root/.bash_history
    ftp ftpd6246 211.206.199.98 Fri Dec 27 00:08 - crash (07:34)
    ftp ftpd5616 211.96.24.84 Thu Dec 26 18:54 - crash (12:48)
    31. 2545-10-31 เครื่อง isinthai.com จากความผิดพลาด มิใช่ถูก hack
    หลังจากติดตั้งโปรแกรม RedHat 8.0 เรียบร้อยแล้ว ก็จะ backup โดยใช้ ghost แต่แทนที่จะเป็นการ backup กลับเป็นการ restore เพราะสลับกันระหว่างตัวแม่กับตัวลูก ทำให้ข้อมูลทั้งหมดหาย .. จึงเป็นประสบการณ์ว่า การ backup ในครั้งต่อไปต้องระวังให้ดี
    30. 2545-10-21 ได้รับแจ้งว่า server ของผมส่ง worm ออกไป จาก noc-auto@skyrr.is
    จึงต้องเข้าไปตรวจสอบ ปิดบริการต่าง ๆ และเปลี่ยน OS เป็น RH8.0 โดยขณะนี้เปิดเฉพาะ network และ httpd เท่านั้น จากส่วน setup, system services พร้อมเข้าไปศึกษาวิธีลบ worm ตัวนี้จาก http://www.f-secure.com/v-descs/slapper.shtml
    จดหมายอีกฉบับหนึ่งที่มีข้อความคล้ายกัน มาจาก Newyork university โดยเครื่องที่ส่งการโจมตีออกไปเป็นเพื่อเครื่อง Windows 98 ของธุรการในหน่วยงานหนึ่งเท่านั้น แก้ไขโดย format ใหม่ก็ไม่มีอะไรเกิดขึ้นอีก
    Date: Sun, 20 Oct 2002 16:39:06 GMT
    From: Network Operation Center Skyrr <noc-auto@skyrr.is>
    Subject: Portscan from 202.29.78.1
    
    Possible slapper worm infected host on your network. My timezone is GMT 0.
    
    More info about slapper worm and how to remove it on
    http://www.f-secure.com/slapper/
    This is an automated message please reply to noc@skyrr.is for more info
    
    Snip from log:
    
    Oct 20 06:12:53 pix2 %PIX-2-106006: Deny inbound UDP 
    from 202.29.78.1/2002 to 212.30.215.186/2002 on interface ytra
    Oct 20 06:54:27 pix2 %PIX-2-106006: Deny inbound UDP 
    from 202.29.78.1/2002 to 212.30.215.186/2002 on interface ytra
    Oct 20 13:11:11 pix2 %PIX-2-106006: Deny inbound UDP 
    from 202.29.78.1/2002 to 212.30.215.186/2002 on interface ytra
    =================
    To remove this virus
    Delete : 
    
    /tmp/.uubugtraq
    /tmp/.buqtraq.c
    /tmp/.bugtraq
    And upgrade OpenSSL to be 0.9.6e or above
    Date: Tue, 12 Nov 2002 16:49:02 -0500 (EST) From: Stephen Tihor <scan-alerts@nyu.edu> Subject: Scan from 202.29.78.51 On Tuesday, November 12, from 12:58 AM until 12:58 AM EST (GMT -0500) we detected a scan coming from 202.29.78.51, which does not have a reverse mapping in the DNS but which you administer. This IP Address scanned the netbios-ns ports of New York University's network (128.122.0.0/16). Sample router net flow data showing the event is attached. This is consistent with well-known security exploits, so we have contacted you in hopes you can look into this, find out who was doing the scanning and why, and take steps to prevent it in the future. Please let us know what you find out. The APNIC WhoIs database lists burin@yonok.ac.th as the primary contact for this system. If you are not the appropriate person to handle this matter, please pass this message along to the correct network contact. (It may also be useful to go to http://www.fr1.cyberabuse.org/whois/?page=change and update the prefered contact.) Thank you for your assistance. Stephen Tihor Senior Network Security Analyst Network and System Security Team New York University security@nyu.edu Flow Termination Time - Source Addr Dest Addr Prot S-Port D-Port Tue Nov 12 00:58:16 2002 - 202.29.78.51 128.122.168.0 UDP 1027 netbios-ns Tue Nov 12 00:58:16 2002 - 202.29.78.51 128.122.168.1 UDP 1027 netbios-ns

    29. 2545-09-30 ผมได้รับ mail จากผู้ศึกษา Linux เชิงลึกท่านหนึ่ง
    mail ให้ข้อมูลผมเกี่ยวกับระบบของ isinthai.com ว่ามีจุดบกพร่องอะไร และต้องแก้ไขอย่างไร ทำให้ผมต้องแผน upgrade จาก RH7.2 เป็น RH7.3 อีกครั้ง โดยข้อความในจดหมายของนักพัฒนาท่านนี้มีดังนี้
    สวัสดี ครับ ผมชื่อ ธนดล รามสงฆ์ หรือ นก นะครับ พอดี ได้อ่าน บทความที่ http://www.isinthai.com  ซึ่งชอบมากเลย คงเป็นตัวอย่างที่ดี กับเพื่อนๆ คนอื่น ส่วนที่ชื่อชอบคือ การแนะนำ คำสั่งเบื้องต้น อ่ะครับ และพอดี ได้อ่าน เรื่องราวของ server ตัวนี้ โดน hack ถึง 28 ครั้ง ทำให้ผมสนใจ ว่าเพราะอะไร ทำไมถึงโดนเยอะ ขนาดนั้น
    ส่วนที่ผม E-mail มานี้ เพื่อมาแจ้ง ความบกพร่อง ของ openssl ของ www.isinthai.com ของทีมงานคุณครับ ที่ได้ มีจุดอ่อน อยู่ที่ openssl ครับผม ซึ่งจะทำให้ คนที่เจาะเข้ามา สามารถ เป็น user apache ได้ และสามารถจะกลาย มาเป็น root ภายหลังได้ด้วยการ ใช้ local exploit อีกครั้งหนึ่ง ซึ่ง ตามที่ผมได้ทดลองในเวลา 20.25 วันที่ 29 กันยายน 2545 แล้ว ผม ก็ สามารถ มาเป็น user apache ได้ครับ และสามารถใช้คำสั่งต่างๆ ได้ทั่วไป และ ขึ้นมาเป็น root ในภายหลังได้ แต่ผมไม่ได้ทำ backdoor อะไรไว้หรอกครับ เพราะไม่อยากเสียแบบดีๆ เช่นนี้ไป เลย แจ้ง กลับมาเพื่อทราบครับผม ปล. ผมคาดว่า น่าจะมีคนอื่นเข้าได้ก่อนผม ครับ เพราะ เห็นว่ามี process bnc รันอยู่ ที่ /var/tmp  ครับ แต่ผมไม่ได้ลบออกครับ เพราะต้องการให้ทางทีมงาน ตรวจสอบ จุดบกพร่อมด้านอื่น ด้วยครับ
    สำหรับ การแก้ไข คือ update apache version ที่ใหม่กว่านี้ และ ติดตั้ง openssl ที่ตัวใหม่กว่า 0.96 ครับ ซึ่งจริงๆ ผมอยากแนะนำว่า ให้ติดตั้ง apche แบบแยกต่างหากครับ ไม่ควรติดตั้ง จาก rpm ที่ มากับแผ่น ครับ เพราะจะสามารถ ควบคุมอะไรได้ง่ายกว่านี้ครับผม อีกทั้ง ( จากความรู้สึกผมเอง ) เพียงแต่ว่า การ config ครั้งแรก อาจจะลำบากนิดนึง ครับผม สำหรับ url ที่เกี่ยวข้อง ได้แนบ มาให้ข้างใต้แล้วครับ
    http://www.cert.org/advisories/CA-2002-27.html
    http://online.securityfocus.com/bid/5362
    http://online.securityfocus.com/bid/5364
    ปล สุดท้าย ถ้าให้ดี ควร update openssh ด้วยครับ เพราะตัวนี้ ก็มีจุดบกพร่อง สามารถให้คน มา brute หา key สำหรับ root ได้เช่นกันครับผม และ ถ้าเป็นไปได้ ควรใช้ os ตัวอื่น เช่น mandrake หรือ slackware ดีกว่าครับ เพราะใน config พื้นฐานของ os สองตัวนี้จะจำกัด สิทธิ ของ file ไว้เข้มงวด มากครับ ถึงแม้ mandrake จะ ปรับมาจาก redhat ก็ตาม
    และสุดท้ายนี้ ขอเอาใจช่วย ทีมงาน เพื่อเปิดให้ ผู้อื่นมาใช้งาน เวบฟรี ของไทยเพื่อเกิดประโยชน์ต่อไปอีกครับ
    ธนดล รามสงฆ์
    Tanadon Rarmasong 
    http://www.linux-cdr.com

    28. 2545-05-25 หลังจากผมลง Redhat 7.2 ในเครื่อง yn3 ให้เป็น web server
    ในวันศุกร์ที่ 24 h cker ก็เข้ามาในวันเสาร์หลังจาก หายหน้าไปนานมาก เขา hack ระบบได้จริง ๆ เพราะสามารถเพิ่ม user ใน /etc/passwd และในเครื่องนี้ผมปิดบริการเกือบทั้งหมดแล้ว เหลือที่เปิดอยู่ก็คือ xinetd จึงได้ปิดไป
    ผมทราบว่าระบบผมถูก hack เพราะทาง neways.com.my แจ้งให้ทราบว่าเขาถูกโจมตี ผมแค่เปิด xinetd เพียง 3 วันก็มีคนมาใช้เครื่องไป hack คนอื่นได้แล้ว ผมตรวจเครื่องอื่นในระบบ ยังปกติ ไม่มีอาการของการถูก hack แต่ประการใด
    Date: Sat, 25 May 2002 21:37:16 -0800 (GMT+8)
    From: James Loh [jamesloh@neways.com.my]
    To: webmaster@yonok.ac.th
    Subject: Hack attempts
    I am the system administrator of 202.187.249.50 and www.neways.com.my You have an IP address 202.29.78.14 (yn3.yonok.ac.th) which is attempting to hack my servers.The log below is in Malaysian time (GMT +0800). Pls investigate.
    202.187.249.50
    Attempt from 202.29.78.14 (yn3.yonok.ac.th) to in.ftpd at Sat May 25
    14:30:47 MYT 2002Attempt from 202.29.78.14 (yn3.yonok.ac.th) to in.ftpd at Sat May 25
    14:30:48 MYT 2002Attempt from 202.29.78.14 (yn3.yonok.ac.th) to in.ftpd at Sat May 25
    14:30:49 MYT 2002Attempt from 202.29.78.14 (yn3.yonok.ac.th) to in.ftpd at Sat May 25
    14:30:49 MYT 2002
    www.neways.com.my
    May 25 14:12:54 mail xinetd[17589]: refused connect from 202.29.78.14
    May 25 14:12:54 mail xinetd[17589]: refused connect from 202.29.78.14
    May 25 14:12:54 mail xinetd[17589]: FAIL: ftp libwrap from=202.29.78.14

    27. 2545-03-26 loxinfo แจ้งให้เราทราบว่า server ของเราสร้าง spam
    แนะนำให้ทำ relay ตรวจสอบแล้วพบว่าในเว็บมีหน้าเว็บที่ h cker เข้ามาสร้างจึง save screen ไว้ดู [หน้าเว็บที่ถูกกล่าวใน spam] ส่วนอีกปัญหาไม่แน่ใจว่าเกิดจากอะไร คือ login เข้าไปไม่ได้ จึงไป copy login ที่มีการ backup ไว้มาแทน /bin/login ก็ใช้งานได้ตามปกติ และได้ปิด /etc/hosts.deny เป็น all:all
    26. 2544-09-17 ทีมงานของ isinthai.com ไปอ่านบอร์ดของ http://www.kapook.com/hilight/2207.html
    ว่าเว็บของ http://www.malaysiaevents.com ถูก Water overflow เปลี่ยนหน้าเว็บเป็น หน้าใหม่ ซึ่งเดิมเขาเคย hack isinthai.com และอีกหลายเว็บในไทย
    การเป็น h cker นั้น ควร hack เข้าไปแล้ว บอกว่าระบบมีจุดผิดพลาดอย่างไร และออกมาโดยไม่ทำความเสียหาย แต่ water overflow ทำเป็นการกระทำเหมือนการก่อการร้าย เพราะเข้าไปแล้วเอา ธงชาติของประเทศไปเกี่ยวข้อง
    การ hack ก็คือการแสดงออกว่าตนเองมีความรู้ ผมว่ามีวิธีมากมาย ที่จะแสดงออก ในทางที่สร้างสรรค์ การแสดงออกในความรู้ของตนเองแบบนี้ เป็นความคิดที่ผิด และดูไม่มีค่าอะไร เพราะเมื่อรู้ว่าระบบปฏิบัติการตัวหนึ่งมีจุดด้อย และก็ใช้ความรู้เดิม ๆ นี้ไป hack เครื่องอื่น ที่มีจุดผิดพลาดเหมือนเดิม เป็นการใช้ความรู้เพื่อทำลายอย่างเดียวจริง ๆ เพราะถ้าเป็นผม จะ hack เข้าไปแล้ว mail ไปบอก webmaster ถึงข้อบกพร่อง ที่เว็บนั้นมีอยู่ พร้อมบอกวิธีการแก้ไข .. น่าจะเป็น h cker ที่สร้างสรรค์กว่า ที่ทำอยู่นี้มาก
    25. 2544-09-15 Mr RobiUz Miora [robiuz@yahoo.com] mail มาแจ้งให้ผมทราบว่า การออกจาก Restrict shell ไปเป็น shell ธรรมดาทำอย่างไร
    ทำให้ผมสามารถปิดการออกไปยัง shell ปกติได้อีกครั้ง เดิมเขาจะเข้าไปที่ ncftp แล้วก็พิมพ์ว่า !/bin/sh เพียงเท่านี้ก็ออก shell ได้แล้ว ถ้าต้องการเปลี่ยน shell ของตนถาวรก็พิมพ์ว่า chsh เท่านั้นเอง .. ขณะนี้ผมปิด ncftp แล้วเพราะลองไปเปลี่ยน 700 ให้ bash ก็ไม่ได้ จะทำให้เข้า Restrict shell ไม่ได้
    24. 2544-09-13 ผมได้รับจดหมายจากหนังสือพิมพ์ฉบับหนึ่ง(มต.) สงสัยว่า บุคลากรใน isinthai.com เป็น h cker
    โดยแจ้งว่าเว็บของเขาถูก Hack และฝากชื่อ Water overflow ไว้ เมื่อเข้ามาเปิดเว็บของ isinthai.com แล้วเห็นชื่อนี้อยู่ จึงเข้าใจว่าเป็นเจ้าหน้าที่คนหนึ่ง ที่ทำเว็บ isinthai.com ซึ่งจริง ๆ แล้วผมเองก็ไม่ทราบว่า h cker ผู้นี้คือใคร แต่ถ้าได้อ่านในหัวข้อ 9.51 หัวข้อย่อยที่ 7 ก็จะทราบว่า Water overflow คือใคร
    Water overflow คือ h cker ที่เข้ามาเจาะระบบ Server ของพวกเรา ที่เคยใช้ Sun SparcV และ Linux6.2 ทุกตัวของเรา เมื่อช่วงมีนาคม 2544 ซึ่งเป็นช่วงปิดภาคเรียน และพอมีเวลาศึกษา Linux อย่างจริงจัง หลังจากศึกษา และปรับปรุงระบบอยู่พักหนึ่ง ก็ไม่แน่ใจว่า ผม upgrade ระบบดีขึ้น หรือเขาเบื่อที่จะ hack แล้ว จึงหันไปเจาะที่อื่นบ้าง ผมทราบจากผู้ถูก hack อีกท่านหนึ่ง ซึ่งดูแลเครื่อง NT อยู่ในคณะ ของสถาบันแห่งหนึ่งในพิษณุโลก จึงรู้ว่า h cker ผู้นี้ hack ได้ทั้ง SunOS, Linux และ NT
    น่าตกใจที่ Server ทุกตัวในปัจจุบัน ที่ไม่ได้จ้าง Sysadministrator มานั่งเฝ้าเครื่องเพียงอย่างเดียวตลอดเวลา และมี OS ที่ไม่ upgrade จะมีช่องให้ h cker เจาะได้ ผมอ่านจาก securityfocus.com ว่าเกือบทุกเดือน จะมีคนพบจุดบกพร่องของระบบปฏิบัติการ ซึ่งเป็นช่องทางที่ h cker เข้าไปได้ ขนาด NT เองก็ยังมีจุดบกพร่อง เพราะสิงหาคม 2544 ก็พึ่งพบว่า code red สามารถเข้าไปในจุดบกพร่องของ NT ได้ .. จึงมั่นใจไม่ได้เลยว่า ระบบที่แข็งแกร่งที่สุดในปัจจุบัน จะแข็งแกร่งตลอดไป
    23. 2544-07-26 ผมได้รับ mail จาก Pattara Kiatisevi [ott@thailinux.gits.net.th] เข้าใจว่าเป็นผู้ดูแล linux.thai.net
    เขาเข้าใจว่าผมพยายาม hack เข้าไปที่ server ของเขา ผมเองเป็น root แต่ไม่ได้ทำ เข้าใจว่ามี h cker เข้ามาในระบบของผมได้สำเร็จ แล้วก็ telnet เข้าไปในระบบของเขา โดยใช้ account pawee เข้าไปใน linux.thai.net .. ท่านสามารถ hack เข้ามาเป็น root ได้ กรุณาบอกผมด้วยว่าจะปิดได้อย่างไร ขอเป็นวิทยาทานนะครับ
    Date: Thu, 19 Jul 2001 17:55:44 +0700 (ICT)
    From: Pattara Kiatisevi [ott@thailinux.gits.net.th]
    To: webmaster@www.isinthai.com
    Subject: Don't try to hack again.

    To Administrator
    About 15 July later, I found intruder attempt to connect my server (linux.thai.net) from your host but I don't care about it because intruder can't login.
    In 18 july, my important files is diappeared and there are many file named ".root" leave back. When I run it as root, it's display protected method. thank you about .root .
    Please don't hack me again.
    if you try to hack again, I 'll ban all of your domain 202.29.78.*
    Pattara Kiatisevi
    Thai linux working group
    mailto : ott@linux.thai.net
    cat /var/log/secure
     Jul 15 00:32:14 linux in.ftpd[16466]: refused connect from root@202.29.78.1
     Jul 15 00:32:15 linux in.ftpd[16466]: refused connect from root@202.29.78.1
     Jul 15 00:32:15 linux in.ftpd[16466]: refused connect from root@202.29.78.1
     Jul 15 00:32:16 linux in.ftpd[16466]: refused connect from root@202.29.78.1
    last
     pawee    pts/0        www.isinthai.com Wed Jul 18 23:45 - 23:49  (00:04)
     pawee    pts/0        www.isinthai.com Wed Jul 18 23:45 - 23:59  (00:13)
     ott      pts/0        gw-41.wh.uni-stu Wed Jul 18 20:49 - 23:51  (04:02)
     ott      pts/0        gw-41.wh.uni-stu Wed Jul 18 19:37 - 19:53  (00:16)
    

    22. 2544-07-20 : นักศึกษาของผมคนหนึ่ง มาบอกว่ามีคนส่งโปรแกรมมาให้
    เขาลองเอาโปรแกรมนั้นเปลี่ยนรหัสผ่าน ในระบบ RH6.2 ก็สามารถทำได้ แต่เขาไม่ใช่คนที่สามารถเปลี่ยน Shell ของ demo เพราะผมเชื่อว่าการเปลี่ยน Shell ของ demo จะต้องใช้ความสามารถของ Root ซึ่ง h cker แสดงผมให้ผมเห็นว่าเขาเปลี่ยนได้แล้วจริง ๆ จึงทำให้ผมต้องหันไปหา Redhat Linux 7.2 เพราะน่าจะเป็นระบบที่ปลอดภัยกว่าเดิม
    21. 2544-07-19 : h cker เข้ามาอีกแล้วครับ
    แต่ผมไม่แน่ใจว่าเข้าเจาะมาเป็น Root ได้ไหม เพราะอาการที่เกิดในครั้งนี้คือการเปลี่ยน Title ของเว็บ ซึ่งใช้ user demo เข้าไปเปลี่ยนในจุดที่เหมาะสมก็ทำได้ และอีกอาการหนึ่งคือการเปลี่ยนรหัสผ่านของ demo ซึ่งผมได้ทำการปิดบริการ passwd แล้ว แต่เขาก็ยังเปลี่ยนรหัสผ่านได้อีก .. จึงตัดสินใจเปิด perl และ php เพราะต้องการทดสอบบริการ mail และต้องการทดสอบดูว่า หลัง patch ใหม่แล้ว h cker จะสามารถ h cker เข้ามาเป็น root ได้หรือไม่ เพราะผลการ hack ในครั้งนี้อาจไม่จำเป็นต้องเป็น root ก็ทำได้ 20. 2544-07-12 : มีข้อความขึ้นที่ host ตัวหนึ่ง ทั้งที่ได้ upgrade Redhat 7.2 จนหมดแล้ว
    อาจเป็นเพราะเปิดบริการมากไป จึงตัดสินใจปิด named และ hosts.deny เป็น all:all เปิดเฉพาะ ftp เท่านั้น ส่วน host อีกตัวหนึ่งที่ไม่ได้เป็น web service ผมก็ได้ปิด httpd ไปด้วย ntsysv ข้อความที่ผมเห็นที่หน้าจอ console แต่ไม่ทราบว่าถูก hack หรือไม่ ทั้ง ๆ ที่ใช้ chkrootkit.com เช็คแล้วก็ไม่พบ worm, sniff หรือ vulnerable เลย สำหรับ message ที่พบ คือ
      eth0 : Transmit timeout, status 0d 2000 media 08 eth0 : Tx queue start entry 10831 dirty entry 10827

    19. 2544-07-08 : วันนี้ผมไม่แน่ใจว่า h cker hack ระบบได้หรือไม่
    เพราะผมได้ปิดบริการ perl และ php พร้อมการปิด shell ทำให้โปรแกรม .sniff ที่เขาส่งเข้ามา อาจไม่สามารถประมวลผลขึ้นได้ เพราะหาอาการของการถูก hack สำเร็จไม่พบ และที่เครื่องดับไปอาจไม่ใช่ฝีมือของ h cker เพราะเครื่องที่ใช้เป็นแบบไฟกระชากแล้วหลับไป ต้องปลุกด้วยมือครับ
    18. 2544-07-03 : Server ถูก hack ได้มาหลายวันแล้ว
    เขาเปลี่ยน named และ aliases แบบไม่ให้ผมรู้ เพราะเปลี่ยนแล้ว restart จากนั้นก็เปลี่ยนกลับเหมือนเดิม ผมไปตรวจสอบก็ไม่พบอะไรผิดปกติ ต้อง restart อีกทีหนึ่งจึงปกติ และเป็นช่วงที่ผมพยายายม upgrade Redhat6.2 ก็ทำเอาเหนื่อย เพราะ upgrade แล้วเครื่องใช้งานไม่ได้ หาวิธีอยู่หลายวัน จนวันนี้ตัดสอนใจปิดบริการต่าง ๆ ดูว่า เขาจะเข้าได้ไหม เช่น perl และ php เพราะอย่าง se-ed.net ยังไม่ได้ให้บริการแบบเต็มที่ ผมทดสอบด้วยคำสั่งเรียก unix command หลายที่ปิดครับ แสดงว่ามีการ config ให้ปลอดภัยผมยังไม่ทราบ config สำหรับปิดบริการบางอย่างใน perl จึงปิดไปก่อนเลย
    17. 2544-06-28 : พักนี้ Server จะล่มบ่อย เพราะมีอาการเหมือนถูกยิง
    ด้วยคำว่า eth0: Something Wicked happened! 2008. ซึ่งแต่ก่อนจะขึ้นเพียง 3 ถึง 5 บรรทัด แต่พักนี้ มาติดต่อกันจนติดต่อ server ไม่ได้ บางทีข้อความหยุดแล้วถึงติดต่อได้ก็มี และบ่อยครั้งที่มาประปรายคือ 2 ถึง 5 บรรทัด แล้วก็ไม่มีปัญหาอะไร เข้าไป /var/log/messages จะพบ
    บรรทัดนี้สงสัยถูก hack เพราะใช้ kernel เก่า
    Jun 27 09:11:30 star kernel: eth0: Oversized Ethernet frame spanned multiple buffers, entry 0x1e$
    Jun 27 09:11:30 star kernel: eth0: Oversized Ethernet frame c1ee4ce0 vs c1ee4ce0.
    Jun 27 09:11:30 star kernel: eth0: Oversized Ethernet frame spanned multiple buffers, entry 0x1e$
    Jun 27 09:11:30 star kernel: eth0: Oversized Ethernet frame c1ee4cf0 vs c1ee4cf0.
    Jun 27 09:11:30 star kernel: eth0: Oversized Ethernet frame spanned multiple buffers, entry 0x1e$
    ที่จอ console จะขึ้น eth0: Something Wicked happened! 2008. เต็มจอเลยครับ
    Jun 27 13:23:20 star last message repeated 2 times
    Jun 27 13:23:23 star PAM_pwdb[3875]: (login) session closed for user oir
    Jun 27 13:23:23 star inetd[365]: pid 3874: exit status 1
    Jun 27 13:23:45 star kernel: eth0: Something Wicked happened! 2008.
    Jun 27 13:23:52 star last message repeated 2 times
    Jun 27 13:23:52 star PAM_pwdb[3882]: (login) session opened for user cooper by (uid=0)
    

    16. 2544-06-25 : h cker เข้ามาอีกแล้วครับ
    เข้า server หลาย ๆ ตัวของเรา โดยเฉพาะ DNS เห็นว่าเข้ามาลบ log ทั้งหมด และที่แน่ ๆ ผมพึ่งทราบว่าทำไมจึงขึ้นคำว่า eth0: Promiscuous mode enabled เพราะเขาใช้คำสั่ง #ifconfig eth0 -promisc ซึ่งเป็นการเปิดบริการ port ทั้งหมด ผมลองใช้คำสั่งนี้ในฐานะ user ธรรมดาก็ไม่ได้ (permission deny) และที่แปลกใจคือ ผมปิด shell ของทุกคน เหลือไว้แต่ restriced shell แล้วเขาจะใช้คำสั่งนี้ได้อย่างไร นอกจากรู้รหัสผ่านของ su และเข้ามาทาง ssh ซึ่งก็ไม่น่าเป็นไปได้อีก
    15. 2544-06-22 : วันอาทิตย์ที่ 17 ผมทราบว่าเกิดเหตุผิดปกติ
    เพราะใช้จากที่บ้านแล้วเข้า server ไม่ได้ และอ.ถนอมก็อยู่ที่โยนก ช่วยผมเรื่องย้าย server แต่ก็ไม่สำเร็จ พอเช้าวันจันทร์ จึงทราบแน่ว่า เครือข่าย leased line มีปัญหา พอดูดี ๆ อยู่พักหนึ่ง จึงรู้ว่าไฟเลี้ยงระบบเครือข่ายตก พอเปลี่ยนปลั๊ก ก็ติดต่อทั่วโลกได้เหมือนเดิม แต่ตัว DNS ยังล่ม เพราะเข้าไปดูแล้วเป็นฝีมือของ h cker แน่นอน เขาเข้ามาปิดระบบ DNS ของเครื่องราคาแพง ซึ่งเป็นหนามยอกอกผมมานาน การปิดระบบเขาเปิด telnet ทำให้ขึ้น error ว่า /bin/xlogin ซึ่งผมไม่มีเวลามาแก้ เดิมเครื่องนี้ถูก h cker เข้ามาป่วนหลายครั้ง แต่ผมไม่เคยทำอะไรได้ เพราะไม่มี software ในการติดตั้งใหม่ และถือเป็นรอยรั่วที่ใหญ่ที่สุด ที่ผมไม่สามารถอุดได้มานาน (เหมือนขโมยปีนเข้ามาทางหน้าต่าง แต่เขาไม่ทำลายหน้าต่าง ผมก็ปล่อยไปก่อน แต่ครั้งนี้เขาทำลาย ผมจึงถือโอกาสโบกปูนทับซะเลย .. เปรียบเทียบน่ะครับ) จากความเสียหายครั้งนี้ ถือโอกาสเปลี่ยนเป็น Redhat 7.2 ทั้งระบบ เพราะก่อนเขาจะทำลาย DNS เขาเข้ามา เจาะ isinthai.com ประจำ แต่ไม่แน่ใจว่าทำไมเขาเบนเข็มมา DNS ที่เขาก็รู้ว่าผมรู้ว่าเขาเข้ามาได้ ในเช้าวันจันทร์ ขณะที่กำลังติดตั้งระบบใหม่ h cker ก็ช่างขยันเหลือเกิน เขามาต่อหน้าผมนั่นหละ ด้วย account bin ที่เขาแอบสร้างไว้ เพราะผมนำ server ตัวหนึ่งมาปรับ config ใหม่ ทำให้ผมมีประสบการณ์มากขึ้นมาการ setup server และนำมาปรับหน้าเว็บนี้ ให้ได้อ่านทั่วกัน
    14. 2544-06-11 : เสาร์บ่ายที่ 9 h cker เข้ามาแล้ว
    แต่เป็นวันที่ไม่มีผู้ช่วยจึงต้องปล่อยให้ถึงวันจันทร์ และเครือข่ายทั้งหมดก็หายไป เพราะอุปกรณ์ leased line ขององค์การโทรศัพท์เสีย เช้าวันจันทร์ พบว่าผมไม่สามารถใช้ ftp เข้าเครื่องได้ แม้จะปิด lock แล้ว และที่สำคัญไม่สามารถแก้ไขอะไรแฟ้ม index.html ไม่ว่าจะ chown chmod pico หรือ rm ทั้งที่ใช้ su แล้ว จึงได้ทำการแก้ไขระบบใหม่ตามหัวข้อ 9.52 อีกครั้ง เช่น upgrade เพิ่ม และปิด /tmp เพราะที่ f2s.com เขาก็ปิด
    13. 2544-06-08 : เมื่อวานผมมั่นใจมากว่าเครื่องจะไม่ถูก hack
    เพราะปิดอะไรไว้มากมาย แต่ h cker ก็ทำได้โดยเข้ามาลบ /etc/passwd* /etc/shadow* /etc/hosts.* ทำให้ผมไม่สามารถเข้าระบบตามปกติได้ ต้องเข้าแบบ linux single แต่ผมก็ไม่ทำเพราะคิดว่า เริ่มจาก 0 ใหม่ ดีกว่าเริ่มจาก 10 แล้วไม่แน่ใจว่ามีอะไรรั่วบ้าง วันนี้ผมจึงทำหลาย ๆ อย่างให้ดีขึ้น ซึ่งเขียนรายละเอียดไว้ในหัวข้อ 9.52
    ข้อความที่เห็นที่หน้าจอของ console
    Transmit timeout, status 0D 0000 media 08
    eth0: tx queue start entry 44052 ..
    พบ ip 195.223.23.99 ซึ่งน่าจะเป็น fake ip ที่ส่งเข้ามาจาก italy
    12. 2544-06-07 : ล้างเครื่องใหม่ได้ 2 วัน โดยปิดหมดด้วย tcpwrapper
    แต่ทำให้ใช้ pop ไม่ได้จึงต้องปิดเฉพาะ in.telnetd แต่ปัญหาพบว่า มี h cker เข้ามาส่งแฟ้มเข้าไปใน root ของ web directory ได้ และบางครั้งมีข้อความ ขึ้นที่ console ว่า
    June 6 17:33:42 www Kernel: eth0: Something Wicked happened! 2008.
    อ่านแล้วก็ไม่เข้าใจจึงตัดสินใจ upgrade package เพิ่ม และทำการปิด ftp โดยลบทุกโปรแกรมออกจากห้อง /home/ftp/bin และ /home/ftp/lib ซึ่งก็ไม่พบปัญหาการให้บริการ ftp แต่อย่างใด และ ip ที่เข้ามาในระบบ ซึ่งเป็นข้อความที่อ่านไม่ออก น่าจะเกิดจากการทำ overflow โดย 202.44.9.117 และคาดว่าครั้งนี้จะปิดได้ดีขึ้น เพราะได้ upgrade โปรแกรมแก้ปัญหาช่องโหว่หลาย ๆ จุดแล้ว
    11. 2544-05-29 : ได้รับ mail จาก water_overflow แจ้งให้ผมทราบว่าเขา hack โดยการปลอม IP เข้ามา
    และส่งโปรแกรมภาษา C เข้ามาไว้ที่ห้อง /tmp เขา compile เครื่องผมไม่ได้เพราะปิด gcc ไว้ เมื่อ run program จะได้สถานะเป็น root ส่วนอีกโปรแกรมที่คิดว่าเขาไม่ได้บอกผมคือโปรแกรมชื่อ last.cgi ซึ่งอยู่ในห้อง /cgi-bin เป็นโปรแกรมที่เปิดผ่านเว็บ ไม่ได้ใช้วิธีเปิดด้วย telnet ที่ต้องตกใช้เพราะโปรแกรม last.cgi สามารถใช้คำสั่งของ shell ผ่าน browser ได้เลย และสามารถลบแฟ้มที่มีสถานะเป็น 700 ของ root ได้ ก็หมายความว่ากระทำการใด ๆ ได้หมด แต่ตอนนี้ผมยังหาวิธีแก้ปัญหากับแฟ้มนี้ไม่ได้ ที่จะทำให้โปรแกรมนี้หมดความสามารถของ root ผ่าน browser ไป ยกเว้นว่าจะปิดบริการ cgi ซึ่งไม่ต้องการทำอย่างนั้น (แม้จะทำตามขั้นตอนในข้อ 9.52 หรือปิด mount แต่โปรแกรมนี้ก็ยังมีฤทธิ์)
    10. 2544-05-28 : เมื่อวาน h cker เข้ามาจัดการ hack server ตัวนี้ได้
    โดยเปลี่ยนหน้าแรก ซึ่งเขาได้แนะนำว่าควรหา patch มา update และได้ฝากหน้าเว็บไว้ให้อ่าน หลังจากงถูก hack แล้ว ได้เข้าไปตรวจด้วย last ไม่พบอะไร ดูใน /etc/log/secure ก็พบแต่ที่เข้ามาไม่ได้ แต่พอเข้าไปที่ /etc/log/message พบสิ่งที่ h cker ฝากสิ่งดี ๆ ไว้ เรียกว่า ถ้าผมไม่ใช้ more /etc/log/messages ก็ไม่เห็น ซึ่งมีข้อความดังนี้
      May 27 10.05.11 login  Water Overflow
      To      :  Admin
      Subject :  upgrade your glibc now.   your glibc have bug..
      HOW TO HACK :    
        The h cker can make buffer overflow in glibc/locale.  if you don't believe, go to  /tmp
      and see my own program named Xwater.    When you run Xwater program..  after overflow you 'll get root
      shell.
      HOW TO PROTECT :
        If you don't use /bin/mount   ..please change permission to can't execute for protect h cker
      using this hole in glibc(chmod 4700 /bin/mount). but if you upgrade glibc,you can change permission to
      execute again.
            nice a day.
           Water Overflow
      
    ในส่วนที่ h cker แนะนำให้ patch ซึ่งน่าจะหา download ได้จาก http://www.redhat.com/support/errata/index.html นั้น ผมพบนับได้เกือบ 100 โปรแกรม และในนั้นมีเรื่อง glibc ที่ ได้รับการแนะนำที่ http://www.redhat.com/support/errata/RHSA-2001-002.html ส่วนวิธี hack ที่ได้รับการแนะนำ ผมได้ลอง run โปรแกรมนี้ในห้อง /tmp ด้วย user ธรรมดา ปรากฎว่า overflow จนเป็น root จริงครับ เขาแนะนำว่าถ้าไม่ใช้ mount ก็ให้ใช้ chmod 4700 /bin/mount หรือไม่ก็ upgrade ซึ่งผมเลือกทั้ง 2 วิธีที่เขาแนะนำมาคือ
    1. upgrade glibc จาก http://www.redhat.com/support/errata/RHSA-2001-002.html จะได้แฟ้มมาหลายแล้วแล้วใช้ rpm -Fvh [filename]
    2. chmod 4700 /bin/mount

    9. 2544-05-25 : เย็นนี้ได้รับ mail จาก กลุ่มน้ำล้น ว่าจะเข้ามา hack วันพรุ่งนี้ ให้ป้องกันระบบให้ดี เป็นลักษณะจดหมายเตือน แต่ผมก็ป้องกันไปแล้วเต็มที่ คือการใช้ tcpwrapper ปิด ip ทั้งหมด แต่ไม่ได้เข้าไปปิด service ใน /etc/services พอเย็นวันเสาร์ผมเข้าใช้ isinthai.com ไม่ได้ ก็คิดว่า h cker เข้าไปแล้วเป็นแน่ จึงเข้าไปดูที่เครื่อง ปรากฤว่ามีคนปิดไฟ พอเปิดไฟก็ใช้ได้ จึงแน่ใจว่าที่ระบบหายไปในวันเสาร์ ไม่ใช่ฝีมือของ h cker เป็นแน่ จึงไปถาม รปภ. และทราบว่า ผมได้ย้าย server ทำให้หน้าจอตรงกับหน้าประตู เมื่อ รปภ. เดินไปเห็นว่าไฟเครื่องเปิด จึงใช้กุญแจไขเข้าไป ช่วยปิดให้ .. สรุปว่าผมได้ clear กับ รปภ. แล้วว่า ต่อไปห้ามยุ่งกับเครื่องเหล่านั้นอีก .. ก็เรียบร้อย
         Please prevent  www.isinthai.com  now..  coz there're many h ckers would
    like to drill your system..
        On 26  May   at 10.00 am.    if we can invade your system.  we'll deface
    your web..   Don't worry.  we don't destroy your system....  and if we found
    the hole ..  we 'll reveal to you and how to protect.
         I have a few time for drill your web ,because I can entrance and begin to
    study engineering in university recently. So maybe I have no time for drilling
    any more.
                                                                   water overflow.
    

    8. 2544-05-24 : พบว่าใช้ useradd นึกว่าโดย hack อีกแล้ว
    แต่คิดว่าไม่ใช่ เพียงแต่เกิดแฟ้ม group.lock ในห้อง /etc จึงทำให้ใช้คำสั่ง useradd ไม่ได้ เมื่อลบ group.lock ก็ใช้ได้ตามปกติ จึงถือโอกาสเข้าไปดูแล้ว /var/log/messages ซึ่งมีข้อมูลเยอะมาก จึงเลือกดูที่มีคำว่า portmap พบว่ามี log ที่แสดง ip ขึ้นมา โดยใช้คำสั่ง cat /var/log/message|grep portmap อ่านดูก็ไม่ได้คิดว่าต้องเป็น h cker อาจเป็นเพียงผู้ใช้ที่เคยได้บริการ telnet และเข้ามาใช้บริการอีกเท่านั้น
    May 20 11:58:27 www portmap[13213]: connect from 211.223.208.103 to dump(): request from unauthorized host
    May 20 17:33:42 www portmap[13318]: connect from 203.155.103.249 to dump(): request from unauthorized host 
    May 22 14:38:05 www portmap[816]: connect from 211.182.75.2 to getport(status): request from unauthorized host
    May 22 16:28:57 www portmap[852]: connect from 211.182.75.2 to getport(status): request from unauthorized host
    May 22 18:03:12 www portmap[885]: connect from 211.182.75.2 to getport(status): request from unauthorized host
    

    7. 2544-05-18 : วันนี้ h cker กลุ่มน้ำล้น ได้เข้ามาสำแดงความสามารถว่าเขาทำได้
    ด้วยการเปลี่ยนหน้าแรกของเว็บ และยังตั้งระเบิดเวลา เมื่อปิดเครื่องแล้วจะไม่สามารถ boot ระบบ ทำให้ Server 2 ตัวที่เป็น Redhat 7.2 ที่ผมมั่นใจว่าไม่น่ามีใครทำอะไรได้
    เนื่องจาก server ตัวหนึ่ง แม้แต่ผมยังไม่สามารถเข้าเป็น Superuser และบริการหลายอย่างล่มไป จึงเข้าใจว่า h cker ไม่น่าทำอะไรได้อีก ส่วน Server อีกตัวหนึ่งได้ติดตั้งใหม่ ปิด gcc และ tcpwrapper แล้ว แต่ก็ยังถูก hack ได้ชั่วข้ามคืน และเขายังบอกว่าเป็น h cker กลุ่มน้ำล้น และเป็นคนไทย ที่ผมเคยเข้าใจว่าเป็นฝรั่ง แต่นี่ก็คือประสบการณ์ที่ทำให้รู้ว่าระบบของผมยังมีรอยรั่ว แต่ h cker กลุ่มน้ำล้น (Water overflow) ได้แนะนำว่าผมน่าจะหา Patch มาปิดรอยรั่วต่าง ๆ ทำให้ผมเริ่มหันไปสนใจเรื่องนี้มากขึ้น หลังจากที่เคยเข้าไปเห็น Patch กว่า 300 Patch ที่ Redhat ออกมาแก้ปัญหาระบบใน Redhat 7.2 สำหรับวันที่ h cker เจาะเข้ามาได้ ผมยังไม่ทันได้เห็นหน้าแรก เพราะก่อนผมเข้าที่ทำงาน ไฟฟ้าเกิดดับไปซะก่อน
    6. 2544-05-15 : isinthai.com เองถูก hack จนผมไม่สามารถเข้าเป็น superuser ได้
    ต้องไปเข้าที่ตัว Server จึงจะได้เพราะใช้ su ไม่ได้นั่นเอง แต่วันนี้ Server ตัวหลักตัวหนึ่งถูก hack ซึ่งมีอาการที่ยอมรับไม่ได้คือ ใช้ pico ไม่ได้ Telnet ออกไป server ตัวอื่นไม่ได้ โดย Server ตัวนั้นมีการปิด Telnet ด้วย hosts.deny แล้ว ผมตรวจด้วย Last จึงทราบว่า เขา Hack เข้ามาด้วย Ftpd ซึ่งเข้าใจว่าเป็นการทำ Overflow ซึ่งผมยังไม่ทราบว่าทำอย่างไร ในแฟ้ม passwd เขาก็เพิ่ม user 0:0 เข้าไปได้ จึงจะลงระบบในเครื่องนี้ใหม่ทั้งหมด แต่จะปิดระบบให้หมด เหลือให้ใช้ได้เฉพาะในโยนกเท่านั้น ก็ต้องดูต่อไปว่าผมการปิดของผม ครั้งใหม่ จะสำเร็จหรือไม่ และที่แค้นใจคือ ผมพยายามใช้ Ghost copy HD ตัวนี้เพื่อ backup แต่ประเสริฐ พยายามา 2 วันก็ไม่สำเร็จไม่ในใจว่า Harddisk ตัวใดเสีย จึงทำให้ต้องมานั่งลงระบบใหม่ทั้งหมด นี่ถ้า Backup ไว้คงไม่ต้องลงระบบใหม่อย่างนี้ แต่ก็ถือเป็นประสบการณ์ เหล็กกำลังร้อนตีง่าย ซึ่ง Server ดังกล่างก็มีปัญหาหนึ่งที่ยังแก้ไม่ได้ คือเมื่อไฟตกแล้วจะดับไป ไม่ฟื้นขึ้นมาเอง แต่ถ้าเป็นเครื่อง Acer 133 จะพื้นเองได้ จึงตัดสินใจเปลี่ยนเครื่องด้วยเลย
    5. 2544-05-03 : วันนี้ผมเข้า Root โดยใช้ Su ไม่ได้
    เมื่อเข้าแล้วกรอกรหัสผ่านแล้วจะขึ้นคำว่า su: cannot set groups: Operation not permitted พอไปตรวจใน /etc/passwd ก็พบว่า h cker เข้ามาเปลี่ยน adm ให้เป็น :3:0: จึงเปลี่ยนกลับไป จากนั้นก็เขาเป็น root โดยใช้ linux single แล้วไปสร้าง account ขึ้นมาอีก 1 account ให้เป็นประตูหลัง จึงจะเข้าไปเป็น root ได้ ขณะนี้คงปิดระบบให้ปลอดภัยไม่ได้แล้ว เพราะเป็นระบบเปิด ผมวางแผนว่าอีกสักพักจะ ลงระบบใหม่ แล้วเริ่มปิด gcc ตั้งแต่ต้น h cker อาจเข้ามาไม่ได้ก็ได้ .. ขณะนี้จะเป็น root ที ต้องไปนั่งหน้า server จึงจะใช้ได้
    4. 2544-03-26 : ผมได้รับแจ้งจากคุณสุวิทย์ว่า last หาไปและมีข้อความว่า operator เป็นผู้ลบ
    แต่ผมจำได้ว่าเคยเปลี่ยนรหัสผ่านของ operator ไปแล้ว แต่ก็หาไม่พบว่า operator เข้ามาทำอะไรอีกนอกจากลบ last ไป ซึ่งผู้ที่เคยใช้ user นี้เข้ามาก็คือ h cker คนแรกที่มาจาก romania นั่นเอง
    3. 2544-03-20 : วันนี้ h cker จาก UK เข้ามา
    แต่ผมหาไม่พบว่าเข้าเขามาทำอะไร นอกจากเพิ่ม user เข้าระบบ และยังพบคุณ nat (tanma2k@hotmail.com http://www.nat.f2s.com/phpnuke/index.php) ซึ่งแนะนำผมให้ chmod 700 /usr/bin/gcc เป็นการป้องกัน h cker นำ shell script มาแปลงตนเองเป็น root ทำให้ผมรู้ว่า แค่มีโปรแกรม shell ตัวหนึ่ง มา run ใน server ถ้า server ยอมให้ใช้ gcc ซึ่งเป็น C compiler ก็จะทำให้เกิด overflow จนเปลี่ยนสถานภาพปกติ กลายเป็น root ทันที และคุณ nat ยังแนะนำเว็บ www.rootshell.com และ www.technotronic.com เพื่อให้ผมมีความรู้ไว้ ปรับปรุงระบบ ซึ่งคุณ oak จาก loxinfo.co.th ก็เคยเล่าให้ผมฟังถึงวิธีการนี้ เพียงแต่ตอนนี้ ผมยังไม่ได้ shell script ตัวนั้นมาทดลอง และก่อนนี้ไม่กี่วัน AusCERT Probe Reporter [auscert@auscert.org.au] และ Phil Crooker [pcrooker@orix.com.au] ก็แจ้งมาว่า มี h cker พยายามเจาะระบบเขาจาก ip ของเรา
      Apr  8 10:53:16  denied tcp 202.29.78.1(3744) -> 203.23.109.14(53), 1 packet
      Apr  8 10:53:17  denied tcp 202.29.78.1(3793) -> 203.23.109.63(53), 1 packet
      Apr  8 10:53:18  denied tcp 202.29.78.1(3806) -> 203.23.109.76(53), 1 packet
      
    จริง ๆ ไม่ใช่ 202.29.78.1 นะครับ แต่จาก server อีกตัวที่ปิดมิดชิด เพราะถ้าเป็น เบอร์ 1 คือ isinthai.com จะไม่แปลกใจเพราะเปิดให้เข้ามาใช้แต่นี่เป็น server อีกตัวครับ แล้วเข้าก็แนะนำว่าเข้าเว็บต่อไปนี้ เพื่อศึกษาวิธีการปิดระบบ
    1. http://www.linuxnewbie.org/nhf/intel/security/armorlin.html
    2. http://securityfocus.com
    3. http://bastille-linux.sourceforge.net/
    4. http://www.auscert.org.au/Information/Auscert_info/papers.html
    5. http://packetstorm.securify.com

    2. 2544-03-29 : เมื่อแก้รหัสผ่านจาก h cker ในครั้งแรกได้
    เข้าใจว่า h cker คนเดิม รู้ว่าผมรู้จักเขาได้อย่างไร เพราะผมใช้ hosts.deny ปิดเขา ตามหัวข้อ 9.54 ครั้งนี้ จึงเข้ามาก่อกวน รุ่นแรงกว่าเดิม เพราะครั้งแรกแค่ยึด super user ไป ครั้งนี้จึงปิดระบบ network ของเรา โดยเข้าไปแก้ไขแฟ้มต่าง ๆ เช่น resolv.conf hosts named.conf network static-routes ifcfg-eth0 เป็นต้น ซึ่ง h cker คนนี้ได้ทิ้งข้อความไว้หลายจุดว่า SnaK3.Is.The.Best.H4k3r.org 212.62.7.9 และเว็บที่เขาทิ้งไว้คือ www.snak3.co.uk เป็นเว็บ free email โดย another.com ซึ่งอาจไม่เกี่ยวข้อง โดยตรงกับ h cker ผู้นี้ก็ได้ ในครั้งนี้ ก็เกือบต้อง format หรือ reinstall เพื่อลง linux ใหม่ ดังนั้นก่อนเปิดระบบ จึงต้องใช้ NortonGhost เพื่อ clone HD ในระดับ partition ให้ได้ก่อน เพราะมีลูกศิษย์ที่ชื่อ วิรุฬห์ ยวงเอี่ยมใย แนะนำมา
    1. 2544-03-26 : เปิดระบบทดลอง install โปรแกรมต่าง ๆ ตั้งแต่ต้นเดือน
    วันนี้ถูก h cker เข้ามาเปลี่ยนรหัสของ root นั่งหาวิธีอยู่ 3 วันจึงรู้วิธีแก้ไขรหัสผ่าน ตามหัวข้อ 9.61 ซึ่งเลข ip 193.231.178.98 ที่เข้ามาโดยใช้คำสั่ง last พบว่ามาจาก Romania

9.52 ปรับระบบให้แข็งแรง
: ได้รับคำแนะนำดี ๆ จากผู้รู้ จึงนำมาเขียนไว้ที่นี่
apples@chek.com ซึ่งดูแลระบบของ http://academic.cmri.ac.th แนะนำมาหลายเรื่อง เช่นน่าจะใช้ slackware หรือ Mandrake เพราะระบบแข็งมาก สำหรับการป้องกันในเบื้องต้นมีดังนี้
    chmod 700 /usr/lib/gcc-lib <-- ไม่ให้ใช้ library สำหรับ compile *ส่วนนี้สำคัญมาก*
    chmod 700 /usr/bin/cc <-- cc compile
    chmod 700 /usr/bin/c++ <-- c++ compile
    chmod 700 /usr/bin/g++ <-- g++ compile
    chmod 700 /usr/bin/make <-- ไม่ให้ make 
    chmod 700 /usr/bin/gmake <-- gmake อีกอัน
    chmod 700 /etc/rc.d <-- ไม่ให้ไปยุ่งและสังเกตกะระบบ Network & initial
    Process lpd rpc.* <-- ถ้าไม่ใช้ไม่ต้องรันครับ :)
    - ไปพิมพ์คำว่า exit 0 ที่บรรทัดแรกของแฟ้ม /etc/rc.d/init.d/lpd
    ส่วน rpc ผมยังหาวิธีไม่ run เมื่อ boot ไม่ได้ครับ ต้อง kill process โดยดูจาก ps -aux|grep rpc
    
    FTP Server <-- เป็นไปได้เปลี่ยนจาก wu-ftpd เป็น proftpd นะครับ
    IMAP <-- ถ้าเป็นไปได้ให้ใช้เฉพาะ Localhost เท่านั้นครับ **ต้องได้สิครับ**
    /sbin/ipchains -A input -s 0/0 -i eth0 --proto tcp --destination-port 143 -j REJECT
    
water_overflow@h ckermail.com ซึ่ง hack ระบบของเรา และแนะนำทีมงานมาดังนี้
    1. upgrade glibc จาก http://www.redhat.com/support/errata/RHSA-2001-002.html จะได้แฟ้มมาหลายแฟ้ม แล้วใช้ rpm -Fvh [filename]
    2. chmod 4700 /bin/mount
webmaster@isinthai.com ส่วนนี้ผมไปอ่านมาจาก thailinux.com
    4 มิถุนายน 2544 : ตัดสินใจปิด telnet แต่เปิดบริการทั้งหมด โดย upgrade โปรแกรมจาก redhat.com
    
      คำสั่งที่ใช้ update เช่น $rpm -Fvh glibc-2.1.3-22.i386.rpm
    1. ftp://updates.redhat.com/6.2/en/os/i386/glibc-2.1.3-22.i386.rpm
    2. ftp://updates.redhat.com/6.2/en/os/i386/inetd-0.16-7.i386.rpm
      และอีกมากมาย
    ลบทุกโปรแกรมในห้อง /home/ftp/bin และ /home/ftp/lib ซึ่งยังไม่พบปัญหาจากการลบ และ อ.dav แนะนำให้ผมใช้ ssh ติดต่อกับ server แทนการเข้า console ก็ต้องลองดูครับ ส่วน tcpwrapper ตามหัวข้อ 9.54 ได้แก้จากการ deny all:all เป็นการปิดเฉพาะ telnet เพราะถ้าปิดหมด จะไม่สามารถให้บริการ pop ได้ จึงต้องปิดเฉพาะ in.telnetd 8 มิถุนายน 2544 : ล้างระบบแฟ้มน ftp ทั้ง /home/ftp/bin /home/ftp/etc /home/ftp/lib เรียกโปรแกรม ntsysv เพื่อจัดการกับโปรแกรมที่มีปัญหา ลบ apmd atd crond gpm kudzu lpd netfs nfslock pcmcia portmap xfs เหลือ httpd inetd inet linuxconf mysql named network sendmail เท่านั้น แก้ inetd.conf โดยปิด shell login talk ntalk finger แก้ chown ของ /home/httpd/html เป็น root:root แก้ chmod ของ /home/httpd/cgi-bin เป็น 755 แก้ /etc/rc.d/rc.local เพิ่ม /sbin/ipchains -A input -s 0/0 -i eth0 --proto tcp --destination-port 143 -j REJECT 11 มิถุนายน 2544 : ปิด /tmp ด้วย chmod 400 เดิมเป็น 1777 แก้ /etc/inetd.conf ยกเลิก login, shell และ telnet แก้ linuxconfig, control service activity ยกเลิก sendmail Upgrade rpm จาก http://www.redhat.com สำหรับการ ลงโปรแกรม ถ้า upgrade ด้วย rpm -Fvh .. ไม่ได้ ให้ใช้ลงใหม่ด้วย rpm -i .. ต้องจัดลงโปรแกรม db3... ก่อน มิเช่นนั้นโปรแกรมอื่นจะลงไม่ได้
    1. ftp://updates.redhat.com/6.2/en/os/i386/db3-3.1.17-4.6x.i386.rpm
    2. ftp://updates.redhat.com/6.2/en/os/i386/dump-0.4b19-5.6x.i386.rpm
      และอีกมากมาย
    12 มิถุนายน 2544 : upgrade โปรแกรมอีกเพียบจาก redhat.com
    1. ftp://updates.redhat.com/6.2/en/os/i386/apache-1.3.14-2.6.2.i386.rpm
    2. ftp://updates.redhat.com/6.2/en/os/i386/kernel-doc-2.2.19-6.2.1.i386.rpm
      และอีกมากมาย
    แล้วเปิดบริการ SSH พร้อม restricted shell ตามข้อ 9.53

9.53 การทำ restricted shell
: การจำกัดผู้ใช้ให้ใช้งานในเมนูที่เตรียมไว้
apples@chek.com ซึ่งดูแลระบบของ http://academic.cmri.ac.th แนะนำเรื่องนี้จนผมทำได้ โดยเฉาะ code ของ menu copy มาทั้งแท่งเลยครับ เมื่อนำมาให้บริการพร้อมกับ ssh (Secure Shell) จะเป็นการให้บริการที่สมบูรณ์ และปลอดภัยมาก (ในปัจจุบัน)
    วิธีการทำ restricted shell
  1. สร้างห้อง /rbin (ผมสร้างเพื่อแยกออกมาจากระบบเดิม .. อาจไม่จำเป็น)
  2. ln -s /usr/bin/bash /rbin/rbash (คำสั่งนี้ผมยังไม่เห็นประโยชน์แต่ก็ทำไว้ก่อน)
  3. สร้างแฟ้ม menu ด้วย pico ตาม code ด้านล่างนี้เป็น shell script ธรรมดา
  4. chmod 755 menu เพื่อให้ shell script ประมวลผลได้
  5. แก้แฟ้ม /etc/shells ด้วย pico โดยเพิ่ม /rbin/menu เข้าไปต่อบรรทัดสุดท้าย
  6. แก้ shell ทุกคนในแฟ้ม /etc/passwd เป็น /rbin/menu หรือให้ usermod -s /rbin/menu [username]
  7. เพียงเท่านี้ user ที่เปิดเข้ามาจะต้องเข้ามาที่เมนู /rbin/menu ใช้บริการที่เตรียมไว้
  8. ถ้าไม่ใช้ script สร้าง user จะต้องแก้แฟ้ม /etc/default/useradd ให้เป็น shell /rbin/menu
  9. ถ้าใช้ script _crt จะต้องแก้บรรทัด useradd โดยเพิ่ม -s /rbin/menu หรือจะเพิ่มคำสั่ง usermod ไปอีกบรรทัดก็ได้
    #!/bin/sh
    # Powered By apples@chek.com>
    # case from http://academic.cmri.ac.th
    case $USER in
    usernamewasblock ) exit 1;;
    esac
    while [ 1 ]; do
    clear
    echo
    echo
    echo "           SSH service at http://www.isinthai.com"
    echo "           Any suggestion send mail to webmaster@isinthai.com "
    echo
    echo "            1 ) Pine - Email/News Client"
    echo "            2 ) Lynx - Text Base Web Browser"
    echo "            3 ) Pico - Text Editor"
    echo "            4 ) File Manager - Delete, Modify, Change file attribute"
    echo "            5 ) ncftp - FTP Program"
    echo "            6 ) Telnet -  Remote Login"
    echo "            7 ) Change password"
    echo
    echo "            q ) Log out"
    echo "                ================= "
    echo "                Restrict shell suggest by apples@chek.com"
    echo "                Strong server at http://academic.cmri.ac.th"
    echo
    echo -n " Select->"
    read OPT
    case $OPT in
      q | Q ) echo;echo "Bye"; echo; echo; exit 1;;
      2 ) lynx http://www.isinthai.com;;
      1 ) pine;;
      3 ) pico;;
      4 ) lynx -editor=pico $HOME;;
      5 ) ncftp;;
      6 ) telnet;;
      7 ) passwd;;
    esac
    done
    exit 1
    

9.54 ติดตั้ง TCPWrapper เพื่อตรวจสอบ IP เครื่องต้นทาง
: โปรแกรมเล็ก ๆ ที่ใช้ปฏิเสธ IP จากบริการของ xinetd
เรื่องนี้อ่านมาจาก
- http://www.thailinux.com/1999/07/11/topic2.html
- http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/ref-guide/s1-tcpwrappers-accesscontrol.html
หมายเหตุ :
บริการนี้มีปัญหานิดหน่อย เพราะใน RH7.2 สามารถให้บริการได้ตามปกติตามด้านล่าง แต่ใน RH8.0 ไม่สามารถปิดบริการหลายอย่างได้ อาจเป็นเพราะมีโปรแกรม xinetd เปิดบริการเหล่านี้อยู่ ผู้ดูแลอาจดูได้ว่ามีบริการอะไรเปิดอยู่บ้างด้วยคำสั่ง #xinetd -d
โปรแกรม tcpwrapper จะมีมากับเครื่องอยู่แล้ว เพียงแต่กำหนด config ในการป้องกัน ระบบป้องกันก็จะทำงานทันที หากต้องการทราบว่าจะปิดบริการอะไรได้บ้าง สามารถเข้าไปดูที่ห้อง /etc/xinetd.d/ ส่วนเลข port ที่เปิดบริการดูได้จาก /etc/services โดยทดสอบว่า #telnet localhost 80 แต่ถ้า port นั้นปิดอยู่ก็จะไม่สามารถติดต่อได้
หากสงสัยว่า tcpwrapper ทำงานหรือไม่ ให้กำหนดใน /etc/hosts.deny แล้วพิมพ์คำว่า all:all เพื่อปิดทั้งหมด แล้วทดสอบติดต่อเข้าไป เมื่อ save แฟ้ม hosts.deny ระบบของ tcpwrapper ก็จะทำงานทันที .. เคยทดสอบกับ ssh ที่เดิมติดต่อได้ เมื่อสั่ง all:all จะใช้บริการ ssh ไม่ได้ หรือตรวจสอบ log ได้ที่ /var/log/secure
เพื่อไม่ให้ใคร telnet
    CASE 1
    ในแฟ้ม /etc/hosts.allow
    ALL:localhost
    in.telnetd:host1.isp.net
    in.fingerd:ALL
    
    ในแฟ้ม /etc/hosts.deny
    All:All
    หมายถึง ยอมให้ใน localhost ทำทุกอย่างได้
    หมายถึง ยอมให้ telnet จากเครื่อง host1.isp.net ได้ และใช้ finger จากเครื่องใดก็ได้
    หมายถึง ถ้าไม่อนุญาตตาม hosts.allow ก็ให้ปฏิเสธหมด
    
    CASE ของ isinthai.com
    ในแฟ้ม /etc/hosts.allow
    in.ftpd in.ipop3d in.ipop2d in.imapd:All
    
    ในแฟ้ม /etc/hosts.deny
    in.telnetd in.rshd in.rlogind:ALL
    # ตอนแรกผมปิด all:all ทำให้ไม่สามารถบริการ pop3 หรือ imap ได้ 
    # จึงต้องเลือกปิด เฉพาะ daemon ที่น่ากลัว
    
    CASE ของ Host ที่ต้องการปิด คือไม่บริการภายนอก
    ในแฟ้ม /etc/hosts.allow
    All: 202.29.78. EXCEPT 202.29.78.1
    
    ในแฟ้ม /etc/hosts.deny
    All:ALL
    in.telnetd:All
    
    คำอธิบายเพิ่มเติม
    ในแฟ้ม /etc/hosts.deny
    in.fingerd:ALL EXCEPT .domain.com หมายถึง ยอมให้ finger หมดยกเว้น จาก domain.com
    in.telnetd in.rlogind:host1.x.com .domain.com หมายถึง ไม่ให้ telnet หรือ login จาก host1.x.com และ domain.com
    
    หลังจากแก้ไขแฟ้ม hosts.allow หรือ hosts.deny จะมีผลต่อการอนุญาต หรือปฏิเสธในทันที .. ลองแล้วครับ

9.55 Network Security
: http://www.redhat.com/support/manuals/RHL-7.1-Manual/ref-guide/s1-security-network.html
    If you use your Red Hat Linux system on a network (such as a local area network, wide area network, or the Internet), you must be aware that your system is at a greater degree of risk than if you were not connected to that network. Beyond brute attacks on password files and users having inappropriate access, the presence of your system on a larger network widens the opportunity for a security problem and the possible form it may appear.
    A number of network security measures have been built into Red Hat Linux, and many open source security tools are also included with the primary distribution. However, despite your preparedness, network security problems may occur, due in part to your network topology or a dozen other factors. To help you determine the source and method of a network security problem, consider the the most likely ways such a problem can occur:
    1. Sniffing for authentication data. Many default authentication methods in Linux and other operating systems depend on sending your authentication information "in the clear," where your username and password is sent over the network in plain text or unencrypted. Tools are widely available for those with access to your network (or the Internet, if you are accessing your system using it) to "sniff" or detect your password by recording all data transferred over the network and sifting through it to find common login statements. This method can be used to find any information you send unencrypted, even your root password. It is imperative that you implement and utilize tools like Kerberos 5 and OpenSSH to prevent passwords and other sensitive data form being sent without encryption. If, for whatever reason, these tools cannot be used with your system, then definitely never log in as root unless you are at the console.
    2. Frontal attack Denial of Service (DoS) attacks and the like can cripple even a secure system by flooding it with improper or malformed requests that overwhelm it or create processes that put your system and its data, as well as other systems that communicate with it, at risk. A number of different protections are available to help stop the attack and minimize the damage, such as packet-filtering firewalls. However, frontal attacks are best handled with a comprehensive look at ways in which untrusted systems communicate with your trusted systems, putting protective barriers between the two, and developing a way to quickly respond to any event so that the disruption and possible damage is limited.
    3. Exploiting a security bug or loophole Occasionally, bugs are found in software that, if exploited, could do grievous damage to an unprotected system. For that reason, run as few processes as root as possible. Also, use the various tools available to you, such as the Red Hat Network for package updates and security alerts, to fix security problems as soon as they are discovered. Also, make sure that your system has no unnecessary programs starting up at boot time. The fewer programs you have started, the fewer possible security bugs can affect you.

9.56 Procmail เพื่อกรอง spam mail และ junk mail
: ใช้ keyword หยุด e-mail โดยตรวจสอบจาก from และ subject
    การหยุด spam mail และ junk mail ให้กับสมาชิกทั้งหมด มิใช้บางคน ทำได้โดยสร้างแฟ้มชื่อ procmailrc ในห้อง etc เวลาสร้างก็พิมพ์ว่า #pico /etc/procmailrc แล้วกำหนดสิ่งที่ต้องการหยุด เช่น e-mail from หรือข้อความใน subject ที่มีปัญหา แต่ถ้าสมาชิกบางคนต้องการหยุด หรือสร้างระบบป้องกันของตนเอง ก็สามารถสร้างแฟ้ม .procmailrc ใน home directory ของตนได้
    ทราบว่า procmail สามารถกรอง e-mail ที่มีปัญหาโดยตรวจสอบจาก from และ subject ได้ ผมจึงตรวจสอบว่าในเครื่องมีโปรแกรมนี้ไหมด้วยการพิมพ์ rpm -q procmail ก็พบว่ามีแล้วโดยแสดงคำว่า procmail-3.22-7 ให้เห็น จากนั้นก็หาข้อมูลจากเอกสารต่าง ๆ
    - https://nontri.ku.ac.th/tools/procmail/ (ภาษาไทยอ่านง่าย ละเอียด จาก ม.เกษตรศาสตร์)
    - http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/ref-guide/s1-email-procmail.html
    - http://www.uwasa.fi/~ts/info/proctips.html
    - http://piology.org/.procmailrc.html
    - http://www.procmail.org
    - http://www.linuxbrit.co.uk/downloads/dot.procmailrc
    - http://www.iegrec.org/procmailrc.html
    ถ้าต้องการมี .procmailrc ของตนเอง ให้สร้าง .procmailrc ด้วย notepad ในเครื่องตนเอง แล้วส่งเข้าไปใน home directory ของท่านด้วย ftp yn1.yonok.ac.th แต่ถ้าไม่ใช้ก็ไม่เป็นไร เพราะผมกำหนด /etc/procmailrc เพื่อใช้กรองให้กับทุกคนโดยอัตโนมัตแล้ว

      ข้อมูลในแฟ้ม procmailrc หรือ .procmailrc
        # ตัวอย่าง procmailrc.txt
        :0
        # block From on email
        * 1^0 From:.*abc@def.com
        * 1^0 From:.*@def.com
        * 1^0 From:.*abc@
        * 1^0 From:.*abc@def.com
        /var/mail/junk
        
        # block "Britney spear", "FUKADARAKA HELLO"
        # no block "afukadara", "love britney"
        :0
        * ^Subject: (britney|fukada|adv:)
        /dev/null
        
        # block "love britney spear", "Hot of britney", "kyoko fukada"
        :0
        * ^Subject:.*(britney|fukada)
        /dev/null
        
        # block "hi", "TEST"
        :0
        * 1^0 ^Subject: hi$
        * 1^0 ^Subject: test$
        * 1^0 ^Subject: hello$
        /dev/null
        
        # block message on body
        :0B:
        * (YONOK college xxx|The message cannot be represented in 7-bit ASCII)
        /dev/null
        
        # block message on attached extension
        :0
        *^Content-type: (multipart/mixed|application/octet-stream)
        {
           :0 HB
           *^Content-Disposition: attachment;
           *filename=".*\.(vbs|vbe|com|bat|pif|scr)"
           /dev/null
        }

9.58 โปรแกรมภาษา c เพื่อสร้าง crypt ให้ shadow
: เนื่องจากผมต้องการสร้าง user แบบ online จึงหาวิธีสร้าง useradd ผ่านเว็บ
วันที่ 8 มิถุนายน 2544 ได้คุยกับอ.dav จนท่านช่วยผมเขียนโปรแกรมภาษา c ตัวหนึ่ง ซึ่งใช้เข้ารหัส ผลการเข้ารหัส สามารถนำไปใช้ในคำสั่ง useradd เช่น useradd -p xdfiWsoOsdg0M tom จะทำให้สร้าง user ใหม่ชื่อ tom ได้โดยรหัสจะต้องได้มาจากโปรแกรมที่อ.dav เขียนไว้ด้านล่างนี้
    คุยกับ อ.dav เรื่องการสร้าง useradd อัตโนมัติ ซึ่งผมมีปัญหาเรื่องของรหัสผ่านที่เก็บใน shadow ท่านก็ช่วยผมสร้างโปรแกรมรหัสผ่านขึ้นมาอย่างง่าย ๆ ดังข้างล่างนี้ แค่นำค่าที่ได้ไปแทนค่า xxx ของ userhello ก็จะได้รหัสผู้ใช้ ผ่านคำสั่งเดียว เช่น useradd -p xxx userhello ผมไม่เคยเขียน c บน linux โปรแกรมนี้คงเป็นตัวแรกของผมหละครับ // program to encrypt passwords for the shadow file. // compile with gcc pwcrypt.c -opwcrypt -lcrypt // Dav ... #include <stdlib.h> #include <stdio.h> #include <unistd.h> int main( int argc, char **argv ) { int i; char *pwd; if( argc != 3 ) { fprintf( stderr, "Usage: pwencode username password\n" ); exit( -1 ); } //encripting the password for insertion into shadow pwd = crypt( argv[ 2 ], argv[ 1 ] ); printf( "%s %s\n", argv[ 2 ], pwd ); return 0; }

9.59 ลีนุกซ์บนวินโดวส์ ด้วย CYGWIN (Unix Simulator)
cygwin.com : ชุดโปรแกรมสร้างสภาพแวดล้อมลินุกซ์บนวินโดวส์ ประกอบด้วย cygwin1.dll เพื่อจำลองสภาพแวดล้อมให้เหมือนลีนุกซ์ และรวมเรื่องมือที่จำเป็นให้เหมือนบนลีนุกซ์ โปรแกรมนี้จำเป็นต่อการ compile โปรแกรมมากมาย ที่ถูกพัฒนาให้ compile บน linux ทำให้นักพัฒนาสร้างโปรแกรมที่ถูกแปลบน linux แต่นำมาแปลบน windows ได้ในภายหลัง เครื่องมือที่มีมาให้ เช่น ash coreutils cvs diffutils findutils gawk grep libiconv make patchutils perl sed unzip zip
หลังประมวลผล setup.exe ผมเลือก download จนสำเร็จ แต่ที่สำคัญต้องเลือกลง gcc, nasm, binutils, libtool, zip, unzip, make, flex, bison, cvs, cmake, autoconf, automake, ed เพิ่ม มิเช่นนั้นไม่มานะครับ หลัง download จะสร้างห้อง c:\cygwin อัตโนมัติ แล้วประมวลผล setup.exe อีกรอบเพื่อติดตั้งจาก Local Directory หลังติดตั้งสำเร็จจะเข้า Linux โดยจำลองห้อง c:\cygwin เป็น root directory สำหรับคำสั่งที่ใช้งานได้อยู่ในห้อง bin
- Download : setup.exe (cygwin.com 297 KB)
- Download : setup.exe (psu.ac.th)
- http://www.thaiall.com/cygwin/indexo.html ***
- http://www.thaiall.com/programming ***
- การติดตั้งโปรแกรม cygwin เพื่อจำลอง linux บน windows และโปรแกรม wincvs สำหรับควบคุมรุ่น (Control Version System)
- วิธีการใช้ลินุกส์บนวินโดวส์โดยผ่านโปรแกรม Cygwin
- Cygwin กับ MingW คล้ายกัน แต่ Cygwin มี function มากกว่า
- http://www.mingw.org/category/wiki/download
- http://sourceforge.net/projects/mingw/?source=dlp
- http://soowoi.wordpress.com/2013/01/11/mingw_installation/ (ตัวอย่าง .c และการแปล)
CYGWin
c:\cygwin\home\burin เป็น home directory เมื่อใช้ $pwd
c:\cygwin\cygwin.bat เพื่อเข้า $ prompt
ต้องการเพิ่มคำสั่งก็ต้อง setup.exe ใหม่
ถ้าต้องการ gcc ต้องติดตั้ง devel ในตอน setup
Mingw
c:\mingw\bin>gcc --version
c:\mingw\bin>gcc x.c -o x
c:\mingw\bin>x.exe (มีขนาด 48,112 bytes)
9.61 ลืมรหัสผ่านของ root
: วิธีนี้ใช้ได้ใน Redhat version 6.2 แน่นอน แต่รุ่นอื่นก็มีวิธีต่างกันไปบ้างเล็กน้อย
ผมทราบวิธีนี้เพราะเข้าไปดูที่ redhat.com ในส่วนของ FAQ และที่ต้องเข้าไปดูก็เพราะมี h cker จาก 193.231.178.98 เข้ามาด้วย operator account แล้วเปลี่ยนรหัสผ่านของ root ไป ทำให้ผมไม่สามารถเข้าไปสร้างผู้ใช้ใหม่ได้ ถามหลาย ๆ ท่านก็บอกให้ใช้แผ่นบูต แบบ linux rescue ผมก็เข้าไป จะ mount จะอะไรก็ไม่ได้ อาจเป็นเพราะยังไม่ชำนาญ แต่วิธีการเรียกรหัสผ่านของ root คืนในแบบที่ผมได้มานี้ ง่ายกว่าวิธีใด ๆ แน่นอน แต่ต้องทำที่ Console
    ขั้นตอนสำหรับ LILO
  1. เมื่อ Restart เครื่อง ก่อนเข้าระบบ ให้กด Alt-X ขณะที่อยู่ที่ LILO prompt แล้วพิมพ์ว่า linux single
  2. เมื่อเข้าไปจะได้สถานะเป็น root ทันที ก็เพียงแต่ใช้คำสั่ง passwd root แล้ว reboot ก็เรียบร้อยแล้ว
    ขั้นตอนสำหรับ GRUB
  1. เมื่อ Restart เครื่อง ก่อนเข้าระบบขณะที่อยู่ที่ GRUB prompt ให้กด e
  2. พบ Fedora กด e แล้วพบ Kernel กด e แล้วพิมพ์ single ต่อท้ายคำสั่งที่ใช้ boot ระบบ
  3. ออกมาแล้วกด b เพื่อ boot ตามคำสั่งที่แก้ไขนั้น ก็จะเข้า #
  4. เมื่อเข้าไปจะได้สถานะเป็น root ทันที ก็เพียงแต่ใช้คำสั่ง passwd root เพื่อเปลี่ยนรหัสผ่าน แล้ว reboot ก็เรียบร้อยแล้ว
    สำหรับเครื่อง Sun
  1. ซึ่งเป็น Unix server ที่ดี จะใช้การ Reboot และกดปุ่ม stop a แล้วใช้คำสั่ง boot -s

9.62 แก้ไข httpd.conf เพื่อแก้ปัญหาของ Web Server
: แฟ้มนี้คุมบริการต่าง ๆ ซึ่งสำคัญต่อต้องการ web server ในองค์กร
    แก้ไขแฟ้ม /etc/httpd/conf/httpd.conf :
  1. ปัญหาภาษาไทย ใน RH8.0 เมื่อติดตั้งบริการเว็บเสร็จแล้ว ปัญหาคือ ผู้เปิดเว็บใดก็ตามในระบบ ทุกครั้งจะต้องไปแก้ไข encoding แล้วเลือก Thai(Windows) เพื่อแสดงภาษาไทย จึงต้องแก้ไขให้กำหนด default ที่ถูกต้อง ตามที่กำหนดในเว็บเพจ (แก้ในเว็บเพจเป็น meta 874 ก็ไม่ได้)
      เดิม :: AddDefaultCharset ISO-8859-1
      ใหม่ :: AddDefaultCharset WINDOWS-874
      เพิ่ม :: AddCharset WINDOWS-874 .cp-874 .win-874
  2. ทำให้ผู้มี linux account สามารถมีเว็บของตนเอง (อ่านรายละเอียดเพิ่มเติมในหัวข้อ 9.62)
      เดิม :: UserDir Disable
      ใหม่ :: UserDir public_html
      - แต่ละ user ต้อง chmod 711 ให้กับ home directory ของตนเอง
      - แล้ว chmod 755 ให้กับ public_html ของตนเองหลัง
      - เปิดเว็บ http://www.isinthai.com/~username


    สำหรับ Fedora Core 4
    อ่านเพิ่มจาก http://feeds.feedburner.com/LinuxStuffIMightForget
    #cd /home/burin
    #chcon -R -t httpd_user_content_t public_html
  3. ทำให้ใช้ .cgi และ .pl ได้
      เดิม :: #AddHandler cgi-script .cgi
      ใหม่ :: AddHandler cgi-script .cgi .pl
      เดิม
      <Directory "/var/www/cgi-bin">
      AllowOverride None
      Options None
      ใหม่ :: Options ExecCGI
      เดิม
      <Directory "/var/www/html">
      Options Indexes FollowSymLinks
      ใหม่ :: Options All
  4. ทำให้ใช้ <? แทนการใช้เฉพาะ <?php ในการเขียนโปรแกรมด้วยภาษา php โดยแก้แฟ้ม /etc/php.ini
      เดิม :: short_open_tag = Off
      ใหม่ :: short_open_tag = On

9.63 เปิดบริการ FTP server ด้วย vsftpd
: บริการ ftp server เพื่อให้สมาชิกส่งแฟ้มผ่าน ftp เข้ามาใน server ได้สะดวกกว่าการใช้ file manager
http://www.linuxquestions.org/questions/history/344083 (Problem on FC4 and selinux)
#getsebool -a แสดงสถานะว่าบริการอะไร Active อยู่บ้าง
#setsebool ftpd_disable_trans=1 (เปลี่ยนเป็น active แบบ ชั่วคราว)
เพิ่มใน /etc/selinux/targeted/booleans.local เพื่อให้ถาวร
#setsebool -P ftpd_disable_trans=1 (เปลี่ยนแบบถาวร เพื่อให้ put หรือ upload ได้)
เปิดบริการ ftp ด้วยคำสั่ง setup, system services แล้วเลือกเปิด vsftpd แล้วเข้าไปในห้อง /etc/xinetd.d
แล้วใช้ pico vsftpd แล้วเปลี่ยนจาก disable=yes เป็น disable=no แล้วสั่ง /etc/rc.d/inetd/xinetd restart
เพิ่มใน /etc/vsftpd/vsftpd.conf
จาก http://www.aconus.com/~oyaji/suse/vsftpd_ssl_suse.htm
จาก http://www.brennan.id.au/14-FTP_Server.html
จาก http://fedorasrv.com/vsftpd.shtml
anonymous_enable=NO
ssl_enable=YES
ssl_tlsv1=YES
# allow_anon_ssl=NO
force_local_logins_ssl=YES
force_local_data_ssl=NO
rsa_cert_file=/etc/httpd/conf/vsftpd.pem
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
#cd /etc/httpd/conf
#make vsftpd.pem
#openssl req -x509 -nodes -days 730 -newkey rsa:1024 -keyout vsftpd.pem -out vsftpd.pem
#chmod 600 vsftpd.pem
เพิ่ม user fedora ใน ftpusers และ user_list
#/etc/init.d/vsftpd restart
9.64 วิธีเปิดบริการ homepage ให้ ~username ใน linux
: เปิดบริการ homepage โดยใช้ account ของระบบ linux
อ่านรายละเอียดเพิ่มเติมได้จาก http://httpd.apache.org/docs/misc/FAQ.html
การเปิดบริการ free homepage ของ Web server อีกแบบหนึ่ง ในการเปิดบริการแบบใหม่จะใช้โปรแกรม เช่น http://www.cyberscript.net/products/easyhost_free/ ที่ไม่ต้องสร้าง linux account แต่อย่างใด และมีความปลอดภัยในการบำรุงรักษาสูง
การเปิดบริการ free homepage แบบใช้ linux account เช่น http://www.isinthai.com/~username สามารถเปิดบริการได้ด้วยการแก้ไขแฟ้ม /etc/httpd/conf/httpd.conf แก้บรรทัดที่เขียนว่า UserDir Disable เป็น UserDir public_html แล้วต้อง chmod 711 ให้กับ home directory ของตนเอง แล้ว chmod 755 ให้กับ public_html ของตนเองหลังจากใช้คำสั่ง mkdir public_html ไว้ใน home directory แล้ว
9.65 วิธีเปิดบริการ samba
: เปิดบริการให้ระบบ windows มองเห็นระบบแฟ้มใน linux
ทดสอบ samba ของ RH8.0 แก้ไขดังข้างล่างแล้วไม่พบปัญหาใดเลย .. ง่ายมากครับ
เปิดบริการ samba ด้วยคำสั่ง setup, system services แล้วเลือกเปิด smb แล้วเข้าไปในห้อง /etc/samba แล้วใช้ pico smb.conf จากนั้น restart ด้วย /etc/rc.d/init.d/smb restart และให้พิมพ์ chkconfig smb on จะทำให้ samba start ทุกครั้งที่เปิดเครื่อง
คำสั่งที่ใช้สร้าง user คือ smbpasswd -a [username] [userpassword]
::::::: เดิม :::::::

; hosts allow = 192.168.1. 192.168.2. 127.
security = user
[homes]
   comment = Home Directories
   browseable = no
   writable = yes
   valid users = %S
   create mode = 0664
   directory mode = 0775
;[tmp]
;   comment = Temporary file space
;   path = /tmp
;   read only = no
;   public = yes
;[public]
;   comment = Public Stuff
;   path = /home/samba
;   public = yes
;   writable = yes
;   printable = no
;   write list = @staff
::::::: ใหม่ :::::::

hosts allow = 192.168.1. 192.168.2. 127. 202.29.78 
security = share
[homes]
   comment = Home Directories
   browseable = yes
   writable = yes   
   create mode = 0664
   directory mode = 0775

[tmp]
   comment = Temporary file space
   path = /tmp
   read only = no
   public = yes
[public]
   comment = Public Stuff
   path = /home/samba
   public = yes
   writable = yes
   printable = no
   write list = @staff

9.66 เปิดบริการ DNS server
: บริการ Domain Name service เพื่อให้ทุกเครื่องสามารถเรียกเว็บ หรือบริการด้วยชื่อได้
เปิดบริการ DNS server เพื่อทำให้ระบบเครือข่ายเรียกชื่อเว็บ เป็นตัวอักษรได้ และเป็นชุดที่ใช้กำหนดชื่อเครื่องในระบบทั้งหมด ถ้าในระบบเครือข่ายของท่าน มีเครื่องที่ต้องการตั้งชื่อหลายเครื่อง แต่ถ้าท่านเป็นเครื่องใช้พิมพ์งานธรรมดาก็ไม่จำเป็นต้องมีชื่อให้ใครเรียกเข้ามา ปกติเครื่องที่จะมีชื่อมักเป็น web server หรือ ftp server
การเปิดบริการนี้ต้องเปิดด้วยการสั่ง #setup แล้วเข้าไปในส่วน system services แล้วเลือก named เมื่อจะสั่งให้ named ทำงานต้องสั่ง #/etc/init.d/named restart ตรวจสอบได้ว่า named ทำงานหรือไม่โดยพิมพ์ #ps aux|grep named
ทดสอบเปิดบริการ named แบบ foreground ด้วย #named -g -p 53 ถ้าเลิกก็กด CTRL-C
พบ error เรื่อง permission ของห้อง /var/run/named เดิมเป็น 755 ไม่สามารถ start named ผมต้องเปลี่ยนเป็น 777 จึง ok
ใช้คำสั่ง #nmap localhost ดูได้ว่า port 53 ถูกเปิดหรือไม่ ถ้าไม่เปิด ก็แสดงว่าเครื่องยังไม่เป็น DNS หรือ Domain server (หัวข้อ 2.29)
    9.66.1 :: /etc/named.conf
      # ใน DNS server (star.yonok.ac.th) # เพิ่มเพียง 4 บรรทัดนี้เข้าไป # ใน unix พบแฟ้มนี้ใน /export/local/etc zone "yonok.ac.th" in { type master; file "db.yonok.ac.th"; allow-query {any;}; allow-transfer {202.28.18.65;}; }; zone "isinthai.com" in { type master; file "db.isinthai.com"; }; zone "78.29.202.in-addr.arpa" in { type master; file "db.202.29.78"; };
    9.66.2 :: /var/named/db.isinthai.com
      # ใน DNS server (star.yonok.ac.th) # ถ้าเครื่องไม่เป็น ns ก็ไม่จำเป็นต้องมี ; isinthai.com @ IN SOA www.isinthai.com. postmaster.www.isinthai.com. ( 2001022605 43200 7200 1209600 172800 ) IN NS star.yonok.ac.th. ; ตรงกับ checkdomain.com IN MX 5 www.isinthai.com. www IN A 202.29.78.1 mail IN CNAME www.isinthai.com. wichep IN CNAME yn2.yonok.ac.th.
    9.66.3 :: /var/named/db.yonok.ac.th
      ; yonok.ac.th @ IN SOA star.yonok.ac.th. postmaster.star.yonok.ac.th. ( 2003011001 43200 7200 1209600 172800 ) IN NS star.yonok.ac.th. IN NS mars.uni.net.th. IN MX 5 star.yonok.ac.th. star IN A 202.29.78.12 door IN A 202.29.78.254 email IN A 216.200.145.34 IN MX 6 sitemail.everyone.net. mail IN CNAME star.yonok.ac.th. ;email IN CNAME siteurl.everyone.net.
    9.66.4 :: /var/named/db.202.29.78
      - ใน DNS server (star.yonok.ac.th) - ถ้าเครื่องไม่เป็น ns ก็ไม่จำเป็นต้องมี ; Yonok.ac.th $ORIGIN 78.29.202.IN-ADDR.ARPA. @ IN SOA star.yonok.ac.th. postmaster.star.yonok.ac.th. ( 2001022601 ;serial 43200 ;Refresh 12 hours 7200 ;Retry 2 hours 1209600 ;Expire 2 weeks 172800) ;TTL IN NS star.yonok.ac.th. 1 IN PTR www.isinthai.com. 2 IN PTR isinthai.yonok.ac.th. 12 IN PTR star.yonok.ac.th.

9.67 ติดตั้ง Free hosting ด้วย easyhost_free.zip
: ช่วยให้ server สามารถบริการ free hosting ได้โดยง่ายผ่าน file manager
- Download CGI script นี้จาก http://cyberscript.net/products/easyhost_free/download.html
- รายละเอียดการติดตั้งอ่านได้จาก http://cyberscript.net/support/docs/
- copy แฟ้มทั้งหมดในห้อง cgi-bin ไป /var/www/cgi-bin ด้วยคำสั่ง #mv * /var/www/cgi-bin
- copy ห้อง data และ images ไป /var/www/html ด้วยคำสั่ง #mv images /var/www/html
- ใช้คำสั่ง #chmod 755 /var/www/cgi-bin/*.*
- ใช้คำสั่ง #chmod 777 /var/www/cgi-bin/config.ini
- ใช้คำสั่ง #chmod 777 /var/www/html/data
- ใช้คำสั่ง #chmod 777 /var/www/html
- เปิดเว็บ http://www.isinthai.com/cgi-bin/admin.cgi
- ถ้าเปิด admin.cgi แล้ว error โดยหาสาเหตุไม่ได้แสดงว่าไม่ได้ upload แบบ ascii ให้ใช้ pico เพิ่มบรรทัดว่างล่างสุดแล้ว save ทับ
- ถ้า CGI ยังไม่ทำงาน ให้ไปแก้แฟ้ม /etc/httpd/conf/httpd.conf เพื่อเปิดบริการต่าง ๆ ของ apache web server
- สมาชิกใหม่จะมีห้อง images และแฟ้ม index.html ที่คัดลอกมาจากห้อง /var/www/html/data/default เข้าไปแก้ไขห้องนี้ได้
    ข้อมูลในแฟ้ม /var/www/cgi-bin/config.ini
      space_limit=55000 reserved_names=cgi-bin,data,images,mail title_min=3 root_url=http://www.isinthai.com password_max=20 site_password=asaRYYyl3HBzW description_required=on title_max=50 name_min=3 banned_extensions=.cgi,.pl,.php,.php3,.exe,.mp3,.dat,.mpg,.mpv,.zip,.rar,.ace,.class distinct_email=1 use_validation=off site_email=webmaster@yonok.ac.th description_max=150 root_dir=/var/www/html data_dir=/var/www/html/data password_min=2 site_title=isinthai.com :: Case study of free hosting with 55 Mb name_max=20 script_url=http://www.isinthai.com/cgi-bin
    วิธีงดบริการสร้างสมาชิกใหม่ โดยบุคคลทั่วไป
    เนื่องจากปิดบริการ free webhosting ของ isinthai.com แต่ยังเปิดให้สมาชิกในองค์กร หรือเจ้าหน้าที่ หรือ webmaster สร้างสมาชิกใหม่ด้วยโปรแกรม /var/www/cgi-bin/create_user.cgi โปรแกรมจะรอรับข้อมูลเมื่อทราบ keyword เท่านั้น โดยเติม 5 บรรทัดข้างล่างนี้เข้าไปที่ส่วนต้นของโปรแกรม
    // http://www.isinthai.com/cgi-bin/create_user.cgi?officer
    if ($ENV{QUERY_STRING} ne 'officer') {
       print "Content-type: text/html\n\n";
       print "Stop service";
       exit;
    }

9.68 ติดตั้ง Web-based mail ด้วย uebimiau-2.7.2-any.zip
: ช่วยให้ server สามารถอ่าน mail จาก POP3 และส่งด้วย SMTP ผ่านระบบ Web-based mail
- Download จาก http://uebimiau.sourceforge.net (PHP script)
- เคยแนะนำการเปิดบริการ pop3 ใน win2003 กับโรงเรียนเขลางค์
      อ่านจาก http://www.windowsnetworking.com/articles_tutorials/Windows_POP3_Service.html
- copy ห้องทั้งหมดภายใต้ห้อง uebimiau-2.7.2 หลังคลาย zip ไปไว้ใต้ห้อง /var/www/html/mail
- แก้แฟ้ม /var/www/html/mail/inc/config.php กำหนด pop และ smtp ให้เป็นตามต้องการ
- ใช้คำสั่ง #chmod 777 /var/www/html/mail/database
- แก้แฟ้ม /var/www/html/mail/langs/th.txt เพื่อให้มีภาษาไทยตามที่เราต้องการ
- แก้แฟ้ม /var/www/html/mail/themes/default/login.htm เพื่อปรับหน้าจอของหน้าแรก
    แก้แฟ้ม inc/config.php ให้อ่านกับ POP3 ของ windows server 2003
    จาก "login_type" => "%user%" 
    เป็น "login_type" => "%user%@%domain%" 
    
    การแก้ไข config ของแฟ้มในห้อง inc และ lang
    กรณีเขียน e-mail ยาว ๆ พอกดปุ่มส่ง ปรากฎว่าเด้งไปหน้า login มีผลตามมาคือจดหมายฉบับนั้นไม่ถูกส่งไป จึงต้องไปแก้ไขในส่วนของ Session timeout for activity ในแฟ้ม /var/www/html/mail/inc/config.php
    เดิม $idle_timeout = 10; // Minutes
    ใหม่ $idle_timeout = 100;  // Minutes
    

9.69 ติดตั้ง DHCP server แจก Dynamic IP
: เพื่อให้เครื่อง Server มีบริการแจก IP ปลอมให้กับเครื่องในองค์กร เพราะปกติองค์กรจะได้ IP มา 1 Class C มี 256 หมายเลข แต่ถ้าในองค์กรมีเครื่องจำนวนมากกว่านั้น ก็จำเป็นต้องสร้าง DHCP server เพื่อแจก IP ปลอม และยังมีประโยชน์ในเรื่องของความปลอดภัย เพราะเครื่องที่ได้ IP ปลอม ย่อมต้องมีการทำงานขึ้นกับเครื่อง server จะแอบออกไปน้องเครือข่ายได้ยาก
    ขั้นตอนการทำให้ Linux server บริการ DHCP (Dynamic Host Configuration Protocol)
  1. ถ้าใช้คำสั่ง setup เพื่อเปิดบริการ DHCP แล้วไม่พบบริการ ต้องติดตั้ง DHCP จากแผ่น CD ด้วยการใช้คำสั่งด้านล่าง ในห้องที่เก็บแฟ้มนี้ ก็ใช้ setup เข้าไปเปิดบริการนี้ใหม่
    rpm -i dhcp*
  2. ต้องใช้โปรแกรม ipchains ท่านควรตรวจหาในเครื่องว่ามีหรือไม่ด้วยการการใข้ rpm -q ipchain ถ้าไม่มีก็ต้องติดตั้งเพิ่มจากแผ่น CD ด้วยคำสั่ง rpm -i ipchain* แล้ว ต้องใช้คำสั่ง setup เพื่อเข้าไปเปิดบริการ ipchains อีกครั้ง
  3. ทำให้เครื่องมี IP ปลอมเกิดขึ้นด้วย โดยพิมพ์สั่งใส่ใน /etc/rc.d/rc.local เพื่อกำหนด IP ปลอมแก่เครื่อง server นี้ ทุกครั้งที่เปิดเครื่อง
    /sbin/ifconfig eth0:1 192.168.3.1
  4. สร้างแฟ้ม /etc/dhcpd.conf ด้วย pico หรือ vi
      default-lease-time 21600;
      max-lease-time 43200;
      ddns-update-style ad-hoc;
      option subnet-mask 255.255.255.255;
      option broadcast-address 192.168.3.255;
      option routers 192.168.3.1;
      option domain-name-servers 192.168.3.1;
      option domain-name "yn2.yonok.ac.th";
      subnet 192.168.3.0 netmask 255.255.255.0
      {
         range 192.168.3.10 192.168.3.250;
      }
      
  5. การทำให้ใช้ IP forwarding ต้องแก้แฟ้ม /etc/sysctl.conf จาก 0 เป็น 1 โดยแก้เป็นบรรทัดด้านล่าง
    net.ipv4.ip_forward = 1
    เมื่อแก้ไขเสร็จแล้วให้พิมพ์คำสั่งใน command line ดังนี้
    echo "1" >/proc/sys/net/ipv4/ip_forward
  6. ต้องสั่ง IP forwarding เพราะเครื่องลูกไปไหนไม่ได้ แต่เครื่อง server มี IP จริง และ IP ปลอม จึงต้องสั่งให้ IP ปลอมมาเข้ากับ IP จริง ด้วยการใช้ ipchains กำหนดการ forward
    /sbin/ipchains -A forward -i eth0 -s 192.168.3.1/24 -j MASQ
  7. หลังผมเปิดบริการ เครื่องลูกก็ใช้งานได้แล้ว แต่ไม่อยากใช้งาน จึงปิดบริการด้วยการสั่ง setup แล้วเลือก * หน้า dhcp ออก

9.71 ติดตั้ง Web Mail ของ Adjeweb หรือ Squirrelmail
: โปรแกรมให้บริการที่ผมทดสอบให้บริการ มี 2 โปรแกรม ตอนหลังมาผมใช้แต่ squirrelmail เพราะนิยมใช้กันมาก
    ขั้นตอนการติดตั้ง squirrelmail.org
  1. download โปรแกรมนี้จาก http://squirrelmail.org/download.php เพราะเชื่อว่าของใหม่ย่อมดีกว่าที่ติดมากับ RH9.0
  2. ใช้ rpm -i squirrelmail-1.4.5-1.noarch.rpm โปรแกรมก็จะเข้าไปใน /usr/share/squirrelmail
  3. ใน httpd.conf เพิ่ม Alias /webmail/ "/usr/share/squirrelmail/" เพื่อเรียกเว็บ http://... /webmail
  4. เปิดแฟ้ม /usr/share/squirrelmail/config/config.php แล้วแก้ไข option ต่าง ๆ ได้
    จาก $default_charset = 'iso-8859-1'; เป็น $default_charset = 'windows-874';
    จาก $squirrelmail_default_language = 'en_US'; เป็น 'th_TH';
  5. แค่นี้ก็ ok เพราะเครื่องเดียวกันเป็น web, mail และ smtp ในตัวเองครับ
  6. ยกเลิก comment คลุมภาษาไทย ใน /usr/share/squirrelmail/functions/i18n.php
    $languages['en_US']['NAME'] = 'English';
    $languages['en_US']['CHARSET'] = 'tis-620';
    $languages['en_US']['LOCALE'] = 'en_US.ISO8859-1';
    $languages['en']['ALIAS'] = 'en_US';
  7. Download plugins select_language จาก http://www.squirrelmail.org/plugin_download.php?id=253&rev=1228
  8. แฟ้มที่เก็บ Top menu ด้านขวา คือ /usr/share/squirrelmail/functions/page_header.php
+ พบคำว่า You must be logged in to access this page. ตรวจแล้วเกิดจาก server เต็ม จึง login ผ่าน webmail ไม่ได้
+ แก้ไขโดยเข้าห้อง /var/mail แล้วใช้คำสั่ง ls -alS
    ขั้นตอนการติดตั้ง adjeweb.com
    ข้อ 1 และ 2 จะทำเมื่อใช้คำสั่ง rpm -qa|grep imap แล้วไม่พบว่ามีอยู่แล้ว จึงต้องติดตั้งเพิ่ม
  1. หากยังไม่ได้ mount cd ต้องทำก่อนโดยใช้คำสั่ง mount /dev/cdrom ก็จะทำให้มีห้อง /mnt/cdrom ขึ้นมา ใช้คำสั่ง cd เข้าไปดูได้
  2. ติดตั้ง imap ซึ่งก็คือ pop3 นั่นเองจาก CD ที่ใช้ลง linux ด้วยคำสั่ง rpm -i imap-4.7-5.i386.rpm และ rpm -i imap-devel-4.7-5.i386.rpm
  3. ถ้าต้องการให้เครื่องนี้บริการ pop3 เอง สามารถเปิดบริการ โดยแก้แฟ้ม /etc/inetd.conf นำ # ออกหน้าคำว่า pop3 pop2 imap มิเช่นนั้นจะไม่สามารถบริการ pop ได้ แต่สามารถรับส่ง mail ด้วย telnet หรือจะใช้ adje ไปขอบริการจาก pop server ตัวอื่นก็ได้ คำสั่งที่ใช้ re-read inetd.conf คือ killall -HUB inetd และคำสั่งที่น่ารู้คือ ntsysv เพื่อใช้เปิด หรือปิดบริการใน /etc/services
  4. อาจตรวจสอบว่าเปิดบริการหรือไม่ด้วยคำสั่ง setup, system services ดูในส่วนบริการ ipop2 และ ipop3 จะต้องมีเครื่องหมาย x เพื่อแสดงว่าบริการนี้เปิดแล้ว
  5. สร้าง user ชื่อ webmail แล้วใช้ user นี้ทำงาน หรือใช้ su - webmail เพื่อเปลี่ยนตนเองอย่างง่าย ๆ ก็ได้
  6. copy โปรแกรมสำหรับ install จาก adjeweb.com หรือ install.pl # (ตัวนี้ต้อง rename ก่อน เพราะผม save เปลี่ยนชื่อไว้)
  7. หมายความว่าเมื่อ copy adjewebmailinstall.pl.txt มาได้แล้วให้ใช้ mv adjewebmailinstall.pl.txt install.pl เพราะถ้าผมเก็นในสกุล .pl ท่านจะ copy มาไม่ได้
  8. ก่อนลงโปรแกรมให้ chmod ห้อง /home/httpd/cgi-bin เป็น 777 ก่อนแล้วค่อยเปลี่ยนคืนเป็น 755 ด้วยคำสั่ง chmod 777 /home/httpd/cgi-bin
  9. เมื่อได้โปรแกรมมา ให้ chmod 755 install.pl
  10. Install ด้วยการพิมพ์ว่า ./install.pl ซึ่งแฟ้มนี้ควรอยู่ใน home directory ของท่าน
  11. เมื่อถามว่า cgi อยู่ห้องใดก็มักจะเป็น /home/httpd/cgi-bin
  12. เมื่อถามว่า pop server คืออะไร ก็ตอบว่า www.isinthai.com หรือ กดปุ่ม Enter หรือ จะใส่ ip ของเครื่องก็ OK เป็นต้น
  13. เมื่อถามว่า pop server คืออะไร ก็ตอบว่า mail.loxinfo.co.th เป็นต้น
  14. reboot สักหน่อย แล้วเปิดเว็บเรียก http://www.isinthai.com/cgi-bin/WebMail/inbox.cgi ก็เรียบร้อย
  15. จะให้ดีเป็น su แล้วให้ ln -s /home/httpd/cgi-bin/WebMail /home/httpd/html/webmail จะทำให้เปิดเว็บด้วย http://www.isinthai.com/webmail ซึ่งสั้นกว่ากันเยอะ

9.72 ติดตั้ง squid เป็น Proxy server ที่ 3128
: โปรแกรมนี่จะทำให้ความเร็วในการให้บริการ internet โดยรวมขององค์กรดีขึ้น ถ้าปฏิบัติตามระเบียบในการใช้ proxy
    ระเบียบการใช้ proxy
  1. เมื่อติดตั้ง squid ลงไปใน linux server ขององค์กรแล้ว ท่านก็จะได้เครื่อง proxy server ขึ้นมา 1 ตัว
  2. ไปกำหนดในเครื่องทุกเครื่องให้มองมาที่ proxy server ตัวนี้ เช่น www.isinthai.com บน port 3128 อย่ากำหนดมาที่นี่นะครับ เพราะจะทำให้เครื่องท่าน เปิดเว็บช้าโดยใช่เหตุ แต่ถ้าเครื่องของท่านตั้งอยู่ในเครือข่ายของโยนก นั่นจะเป็นอะไรที่ถูกต้อง
  3. หลังจากกำหนด proxy ให้ชี้ไปที่ www.isinthai.com อย่างถูกต้องแล้ว ทุกครั้งที่เปิดเว็บด้วย browser จะวิ่งไปที่เครื่องนั้นก่อน เพื่อตรวจว่า เว็บที่ขอเปิดเคยเปิดหรือไม่ ถ้าเคยเมื่อไม่นานนี้ ก็จะไม่ออกไปนอกเครือข่าย แต่จะเอาข้อมูลจาก proxy มาให้ท่าน ทำให้ไม่ต้องออกไปนอกเครือข่าย โดยไม่จำเป็น
ขั้นตอนข้างล่างนี้ อาจไม่จำเป็น ต้องทำทุกขั้นตอน ถ้าตอน install linux ได้เลือก squid หรือ everything ก็ไม่จำเป็นต้อง ลงโปรแกรมอีกรอบ เพียงแต่เข้าไป set up แฟ้ม squid.conf ใน /home/squid/etc/squid.conf หรือ /etc/squid/squid.conf แต่ถ้าเปลี่ยนใจต้องการ ลง squid ใหม่ แทนที่จะใช้ตัวที่ติดตั้งมาก็ลบตัวเดิมออกด้วยคำสั่ง rpm -e squid-2.3.STABLE1-5 เพราะผมใช้คำสั่ง rpm -qa|grep squid แล้วพบว่า install มาตอนติดตั้ง linux ครับ (squid-2.3-200103110000-src.tar.gz ขนาด 971,877 byte)
ติดตั้ง squid เพื่อทำให้ server เป็น proxy สำหรับองค์กร ที่ต้องการลดปัญหาคอขวด มีบทความแนะนำที่ http://www.thailinux.com/1999/04/18/topic1.html คุณ new way เขียนได้ละเอียดดีมาก ต้องยกนิ้วให้ครับ ซึ่งแนะนำให้ Download squid ของ http://squid.nlanr.net/Squid/ เมื่อลง squid ตามขั้นตอนแล้ว มี จุดที่ต้องแก้ไขในแฟ้ม ~/etc/squid.conf คือ cache_effective_user squid และ cache_effective_group squid และ cache_peer www.isinthai.com parent 3128 3130 และ http_access allow all
ดู log file ของ squid ที่ห้อง ~/logs ในแฟ้ม cache.log (ต้องใช้ user squid ในการ set squid ตลอดนะครับ) โดยใช้คำสั่ง tail -f access.log และสามารถอ่านรายละเอียด การกำหนดเพิ่มเติม ได้ที่ http://www.squid-cache.org/Doc/Hierarchy-Tutorial/
    ขั้นตอนการติดตั้ง squid ให้เครื่องเป็น proxy server http://www.thailinux.com/1999/04/18/topic2.html
    su
    adduser squid
    passwd squid
    su squid (ไม่ใช้ user squid ก็ได้ แต่ถ้าใช้ดูด้วยว่า gcc เปิดหรือไม่)
    cd /home/httpd/html/thaiall
    tar xfvz squid-2.3-200103110000-src.tar.gz
    cd squid-2.3-200103110000
    ./configure --prefix=/home/squid
    make all
    make install (แปลกมากที่ บรรทัดนี้ error แต่ก็ไม่เป็นไร เพราะใช้งานได้ปกติ)
    cd /home/squid/etc
    pico squid.conf
    
      # Detail in file /home/squid/etc/squid.conf หรือ /etc/squid/squid.conf http_port 3128 cache_peer www.isinthai.com parent 3128 3130 cache_mem 8 MB cache_swap_low 90 cache_swap_high 95 maximum_object_size 4096 KB minimum_object_size 0 KB ipcache_size 1024 ipcache_low 90 ipcache_high 95 cache_dir ufs /home/squid/cache 100 16 256 cache_access_log /home/squid/logs/access.log cache_log /home/squid/logs/cache.log cache_store_log /home/squid/logs/store.log refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 21 443 563 70 210 1025-65535 acl Safe_ports port 280 acl Safe_ports port 488 acl Safe_ports port 591 acl Safe_ports port 777 acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow all icp_access allow all miss_access allow all cache_effective_user squid cache_effective_group squid
    ทดสอบการทำงานของ squid
    cd /home/squid/bin หรือ /usr/sbin
    squid -z สร้าง swap directory
    squid สั่ง start manual
    ps aux|grep squid  ดูว่า squid ทำงานใน process หรือไม่
    cd /home/squid/logs ห้องนี้เก็บ ผลการทำงานเมื่อใช้ squid
    tail -f access.log เมื่อมีคนเปิดเว็บแล้วใช้บริการ squid จะมีผลต่อแฟ้มนี้
    
    วิธีทำให้ทุกครั้งที่เปิดเครื่องแล้ว run squid อัตโนมัติ หรือปรับปรุง
    # เพิ่มบรรทัดข้างล่างนี้ไปในแฟ้ม /etc/rc.d/rc.local
    su -c "nohup /home/squid/bin/squid&" squid
    หรือ
    su -c "nohup /usr/sbin/squid&" squid
    
    # เมื่อปรับค่า เช่นขนาดของ cache ใน /home/squid/etc/squid.conf หรือ /etc/squid/squid.conf แล้วต้องทำบรรทัดข้างล่างนี้ เพื่อ update ค่าต่าง ๆ ใหม่ squid -k reconfigure
    # แสดง option ของ squid ให้พิมพ์ว่า squid -k

9.73 เพิ่ม incoming ในบริการ ftp
: บริการ ftp ทำให้ท่านสามารถเข้ามา คัดลอกแฟ้ม หรือส่งแฟ้มไว้ได้ เช่น ftp://www.isinthai.com ftp://ftp.isinthai.com
พบว่าการปิด gcc นั้นสามารถป้องกัน h cker ในระดับ telnet ได้ระดับหนึ่ง แต่ถ้ามีการเปิด ftpd ด้วย ถึงไม่ telnet เข้ามา h cker ก็สามารถเจาะเข้ามาในระบบได้ .. เขาทำได้
    รายชื่อห้องใน /home/ftp แต่เราได้เพิ่ม incoming เข้าไป เพื่อให้ส่งแฟ้มเข้ามาได้
    d--x--x--x    2 root     root         4096 Mar  9 20:51 bin
    d--x--x--x    2 root     root         4096 Mar  9 20:51 etc
    drwxr-xr-x    2 root     root         4096 Mar  9 20:51 lib
    drwxrwxrwx    2 root     root         4096 Mar 20 23:55 incoming
    drwxr-sr-x    2 root     ftp          4096 Mar 11 13:34 pub
    
    วิธีสร้างห้อง incoming เพื่อให้ใคร ๆ ส่งแฟ้มเข้ามาได้
    su
    cd /home/ftp
    mkdir incoming
    chmod 777 incoming
    

9.74 User authentication ด้วย .htpasswd + .htaccess
: การปิดห้อง แต่ยอมให้เข้าด้วย username และ password ที่กำหนด
อ่านเพิ่มเติมได้จาก http://www.apacheweek.com/features/userauth หรือ http://www.thaiall.com/cgi/htpasswd.pl
    ขั้นตอนการ lock ห้องของตนเอง ในฐานะผู้ใช้ทั่วไป
  1. ท่านต้องส่งแฟ้ม 2 แฟ้มคือ .htpasswd และ .htaccess ไปไว้ในห้องที่ต้องการ lock โดยทำการถาม User และ password ก่อนเข้า
  2. .htaccess นั้นสามารถคัดลอกด้านล่างไปได้เลย โดยแก้ไขอะไรเล็กน้อยตามต้องการ เช่นเปลี่ยนคำว่า lock ที่บรรทัดแรก เป็น username ของท่าน
  3. .htpasswd แต่ละบรรทัดคือ 1 user สำหรับแฟ้มนี้ ถ้าผู้ดูแลไม่คิดบริการ ท่านก็ใช้บริการไม่ได้ สำหรับ server ที่ผมดูแล ได้ทำ โปรแกรมเข้ารหัส สร้างรหัสให้
    ถ้าเป็นผู้ดูแล(Super user) สามารถใช้
    คำสั่ง #htpasswd -nb yourname yourpassword แสดงรหัสผ่าน ที่ shell prompt
    คำสั่ง #htpasswd -c .htpasswd yourname สร้างแฟ้ม .htpasswd พร้อม รอรับรหัสผ่าน จากแป้นพิมพ์
    ดูเพิ่มเติมจาก #man htpasswd ที่ shell prompt
  4. เปิดเว็บ http://www.isinthai.com/lock/index.php เพื่อป้อนรหัสผู้ใช้ และรหัสผ่าน จะได้รหัสที่สร้างขึ้น เพื่อนำไปเพิ่มในแฟ้ม .htpasswd
    http://www.isinthai.com/lock/.htaccess
      AuthUserFile /var/www/html/lock/.htpasswd
      AuthName "User:yourname Password:yourpassword for accessing this directory"
      AuthType Basic
      require valid-user
      DirectoryIndex index.html index.htm index.shtml index.php
    http://www.isinthai.com/lock/.htpasswd
      test:1A/c8vPQJQiL2
      yourname:UtecEDcEa3/L2
    ปัญหา และวิธีแก้ไข ที่ผู้ดูแลอาจพบ
    ครั้งแรกที่สร้าง .htaccess และ .htpasswd ก็ไม่เกิดผล คือสองแฟ้มนี้ไม่ทำงาน ตรวจสอบแล้วพบว่าผู้ดูแลต้องแก้แฟ้ม /etc/httpd/conf/httpd.conf
    ให้ส่วนของ <Directory "/var/www/html"> ในบรรทัดที่เขียนว่า AllowOverride None เปลี่ยนเป็น AllowOverride All
    หรือส่วนของ <Directory "/"> ในบรรทัดที่เขียนว่า AllowOverride None เปลี่ยนเป็น AllowOverride All ถ้าท่านใช้ public_html
    http://www.isinthai.com/lock/index.php 
    :: ใช้แสดงรหัสที่ผู้ใช้กำหนดขึ้น และนำไปเพิ่มในแฟ้ม .htpasswd ของ directory ที่ต้องการ lock
    
      <form action=index.php method=get> User: <input name=u value=yourname><br> Password: <input name=p value=yourpassword><br> <input type=submit value=generate_password> </form> This line for .htpasswd<br><font face='courier new'> <? $x = "htpasswd -nb ". $_GET['u'] . " " . $_GET['p']; echo `$x`; ?> <hr> Detail of .htaccess and .htpasswd at<br> http://www.thaiall.com/cgi/htpasswd.pl

    Username:
    Password:

9.75 เปิดบริการ SSI (Server Side Include)
: บริการนี้ทำให้การเขียน CGI มีสีสรรขึ้นอีกมาก และเพิ่มลูกเล่นให้กับเว็บได้อีกเพียบ
SSI คือการทำให้สามารถเรียก CGI เช่น perl เข้าไปประมวลผลในเว็บ htm โดยทำการประมวลผล แล้วส่งค่าเข้าคืนให้กับผู้เรียกเว็บ การทำงานลักษณะนี้ จะเป็นการ run program ที่ server แล้วส่งผลให้กับผู้ร้องขอเช่นตัวอย่างข้างล่างนี้
ผลของการเปิดเว็บ test.htm จะแสดงตัวอักษร x บนจอภาพ ซึ่งเกิดจากบริการ ssi นั่นเอง แต่ถ้า server ไม่บริการ ssi บรรทัดคำสั่งก็จะแสดงผลอย่างนั้น แต่จะไม่เห็นผลอะไรบนจอภาพเลย เนื่องจากคำสั่งดังกล่างไม่ได้ถูกประมวลผล ตามหน้าที่ของ ssi
ถ้า SSI work นะครับ เวลาเปิด test.htm จะเห็น x ตัวเดียว เรียกว่า ssi สมบูรณ์ หรือเปิดเว็บ pro.pl แล้วต้องเห็น x ตัวเดียวเช่นกัน แต่ถ้าเปิดแล้วเห็น source code แสดงว่าไม่มีการประมวลผล .pl นั้น
    สมมุติให้ test.htm เขียนดังข้างล่างนี้
    <body>
    <!--#exec cgi="pro.pl"-->
    </body>
    
    สมมุติให้ pro.pl เขียนดังข้างล่างนี้
    #!/usr/bin/perl
    print "Content-type:text/html\n\n";
    print "x"; 
    

การทำให้ Linux (RH 8.0)ให้บริการ SSI
บริการนี้มีอยู่แล้วไม่ต้องลงโปรแกรมเพิ่ม เพียงแต่แก้ไขข้อกำหนดในแฟ้ม /etc/httpd/conf/httpd.conf เท่านั้น โดยผมได้ดูตัวอย่างพร้อมคำอธิบายจาก http://www.c2.net/support/sh3/admin_guide/chapter7.fm.html ซึ่ง Search เจอจาก redhat.com
    
    # <Directory "/var/www/html"> ของเดิม
    # Options Indexes FollowSymLinks ของเดิม
    <Directory "/home/httpd/html">
    Options All 
    
    # AddHandler cgi-script .cgi ของเดิม
    AddHandler cgi-script .cgi .pl
    
    # AddType text/html .shtml ของเดิม
    # AddHandler server-parsed .shtml ของเดิม
    AddType text/html .shtml .htm .html
    AddHandler server-parsed .shtml .htm .html 
    
    
จากการ set up ครั้งนี้ทำให้การประมวลผล Perl ที่ต้อง Run จากห้อง cgi-bin เช่น http://www.isinthai.com/cgi-bin/thaiall/test.pl มาเป็น http://www.isinthai.com/thaiall/test.pl ทำให้สะดวกขึ้นมาก และที่ผมพบวิธีการ setup SSI ในครั้งนี้ต้องยกความดีความชอบให้ Redhat.com เพราะเขาเขียนอธิบายไว้พอเข้าใจ รู้สึกว่าเข้าที่นี่แล้วหาอะไร ก็เจอไปหมดครับ
9.76 การติดตั้ง Radius
: เพื่อทำเครื่อง Radius server รับบริการ Connect Internet ทางโทรศัพท์ผ่าน External modem
    โปรแกรมที่ใช้ install คือ radius-1.16.tar.GZ 27804 Byte ขั้นตอนการลงโปรแกรม su tar xvfz radius-1.16.tar.GZ cd radius-1.16 cd src make จะเกิด error ว่า radiusd.o: In function `unix_pass': radiusd.o(.text+0x1c77): undefined reference to `crypt' collect2: ld returned 1 exit status make: *** [radiusd] Error 1 จะพบว่า make ไม่ผ่านให้ ให้แก้แฟ้ม Makefile ด้วยคำสั่ง pico Makefile แล้วแก้บรรทัดหนึ่งใน Makefile จาก LIBS= เป็น LIBS= -lcrypt make cd ../raddb pico /etc/services radius 1645/udp radiusd radacct 1646/udp #radius 1812/tcp # Radius #radius 1812/udp # Radius #radacct 1813/tcp # Radius Accounting #radacct 1813/udp # Radius Accounting umask 22 mkdir /usr/adm mkdir /etc/raddb /usr/adm/radacct chmod 700 /etc/raddb /usr/adm/radacct cp * /etc/raddb cp ../src/radiusd /etc cd /etc/raddb cp clients.example clients cp users.example users เพิ่มคำว่า /etc/radiusd ในแฟ้ม /etc/rc.d/rc.local เพื่อให้ทุกครั้งที่เปิดเครื่องจะสั่ง run radiusd ขึ้นมา ให้แก้แฟ้ม users โดยลบ user อื่นออกให้หมด เพื่อต่อไปจะถาม user จาก /etc/passwd ให้แฟ้ม /etc/raddb/users เหลือเฉพาะส่วนข้างล่างนี้ ให้แก้แฟ้ม /etc/raddb/users ให้เป็นไปดังข้างล่างนี้จะรับระบบโทรศัพท์ได้ DEFAULT Password = "UNIX" User-Service-Type = Login-User, Framed-Protocol = PPP, Framed-Netmask = 255.255.255.0, Framed-Routing = Broadcast-Listen, Framed-Compression = Van-Jacobsen-TCP-IP, Framed-MTU = 1500 แฟ้ม /etc/raddb/users สามารถเขียนได้อีกรูปแบบเพื่อบริการ Modem ที่เข้ามาสอบถาม user แต่ตัว modem ไม่ได้ติดอยู่กับตัวเครื่อง yonokadmin Password = "123" User-Service-Type = Shell-User, Login-Service = Telnet, yonok Password = "456" User-Service-Type = Shell-User, Login-Service = Telnet, student1 Password = "789" User-Service-Type = Login-User, Framed-Protocol = PPP, Framed-Address = 255.255.255.254, Framed-Netmask = 255.255.255.255, Framed-Routing = None, Framed-Filter-Id = "std.ppp.in", Framed-MTU = 1500, student2 Password = "17890" User-Service-Type = Login-User, Framed-Protocol = PPP, Framed-Address = 255.255.255.254, Framed-Netmask = 255.255.255.255, Framed-Routing = None, Framed-Filter-Id = "std.ppp.in", Framed-MTU = 1500
    เมื่อต้องการเก็บข้อมูลการ login เข้ามาใช้บริการ ต้องสร้าง user ใหม่ด้วย useradd radius จะสร้างห้อง /home/radius ขึ้นมาให้ ดังข้างล่างนี้ก่อน su useradd radius cd /home/radius mkdir backup สร้าง runacct เก็บในห้อง /home/radius เขียน shell script สำหรับเก็บผลการ login ผ่านเข้ามาในระบบ เมื่อเขียนเสร็จแล้วให้ใช้คำสั่ง chmod 700 เพื่อให้เป็นโปรแกรมประมวลผล (ตอนแรกผมก็ไม่รู้ว่า detail นั้นอยู่ที่ไหน เจอเพราะใช้ find / -name detail ครับ) #!/bin/sh cp /usr/adm/radacct/door.yonok.ac.th/detail /home/radius /bin/date +%d > /tmp/date /bin/date +%m > /tmp/month /bin/date +%y > /tmp/year DATE=`cat /tmp/date` MONTH=`cat /tmp/month` YEAR=`cat /tmp/year` TODAY="$DATE$MONTH$YEAR" cd /home/radius cp detail backup mv detail $TODAY cd /tmp rm date month year rm /usr/adm/radacct/door.yonok.ac.th/detail ห้อง /etc/cron.daily ให้เพิ่มแฟ้มอีก 1 แฟ้มในห้อง /etc/cron.daily โดยมีขั้นตอนดังนี้ su pico radiusprocess พิมพ์คำนี้ลงไป /home/radius/runacct แล้ว ctrl-x ออกมาเลย chmod 755 radiusprocess สรุปในเรื่องของ Radius ดังนี้
    1. แฟ้ม /etc/rc.d/rc.loal อาจต้องเพิ่มไป 2 บรรทัด เพราะแฟ้มนี้ทำหน้าที่เสมือน autoexec.bat ของ dos และคำสั่ง 2 บรรทัดนี้อาจไม่จำเป็นก็ได้ แล้วแต่กรณี /etc/radiusd /sbin/ifconfig eth0:1 202.29.78.15
    2. ห้อง /home/radius มีแฟ้มชื่อ runacct ซึ่งเป็น script สำหรับเก็บข้อมูลการ login ไว้ทำสถิติ
    3. ห้อง /etc/raddb มีแฟ้มชื่อ users ซึ่งเก็บ account สำหรับ connect เข้ามาทั้งหมด
    4. ห้อง /etc/cron.daily มีแฟ้มชื่อ radiusprocess เพื่อสั่งให้ประมวลผลแฟ้ม /home/radius/runacct ทุกวัน
    5. แก้แฟ้ม /etc/raddb/clients ให้มีคำว่า 202.29.78.254 YournameRadiuS แทนคำว่า postmaster1 testing123 จึงจะรับ connection จากชุด Router Modem แต่ถ้าเป็นการ Connect Modem ผ่าน Com port แฟ้มนี้ไม่แก้อะไรก็ใช้ได้
    6. สำหรับ crond ต้องเปิดด้วย ใช้ ntsysv ดูว่า crond ถูกปิดหรือไม่ ถ้าไม่เปิดก็เก็บประวัติการเข้าใช้ไม่ได้

9.77 ติดตั้ง Modem สำหรับให้บริการเรียกเข้ามา
: Radius server คือการทำให้เครื่องให้บริการในการสอบถาม user แต่การติดตั้ง Modem เข้าไปก็เป็นอีกเรื่องหนึ่ง
วิธีการติดตั้ง Modem แบบ x window http://www.thailinux.com/1999/03/14/topic1.html
สำหรับเรื่อง Modem ตอนนี้ผมยังไม่ได้ทำ เพราะหาเครื่องทดลองยังไม่ได้ แต่มอบหมายให้สุวิทย์ไปดูอยู่ครับ
การติดตั้ง Modem ที่ง่ายที่สุดคือใช้ Modem tool โดยการ startx แต่ถ้าจะทำแบบ text mode ต้องอ่านที่ http://www.thailinux.com/1999/03/21/topic1.html โดยติดตั้งที่ COM1 ทำ symbolic link ใน directory /dev จาก ttyS0 เป็น modem หรือถ้าติดตั้งบน COM2 ก็ ttyS1 แล้วก็ไล่เลขไปเรื่อย ๆ ถ้าคุณมี serial port มากกว่า 2 (ขอย้ำ วิธีที่ง่ายที่สุดคือ startx แล้วเรียก modemtool)
    การต่อ modem โทรเข้า isp แบบ text mode #ls -l /dev/modem ตรวจสอบการเชื่อมต่อ modem ถ้าไม่ได้ต่อ แต่เอาโมเด็มเสียบเข้าเครื่องที่หลัง ให้สร้างการเชื่อมต่อใหม่ #ln -sf /dev/cua0 /dev/modem สำหรับต่อ modem จาก com1 #ln -sf /dev/cua1 /dev/modem สำหรับต่อ modem จาก com2
    สร้าง Script testmodem เชื่อมต่อ 13 บรรทัดข้างล่างนี้
      #!/bin/bash TELEPHONE=188,125 # The telephone number for the connection ACCOUNT=george # The account name for logon (as in 'George Burns') PASSWORD=gracie # The password for this account (and 'Gracie Allen') LOCAL_IP=0.0.0.0 # Local IP address if known. Dynamic = 0.0.0.0 REMOTE_IP=0.0.0.0 # Remote IP address if desired. Normally 0.0.0.0 NETMASK=255.255.255.0 # The proper netmask if needed export TELEPHONE ACCOUNT PASSWORD DIALER_SCRIPT=/etc/ppp/ppp-on-dialer exec /usr/sbin/pppd debug lock modem crtscts /dev/ttyS1 115200 \ asyncmap 20A0000 escape FF kdebug 0 $LOCAL_IP:$REMOTE_IP \ noipdefault netmask $NETMASK defaultroute connect $DIALER_SCRIPT # /usr/sbin/pppd debug lock /dev/modem 115200 defaultroute
    จากนั้นก็ chmod 700 testmodem เพื่อให้โปรแกรมนี้ run ได้ คำสั่งที่สำหรับ disconnect cp /usr/doc/ppp-2.3.11/scripts/ppp-off /root/ppp-off chmod 700 /root/ppp-off
    เพิ่มบรรทัดข้างล่างนี้เข้าไปในแฟ้ม /etc/mgetty+sendfax/login.conf * - @ /usr/sbin/pppd auth -chap +pap login modem crtscts lock

9.78 SMTP สำหรับ outgoing ของ Outlook ..
: Sendmail Transfer protocol ทำให้ส่ง e-mail ผ่าน outlook หรือโปรแกรมอื่น ๆ ในลักษณะเดียวกันได้
บริการนี้ทำให้ส่ง e-mail ผ่านโปรแกรม outlook ได้ การเปิดบริการ smtp มีขั้นตอนหลายอย่าง ตั้งแต่การเปิด port และเปิด relay ให้กับเครื่องในเครือข่าย ถ้าไม่เปิด relay ให้ก็หมดสิทธิใช้ เพราะ relay จะ denied การให้บริการ SMTP เพราะ SMTP เหมาะกับการเปิดบริการให้กับสมาชิกเท่านั้น
อธิบายการใช้ cyrus เป็น imap http://rd.cc.psu.ac.th/content/view/23/46/
ใน FC4 ใช้ dovecot แทน imap ดูจาก http://www.itwizard.info/webboard/view.php?No=545
#getsebool -a แสดงสถานะว่าบริการอะไร Active อยู่บ้าง
#setsebool -P httpd_can_network_connect=1 (เปลี่ยนเป็น active แบบถาวร)
อ่านเพิ่มเติมได้ที่
- http://thaicert.nectec.or.th/paper/unix_linux/sendmail.php
- http://www.redhat.com/support/resources/faqs/RH-sendmail-FAQ/book1.html
  1. เข้า setup เลือก system services แล้วเลือกเปิด sendmail
    ผลการเปิด sendmail จะทำให้ port 25 ถูกเปิด
    ลองใช้คำสั่ง netstat -a จะแสดงรายชื่อ port ที่เปิดให้บริการ
    ถ้าไม่มีตัวเลือก sendmail ก็ต้องหาแผ่น CD มาติดตั้งเพิ่มด้วยการใช้คำสั่ง rpm -i sendmail
  2. แก้แฟ้ม /etc/mail/sendmail.mc (เพิ่มบริการตรวจสอบ Blacklist)
    เดิม DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
    ใหม่
    dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')
    dnl changed FEATURE(dnsbl, `rbl.maps.vix.com', `Open spam relay - see http://maps.vix.com/')dnl
    dnl changed FEATURE(dnsbl, `blackholes.mail-abuse.org', `Rejected - see http://www.mail-abuse.or$
    dnl changed FEATURE(dnsbl, `dialups.mail-abuse.org', `Dialup - see http://www.mail-abuse.org/dul$
    dnl changed FEATURE(dnsbl, `relays.mail-abuse.org', `Open spam relay - see http://work-rss.mail-$
    dnl changed FEATURE(dnsbl, `inputs.orbz.org', `Open spam relay - see http://orbz.org/')dnl
    dnl changed FEATURE(dnsbl, `outputs.orbz.org', `Open spam relay - see http://orbz.org/')dnl
    FEATURE(dnsbl, `orbs.dorkslayers.com', `Open spam relay - see http://dorkslayers.com/')dnl
    FEATURE(dnsbl, `dev.null.dk', `Open spam relay - see http://null.dk/')dnl
    FEATURE(dnsbl, `bl.spamcop.net', `Open spam relay - see http://spamcop.net/')dnl
    FEATURE(dnsbl, `relays.osirusoft.com', `Open spam relay - see http://osirusoft.com/')dnl
    FEATURE(dnsbl, `relays.visi.com', `Open spam relay - see http://visi.com/')dnl
    FEATURE(dnsbl, `list.dsbl.org', `Open spam relay - see http://dsbl.org/')dnl
    FEATURE(dnsbl, `relays.ordb.org', `Open spam relay - see http://ordb.org/')dnl
    FEATURE(dnsbl, `proxies.relays.monkeys.com', `Open spam relay')dnl
    FEATURE(dnsbl, `dnsbl.sorbs.net', `Open spam relay')dnl
    FEATURE(dnsbl, `dynablock.easynet.nl', `Open spam relay')dnl
    FEATURE(delay_checks)dnl
    FEATURE(relay_based_on_MX)dnl
    MAILER(smtp)dnl
    MAILER(procmail)dnl
    Cwlocalhost.localdomain
    Cwmail.yonok.ac.th
    Cw202.29.78.1

    + การเพิ่มบรรทัดข้างบนนี้ท่านต้องแน่ใจว่า server ของท่านไม่อยู่ใน black list มิเช่นนั้นจะไม่ได้รับ e-mail เข้ามาเลย
    + ถ้าเครือข่ายต่างประเทศล่ม แล้วท่านยังใช้บริการ black list ท่านจะไม่สามารถรับจดหมายใหม่ จากเครื่อข่ายในไทย เพราะระบบกรอง mail ล้มเหลว
  3. พบว่า config ใน sendmail.mc ผิด เรื่อง local_procmail ต้องแก้ให้ถูก ถ้าไม่ถูก .procmailrc ใน home ก็ไม่ทำงาน .. เท่านั้นเอง
    หลักการนี้ยังมีปัญหา อย่างพึ่งทำอะไรนะครับ ผมต้องค้นข้อมูลอีกที เพราะใช้แล้วระบบส่ง mail ไม่ออก
    เดิม FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
    ใหม่ FEATURE(`local_procmail',`procmail -t -Y -a $h -d $u')dnl
  4. แก้แฟ้ม /etc/mail/access เพื่อเปิด relay
    localhost.localdomain RELAY
    localhost RELAY
    202.29.78 RELAY
    127.0.0.1 RELAY
    10 550 No service
  5. เคยใช้บรรทัดนี้ แต่ใน RH9.0 ไม่ได้ลง SQL จึงใช้คำสั่งนี้ไม่ได้ # update /etc/mail/*.db
  6. # cd /etc/mail
  7. # make
  8. # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
  9. # /etc/init.d/sendmail restart
  10. # /sbin/chkconfig --level 3 sendmail on
    วิธีหยุด spam หรือ junk แบบ procmail ที่ http://www.redhat.com
  11. เปิดแฟ้ม /etc/postfix/main.cf ควบคุมการส่งอีเมลขยะออกจากเครื่อง ผ่าน relayhost
    #relayhost = [an.ip.add.ress]
    relayhost = smtp.yonok.ac.th
    แล้ว Restart Sendmail อีกครั้ง ตรวจด้วย ps -aux | grep sendmail
    local_destination_concurrency_limit = 3
  12. เปิดแฟ้ม /etc/postfix/master.cf ควบคุมการส่งอีเมลขยะออกจากเครื่อง ผ่าน spamassassin
    smtp inet n - n - - smtpd -v (ทำให้เก็บ log ได้ละเอียด)
    smtp inet n - - - - smtpd -o content_filter=spamassassin
    spamassassin unix - n n - - pipe
    flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}

9.79 ติดตั้ง SSL (Secure Sockets Layer)
: ปกป้องรหัสของผู้ใช้เมื่อเชื่อมต่อกับเครื่องบริการ
SSL (Secure Sockets Layer) เป็นระบบรักษาความปลอดภัยในเว็บไซต์รูปแบบหนึ่งที่เป็นที่นิยมกัน ซึ่ง SSL จะใช้เพื่อเข้ารหัส (encrypt) ข้อมูลตัวมันเอง ใช้เพียงแต่การตรวจสอบหรือยืนยันได้เฉพาะฝั่งผู้ขายเท่านั้นว่ามีตัวตนจริง ไม่สามารถยืนยันตัวผู้ซื้อได้ ซึ่ง SSL จะมีความเร็วในการทำงานมากกว่า PKI ประมาณ 10 - 100 เท่า และยังสามารถใช้งานกับบราวเซอร์ต่าง ๆ ได้ การทำงานจะเริ่มจาก ผู้ใช้งานเริ่มกระบวนการติดต่อไปยังเว็บเซิร์ฟเวอร์ที่มีระบบ SSL หลังจากนั้นเซิร์ฟเวอร์จะส่งใบรับรอง (Server Certificate) กลับมาพร้อมกับการเข้ารหัสด้วยกุญแจสาธารณะ (Public Key) ของเซิร์ฟเวอร์ จากนั้นคอมพิวเตอร์ของฝั่งผู้รับจะทำการตรวจสอบใบรับรองอีกที เพื่อตรวจสอบตัวตนของฝั่งผู้ค้า หลังจากนั้นจะทำการสร้างกุญแจสมมาตร (Symmetric Key) โดยการสุ่มและทำการเข้ารหัสกูญแจสมมาตรด้วยกุญแจสาธารณะของเซิร์ฟเวอร์ที่ได้รับมาเพื่อส่งกลับไปยังเซิร์ฟเวอร์ เมื่อได้รับแล้วก็จะทำการถอดรหัสด้วยกุญแจส่วนตัว (Private Key) ก็จะได้กุญแจสมมาตรของลูกค้ามาใช้ในการติดต่อสื่อสาร เพื่อให้การติดต่อสื่อสารถึงกันได้อย่างปลอดภัย
อ.อิทธิพล เพื่อนของผมทดสอบใช้โปรแกรม sniffer ในเครือข่ายของเรา ทำให้ผมต้องศึกษา SSL อย่างจริงจัง แต่เครื่องเมล์ของผมใช้ Fedora ซึ่งมีเอกสารเกี่ยวกับรุ่นนี้ไม่มากนัก จึงใช้เวลา Config อยู่นานกว่าจะลงตัว Port ของ SSL คือ 443
    ตัวอย่างคำสั่ง #rpm -q httpd #rpm -ql openssl #rpm -q mod_ssl #rpm -qa |grep ssl #yum -y install httpd #yum -y install mod_ssl #find / -name openssl.cnf #openssl version -a #openssl help #openssl speed #ln -s /etc/pki/tls/certs/Makefile /etc/httpd/conf/ #cd /etc/httpd/conf #make server.key #/usr/bin/openssl rsa -in server.key -out server.key #make server.csr #/usr/bin/openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 #chmod 400 server.* #vi /etc/httpd/conf.d/ssl.conf
    old #DocumentRoot "/var/www/html"
    new DocumentRoot "/var/www/html"
    old #ServerName www.example.com:443
    new ServerName yn1.yonok.ac.th:443
    old SSLCertificateFile /etc/pki/tls/certs/localhost.crt
    new SSLCertificateFile /etc/httpd/conf/server.crt
    old SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
    new SSLCertificateKeyFile /etc/httpd/conf/server.key #vi /etc/sysconfig/selinux
    old SELINUX=enforcing เพื่อสั่งเปิด
    new SELINUX=disabled เพื่อสั่งปิด #vi /etc/httpd/conf/httpd.conf
    <VirtualHost 202.29.78.1:443>
    DocumentRoot /var/www/html/ssl
    ServerName www.isinthia.com:443
    SSLEngine on
    SSLCertificateFile /etc/httpd/conf/server.crt
    SSLCertificateKeyFile /etc/httpd/conf/server.key
    </VirtualHost> #/etc/init.d/httpd restart เว็บเพจที่พบข้อมูลเกี่ยวกับ SSL *** http://www.linux-sxs.org/internet_serving/apache2.html ละเอียดชัดเจน *** http://forum.modoeye.com/module30-32.html (สุดยอดจริง ๆ ) *** http://www.madboa.com/geek/openssl/ *** http://fedoracore4.com/SSLv-domain.php *** http://www.macmil.co.jp/macmil/linux017.htm (core 3 และ core 4) http://www.zend.com/tips/tips.php?id=152&single=1 http://www.linuxhelp.net/guides/apachessl/ http://www.moph.go.th/helpdesk/squid/linux-01.php http://nuke.thaihealth.net/article86.html http://bloggang.com/mainblog.php?id=naigod&month=07-12-2005&group=4&blog=1 http://itweb.lib.ru.ac.th/webboard/00193.html http://www.witty.net/books/apache.html http://www.ca.tot.co.th/knowledge_ssl.html (ความหมายไม่ยาว) http://thaicert.nectec.or.th/paper/unix_linux/apache_chklist.php (เป็นเพียง check list) http://www.acisonline.net/article_prinya_eweek_151147.htm (ช่องโหว่ของ SSL) http://www.phpconcept.com/index.php?option=content&task=view&id=12&Itemid=28 (ติดตั้งหลายอย่าง) http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x246.html http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x195.html http://www.stanton.dtcc.edu/stanton/cs/admin/notes/ssl/ http://bruno.vernay.free.fr/wp/index.php?tag=fedora http://www.joreybump.com/code/howto/smtpauth.html (SSL for SMTP) http://silas.psfc.mit.edu/tp41FC4.html (Thinkpad และ Fedora Core 4) http://fedorasrv.com/postfix-tls.shtml http://www.esensualstudios.com/linux.php http://www.shitomi.jp/server/apache.html http://www.trdlo.cz/webserver.php http://www.scalix.com/community/viewtopic.php?t=1634 http://httpd.apache.org/docs/2.0/ssl/ssl_howto.html http://www.tc.umn.edu/~brams006/selfsign.html http://www.apache-ssl.org/httpd.conf.example http://www.a-yu.com/net/apache07.html http://www.aconus.com/~oyaji/www/apache_linux_ssl.htm http://www.mail-archive.com/modssl-users@modssl.org/msg17111.html

9.95 การย้ายระบบ user จากเครื่องหนึ่งไปอีกเครื่องหนึ่ง
: วิธี copy passwd, shadow, group และแฟ้มอื่น ๆ อีกมากมาย
    ขั้นตอนการ copy passwd,shadow,group
    ขั้นตอนที่ 1 : เตรียมพร้อม และทำความเข้าใจ
  1. ใจเย็น ๆ ดูว่านอกจาก 3 แฟ้มดังกล่าวแล้ว ท่านจะคัดลอกแฟ้มอื่นอีก หรือไม่ เช่น mail ใน inbox ซึ่งอยู่ในห้อง /var/spool/mail หรือ ข้อมูลใน home directory ของทุกคน ถ้าทำก็จะยุ่งหละครับ ถ้าไม่อยากยุ่งยากใช้ ghost copy harddisk ตามหัวข้อ 9.96 ดีกว่าครับ 20 นาทีก็เสร็จ และขั้นตอนก็ไม่มีอะไรมาก แค่ถอดเครื่อง เสียบ harddisk ให้ถูก port แล้วก็ใช้โปรแกรม ghost ก็จะได้ harddisk 2 ตัวที่เหมือนกัน
  2. เหตุที่ต้อง copy /etc/passwd, /etc/shadow, /etc/group ใน case ของผม คือ server ตัวเก่ามีปัญหาสารพัด ลง server ตัวใหม่สมบูรณ์ดีแล้ว และที่หนักก็คือระบบเดิมเป็น scsi ใน sun ระบบใหม่เป็น linux เสียดาย account ถ้าสร้าง user ใหม่ทีละคน ก็ต้องใช้เวลา จึงต้อง copy account ทั้งหมดมา
    ขั้นตอนที่ 2 : เริ่ม copy และ backup
  3. ให้ใช้โปรแกรม ftp ดี ๆ จะได้สะดวกเช่น ws_ftp หรือ cute_ftp ย้ายข้อมูล หรือใช้ ftp จากเครื่องใหม่ติดต่อเข้าเครื่องเก่าก็ได้ สะดวกดี แต่ต้อง backup ของเดิมในเครื่องใหม่ด้วย
  4. เข้าไป copy ข้อมูลด้วย root ไปเก็บใน home ของ user demo และเปลี่ยน permission จะได้ copy ออกมาได้ เหตุที่ต้องใช้ demo เพราะแฟ้มที่กำลังจะ copy ส่วนใหญ่เป็นความลับ คนที่เข้าได้คือ root เท่านั้น แต่จะใช้ user root เปิด ftp ก็ไม่ได้ จึงต้องคัดลอกไปไว้ใน home ของ demo แล้วเปลี่ยน permission จะได้ คัดลอกออกมาได้
  5. ส่งข้อมูลทั้งหมดเข้าไปใน server ตัวใหม่ โดย get แบบ binary (ย้ำว่าแบบ ascii ไม่ work)
  6. ให้ copy passwd,shadow,group เก็บไว้อีกที่หนึ่ง เพราะถ้าส่งเข้าไปทับแล้วไม่ work จะมีปัญหาซะเปล่า เมื่อ copy เข้าไปแล้วก็อย่างพึ่ง reboot ให้ลองใช้ user ที่ copy มา connect เข้าไปเป็น root ถ้าใช้ได้ก็ถือว่า copy สำเร็จ
  7. copy แฟ้มทั้งหมดในห้อง /var/spool/mail ซึ่งเป็นห้องเก็บ inbox ของทุกคน
  8. copy แฟ้มทั้งหมดในห้อง /var/www/html ซึ่งเป็นห้องเก็บ web space ของทุกคน
  9. copy แฟ้มทั้งหมดในห้อง /home ซึ่งเป็นห้องเก็บข้อมูลต่าง ๆ ของทุกคน (อาจสร้างให้ใหม่ได้)
    ขั้นตอนที่ 4 : แก้ permission และสร้าง home
  10. สร้างรายชื่อสมาชิกทุกคนให้ใช้คำสั่ง cut /etc/passwd --fields=1 --delimiter=: >listall จะได้แฟ้มชื่อ listall ซึ่งมี username ของทุกคน
  11. ใช้ pico listall เข้าไปลบรายชื่อที่ไม่คิดจะสร้าง home เช่นรายชื่อของผู้ใช้ที่ระบบสร้างให้ ให้ท่านลบทิ้งซะ
  12. เนื่องจาก mail ใน /var/spool/mail ที่คัดลอกมามี owner และ permission ไม่ถูกต้อง และ home แต่ละคนก็ยังไม่มี จึงใช้ shell script ด้านล่าง
    อย่าลืมเอา # ออกตามสมควร
      #!/bin/sh
      # exit 0
      # chmod 700 crthome
      # shell>crthome <listall
      read getu
      while [ $getu. != '.' ]
      do
        echo $getu
        ## change mail owner
        chown $getu:mail /var/spool/mail/$getu
        chmod 660 /var/spool/mail/$getu
      
        ## create home
        # mkdir /home/$getu
        # chown $getu:users /home/$getu
        # mkdir /home/$getu/public_html
        # chown $getu:users /home/$getu/public_html
        # chmod 711 /home/$getu
        # chmod 755 /home/$getu/public_html  
        read getu
      done
      

    ขั้นตอนที่ 5 : แฟ้มอื่น ๆ ที่ต้องพิจารณาที่จะคัดลอก
    db.yonok.ac.th
    db.isinthai.com
    db.lampang.net
    db.202.29.78
    resolv.conf
    named.conf
    httpd.conf
    grub.conf
    lilo.conf
    sendmail.mc
    procmailrc
    localhost.zone
    rc.local

9.96 วิธี copy server หรือ host(Backup)
: เนื่องจากผมเป็นมือใหม่อยู่มาก จึงลอง backup ระบบไว้หลายวิธี ทั้งวิธี copy ใน harddisk ตัวเดียว หรือต่าง harddisk
      ข้อมูลเบื้องต้นสำหรับทำความเข้าใจในปัญหาการ backup หรือ copy server
    1. Harddisk ที่มีอยู่ ไม่มีขนาดที่เท่ากัน ทำให้การคัดลอก หรือแบ่ง partition ให้เท่ากันมีปัญหานิดหน่อย
    2. Harddisk ส่วนใหญ่ที่มีเป็น bad sector บางตัว backup เสร็จแล้ว เมื่อนำมาใช้ก็ใช้ไม่ได้
    3. คอมพิวเตอร์ที่มีอยู่มีปัญหาเช่นมองเห็น harddisk ขนาดคงที่ ไม่ว่าจะใส่ขนาดเท่าใดก็มองเห็นเพียง 8 Gb เป็นต้น
    สรุปล่าสุดเมื่อ 24 มกราคม 2548
    ประเสริฐ ประสารยา ให้ข้อมูลใหม่ว่าปีก่อนที่ใช้ ghost HD linux 2 ตัว แล้วมีปัญหา ตอนนี้แก้ไขได้แล้ว
      หลังจากที่ Ghost เรียบร้อย นะครับ ให้ Boot ด้วย CD ติดตั้ง Linux โดยที่หน้าจอแรก
      พิมพ์ลงไปตรง prompt ว่า linux rescue แล้วกด enter พอพบหน้าจอให้ config อะไรนิดหน่อย ให้กดผ่านไปเลย
      จนกระทั่งได้ prompt ของระบบมา แล้วพิมพ์คำสั่ง # chroot /mnt/sysimage
      
      # grub-install /dev/hda
      # exit
      # exit reboot ใหม่ก็จะใช้งานได้ครับ
    สรุปล่าสุดเมื่อ 3 มีนาคม 2546
    เนื่องจากพยายามหา Norton ghost ที่มีความสามารถ copy harddisk ที่มีขนาดแตกต่างกัน มาคัดลอก RH8.0 แต่จากการหามาและทดสอบ ปรากฏว่าไม่สำเร็จ เพราะคัดลอกแล้วผลคือแจ้งว่า completely แต่นำไปใช้งานไม่ได้ ทำให้ต้องหยุดการศึกษา Norton ghost สำหรับ RH8.0 ไว้เพียงเท่านี้
    วิธี Backup ล่าสุด คือ หา Harddisk ที่มีลักษณะคล้ายกัน แม้ขนาดไม่เท่ากันก็ได้ แต่ตัวลูกต้องใหญ่กว่าหรือเท่ากับตัวแม่ โดยใช้ #fdisk /dev/hda และ #fdisk /dev/hdc ตรวจสอบ แล้วคัดลอกด้วยคำสั่ง dd จาก harddisk ที่มีขนาดเล็กกว่า ไป harddisk ที่มีขนาดใหญ่กว่า พบว่าไม่มีปัญหาใด ๆ คำสั่งที่ใช้คือ #dd if=/dev/hda of=/dev/hdc หรือ #dd if=/dev/hda2 of=/dev/hdb2
    วิธีที่ 1 : NortonGhost :: โปรแกรมสำหรับคัดลอก harddisk ได้สมบูรณ์มาก แต่ล่าสุดทดสอบกับ RH8.0 ไม่สำเร็จ
      หลังถูก h cker เข้ามาป่วนระบบ ทำให้ต้องหาโปรแกรมมา Backup server เก็บไว้ และโปรแกรมที่หามาได้ก็คือ NortonGhost เพื่อ copy harddisk โดยคุณประเสริฐ ประสารยา [prasert@cat.net.th] ซึ่งเป็นทีมงานของ isinthai.com ได้ช่วยหา NortonGhost2002 มา clone HD Linux RH7.2 และใช้งานได้เรื่อยมา
      ในเดือน มกราคม 2545 ทีมงานตัดสินใจใช้ Redhat 8.0 แต่ทั้ง NortonGhost 2002 และ 2003 ต่างก็ใช้คัดลอก Redhat 8.0 ไม่ได้ ปัญหาที่เกิดขึ้นไม่แน่ใจว่าเกิดจากอะไร และเกิดในหลายรูปแบบ เช่น ไม่สามารถ Boot ได้ หรือเห็นเฉพาะคำว่า LI ตอน boot แล้วก็ hang ไปเฉย ๆ หรือ copy partition มาไม่หมด .. จึงตัดสินใจศึกษาการใช้คำสั่ง dd และ cp เพื่อคัดลอก harddisk อย่างจริงจังอีกครั้ง

    วิธีที่ 2 : tar.gz :: โปรแกรมบีบอัดแฟ้ม หรือ folder ซึ่งนิยมใช้กันมาก (ทีมงานไม่ได้ทดสอบหลักการนี้อย่างจริงจัง)
      วิธีนี้สามารถ copy ทั้ง partiton เก็บเป็น file เดียว หากมีปัญหาก็คลายแฟ้มนี้เท่านั้น
      #tar zcf total.tar.gz / :: เพื่อบีบอัดทั้ง root เป็นแฟ้ม total.tar.gz
      #tar zcf total.tar.gz /dev/hda :: เพื่อบีบอัดทั้ง harddisk เป็นแฟ้ม total.tar.gz
      #tar zxf total.tar.gz :: คล้ายข้อมูลใน total.tar.gz ไว้ในห้องปัจจุบัน

    วิธีที่ 3 : cp :: โปรแกรมคัดลอกที่ใช้คัดลอกข้อมูลระหว่าง harddisk หรือ partiton ได้ (ทีมงานไม่ได้ทดสอบหลักการนี้อย่างจริงจัง)
      ตัวอย่างการใช้ cp คัดลอกทั้ง partition เก็บเข้า partition ใหม่ใน hd เดิม
      เมื่อต้องการดูว่าในเครื่องมี partition อะไรแบ่งไว้บ้างด้วย fdisk -l หรือ df -a จะเห็นขนาดของแต่ละ partitions และคำสั่ง mount หรือ cat /proc/mounts ถูกใช้เพื่อดูรายการแฟ้มที่ถูก mount ไว้
      #mkfs -t ext3 /dev/hda3 3076447
      :: ใช้สำหรับจัดรูปแบบ ของ partitions /dev/hda3 ตามขนาดจริง ซึ่งเห็นใน cat /proc/partitions
      #mkdir /rest :: สร้างห้องชื่อ rest ในห้อง /
      #mkswap /dev/hda7 :: เพื่อกำหนดให้ /dev/hda7 เป็น swap partition
      #mount -t ext3 /dev/hda3 /rest :: ต่อไป /rest ก็คือ /dev/hda3 ซึ่งมีขนาด 3076447
      #df -a :: แสดงรายชื่อ และขนาดที่ mount สำเร็จ
      #cp -a /dev/hda2 /dev/hda3 :: คัดลอกทั้งหมดใน /dev/hda2 ไป /dev/hda3

    วิธีที่ 4 : dd :: โปรแกรมคัดลอกทั้ง partition
    ตัวอย่างการใช้ dd คัดลอกทั้ง partition หรือ harddisk ไปยัง partition หรือ harddisk ใหม่
    ล่าสุดผมใช้วิธีนี้ backup server หรือ copy harddisk นั่นเอง โดยพื้นฐานแล้ว คำสั่งนี้เหมาะกับ harddisk ที่มีขนาดเท่ากัน แต่ผมไม่มี harddisk ที่เท่ากัน แต่ใช้ตัวที่มีลักษณะต่าง ๆ ใกล้เคียงกัน โดยเฉพาะตัวลูกต้องใหญ่กว่า หรือเท่ากับตัวแม่
    #dd if=/dev/hda of=/dev/hdc :: คัดลอก harddisk ทั้งลูกจากลูก hda ไป hdc
    #dd if=/dev/hda1 of=/dev/hdc1 bs=1024k :: คัดลอก harddisk ทั้งใน partition 1 ของลูกหนึ่ง ไป partition 1 ของอีกลูกหนึ่ง

9.97 Server ตัวนี้ให้บริการอะไรได้บ้าง
: บริการต่าง ๆ ที่ Redhat 7.2 มีให้ และที่ลงโปรแกรมเพิ่ม
    บริการ เพื่อกรณีศึกษา โดยมือสมัครเล่น
  1. Linux server : telnet
  2. Web server : http, perl v.3, php3, java applet
  3. Mail server : pine, pop3, imap, webbased
  4. Proxy server : squid
    หัวข้อนี้ยังไม่เรียบร้อย

9.98 ขั้นตอนการทำ server ตัวนี้
: เพื่อให้ท่านหรือทีมงาน สามารถ setup server แบบนี้ได้ง่ายขึ้น จึงเขียนขึ้นตอนไว้ดังนี้
บริการ เพื่อกรณีศึกษา โดยมือสมัครเล่น
ขอแนะนำว่าถ้ายังไม่รู้อะไรเลย ให้ไปหาหนังสือสำหรับลง Linux มากอดให้อุ่นใจสักเล่มหนึ่ง เพราะเชื่อแน่ว่า ถ้าอ่านวิธีการติดตั้งที่ผมเขียน โดยไม่มีประสบการณ์ linux มาก่อน .. จะต้องบ่นว่าผมเขียนไม่รู้เรื่อง เนื่องจากเรื่องเหล่านี้เป็นเรื่องที่เฉพาะ น้อยคนจริง ๆ ที่จะชำนาญ ผมเองก็พยายามศึกษาอยู่ ก็ได้แค่พอเป็นเท่านั้น (แต่นี่ผมก็พยายามเขียนให้ผมเข้าใจง่ายที่สุดแล้วนะครับ)
    ขั้นตอนที่ 1 : เตรียมการ
    - Backup ข้อมูลที่สำคัญในเครื่องที่คิดจะติดตั้ง linux ความแน่นอนคือความไม่แน่นอน
    - ถ้ามีเครื่องใหม่ และลง linux อย่างเดียวก็หาแผ่น linux มาลงได้เลย .. เพราะเสียแล้วไม่เป็นไร
    - ถ้ามี windows อยู่ต้องการลงทั้ง 2 ระบบให้ไปหา partition magic มาแบ่ง partition
    - แบ่งว่าจะใช้ Windows กี่ GB แต่ linux จะใช้ไม่น้อยกว่า 1 GB โดยปกติ
    - นั่งคิดให้ดีกว่าจะลง linux ไปทำไม เช่น ศึกษาเป็น work station หรือ เป็น server เป็นต้น
    - ไปหาโปรแกรม linux ซึ่งผมแนะนำว่าเป็น Redhat เพราะมีคนใช้กันมากที่สุดในโลก
    ขั้นตอนที่ 2 : ติดตั้ง
    - ถ้ามี windows อยู่ให้ใช้ partition magic แบ่ง partition ให้เรียบร้อย
    - ใช้แผ่น CD Boot แล้ว Enter เขาก็จะถามติดตั้งเลย ถ้า VGA card เป็นที่ยอมรับของ linux ก็จะได้เห็นจอสวย
    - ถ้าไม่มีสนับสนุนก็ต้องเล่น text mode ไปครับ คนที่ผมรู้จักหลายคน หรือแม้แต่เครื่องที่ผมใช้ ยังใช้ text mode เลย
    - เมื่อเข้าไปต้องแบ่งอย่างน้อย 2 partition คือ linux partiton และ linux swap
    - Install ตามขั้นตอน ซึ่งใช้เวลาประมาณ 2 ชั่วโมง (เหมือน windows นั่นหละครับ)
    - ถ้าโชคดี หลังติดตั้งเสร็จก็จะขึ้นคำว่า Login: มารอให้ป้อนรหัสเข้าสู่ระบบ
    - มีปัญหาการติดตั้งให้ถามที่ http://linux.thai.net เพราะทีมงานไม่ได้ชำนาญในการแก้ปัญหาทุกกรณี (ประสบการณ์น้อยมาก)
    ขั้นตอนที่ 3 : ใช้งาน linux เบื้องต้น (Server)
    - หัดใช้คำสั่งใน linux ที่ใช้กันบ่อย ๆ ซึ่งผมแนะนำในบทที่ 1 หัดเป็นผู้ใช้
    - เมื่อใช้เป็นแล้ว ลอง telnet เข้าไปใช้ server ที่อื่นดูครับ .. สั่งสมประสบการณ์
    - สู่บทที่ 2 แต่ต้องทำที่เครื่องตนเองนะครับ เช่น useradd usermod หัดใช้คำสั่งระดับสูงดูครับ
    - ซอกซอนเข้าไปดูระบบ และคำสั่งต่าง ๆ ยิ่งใช้เวลามาก ยิ่งซึมซับ .. ผมเองยังไม่มีเวลาเลย
    - วิธีการ config ระบบ ดูทุกแฟ้มที่นามสกุล .conf จะเข้าใจการทำงานของ linux มากขึ้น
    ขั้นตอนที่ 4 : ใช้ประโยชน์ Server ก่อนจะ upgrade server
    - หัดใช้ mail แบบต่าง ๆ ที่ Server ให้บริการ เช่น pop, imap, pine เป็นต้น
    - หัดเขียน Shell script เพราะจะทำให้โอกาสหน้า สามารถแก้ปัญหาระบบได้หลายเรื่อง
    - หัดเขียนทำเว็บในเครื่องตนเองด้วย html อย่างง่าย
    - หัดเขียน CGI เพื่อทำให้เว็บที่พัฒนาขึ้นมา เป็นยอดเว็บ เช่น yahoo, hypermart, pantip เป็นต้น
    ขั้นตอนที่ 5 : Install application
    - เนื่องจาก server ที่ติดตั้งไป มีบริการที่เป็นมาตรฐาน หากต้องการความสามารถใหม่ ต้องลงโปรแกรมเพิ่ม
    - บริการ Webbased mail อย่างง่าย (หัวข้อ 9.71)
    - บริการ proxy หรือ cache server (หัวข้อ 9.72)
    - บริการ incoming ใน ftp (หัวข้อ 9.73)
    - บริการ Apache + php + Mysql (หัวข้อ 9.74)
    - บริการ SSI (หัวข้อ 9.75)
    - บริการ Radius (หัวข้อ 9.76 เหมือนเปิดบริการเทียบ ISP เลยครับ)
    - บริการ Modem (หัวข้อ 9.77 เหมือนเปิดบริการเทียบ ISP เลยครับ)
    ขั้นตอนที่ 6 : ความปลอดภัย (Security)
    - หลายคนบอกว่า ความปลอดภัยเป็นเรื่องแรก แต่ผมว่า server ยัง up ไม่ขึ้น ความปลอดภัยอย่างพึ่งสนเลยครับ
    - การเป็น System Admin ที่ดี ผมว่าต้องเป็น h cker ที่ดีด้วย ถึงจะไปด้วยกันได้ (ถ้าไม่รู้ว่า server รั่วอย่างไร จะปิดได้ไง)
    - อ่านหน่อยครับว่า ถูก hack อย่างไร จะได้เป็นบทเรียน (หัวข้อ 9.51)
    - อ่านหน่อยครับว่า ปกป้องตัวเองอย่างไร จะได้เป็นบทเรียน (หัวข้อ 9.52)
    - ป้องกัน h cker มือสมัครเล่นด้วย Restricted shell (หัวข้อ 9.52)
    - ปิดบริการด้วย TCP wrapper (หัวข้อ 9.54)
    ขั้นตอนที่ 7 : เรื่องเฉพาะที่ควรทราบ
    - ทำให้เครื่องเป็น DNS server (ยังไม่ได้เขียนเป็นจริงจัง)
    - บริการ Dedicate server (ยังไม่ได้เขียนเป็นจริงจัง)
    - ทำให้เครื่องมีหลาย IP ในกรณีที่ server ตัวหนึ่งล่ม จะได้ย้ายได้ใน 1 นาที (หัวข้อ 9.10)
    - Backup ระบบ (หัวข้อ 9.96) แต่ยังไม่ update
    - ใช้ php เขียนโปรแกรมบริการ mail แข่งกับ hotmail.com (ยังหาเวลาศึกษาไม่ได้)
    - เปิด free hosting (กำลังพยายาม เพราะระบบยังไม่แข็งพอสู้กับ h cker มืออาชีพ ก็เปิดไม่ได้)

    ขั้นตอนการติดตั้ง เมื่อ RedHat 9.0 (ปรับปรุงล่าสุด :: 13 กุมภาพันธ์ 2547)
  1. ติดตั้ง linux พร้อม Config ให้ใช้งานเครือข่ายได้
    รับผิดชอบโดย คุณสุวิทย์ คุณประเสริฐ เพราะชำนาญการ install Redhat
    บ่อยครั้งที่ต้องติดตั้งโปรแกรมเพิ่ม จึงต้องหามาจาก CD และใช้คำสั่ง rpm -i
    ชื่อแฟ้มใน CD ทั้ง 3 แผ่นมีดังนี้ แผนที่ 1, แผนที่ 2, แผนที่ 3
  2. #/usr/bin/setup
    1. แล้วกำหนด IP ด้วยนตัวเลือก network
    2. แล้วเปิดบริการด้วยตัวเลือก system services : httpd,imap,imaps,ipop2,ipop3,kudzu,named,network,pop3s,sendmail,sshd,syslog,vsftpd,xinetd,servers,services
  3. หัวข้อ 9.95 :: copy passwd, shadow, group จาก server ตัวหลัก มาแทนที่ในเครื่องที่ติดตั้งใหม่
  4. หัวข้อ 9.10 :: เพิ่ม IP ใน Server ตัวเดียวด้วย IFCONFIG
  5. หัวข้อ 9.65 :: เปิดบริการ SAMBA server
  6. หัวข้อ 9.66 :: เปิดบริการ DNS server ให้คอมพิวเตอร์ทั้งหมดในเครือข่าย สามารถใช้ชื่อเว็บไซต์ได้ถูกต้อง มิเช่นนั้นต้องใช้ตัวเลข
  7. หัวข้อ 9.78 :: เปิดบริการ sendmail หรือ smtp ให้ผู้ใช้สามารถส่ง e-mail ด้วย outlook ผ่าน server ของเรา
  8. หัวข้อ 9.62 :: แก้ไขแฟ้ม /etc/httpd/conf/httpd.conf เพื่อเปิดบริการต่าง ๆ ของ apache webserver
  9. หัวข้อ 9.63 :: เปิดบริการ FTP server
  10. หัวข้อ 9.68 :: เปิดบริการ Web-based mail ด้วย uebimiau-2.7.2-any.zip
  11. หัวข้อ 9.67 :: เปิดบริการ Web hosting file manager ด้วย easyhost_free.zip
  12. หัวข้อ 9.11 :: เปิดบริการ Virtual hosts
  13. หัวข้อ 9.76 :: เปิดบริการ RADIUS server
  14. หัวข้อ 5.1 :: เปิดบริการ MYSQL server
  15. หัวข้อ 9.69 :: เปิดบริการ DHCP server แจก Dynamic IP

9.99 การบำรุงรักษา และตรวจสอบ
: บริการให้ดีต้องหมั่นบำรุงรักษา ไม่งั้นอาจอยู่ได้ไม่นานเท่าที่ควร
    9.99.1 สรุปปัญหา วิธีตรวจสอบ และการแก้ไขเบื้องต้น (เมื่อมีปัญหาเกิดขึ้น)
  1. เมื่อเครื่องของผู้ใช้ต่อ internet ไม่ได้ (ตรวจสอบโดยผู้ใช้)
    + ตรวจสอบว่าอะไรใช้ไม่ได้ เช่น http, workgroup, ping หรือ smtp เป็นต้น แล้วหาสาเหตุ
      - http : ถ้าเปิดเว็บใดไม่ได้ ลองเปิดหลาย ๆ เว็บ เพราะบางเว็บอาจ down ชั่วคราว
      - workgroup : Folder sharing ภายในสถาบัน ประกอบด้วยหลายวง หลายระบบปฏิบัติการ บางเครื่องอาจถูกยกเลิกการ share
      - ping : ตรวจด้วยการพิมพ์ ping 202.29.78.254 หรือ 202.29.78.11 เพื่อดูว่าเครื่องท่านเห็นไม่หากไปจากระบบ
      - smtp : ถ้าใช้ smtp.yonok.ac.th ไม่ได้เพราะ server ล่มให้แจ้ง 125 เพราะระบบอาจ hang หรือ over limited
      - winipcfg : คำสั่งนี้ใช้ดูว่า ip ของท่านเบอร์อะไร บางครั้ง ip หาย ท่านสามารถกำหนดได้ด้วยตัวเอง จากเบอร์ที่ติดไว้กับเครื่อง
    + ก่อนแจ้งเจ้าหน้าที่ 125 ท่านควรปฏิบัติดังนี้
      - ให้ reboot เครื่องใหม่ ก่อน reboot ให้ตรวจสอบสายต่าง ๆ ว่าอยู่ในที่ควร หรือไม่ แล้วทดสอบอีกครั้ง
      - ตรวจสอบ HUB และระบบเชื่อมต่อ สำหรับปัญหาที่อาจเกิดจาก hardware ผู้ใช้บางท่านอาจถอดสายไฟของ hub ออก หรือสะดุดจนหลุด
  2. เว็บ หรือ e-mail ของโยนก ใช้การไม่ได้ (ตรวจสอบโดยเจ้าหน้าที่ 125)
      # ping 202.29.78.12 (ตรวจว่าเครื่อง server เปิดบริการในเครือข่าย หรือไม่ โดยทดสอบจากเครื่องลูก)
      # df (ตรวจว่า harddisk เต็มหรือไม่ ถ้าเต็มต้องไปลบ e-mail ของบางท่าน)
      # เปิดเว็บ http://www.yonok.ac.th (ตรวจว่า named และ httpd ทำงานปกติหรือไม่ ถ้าไม่ได้ ให้สั่ง reboot)
    24/11/2004
  3. ติดต่อ Internet นอกโยนกไม่ได้ (ตรวจสอบโดยเจ้าหน้าที่ 125)
      - ping 202.29.78.254 หรือ ping 202.28.202.74 (ถ้าติดต่อไม่ได้ให้ reboot ถ้ายังไม่ได้ต้องใช้สาย console เข้าไป config ใหม่)
      - ตรวจสอบไฟสัญญาณของ Fiber modem หรือ Converter ด้วยการมอง ถ้ามีไฟแดงที่ modem ให้แจ้งคุณภากร (0-5421-7200, 0-9759-0946)
      - ตรวจสอบ Router ฝั่งเชียงใหม่ โดย ping 202.28.29.41 ถ้าติดต่อไม่ได้ให้แจ้ง คุณประเสริฐ (0-2248-7749)
  4. กรณีเครื่องในห้อง lab1, lab2 หรือ lab3 ใช้ internet ไม่ได้ (ตรวจสอบโดยเจ้าหน้าที่ 125)
      - ตรวจสอบเครื่อง DHCP ว่าเปิดบริการ หรือไม่ ด้วยการ ping 192.168.0.1 หรือ ping 202.29.78.11
      - ตรวจสอบ hub ที่เชื่อมโยงตามจุดต่าง ๆ ปัญหาอาจเกิดจาก hub มีอาการ hang ชั่วคราว
  5. กรณี router ของโยนกเสีย (ตรวจสอบโดยเจ้าหน้าที่ 125)
    router ที่ใช้อยู่คือ CISCO router 2511 เป็นรุ่นเก่าใช้มาตั้งแต่ปี 1996 ปัจจุบันเสียเป็นบางจังหวะมาแล้ว ประมาณ 4 ครั้ง ครั้งล่าสุดส่งซ่อมที่ร้าน smart service ซึ่งเป็นตัวแทน CISCO ในจังหวัดลำปาง แต่มิได้ซ่อมอย่างแท้จริง เพียงแต่นำไปปัดฝุ่นภายใน พร้อมตรวจสอบปัญหาในเบื้องต้น มีค่าใช้จ่าย 450 บาท แล้วนำกลับมาใช้ใหม่
    ปัญหาของ router คือ หยุดทำงานกระทันหัน ping เข้าไปไม่ได้ ใช้สาย console ติดต่อเข้าไปไม่ได้ ทางร้านวิเคราะห์ว่า อุปกรณ์สำคัญไม่มีปัญหา แต่มีบางชิ้นที่ไม่ทำงานในขณะเย็น ต้องอุ่มเครื่องให้ร้อน router จึงจะทำงานได้ปกติ เมื่อมีปัญหาให้ปิด และเปิดทิ้งไว้ประมาณครึ่งชั่วโมง หากไฟที่ปุ่ม ok สว่างมาก ก็แสดงว่า router ทำงานได้ปกติ แต่ขณะมีปัญหาไฟนี้จะไม่สว่างมาก แสดงว่าไฟฟ้าเข้าไม่เต็มที่
    ช่างแจ้งว่าปัญหานี้ซ่อมได้ แต่ต้องนำแต่ละชิ้นมาตรวจสอบ หากพบชิ้นที่มีปัญหา ก็จะสั่งซื้อจากคลองถมที่กรุงเทพฯ หากพบก็จะนำชิ้นส่วนนั้นมาติดตั้งแทน แต่อาจหาได้ไม่ง่าย เพราะเป็นอุปกรณ์ที่มิได้ใช้กันทั่วไป และส่วนใหญ่ make in U.S.A. หลังจากส่งให้ร้าน 3 วัน จึงรอต่อไปไม่ได้ เพราะร้านก็ไม่แน่ใจว่า ถ้าถอดและซ่อมจริง จะหาอุปกรณ์ที่มีปัญหานั้นพบในเวลากี่วัน
      ทางเลือกสำหรับปัญหา router เสีย (CISCO คืออุปกรณ์ที่นิยม และน่าเชื่อถือ ที่สุดในโลก)
    1. ไม่ซ่อม แต่แก้ปัญหาด้วยการปิด และเปิดใหม่ บางครั้งใช้เวลา 1 ชั่วโมงกว่าจะเครื่องร้อน (ปัจจุบันเลือกทางนี้)
    2. ซื้อ smart net ซึ่งเป็นประกัน หากต่อไปเสีย แล้วส่งเข้าบริษัท CISCO ทางบริษัทจะส่งตัวอื่นให้ใช้แทน ค่าใช้จ่าย 17800 บาทต่อปี
    3. ซื้อตัวใหม่ยี่ห้อเดิม ที่มีศักยภาพเทียบเท่า หรือสูงกว่าตัวเดิม มีค่าใช้จ่ายประมาณ 150,000 บาท
    4. ซื้อตัวใหม่ยี่ห้อใหม่ ที่มีศักยภาพ และความคงทน ต่ำกว่ายี่ห้อเดิม มีค่าใช้จ่ายประมาณ 50,000 บาท
    9.99.2 สิ่งที่ควรกระทำ และเข้าใจ
  1. ps aux ตรวจสอบว่ามี process แปลก run อยู่บ้างไหม
  2. top เพื่อดู process ที่กำลังทำงานในปัจจุบัน
  3. เข้าห้อง /var/log ซึ่งมี log file ขนาดใหญ่ ๆ ทั้งนั้น Clear บ้าง หรือจะเข้าไปดูร่องรอยของผู้ใช้ก็ได้
  4. เข้าห้อง /tmp ว่ามีแฟ้มอะไรแปลกปลอมเข้ามา ให้ clear ได้
  5. ใช้ last | more เพื่อดูรายชื่อผู้ใช้ล่าสุด ถ้าอยู่ๆ last เหลือนิดเดียว .. แสดงว่า h cker เข้ามาลบร่องรอย
  6. find / -cmin -600 | more แสดงชื่อแฟ้มที่มีการเปลี่ยนแปลงใน 10 ชั่วโมงที่ผ่านมา ในทุก Directory แต่จะออกมามากไปหน่อย ต้องค่อย ๆ ดู หรือตัด / แล้วทำเฉพาะในห้องที่สงสัยก็ได้
  7. cat /var/log/messages |grep login|more ดูว่ามีคนแปลกหน้า Login หรือพยายามเข้ามาหรือไม่ แต่อาจไม่ได้ผล ถ้า h cker มืออาชีพเขาจะลบแฟ้มนี้ทิ้ง ก่อนออกไป
  8. backup harddisk ด้วย #dd if=/dev/hda1 of=dev/hdc1 เป็นต้น แต่ต้องใช้ fdisk -l ตรวจสอบให้ดีก่อน
    9.99.3 อบรมบุคลากร
    คำสั่งเบื้องต้น 1 (ดูแฟ้ม ดูห้อง ดูผู้ใช้)
  1. ls -al (list directory contents)
  2. man ls ( -t คือ อะไร)
  3. ls -alt | more
  4. chmod 755 x.htm -Rf
  5. chown root:mail noriko -Rf
  6. find / -name hello.pl
  7. ls > x.htm
  8. cat x.htm (concatenate files and print on the standard output)
  9. cat /etc/passwd |grep home
  10. rm x
  11. mkdir img
  12. cd ..
  13. rmdir img
  14. pwd (print name of current/working directory)
  15. echo $PATH
  16. PATH=$PATH:/sbin:/usr/sbin
  17. whereis man ( locate the binary, source, and manual page files for a command)
  18. w (Show who is logged on and what they are doing)
  19. who (show who is logged on)
  20. id (print real and effective UIDs and GIDs)
  21. finger atichart (user information lookup program)
  22. last (show listing of last logged in users)
  23. exit
  24. tail --lines=5 /var/log/messages
  25. lynx http://www.yonok.ac.th/main/intro4.htm
    คำสั่งเบื้องต้น 2 (ดูระบบ)
  26. du (ดูขนาด estimate file space usage)
  27. df (ดูระบบแฟ้ม report filesystem disk space usage)
  28. /sbin/service --status-all
  29. /sbin/ifconfig (configure a network interface (LAN Card))
  30. netstat -a (Print network connections, routing tables, interface statistics, ..)
  31. top (display Linux tasks)
  32. env (run a program in a modified environment)
  33. nslookup 202.28.18.65 (query Internet name servers interactively)
  34. ps -aux (report a snapshot of the current processes)
  35. kill -9 12345 (terminate a process)
  36. traceroute www.thaiall.com (print the route packets take to network host)
  37. vi (a programmers text editor)
    ทบทวน เบื้องต้น
  38. mkdir public_html
  39. chmod 775 public_html
  40. vi index.html
  41. cat index.html |grep @
  42. pico x.htm
    คำสั่งระดับกลาง
  43. fsck /
  44. shutdown -h now
  45. reboot
  46. runlevel
  47. cat /etc/inittab
  48. chkconfig --list
  49. mount /dev/cdrom
  50. mkbootdisk --device /dev/fd0 2.4.18-14
  51. su bcom302
  52. crontab -l
  53. date 04271340
  54. hwclock --systohc
  55. cp /hd/home/* /home -fr
  56. nmap -sT www.yonok.ac.th (Network exploration tool and security scanner)
  57. rpm -i imap-4.7-5.i386.rpm
ตารางเปรียบเทียบแอพพลิเคชันชนิดเดียวกัน ระหว่าง Linux และ Windows server
Software typeLinuxWindows server
ฐานข้อมูลMySQL, Postgres, Informix SE, OracleMS SQL server, Oracle, MS Access
พร็อกซีเซิร์ฟเวอร์SquidMS Proxy server
ไฟล์เซิร็ฟเวอร์Samba, NFSMS Network
เว็บเซิร์ฟเวอร์ApacheIIS, Tomcat, Omni
ออฟฟิศStarOffice, Office TLEMS Office
กราฟิกGimpAdobe Photoshop
ขอบซ้ายขอบบน
สารบัญ
กรณีศึกษาจาก Redhat 6.2 -> Fedora Core 4 -> Android 4.01
บทที่ 1 : คำสั่งสำหรับผู้ใช้พื้นฐาน (Basic user command)
    1.1 คำสั่ง ls : แสดงรายชื่อแฟ้มในห้องปัจจุบัน หรือห้องอื่น ๆ ที่ต้องการ 1.2 คำสั่ง chmod : เปลี่ยนสถานะของแฟ้มเช่น Read Write eXecute 1.3 คำสั่ง man : แสดงรายละเอียดของคำสั่ง (Manual) 1.4 คำสั่ง mkdir, rmdir, cd : คำสั่งเกี่ยวกับ Directory หรือ Folder เพื่อสร้าง หรือลบ 1.5 คำสั่ง pico : editor ยอดฮิตใน Linux ที่ต้องมากับ Pine เป็น Text mode ที่ใช้ง่ายที่สุด 1.6 คำสั่ง emacs : editor ยอดฮิตใน Linux ใช้ยากกว่า pico นิดหน่อย 1.7 คำสั่ง vi : editor ยอดฮิตใน Linux ที่ใช้ยากที่สุด 1.8 คำสั่ง id, finger, who, w : โปรแกรมตรวจสอบ username ของตนเอง 1.9 คำสั่ง cat : แสดงข้อมูลในแฟ้มเหมือนคำสั่ง type ในระบบ DOS 1.10 คำสั่ง ifconfig : ดู IP หรือเพิ่ม IP เข้าไปใน linux server 1.11 คำสั่ง netstat : แสดงสถานะของเครือข่าย 1.12 คำสั่ง service : แสดงสถานะโปรแกรมที่เปิดให้บริการ 1.13 คำสั่ง xinetd : แสดงบริการที่เปิดใต้โปรแกรม xinetd 1.14 คำสั่ง whereis : ค้นหาแฟ้มที่ต้องการว่าอยู่ที่ห้องใด 1.15 คำสั่ง cp, rm, mv : จัดการแฟ้มเช่น คัดลอก ลบ และย้าย 1.16 คำสั่ง ping : ตรวจสอบ ip และการเชื่อมต่อ internet 1.17 คำสั่ง env : แสดงค่า environment ปัจจุบัน 1.18 คำสั่ง lynx : Text browser ที่ใช้งานง่าย ใช้ดู source หรือ download ได้ 1.19 คำสั่ง nslookup : แสดงข้อมูลเกี่ยวกับ name server จาก ip หรือ domain name 1.20 คำสั่ง tail : แสดงส่วนท้ายของแฟ้มที่มีขนาดใหญ่ ต้องข้ามกับ cat ที่ดูตั้งแต่เริ่มแฟ้ม 1.21 คำสั่ง telnet : ใช้ติดต่อเข้า server ต่าง ๆ ตาม port ที่ต้องการ .
บทที่ 2 : คำสั่งสำหรับผู้ใช้ระดับกลาง (Intermediate user command) เพื่อต้องการตรวจสอบระบบ
    2.1 คำสั่ง df : แสดง partition ของ linux พร้อมขนาดที่ใช้ไป 2.2 คำสั่ง du : แสดงพื้นที่ใช้งานในแต่ละ Directory 2.3 คำสั่ง ps : แสดง process ที่กำลังทำงานอยู่ทั้งของเครื่อง และตนเอง 2.4 คำสั่ง kill : ยกเลิก process ที่ทำงานอยู่ 2.5 คำสั่ง find : ค้นหาแฟ้มที่ต้องการภายในทุก ๆ directory ได้ 2.6 คำสั่ง gzip : คลายการบีบอัด หรือแตกแฟ้มประเภท .gz 2.7 คำสั่ง tar : คลายการบีบอัด หรือแตกแฟ้มประเภท .tar 2.8 คำสั่ง last : แสดงรายชื่อผู้ใช้งานระบบปัจจุบันไปถึงอดีต 2.9 คำสั่ง grep : เลือกข้อความที่ต้องการภายในแต่ละบรรทัด 2.10 คำสั่ง date, hwclock : ใช้กำหนด หรือแสดงเวลาปัจจุบัน 2.11 คำสั่ง top : แสดง process ที่ทำงานในปัจจุบัน พร้อม refresh ตลอดเวลา 2.12 คำสั่ง ntsysv และ setup : กำหนดบริการที่ต้องการเปิด หรือปิด เช่น httpd หรือ vsftp 2.13 คำสั่ง route : ใช้กำหนด แสดง ตารางเส้นทาง 2.14 คำสั่ง shutdown, reboot : ใช้ปิดเครื่อง หรือ ปิดและเปิดเครื่องใหม่อย่างถูกวิธี 2.15 คำสั่ง runlevel : คู่กับแฟ้ม /etc/inittab 2.16 คำสั่ง fsck : ซ่อมแซมระบบแฟ้มใน linux 2.17 คำสั่ง chown, chgrp : เปลี่ยนเจ้าของ หรือเปลี่ยนกลุ่ม 2.18 คำสั่ง chkconfig : กำหนด หรือแสดง บริการที่สั่งประมวลผลใน level ต่าง ๆ ขณะเปิดเครื่อง 2.19 คำสั่ง mount, umount : เชื่อมต่ออุปกรณ์ หรือ partition เช่น Diskette หรือ Handy drive 2.20 คำสั่ง mkbootdisk : สร้างแผ่น boot disk เพื่อใช้ boot ระบบ linux ขึ้นมาภายหลัง 2.21 คำสั่ง traceroute : แสดงเลข ip ของเครื่องที่ถูกเชื่อมต่อ ไปยังปลายทางที่ต้องการ 2.22 คำสั่ง rpm : ใช้ตรวจสอบ เพิ่ม หรือลบ package ของระบบ linux เกือบทั้งหมด 2.23 คำสั่ง su : ขอเปลี่ยนตนเองเป็น Super user เพื่อใช้สิทธิสูงสุดในการบริหารระบบ 2.24 คำสั่ง useradd : เพิ่มผู้ใช้รายใหม่เข้าไปในระบบ 2.25 คำสั่ง userdel : ลบผู้ใช้รายเดิม ออกจากระบบ 2.26 คำสั่ง usermod : แก้ไขข้อมูลของผู้ใช้ได้ 2.27 คำสั่ง crontab : ตั้งเวลาสั่งงานคอมพิวเตอร์ 2.28 คำสั่ง lspci : ตรวจสอบอุปกรณ์ที่เชื่อมต่อภายในเครื่อง 2.29 คำสั่ง nmap : ตรวจสอบเครือข่ายแบบกวาดทั้งในเครื่อง และ class C .
บทที่ 3 : บทเรียน PERL บทที่ 4 : บทเรียน PHP บทที่ 5 : บทเรียน MYSQL บทที่ 6 : แนะนำเครื่องบริการ บทที่ 7 : การใช้ application บทที่ 8 : ระบบ file และ directory บทที่ 9 : การบริหารระบบ โดย Super User
ผู้สนับสนุน + ผู้สนับสนุน
+ รับผู้สนับสนุน
"Imagination is more important than knowledge" - Albert Einstein
Home
Thaiabc.com
Thainame.net
Lampang.net
Nation university
PHP
MySQL
Visual basic.NET
TabletPC
Linux
Online quiz
Download
Search engine
Web ranking
Add website
Blog : Education
Blog : ACLA
Blog : Lampang
Facebook.com
Twitter.com
About us
My dream
Site map
Sponsor