Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6893088
  • 博文数量: 1956
  • 博客积分: 10648
  • 博客等级: 上将
  • 技术积分: 23794
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-22 09:38
个人简介

HI,movno1

文章分类

全部博文(1956)

文章存档

2022年(1)

2021年(8)

2020年(2)

2019年(12)

2018年(2)

2016年(2)

2015年(1)

2014年(2)

2013年(19)

2012年(8)

2011年(41)

2010年(388)

2009年(122)

2008年(385)

2007年(259)

2006年(704)

我的朋友

分类: LINUX

2006-05-29 15:37:44

全功能配置笔记

作者:作者
说是笔记,其实更多的是靠回忆来写的,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:
从 下载最新版本的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

下载内核源代码
建议从 下载你所需要的内核源代码,比如xxbin现在选择的是2.4.20
wget 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

    在这篇文章写的时候,最新版本的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内核出来的时候再用]

    下载、解压、配置、编译、安装
    从下载最新版本的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/gd-2.0.11.tar.gz
    (JPEG库,如果GD库要支持JPEG格式则必须要先安装此库)
    (PNG库,如果GD库要支持PNG格式则必须要先安装此库)
    (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的代码不被恶意偷取——编译后的东东都是乱七八糟的东西,而且现在还没有看到成功逆向工程的报告。

    从 下载最新版本的 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等认证都统一起来——统一用户认证,再发展下去可以做个统一用户登陆和管理,这不仅仅是现在的一个流行趋势,也将会大大的减轻系统管理员的负担,同时用户也无须记忆多套用户名和密码了。

    从 找到一个支持Apache 2.x/DSO的mod_auth_mysql的模块,但是它的groups的库结构无法满足我们的需求(要时刻注意我们需要和ProFTPD/Postfix集成),无奈只有自己改代码了,改好的代码放在 里面。

    下载、配置、编译、安装
    wget
    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 xxbin@netbuddy.org /bin/bash 1 1 1 1

    groups:
    admin 1000 xxbin

    然后在浏览器中访问一下你要保护的那个目录,输入你的用户名和密码,看看效果如何!

    PS: 偶们站点的Apache的认证就是用的这个方法。

  • 阅读(1940) | 评论(3) | 转发(0) |
    给主人留下些什么吧!~~