Posts tagged debian
ปรับ Apache ให้ซ่อนรายละเอียด Server
0สิ่งที่ผมจะพูดต่อไปนี้อ้างอิงกับ Debian เท่านั้นนะครับ อาจดูเป็นเรื่องง่ายๆ แต่ผมไม่เคยเอะใจสักนิด
ปัญหาก็คือผมต้องการซ่อนรายละเอียดของ Server ที่รันเว็บอยู่ ซึ่งปกติมันจะบอกข้อมูลมาแบบนี้
Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.9 OpenSSL/0.9.8g mod_wsgi/2.3 Phusion_Passenger/2.0.4 Server at <hidden> Port 80
วิธีซ่อนก็ไม่ยาก แค่ไปแก้สองคำสั่งใน apache2.conf ตามนี้ รายละเอียดพวกนี้ก็จะถูกซ่อนไป
ServerSignature Off
ServerTokens Prod
แต่เมื่อแก้เสร็จแล้ว Apache ก็ยังคายรายละเอียดของ Server ออกมาเยอะเหมือนเดิมอยู่ ซึ่งตามปกติถ้าเราปรับอย่างนั้นแล้ว มันไม่ควรจะคายอะไรออกมาเลย
ก็เลยลองไล่ดูคำสั่งในโฟลเดอร์ config ของ Apache ไปเรื่อยๆ จนเจอว่ามีอีกไฟล์ที่มีสองคำสั่งนั้นเช่นกัน คือ /etc/apache2/conf.d/security เลยตามเข้าไปแก้ในไฟล์นั้น และแล้วมันก็ซ่อนตามที่เราต้องการ
สาเหตุที่ปรับใน /etc/apache2/apache2.conf แล้วไม่ได้ผล นั่นเพราะ 2 คำสั่งข้างบนนั้น มันมาก่อนคำสั่ง
Include /etc/apache2/conf.d/
ซึ่งคำสั่งนี้ทำให้ Apache ดึงทุกไฟล์ในโฟลเดอร์ conf.d เข้ามาประมวลผล เนื่องจาก Apache ใช้หลักการ "มาทีหลังดังกว่า" ก็คือถ้ามีคำสั่งซ้ำกัน มันจะยึดตามอันที่มาหลังสุดเป็นหลัก ด้วยเหตุนี้ มันเลยอ่านคำสั่งในไฟล์ conf.d/security มาทับคำสั่งเดิมใน apache2.conf แทน
บทเรียนวันนี้: คิดจะแก้อะไร ลอง <code>grep -R</code> ดูก่อนทุกครั้ง – -"
Shortnote: Install Trac on Debian
0Standalone Trac
- aptitude install trac
- trac-admin <envdir> initenv
- trac-admin <envdir> permission add <user> TRAC_ADMIN
- tracd –port <port> <envdir>
Apache + mod_python
- aptitude install libapache2-mod-python
- zless /usr/share/doc/trac/README.Debian.gz
- chmod -R www-data.www-data <envdir>
- If failed, see apache’s error.log
Reset MySQL Root Password บน Debian แบบง่ายๆ
0หลังจากใช้วิธีถึกๆมาตลอด โดยรัน mysqld ใหม่แบบ skip-privileges แล้ว connect เข้าไป set root password ใน table เอาเอง ยุ่งยากโคตรๆ มาวันนี้พึ่งรู้ว่ามันมีวิธีง่ายๆด้วย
dpkg-reconfigure mysql-server-5.0แน่นอน ว่าคนรันต้องเป็น root
รัน PHP4 และ PHP5 คู่กันบน Apache 2
0พอดีช่วงนี้มีงานคอนฟิก Server เจ้าของเครื่องเขาจำเป็นต้องใช้ เลยไปลองหาๆวิธีมาทำดู เท่าที่อ่านมามีหลายวิธี แต่ที่ดูง่ายสุดคือรัน PHP5 เป็น Module ส่วน PHP4 รันเป็น CGI
ปัญหาแรกคือ Repository (Debian Lenny) ที่ใช้มันไม่มี PHP4 ให้โหลด (พึ่งมารู้ที่หลังว่าที่อื่นมี – -") เลยต้องโหลด Source มา Compile เอง ก็ขลุกขลักนิดหน่อย แต่สุดท้ายก็ Compile ผ่าน เสร็จแล้วก็ไปแก้คอนฟิก Apache ให้เฉพาะบาง vhost รัน .php ผ่าน PHP4 CGI (/cgi-bin/php4/php) แทนที่จะเป็น PHP5 Apache Module
วิธีคอนฟิก เริ่มแรก (หลังจาก Compile เสร็จ) ก็ Copy โฟลเดอร์ /sapi/cgi ไปไว้ที่ /home/php4/cgi เสร็จแล้วแก้ /etc/apache2/httpd.conf ให้อ่าน cgi-bin จากที่นี่
ScriptAlias /cgi-bin/php4/ /home/php4/cgi
<Directory "/home/php4/cgi">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ที่เหลือก็แก้ vhost อันที่อยากให้เป็น PHP4 โดยเพิ่มคำสั่งพวกนี้เข้าไป
AddType application/php4 .php .phtml .php3
AddType application/php4-source .phps
Action application/php4 /cgi-bin/php4/php
Action application/php4-source /cgi-bin/php4/php
เท่านี้ vhost นั้นๆก็จะรันด้วย PHP4 แล้วครับ ทดสอบกันได้โดยคำสั่ง phpinfo();
แถมอีกนิด ถ้าอยากให้ vhost เดียวกันรันได้ทั้ง 2 รุ่น ก็ทำได้โดยแก้นามสกุลตรง AddType จาก php เป็นอย่างอื่น (เช่น .php4) แล้วทีนี้เวลาต้องการให้ script ไหนรันด้วย PHP4 ก็ตั้งนามสกุลเป็น .php4
AddType application/php4 .php4
Action application/php4 /cgi-bin/php4/php
ตามนี้เลยนะจ๊ะ