2005年09月08日

一个测试计划样例


原创作者:Jerry
转载请注明:来自Sawin系统分析之窗
最后修改时间:2005-2-22

 

*************JAVA
测试总体计划书
历史纪录
日期
版本
描述
作者
2005-02-21
1.0
Created
**



1引言

1.1编写目的

本测试计划书的读者对象技术经理,软件测试工程师以及软件测试人员

1.2背景

说明:
软件系统的名称:*************JAVA
本项目在*************中位于**层上部分,应用层下部分,是应用程序与交互媒体平台的接口。接受端业务运行系统是******的一个部分。
   (图略)

1.3定义

****:************************ **********************
****:************************* **********************
1.4参考资料
Ø       ********平台系统规范-应用程序编程接口
Ø       各包软件说明书
2测试项目
本次测试主要针对JAVA类程序作底层测试,主要包括包功能测试,各函数完整性测试以及事件监听测试。测试之前需要根据测试用例书写测试代码,运行测试代码进行测试。

3 被测特性

Ø       包功能测试
主要测试包内各函数,各类之间的调用关系;
Ø       函数完整性测试
包括函数正确性测试和错误参数测试:
函数正确性:测试为在正确输入参数情况下测试函数的功能,如果函数输出为get*函数,并且可以打印出来,需要把获得的结果通过system.out.println()打印在屏幕上;
错误参数测试:主要测试输入参数在非法的条件下程序运行的情况(比如从存储器中读出数据的长度输入参数为int length,当length<0的时候);
Ø       监听测试
测试系统等待监听,直到所需要的事件出现,如果有需求把事件中的信息捕捉出来,显示在屏幕上。

4 不被测特性

Ø       构造函数
对类进行测试,通过构造函数创建这个类。所以不专门测试构造函数,对构造函数错误参数的测试也没有实际的意义;
Ø       异常类
由于产生异常的条件比较复杂,牵扯到硬件软件,数据库和存储设备等等,所以再次对于这些类不进行测试;
Ø       protect函数
由于protect函数是被继承类调用的,不是被应用程序调用的,通过测试继承类中的函数,间接的测试该类函数;
Ø       private函数:
由于private函数是被该类中其他函数调用的,也不是被应用程序调用的,通过测试调用函数,间接的测试该类函数。

5 测试方法

书写测试测试用例;
Ø       根据测试用例编写测试脚本;
Ø       运行测试脚本,进行测试。(测试结果填写测试结果报告单,缺陷填写在bugzilla软件中,以便于开发人员进行交流,进行回归测试)

6 测试通过标准

Ø       如果测试结果与预期结果一致测试通过,否则不通过。

6.1测试结果审批过程

测试工作执行完毕,质量经理书写测试总结报告,召开测试总结会议,讨论产品是否可以发布(评审标准:测试案例是否完全,测试程序是否正确,测试结果是否令人满意,…)。

7 测试挂起和恢复条件

Ø       测试挂起条件:
由于程序中存在重大问题或者问题过多,测试无法正常进行,测试人员申请测试挂起,经领导审批通过;
由于存在其他优先级更高的任务,通过批准,测试挂起。
Ø       测试恢复条件:
重大问题被解决或者程序通过重新修正;
优先级更高的任务被完成。

8应提供的测试文件

Ø       测试总体计划书
Ø       测试用例(计划)
Ø       测试手册
Ø       测试脚本代码
Ø       测试纪录(纪录测试通过或者不通过状态,如果未通过在bugzilla中书写错误情况,包括包名,函数名,输入参数,错误表现几个方面)
Ø       测试总结书

9测试任务

Ø       书写测试总体计划书
Ø       书写测试用例(计划)和测试手册
Ø       编写测试代码
Ø       测试测试代码
Ø       进行测试工作
Ø       进行测试总结

10测试环境需求

10.1硬件需求

Ø       测试代码运行机器
Ø       仿真器
Ø       数据广播系统
Ø       机顶盒
Ø       监视器
Ø       数据传输介质

10.2软件需求

Ø       ***软件
Ø       ***数据库
Ø       ***其他模块

10.3测试工具

10.4测试需要的条件

10.4.1 需要的文档

Ø       软件说明书

10.4.2需要完成的任务

Ø       被测试程序已经完成,并且通过代码审核和初步的程序员级测试;
Ø       测试脚本已经完成,并且通过测试。

11角色和职责

Ø       测试设计师:书写测试计划(用例)和手册
Ø       测试开发人员:编写测试代码(通常由测试脚本的编写为非开发该项目的开发人员编写)
Ø       测试人员:进行测试工作
Ø       测试管理人员:管理测试进度,进行测试评估

12 人员和培训

理解测试基本知识
Ø       掌握面向对象方法
Ø       熟悉产品基本功能特性
Ø       熟悉每个包和类的功能

13 测试进度

任务
时间
制定测试计划
2天/人
书写测试用例(计划)和测试手册
1.5月/人
编写测试代码
4月/人
执行测试任务
2月/人
测试总结
1周/人

14风险及应急计划

15审批

技术经理:
 
 
       

 

【作者介绍】 Jerry

97年毕业于北京某高校计算级专业,先后在软件公司和网络公司从事软件开发,系统分析和设计工作。2001年涉及软件质量保证,先后担任测试工程师,测试部经理,副经理。精通软件工程和测试流程,精通RUP, CMM, ISO, 6SIGMA软件质量保证工作。
作者Email地址:guxiang625@vip.sina.com.cn

2005年09月07日

邮件杀毒 AntiVir

Linux 上的邮件网关(杀病毒)AntiVir MailGate , 它有两种方法:

1. 直接作 mail 网关,然后利用“ 管道 ”调用 smtp 程序。支持标准的 smtp 程序: sendmail、postfix、qmail。

2. 也是作 mail 网关,在 /etc/sendmail.cf 里添加 avgatemail 选项 (这样 sendmail 在 825 端口监听),然后 再利用 825 端口转发邮件。意思是:25 即是 avmailgate 的 smtp 端口,然后它再利用 825(sendmail)端口转发邮件 !
请注意:但是人家还是可以利用你的 825 端口 (就是利用原来的 senmail 来给你发送病毒邮件!但是,这种情况很少的。)。这时你可以用防火墙来阻止来自外部的对本机的 825 端口的连接。


在 /etc/services 里面增加:
smtp-backdoor 825/tcp

修改 sendmail.cf 成:
# SMTP daemon options

#O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA
# 原来的。

# -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- gugong -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
#
# 红帽子 V7.x V8.0 所建立的本文件默认 “只” 对 localhost 即 127.0.0.1
# 提供服务,根据以往本文件的内容,修改为:
#
# SMTP daemon options
O DaemonPortOptions=Name=MTA, Port=smtp-backdoor

O DaemonPortOptions=Port=587, Name=MSA, M=E

# 若 不需要 avgatemail ,则应该是:
#O DaemonPortOptions=Name=MTA

#O DaemonPortOptions=Port=587, Name=MSA, M=E
# 在端口 587 提供 submission 服务(MSA)。
# -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- gugong -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-


请看:
邮件网关杀除病毒后返回的报告:

一、

*********************************************************************
AntiVir Virus Alert
*********************************************************************
This version of AntiVir MailGate is licensed for private and non-commercial use.
*********************************************************************

AntiVir found these viruses in the following mail:

Worm/Klez.E

The mail was not delivered.

You may force the delivery without further checking the mail using:

avq –deliver=04347-536A3823

but we would not advise to do so. You should delete it with:

avq –remove=04347-536A3823

For more information, please read the manual page avmailgate(8).


———-Mail-Info———-
From: winson246 <winson246@sohu.com>
To: webmaster@fruitron.com.cn
Subject: Marginheight
Mail-From: suscono@pub.dgnet.gd.cn
Rcpt: webmaster@fruitron.com.cn
Queue-Id: 04347-536A3823
Status: The mail was not delivered!
—————————–


———–Log-File———-
info: extracting attachment 1 to /var/tmp/av-06051-U43SFi/av-0
(encoding="quoted-printable", name="(no name)", filename="(no name)")
info: extracting attachment 2 to /var/tmp/av-06051-U43SFi/av-1
(encoding="base64", name="Vebnq.pif", filename="(no name)")
info: extracting attachment 3 to /var/tmp/av-06051-U43SFi/av-2
(encoding="base64", name="frame", filename="(no name)")
checking file "/var/tmp/av-06051-U43SFi/av-0"
checking file "/var/tmp/av-06051-U43SFi/av-1"
checking file "/var/tmp/av-06051-U43SFi/av-2"
—————————–
*********************************************************************
For more information on AntiVir please visit our web site
http://www.antivir.de or http://www.hbedv.com
mailto: info@antivir.de

AntiVir is a registered trademark of
H+BEDV Datentechnik GmbH
*********************************************************************


二、

*********************************************************************
AntiVir Virus Alert
*********************************************************************
This version of AntiVir MailGate is licensed for private and non-commercial use.
*********************************************************************

AntiVir found these viruses in a mail for you from winson246 <winson246@sohu.com>:

Worm/Klez.E

The mail was not delivered.

AntiVir MailGate prevented a virus delivery. But if you need to
receive further email from winson246 <winson246@sohu.com>,
you should ask him/her to buy a professional antivirus software such
as AntiVir from H+BEDV Datentechnik GmbH. He/She can contact
mailto:sales@hbedv.com for further information.

———-Mail-Info———-
From: winson246 <winson246@sohu.com>
To: webmaster@fruitron.com.cn
Subject: Marginheight
—————————–

*********************************************************************
For more information on AntiVir please visit our web site
http://www.antivir.de or http://www.hbedv.com
mailto: info@antivir.de

AntiVir is a registered trademark of
H+BEDV Datentechnik GmbH
*********************************************************************


自动升级病毒库后的报告:

AntiVir has successfully updated itself.

–> /usr/lib/AntiVir/antivir.vdf

Machine: gugonghcs.fruitron.com.cn
Date: 09 May 2002
Time: 10:39:18


—————————–
Copyright (C) 1994-2002 by H+BEDV Datentechnik GmbH.
All rights reserved.

For private (non-commercial) use only.


请到 :

http://www.hbedv.com

下载 Linux 版本,并注册,Linux 的 版本可是免费的哟。

由于附件的后缀名限制,附加的文档的 .txt 结尾是我增加附加档案时添加上去的。

horde imp Webmail的安装与设置(摘录)

日期:2003-07-03   作者: 张绍忠

 Email已经成为互联网上最重要的服务之一。无论菜鸟或大虾,他可能没用过ftp,没上过BBS,没有自己的主页,但他一定有一个自己的电子邮箱。随着互联网的发展,电子邮箱收费已是大势所趋。虽然还有免费的存在,但网站们为了突出收费邮箱的“优势”,有意无意的降低了免费邮箱的服务标准,导致经常丢失信件。收费信箱是好,可是得出钱,而且还有容量限制,速度也不见得快。
园区网建起来后,如果能建设一个自己的邮件系统,向广大员工提供免费的、无空间限制、快速的电子邮箱,一定会大受欢迎。只要你有一台普通的PC,你就不需要花一分钱!因为我们采用的软件全部是Open Source(开放源代码)的,可免费获得。
更重要的是,这套系统可称得上是全功能的:可以实现一个流行的邮件系统所支持的几乎所有功能,包括发送附件、POP3或IMAP收信方式、用户文件夹管理、通讯录、修改密码等。如果你愿意,还可实现日历、记事本等功能。而这一切功能都可以通过Web方式实现,即Web mail。
怎么样,心动啦?那就随我来!内容较多,先把目录列出来:
【目录】
一.邮件系统的基本原理
二.需要的网络环境
三.安装操作系统
四.安装Sendmail
五.安装IMAP
六.安装Web mail支持——Apache、Mysql和PHP
七.安装Web mail
八.安装通讯录模块
九.安装修改密码模块

一. 邮件系统的基本原理
首先让我们来了解一下电子邮件系统的基本原理。这里只做一个简单介绍,详细的可参考有关书籍。
一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理将用户的信件传送至传输代理(如Outlook Express、FoxMail等)。邮件传输代理负责将邮件送到目标主机(如sendmail)。而投递代理则从信件传输代理取得信件传送至最终用户的邮箱(如procmail)。
我们来模拟一封邮件从发出到收到的过程。用户使用Outlook Express(用户代理或叫做邮件客户端)向Sendmail(传输代理)请求发送电子邮件的服务,将邮件交给Sendmail。Sendmail根据邮件的目的地址,将邮件发送给邮件接收服务器,邮件接收服务器将邮件缓存(这也是Sendmail的工作)。接收邮件的用户用Outlook Express向邮件接收服务器发出取信的请求,邮件接收服务器将邮件发送给用户(这是IMAP或POP服务的工作)。至此,一封邮件从发送者的机器到达接收者的机器。
我们要建立的邮件服务器,以性能优越的RedHat Linux 7.3为操作系统。以Sendmail作邮件传输服务,IMAP作收信服务来构成邮件系统的基本框架。以Horde Imp作为邮件的Web客户端。剩下的就是Horde Imp的支持软件:以MySQL存储用户数据,以Apache+PHP作为Web服务器。我们还使用其它的模块来扩充本系统的功能:通讯录模块和修改密码模块。
我们将安装下列软件:
1. RedHat linux7.3
作用:操作系统
下载地址: http://freesoft.online.sh.cn:8888/mirrors/redhat/7.3/
2. Sendmail-8.11.6
作用:邮件传输和接收
下载地址:(RedHat linux7.3自带)
3. Imap
作用:IMAP和POP3服务器
下载地址:ftp://ftp.cac.washington.edu/imap/imap-2001a.tar.Z
4. Apache-1.3.24
作用:Web服务器
下载地址:http://freesoft.online.sh.cn:8888/mirrors/ftp.apache.org/httpd/apache_1.3.24.tar.gz
5. PHP-4.2.1
作用:CGI脚本语言
下载地址:http://www.php.net/do_download.php?download_file=php-4.2.1.tar.gz
6. PEAR-4.1.0
作用:PHP的功能扩展模块
下载地址:ftp://ftp.horde.org/pub/horde/tarballs/pear-4.1.0.tar.gz
7. MySql
作用:数据库,存储邮件用户数据和通讯录
下载地址:http://freesoft.online.sh.cn:8888/mirrors/Database/MySQL/mysql-3.23.49.tar.gz
8. Horde-2.1
作用:Imp的支持模块
下载地址:ftp://ftp.horde.org/pub/horde/tarballs/horde-2.1.tar.gz
补丁:ftp://ftp.horde.org/pub/horde/tarballs/patch-horde-2.0-2.1.gz
9. Imp-3.1
作用:Web mail的核心程序
下载地址:ftp://ftp.horde.org/pub/imp/tarballs/imp-3.1.tar.gz
补丁:ftp://ftp.horde.org/pub/imp/tarballs/patch-imp-3.0-3.1.gz
10.Turba-1.1
作用:提供通讯录功能的模块
下载地址:ftp://ftp.horde.org/pub/turba/tarballs/turba-1.1.tar.gz
补丁:ftp://ftp.horde.org/pub/turba/tarballs/patch-turba-1.0-1.1.gz
11.Poppassd-1.8.2
作用:修改密码的服务,与Passwd for imp结合提供Web方式修改用户密码的功能。
下载地址:http://echelon.pl/pubs/poppassd-1.8.2.tar.gz
12.Passwd for imp
作用:提供修改密码功能的模块
下载地址:https://mail.ph.utexas.edu/test2/patches/public/passwd/passwd.tgz
二. 需要的网络环境
本文假设用户希望在园区网中架设一个电子邮件服务器,为本单位用户提供邮件服务。该服务器拥有一个合法的IP地址202.99.11.200和一个合法的域名mail.example.com,并且example.com的DNS的MX记录指向mail.example.com。
注:为了满足域名需求,example.com的DNS的域数据文件应该包含以下内容:
IN MX 10 mail
mail IN A 202.99.11.200
三. 安装操作系统RedHat Linux7.3
RedHat Linux7.3的安装在很多资料中已有详细说明。这里只说一下分区的问题,作为一个邮件系统,主要的磁盘空间用于存储用户的邮件。我们把大部分软件安装在/usr,而用户收到的邮件存储在/var,用户处理(删除、移动等)后的邮件存储在/home。大家要根据自己的情况确定合理的分区方案。
四. 安装Sendmail
其实上,RedHat Linux7.3安装完成后,Sendmail就被安装了。如果没有,可从RedHat Linux7.3的第一张安装盘中用RPM包进行安装。接下来我们只对Sendmail进行一些简单的设置。
Sendmail的配置文件主要是/etc/sendmail.cf。这里,我们需要修改两个地方:
原内容: Cwlocalhost (大约在83行)
修改为: Cwexample.com
作用:定义邮件交换的域
原内容:O deamonPortoptions=Port=smtp,Addr=127.0.0.1 … (大约在260行)
修改为:(将此行注释掉)
作用:此行的作用是只允从本机使用smtp服务,作为一个邮件系统,这显然是不行的。
修改完成后,键入:
#/etc/rc.d/init.d/sendmail restart
重启sendmail,使修改生效。
五. 安装IMAP
IMAP提供IMAP及POP3两种服务,它们的作用都是提供用户收取信件的接口,这里我们只使用IMAP服务。
我们假设所有要安装的软件都已经下载到/tmp。本文涉及的命令都以root身份执行。
1.解压,安装:
# cd /tmp
# tar zxvf imap-2001a.tar.Z
# cd imap-2001a
# make slx

2.将生成的可执行文件拷贝到/usr/sbin
#cp imapd/imapd /usr/sbin

3.在/ect/xinetd.d下新建文件imap
#vi /etc/xinetd.d/imap
内容为:
# IMAP server at Port 143
service imap
{
  disable = no
  socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
}

4.重启xinetd
/ect/rc.d/init.d/xinetd restart

5.测试imap服务起来没有
#telnet localhost 143
如果看到欢迎信息,则说明IMAP服务器安装成功。注意,先不要删除IMAP的安装文件,我们在后面还会用到。

六. 安装Web mail支持——Apache、Mysql和PHP
这一步,我们要为Imp建立Web服务器及数据库支持。
1. 安装MySql
Web mail Imp将用户设置和通讯录存储在数据库中,我们选用常用的MySql。
1.1解压,配置编译、安装:
# cd /tmp
# tar zxvf mysql-3.23.47.tar.gz
# cd mysql-3.23.47
# ./configure –prefix=/usr/local/mysql
# make
# make install
完成后MySql被安装到/usr/local/mysql。
1.2建立用户mysql及组mysql
#groupadd mysql
#useradd mysql
#passwd mysql
1.3把MySql启动起来:
#cd /usr/local/mysql/bin
# ./mysql_install_db (安装MySql的基本数据库)
# ./safe_mysqld –uroot & (启动MySql并转入后台)
1.4测试MySql
# ./mysql
如果能连接数据库,则MySql安装完成。请注意修改MySql的root密码,以增加安全性。其它操作请参照有关资料。
2. 安装Apache、PHP及PEAR
Horde及Imp 是以PHP编写的,要使它能够运行,必须提供Web服务和PHP脚本语言支持,而PEAR是PHP的功能扩展模块,虽然PHP默认安装时已经安装了PEAR,但Horde需要较新的版本。
2.1解压:
# cd /tmp
# tar zxvf apache-1.3.24.tar.gz
# tar zxvf php-4.2.1.tar.gz
2.2预编译Apache
# cd apache-1.3.24
# ./configure
2.3配置、编译、安装PHP,根据imp的需要,加上相应的参数,可参照相关资料进行修改
# cd ../php-4.2.1
# ./configure –with-mysql=/usr/local/mysql –with-apache=../apache-1.3.24 –with-imap=../imap2001a –with-gettext –with-xml
# make
# make install

2.4配置、编译、安装Apache
# cd ../apache-1.3.24
# ./configure — prefix=/usr/local/apache –activate-module=src/modules/php4/libphp4.a

2.5拷贝PHP配置文件到/usr/local/lib
# cd ../php-4.2.1
# cp php.ini-recommended /usr/local/lib

2.6用新版本的PEAR替换旧版本
# cd /usr/local/lib
# mv php php.bak
# cp /tmp/ pear-4.1.0.tar.gz .
# tar zxvf pear-4.1.0.tar.gz
# mv pear-4.1.0 php
# chown root.root –R php

2.7针对PHP修改Apaceh配置文件/usr/local/apache/conf/http.conf
找到如下两行:
# AddType application/x-httpd-php .php
# AddType application/x-httpd-php-source .phps
将注释符去掉,这两行的作用是定义php文档的后缀。
还要修改默认的首页类型,找到:
DirectoryIndex index.htm
改成:
DirectoryIndex index.htm index.php default.htm default.php

2.8启动Apache
# /usr/local/apache/bin/apachectl start

2.9测试Apache和PHP
删除/usr/local/apache/htdocs/下所有文件
# cd /usr/local/apache/htdocs/
# rm –rf *
新建文件test.php,内容为:
<? phpinfo(); ?>
找一台能上网的机器,在浏览器地址栏中输入:http://mail.example.com/test.php,如果能看到PHP的有关信息,则说明Apache及PHP安装成功。
七. 安装Web mail
Imp 是http://horde.org/发布的。它是以PHP编写的一个功能完善的Web界面的邮件客户端程序。它用IMAP或POP3协议连接邮件服务器,完成邮件系统的各种功能。更值得一提的是它支持多种语言界面,包括简体中文。
Horde是http://horde.org/发布的Horde Application Framework(应用程序框架),http://horde.org/所发布的所有程序都要以Horde为基础,Imp也不例外。我们首先安装Horde。
1. 安装Horde
1.1拷贝Horde压缩包到Web服务器的根目录并解压
# cd /usr/local/apache/htdocs
# cp /tmp/horde-2.1.tar.gz .
# tar zxvf horde-2.1.tar.gz
# mv horde-2.1 horde

应用补丁:
# cd horde
# cp /tmp/patch-horde-2.0-2.1.gz .
# gunzip patch-horde-2.0-2.1.gz
# patch –p1 <patch-horde-2.0-2.1 -t
1.2为Horde 和Imp准备数据库
确定MySql在运行,我们将在MySql中建立Horde和Imp所需的数据库。利用Horde中一个SQL脚本文件自动完成这项工作,在进行之前,要修改数据库用户的密码。
# cd horde/scripts/db
# vi mysql_create.sql
找到如下内容:
REPLACE INTO user (host, user, password)
    VALUES (
        ‘localhost’,
        ‘horde’,
  — IMPORTANT: Change this password!
        password(‘horde’) // 用户密码
    );
将斜体部分的内容改成自己的密码,这里假设被改成“xxx”。
建立数据库:
# /usr/local/mysql/bin/mysql < mysql_create.sql
注:如果你为Mysql的root设置了密码,则在上述命令中就要提供密码。
如果成功,则在MySql中建立了名为horde的数据库,此数据库的所有者是horde,密码是“xxx”。
用下面的命令测试数据库是否成功建立:
# mysql -h localhost -u horde -pxxx
mysql>exit
1.3设置Horde
Horde和Imp的设置存储在它们的配置文件中。
拷贝配置文件:
# cd horde/config
# for foo in *.dist; do cp -v $foo `basename $foo .dist`; done
编辑下列文件:
1.3.1 Horde的设置文件horde.php
// 以IMAP作为登录认证
$conf['auth']['driver'] = ‘imap’;
$conf['auth']['params'] = array();
$conf['auth']['params']['dsn'] = ‘{localhost/imap:143}INBOX’;

// 使用MySql存储用户资料
$conf['prefs']['driver'] = ’sql’;
$conf['prefs']['params'] = array();
$conf['prefs']['params']['phptype'] = ‘mysql’;
$conf['prefs']['params']['hostspec'] = ‘localhost’; // 数据库服务器
$conf['prefs']['params']['username'] = ‘horde’; // 数据库用户
$conf['prefs']['params']['password'] = ‘xxx’; // 建立数据库时设置的密码
$conf['prefs']['params']['database'] = ‘horde’; // 数据库
$conf['prefs']['params']['table'] = ‘horde_prefs’; // 表

// 使用Sendmail发送邮件
$conf['mailer']['type'] = ’sendmail’;

1.3.2 语言设置文件lang.php
$nls['defaults']['language'] = ‘zh_CN’; // 默认语言设成简体中文

1.4 测试Horde
找一台能上网的机器,在浏览器地址栏中输入:http://mail.example.com/horde/test.php,如果正常的话,将会看到 Horde的相关信息,如果发现错误,请检查前面的操作。特别注意当刷新此页面时,session测试部分的值应该会自动加1,如果没有,说明Apache或Horde的session设置不正确,这将导致不能登录到Web mail系统。
2. 安装Imp
2.1拷贝Imp压缩包到horde目录下,解压:
# cd /usr/local/apache/htdocs/horde/
# cp /tmp/imp-3.1.tar.gz .
# tar zxvf imp-3.1.tar.gz
# mv imp-3.1 imp

应用补丁
# cd imp
# cp /tmp/patch-imp-3.0-3.1.gz .
# gunzip patch-imp-3.0-3.1.gz
# patch –p1 < patch-imp-3.0-3.1 -t

2.2 为Imp设置Horde,使Imp运行于Horde之下。
编辑Horde配置文件horde/config/registry.php
// 取消下列行的注释
$this->registry['auth']['login'] = ‘imp’; // 以Imp作为登录和退出的界面
$this->registry['auth']['logout'] = ‘imp’;

//取消下列行的注释并做修改,这是在Horde中注册Imp
$this->applications['imp'] = array(
    ‘fileroot’ => dirname(__FILE__) . ‘/../imp’,
    ‘webroot’ => $this->applications['horde']['webroot'] . ‘/imp’,
    ‘icon’ => ‘/horde/imp/graphics/imp.gif’,
    ‘name’ => _("返回邮件"), // 出现在链接上文字
    ‘allow_guests’ => false,
    ’show’ => true
);

2.3 设置Imp配置文件
# cd horde/imp/config
# for foo in *.dist; do cp -v $foo `basename $foo .dist`; done

编辑下列文件:
2.3.1 连接服务器配置文件servers.php
// 修改下列行
$servers['imap'] = array(
    ‘name’ => ‘IMAP Server’,
    ’server’ => ‘localhost’, // IMAP服务器地址
    ‘protocol’ => ‘imap’, // 协议
    ‘port’ => 143, // 端口
    ‘folders’ => ‘mail/’, // 文件夹
    ‘namespace’ => ”,
    ‘maildomain’ => ‘example.com’, // 域名
    ’smtphost’ => ‘mail.example.com’, // 邮件服务器
    ‘realm’ => ”,
    ‘preferred’ => ‘true’
);
 
2.3.2 用户配置文件pref.php,设定用户的默认设置
//以下设置供参考,可根据自己的情况修改
// 用户使用的语言
$_prefs['language'] = array(
    ‘value’ => ‘zh_CN’, // 默认的语言为简体中文
    ‘locked’ => false, // 是否允许用户修改缺省值,false为允许
    ’shared’ => true,
    ‘type’ => ’select’,
    ‘desc’ => _("Select your preferred language:")
);

// 用户文件夹设置,这些文件夹将建立在用户目录下
$_prefs['folders'] = array(
    ‘value’ => ‘mail/’,
    ‘locked’ => true,
    ’shared’ => false,
    ‘type’ => ‘text’,
    ‘desc’ => _("Path to your mail folders:")
);

// 收件夹,这不能修改
$_prefs['mailbox'] = array(
    ‘value’ => ‘INBOX’,
    ‘locked’ => true,
    ’shared’ => false,
    ‘type’ => ‘implicit’
);

// 发件夹
$_prefs['sent_mail_folder'] = array(
    ‘value’ => ‘Sent’,
    ‘locked’ => false,
    ’shared’ => true,
    ‘type’ => ‘implicit’
);

// 垃圾箱
$_prefs['trash_folder'] = array(
    ‘value’ => ‘Trash’,
    ‘locked’ => false,
    ’shared’ => false,
    ‘type’ => ‘implicit’
);
 
以上设置为基本设置,其它设置可根据实际情况修改
3. 测试Imp
找一台能上网的机器,在浏览器地址栏中输入:http://mail.example.com/horde/imp,以系统用户登录,试着发送邮件给其它服务器,给本服务器的其它用户,从其它服务器发送邮件到本服务器等。如果有问题,查看前面的步骤,确定问题所在。
八. 安装通讯录模块
通讯录的功能由horde发布的另一个软件Turba来完成,在Horde的统一管理下,它能与Imp很好的结合成一个整体。
1.拷贝Turba到horde目录并解压:
# cd /usr/local/apache/htdocs/horde
# cp /tmp/turba-1.1.tar.gz .
# tar zxvf turba-1.1.tar.gz
# mv turba-1.1 turba
应用补丁
# cd turba
# cp /tmp/patch-turba-1.0-1.1.gz .
# gunzip patch-turba-1.0-1.1.gz
# patch –p1 < patch-turba-1.0-1.1 -t
2.为Turba设置Horde和Imp,使Turba运行在Horde之下
2.1在Horde中注册Turba ,编辑文件horde/config/registry.php
// 取消下列行的注释并修改,这是Horde中注册Turba
$this->applications['turba'] = array(
    ‘fileroot’ => dirname(__FILE__) . ‘/../turba’,
    ‘webroot’ => $this->applications['horde']['webroot'] . ‘/turba’,
    ‘icon’ => ‘/horde/turba/graphics/turba.gif’,
     ‘name’ => _("通讯录"), // 出现在链接中的文字
    ‘allow_guests’ => false,
     ’show’ => true
);
 
2.2 在Imp中链接Turba,编辑文件horde/imp/config/conf.php
$conf['menu']['apps'] = array(‘turba’);
 
3.配置Turba
# cd horde/turba/config
# for foo in *.dist; do cp -v $foo `basename $foo .dist`; done

3.1编辑文件horde/turba/config/conf.php,在Turba中链接Imp
$conf['menu']['apps'] = array(‘imp’);
 
3.2编辑文件horde/turba/config/prefs.php
// 设置Turba的语言
$_prefs['language'] = array(
    ‘value’ => ‘zh_CN’, // 简体中文
    ‘locked’ => true,
    ’shared’ => true,
    ‘type’ => ’select’,
    ‘desc’ => _("Select your preferred language:")
);
 
3.3 为Turba准备数据库,利用Turba提供的SQL脚本自动完成
# cd /horde/turba/scripts/drivers/
# /usr/local/mysql/bin/mysql < turba.sql

3.4 设置Turba使用MySQL存储通讯录数据
编辑文件horde/turba/config/sources.php
// 修改下列行
$cfgSources['localsql'] = array(
    ‘title’ => ‘IMP Address Book’,
    ‘type’ => ’sql’,
    ‘params’ => array(
        ‘phptype’ => ‘mysql’,
        ‘hostspec’ => ‘localhost’, // 数据库服务器
        ‘username’ => ‘horde’, // 用户名
        ‘password’ => ‘xxx’, // 前面设置的密码
        ‘database’ => ‘horde’, // 数据库
        ‘options’ => ”,
        ‘tty’ => ”,
        ‘port’ => ‘5432′,
        ‘protocol’ => ‘unix’,
        ‘table’ => ‘turba_objects’ // 表
    ),

4.测试Turba
登录到Imp单击“通讯录”进入,测试增加、删除联系人等是否正常。

九. 安装修改密码模块
修改密码的功能由Horde的一个非官方的模块Passwd for Imp完成。它通过向poppassd服务提交请求来完成修改密码的功能。
1. 安装Poppassd
1.1安装Poppassd
# cd /tmp
# tar zxvf poppassd-1.8.1.tar.gz
# cd poppassd-1.8.1
# make
# make install
1.2设置xinetd,创建文件/etc/xinetd.d/poppassd
# default: off
# The POPPASSD port 106.
service poppassd
{
        disable = no
        socket_type = stream
        wait = no
        user = root
        server = /usr/sbin/poppassd
        log_on_success += USERID
        log_on_failure += USERID
}
重新启动xinetd
# /etc/rc.d/init.d/xinetd restart
1.3测试poppassd
# telnet localhost 106
如果看到欢迎信息,则poppassd成功安装

2. 安装Passwd for Imp
2.1拷贝Passwd for Imp到horde目录
# cd /usr/local/apache/htdocs/horde/
# cp /tmp/passwd.tgz .
# tar zxvf passwd.tgz

2.2配置Horde和Imp使Passwd工作在Horde之下
编辑文件horde/config/registry.php,增加以下内容:
// 在Horde中注册passwd
$this->applications['passwd'] = array(
    ‘fileroot’ => dirname(__FILE__) . ‘/../passwd’,
    ‘webroot’ => $this->applications['horde']['webroot'] . ‘/passwd’,
    ‘icon’ => $this->applications['horde']['webroot'] .
                 ‘/passwd/graphics/lock.gif’,
    ‘name’ => _("修改密码"), // 出现在链接上的文字
    ‘allow_guests’ => false,
    ’show’ => true
);
 
在Imp中链接Passwd,编辑文件horde/imp/config/conf.php
$conf['menu']['apps'] = array(‘turba’, ‘passwd’);

2.3配置passwd
# cd horde/passwd/config
# for foo in *.dist; do cp -v $foo `basename $foo .dist`; done

编辑文件horde/passwd/config/prefs.php
// 语言设置 事先要准备中文语言包
$_prefs['language'] = array(
    ‘value’ => ‘zh_CN’,
    ‘locked’ => false,
    ’shared’ => true,
    ‘type’ => ’select’,
    ‘desc’ => _("Select your preferred language:")
);
 
//在Passwd中链接Imp
$conf['menu']['apps'] = array(‘imp’);
3. 测试修改密码功能
登录到Imp,进入修改密码模块,看看能否正常修改密码。
至此,一个邮件系统成功建立了。接下来的问题就是修改Horde Imp的配置文件来完善她,如自定义起始页,加上本公司标志等。

2005年09月05日
春季要防过敏性鼻炎
2005-03-09

作者/张献怀

    又到春暖花开的季节,也是过敏性鼻炎的高发季节,解放军304医院耳鼻喉科每年入春以后,门诊过敏性鼻炎病人有时一天达20多人。该科副主任医师周承勇提醒人们,春季要防过敏性鼻炎。

  过敏性鼻炎是发生在鼻腔黏膜的变态反应性疾病,是耳鼻喉科常见疾病。随着工业化的发展,过敏性鼻炎的致病因素不断增加,该病的发病率正逐年上升。在西方国家,成人过敏性鼻炎的发病率一般为10%~20%,在我国北方发病率高达36%。引起过敏性鼻炎的过敏原包括尘螨、屋尘、动物皮屑、各种树木和草类的花粉,各种化学物质、某些食物、药品、化妆品,城市大气污染物如汽车尾气等,都可能导致过敏性鼻炎。其临床症状主要表现为鼻内发痒、打喷嚏、流清鼻涕、鼻堵塞,疾病发作时,常伴有眼内痒、流泪,甚至咽部有痒感等。

  过敏性鼻炎的症状与感冒相似,因此,有不少患者在发病初期常把过敏性鼻炎当成感冒,自行服用抗感冒药物或就诊于其他科室而不能得到及时正确的诊治。过敏性鼻炎不仅严重影响正常的生活和工作,降低生活质量,而且如果延误治疗或治疗不当,还可能诱发多种合并症,最常见的是支气管哮喘,有的还并发鼻窦炎、中耳炎、过敏性咽喉炎等,所以,对过敏性鼻炎不可忽视,一定要早防早治。

  过敏性鼻炎治疗的手段目前主要有两种,药物治疗和手术治疗。临床上常用的治疗药物有抗组织胺药物如扑尔敏、新敏乐等,减充血剂如麻黄素、呋麻合剂等。药物治疗一般不要超过7天,长期使用会引起药物性鼻炎。激素类药物如伯克钠、雷诺考特等,可减轻对过敏原的反应并抑制炎性反应,副作用较轻。

  严重的过敏性鼻炎可采用手术治疗方法。如激光、微波或者等离子消融等。等离子消融术是21世纪用于临床的最新技术,对过敏性鼻炎,尤其是重度过敏性鼻炎有明显的效果。

  周主任说,每年3-6月份是空气中花粉浓度较高的季节,也是过敏性鼻炎的高发季节,过敏体质的人这个季节应尽量减少外出,如一定要外出,也要注意尽量减少与花粉、干草、落叶等的接触,最好戴上口罩和眼镜;要经常打扫室内卫生,平时保持室内空气流通;对皮毛过敏者最好不要饲养宠物,如果家中有宠物也不要让它们上床;地面最好不要铺地毯。对于季节性过敏性鼻炎患者,在春秋季节植物扬花时,还需要提前使用药物预防,如鼻用皮质类固醇就可治疗和预防过敏性鼻炎。


转自《北京青年报》

2005年08月26日

使用Apache 2和MySQL 4.1.3安装PHP 5.0
 

经过几个月期待,PHP 5.0终于问世。在最新版本中,推出了具有非常重要性的编程语言特性,这些改变将博得新手和有经验的程序员的满意。这些更新包括:一个内部SQLite数据库,通过libxml2提高XML API运行的可靠性,一个可以重新设计的对象模型以及一个新推出的Zend Engine。
你肯定渴望采用PHP 5.0来开始你的开发工作。但是,既然你一定编译和安装PHP 5.0,为什么不将其升级成一个完全的LAMP(Linux,Apache,MySQL,PHP)开发环境呢?毕竟,过去的几个月中,已经发布了一系列新的版本:MySQL 4.1.3,其支持字符设置,自动校正,子查询和处理记录; Apache 2.0具有很好的稳定性。
我准备告诉你使用PHP 5.0,Apache 2.0和MySQL 4.1.3.来安装一个高效率PHP开发环境的过程,让我们开始吧!

 

基本条件

假定你已经安装了Linux版本,而且它能够正确运行。请确信系统中已经安装一个可以运行的C语言编译器,否则我们的操作就不能进行。
而且,还需要确定已经下载了所有相关软件:
最新MySQL版本(即现在的MySQL 4.1.3测试版),可以从MySQL.com(http://www.mysql.com/)下载。
最新的PHP版本(即现在的PHP 5.0.0),可从Php.net (http://www.php.net/downloads.php)下载。
最新的Apache 2版本(即现在的Apache 2.0.50),从Apache.org(http://httpd.apache.org/)下载。
最重要的一点是:在这些版本中,Apache 2.0和PHP 5.0的结合并不是天衣无缝,所以不应该同时用于同一系统中。但是,这种结合应该对开发系统是有好处的。
你可能还需要以下的支持库:
最新版本的libxml2库(现在的libxml2 2.6.11),从XmlSoft.org(http://www.xmlsoft.org/)下载。
最新版本的zlib库(现在的zlib 1.2.1)从Gzip.org (http://www.gzip.org/zlib/)下载。

把所有的东西都复制到你的/tmp子目录,并进行解压,如下所示:

$ cd /tmp
$ tar -xzvf mysql-standard-4.1.3-beta-pc-linux-i686.tar.gz
$ tar -xzvf php-5.0.0.tar.gz
$ tar -xzvf httpd-2.0.50.tar.gz
$ tar -xzvf libxml2-2.6.11.tar.gz
$ tar -xzvf zlib-1.2.1.tar.gz

安装支持库

第一步,检查你是否安装了libxml2或者zlib。PHP 5.0要求libxml2 2.6.0(或者是比libxml2 2.6.0更好的版本)和zlib 1.0.9(或者是比zlib 1.0.9更好的版本)。如果这两个支持库都没有,保持只读形式,否则进入下一部分。

 

 

开始时,编译和安装libxml2 XML解析器,这一解析器提供PHP 5.0新的XML APL:

$ cd /tmp/libxml2-2.6.11
$ ./configure
$ make && make install

这一步结束时,libxml2被安装在/usr/local/下。如果你想把它安装在其它地方,你应该在先前步骤中明确指定prefix选项到configure设置中。

第二步:对zlib做类似的操作:

$ cd /tmp/zlib-1.2.1
$ ./configure
$ make && make install

这一步结束时,zlib也被安装在/usr/local/下。你可以不使用默认值,而使用指定prefix选项将其安装到其它地方。

 


安装Apache

以Apache使用PHP有两种方式:作为动态模块,其在运行状态时可载入到Web服务器,或者作为静态模块,其可直接编译到Web服务器代码中。对于本文,我们着重于第一种方式。

为了能以Apache2.0模块使PHP动态载入,Apache服务器必须以动态共享对象(DSO, Dynamic Shared Object)编译。可以通过传递–enable-so参数到Apache 2.0 configure使这一特性生效:

$ cd /tmp/httpd-2.0.50
$ ./configure –prefix=/usr/local/apache2 –enable-so $ make
&& make install

这一过程将会设置,编译,以及将服务器安装到/usr/local/apache2。

 

完成MySQL和Apache的安装之后,最后的一步即为编译和安装PHP。这一步骤中,最为关键的一步是使用一系列的激发扩展功能提供PHP configure,以及外部类库正确的文件路径。表A为其中的例子:


表 A

$ cd /tmp/php-5.0.0
$ ./configure –prefix=/usr/local/php5
–with-apxs2=/usr/local/apache2/bin/apxs
–with-libxml-dir=/usr/local/lib
–with-zlib –with-zlib-dir=/usr/local/lib
–with-mysql=/usr/local/mysql
–with-mysqli=/usr/local/mysql/bin/mysql_config
–with-gd –enable-soap –enable-sockets

以上例子看起来相当复杂,然而事实并非如此:

–prefix设置PHP5 的安装路径。

–with-apxs2告诉PHP查找Apache 2.0的地方。

–with-libxml-dir和 –with-zlib-dir告诉PHP放置libxml2和zlib库的地方。

–with-mysql变量激活regularMySQL扩展功能。

–with-mysqli变量激活新增加的MySQL功能。

–with-gd变量激活 GD 扩展功能。

–with-zlib变量激活ZLIB 压缩库。

–enable-sockets变量激活socket通讯特性。

–enable-soap变量激活SOAP和Web services支持。

 

当然,也可以尝试其它选项和扩展功能:

$ ./configure –help

一旦configure已经完成,你即可编译和安装PHP。

$ make
$ make install

可以注意到,这些安装过程能够自动将PHP模块安装在正确目录下,以便Apache 2.0的查找。

 

使用PHP配置和测试Apache

已经完成?还没有呢!最后一步包括,配置Apache以识别PHP代码,然后发送到PHP解释器。为了实现这一过程,编辑Apache配置文件,即/usr/local/apache2/conf/httpd.conf,并添加以下一行:

AddType application/x-httpd-php .php

保存文件并启动服务器:

$ /usr/local/apache2/bin/apachectl start [/output]

现在,你可以测试一切是否可以正常运行,你可以在服务器文档目录/usr/local/apache2/htdocs/建立一个简单的测试程序。

将这一程序命名为test.php,并增加以下几行:

<?php
phpinfo();
?>

保存文件,并将浏览器地址指向http://localhost/test.php

2005年08月24日

Introduction

    The exception mechanism is an esstential feature of most modern programming lanaugages. Providing a uniform scheme for the reporting and handling of all sorts of "failure" situations, exceptions have replaced many informal practices which were used by programmers whenever a piece of code (usually a function) could fail.
    However, a subtle issue arises when considering the combination of exceptions and constructors: It is not obvious how is it possible for a constructor to catch an exception thrown by a constructor of a data members. This document discusses this problem and its solution, in the context of the C++ programming language. Although the problem is relevant to other object-oriented languages, C++ is unique in its value-semantics approach, which makes the solution a little more complicated than in reference-semantics languages (namely: Java, C#).


Problem overview (or: "Where is the catch?")

    Let us look at this simple program which defines a String class that represents a fixed-size sequence of characters. A String instance is initialized – at construction time – with a sequence of blank (space) characters. The clients of class String can either observe or change the contents of the sequence by String’s subscript operator, operator[].

struct BufError { };

struct Buf {
   char* array_;
  
   Buf(int sz)
   {
      array_ = (char*) malloc(sz);
      if(array_ == 0)
         throw BufError();
   }
  
   ~Buf() { free(array_); }
  
   char& at(int offset) { return array_[offset]; }
};

struct StringError { };

struct String {
   Buf buf_;
   int limit_;

   String(int limit) : limit_(limit), buf_(limit)
   {
      for(int i = 0; i < limit; ++i)
         (*this)[i] = ‘ ‘;
   }
  
   char& operator[](int offset)
   {
      if(offset < 0 || offset >= limit_)
         throw StringError();
      else
         return buf_.at(index);
   }  
};

int main(int argc, char* argv)
{
   try
   {
      String s(200);
      s[0] = ‘A’;
      cout << s[0] << endl; // Output: ‘A’
   }
   catch(BufError& be)
   {
      cerr << "Some String failure" << endl;
   }
   catch(StringError& se)
   {
       cerr << "Some String failure" << endl;
   }
   return 0;
}


    Looking at the source code of String we see that it uses a data member of type Buf to maintain the memory area where the characters are actually stored. Note that the compiler makes sure that every non primitive data member is initialized by the constructor. Specifically, class Buf does not have a default constructor, therefore, it is explictly initialized by String’s constructor.

    In order to examine the subtle problem of exceptions and constructors, let us consider the possiblity of a memory exhaustation. If no memory is available, the constructor of Buf will throw a BufError exception, which will propegate through the call stack up to the catch(BufError& be) clause in main(). However, when insepcting the body of main() we see that there is no difference between a BufError exception and a StringError exception: From main()’s point of view these two exceptions reflect an arbitrary problem with its local variable s.

    It is obvious that the code of main() will be more natural and simple if it had to cope with only a single type of exception, namely: StringError, instead of two distinct types. Given that it is not always possible to modify the source code of library classes (specifically, to change the type of thrown exceptions), a general solution requires that class String will convert BufError exceptions into a StringError exception.


The Solution

    At first it seems that there is no syntactically legal way to encolse the initializers of data members within a try block. Nonetheless, it turns out that the C++ language does provide the appropriate means for solving this difficulty, using a special kind of a try statement which is formally called "function-try-block". This rarely used feature allows the corresponding catch part to handle ALL exception that were thrown during the execution of the constructor, including those the were emitted by constructors of data members.

    The following source code uses an function-try-block to convert a BufError exception into a StringError exception. Pay attention to the try keyword added to String’s constructor.

struct BufError { };

struct Buf {
   char* array_;
  
   Buf(int sz)
   {
      array_ = (char*) malloc(sz);
      if(array_ == 0)
         throw BufError();
   }
  
   ~Buf() { free(array_); }
  
   char& operator[](int offset) { return array_[offset]; }
};

struct StringError { };

struct String {
   Buf buf_;
   int limit_;

   String(int limit)
   try
      : limit_(limit), buf_(limit)
   {
      for(int i = 0; i < limit; ++i)
         (*this)[i] = ‘ ‘;         
   }
   catch(BufError& )
   {
      throw StringError();
   }
  
   char& operator[](int offset)
   {
      if(offset < 0 || offset >= limit_)
         throw StringError();
      else
         return buf_[index];
   }  
};

int main(int argc, char* argv)
{
   try
   {
      String s(200);
      s[0] = ‘A’;
      cout << s[0] << endl; // Output: ‘A’
   }
   catch(StringError& se)
   {
       cerr << "Some String failure" << endl;
   }
   return 0;
}


Additional Comments

    Compatibility. Not all compilers support exception-try-blocks. For instance, only the most recent version of Microsoft’s Visual C++ compiler support exception-try-blocks. On the other hand, the GCC provides this feature for quite a long time now.

    Function-try-blocks are not limited to constructors. Any member function or file-scope function can use them. For instance, the divide() function below, returns 0 if an exception occurs during its execution, ensuring that calls such as divide(5,0) yield a 0 result. Nonetheless, A function-try-blocks is not really needed in member functions since it is equivalent to a "normal" try block that starts before the very first statement within the function and ends immediately after the last statement.

static int divide(int x, int y)
try
{
   return x / y;
}
catch(…)
{
   return 0;
}


    Initialization exceptions cannot be hidden. In constructors, a function-try-blocks must throw an exception, or rethrow the same exception it caught. It cannot just absorb an exception and then let the execution continue as if nothing went wrong. Even if you provide and ”do nothing” catch clause to a function-try-block, the compiler will make sure that the exception is rethrown when the catch clause is exited. Consequently, the two version of class A, below, are equivalent.


// Version 1
struct A {
    Buf b_;
    A(int n) try : b_(n) {
        cout << "A initialized" << endl;
    } catch(BufError& ) {
        cout << "BufError caught" << endl;
    }
};

// Version 2
struct A {
    Buf b_;
    A(int n) try : b_(n) {
        cout << "A initialized" << endl;
    } catch(BufError& be) {
        cout << "BufError caught" << endl;
        throw;
    }
};

2005年08月16日

搭建自己的Blog平台 — WordPress 新手指南


示例Blog网站 http://wordpress.hugmor.com/

1、什么是WordPress?
  WordPress是一款基于PHP和MySQL的Blog软件,通过它可以快速而简便的搭建属于你自己的Blog平台,目前的最新版本是1.5.1.2版,版本代号是“Strayhorn”。
 
2、安装WordPress的准备工作
  A、首先需要有一个支持PHP和MYSQL的空间,而且根据WordPress的说明文档(readme.html),要求PHP 的版本在4.1以上, MySQL的版本在3.23.23 以上。至于空间的大小,可以根据个人需要来定,WordPress的安装文件是1M左右。
  B、下载WordPress的最新安装包,可以去这里下载:WordPress下载页面(英文版)</a>。可以在网上搜索“WordPress 中文版 ”或直接去中文WordPress 下载。
  C、解压缩,然后将wp-config-sample.php更名为wp-config.php,并使用你所喜欢的文本编辑器(操作系统自带的写字板、记事本等)来进行设置,修改它的前几句,按照你的数据库配置来定义。
  define(’DB_NAME’, ‘数据库名’); // The name of the database
  define(’DB_USER’, ‘MYSQL用户名’); // Your MySQL username
  define(’DB_PASSWORD’, ‘密码’); // …and password
  define(’DB_HOST’, ‘localhost’); // 99% chance you won’t need to change this value
  (这些参数可以从你的主机提供商那里取得)。里面的table_prefix选项是设置MYSQL 数据库里面的数据表的前缀,define (’WPLANG’, ‘’)则是用来设置语言支持,英文版不变,中文版为(’WPLANG’,‘zh_CN‘)。
  D、设置修改完成之后,保存文件,这样前期的准备工具就OK了。
  
3、WordPress的安装进程
  A、使用你所喜爱的FTP客户端软件把WordPress的安装文件上传到你的主机www服务的根目录下(如/var/www/html)。
  B、在浏览器输入:http://网址/wordpress/,程序会自动检测并安装。
  C、安装完成后,系统会给你一个随机生成的管理员密码,记住这个密码,并使用admin和那个密码登录管理界面,在管理界面的Profile选项里修改密码、并修改设置详细的个性信息。如果你能够到这一步,那么恭喜你,你的WordPress就安装完成了。
  D、更多的安装帮助请参考WordPress安装包里面的Readme.html,以及访问官方网站

4、修改界面(主题theme)
  A、下载主题:可以在WordPress ThemesWordPress Reference CentreAlexkingBlogging Pro下载到一些漂亮的主题。
  B、安装主题:将下载来的主题解压,并保留目录结构,将整个文件夹上传到/wordpress/wp-content/themes/目录下,然后进入管理界面,在Presentation里(如果你安装了中文版,就是“表现”项)选择上传好的主题。
  C、修改主题:要修改主题需要先将主题文件夹及里面的文件属性改为“777”,在FTP中右键点击,使用chmod选项修改。然后在Presentation里(如果你安装了中文版,就是“表现”项)里的Theme Editor(主题编辑)项就可以直接修改了。

5、安装插件
  A、常用的 桑椹做的WordPress 评论插件,可以显示最近评论。其他可到WordPress PluginsWordPress Plugin RepositoryWordpress Plugin Database下载。
  B、安装插件:将下载来的插件解压,并保留目录结构,将整个文件夹上传到/wordpress/wp-content/plugins/目录下,然后进入管理界面,在Plugins里(如果你安装了中文版,就是“插件”项)激活上传好的插件。
  C、在需要显示的地方加入调用的语言,如桑椹做的WordPress 评论插件需要在sidebar.php或index.php里加入一行类示< ?php get_recent_comments(); ?>的文字。

  基于WordPress的免费Blog网站Blog Irelandblogthing

  hsuyo blog上有许多参考文章。
  lemonhall:建立你自己的WordPress站点 一文的word文件下载
  台湾的 中文WordPress 專案
  大陆的 中文WordPressWordPress临时论坛
  桑椹的 中文WordPress Planet
  WordPressCN

带认证的Sendmail安装手册


安装环境:

RedHat Linux 9.0 完全安装或者确保以下安装包已经安装完毕:

  imap-2001a-18.i286.rpm
  sendmail-8.12.8-4.i386.rpm
  m4-1.4.1-13.i386.rpm
  cyrus-sasl-2.1.10-4.i386.rpm
  cyrus-sasl-md5-2.1.10-4.i386.rpm
  cyrus-sasl-plain-2.1.10-4.i386.rpm
  cyrus-sasl-gssapi-2.1.10-4.i386.rpm

实现目的:

  实现带认证功能的邮件服务器的配置安装

一、DNS(域名服务器配置)

  假设安装Linux的机器主机名为server,IP地址为192.168.0.1,设置为DNS,别名为ns, 域名为test.com, 同时将其设置为SendMail服务器,别名为mail
  运行redhat-config-bind, 启动域名服务配置程序
        1. 新建正向区块
             1.1 新建 "正向区块" test.com
             1.2 设置 "正向区块" test.com
 选从列表中test.com,选属性打开"名称到IP的翻译"对话框
 1.2.1 修改主名称服务器
      修改SOA(主名称服务器)为ns.test.com.
                  1.2.1 修改联系人Email地址:root@test.com
                  1.2.2 添加记录(主机或别名)
      1.2.2.1 添加server, 地址192.168.0.1, 邮件交换器为mail
                       1.2.2.1 添加ns, 地址192.168.0.1, 邮件交换器为mail
                       1.2.2.2 添加mail, 地址192.168.0.1
       1.2.2.3 添加localhost,地址192.168.0.1
       1.2.2.4 添加局域网中其他主机
                   1.2.3 设置记录
     选记录列表框中的 test.com,选编辑(按钮),添加名称服务器 ns.test.com. ,设置邮件交换器mail,IP地址192.168.0.1

        2. 新建逆向区块
             2.1 新建 "逆向区块" 192.168.0
             2.2 设置 "逆向区块" 192.168.0
 选从列表中0.168.192.in-addr.arpa,选属性打开"IP到名称的翻译"对话框
 2.2.1 修改主名称服务器
      修改SOA(主名称服务器)为ns.
                  2.2.2 修改联系人Email地址
      修改联系为: root@test.com
 2.2.3 确保名称服务器中有 ns.
                  2.2.4 添加记录(主机或别名)
                       2.2.4.1 地址192.168.0.1, 主机或域为 server.test.com
       2.2.4.2 添加局域网中其他主机

        3. 修改/etc/resolv.conf
             在文件前面添加两行:
                  search  test.com
                  nameserver 192.168.0.1
                  # 后面是ISP的域名服务器地址
 nameserver  202.106.0.20
                  nameserver 202.106.46.151

        4. 重启DNS Server

二、Sendmail服务配置

  1. 修改/etc/mail/sendmail.mc,修改后文件如下:

  divert(-1)dnl
  dnl #
  dnl # This is the sendmail macro config file for m4. If you make changes to
  dnl # /etc/mail/sendmail.mc, you will need to regenerate the
  dnl # /etc/mail/sendmail.cf file by confirming that the sendmail-cf package is
  dnl # installed and then performing a
  dnl #
  dnl #     make -C /etc/mail
  dnl #
  include(`/usr/share/sendmail-cf/m4/cf.m4′)dnl
  VERSIONID(`setup for Red Hat Linux’)dnl
  OSTYPE(`linux’)dnl
  dnl #
  dnl # Uncomment and edit the following line if your outgoing mail needs to
  dnl # be sent out through an external mail server:
  dnl #
  dnl define(`SMART_HOST’,`smtp.your.provider’)
  dnl #
  define(`confDEF_USER_ID’,“8:12”)dnl
  define(`confTRUSTED_USER’, `smmsp’)dnl
  dnl define(`confAUTO_REBUILD’)dnl
  define(`confTO_CONNECT’, `1m’)dnl
  define(`confTRY_NULL_MX_LIST’,true)dnl
  define(`confDONT_PROBE_INTERFACES’,true)dnl
  define(`PROCMAIL_MAILER_PATH’,`/usr/bin/procmail’)dnl
  define(`ALIAS_FILE’, `/etc/aliases’)dnl
  dnl define(`STATUS_FILE’, `/etc/mail/statistics’)dnl
  define(`UUCP_MAILER_MAX’, `2000000′)dnl
  define(`confUSERDB_SPEC’, `/etc/mail/userdb.db’)dnl
  define(`confPRIVACY_FLAGS’, `authwarnings,novrfy,noexpn,restrictqrun’)dnl
  define(`confAUTH_OPTIONS’, `A’)dnl
  dnl #
  dnl # The following allows relaying if the user authenticates, and disallows
  dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links
  dnl #
  dnl define(`confAUTH_OPTIONS’, `A p’)dnl
  dnl # 
  dnl # PLAIN is the preferred plaintext authentication method and used by
  dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do
  dnl # use LOGIN. Other mechanisms should be used if the connection is not
  dnl # guaranteed secure.
  dnl #
  [color=red]TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl[/color]
  [color=red]define(`confAUTH_MECHANISMS’, `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl[/color]
  dnl #
  dnl # Rudimentary information on creating certificates for sendmail TLS:
  dnl #     make -C /usr/share/ssl/certs usage
  dnl #
  dnl define(`confCACERT_PATH’,`/usr/share/ssl/certs’)
  dnl define(`confCACERT’,`/usr/share/ssl/certs/ca-bundle.crt’)
  dnl define(`confSERVER_CERT’,`/usr/share/ssl/certs/sendmail.pem’)
  dnl define(`confSERVER_KEY’,`/usr/share/ssl/certs/sendmail.pem’)
  dnl #
  dnl # This allows sendmail to use a keyfile that is shared with OpenLDAP’s
  dnl # slapd, which requires the file to be readble by group ldap
  dnl #
  dnl define(`confDONT_BLAME_SENDMAIL’,`groupreadablekeyfile’)dnl
  dnl #
  dnl define(`confTO_QUEUEWARN’, `4h’)dnl
  dnl define(`confTO_QUEUERETURN’, `5d’)dnl
  dnl define(`confQUEUE_LA’, `12′)dnl
  dnl define(`confREFUSE_LA’, `18′)dnl
  define(`confTO_IDENT’, `0′)dnl
  dnl FEATURE(delay_checks)dnl
  FEATURE(`no_default_msa’,`dnl’)dnl
  FEATURE(`smrsh’,`/usr/sbin/smrsh’)dnl
  FEATURE(`mailertable’,`hash -o /etc/mail/mailertable.db’)dnl
  FEATURE(`virtusertable’,`hash -o /etc/mail/virtusertable.db’)dnl
  FEATURE(redirect)dnl
  FEATURE(always_add_domain)dnl
  FEATURE(use_cw_file)dnl
  FEATURE(use_ct_file)dnl
  dnl #
  dnl # The -t option will retry delivery if e.g. the user runs over his quota.
  dnl #
  FEATURE(local_procmail,`’,`procmail -t -Y -a $h -d $u’)dnl
  FEATURE(`access_db’,`hash -T<TMPF> -o /etc/mail/access.db’)dnl
  FEATURE(`blacklist_recipients’)dnl
  EXPOSED_USER(`root’)dnl
  dnl #
  dnl # The following causes sendmail to only listen on the IPv4 loopback address
  dnl # 127.0.0.1 and not on any other network devices. Remove the loopback
  dnl # address restriction to accept email from the internet or intranet.
  dnl #
  [color=red]dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)dnl[/color]
  dnl #
  dnl # The following causes sendmail to additionally listen to port 587 for
  dnl # mail from MUAs that authenticate. Roaming users who can’t reach their
  dnl # preferred sendmail daemon due to port 25 being blocked or redirected find
  dnl # this useful.
  dnl #
  [color=red]DAEMON_OPTIONS(`Port=25, Name=MSA’)dnl[/color]
  dnl #
  dnl # The following causes sendmail to additionally listen to port 465, but
  dnl # starting immediately in TLS mode upon connecting. Port 25 or 587 followed
  dnl # by STARTTLS is preferred, but roaming clients using Outlook Express can’t
  dnl # do STARTTLS on ports other than 25. Mozilla Mail can ONLY use STARTTLS
  dnl # and doesn’t support the deprecated smtps; Evolution <1.1.1 uses smtps
  dnl # when SSL is enabled– STARTTLS support is available in version 1.1.1.
  dnl #
  dnl # For this to work your OpenSSL certificates must be configured.
  dnl #
  dnl DAEMON_OPTIONS(`Port=smtps, Name=TLSMTA, M=s’)dnl
  dnl #
  dnl # The following causes sendmail to additionally listen on the IPv6 loopback
  dnl # device. Remove the loopback address restriction listen to the network.
  dnl #
  dnl # NOTE: binding both IPv4 and IPv6 daemon to the same port requires
  dnl #       a kernel patch
  dnl #
  dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6′)dnl
  dnl #
  dnl # We strongly recommend not accepting unresolvable domains if you want to
  dnl # protect yourself from spam. However, the laptop and users on computers
  dnl # that do not have 24×7 DNS do need this.
  dnl #
  FEATURE(`accept_unresolvable_domains’)dnl
  dnl #
  dnl FEATURE(`relay_based_on_MX’)dnl
  dnl # 
  dnl # Also accept email sent to "localhost.localdomain" as local email.
  dnl # 
  LOCAL_DOMAIN(`localhost.localdomain’)dnl
  dnl #
  dnl # The following example makes mail from this host and any additional
  dnl # specified domains appear to be sent from mydomain.com
  dnl #
  dnl MASQUERADE_AS(`mydomain.com’)dnl
  dnl #
  dnl # masquerade not just the headers, but the envelope as well
  dnl #
  dnl FEATURE(masquerade_envelope)dnl
  dnl #
  dnl # masquerade not just @mydomainalias.com, but @*.mydomainalias.com as well
  dnl #
  dnl FEATURE(masquerade_entire_domain)dnl
  dnl #
  dnl MASQUERADE_DOMAIN(localhost)dnl
  dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
  dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
  dnl MASQUERADE_DOMAIN(mydomain.lan)dnl
  MAILER(smtp)dnl
  MAILER(procmail)dnl 


  文件中,红色字体[color=red]的行为需要修改的地方,共有五行需要修改。

  第一行和第二行是去掉行首的注释。”TRUST_AUTH_MECH”的作用是使sendmail不管access文件中如何设置,都能 relay 那些通过EXTERNAL, LOGIN, PLAIN, CRAM-MD5或DIGEST-MD5等方式验证的邮件,”confAUTH_MECHANISMS" 的作用是确定系统的认证方式。Outlook Express支持的认证方式是LOGIN。

  第三行是加上注释,以便让sendmail可以侦听所有网络设备,为整个网络提供服务,而不仅仅只对本机提供服务。

  第四行是修改的,原来内容是:

  dnl DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea’)dnl

  去掉行首的注释符,并且将内容修改成Port=25:

  DAEMON_OPTIONS(`Port=25, Name=MSA’)dnl

  在smtp的默认端口(25)上进行认证,而不是587端口。这样就强制所有使用该邮件服务器进行邮件转发的用户在认证后才能发邮件了。

  2. 重新生成sendmail.cf:

  # make -C /etc/mail

  3. 修改/etc/mail/local-host-names,将希望该邮件服务器使用的邮箱名加进去,比如邮箱为:xxx@abc.com.cn则将abc.com.cn加入到该文件中。

  4. 重新启动sendmail服务,运行:

  # service sendmail restart

  5. 测试sendmail服务是否已经启动
            可以通过telnet 本机IP 25来验证sendmail服务是否已经正常启动,若登陆成功,则说明sendmail服务已经成功启动。
  # telnet localhost 25
  Trying 127.0.0.1…
  Connected to localhost.
  Escape character is ‘^]’
  220 localhost.localdomain ESMTP Sendmail 8.12.8/8.12.8; Wed, 12 May 2004 15:57:01 +0800
  ehlo localhost
  250-ENHANCEDSTATUSCODES
  250-PIPELINING
  250-8BITMIME
  250-SIZE
  250-DSN
  250-AUTH GSSAPI LOGIN PLAIN
  250-DELIVERBY
  250-HELP
  quit
  # 

  在AUTH后面有LOGIN就基本上可以在OutlookExpress上认证了。

三、Pop3服务配置:

  1. 启动ipop3服务,运行:

  # setup

  在系统服务列表中选中ipop3,选’OK’保存推出

  2. 重启xinetd服务,运行:

  # service xinetd restart

  3. 查看smtp和pop服务是否启动,运行

  # netstat –l
 
 四、使用
  1. 创建新邮箱
 任何Linux新用户都自动有一个邮箱,比如创建用户newuser,则其邮箱为 newuser@test.com
 
  2. 使用outlook
 新建帐户 newuser,SMTP和POP3服务器为 server, 用户名 newuser,口令为Linux改用户口令,选中"我的服务器要求身份认证"

  3. 使用newuser@test.com
 现在可以使用newuser@test.com收发信

2005年08月10日

windows直接telnet到linux,然后打开xwindows

XWindows系统:Redhat 9.0 (IP: 192.168.0.1)
客户端:Windows (IP: 192.168.0.4)
客户端XServer:Exceed 3D


配置Xwindows,使它能够允许远程访问Xwindows。 
Step1: 
编辑/etc/X11/xdm/Xaccess,将下面的行: 
#* # any host can get a login window 
改为: 
* # any host can get a login window 

Step2: 
修改/etc/X11/gdm/gdm.conf,找到下面的信息: 
[xdmcp] 
Enable=0 或Enable=false 
修改为: 
[xdmcp] 
Enable=1 或Enable=true 
并确保以下信息存在: 
Port=177 

Step3: 
修改/etc/inittab,将 
id:3:initdefault: 
修改为: 
id:5:initdefault: 
并将最后一行改为: 
x:5:respawn:/usr/bin/gdm 

Step4: 
确保/etc/X11/xdm/Xservers的属性为444,/etc/X11/xdm/Xsetup_0的属性为755。 
至此,服务器部分基本配置完毕。 

//
从其他的机器连到x server上,一般的windows上的x server(可以使用Exceed 3D)都有

passive模式,就是启动x server之后,不起动任何session.然后可以telnet到linux上(

假设windows的ip是192.168.0.4)
linux# export DISPLAY=192.168.0.4:0
linux# xterm
就会看到一个xterm出现在windows机器上。


//
首先确定服务器打开了SSH和X11 Forwarding
1)在Windoz底下装X-Server,比如X-Win32,X-Winpro之类
2)用PuttY之类的联接器,选Forward X11,ssh登陆
3)敲个mozilla回车试试看“`

Redhat9.0 patch ACL

目的:

主要为方便Linux CVS Server使用OS的来进行权限管理, 由于发现Linux 传统的权限管理不太方便, 由于考虑给Redhat 9.0添加 ACL(Access Control List)补丁, 以便可以方便地对文件或目录进行权限管理.


一、环境:
  操作系统: Redhat Linux 9.0
  内核版本:2.4.20-8

二、安装步骤:


1. 下载

1.1 下载Linux内核源码
http://www.kernel.org/下载2.4.29版到/root,文件名为: linux-2.4.29.tar.gz

1.2 下载ACL
http://acl.bestbits.at/download.html下载ACL patch for Kernel 2.4.29 到/root,文件名为:ea+acl+nfsacl+sec-2.4.29-0.8.73.diff.gz


2. 拷贝

2.1 拷贝内核源码
    使用tar -zxvf linux-2.4.29.tar.gz解压Kernel 2.4.29内核源码到/usr/src
    /root> cd /usr/src
    /usr/src>  rm -f  linux-2.4
    /usr/src>  ln  -s  /usr/src/linux-2.4.29  linux-2.4
   
2.2 patch ACL
    /usr/src> cd  linux-2.4
    /usr/src/linux-2.4>  zcat  /root/ea+acl+nfsacl+sec-2.4.29-0.8.73.diff.gz | patch -p1


3. 编译(make)内核

3.1 编译环境准备

3.1.1 清理工作环境
    清除原先此目录下残留的.config和.o(object文件)
    /usr/src/linux-2.4>   make mrproper       

3.1.2 配置make 环境  

3.1.2.1 获取原来Redhat Kernel 2.4.20-8的config文件
    /usr/src/linux-2.4>  cp /boot/config-2.4.20-8 .

3.1.2.2  设置kernel 2.4.29
   运行 /usr/src/linux-2.4> make menuconfig
   在菜单中选 Load config,选从文件 config-2.4.20-8 装入配置,然后再全选 File System 中的ext2和ext3,其他选项不变

3.2 编译

    3.2.1 检查依赖  (一到两分钟)
    #读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而那些不需要 
    /usr/src/linux-2.4>  make dep

    3.2.2 生成核心   (15分钟左右)
  
    3.2.2.1 生成核心
    #清除不必要的文件 (少于一分钟) 
    /usr/src/linux-2.4>  make clean

    #编译内核, 并在 ./arch/i386/boot下生成压缩的内核文件bzImage
    /usr/src/linux-2.4>  make bzImage

    3.2.2.2 拷贝核心到/boot
    /usr/src/linux-2.4>  cp  arch/i386/boot/bzImage /boot/vmlinuz-2.4.29
    /usr/src/linux-2.4>  cp  System.map /boot/System.map-2.4.29

    3.2.3 生成模块 (耗时1小时左右)

    3.2.3.1 生成模块
    #完成删除前面步骤留下的文件,以避免出现一些错误 
    /usr/src/linux-2.4>  make clean

    #生成相应的模块, 时间很长
    /usr/src/linux-2.4>  make modules
   
    3.2.3.2 拷贝模块到需要的目录
    #把模块拷贝到需要的目录 /lib/modules/2.4.29
    /usr/src/linux-2.4>  make modules_install  
   
    3.2.3.3 生成模块依赖关系
    #生成模块间的依赖关系,启动新内核之后,使用modprobe命令加载模块时就能正确地定位模块
    /usr/src/linux-2.4>   depmod -a    

    3.2.4 制作初始化镜像 (initrd-version.img)
          如果你用的是SCSI硬盘并且采用的是ext3分区格式的话,请注意,您一定要制作initrd.img(因为SCSI卡的驱动包括在这个里边),里边主要有一些驱动,因为放在内核中就显得过大,所以编译进initrd.img,在启动后释放,如果你使用的是IDE硬盘,您可以跳过这一步。
     /usr/src/linux-2.4>    mkinitrd  /boot/initrd-2.4.29.img  2.4.29


4.  配置grub

4.1 修改/boot下的两个链接System.map和vmlinuz,使其指向新内核的文件
    System.map文件是当前正在运行的kernel的fuctions的说明,如果您编译内核后不更新System.map,如果碰到问题,Trouble shooting就很困难了。
    /boot>   rm  -f  System.map vmlinuz
    /boot>   ln  -s  vmlinuz-2.4.29  vmlinuz
    /boot>   ln  -s   System.map-2.4.29  System.map
    /boot>   mkinitrd  initrd-2.4.29.img  2.4.29

4.2 配置启动菜单
    /boot>  vi  /boot/grub/menu.lst

    default=0
    timeout=10
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    title Red Hat Linux (2.4.20-8)
    root (hd0,0)
    kernel /boot/vmlinuz-2.4.20-8 ro root=/dev/hda1
    initrd /boot/initrd-2.4.20-8.img
   
#以下是我添加的
    title Red Hat Linux (2.4.29)
    root (hd0,0)
#下面行指定kernel 的路径,后面的ro 表示是readonly, root=/dev/hda1是指定根的路径
    kernel /boot/vmlinuz-2.4.29 ro root=/dev/hda1
#  下面行指定制作的启动初始化镜像
    initrd /boot/initrd-2.4.29.img

    title Red Hat Linux (2.4.20-8)开始是原先老版本的东东, 不要动,因为你还不知道新内核能不能用

    其中 root路径可以使用 df 确认,也可以从menu.lst前面有Redhat自动产生的对照。

5. 安装辅助工具
   使用rpm -qa 查看下面的rpm包是否安装, 如果没有安装,可以从Redhat9.0安装光盘安装。(rpm -Uhv xxxxx.rpm)
   attr-2.0.10-0.i386.rpm
   attr-devel-2.0.10-0.i386.rpm
   libattr-2.0.10-0.i386.rpm
   acl-2.0.18-0.i386.rpm
   acl-devel-2.0.18-0.i386.rpm
   libacl-2.0.18-0.i386.rpm
   fileutils-4.1.8acl-65.5.i386.rpm
   e2fsprogs-1.27ea-26.4.i386.rpm
   star-1.5a03-2.src.rpm


6. 安装完成之后的设置

    如果使用EA/ACL内核补丁,内核重新启动之后不会自动打开ACL功能,需要使用acl或者user_xattr选项mount文件系统才能使ACL生效。假设系统的/home目录位于/dev/hda7分区,可以使用如下命令使/home分区支持访问控制列表:

    # mount  -o remount,acl  /dev/hda7


三、EA/ACL的使用方法

1.Linux EA/ACL的语法

 安装了ACL系统之后,系统中的每个对象(文件和目录)都有一个ACL项目控制对这个目标的访问。每个目录之内所有对象的初始访问控制由目录的默认ACL项目决定。

 每个ACL项目由一系列ACL规则组成,这些规则设置单独用户或者一组用户对目标的访问权限,包括:读、写和搜索/执行。每个ACL条目被冒号分为三个部分:规则标签类型(tag type)、规则限制符(qualifier)和访问权限(access permission)。规则标签类型包括以下关键词:

user–以user关键词开头的ACL规则设置对象拥有者或者其他用户对对象的访问权限。例如:
        user::rw-                表示对象拥有者的访问权限;
        user:test:r–           表示用户test拥有读对象的权限。

group–设定某个用户组对对象的访问权限。例如:
        group::rw-                 表示用户所在用户组拥有读写权限;
        group:testgroup:r–   表示属于testgroup组的用户拥有读权限。

mask–以mask关键词开头的ACL规则用来限制赋予用户的最大访问权限,对象拥有者除外。例如:
        user::rw-
        user:test:rw-                  #有效的是user:test:r–
        group::rw-                      #有效的是group:r–
        group:testgroup::rw-     #有效的是group:testgroup:r–
        mask::r–
        other::r–

other–指定其他用户对对象的访问权限。


 每条ACL规则的第二部分是包含用户或者用户组识别符。用户识别符可以是用户名或者十进制的用户ID号;用户组识别符可以是用户组名或者十进制的用户组ID号。空白表示对象的拥有者或者拥有者所在的用户组。

 第三部分是对对象的访问权限。读、写和搜索(目录)/执行(文件)分别由r、w和x代表,和通常使用的权限表示方法完全相同。对应的权限被-代替表示不具有此权限。

 除了以上的关键词之外,还有一个只用于目录的关键词default。由default关键词修饰的ACL条目表示目录下所有子目录和文件的默认访问控制列表。

 为了方便,还有一种简化的ACL规则表示方式。user可以用u代替;g表示group;m表示mask;o表示other。简化方式的访问控制列表,条目之间使用逗号分割。这种表示方式为命令行设置访问控制列表提供了很大的便利。例如:

    /root> setfacl -m u::rw-,u:floatboat:rw-,g::r–,g:nixe0n:rw-,m::r–,o::r– foo.txt


2.访问控制列表的维护

 ACL生效之后,在使用ls -l命令罗列文件时,你会看到具有访问控制规则的目录或者文件的权限域会有一个加号(+)。例如,在打开ACL功能之前的文件如下所示:

    /root> ls -l
        -rw-rw-r–    1 test   test      11331 09-12 20:02 exam.txt

 使ACL功能生效之后,ls -l命令得到如下结果:

    /root>  ls -l
        -rw-rw-r–+   1 test  test      11331 09-12 20:02 exam.txt

2.1.setfacl

 setfacl工具设置文件和目录的访问控制列表,支持对ACL规则的设置(-s/-S)、修改(-m/-M)和删除(-x/-X)。我们可以使用自己喜欢的编辑器按照ACL语法事先编写好某个对象的访问控制列表,然后使用大写的命令行选项进行设置或者修改操作;我们也可以使用小写命令行选项直接修改对象的访问控制规则,例如:

    /root> setfacl -m -m u::rw-,u:floatboat:rw-,g::r–  exam.txt


2.2.getfacl

 ls命令能够获得某个对象的访问权限,与之类似,getfacl命令可以获得文件和目录的访问控制列表规则,其输出格式如下所示:

    /root>  getfacl  doc
        # file: doc/
        # owner: nixe0n
        # group: linuxaid
        user::rwx
        user:floatboat:rwx              
        group::rwx                      
        group:cool:r-x
        mask:r-x
        other:r-x
        default:user::rwx
        default:user:flatboat:rwx       
        default:group::r-x
        default:mask:r-x
        default:other:—