thaiall logomy background

ลีนุกซ์ (Linux) : superuser

my town
หน้าหลัก | ลีนุกซ์คืออะไร | แนะนำหนังสือ | superuser | บันทึกปัญหา |
 ok
9.1 กำหนด IP address และ host name
: เพื่อกำหนด ip address ให้กับ eth0 (Ethernet card เบอร์แรกคือเบอร์ 0)
ขั้นตอนการแก้ไข ip address และ 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 ตัวใหม่ได้อย่างไม่มีปัญหา
เพิ่ม IP ปลอม ก็ทำได้ เพื่อใช้เป็น DHCP server
/sbin/ifconfig eth0:1 192.168.3.1
/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
    . . . . . . .
    . . . . . . .
    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 เข้าไป .. น่าจะป้องกันปัญหา hacker ได้ระดับหนึ่ง
  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.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@hackermail.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 และที่ต้องเข้าไปดูก็เพราะมี hacker จาก 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 นั้นสามารถป้องกัน hacker ในระดับ telnet ได้ระดับหนึ่ง แต่ถ้ามีการเปิด ftpd ด้วย ถึงไม่ telnet เข้ามา hacker ก็สามารถเจาะเข้ามาในระบบได้ .. เขาทำได้
    รายชื่อห้องใน /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='TLWGTypewriter'> <? $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 ไม่สำเร็จ

      หลังถูก hacker เข้ามาป่วนระบบ ทำให้ต้องหาโปรแกรมมา 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 ที่ดี ผมว่าต้องเป็น Hacker ที่ดีด้วย ถึงจะไปด้วยกันได้ (ถ้าไม่รู้ว่า server รั่วอย่างไร จะปิดได้ไง)
    - อ่านหน่อยครับว่า ถูก hack อย่างไร จะได้เป็นบทเรียน (หัวข้อ 9.51)
    - อ่านหน่อยครับว่า ปกป้องตัวเองอย่างไร จะได้เป็นบทเรียน (หัวข้อ 9.52)
    - ป้องกัน hacker มือสมัครเล่นด้วย 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 (กำลังพยายาม เพราะระบบยังไม่แข็งพอสู้กับ hacker มืออาชีพ ก็เปิดไม่ได้)

    ขั้นตอนการติดตั้ง เมื่อ 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)
  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 วัน จึงรอต่อไปไม่ได้ เพราะร้านก็ไม่แน่ใจว่า ถ้าถอดและซ่อมจริง จะหาอุปกรณ์ที่มีปัญหานั้นพบในเวลากี่วัน
    1. ทางเลือกสำหรับปัญหา router เสีย (CISCO คืออุปกรณ์ที่นิยม และน่าเชื่อถือ ที่สุดในโลก)
    2. ไม่ซ่อม แต่แก้ปัญหาด้วยการปิด และเปิดใหม่ บางครั้งใช้เวลา 1 ชั่วโมงกว่าจะเครื่องร้อน (ปัจจุบันเลือกทางนี้)
    3. ซื้อ smart net ซึ่งเป็นประกัน หากต่อไปเสีย แล้วส่งเข้าบริษัท CISCO ทางบริษัทจะส่งตัวอื่นให้ใช้แทน ค่าใช้จ่าย 17800 บาทต่อปี
    4. ซื้อตัวใหม่ยี่ห้อเดิม ที่มีศักยภาพเทียบเท่า หรือสูงกว่าตัวเดิม มีค่าใช้จ่ายประมาณ 150,000 บาท
    5. ซื้อตัวใหม่ยี่ห้อใหม่ ที่มีศักยภาพ และความคงทน ต่ำกว่ายี่ห้อเดิม มีค่าใช้จ่ายประมาณ 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 เหลือนิดเดียว .. แสดงว่า hacker เข้ามาลบร่องรอย
  6. find / -cmin -600 | more แสดงชื่อแฟ้มที่มีการเปลี่ยนแปลงใน 10 ชั่วโมงที่ผ่านมา ในทุก Directory แต่จะออกมามากไปหน่อย ต้องค่อย ๆ ดู หรือตัด / แล้วทำเฉพาะในห้องที่สงสัยก็ได้
  7. cat /var/log/messages |grep login|more ดูว่ามีคนแปลกหน้า Login หรือพยายามเข้ามาหรือไม่ แต่อาจไม่ได้ผล ถ้า hacker มืออาชีพเขาจะลบแฟ้มนี้ทิ้ง ก่อนออกไป
  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
---
สารบัญ
บทที่ 9 : การบริหารระบบ โดย Super User
9.1 กำหนด IP address และ host name
9.5 Shell script เพิ่มผู้ใช้ _crt
9.6 Shell script ลบผู้ใช้
9.9 แก้ไข aliases ของ user account
9.10 เพิ่ม IP ใน Server ตัวเดียวด้วย IFCONFIG
9.11 เพิ่ม Virtual hosts
9.12 ตัวอย่าง router configuration และการ block port
9.50 ความผิดพลาด
9.52 ปรับระบบให้แข็งแรง
9.53 การทำ restricted shell
9.54 ติดตั้ง TCPWrapper เพื่อตรวจสอบ IP เครื่องต้นทาง
9.55 Network security
9.56 Procmail เพื่อกรอง spam mail และ junk mail
9.58 โปรแกรมภาษา c เพื่อสร้าง crypt ให้ shadow
9.59 ลีนุกซ์บนวินโดวส์ ด้วย cygwin (Unix Simulator)
9.61 ลืมรหัสผ่านของ root
9.62 แก้ไข httpd.conf เพื่อแก้ปัญหาของ web server
9.63 วิธีเปิดบริการ FTP server ด้วย vsftpd
9.64 วิธีเปิดบริการ homepage ให้ ~username ใน linux
9.65 วิธีเปิดบริการ samba
9.66 วิธีเปิดบริการ DNS server
9.67 ติดตั้งโปรแกรมสำหรับ Free hosting ด้วย easyhost_free.zip by CyberScript
9.68 ติดตั้งโปรแกรมสำหรับ Web-based mail ด้วย uebimiau-2.7.2-any.zip
9.69 ติดตั้ง DHCP server แจก Dynamic IP
9.71 ติดตั้ง Web Mail ของ Adjeweb หรือ Squirrelmail
9.72 ติดตั้ง squid เป็น Proxy server ที่ 3128
9.73 เพิ่ม incoming ในบริการ ftp
9.74 User authentication ด้วย .htpasswd + .htaccess
9.75 เปิดบริการ SSI (Server Side Include)
9.76 การติดตั้ง Radius
9.77 ติดตั้ง Modem สำหรับให้บริการเรียกเข้ามา
9.78 SMTP สำหรับ outgoing ของ Outlook ..
9.79 ติดตั้ง SSL (Secure Sockets Layer)
9.95 การย้ายระบบ user จากเครื่องหนึ่งไปอีกเครื่องหนึ่ง
9.96 วิธี copy server หรือ host(Backup)
9.97 Server ตัวนี้ให้บริการอะไรได้บ้าง
9.98 ขั้นตอนการทำ server ตัวนี้
9.99 การบำรุงรักษา และตรวจสอบ
Thaiall.com