Topic List
ติดตั้ง 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 ด้วยนะ
ที่มา
- Installing LAMP On Ubuntu For Newbies
- How to move mysql database to another drive or partition
- howtoforge.com
#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
Web Server ที่ใช้งานอยู่ปัจจุบัน กำลังจะถูกโยกย้ายไปไว้ที่ศูนย์คอมพิวเตอร์ ม.อ. เลยต้องหา Server ตัวใหม่มาทดแทน ที่เล็ง ๆ ไว้ คือ Dell R210 ด้วยความที่ราคาไม่แพงเกิน คุณภาพน่าจะ OK (จากที่ใช้ Dell R200 มาเกือบ 3 ปี ไม่เคยมีปัญหาเลย)
สรุปคร่าว ๆ ได้ดังนี้
ชุดมาตรฐานจาก 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
แต่ที่อยากได้ คือ Dell R210 Intel Xeon X3440 2.53GHz 4GB(2x2GB) Memory , 500GBx2 Harddisk , DVD Combo ราคาประมาณ 40k
กำลังศึกษาการเขียน Apache rewrite rule จะทำ subdomain redirect ไปสู่โปรแกรม
เช่น http://bear.softganz.com ไป http://www.softganz.com/index.php?u=bear
เขียนยากจริง ๆ พยายามทำความเข้าใจอยู่ หากพอจะเข้าใจ จะมาเขียนอธิบายรายละเอียดอีกที
แหล่งเรียนรู้
ติดตั้ง 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 เปิดอัตโนมัตเมื่อเปิดเครื่อง
อ้างอิง
เครื่องมือสำหรับตรวจสอบการทำงานของ server ที่ SysAdmin ควรมีและควรรู้
ตามไปดูได้ที่ http://www.cyberciti.biz นะครับ
อาจจะต้องเขียน bash scripting มากขึ้น หลังจากต้องดูแล server เอง เลยขอเก็บคู่มือ - reference ของการเขียน bash scripting มาเก็บไว้เพื่อศึกษาในภายหลัง
อยู่ที่ Advanced Bash-Scripting Guide - An in-depth exploration of the art of shell scripting
พรบ.คอมพิวเตอร์บังคับให้เก็บ log ไว้อย่างน้อย 90 วัน
ขอเก็บรายละเอียดการทำไว้ก่อน ได้มาจาก แนะนำเก็บ log httpd ของ DirectAdmin Control Panel ให้เก็บได้ 90 วัน แบบง่าย ๆ
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 ขึ้นไปได้ แต่เค้าก็จะไม่สามารถสั่งให้ทำงานได้ครับ ..
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#" พอทำต่อ เหมือนกับไม่สำเร็จ
VPS ที่เจียเช่าจากคุณเสกถูก hack เมื่อเดือนที่แล้ว (มิ.ย.) ซึ่งคาดว่าจะถูกขโมยรหัสผ่านของ ftp แล้วมีการแก้ไขไฟล์ index.html , index.php ซึ่งจากการตามหารายละเอียด ขั้นตอนน่าจะเป็น
มีโทรจันมาฝังอยู่ในเครื่องที่ใช้สำหรับ upload file ด้วย ftp
โทรจันส่งรหัสผ่านของ ftp ไปให้คนเขียน
เมื่อได้รหัสผ่านของ ftp ไป ก็จะใช้ script ในการเข้าไปค้นหาไฟล์ที่ชื่อขึ้นต้นด้วย index.* จากทุก ๆ folder ใน server
ทำการ download ไฟล์ index.* มาแล้วทำการแก้ไขโดยแทรกคำสั่ง tag iframe ไว้หลัง tag body ให้ไปดึง script มาจาก server ของตนเองให้มา run ในเครืองที่เปิดเข้าไปดูเว็บนั้น โดยกำหนด style ให้ visibility:hidden ซึ่งจะทำให้มองไม่เห็นใน browser
ทำการ upload ไฟล์ที่ได้แก้ไขกลับขึ้นไปที่ server เหมือนเดิม
วิธีสังเกตุว่าเว็บเราติดเข้าไปแล้ว
ตอนเปิดเว็บสังเกตุที่ status bar จะมีการ request ไปยังเว็บไซท์อื่นที่เราไม่เคยใส่ code ไว้
ลอง view source ดู จะเจอคำสั่ง iframe ที่ src เป็นเว็บที่ต้องสงสัย ซึ่งที่เจอจะระบุหมายเลข port เป็น 8080
หาก 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 วัน ตอนนี้เหตุการณ์ทุกอย่างเป็นปกติแล้ว