網絡技術日誌

關於 PHP, Linux, Open Source 及個人生活記載的網誌。

新網址

往後更新會使用新網址 Linux 技術手札


編譯 Apache 問題: undefined reference to ‘ap_cache_cacheable_hdrs_out’

如果在編譯 Apache 時加入了 –enable-mem-cache 參數, 而沒有加入 –enable-cache 的話, 便會出現 undefined reference to ‘ap_cache_cacheable_hdrs_out’ 錯誤.

除了 –enable-mem-cache 外, –enable-disk-cache 同樣也需要加入 –enable-cache 才可以正確編譯.


檢查及修復 Shellshock 漏洞

Shellshock 漏洞可以讓黑客在遠端執行任意指令, 原本 Redhat 在 9 月 24 日已經發出的 patch 修復 (CVE-2014-6271) 漏洞, 但那個 patch 並未完整解決問題, 黑客仍可以透過其他方法執行指令。而在今日 (9 月 26 日) Redhat 再發出另一個 patch 修正 (CVE-2014-7169), 以下是測試 Linux 及 OSX 系統是否存在漏洞的方法:

測試漏洞 CVE-2014-6271:
env x=’() { :;}; echo vulnerable’ bash -c “echo this is a test”

如果返回結果有 “Vuluerable”, 即系統仍存在漏洞.

測試漏洞 CVE-2014-7169:
即使已經更新並修復以上漏洞, 但仍要用以下指令測試:
env X=’() { (a)=>\’ sh -c “echo date”; cat echo

如果返回結果是現在的日期時間, 即系統仍然存漏洞。

Redhat 已經發佈最新的 patch, Centos 的 repository 也已經更新, 在 Redhat 及 Centos 下執行以下指令修復漏洞:

yum update bash

如果返回沒有更新的話, 可以先清除緩存再更新:
yum clean all


iphone5 升級 iOS 8

上星期在 iphone 看到可以升級到 iOS 8, 昨天升級看看有什麼不同.

說實在的, ios8 的新功能對我沒什麼作用, 但在網上的試用報告, 都說 ios8 的電池續航力得到改善, 這個也是我升級的主要原因。我的是較舊的 iphone5, 不是 5s, cpu 速度較慢。可能是我太龜毛, 升級後發現的確有慢一點的感覺, 但只在剛開啟 apps 的一刻, 之後再開操作上則沒太大分別。

到於電池續航力, 使用了一天後發覺好像真的有點改善, 但這個還要多用幾天才可以下定論。


Linux find 指令忽略大小寫搜索

在 Linux 下用 find 搜索檔案/目錄, 預設的情況下大小寫有分別, 例如:

find ./ -name “testing.txt” -print

這行指令會找出檔案名稱為 testing.txt 的檔案, 但如果是 Testing.txt 或者 TESTING.TXT 就不會找到。

要忽略大小寫進行搜索, 可以在 find 指令加用 –iname 取伐原來的 -name, 如下:

find ./ -iname “testing.txt” -print

這樣檔案名稱就算大小寫不相同也會找到。只要合乎 testing.txt 這


Linux 下找出使用個別埠號的 process

在 Linux 下要找出使用了個別埠號的 process, 可以透過 netstat 實現, 例如:

netstat -tulpn | grep :80

輸出會類似以下
tcp 0 0 :::80 :::* LISTEN 3116/httpd

其中最後一欄 3116/httpd 內, 3116 代表服務的 pid, httpd 是名稱


編譯 PHP 時出現 /usr/bin/ld: cannot find -lltdl

今天在 Centos 用編譯的方法升級 PHP 時,config 一直正常,但在執行 make && make install 時卻出現以下錯誤:

/usr/bin/ld: cannot find -lltdl
collect2: ld returned 1 exit status
make: *** [libphp5.la] Error 1

上網找了一下, 原來缺少了 libtool-ltdl-devel, 執行以下指令用 yum 安裝 libtool-ltdl-devel:

yum install libtool-ltdl-devel

再重新在 php 目錄執行 make && make install 便成功了。


計算 PHP 執行時間

有時發現 PHP 執行很慢, 可以計算一下在伺服器上執行所需時間, 方法如下:

1. 在程式的最開頭插入以下一行, 以紀錄時間:

$count_time = microtime(true);

2. 然後在程式最結尾的位置加入以下一行, 就可以輸出整體執行時間:

echo “Time Used: “.(microtime(true) – $count_time).”s”;

當然有時想知道個別程式碼的執行時間, 只要將上面兩行, 分別放到想檢查程式碼的頭、尾便可以。


FreeBSD – 用 fsck 修復不正常關機

如果 FreeBSD 不能開機, 停在以下錯誤, 可能是多次不正常關機所致:

Enter full pathname of shell or RETURN for /bin/sh

這時可以直接按 Enter 鍵, 便會嘗試使用 fsck 修復:

fsck -y

這時要等一等, 系統會對 /etc/fstab 裡面定義的所有分割區進行掃瞄及修復, 完成後可以輸 “mount -a” 掛載所有分割區, 查看資料是否完整, 最後輸入 reboot 重新開機, 如果問題不是很嚴重, 大多能正常開機的。


淘寶的國際轉運

淘寶推出了官方的集運服務, 他們稱為國際轉運, 運作就是在不同的店家購物後, 送到推定的物流公司倉庫, 物流公司集齊幾份件, 再一次過發給買家, 這樣可以節省不少運費, 但需時較久。

我在上星期二試用了這個服務, 在四家店家購物, 如果四家店同時使用順豐, 將要收取每份 $38, 合共 $152 運費,而使用國際轉運的運費如下:

賣家發往順豐深圳倉庫的費用:
$8 x 4 = $32

四件快件合共 1.4KG, 首重 $18, 續重 $3, 即 $21 運費發到香港, 以上全部是以人民幣計算, 以 1.28 匯率計算, 運費合共為:
($32 + 21) x 1.28 = $67.84

比起全部以快件方式送到香港, 一共節省了八十多元的運費。

但用過今次後, 除非要在幾家不同的店家購物, 而所買的貨物又不急著用才會使用, 因為不能查詢物流情況, 打電話到順豐, 因為未發貨沒有單號, 所以是查不到的, 只可以叫他們催一下倉庫。在旺旺問他們要等很久才回應, 或者沒有回應。

另一個問題是到達時間真的很慢, 我上星期二下單, 幾件貨星期三已經送到倉庫, 然後要多等一天等貨品入庫, 這個還算可以的。等出庫才是最久的, 付了運費後足足等了 70 小時才發貨, 所以到今天星期一才可以到順豐門市取貨, 足足用了六天時間。


易淘充值支付寶

原先在淘寶購物都是用信用卡, 但有在淘寶買過野都知道, 信用卡付款匯率會較貴, 現在兌港幣大概 1.29, 另外會收取 3% 手續費, 中銀信用卡到年底優惠只收 1.5% 手續費, 但仍是偏貴。

昨天第一次使用 易淘 充值, 首先在他們網站開一個戶口, 然後可以用銀行入數或 ATM 過數轉帳給 易淘, 在 易淘 選擇 “網匯E充值支付寶” 購買網匯e充值卡, 再到支付寶輸入網匯e充值卡號碼及密碼充值。

這個要留意, 充值金額不可以要充值多少就多少, 網匯e充值卡的面值是以人民幣計算, 分別有 $300, $500, $1,000, $1,500, $2,000, $3,000, $5,000。

以我昨天充值 $1,500 人民幣到支付寶為例, 以今天的匯價 1.28 計算, 用了 $1,920 港幣, 如果在相同情況下用信用卡付款, 需要 $1,964 港幣, 以下是用中銀信用卡付款使費:

$1,500 x 1.29 x 1.015 = $1,964

易淘 的充值也算快手, 辦公時間只要十分鐘左右, 但購買網匯e充值卡後要留意, 因為支付寶的手機綁定現時只支援中國的手機, 港、澳、台的用戶未能綁定手機的情況下, 每天只可以用網匯e充值卡充值一次, 如果購買了一張以上的網匯e充值卡, 要留到第二天才可以充值多一次。


iFixit Pro Tech Toolkit 入手

要維修手機, 其實就是要拆開手機, 然後更換損壞的零件便可以, 最難的部份就是要把手機拆散, 著名拆手機網站 iFixit 以拆手機及平板電腦聞名, 裡面有很多教程是講述拆開不同品牌及型號的手機。他們有推出一系列的工具, 今次敗家的對象就是最齊全的 Pro Tech Toolkit

iFixit Pro Tech Toolkit

年頭第一次幫老婆換完電話的屏幕後, 發覺完來只要小心一點, 做足功課, 很多手機的維修都可以自己做到, 但一直只是用平價的工具, 這套 Pro Tech Toolkit 價錢比一般國產工具來得貴, 但用上去就是順手, 記得上次嘗試拆 iphone5 的屏幕時, 那枝平價撬棒就是太軟, 但今次用這組工具試拆, 是容易很多.


FreeBSD 增加 swap 空間

FreeBSD 在安裝後預設沒有使用 SWAP 空間, 如果在後期要增加 SWAP 支援, 可以使用以下方法:

1. 開啟 /usr/src/sys/i386/conf/GENERIC, 找到 device md 一行, 如果這行前面沒有加上 # 註釋, 那便可以了, 不然便要刪除 # 重新編譯 kernel.

2. 以下指令假設使用檔案 /usr/swap0 作為 swap 檔案, 而 count=1024 代表建立 1GB 的 swap, 可以按需要調整.

# dd if=/dev/zero of=/usr/swap0 bs=1024k count=1024

3. 變更 /usr/swap0 的權限:

# chmod 0600 /usr/swap0

4. 編輯 /etc/rc.conf, 開啟 swap

swapfile=”/usr/swap0″ # Set to name of swapfile if aux swapfile desired.

5. 重新啟動伺服器, 或者輸入以下指令馬上啟動 swap:

mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0


用 Fail2Ban 阻擋 SquirrelMail 攻擊

之前在 阻檔嘗試入侵的 IP — Fail2Ban 一文介紹了安裝及使用 Fail2Ban, 但其實 Fail2Ban 的可擴展性很好, 只要是有入登錯誤的紀錄檔, 及寫下正確的正規表示式便可以使用, 以下是阻檔 SquirrelMail 攻擊的方法。

1. 安裝 Squirrel Logger

## 將 squirrel logger 下載到 squirrel 的 plugin 目錄:
wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fsquirrel_logger-2.3.1-1.2.7.tar.gz
cd squirrel_logger-2.3.1-1.2.7
cp config_example.php config.php
vi config.php

然後在 config.php 裡面, 有一行是:

$sl_use_GMT = 1;
替換為

$sl_use_GMT = 0;

最後便要執行 squirrelmail 的 conf.pl 啟動 squirrelmail logger.

2. 設定 Fail2Ban

編輯 /etc/fail2ban/jail.conf 檔案, 並加入以下內容:

[squirrelmail-iptables]
enabled = true
filter = squirrelmail
action = iptables[name=SquirrelMail, port=http, protocol=tcp]
logpath = /var/lib/squirrelmail/prefs/squirrelmail_access_log
maxretry = 5

在 /etc/fail2ban/filter.d 目錄下面, 建立一個 squirrelmail.conf 檔案, 並加入以下內容:

# Fail2Ban configuration file
#
# Author: Bill Landry ((email_protected))
#
# $Revision: 510 $

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named “host”. The tag “” can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?PS+)
# Values: TEXT

failregex = [LOGIN_ERROR].*from : Unknown user or password incorrect

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT

ignoreregex =

然後開啟 /usr/share/fail2ban/server/datedetector.py 檔案, 在 Apache 及 Exim 中間加入以下內容:

# SquirrelMail 09/13/2007 06:43:20
template = DateStrptime()
template.setName(“Month/Day/Year Hour:Minute:Second”)
template.setRegex(“d{2}/d{2}/d{4} d{2}:d{2}:d{2}”)
template.setPattern(“%m/%d/%Y %H:%M:%S”)
self.__templates.append(template)

最後重新啟動 Fail2Ban 便可以了, 要進行測試的話, 只要試試登入錯誤幾次便知道是否正常運作。


修理電風扇 — 換起動電容

家裡有一台電風扇不轉了, 看看是否可以修理, 檢查了開關及插蘇沒有問題, 打開風扇罩後, 撥一撥扇葉又轉了, 如果感葉扇葉沒有卡住很順, 那這種情況大多數就是起動電容故障.

修理時沒有拍照, 但其實每台電風扇的結構都大同小異, 打開電風扇後面的保護罩, 有一個圖中看到的電容, 那個就是起動電容:

用他錶(三用電錶)轉到電容檔量度一下, 電容的規格是 1.5uf, 但現在只有 439nf (0.439uf), 這粒電容可以在電子零件行購買, 一般都是幾塊錢一粒, 因為我不熟悉的關係, 所有拍了照片到店家買相同規格的.

換上新電容後風扇就轉了, 順便給風扇加一點油, 雖然是辛苦一點, 但還是有賺到的感覺, 起碼堆填區又少一件垃圾.