chroot (全寫為 change root) 是將整個 process 限制在指定目錄內的工具,這個限制的目錄一般稱之為 "監獄" (jail)。當使用了 chroot 後,當一個伺服器發生安全問題時,也不致於波及到整個系統。
在建立 chroot 環境的過程中,需要將一些伺服器程式要用到的 shared library 和各種系統工具複製,使它們以在 "監獄" 內工作。這些工作要完作一點也不容易,而 ModSecurity 就是使整個過程變得簡單。
關於 PHP, Linux, Open Source 及個人生活記載的網誌。
chroot (全寫為 change root) 是將整個 process 限制在指定目錄內的工具,這個限制的目錄一般稱之為 "監獄" (jail)。當使用了 chroot 後,當一個伺服器發生安全問題時,也不致於波及到整個系統。
在建立 chroot 環境的過程中,需要將一些伺服器程式要用到的 shared library 和各種系統工具複製,使它們以在 "監獄" 內工作。這些工作要完作一點也不容易,而 ModSecurity 就是使整個過程變得簡單。
現在虛擬化 (virtualization) 技術越來越流行,而且也會是未來一個吹勢,趁這幾天假期開始動手裝起來試試。簡單來說,User Mode Linux 就是在 Linux 裡面建構一個虛擬環境來執行另一個 Linux,將 Linux Kernel 當作當成普通的 Linux process 來報行。這對於要進行一些系統測試十分有用,因為可以避免現有系統造成破壞。
在虛擬 Linux 所使用的硬碟空間是實體機機器內的一個檔案,也可以自訂虛擬機器可以使用的硬件裝置,而在虛擬裡面是不可以存取或修改實體機器。
在看了 Samba Hong Kong 的教學影片 "User Mode Linux And Simple Linux (粵語) " 後,一步一步照著做起來一點也不難,可能是有人帶著做的關係。另外 User-mode Linux Kernel 站內也有很多有用的資訊,接下來的幾天要繼續學習一下。
在 Linux 裡面記憶體的多少對效能有很大的影響,以下這篇在 IBM developerWorks 的文章介紹了準確計算 Linux 系統所使用的記憶體,裡面還有一些在 Ubuntu 減少記憶體需求的實例。看完後可以更加了解 Linux 如何使用及分配實體及虛擬 (swap) 記憶體。
A much-touted benefit of Linux is that it is more efficient than Microsoft® Windows®, and will therefore perform better on less than cutting-edge hardware. This performance makes Linux a very attractive upgrade for the many people who have old Windows 98-era boxes still sitting around that are no longer being treated to the latest and greatest software (particularly security patches).
The truth of the matter, however, is that while the Linux kernel can still be configured to be reasonably small and efficient, as new computers have increased in power, many Linux desktop environments (such as KDE and GNOME) have added lots of features. Consequently, the default install of most distributions offer a less than stellar level of performance when installed on older hardware. The same is true of many modern applications also — Web browsers such as Firefox and office suites such as OpenOffice are fully featured, but trying to run them on a machine with 128MB of RAM can be a painful experience!
So what is the answer? Throw away all of your old hardware and upgrade? Install a Linux distribution from circa 1995? (If you decide to go that route, I recall having a good experience with Linux-FT.)
Never fear: as those in the Linux community have known for years, a great strength (some would say the great strength) of the Linux kernel and Linux distributions in general lies in their ability to be customized. This article delves into how you can tailor your Linux systems for better performance on modest hardware.
本站另一篇文章 Ubuntu 掛載 Windows 分割區,介紹了在 Ubuntu 讀寫 NTFS 分割區,以下是 Fedora 掛載 NTFS 分割區的方法:
1. 在 terminal 輸換成 root 身份,並輸入以下指令安裝 FUSE 及 NTFS-3G:
yum install fuse ntfs-3g
2. 安裝好 FUSE 及 NTFS-3G 後,便可以掛載 NTFS 分割區:
mkdir /media/windows
ntfsmount /dev/hda1 /media/windows
以上的 /dev/hda1 是分割區的位置,請根據實際情況進行修改。而卸載就不可以用 unmount,要用以下指令:
fusermount -u /media/windows
以下是一些常程式設計及 Unix/Linux 常用的 Cheat Sheet:
Command Line
Databases
Programming
Unix/Linux
Web Development
Miscellaneous Topics
Red Hat Enterprise Linux 5 經已釋出,新版本有多項新功能特性:
=> Virtualization support officially included
=> Based upon XEN
=> GUI tools for management
=> Para-virtualized RHEL 5 and RHEL 4 update 5
=> Full virtualized for 3rd party oses
=> Linux kernel v2.6.18
=> Includes support for Intel Network Accelerator Technology
=> SELinux with SEtroubleshooter GUI tool
=> Compare and see all kernel features here
=> IPSEC enhancements
=> ExecShield enhancements, such as a call frame Canary word, strengthen hacker defenses
=> New Audit features provide powerful new search/reporting and real-time monitoring
=> LAMP (Apache 2.x, PHP 5.x, MySQL 5.x etc)
近來很多 Spams 也用圖片的方法來發送,以避開 anti-spam 的檢查,以下這篇文章介紹使用 FuzzyOCR + SpamAssassin 掃瞄圖片垃圾電郵。
FuzzyOCR 是 SpamAssassin 的插件,專門掃瞄用圖片作為郵件內容的垃圾電郵。它會分析郵件內容及屬性,以決定郵件是否屬於垃圾電郵。為了減低系統負載,FuzzyOCR 只會掃瞄那裡未被 SpamAssassin 定義為垃圾郵件的電郵,以減少不必要的工作量。
Fight Image Spam With FuzzyOCR And SpamAssassin On Debian/Ubuntu
在前幾篇文章介紹過 PHP 透過 Sudo 執行 root 指令,對於單行的指令沒有問題,但如果要執行 passwd 修改系統密碼的話便不行了。
要解決可以安裝 super 或 expert,而另一個方法是用非互動的方法修改密碼,但如果主機上有其他用戶可以放置他們的網頁,則不建議使用。以下是具體步驟:
1. 用 root 執行 visudo,加入以下一行:
apache ALL=NOPASSWD:/usr/bin/passwd [A-z]*, !/usr/bin/passwd root
以上後面的部份是禁止透過 sudo 修改 root 的密碼,而基於安全理由,最好將其他較重要的用戶也禁止,例如 root 群組的用戶。
2. 以下是 PHP 的部份,會修改 user 的密碼,而密碼設成 pass:
Ubuntu 預設的情況下,每掛載檔案系統 30 便會執行 fsck 檢查檔案系統,簡單來說每開機 (包括 reboot) 便會檢查檔案系統。如果要改變檢查的時間,可以用 tune2fs 來實現,例如:
$sudo tune2fs -c 60
以上指令會設定每掛載檔案系統 60 次便執行 fsck。如果想系統下一次開機略過 fsck,可以建立 /fastboot 檔案:
$sudo touch /fastboot
但這個 /fastboot 檔案會在開機後自動刪除,所以只可以略過一次 fsch 檢查。
在本站另一篇文章介紹了用 Perl 來做 search and replace,而用 sed 也可以做到相同效果,語法為:
sed -i 's/src_str/new_str/g' filename
以上指令會將 filename 檔案內的 src_str 替換成 new_str。
一直以來要用 PHP 以 root 身份執行系統管理工作的問題,就是 PHP 會以 apache 的身份執行,解決方法有安裝 suPHP 或 super 這類工具,但個人認為還是 Sudo 較為安全。首先要安裝 Sudo,據我所知 RHEL, Ubuntu 已經內置,Debian 只要用 apt-get 安裝就可以,以下是 FreeBSD 的安裝方法:
FreeBSD 安裝 Sudo
# cd /usr/ports/security/sudo
# make && make install
當系統有 Sudo 後,基於安全理由,不要直接編輯組態檔 /etc/sudoers,改用 visudo 來做編輯。visudo 為防止多個使用者同時修改,它會先鎖住 /etc/sudoers,並且確保組態檔的文法正確,一旦發現錯誤會拒絕儲存動作。
假如你的 Apache 的執行身份為 apache,而想透過 PHP 重新啟動 DNS server,用 root 輸入指令 visudo,便會用 vi 開啟 /etc/sudoers,在檔案最底加上以下一行:
apache ALL=NOPASSWD:/etc/rc.d/init.d/named
儲存後可以在 PHP 以 root 身份執行 /etc/rc.d/init.d/named,包括開啟、停止及重新啟動:
上面的 /usr/bin/sudo 是 sudo 的可執行檔,需要根據自己的安裝目錄進行修改。以上只是個簡單的例子,你可以根據你的需要執行其他管理動作,但如果 web server 是多人共用,那麼在使用 Sudo 時要加倍小心。
在 sendmail 要刪除在 queue 內的郵件很簡單,只需直接在 /var/spool/mqueue 下面刪除就好,但在 Qmail 就較麻煩,執行以下指令會刪除 queue 內所有郵件:
qmailctl stop
find /var/qmail/queue/mess -type f -exec rm {} \;
find /var/qmail/queue/info -type f -exec rm {} \;
find /var/qmail/queue/local -type f -exec rm {} \;
find /var/qmail/queue/intd -type f -exec rm {} \;
find /var/qmail/queue/todo -type f -exec rm {} \;
find /var/qmail/queue/remote -type f -exec rm {} \;
qmailctl start
你可以將以上指令放到一個 shell script 內方便執行。如果想更改郵件留在 queue 內的時間,可以修改 /var/qmail/control/queuelifetime 檔案內的數值,裡面的數值是代表郵件留在 queue 內的秒數,預設值為 86400 秒,即一天。而如果想刪除乎合特定規則的隊列郵件,可以安裝一些現成的工具,以下是其中兩個不錯的選擇:
Qmail-Remove: 可以刪除有指定字串規則的郵件,在預設的情況下不會直接刪除,而將郵件移到 $qmail-queue/yanked/,可以檢視個別郵件及手動還原。
qmHandle: 可以實現 qmail-qread 及 qmail-qstat 的功能,能檢視 qmail queue 的內容,及輸出統計資料,輸出的格式更加容易觀看,而且可以刪除一個或多個郵件。
假設要將 A 主機的帳號及密碼複製到 B 主機,可以這樣做:
1. 先將 B 主機的 /etc/master.passwd 及 /etc/group 備份。
2. 將 A 主機的 /etc/master.passwd 及 /etc/group 複製到 B 主機。
3. 用 root 執行指令: pwd_mkdb -p -d /etc /etc/master.passwd
MySQL AB 不會再開放 MySQL 最新版本的 binary 檔,而 source code 會繼續開放開放,那就表示在安裝前需要編譯程式碼,在 MySQL Download 看到所有 binary 檔的版本為 5.0.27,而 source code 的版本則是 5.0.33。
我自己安裝 MySQL 一向都會重新編譯,而影響較大的是在 Windows 下安裝 MySQL 的用戶,以往只需按幾下 "Next" 便完便安裝,現在需要用 Visual Studio .Net 2003 這類 compiler 編譯。雖然 MySQL 官方有 Windows 安裝 MySQL 教學,但我想還會為很多用戶造成不便。
開源的 DBMS 除了 MySQL 外,還有 PostgreSQL,而 PostgreSQL 除了提供 source code 外,還有 Linux 及 Win32 版本的 binary 檔,對於在 Windows 下需要安裝 DBMS 又覺得編譯很麻煩的用戶,我想 PostgreSQL 是很好的代替品,而實際上即使在 Linux 下,PostgreSQL 也有其可取之處。
在高流量的 Linux server 下分析流量十分有用,以下是幾個有用的指令:
1. 列出每個連線 IP 的連線數量:
netstat -nta | fgrep "ESTABLISHED" | cut -b 49-75 | cut -d ':' -f1 | sort | uniq -c | sort -n -r --key=1,7 | head -25
2. 列出每個 IP 的 SYN_RECV 連線數量:
netstat -nta | fgrep "SYN_RECV" | cut -b 49-75 | cut -d ':' -f1 | sort | uniq -c | sort -n -r --key=1,7 | head -25
3. 列出 connection state 的連線數量:
netstat -nta | fgrep ":" | cut -b 77-90 | sort | uniq -c