網絡技術日誌

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

Entries for the ‘Linux / BSD 筆記’ Category

編譯 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 才可以正確編譯.

Comments Off

檢查及修復 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=’() [...]

Comments Off

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 這

Comments Off

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

在 Linux 下要找出使用了個別埠號的 process, 可以透過 netstat 實現, 例如: netstat -tulpn | grep :80 輸出會類似以下 tcp 0 0 :::80 :::* LISTEN 3116/httpd 其中最後一欄 3116/httpd 內, 3116 代表服務的 pid, httpd 是名稱

Comments Off

編譯 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 便成功了。

Comments Off

FreeBSD – 用 fsck 修復不正常關機

如果 FreeBSD 不能開機, 停在以下錯誤, 可能是多次不正常關機所致: Enter full pathname of shell or RETURN for /bin/sh 這時可以直接按 Enter 鍵, 便會嘗試使用 fsck 修復: fsck -y 這時要等一等, 系統會對 /etc/fstab 裡面定義的所有分割區進行掃瞄及修復, 完成後可以輸 “mount -a” 掛載所有分割區, 查看資料是否完整, 最後輸入 reboot 重新開機, 如果問題不是很嚴重, 大多能正常開機的。

Comments Off

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 [...]

Comments Off

用 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. [...]

Comments Off

Linux 指令模式下印出日曆

在 Linux 的指令模式下如果需要印出日曆, 可以用以下指令簡單實現: cal 6 2013 cal 後面的是月份及年份, 代入想印出的月份就可以了。

Comments Off

在 Linux 用 iptables 封鎖 ip

在 Linux 下如果要封鎖 ip 的網路流量, 可以透過 iptables 實現, 指令如下: iptables -A INPUT -s IP_ADDRESS -j DROP 只要將想封鎖的 ip 方法上面的 IP_ADDRESS 位置便可以了. 有一種情況是不想將某個 ip 的全部流量封鎖, 只想封鎖指定的 port 埠號, 可以這樣做: iptables -A INPUT -s IP_ADDRESS -p tcp –destination-port 25 -j DROP 以上指令透過 iptables 的 –destination-port 選項, 指令只封鎖 port 25 的流量. 但如果只是簡單的輸入 iptables 封鎖 IP, 當主機 reboot 或者重新啟動 [...]

Comments Off

在 Linux 產生 MD5 字串

在 Linux 下要產生一個 MD5 字串,可以用 md5sum 指令完成,這個工具在很多 Linux distribution 已經內建。 以下指令會產生 myblog 的 MD5 hash: echo -n “myblog” | md5sum

Comments Off

.htaccess – Invalid command ‘AuthUserFile’ 錯誤

在主機上的 Apache 用 .htaccess 設定了密碼保目錄,但發覺升級 Apache 後就出現 Internal Server Error,再查看 apache 的 error log,發現以下的錯誤訊息: .htaccess: Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration 解決方法只要開啟 httpd.conf 並開啟 authn_file module 便可以,打開 httpd.conf,找到 mod_authn_file 一行並將最開端的註釋符號刪除,改成: LoadModule authn_file_module modules/mod_authn_file.so 然後重新啟動 apache 便完成了。

Comments Off

Linux 下找出體積最大的檔案/目錄

當發現系統硬碟空間突然上升時,想知道那個檔案或目錄佔用最多空間,可以用 du + sort + head 指令完成,它們的作用分別為: du: 計算目錄所使用的空間 sort: 將輸入的資料排序 head: 將輸入資料的最開頭幾行資料輸出 假如發現 /home 裡面的空間使用異常時,可以用以下指令查看 /home 裡面頭 10 個使用最多硬碟空間的檔案或目錄: # du -a /home | sort -n -r | head -n 10

Comments Off

MySQL: [ERROR] Unknown character set 問題

早前升級一台主機的 MySQL Server,升級後發現部份資料表無法開啟,報出的錯誤訊息是: Unknown character set: ‘BIG5′ 出現這個問題的原因是新版本 MySQL 安裝時沒有安裝額外的字集,而對上一個版本的 MySQL 是用 YUM 安裝,所有透過套件工具安裝的 MySQL 也會預設安裝所有字集,解決方法是重新編譯 MySQL 並加上所有的字集的選擇 –with-extra-charsets=complex,編譯語法如下: ./configure — prefix=/usr/local/mysql –with-extra-charsets=complex 如果在 FreeBSD 遇上這個問題,而 FreeBSD 內的 MySQL 是透過 ports 安裝的話,便要使用 WITH_XCHARSET=all 參數: make WITH_XCHARSET=all install clean

Comments Off

Linux 下編譯 Apache 的 mod_rewrite

要為 Apache 加載 mod_rewrite 模組,如果 Apache 並未安裝,可以在編譯時加上 –enable-rewrite 便可以,但如果 Apache 已經安裝好,而又不想重新編譯 Apache 的話,可以用以下方法: 1. 首先 cd 到 Apache 的源代碼目錄並到 mod_rewrite.c 檔案, 1. 在apache的源码安装目录中寻找mod_rewrite.c文件 # find ./ -name mod_rewrite.c      2. 進入 mod_rewrite.c 的目錄並用 apxs 編譯 mod_rewrite.c # cd PATH/to/mod_rewrite.c # /usr/local/apache/bin/apxs -c mod_rewrite.c # /usr/local/apache/bin/apxs -i -a -n mod_rewrite mod_rewrite.la   3. 編譯好 mod_rewrite.c [...]

Comments Off