ก๊วนซอฟท์แวร์ </softganz> SoftGang (Gang Software)

Web &amp; Software Developer Gang.

Topic List

โดย Little Bear on 21 มิ.ย. 54 12:33

ติดตั้ง Ubuntu Desktop ให้เป็น Server (LAMP)

ผ่านไป 2 ปี ก็ถึงเวลาต้องติดตั้ง Ubuntu ใหม่เสียที คราวนี้เลยถือโอกาสเปลี่ยนเป็น Ubuntu 11.04 64 bit ไปเลย ก็เลยลองมารีวิวการติดตั้ง LAMP บน Ubuntu ใหม่ว่ามีอะไรที่เปลี่ยนแปลงไปบ้าง

หมายเหตุ : การติดตั้งต่อไปนี้ใช้สิทธิ์ของ root ขอให้เข้าสู่สิทธิ์ของ root โดยการเปิด terminal แล้วพิมพ์ sudo su

Install L.A.M.P Stack (Apache, Mysql, PHP) ทีเดียวซะเลย

root@god:/# apt-get install lamp-server^

แล้วก็ลง phpMyAdmin

root@god:/# apt-get install phpmyadmin

เลือก Apache แล้ว YES สำหรับ dbconfig-common.

ติดตั้งเพิ่มเติม

php5-curl

root@god# apt-get install php5-curl

หรือชอบที่จะลงทีละตัว ก็

Install Apache

root@god:/# apt-get install apache2

Enable mod_rewrite

root@god:/# a2enmod rewrite

เปลี่ยน DocumentRoot ของ apache เป็น folder อื่น และเปิดใช้งาน clean url

root@god:/# nano /etc/apache2/sites-available/default
  • เปลี่ยนบรรทัด /var/www/ เป็น /my web folder/ จำนวน 2 ตำแหน่ง
  • แก้ค่า AllowOverride ของ /my web folder/ จาก None เป็น AllowOverride All

Install PHP

root@god:/# apt-get install php5 libapache2-mod-php5 php5-gd
root@god:/# /etc/init.d/apache2 restart

Install MySQL

root@god:/# apt-get install mysql-server libapache2-mod-auth-mysql php5-mysql phpmyadmin
root@god:/# /etc/init.d/apache2 restart

หากมีข้อมูลเก่าของ mysql ก็สามารถ copy มาไว้ที่ /var/lib/mysql แล้ว โดยใช้คำสั่ง

root@god:/# cp /media/disk/var/lib/mysql/* /var/lib/mysql/
root@god:/# chown -hR mysql /var/lib/mysql/*
root@god:/# chgrp -hR mysql /var/lib/mysql/*

ย้ายข้อมูล mysql ไปไว้ที่อื่น

root@god:/# /etc/init.d/mysql stop
root@god:/# mkdir /home/mysql
root@god:/# chown -R mysql:mysql /home/mysql
root@god:/# cp -r /var/lib/mysql/mysql /home/mysql/
root@god:/# chown -R mysql:mysql /home/mysql/*

แล้วแก้ my.cnf

root@god:/# nano /etc/mysql/my.cnf

หาคำนี้ให้เจอ :

datadir = /var/lib/mysql

แล้วเปลี่ยนเป็นตำแหน่งใหม่ :

datadir = /home/mysql

เสร็จแล้วก็ restart mysql service

root@god:/# /etc/init.d/mysql start
Starting MySQL database server mysqld [ OK ]

แล้ว mysql จะทำการสร้างไฟล์ ibdata1, ib_logfile0, อื่น ๆ ขึ้นมาใหม่

ทุกอย่างน่าจะเรียบร้อย แต่ผมไม่สามารถ start mysql ได้ มันค้างอยู่ เลยต้องไปแก้ค่าในไฟล์ /etc/apparmor.d/usr.sbin.mysqld โดยเปลี่ยนค่า /var/lib/mysql ให้เป็น /home/mysql ด้วย

แล้วคราวนี้ก็ทำการ copy ฐานข้อมูลเก่า ๆ มาได้เลย อย่าลืมเปลี่ยน owner/group เป็น mysql ด้วยนะ

ที่มา

#sudo apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert
<a class="hashtag" href="/tags/sudo">#sudo</a> apt-get install libapache2-mod-php5 php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-json php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
โดย Little Bear on 23 มี.ค. 54 21:47

Web Server ที่ใช้งานอยู่ปัจจุบัน กำลังจะถูกโยกย้ายไปไว้ที่ศูนย์คอมพิวเตอร์ ม.อ. เลยต้องหา Server ตัวใหม่มาทดแทน ที่เล็ง ๆ ไว้ คือ Dell R210 ด้วยความที่ราคาไม่แพงเกิน คุณภาพน่าจะ OK (จากที่ใช้ Dell R200 มาเกือบ 3 ปี ไม่เคยมีปัญหาเลย)

สรุปคร่าว ๆ ได้ดังนี้

  1. ชุดมาตรฐานจาก Dell R210 Intel Xeon X3440 2.53GHz 2GB(2x1GB) Memory , 500GB Harddisk , DVD Combo = 31,042.- จาก thaihosttalk.com , tws.co.th , rackserverthai.com , pantiponline.com

  2. แต่ที่อยากได้ คือ Dell R210 Intel Xeon X3440 2.53GHz 4GB(2x2GB) Memory , 500GBx2 Harddisk , DVD Combo ราคาประมาณ 40k

  3. Dell Specification

โดย Little Bear on 28 ก.ค. 53 16:54

กำลังศึกษาการเขียน Apache rewrite rule จะทำ subdomain redirect ไปสู่โปรแกรม

เช่น http://bear.softganz.com ไป http://www.softganz.com/index.php?u=bear

เขียนยากจริง ๆ พยายามทำความเข้าใจอยู่ หากพอจะเข้าใจ จะมาเขียนอธิบายรายละเอียดอีกที

แหล่งเรียนรู้

โดย Little Bear on 17 พ.ค. 53 21:25

ติดตั้ง Ubuntu Server ให้เรียบร้อย พร้อมอัพเดตให้เป็นล่าสุด

sudo apt-get update

หากต้องการใช้งาน Ubuntu desktop ให้ติดตั้ง

sudo apt-get install ubuntu-desktop

ขั้นตอนการติดตั้ง Samba

1.ติดตั้ง Ubuntu Server โดยไม่ต้องติดตั้ง package ใด ๆ เราจะมาติดตั้ง Samba กันตอนหลัง

2.ติดตั้ง Samba

sudo apt-get install samba

3.แก้ไขคอนฟิกของ Samba

sudo nano /etc/samba/smb.conf

4.เปลี่ยนค่าใน global ของคอนฟิก อย่าลืมสร้าง share directory ด้วยนะ ส่วนกลุ่ม Sharing หากยังไม่มีก็ป้อนเข้าไปใหม่ทั้งหมด

[global]
workgroup = YOUR_WORK_GROUP
netbios name = YOUR_COMPUTER_NAME
security = SHARE
auth methods = guest
domain master = No
wins support = Yes

[Sharing]
comment=My Ubuntu
path = /home/your_home_directory/Sharing
read only = No
guest ok = Yes

5.บันทึกให้เรียบร้อย แล้วสั่ง restart Samba

smbd restart

ติดตั้ง VirtualBox สำหรับลง Windows

เพิ่มบรรทัดด้านล่างไว้ใน /etc/apt/sources.list:

deb http://download.virtualbox.org/virtualbox/debian lucid non-free

The Sun public key for apt-secure can be downloaded here. You can add this key with

wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -

The key fingerprint is

AF45 1228 01DA D613 29EF  9570 DCF9 F87B 6DFB CBAE Sun Microsystems, Inc. (xVM VirtualBox archive signing key) info@virtualbox.org

To install VirtualBox, do

sudo apt-get update
sudo apt-get install virtualbox-3.1

Replace virtualbox-3.1 by

  • virtualbox-3.0 to install VirtualBox 3.0.14
  • virtualbox-2.2 to install VirtualBox 2.2.4
  • virtualbox-2.1 to install VirtualBox 2.1.4
  • virtualbox-2.0 to install VirtualBox 2.0.12
  • virtualbox to install VirtualBox 1.6.6

สร้าง GuestOS โดยกำหนด Network ให้เป็น Bridge และลง OS ให้เรียบร้อย

Mount share folder ให้กับ GuestOS ได้มาจาก HOWTO: Use Shared Folders

sudo mount -t vboxsf share ~/host

หรือ Mount ให้กับผู้ใช้งานปัจจุบัน

sudo mount -t vboxsf -o uid=1000,gid=1000 share ~/host



ทำให้ GuestOS เปิดอัตโนมัตเมื่อเปิดเครื่อง

อ้างอิง

โดย Little Bear on 29 พ.ย. 52 19:58

เครื่องมือสำหรับตรวจสอบการทำงานของ server ที่ SysAdmin ควรมีและควรรู้

ตามไปดูได้ที่ http://www.cyberciti.biz นะครับ

โดย Little Bear on 3 ก.ย. 52 18:29

อาจจะต้องเขียน bash scripting มากขึ้น หลังจากต้องดูแล server เอง เลยขอเก็บคู่มือ - reference ของการเขียน bash scripting มาเก็บไว้เพื่อศึกษาในภายหลัง

อยู่ที่ Advanced Bash-Scripting Guide - An in-depth exploration of the art of shell scripting

โดย Little Bear on 25 ส.ค. 52 13:55

พรบ.คอมพิวเตอร์บังคับให้เก็บ log ไว้อย่างน้อย 90 วัน

ขอเก็บรายละเอียดการทำไว้ก่อน ได้มาจาก แนะนำเก็บ log httpd ของ DirectAdmin Control Panel ให้เก็บได้ 90 วัน แบบง่าย ๆ

โดย Little Bear on 23 ส.ค. 52 21:04

dir ที่สามารถ upload file ได้ให้ทำการป้องกันไม่ให้ php perl ทำงานได้ เพราะว่าถ้าเกิดหลุดขึ้นมา จะอันตรายมาก ๆ วิธีการป้องกันก็คือ ไปกำหนดเพิ่ม ใน httpd.conf ดังต่อไปนี้ สมมติว่า /home/webmaster/public_html/webboard/file เป็นส่วนที่ใช้เก็บรูปของบอร์ดเวลา post ขึ้นไป ผมก็จะกำหนดเพิ่มดังนี้

<Directory "/home/webmaster/public_html/webboard/file">
Options Indexes MultiViews -ExecCGI
AllowOverride None
Order allow,deny
Allow from all
php_flag engine off
</Directory>

เท่านี้ก็ปลอดภัยอีกระดับนึงครับ ถ้าเกิด script เราหลุด hacker สามารถ upload file ขึ้นไปได้ แต่เค้าก็จะไม่สามารถสั่งให้ทำงานได้ครับ ..

โดย Little Bear on 3 ส.ค. 52 18:32

Step 1: Securing /tmp

Step 1.1: Backup your fstab file

cp /etc/fstab /etc/fstab.bak

Step 1.2: Creating tmpmnt partition file (Around 1Gb in size)

cd /var
dd if=/dev/zero of=tmpMnt bs=1024 count=1048576

Step 1.3: Format the new partition

mkfs.ext3 -j /var/tmpMnt

Press Y when asked

Step 1.4: Making backup of old /tmp

cp -Rp /tmp /tmp_backup

Step 1.5: Mount the tmp filesystem

mount -o loop,noexec,nosuid,rw /var/tmpMnt /tmp

Step 1.6: Set the right permissions

chmod 0777 /tmp

Step 1.7: Copy the files back to new tmp folder

cp -Rp /tmp_backup/* /tmp/

Step 1.8: Adding new /tmp filesystem to fstab

echo "/var/tmpMnt /tmp ext3 loop,rw,noexec,nosuid,nodev 0 0" >> /etc/fstab

Step 2: No need for 2 tmp filesystems, so we symlink /var/tmp to /tmp

rm -rf /var/tmp/
ln -s /tmp/ /var/tmp

ปล.ลองทำแล้ว แต่ติดอยู่ที่ step 1.5 มีแจ้งว่า "mount: no permission to look at /dev/loop#" พอทำต่อ เหมือนกับไม่สำเร็จ

โดย Little Bear on 17 ก.ค. 52 03:38

VPS ที่เจียเช่าจากคุณเสกถูก hack เมื่อเดือนที่แล้ว (มิ.ย.) ซึ่งคาดว่าจะถูกขโมยรหัสผ่านของ ftp แล้วมีการแก้ไขไฟล์ index.html , index.php ซึ่งจากการตามหารายละเอียด ขั้นตอนน่าจะเป็น

  1. มีโทรจันมาฝังอยู่ในเครื่องที่ใช้สำหรับ upload file ด้วย ftp

  2. โทรจันส่งรหัสผ่านของ ftp ไปให้คนเขียน

  3. เมื่อได้รหัสผ่านของ ftp ไป ก็จะใช้ script ในการเข้าไปค้นหาไฟล์ที่ชื่อขึ้นต้นด้วย index.* จากทุก ๆ folder ใน server

  4. ทำการ download ไฟล์ index.* มาแล้วทำการแก้ไขโดยแทรกคำสั่ง tag iframe ไว้หลัง tag body ให้ไปดึง script มาจาก server ของตนเองให้มา run ในเครืองที่เปิดเข้าไปดูเว็บนั้น โดยกำหนด style ให้ visibility:hidden ซึ่งจะทำให้มองไม่เห็นใน browser

  5. ทำการ upload ไฟล์ที่ได้แก้ไขกลับขึ้นไปที่ server เหมือนเดิม

วิธีสังเกตุว่าเว็บเราติดเข้าไปแล้ว

  1. ตอนเปิดเว็บสังเกตุที่ status bar จะมีการ request ไปยังเว็บไซท์อื่นที่เราไม่เคยใส่ code ไว้

  2. ลอง view source ดู จะเจอคำสั่ง iframe ที่ src เป็นเว็บที่ต้องสงสัย ซึ่งที่เจอจะระบุหมายเลข port เป็น 8080

  3. หาก ssh เข้าไปที่ server แล้วสั่ง

find /home/*/domains/*/public_html/ -maxdepth 100 -name *index* -exec grep -H "iframe" {} ";" > iframe.txt

ลองดูผลลัพท์ในไฟล์ iframe.txt

ถ้าจะให้ดีก็ตั้งคำสั่งนี้ให้เป็น cron job ให้ค้นหาทุกวัน หากต้องการค้นหาเฉพาะไฟล์ที่มีการเปลี่ยนแปลงภายใน 24 ช.ม. ให้เพิ่ม option -mtime -1 ไปด้วย

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

3-4 วันที่ผ่านมา ก็สังเกตุเป็นว่ามี process ของ apache run perl และใช้ cpu เยอะมาก ลอง kill precess แล้ว ไม่นานก็มี process กลับมาใหม่

วันนี้ลองค้นหาดูใน cgi-bin ปรากฎว่ามี perl script อยู่จริง ๆ ด้วย อยู่ใน /home/ * /domains/ * /public_html/cgi-bin/ จึงลบมันทิ้งไป และ stop service apache กับ proftpd ไว้ก่อน

วิธี kill perl ทุก process ใช้คำสั่ง

for pl in `ps -A | grep perl | cut -c 1-6`; do kill -9 $pl;done

หลังจาก kill httpd ทั้งหมดแล้ว สักพัก process httpd ก็มาอีก คาดว่าน่าจะมาจาก crontab เลยลองเช็ค crontab ของทุก user ดูด้วยคำสั่ง

for u in `cat /etc/passwd | cut -d":" -f1`;do crontab -l -u $u;done

ก็ไม่เจออะไรผิดปกติ คงมีตัวไหนสักตัวที่สั่ง run httpd ขึ้นมา แต่ยังหาไม่เจอ

ตอนนี้ก็หลายนาทีแล้ว เจ้า perl script ยังไม่มา ไม่รู้ว่าจะหายไปตลอดกาลหรือเปล่า พรุ่งนี้เข้าค่อยมาดูอีกที

บาย... ไปนอนก่อนครับ.

Update 2009-07-18 08.28 PM process ของ perl มาอีกแล้ว มาเพียบด้วย สรุปว่ายังแก้ไม่ผ่าน

Update 2009-07-19 10.20 PM วันก่อนลืมเปลี่ยนรหัสผ่าน เข้ามาดูอีกทีปรากฎว่ามีการส่งไฟล์ .pl เข้ามาอีก แถม run script สัก 400 process ได้ กว่าจะ ssh เข้าไปได้ นานมาก ๆ เลยเปลี่ยนรหัสผ่านของทุก user (เท่าที่หาเจอ) เสียเลย

Update 2009-07-20 06.43 PM เข้าไปค้นหาใน log ยังคงมีการ upload ไฟล์เข้ามาในชื่อ sator4u (ไม่แน่ใจว่าได้เปลี่ยนรหัสผ่านหรือยัง) จึงเปลี่ยนรหัสผ่านใหม่ ดูเหมือนกับว่าจะมีไฟล์ .pl อยู่ในโฟลเตอร์ของ sator4u ด้วย จึงทำการเปลี่ยนชื่อ home folder เป็นชื่ออื่น ไปก่อน ป้องกันไม่ให้เรียก script มาทำงาน (ยังไม่ได้ลบทิ้ง)

Update 2009-07-21 06.36 AM หลังจากตามดูอยู่ 2 วัน ตอนนี้เหตุการณ์ทุกอย่างเป็นปกติแล้ว