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

0

Standalone Trac

  1. aptitude install trac
  2. trac-admin <envdir> initenv
  3. trac-admin <envdir> permission add <user> TRAC_ADMIN
  4. tracd –port <port> <envdir>

Apache + mod_python

  1. aptitude install libapache2-mod-python
  2. zless /usr/share/doc/trac/README.Debian.gz
  3. chmod -R www-data.www-data <envdir>
  4. 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

ตามนี้เลยนะจ๊ะ :)

Go to Top