歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 全功能配置筆記

全功能配置筆記

日期:2017/2/27 14:20:35   编辑:更多Linux
  說是筆記,其實更多的是靠回憶來寫的,xxbin可不是一個喜歡做筆記的家伙(上學的時候因為這個沒有少被老師K過),寫這個筆記,更確切的來說是寫這一系列文章的最初目的是為了自己在以後的Linux安裝調試的過程中少花一些精力,既然要寫,就干脆貼出來讓大家分享一下,也希望大家能夠發現並指出xxbin的調試過程中的一些問題。   在繼續真正的安裝筆記之前,首先xxbin要說明這個Linux的安裝調試並不包括桌面應用的安裝,因為xxbin除了在2年前曾經用Linux做桌面長達半年之外,其他的時間都是用Linux來架設各種服務器,因此這個筆記將關注與Linux的安全、穩定、可靠以及如何搭建HTTP、FTP、 Mail、DNS、Proxy、LDAP、DB等等各種服務(所涉及到的Linux以RedHat 7.3為基礎)。   在xxbin眼中,Linux = Kernel + Script (+ Package)     Kernel——就是Linux的內核,最初的Linux發布的時候就是僅僅發布了一個內核;     Script——各種啟動腳本和配置文件,其實不同的發行版的主要區別就是啟動腳本和配置文件不同,啟動腳本和啟動過程也是BSD系列和SYSV流派的主要區別;     Package——各種軟件包,其實xxbin很少用到發行版自帶的軟件包,因為xxbin喜歡自己定制一些東西,甚至是修改代碼 ,這也是上面為什麼把Package用括號括起來的原因。   如果從上面的角度來看Linux的話,只要我們熟悉了不同發行版本的啟動腳本和配置文件,那麼不同的發行版在我們眼裡也就沒有什麼區別了。   最後還是要說一句,正如同xxbin在那篇至今還在寫的 "Fall in Love with Google" 說的一樣——希望大家多多捧場,支持的回個貼,也讓xxbin有熱情繼續寫下去。 第一篇: OpenSSH 為什麼要用OpenSSH? 麥子在他寫的那篇名為SSH的文章提到——使用telnet進行遠程設備維護的時候,由於密碼和通訊都是明文的,易受sniffer偵聽,所以應采用SSH替代telnet。 為什麼首先提安裝OpenSSH而不是其他的是因為xxbin實在不願意用機器的物理終端或者是telnet來操作機器。 OpenSSH 是Linux/UNIX上用的最多的SSH Server,xxbin無論是在Linux/FreeBSD還是AIX上都用它,不過請大家注意,OpenSSH的低版本是有漏洞的,另外還有一點特別要小心——OpenSSH以及Apache(SSL Support)等所依靠的軟件OpenSSL的低版本也存在一些漏洞的,因此,在安裝OpenSSH以及Apache之前,需要安裝最新版本的OpenSSL,切記切記,否則即使你安裝了最新版本的Apache和OpenSSH,系統還是存在致命的漏洞! 首先安裝OpenSSL: 從 http://www.openssl.org/source/ 下載最新版本的OpenSSL,在寫這篇文章的時候,最新版本的OpenSSL為OpenSSL 0.9.7a (在安裝前請把系統中原來安裝的舊的版本的openssl卸載掉) tar -xvzf openssl-0.9.7a.tar.gz cd openssl-0.9.7 ./config shared make make test make install 如果沒有問題,那麼OpenSSL就被安裝在/usr/local/裡面了,注意上面的配置命令裡面有個shared,意思是創建Shared Libraries,這個選項一定要加上,否則某某程序報錯說找不到某某so你就不要來找我。 另外,為了兼容某些程序比如OpenSSH,需要手動創建一些符號連接: cd /usr/local/ssl/lib ln -s libcrypto.so.0.9.7 libcrypto.so.2 ln -s libssl.so.0.9.7 libssl.so.2 最後要刷新系統的動態連接庫配置 echo /usr/local/ssl/lib >> /etc/ld.so.conf ldconfig -v 看看/usr/local/ssl/lib下是否存在下面兩行: libcrypto.so.0.9.7 -> libcrypto.so.0.9.7 libssl.so.0.9.7 -> libssl.so.0.9.7 接著安裝OpenSSH: 從 ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/ 下載最新版本的OpenSSH,在寫這篇文章的時候,最新版本的OpenSSH為OpenSSH 3.5 P1。


tar -xvzf openssh-3.5p1.tar.gz cd openssh-3.5p1 ./configure --with-ssl-dir=/usr/local/ssl make make install 注意查看configure的輸出,找到有關OpenSSL的部分 類似: checking OpenSSL header version... 90702f (OpenSSL 0.9.7b 10 Apr 2003) checking OpenSSL library version... 90702f (OpenSSL 0.9.7b 10 Apr 2003) 看看是否應用了最新版本OpenSSL 如果沒有問題,那麼OpenSSH就被安裝在/etc/local裡面了,所有有關OpenSSH的配置文件都放在/usr/local/etc目錄下,修改配置文件/usr/local/etc/sshd_config vi /usr/local/etc/sshd_config CODE # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. Port 22 Protocol 2,1 ListenAddress 0.0.0.0 HostKey /usr/local/etc/ssh_host_key HostKey /usr/local/etc/ssh_host_rsa_key HostKey /usr/local/etc/ssh_host_dsa_key SyslogFacility AUTH LogLevel INFO PermitRootLogin yes RhostsAuthentication no IgnoreRhosts yes UsePrivilegeSeparation yes Subsystem sftp /usr/local/libexec/sftp-server 這裡面主要要改動的就是PermitRootLogin yes。 配置OpenSSH自啟動: cp contrib/redhat/sshd.init /etc/init.d/sshd ln -s /etc/init.d/sshd /etc/rc.d/rc3.d/S55sshd 啟動OpenSSH: /etc/init.d/sshd start 若系統沒有提示錯誤那就說明sshd已經起來了,可以ps -ef grep sshd來確認一下,同時也可以用ssh客戶端來測試一番。 若系統提示錯誤,就應該根據錯誤來進行排錯,因為可能的錯誤實在太多,在這裡就不做討論了。 推薦采用的SSH客戶端: 如果在Linux/UNIX下,那麼用OpenSSH帶的ssh客戶端就OK了,如果在Windows下,強烈建議采用SecureCRT。 第二篇:Linux Kernel 提起Linux內核(Linux Kernel),網絡上有大量的文章討論如何編譯內核,在此,xxbin並不會詳細說明整個編譯的細節,細節問題請查閱Linux Kernel HOW-TO。 為什麼要自己編譯內核? 1> 發行版自帶的內核版本不夠高,或者有漏洞和bug; 2> 發行版自帶的內核不是為你的CPU優化的,比如redhat通常的內核都是for i386的,如果你用高檔的芯片,芯片的性能就沒有完全發揮出來; 3> 發行版自帶的內核太過大眾化,不是為你的機器優化的,如果你還用著發行版自帶的內核,你可以試著運行一下lsmod,肯定會列出一堆模塊,比如網卡的驅動、甚至是文件系統模塊等等。 4> 發行版自帶的內核提供的功能不能滿足你的要求,比如你要用Linux做一個文件服務器,想用IBM的EVMS來做卷管理,想用IBM JFS for Linux來做文件系統,那麼你肯定得自己重新編譯內核了。 5> more and more 上面提到過Linux內核的版本,在這裡有必要解釋一下,Linux的內核分兩種,一種是stable版本的,就是穩定版,穩定版從1.0.x開始而且目前是以偶數編號發表的; 象1.0.x/1.2.x/2.0.x /2.2.x/2.4.x等都是穩定版,另外一種版本是測試版,即發展中的內核 (1.1.x/1.3.x/2.1.x/2.3.x/2.5.x等等),專門作為測試用的,如果你是想玩玩測試版內核的新功能倒是沒有問題,但是如果用Linux來跑一些比較重要的應用,xxbin強烈建議你用穩定版的內核,在這篇文章寫的時候,The latest stable version of the Linux kernel is: 2.4.20 。 針對我們上面提出的問題,我們需要對我們的內核做一些優化工作: 1> 發行版自帶的內核版本不夠高,或者有漏洞和bug; 在通常情況,應該選擇最後的穩定版本內核,比如現在我們應該選擇2.4.20 2> 發行版自帶的內核不是為你的CPU優化的 在編譯內核的時候,注意選擇最符合你的CPU型號的選項。(新版本的內核在config的時候會自己選擇) 3> 發行版自帶的內核太過大眾化,不是為你的機器優化的 首先,運行lsmod,看看你的發行版的內核用了哪些模塊,哪些模塊是你必須要用的?編譯內核在選擇某個功能是編譯成模塊還是編譯進內核的一個原則就是看你是否頻繁的需要這個功能,比如網卡驅動,SCSI驅動,文件系統等,就不應該編譯成模塊。

OK, step by step 下載內核源代碼 建議從 http://www.kernel.org/ 下載你所需要的內核源代碼,比如xxbin現在選擇的是2.4.20 wget http://www.kernel.org/pub/linux/kernel/v2....-2.4.20.tar.bz2 tar -xvjf linux-2.4.20.tar.bz2 確定我們需要的功能和模塊 運行 dmesg 來查看你的機器的硬件配置,這裡我們關注的是CPU內型,網卡具體型號,SCSI/RAID卡型號(如果有的話 ),並把它們紀錄下來。 比如我們論壇的機器: CPU: Intel Pentium III (Katmai) stepping 03 agpgart: Detected Intel 440BX chipset agpgart: AGP aperture is 64M @ 0xe0000000 ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx PIIX4: IDE controller on PCI bus 00 dev 39 hda: QUANTUM FIREBALL CR4.3A, ATA DISK drive hdc: IBM-DPTA-372050, ATA DISK drive hdd: ATAPI CD-ROM DRIVE 32X MAXIMUM, ATAPI CD/DVD-ROM drive eth0: VIA VT6102 Rhine-II at 0xe400, 00:05:5d:a5:06:6f, IRQ 10. 很簡單,我們用PIII的CPU,440BX的主板,顯卡是AGP的,用的是普通的IDE硬盤和光驅,IDE控制芯片是PIIX4的,網卡型號是VIA VT6102 Rhine-II。 或許有人會問——聲卡呢?顯卡的具體型號呢? 注意一點,我們是在配置服務器,對於服務器來說,內核越精簡越好,服務器有個普通的顯卡驅動能看到字符界面就可以了,聲音嘛,有個PC喇叭也就OK了。 運行mount來看看我們用了什麼文件系統: 結果是我們的機器都是用ext3文件系統的,不過需要注意的是,現在的內核啟動的時候都需要Initial RAM disk(initrd)的支持,就是說內核在最初啟動的時候會建立一個RAMDISK,然後把一個小的initrd image解壓到RAMDISK中,先用這個RAMDISK做一些初始化的工作,最後才會chroot到硬盤上的系統。 因此我們需要 ext3 ext2(initrd所需) initrd 配置Linux Kernel選項 在Linux Kernel src目錄下運行: make menUConfig 啟動字符菜單方式的Kernel配置(這一步看個人喜好,有的人喜歡make config) 在Processor type and features選項裡面選擇你機器的CPU型號,這裡就是(Pentium-III/Celeron(Coppermine)) Processor family # 在General setup選項裡面去掉 ISA bus support,因為我們沒有用到ISA的卡 在Plug and Play configuration選項裡面去掉<*> ISA Plug and Play support 進入Block devices選項,按照下面進行選擇: CODE <*> Normal floppy disk support < > XT hard disk support < > Compaq SMART2 support < > Compaq Smart Array 5xxx support < > Mylex DAC960/DAC1100 PCI RAID Controller support <M> Loopback device support <M> Network block device support <*> RAM disk support (4096) Default RAM disk size (NEW) [*] Initial RAM disk (initrd) support 在這裡解釋一下,如果你需要一些磁盤陣列或者RAID的支持,那些有關陣列的選項需要關注一下,Loopback device的支持是為了能夠直接mount ISO/FS的映像文件,Network block device的支持是為了網絡文件系統,因為這兩個東西都不是必需的,因此選擇成為模塊,而RAM disk是必需的(RAM Disk size一般不會超過4096KB,取決於你的initrd映像文件大小),並且需要initrd,因此這兩個我們直接編譯進入內核。 在ATA/IDE/MFM/RLL support -> IDE, ATA and ATAPI Block devices中,選擇你的IDE芯片,在這裡是Intel PIIXn chipsets support。 如果你有SCSI卡,可以在SCSI support -> SCSI low-level drivers選擇你的型號的SCSI支持。 內核中Multi-device support (RAID and LVM)的配置都是有關LVM和軟件RAID的選項,xxbin將在下一篇有關FS/LVM的文章中詳細描述。 在Network device support->Ethernet (10 or 100Mbit)中選擇我們的網卡驅動(在這裡是VIA Rhine support),並且去掉PCMCIA network device support。

在 Character devices選項中,選擇/dev/agpgart (AGP Support),並且選擇Intel 440LX/BX/GX and I815/I820/I830M/I830MP/I840/I845/I850/I860 support,去掉Intel I810/I815/I830M (on-board) support、VIA chipset support、AMD Irongate, 761, and 762 support、Generic SiS support和ALI chipset support等芯片的支持;並且去掉Direct Rendering Manager (XFree86 DRI support)選項。 在File systems選項中,選擇ext3和ext2,並且編譯進入內核,把ISO9660選擇成為模塊方式。 最後去掉所有有關Sound、USB support和Bluetooth support的支持。 一切配置好之後保存配置。 編譯Linux Kernel 運行: make dep (確保所有的依賴關系沒有問題,比如include文件) make mrproper (做最干淨的清除動作,可以刪除原有的.o文件) make bzImage (建立壓縮的內核映像,編譯完成之後你可以從arch/i386/boot(x86 PC 內核)目錄下找到 bzImage 文件) make modules (編譯模塊) make modules_install (安裝模塊,模塊被安裝到 /usr/lib/<內核版本號>目錄下) 制作新的initrd cp /boot/initrd-2.4.18.img /tmp/initrd.gz 這裡的initrd-2.4.18.img是發行版自帶的initrd(也可以利用/sbin/mkinitrd命令自己來做一個),因為發行版把ext3 的支持編譯成為模塊的,並在自帶的initrd裡面load了這些模塊,我們修改了內核的配置,因此也要改改initrd。 cd /tmp gzip -d initrd.gz (接壓initrd映像文件) mount -o loop -t ext2 initrd /mnt/ (使用loopback方式mount解壓後的initrd映像) cd mnt (進入mount起來的initrd文件系統) vi linuxrc 編譯initrd的啟動文件linuxrc,去掉一些insmod和modprobe的語句(因為很多東西我們都直接編譯進入內核了),xxbin的linuxrc文件如何,僅供參考: CODE #!/bin/nash echo Mounting /proc filesystem mount -t proc /proc /proc echo Creating root device mkrootdev /dev/root echo 0x0100 > /proc/sys/kernel/real-root-dev echo Mounting root filesystem mount --ro -t ext3 /dev/root /sysroot umount /proc pivot_root /sysroot /sysroot/initrd cd /tmp (退出/mnt目錄,以便umount) umount /mnt gzip -9 /tmp/initrd cp /tmp/initrd.gz /boot/initrd-2.4.20.img 配置使用新內核並重新啟動 cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.20 vi /etc/lilo.conf 編輯/etc/lilo.conf文件,加入一節 CODE image=/boot/vmlinuz-2.4.20 label=linux-2.4.20 initrd=/boot/initrd-2.4.20.img read-only root=/dev/hda5 注意上面的root=選項,請填寫你自己的root分區。 lilo -v (刷新lilo配置) (因為xxbin喜歡用lilo,因此這裡用lilo來做范例,如果你是用其它的BOOT Loader,請自己查資料) 到現在為止,內核的編譯和配置基本上完成了,我們所要做的就是reboot機器選擇使用新的內核。 reboot 重起之後在LILO上選擇使用新的內核,如果順利的話,屏幕在顯示一堆信息之後會顯示Login:提示符讓你登陸。 登陸進去之後用dmesg看看啟動信息是否有問題,如果一切OK的話就大功告成了。 這樣我們就有了一個純銀打造的內核了! (什麼才算白金內核?請聽下回分解。 coming soon...) 第四篇:mysql MySQL是Linux上使用得最多的數據庫了,也有很多文章寫如何安裝MySQL,其實MySQL的安裝也是十分簡單,但是為了這個筆記的完整性,在這裡還是不得不羅嗦一下如何安裝和配置MySQL。 下載最新的MySQL http://www.mysql.com/downloads/mysql-4.0.Html

在這篇文章寫的時候,最新版本的MySQL為mysql 4.0.12 解壓、配置、編譯、安裝 tar -xvzf mysql-4.0.12.tar.gz cd mysql-4.0.12 ./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=gb2312 make make install 安裝默認的庫 ./scripts/mysql_install_db 頭文件和庫文件 ln -s /usr/local/mysql/include/mysql /usr/include/mysql ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql echo /usr/lib/mysql >> /etc/ld.so.conf ldconfig 建立mysql用戶和組 groupadd -g 20000 mysql useradd -u 20000 -g mysql mysql chown -R mysql /usr/local/mysql/var 最後一步必須要做! 配置自啟動 cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysql chmod +x /etc/init.d/mysql chkconfig --level 345 mysql on /etc/init.d/mysql start 修改密碼 /usr/local/mysql/bin/mysqladmin -u root passWord 'newpassword' /usr/local/mysql/bin/mysqladmin -u root -p -h `hostname` password 'newpassword' *安全配置* 為了數據的安全,可以考慮讓MySQL只守候在127.0.0.1上,這樣從Internet上就無法直接訪問數據庫了。 修改/etc/init.d/mysql文件 在start部分找到類似下面這行 $bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file & 修改成 $bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file --bind-address=127.0.0.1 & 重起MySQL /etc/init.d/mysql restart 最後netstat -l確認一下: tcp 0 0 localhost:mysql *:* LISTEN OK,到這裡MySQL就安裝完成了。 因為最後我們讓MySQL守候在127.0.0.1,為了方便管理MySQL,推薦安裝PHPmyAdmin. 第五篇:Apache 2.x Apache的2.x版本已經出來很久了,寫這篇文章的時候,Apache 2.0.44已經出來了。相對Apache 1.3.x來說,2.x有幾個新的功能,而且Apache 2.x是將來的趨勢,因此現在我們應該選擇Apache 2.x。 這篇文章,與網絡上其他的文章相比有一些特點,比如DSO、MPM以及使用MySQL數據庫作為認證(同時可以與proftpd/postfix使用相同的用戶庫 ) 1. Apache的基本安裝(include DSO/MPM) 2. GD + PHP的安裝配置 3. MySQL Auth (DSO Mod) 4. ... Apache的基本安裝(include DSO/MPM) 什麼是DSO? 其實從Apache 1.3版本開始,Apache就提供了模塊化的機制以便管理員選擇HTTP服務器使用什麼模塊,模塊可以被靜態的編譯進入httpd二進制代碼中,也可以編譯成為Dynamic Shared Objects (DSO),DSO與HTTP的二進制代碼httpd是完全獨立的。有關DSO的詳細信息請參考 Dynamic Shared Object (DSO) Support 為什麼使用DSO? 如果不采用DSO,采用普通的靜態模塊的方式,那麼一旦要增加一個功能(比如要搞個IP連接限制模塊),那麼可能要全部從新編譯整個Apache以及原來的一些模塊,另外,如果發現某個模塊或者Apache有升級版本,也要全部重新編譯。Apache的開發者也就是考慮到這些原因才推出了DSO這麼個東東, DSO非常方便,如果要增加一個模塊只需要使用DSO模式來編譯這個新模塊就可以了,無需從新編譯其他的東西,即使Aapche在同一個系列升級,也只需要編譯一個支持DSO的新的Apache,原來編譯好的DSO模塊還是可以用的。(一個系列是指從Apache 2.0.43升級到Apache 2.0.44這樣的情況,如果升級到下一個系列(比如 2.1.x),需要從新編譯所有的代碼,包括Apache和各個模塊) (另:使用DSO之後,因為要做一些前置工作,Apache在啟動時慢大概20%,在運行時因為有時候需要相對尋址,因為在運行時大概會慢5%) 什麼是MPM? MPM是Apache 2.0提供的新功能,可以專門寫一篇文章的了,在這裡簡單介紹一下:

MPM的全稱叫做Multi-Processing Modules,是Apache 2.x才支持的一個可插入的並發模型,在編譯的時候,我們就可以選擇一個並發模型,在Linux下,主要有下列模型可供選擇: Worker MPM——使用多個子進程,每個子進程有多個線程。每個線程在某個確定的時間只能維持一個連接。通常來說,在一個高流量的HTTP服務器上,Worker MPM是個比較好的選擇,因為Worker MPM的內存使用比Prefork MPM要低得多。 Prefork MPM——使用多個子進程,每個子進程只有一個線程。每個進程在某個確定的時間只能維持一個連接。在大多數平台上,Prefork MPM在效率上要比Worker MPM要高,但是內存使用大得多。 在Linux/UNIX下,MPM的默認值為prefork,至於選擇哪個MPM,請考慮你的實際情況。 (有關MPM的詳細信息請參考 Multi-Processing Modules (MPMs) ) [注: Linux現在版本的內核(2.4.20 or 2.5.x)對線程支持不好,想用worker最好等到2.6.x內核出來的時候再用] 下載、解壓、配置、編譯、安裝 從http://httpd.apache.org/下載最新版本的apache 2.x,當前的最新版本為apache 2.0.44 tar -xvzf httpd-2.0.44.tar.gz cd httpd-2.0.44 ./configure --prefix=/usr/local/httpd --enable-so --enable-cgi --enable-deflate --enable-rewrite --enable-eXPires --enable-headers --with-mpm=prefork make make install 上面./configure中的參數需要解釋一下: --enable-so 支持DSO (這個可不要忘記了) --enable-rewrite 一個從定向URL的模塊,非常好用 --with-mpm=prefork 選擇MPM,可憐的Linux 編輯httpd.conf配置文件 vi /usr/local/httpd/conf/httpd.conf 請參考下面的一些配置: QUOTE LimitRequestBody 20971520 CustomLog logs/Access_log combined ServerTokens Minimal #Alias /manual "/usr/local/httpd/manual" #<Directory "/usr/local/httpd/manual"> # Options Indexes FollowSymLinks MultiViews IncludesNoExec # AddOutputFilter Includes html # AllowOverride None # Order allow,deny # Allow from all #</Directory> <IfModule prefork.c> StartServers 10 MinSpareServers 10 MaxSpareServers 50 MaxClients 256 MaxMemFree 2048 MaxRequestsPerChild 0 </IfModule> User nobody Group nobody AcceptPathInfo On AddDefaultCharset GB2312 配置自啟動 cp /usr/local/httpd/bin/apachectl /etc/init.d/httpd 編輯/etc/init.d/httpd 在#!/bin/sh後面加入下面幾行(提供chkconfig的支持): QUOTE # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve # HTML files and CGI. chkconfig --add httpd /etc/init.d/httpd start OK,打開你的浏覽器,在地址欄輸入你的新HTTP服務器的URL,看看你的成果吧。 GD + IMAP + PHP的安裝配置 GD庫是什麼? GD庫是做什麼用的?用作者的話來說是——An ANSI C library for the dynamic creation of images。

GD可以動態的建立、修改PNG和JPEG以及其他的格式的圖形文件,因為很多軟件需要GD的支持(比如mrtg),因此在安裝PHP之前我們先安裝GD庫。 其實PHP 4.3.0開始,PHP已經內置了GD庫,只是好象不太全(xxbin在使用DSO編譯的PHP 4.3.1好象不支持那個PHP寫的、非常有名的電子相薄——Gallery),所以在這裡我們還是用外置的GD庫。 有關GD庫的詳細信息請參考它的主頁—— http://www.boutell.com/gd/ 下載文件 http://www.boutell.com/gd/http/gd-2.0.11.tar.gz http://www.ijg.org/files/jpegsrc.v6b.tar.gz (JPEG庫,如果GD庫要支持JPEG格式則必須要先安裝此庫) http://download.sourceforge.net/libpng/lib...g-1.2.5.tar.bz2 (PNG庫,如果GD庫要支持PNG格式則必須要先安裝此庫) http://easynews.dl.sourceforge.net/sourcef...e-2.1.3.tar.bz2 (FreeType庫,如果GD庫要支持FreeType格式則必須要先安裝此庫) 配置、編譯、安裝 freetype tar -xvjf freetype-2.1.3.tar.bz2 cd freetype-2.1.3 ./configure make make install jpeg tar -xvzf jpegsrc.v6b.tar.gz cd jpeg-6b/ ./configure --enable-shared --enable-static make make install png tar -xvjf libpng-1.2.5.tar.bz2 cd libpng-1.2.5 cp scripts/makefile.linux makefile make make install 最後ldconfig刷新一下 ldconfig -v 確認有 libjpeg.so.62 => libjpeg.so.62.0.0 libpng.so.3 => libpng.so.3.1.2.5 libpng12.so.0 => libpng12.so.0.1.2.5 libfreetype.so.6 => libfreetype.so.6.3.2 正式安裝gd庫 tar -xvzf gd-2.0.11.tar.gz cd gd-2.0.11 ./configure (注意configure的信息,在快結束的時候應該有: Support for PNG library: yes Support for JPEG library: yes Support for Freetype 2.x library: yes) make make install IMAP支持——c-client 有些WEBMAIL需要PHP提供IMAP支持,這時候就需要安裝c-client ftp://ftp.cac.washington.edu/imap/c-client.tar.Z mkdir /usr/local/imap mkdir /usr/local/imap/include mkdir /usr/local/imap/lib ln -s /usr/local/include/openssl /usr/include/openssl tar -xvzf imap-2002c1.tar.Z make lrh cd c-client/ cp *.h /usr/local/imap/include/ cp *.c /usr/local/imap/lib/ cp c-client.a /usr/local/imap/lib/libc-client.a 安裝PHP ./configure --with-gettext --with-gd=/usr/local --with-zlib --with-apxs2=/usr/local/httpd/bin/apxs --with-mysql=/usr/local/mysql --prefix=/usr/local/httpd/php --with-config-file-path=/usr/local/httpd/conf --enable-track-vars --enable-force-cgi-redirect --disable-cgi --with-imap=/usr/local/imap --with-imap-ssl=/usr/local/imap make make install cp -p .libs/libphp4.so /usr/local/httpd/modules cp -p php.ini-recommended /usr/local/httpd/conf/php.ini 編輯php.ini 參考以下配置: QUOTE memory_limit = 20M; file_uploads = On; upload_max_filesize = 20M; post_max_size = 20M; 編輯httpd.conf QUOTE # Make sure there's only **1** line with this directive: LoadModule php4_module modules/libphp4.so

# Add index.php to your DirectoryIndex line: DirectoryIndex index.html index.php AddType application/x-httpd-php php # PHP Syntax Coloring (recommended): AddType application/x-httpd-php-source phps 然後重起apache /etc/init.d/httpd restart 測試PHP 在/usr/local/httpd/htdocs/目錄下建立一個phpinfo.php文件 phpinfo.php <?php phpinfo(); ?> 在浏覽器輸入來查看這個/phpinfo.php,會顯示一些PHP的信息。 優化PHP PHP只是一個腳本解釋引擎,由Zend公司出品,是個免費的東東,Zend同時出了一個免費的Zend Optimizer來優化PHP的解釋,根據來自Zend的資料,使用Zend Optimizer之後: Enhanced server performance – up to 25X increase in server throughput HOHO,這麼好的東東為什麼不用,而且用了Zend Optimizer之後,如果把PHP編譯(要用到一個收費的東西——Zend Encoder來編譯),更加能夠提高性能,並且能夠保護PHP的代碼不被惡意偷取——編譯後的東東都是亂七八糟的東西,而且現在還沒有看到成功逆向工程的報告。 從 http://www.zend.com/ 下載最新版本的 Zend Optimizer,Zend Optimizer只提供二進制代碼,因此需要注意你的平台。 tar -xvzf ZendOptimizer-2.1.0a-Linux_glibc21-i386.tar.gz cd ZendOptimizer-2.1.0a-Linux_glibc21-i386 ./install 回答幾個簡單問題之後,很容易就裝好了。 在安裝了Zend Optimizer請確認重起你的Apache。 然後再通過浏覽器查看/phpinfo.php, 可以看到在 This program makes use of the Zend Scripting Language Engine: Zend Engine v1.3.0, Copyright © 1998-2002 Zend Technologies with Zend 下面多了一行 Optimizer v2.1.0, Copyright © 1998-2003, by Zend Technologies OK,到現在就可以開始架論壇和主頁了。 終於寫到認證部分了,真的是很辛苦。 Apache的認證,普通都使用passwd文件來進行認證,現在Linux上面Apache+PHP+MySQL用得多,因此xxbin想到要配置一個MySQL的認證。 (其實另外一種選擇是采用LDAP認證,國外LDAP應用的稍微多一點,但是也少,很多論壇啊,CMS等都沒有LDAP認證的接口,國內LDAP用的就更少了,考慮到這些因數,沒有采用LDAP認證) 采用MySQL作為認證的後台,最初的考慮是為了把Apache/ProFTPD/Postfix等認證都統一起來——統一用戶認證,再發展下去可以做個統一用戶登陸和管理,這不僅僅是現在的一個流行趨勢,也將會大大的減輕系統管理員的負擔,同時用戶也無須記憶多套用戶名和密碼了。 從 http://modules.apache.org/ 找到一個支持Apache 2.x/DSO的mod_auth_mysql的模塊,但是它的groups的庫結構無法滿足我們的需求(要時刻注意我們需要和ProFTPD/Postfix集成),無奈只有自己改代碼了,改好的代碼放在 http://ftp.netbuddy.org/linux/mod_auth_mysql.tar.gz 裡面。 下載、配置、編譯、安裝 wget http://ftp.netbuddy.org/linux/mod_auth_mysql.tar.gz tar -xvzf mod_auth_mysql.tar.gz cd mod_auth_mysql /usr/local/httpd/bin/apxs -c -D APACHE2 -I/usr/local/mysql/include -L/usr/local/mysql/lib/mysql -lmysqlclient -lm mod_auth_mysql.c /usr/local/httpd/bin/apxs -i mod_auth_mysql.la 編輯/usr/local/httpd/conf/httpd.conf文件,加入下面一行: LoadModule mysql_auth_module modules/mod_auth_mysql.so 不要忘記重起Apache 建立用戶數據庫 用你喜歡的方式聯上mysql,建立一個新的數據庫。 在這裡我們用uls來表示。 為了安全,還可以在MySQL中建立一個用戶來專門讀取這個uls數據庫,我們將在Apache的配置中使用到這個用戶的密碼(名文),在這裡我們建立了一個用戶名為uls_username的用戶,密碼為uls_password,它只對uls數據有 SELECT/INSERT/UPDATE/DELETE的權限。

然後在uls這個數據裡面建立users表和groups表: QUOTE CREATE TABLE users ( username varchar(255) binary NOT NULL default '', nickname varchar(255) NOT NULL default '', passwd varchar(255) binary NOT NULL default '', uid int(11) default NULL, gid int(11) default NULL, homedir varchar(255) default NULL, email varchar(255) default NULL, shell varchar(255) default NULL, http_enable tinyint(4) NOT NULL default '0', ftp_enable tinyint(4) NOT NULL default '0', mail_enable varchar(4) NOT NULL default '0', ftp_count int(11) default NULL, PRIMARY KEY (username) ) TYPE=MyISAM; CREATE TABLE groups ( groupname varchar(255) binary NOT NULL default '', gid int(11) NOT NULL default '0', members text NOT NULL, PRIMARY KEY (groupname) ) TYPE=MyISAM; 上面的兩個表的組成其實與/etc/passwd以及/etc/groups文件及其類似,熟悉Linux/UNIX的朋友一看就知道了。 注意上面users表裡面的passwd為真實的password的MD5摘要,另外groups表裡面的members可以由多個username組成,username之間用半角的逗號(,)隔開。 httpd.conf中的配置 為了保護某個目錄,我們需要在httpd.conf中的配置中加入mod_auth_mysql的配置選項: QUOTE <Directory "/usr/local/httpd/htdocs/admin"> AllowOverride AuthConfig Order allow,deny Allow from all AuthMySQLHost localhost AuthMySQLDB uls AuthMySQLUser uls_username AuthMySQLPassword uls_password AuthMySQLNameField username AuthMySQLPasswordField passwd AuthMySQLCryptedPasswords On AuthMySQLScrambledPasswords Off AuthMySQLKeepAlive Off AuthMySQLAuthoritative Off AuthMySQLNoPasswd Off AuthMySQLGroupField groupname AuthMySQLMembersField members AuthMySQLUserTable uls_users AuthMySQLGroupTable uls_groups AuthMySQLUserCondition http_enable=1 </Directory> 上面的選項非常容易懂,在這裡就不詳細描述了,值得注意的是 AuthMySQLUserCondition http_enable=1 這個選項告訴mod_auth_mysql只有那些http_enable為1的才是合法的用戶,這樣我們可以非常方便的在users表中控制某個用戶是否有http權限了。 .htaccess的配置 在要保護的/usr/local/httpd/htdocs/admin目錄下新建一個 .htaccess 文件(注意文件名前的點) .htaccess的配置非常簡單,可以使用用戶名來認證,比如 AuthName "Site Admin" AuthType Basic Require user xxbin 可以有多個用戶,用戶名之間用空格隔開 也可以用groups來進行認證,同時也可以有多個組名,也用空格隔開 AuthName "Site Admin" AuthType Basic Require group admin 測試認證 分別在users和groups表裡面插入一條紀錄: users: xxbin $1$Scdnf6uW$0aRetOUCCpAI8/Fd1Xa5b/ 1000 1000 /home/ftp [email protected] /bin/bash 1 1 1 1 groups: admin 1000 xxbin 然後在浏覽器中訪問一下你要保護的那個目錄,輸入你的用戶名和密碼,看看效果如何! PS: 偶們站點的Apache的認證就是用的這個方法。



Copyright © Linux教程網 All Rights Reserved