關於 PHP, Linux, Open Source 及個人生活記載的網誌。
RSS icon
  • .htaccess – Invalid command ‘AuthUserFile’ 錯誤

    Posted on January 17th, 2012 Sam Tang No comments

    在主機上的 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 便完成了。


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

    Posted on January 5th, 2012 Sam Tang No comments

    當發現系統硬碟空間突然上升時,想知道那個檔案或目錄佔用最多空間,可以用 du + sort + head 指令完成,它們的作用分別為:

    du: 計算目錄所使用的空間
    sort: 將輸入的資料排序
    head: 將輸入資料的最開頭幾行資料輸出

    假如發現 /home 裡面的空間使用異常時,可以用以下指令查看 /home 裡面頭 10 個使用最多硬碟空間的檔案或目錄:

    # du -a /home | sort -n -r | head -n 10

  • MySQL: [ERROR] Unknown character set 問題

    Posted on January 1st, 2012 Sam Tang No comments

    早前升級一台主機的 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


  • Linux 下編譯 Apache 的 mod_rewrite

    Posted on December 28th, 2011 Sam Tang No comments

    要為 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 後,便開啟 httpd.conf 加入以下內容:

    LoadModule rewrite_module modules/mod_rewrite.so

    然後重新啟動 Apache 便可以了。


  • Centos 安裝及設定 MRTG

    Posted on December 22nd, 2011 Sam Tang No comments

    MRTG 是一套十分出名的網路流量監察工具,它會透過 SNMP 協定取得網路流量資料,並以網頁介面輸出。要安裝 MRTG,需要安裝以下套件:

    mrtg: MRTG 的主程式
    net-snmp: NET-SNMP 內建幾個 SNMP 工具,包括 snmpd 及 snmptrapd daemons 及文檔等。
    net-snmp-utils: 內建一些 NET-SNMP 工具。

    以下是在 Centos 安裝及設定 MRTG 的步驟:

    1. 安裝 MRTG:

    在 Centos 下輸入以下指令安裝所需套件:

    # yum install mrtg net-snmp net-snmp-utils

     
    2. 設定 SNMP:
    開啟 /etc/snmp/snmpd.conf,加入以下下一行: Read the rest of this entry »


  • service httpd does not support chkconfig 問題

    Posted on December 21st, 2011 Sam Tang No comments

    在 Redhat 或 Centos 下手動編譯安裝 Apache 後,將 apachectl 放到 init.d 裡面,然後用 chkconfig 自動啟動,即以下動作會得出 service httpd does not support chkconfig 錯誤:

    # cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
    chkconfig httpd on

     
    service httpd does not support chkconfig

    解決方法是開啟 /etc/rc.d/init.d/httpd,把以下兩行加入到第二行便完成了。

    # chkconfig: 35 85 15
    # description: Apache is a World Wide Web server.


  • Redhat/Centos 架設 DNS Server

    Posted on December 19th, 2011 Sam Tang No comments

    安裝環境 Centos 5.7

    http://yacnoss.blogspot.com/2008/07/dnsbind.html

    1. 安裝 DNS 所需套件:
    只要用 yum 指令便可以一次過想所需的套件安裝。

    # yum install bind bind-chroot bind-utils caching-nameserver

     
    在預設的情況下 Centos 不會建立 named.conf,要用以下方法建立:

    # cd /etc
    grep -v ‘//’ named.rfc1912.zones > named.conf
    chown root.named named.conf
    chmod 640 named.conf

     

    2. 更新 root.zone

    到 ftp://rs.internic.net/domain/root.zone 下載最新的 root.zone 資料檔,然後放到 /var/named/var/named/ 裡面。

    然後就可以用 /etc/rc.d/init.d/named start 啟動 DNS Server。

    啟動後可以輸入以入指令測試 DNS Server 是否正常運作:

    # dig www.google.com @127.0.0.1

     
    關於在 DNS Server 加入 zone 及其他設定,可以參考以下文章:
    http://linux.vbird.org/linux_server/0350dns.php


  • Linux — 將一個用戶的進程全部 kill 掉

    Posted on December 19th, 2011 Sam Tang No comments

    當某個用戶使用過多系統資源時,可以用以下指令將他開啟的所有進程 kill 掉:

    kill -9 `ps -u USERNAME -o “pid=”`

    使用上只要將以上指令的 USERNAME 改成用戶名稱。


  • Redhat/Centos Yum 安裝 MySQL 問題

    Posted on December 16th, 2011 Sam Tang No comments

    今日在一台伺服器上升級 PHP 的版本,伺服器原來已經用 Yum 安裝了 MySQL,在手動編譯 PHP 時一直出現以下錯誤訊息:

    configure: error: mysql configure failed. Please check config.log for more information.

    原來我在編譯 PHP 時用了錯誤的參數,原本我是用 “–with-mysql=/usr/”,要將這個參數改成 “–with-mysql-dir=/usr/” 才可以編譯成功。


  • 找出隱藏的 process 及 port

    Posted on December 15th, 2011 Sam Tang No comments

    很多 rootkits 用了一些隱藏技巧,用 netstat 也找不出來,這個時候可以用 chkrootkit 這類工具掃瞄,另外還可以用 Unhide 搜索是否有不尋常的 process 及 port。
    Unhide 是一個輕巧的安全工具,可以找出 rootkit 所開啟的 process 或 TCP/UDP ports,除了 Unix 版本外,它還有 Windows 版本。

    如果是使用 Redhat,可以到 pkgs.org 下載相應版本的 rpm 檔案裝。

    在 Debian / Ubuntu 則較簡單,用 apt-get 安裝就好了。

    # apt-get install unhide

    至於使用上也是很簡單,一般上以下幾個指令就會搜索系統內隱藏的 process 及 ports:

    # unhide-posix proc
    # unhide-posix sys
    # unhide-tcp

  • 刪除 tarball 內的檔案

    Posted on December 5th, 2011 Sam Tang No comments

    如果想刪除 tarball 內的個別檔案,可以用 tar 指令實現,首先用以下指令查看 tarball 內的檔案內容:

    # tar -tvf test.tar

    然後就可以用以下指令刪除檔案,以下會假設刪除 del_file.txt 檔案:

    # tar –delete -f test.tar del_file.txt

    如果想一次過刪除多個檔案,也可以用 * 符號配合 –wildcards 選項:

    # tar –wildcards –delete -f test.tar ‘del_file.*’

    請注意,以上方法只支援 tarball 檔案,而並不支援 tar.gz 或 tar.bz2。


  • Unix 及 Windows 文字檔案轉換

    Posted on August 23rd, 2011 Sam Tang No comments

    在 Unix 及 Windows 裡面所儲存的文字檔案,最大分別是換新一行的顯示。Unix 會使用 EOL 作為跳行;而 Windows 則會使用 Ctrl-m (^M)。在 Linux 下可以用 dos2unix 及 unix2dos 將 Unix 及 Windows 的文字檔轉換:

    $ unix2dos unix_text.txt win_text.txt

    以上指令就會將 unix_text.txt 轉換成 windows 格式,並儲存到 win_text.txt,如果要將 windows 文字檔轉成 unix 文字檔,只要這樣:

    $ dos2unix win_text.txt unix_text.txt


  • Linux — 檢視 kernel module (驅動程式) 版本

    Posted on August 22nd, 2011 Sam Tang No comments

    要檢視 Linux 下 kernel module (驅動程式) 的版本,可以透過 modinfo 指令實現。首先要知道要查詢的 kernel module 名稱,輸入 lsmod 指令使會列出所有載入的 modules。

    例如要找出 mptscsih 所使用的版本,只要輸入:

    # modinfo mptscsih

    然後系統便會列出關於 mptscsih 所資訊,其中 Version 就是 module 的版本。


  • Linux — 列出一個進程正在使用的檔案

    Posted on August 19th, 2011 Sam Tang No comments

    要找出一個進程正在使用的檔案,首先要知道檔案的 process ID,可以用 ps 指令實現:

    # ps aux | grep mysql

    記下進程的 process ID 後,可以透過 /proc 檔案系統或 lsof 指令查詢,它們的使用方法如下:

    /proc
    假如 process ID 為 4252,只要用 ls 指令查視 /proc/4252/fd 目錄:

    # ls -l /proc/4252/fd

    lsof 指令

    # lsof -a -p 4252


  • 阻檔嘗試入侵的 IP — Fail2Ban

    Posted on August 17th, 2011 Sam Tang No comments

    Fail2Ban 是一套用 Python 寫成的系統安全工具,它會監察伺服器的紀錄檔,當出現多次登入錯誤後,便會觸發一些安全動作,例如將 IP 封鎖或用 Email 通知系統管理員等。Fail2Ban 相當具彈性,可以針對自己的需求設定不同的過濾規則,而 Fail2Ban 已經內建多個過濾規則,包含一些熱門伺服器軟件的過濾規則,支援 sshd, web server, ftp server, dns server 等。

    安裝方法:

    1. Fail2Ban 是以 Python 寫成,所以要先確定系統有安裝 Python,在 Redhat 安裝 Python 的方法是:
    # yum install python python-devel gamin-python

    2. 然後安裝 EPEL Repos 及 Fail2Ban

    Centos 5 x86_64:
    # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

    CentOS 5 i386:
    # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

    CentOS 4:
    # rpm -Uvh http://download.fedora.redhat.com/pub/epel/4/i386/epel-release-4-10.noarch.rpm

    安裝 fail2ban:
    # yum install fail2ban

    設定方法:
    安裝 Fail2Ban 後,可以開啟 /etc/fail2ban/jail.conf 進行設定,主要的幾個設定為:

    ignoreip = 127.0.0.1 ( 忽略的 ip )
    bantime = 86400 ( 封鎖 ip 的時間, 以秒為單位, 這裡是 1 天 )
    findtime = 600 ( 錯誤登入的時間 )
    maxretry = 3 ( 在 findtime 時間內發生的錯誤發入次數 )

    設定 SSHD
    在 /etc/fail2ban/jail.conf 內找到 [ssh-iptables] 段落,將 enabled 設定成 true,例如:

    [ssh-iptables]
    enabled = true
    filter = sshd
    action = iptables[name=SSH, port=SSH, protocol=tcp]
    logpath = /var/log/secure
    maxretry = 3

    修改檔案後,要重新啟動 Fail2Ban:
    # /etc/rc.d/init.d/fail2ban restart

    要觀察 Fail2Ban 的狀態,可以查看紀錄檔 /var/log/fail2ban.log,或者用 iptables 查看:
    # iptables -nvL