Topic List
Directadmin มีอัพเดทเวอร์ชั่นใหม่ แต่ผมไม่สามารถเข้า https://www.mydomain.com:2222 ได้ เลยต้อง SSH เข้าไป build เอง
ขั้นตอนคือ
- SSH เข้าไปที่ server
- เปลี่ยน directory ไปที่ /usr/local/directadmin/custombuild
- พิมพ์ : "./build update" เพื่อดึงรายการอัพเดทล่าสุด
- พิมพ์ : "./build versions" เพื่อดูรายการอัพเดทใหม่พร้อมรายละเอียดเวอร์ชั่นของแต่ละ package และเวอร์ชั่นใหม่ที่ยังไม่ปรับปรุง
- พิมพ์ : "./build update_versions" เพื่อทำการอัพเดท
เท่านี้แหละ
ที่มา hostjunkies.com
เหตุเกิดจากว่า server ที่วางอยู่ใน ม.อ. ไม่อนุญาตให้ FTP จากภายนอกมหาวิทยาลัยได้ ต้องเข้าไปนั่งในมหาวิทยาลัยเท่านั้นจึงจะใช้งาน FTP ได้
แต่เว็บที่ดูแลอยู่มีปัญหาแค่ว่า folder สำหรับ upload ไฟล์นั้นได้ถูกกำหนด permission ไว้ที่ 755 ทำให้ไม่สามารถบันทึกภาพไว้ได้
นั่งคิดอยู่หลายตลบว่าจะทำยังไงดี ไม่อยากบึ่งรถไป ม.อ. ก็มาคิดได้ว่า CMS ที่เขียนไว้นั้น สามารถ run PHP ได้ และ PHP ก็มี function ftp และ ftp_chmod
ทางแก้จึงออกมาประมาณนี้
<?php
$ftp_server = "my.ftp.com";
$ftp_user_name = "myftpusername";
$ftp_user_pass = "myfppassword";
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
$folder="folder/to/chmod";
if (ftp_chmod($conn_id, 0777, $folder) !== false) {
echo "$folder chmoded successfully to 777\n";
} else {
echo "could not chmod $folder\n";
}
ftp_close($conn_id);
?>
เคยสำรองข้อมูลบน DirectAdmin ด้วยคำสั่ง CMDSYSTEMBACKUP โดยตั้งเวลาไว้ให้ทำงานตอนตี 5 กว่า (กว่าจะสำรองเสร็จปาเข้าไปเกือบ 10 โมงเช้า) DA ทำสำรองข้อมูลของ MySql ด้วยคำสั่ง mysqldump ทำให้ load เยอะมากจนเว็บล่ม ยังหาทางแก้ปัญหาไม่ได้ ตั้งใจว่าจะแก้ปัญหาชั่วคราวโดยการเปลี่ยนเวลาในการ backup ไปเป็นตอนดึก ๆ แทน
แต่ปัญหาคือจำไม่ได้แล้วว่าเข้าไปกำหนดผ่านทางเมนูไหน (นานมาแล้ว)
และเพิ่งหาเจอว่าอยู่ที่
http://YOUR-IP:2222/CMD_SYSTEM_BACKUP http://YOUR-IP:2222/CMD_ADMIN_BACKUP
เปลี่ยนเวลาเรียบร้อยแล้ว แต่ค่อยหาทางลด load อีกที
อ่านเจอใน www.thaihosttalk.com ว่ามีการแทรก eval(based64 ไว้ในไฟล์ต่าง ๆ ในเว็บ เลยลองมาเช็คใน server ปรากฏว่าเจอจริง ๆ ด้วย 2 โดเมน คือ border9025.com และ sadao4u.com
โดยการ
- ค้นหาไฟล์ที่ถูกแทรกโค๊ด eval(based64 ด้วยคำสั่ง
grep -lr --include=*.php "eval(base64_decode" /home/(user|*)/domains/*/public_html/
คำสั่งนี้จะแสดงรายชื่อทุกไฟล์ในบัญชีนี้ ที่ถูกแทรกโค๊ด eval ออกมาทั้งหมด แล้วก็เข้าไปลบคำสั่งนั้นออกจากแต่ละไฟล์
- ใช้ avgscan /home/user เพื่อหาไฟล์ Backdoor ก่อน โปรแกรม avgscan จะหาพบ และจะบอกว่า มีไฟล์ backdoor เก็บไว้ที่โฟลเดอร์ไหน
ขอบคุณ www.hosttook.com
คุณ icez เขียนไว้ที่ www.thaihosttalk.com ว่า
maxclients ของ apache สูตรคำนวณคือแรมหาร 50 ครับ แรม 24GB ก็เซตประมาณ 480 - 512 ไม่เกินนั้น
ส่วนของ my.cnf นี่บอกยากครับ หลักๆ ใช้ความรู้สึกเอามากกว่า
ด้านล่างนี้เป็นค่าเฉลี่ยสำหรับเครื่อง hosting ที่มีแรมมากกว่า 8GB ครับ ค่าที่ยังปรับเพิ่มได้อีกมี keybuffers กับ innodbbufferpoolsize นอกนั้นไม่ควรปรับเพิ่ม (max connections ปรับเพิ่มได้แต่ไม่เกิน 500 แต่ไม่แนะนำให้ปรับโดยเด็ดขาด)
[mysqld] local-infile=0 innodb_buffer_pool_size=256M innodb_additional_mem_pool_size=1M innodb_log_buffer_size=500K innodb_thread_concurrency=2 innodb_file_per_table skip-character-set-client-handshake skip-name-resolve max_connections = 300 key_buffer = 512M myisam_sort_buffer_size = 32M join_buffer_size = 1M read_buffer_size = 1M sort_buffer_size = 2M read_rnd_buffer_size = 1M table_cache = 1536 thread_cache = 4 thread_concurrency = 2 thread_cache_size = 256 wait_timeout = 3600 connect_timeout = 10 max_tmp_tables = 256 tmp_table_size = 128M max_allowed_packet = 16M max_connect_errors = 10 query_cache_limit = 1M query_cache_size = 32M query_cache_type = 1 query_prealloc_size = 16384 query_alloc_block_size = 16384 max_heap_table_size = 128M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid open_files_limit = 16384
ยังไม่ได้ศึกษา IPv6 อย่างจริงจัง รู้เพียงแค่ว่าวันหนึ่งมาถึงแน่ ๆ วันนี้ไปอ่านที่คุณ icez เขียนไว้ที่ Basic IP(v6) for System Administrator ลองอ่านดูก็พอเข้าใจ แต่ตนเองใช้ Debian ไม่ใช่ CentOS คงต้องหาข้อมูลต่อไป แต่ก็ขอเก็บอันนี้ไว้ก่อนก็แล้วกัน
สร้างไฟล์ /backup/backup.sh เขียน code ตามนี้
#!/bin/sh DEST="/backup/daily" if [ "$1" != "" ]; then DEST=$1 fi echo "Backup to $DEST" mkdir $DEST START=$(date +%s) rsync -avtp /* $DEST --delete --exclude-from=/backup/backup-exclude.txt FINISH=$(date +%s) echo "Backup to $DEST on $(date '+%A, %d %B %Y, %T') total time: $(( ($FINISH-$START) / 60 )) minutes, $(( ($FINISH-$START) % 60 )) seconds">>/backup/log/backup.log
สร้างไฟล์ /backup/backup-exclude.txt กำหนดชื่อโฟลเดอร์ที่ไม่ต้องการให้ backup
/backup/* /dev/* /proc/* /sys/* /tmp/* /run/* /mnt/* /media/* /lost+found /home/*/.gvfs var/log/httpd var/spool
แล้วกำหนด cronjob ให้ทำงานทุกวันตอนตี 2
* 2 * * * /backup/backup.sh
Linux Control Panel Open Source
- Baifox - Demo
- Cubepanel
- DTC - Demo
- EHCP - Demo
- GNUPanel - Demo
- ISP Config - Demo
- ispCP - Demo
- Kandalaya - Demo
- Kloxo - Demo
- Lxadmin (not GPL - free for 40 Domains)
- Open Panel - Demo
- Ravencore
- SysCP
- SysCP - Demo
- VHCS - Demo
- Web-CP - Demo
- Webmin - Demo
- ZPanel - Demo
Windows Control Panel Open Source
- DotnetPanel - Demo
- WebsitePanel - Demo
- ZPanel - Demo
อันนี้ copy มาล้วน ๆ ครับ ยังไม่มีความสามารถพอที่จะเขียนอย่างนี้ได้
เอามาจาก www.thaihosttalk.com ตามนี้นะครับ
นี่เป็นเกร็ดเล็กๆน้อยๆเบื้องต้นสำหรับมือใหม่ที่จะช่วยปรับแต่งให้เครื่อง Linux มีความปลอดภัยมากยิ่งขึ้นครับ โดยตัวอย่างที่ให้เป็นคำสั่งบนเครื่อง debian ถ้าใครใช้ distro อื่นๆก็อาจจะมีรายละเอียดปลีกย่อยแตกต่างกันไป (ส่วนใหญ่จะคล้ายๆกันแต่ต่างกันที่สถานที่เก็บ config ไฟล์ต่างๆ) ผิดพลาดประการใดก็ขออภัยด้วยครับ
แบ่งขั้นตอนคร่าวๆได้ดังนี้
- สร้าง user ขึ้นมาใหม่ - เพื่อที่จะได้ไม่ต้องเข้าเป็น root ตลอดเวลา ช่วยทั้งเรื่องความปลอดภัยและป้องกันความซุ่มซ่ามของตัวเองทำเครื่องพังจากการใช้คำสั่งอย่างไม่ระมัดระวัง
- เปลี่ยน root password - โดยเฉพาะคนที่ได้ root password มาจากคนอื่น (แต่ถ้าเราเปลี่ยนแล้ว คนๆนั้นก็จะเข้า root ไม่ได้นะครับ เว้นแต่ว่าจะให้สิทธิ์ใน sudoers ไว้ตามข้างล่าง)
- ปิด service ต่างๆที่ไม่ได้ใช้ - เพื่อลดจำนวนช่องโหว่ลง
- ลง sudo - จะได้ไม่ต้อง login เข้า root ตามข้อ (1) ข้างบน
- ตั้งค่า SSH - ไม่ให้ login โดยใช้ root และทำ public key authentication (ถ้าต้องการ)
- ตั้งค่า iptables - เพื่อเปิดใช้เฉพาะ port ที่จำเป็นจริงๆ
มาเริ่มกันเลยดีกว่า..
1. สร้าง user โดยใช้คำสั่ง adduser
$ adduser username $ passwd username
2. เปลี่ยน root password
$ passwd
3. ปิด service ต่าง ๆ ที่ไม่ได้ใช้
ปกติผมจะไปเพิ่มหรือลบ symbolic link ตาม /etc/rcX.d/ เอาด้วยความเคยชิน แต่เดี๋ยวนี้ใช้สคริปต์ update-rc.d ได้ครับ (สำหรับ debian) หรือ 'service' สำหรับ Centos
$ update-rc.d -f service_name remove
4. ลง sudo
$ apt-get install sudo
หรือใครใช้ Centos ก็ให้ใช้ yum เอา
จากนั้นก็ให้ใช้ visudo เพื่อแก้ไฟล์ sudoers อยากให้ใครใช้คำสั่งที่ต้องใช้ root privilege ได้ก็ใส่บรรทัดนี้เข้าไป
username ALL=(ALL)
5. ตั้งค่า SSH
อันดับแรกที่ผมทำเลยคือปิด root login ครับ ให้เข้ามาเป็น user ธรรมดาแล้วมา sudo เอา เปิดไฟล์ /etc/ssh/sshd_config โดยใช้ editor ที่ถนัด แล้วมองหาบรรทัด PermitRootLogin yes แล้วเปลี่ยนเป็น PermitRootLogin no แทน
จากนั้นก็เช็คว่าให้ใช้ SSH version 2 เท่านั้น โดยดูในไฟล์เดิมแล้วหาบรรทัด Protocol 2,1 แล้วเปลี่ยนเป็น Protocol 2 แทน ถ้าเป็น Protocol 2 อยู่แล้วก็ไม่ต้องไปยุ่งอะไรมันครับ
ถ้าอยากจะเปลี่ยน port SSH ด้วยก็ทำได้ครับ หาบรรทัด Port 22 แล้วเปลี่ยนเลข 22 เป็น port อื่นที่เราต้องการ
สำหรับคนที่โรคจิตวิตกจริตอย่างผมก็อาจจะอยากใช้ public key authentication แทน ก็ทำได้ครับ ก่อนอื่นก็สร้าง public/private key บนเครื่องตัวเองก่อน
$ ssh-keygen -t rsa
และควรจะใส่ password ให้กับ key นี้ด้วยเพื่อเพิ่มความปลอดภัย (ไม่งั้นถ้า private key โดนขโมย คนที่ขโมยก็จะสามารถเข้าเครื่องเราได้ทันที)
จากนั้นก็ upload public key ขึ้นไปบน server
$ scp id_rsa.pub username@server:id_rsa.pub
แล้ว log เข้าไปที่ server เพื่อตั้งให้ใช้ key นี้สำหรับ login
$ cd (ไปที่ home ของ user ที่ต้องการ) $ mkdir .ssh $ chmod 700 .ssh $ cat id_rsa.pub >> .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys
แล้วเปิดไฟล์ /etc/ssh/sshd_config ขึ้นมาอีกครั้งเพื่อตั้งให้ใช้ public key เท่านั้น
หาบรรทัด PasswordAuthentication yes แล้วเปลี่ยนเป็น PasswordAuthentication no
หาบรรทัด UsePAM yes แล้วเปลี่ยนเป็น UsePAM no
ถ้ามั่นใจว่าไม่ได้ทำอะไรผิดก็ทำการ restart sshd
$ /etc/init.d/ssh restart
*** ควรจะทำที่หน้าจอหรือผ่าน iKVM เพราะถ้า config พลาดอาจจะทำให้เข้าเครื่องไม่ได้ (เตือนแล้วนะครับ) หรือถ้าจำเป็นจริงๆที่ต้องทำจากข้างนอกก็ต้องไม่ปิด session ssh ปัจจุบันจนกว่าจะมั่นใจว่าสามารถเข้า session ใหม่ผ่าน public key ได้ ***
6. ตั้งค่า iptables
โดยปกติผมจะปิดทุก port ยกเว้นแต่ port ที่ต้องใช้จริงๆ ขั้นตอนต่อไปจะทำในไฟล์หรือใส่ command เข้าไปเลยก็ได้ ถ้าสร้างไฟล์ก็ให้เริ่มไฟล์ด้วย *filter เพื่อบอกว่าเรากำลังแก้ filter table อยู่ ดังนี้
$ vi /etc/iptables.test.rules
*filter -A INPUT -i lo -j ACCEPT -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT -A OUTPUT -j ACCEPT -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A INPUT -j DROP -A FORWARD -j DROP COMMIT
อธิบาย rules ต่างๆ
- อนุญาต traffic จาก loopback interface
- ถ้ามี traffic มาที่ 127.0.0.0/8 ต้องมาจาก loopback interface เท่านั้น
- อนุญาต incoming traffic ที่เริ่มจากเครื่องนี้
- อนุญาต outgoing traffic ทั้งหมด
- อนุญาต tcp traffic ที่มาที่ port 80
- อนุญาต tcp traffic ที่มาที่ port 22 (SSH)
- อนุญาต ping
- เก็บ log traffic ที่ไม่ได้รับอนุญาต
- drop incoming traffic อื่นๆ
- drop traffic อื่นๆ ที่จะต้องถูก forward
เสร็จแล้วก็ load เข้า iptables โดยคำสั่ง
$ iptables-restore < /etc/iptables.test.rules
หรือถ้าไม่ทำใส่ไฟล์ก็ให้ใช้คำสั่ง iptables นำหน้าแทนครับ เช่น
$ iptables -A INPUT -i lo -j ACCEPT
แล้วใส่เข้าไปทีละบรรทัด
จากนั้นก็ดูความเรียบร้อย
$ iptables -L
และลองดูว่า port ที่ต้องการจะใช้ใช้ได้จริงหรือเปล่า และ port อื่นๆได้ถูกปิดไปจริงหรือไม่ (สำหรับคนที่เปลี่ยน port ssh ก็อย่าลืมเปลี่ยนตามนะครับ) ถ้าเรียบร้อยดีก็ save ไป
$ iptables-save > /etc/iptables.up.rules
แล้วสร้าง script ขึ้นมาเพื่อโหลด rules ตอน boot
$vi /etc/network/if-pre-up.d/iptables
#!/bin/bash /sbin/iptables-restore < /etc/iptables.up.rules
save ไฟล์แล้วเปลี่ยน permission ให้เป็น executable
$ chmod +x /etc/network/if-pre-up.d/iptables
เป็นอันเสร็จเรียบร้อย
(ลอกมาจาก blog ตัวเอง + update นิดหน่อย) original ที่นี่ http://just-another-...ลอดภัยให้-debi/
ที่มา www.thaihosttalk.com
การติดตั้ง DirectAdmin บน CentOS 6 minimal ซึ่ง CentOS 6 minimal ไม่มี library พื้นฐานบางตัวมาให้โดยเฉพาะ mysql หลังจากลง CentOS เรียบร้อย ให้สั่ง update และติดตั้ง package เพิ่มเติม
yum update rpm -Uvh http://mirrors.thzhost.com/epel/6/x86_64/epel-release-6-5.noarch.rpm yum install gcc-c++ make patch screen wget quota ncftp bind bind-utils caching-nameserver which bison flex webalizer patch openssl-devel.x86_64 curl-devel.x86_64 e2fsprogs-devel.x86_64 perl-DBI ntp tcpdump iptables telnet traceroute rsync openssh-clients perl-Term-ReadKey autoconf rpm-build vim-enhanced nginx automake libaio libcurl-devel
หลังจากนั้นให้ติดตั้ง DirectAdmin ตามปกติ
คู่มือติดตั้ง CentOS 6
ที่มา www.thaihosttalk.com