• 转至CU
    天天 hutc.zj.cn   lh@Hutc.zj.cn
    文章可以转载,但一定要保留我的MAIL

    经过几天的研究BIND,终于解决了我们单位的DNS问题。
    在一般防火墙下,都是采用DMZ区内放服务器,外部访问DMZ区得到外部的IP,内部访问DMZ区时得到内部的IP。
    如一个,
    内部IP地址<--->放在DMZ的web服务器的IP<----->外部IP地址
    192.168.1.1<--->192.168.0.1<----->211.202.49.1


    从DNS上可以从以下四个方面解决:

    一.iptables应用
       1. 核心思想

      配置动态DNS服务器的核心思想是:在DNS服务器上运行多个BIND,每个BIND为来自不同区域的用户提供解析,因此每个BIND都应具有不同的配置文件和域文件,并且分别监听在不同的端口。在接到客户端DNS请求时,根据客户的ip地址将请求重定向不同的BIND服务端口。BIND响应时,再改写相应包的服务端口为标准的53端口。这样就可以根据客户端的ip地址将不同的解析结果返回给客户端。整个过程对于客户端来说都是透明的。实现的关键在于运行不同的BIND及运用iptables进行ip地址及端口改写操作。

      2 配置过程

      步骤1: 配置内核

      netfilter要求内核版本不低于2.3.5,在编译新内核时,要求选择和netfilter相关的项目。这些项目通常都是位于"Networking options"子项下。以2.4.0内核为例,我们应该选中的项目有:

      

  • Kernel/User netlink socket
      [ ] Routing messages
      <*>; Netlink device emulation
      
  • Network packet filtering (replaces ipchains)
      .......
      然后,在"IP: Netfilter Configuration ---->;"选中:

       Connection tracking (required for masq/NAT)
       FTP protocol support
       IP tables support (required for filtering/masq/NAT)
       limit match support
       MAC address match support
       Netfilter MARK match support
       Multiple port match support
       TOS match support
       Connection state match support
       Packet filtering
       REJECT target support
       Full NAT
       MASQUERADE target support
       REDIRECT target support
       Packet mangling
       TOS target support
       MARK target support
       LOG target support
       ipchains (2.2-style) support
       ipfwadm (2.0-style) support

      其中最后两个项目可以不选,但是如果你比较怀念ipchains或者ipfwadm,你也可以将其选中,以便在2.4内核中使用ipchians或ipfwadm。但是需要注意的是,iptables是和ipchians/ipfwadm相对立的,在使用iptables的同时就不能同时使用ipchains/ipfwadm。编译成功后,这些模块文件都位于以下目录中
    /lib/modules/2.4.0/kernel/net/ipv4/netfilter

      编译2.4.0的新内核时还应该注意要在"rocessor type and features"中选择和你的CPU相对应的正确的CPU选项,否则新内核可能无法正常工作。

      步骤二、 配置BIND服务

      缺省地,BIND服务监听在53端口,我们可以通过配置让BIND运行在不同的ip及端口上。实现这一点并不复杂,假设我们的DNS服务器的ip地址是211.163.76.1,并且我们想区分CERNET及非CERNET的客户,这时我们必须运行两个BIND,使用不同的配置文件。可以在使用非标准监听端口的BIND的配置文件中用listen-on指定BIND监听的端口,比如:

      options {
      listen-on port 54 {211.163.76.1;}
      directory "/var/named_cernet";
      };
      可以用named的-c 选项指定named读入不同的配置文件,比如:

      /usr/sbin/named -u named -c /etc/named_cernet.conf
      
    3、配置重定向规则

      假设监听在标准端口的BIND服务器为非CERNET客户提供DNS解析,监听在54端口的BIND服务器为CERNET服务器提供DNS解析,我们可以建立如下的规则脚本:

      #!/bin/bash

      #打开端口转发

      echo 1 >; /proc/sys/net/ipv4/ip_forward
      #加载相关的内核模块

      /sbin/modprobe iptable_filter
      /sbin/modprobe ip_tables
      /sbin/modprobe iptables_nat
      #刷新所有规则

      /sbin/iptables -t nat -F
      #加入来自CERNET的DNS请求转发规则,将其转发到本地54端口,CERNET地址列表可从www.nic.edu.cn/RS/ipstat/获得

    /sbin/iptables -t nat -A PREROUTING -p udp -s 163.105.0.0/16 --dport 53 -i eth0 -j REDIRECT 54
    /sbin/iptables -t nat -A PREROUTING -p tcp -s 163.105.0.0/16 --dport 53 -i eth0 -j REDIRECT 54
    /sbin/iptables -t nat -A PREROUTING -p udp -s 166.111.0.0/16 --dport 53 -i eth0 -j REDIRECT 54
    /sbin/iptables -t nat -A PREROUTING -p tcp -s 166.111.0.0/16 --dport 53 -i eth0 -j REDIRECT 54
    /sbin/iptables -t nat -A PREROUTING -p udp -s 202.4.128.0/19 --dport 53 -i eth0 -j REDIRECT 54
    /sbin/iptables -t nat -A PREROUTING -p tcp -s 202.4.128.0/19 --dport 53 -i eth0 -j REDIRECT 54
    /sbin/iptables -t nat -A PREROUTING -p udp -s 202.112.0.0/15 --dport 53 -i eth0 -j REDIRECT 54
    /sbin/iptables -t nat -A PREROUTING -p tcp -s 202.112.0.0/15 --dport 53 -i eth0 -j REDIRECT 54

      #将返回给CERNET DNS客户数据包的源端口(54端口)伪装成53端口

      /sbin/iptables -t nat -A POSTROUTING -p udp --sport 54 -o eth0 -j SNAT --to 211.163.76.1:53
      /sbin/iptables -t nat -A POSTROUTING -p tcp --sport 54 -o eth0 -j SNAT --to 211.163.76.1:53
      教育网网的朋友可以从这里下载该脚本,将脚本中的DNS_IP及CNET_PORT参数改成你自己的DNS服务器地址及监听端口即可。
    4、运行动态DNS

      配置完成后我们启动DNS服务器,并且运行相应的规则脚本,我们的动态DNS服务器就可以正常工作了。



    二。利用bind9的cache纪录
      1)、用户向浏览器提供要访问的域名;
      2)、浏览器调用域名解析库对域名进行解析,由于CDN对域名解析过程进行了调整,
        所以解析函数库一般得到的是该域名对应的CNAME记录,为了得到实际IP地址,
       浏览器需要再次对获得的CNAME域名进行解析以得到实际的IP地址;在此过程中,
       使用的全局负载均衡DNS解析,如根据地理位置信息解析对应的IP地址,使得用户能就近访问。
      3)、此次解析得到CDN缓存服务器的IP地址,浏览器在得到实际的IP地址以后,
       向缓存服务器发出访问请求;
      4)、缓存服务器根据浏览器提供的要访问的域名,通过Cache内部专用DNS解析
       得到此域名的实际IP地址,再由缓存服务器向此实际IP地址提交访问请求;
      5)、缓存服务器从实际IP地址得得到内容以后,一方面在本地进行保存,
         以备以后使用,二方面把获取的数据返回给客户端,完成数据服务过程;
      6)、客户端得到由缓存服务器返回的数据以后显示出来并完成整个浏览的数据请求过程。
       1、要加入CDN服务的网站,需要域名(如www.linuxaid.com.cn,地址202.99.11.120)解析权提供给CDN运营商,Linuxaid的域名解析记录只要把www主机的A记录改为CNAME并指向cache.cdn.com即可。cache.cdn.com是CDN网络自定义的缓存服务器的标识。在/var/named/linuxaid.com.cn域名解析记录中,由:


    www             IN      A       202.99.11.120
    改为
    www             IN      CNAME   cache.cdn.com.



      2、CDN运营商得到域名解析权以后,得到域名的CNAME记录,指向CDN网络属下缓存服务器的域名,如cache.cdn.com,CDN网络的全局负载均衡DNS,需要把CNAME记录根据策略解析出IP地址,一般是给出就近访问的Cache地址。

      Bind 9的基本功能可以根据不同的源IP地址段解析对应的IP,实现根据地域就近访问的负载均衡,一般可以通过Bind 9的sortlist选项实现根据用户端IP地址返回最近的节点IP地址,具体的过程为:

      1)为cache.cdn.com设置多个A记录,/var/named/cdn.com 的内容如下:


    $TTL 3600
    @       IN      SOA             ns.cdn.com.     root.ns.cdn.com. (
                      2002090201      ;Serial num
                      10800           ;Refresh after 3 hours
                      3600            ;Retry
                      604800          ;Expire
                      1800            ;Time to live
                      )
            IN      NS              ns
    www     IN      A               210.33.21.168
    ns      IN      A               202.96.128.68
    cache   IN      A               202.93.22.13    ;有多少个CACHE地址
    cache   IN      A               210.21.30.90    ;就有多少个CACHE的A记录
    cache   IN      A               211.99.13.47



      2) /etc/named.conf中的内容为:


    options {
        directory "/var/named";
          sortlist {
     #这一段表示当在本地执行查询时
      #将按照202.93.22.13,210.21.30.90,211.99.13.47的顺序返回地址
              { localhost;
                  { localnets;
                      202.93.22.13;
                      { 210.21.30.90; 211.99.13.47; };
                  };
              };
    #这一段表示当在202/8地址段进行DNS查询时
    #将按照202.93.22.13,210.21.30.90,211.99.13.47的顺序返回地址
              { 202/8;
                  { 202.93.22.13;
                      { 210.21.30.90; 211.99.13.47; };
                  };
              };
    #这一段表示当在211/8地址段进行DNS查询时
    #将按照211.99.13.47,202.93.22.13,210.21.30.90的顺序返回地址,
    #也就是211.99.13.47是最靠近查询地点的节点
              { 211/8;
                  { 211.99.13.47;
                      { 202.93.22.13; 210.21.30.90; };
                  };
              };
              { 61/8;
                  { 202.93.22.13;
                      { 210.21.30.90; 211.99.13.47; };
                  };
              };
          };
    };

      zone "." {
           type hint;
          file "root.cache";
      };

      zone "localhost" {
           type master;
           file "localhost";
      };

      zone "cdn.com" {
         type master;
           file "cdn.com";
      };

    三。设内外DNS
     外部DNS就是一般的设置,关键在于内部的DNS的设置上




    ## named.conf - configuration for bind
    #
    # Generated automatically by redhat-config-bind, alchemist et al.
    # Any changes not supported by redhat-config-bind should be put
    # in /etc/named.custom
    #
    controls {
            inet 127.0.0.1 allow { localhost; } keys { rndckey; };
    };

    include "/etc/named.custom";

    include "/etc/rndc.key";

    options {
            directory "/var/named/";
            forwarders { 192.168.22.9; };  //转向到外部的DNS
    };









    zone  "0.0.127.in-addr.arpa" {
            type master;
            file  "0.0.127.in-addr.arpa.zone";
    };
    zone  "22.168.192.in-addr.arpa" {
            type master;
            file  "22.168.192.in-addr.arpa.zone";
    };
    zone  "7.20.172.in-addr.arpa" {
            type master;
            file  "7.20.172.in-addr.arpa.zone";
    };

    zone  "localhost" {
            type master;
            file  "localhost.zone";
    };
    zone  "hutc.zj.cn" {
            type master;
            file  "hutc.zj.cn.zone";
            forwarders { };  //除了内部的本域解析,其余都放到外部的DNS上
    };

    四。利用bind9的view功能

    options        {
            directory "/var/named";
            };

    acl        "fx_subnet"        {192.253.254/24; };
    view "internal" { //我们区的内部视图
            match-clients { "fx-subnet"; };
                    zone "fx.movie.edu" {
                     
                     type master;
                     file 'db.fx.moive.edu";
                     };
                     zone "254.253.192.in-addr.arpa" {
                     type master;
                     file "db.192.253.254";
                     };
                    };

    view "external" { //相应于世界的其余部分,我们区的视图
            match-clients { any; }; //隐式地
            rescursion no;  //我们的子网外面,它们不应该请求递归查询

             zone "fx.movie.edu" {
              type master;
              file  "db.fx.movie.edu.external";  //外部区数据文件
              };

              zone "254.254.192.in.arpa" {
                type master;
                file "db.192.253.254.external";//外部区数据文件
                };
                };

    总结:方法一:过于复杂,并且不能解决MX纪录的问题
       方法二:实际上用别的思想来解决内外DNS解析的问题
       方法三:实际已经运用过,还可以用ACL来做进一步的限制,就是和方法四比较起来,机器用的多了一点
       方法四:感觉最好了。
  • 转至CU

    邮件系统postfix安装与配置
    一、 postfix概述
    postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输
    代理)软件。下面一段话摘自postfix的官方站点(http://www.postfix.org):
    “postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。在Internet世界中,大部分的电子邮件都是通过sendmail来投递的,大约有100万用户使用sendmail,每天投递上亿封邮件。这真实一个让人吃惊的数字。Postfix试图更快、更容易管理、更安全,同时还与sendmail保持足够的兼容性。”

    1.1 postfix的特点
    1. postfix是免费的:
        postfix想要作用的范围是广大的Internet用户,试图影响大多数的Internet上的电子邮件系统,因此它是免费的。
    2. 更快:
        postfix在性能上大约比sendmail快三倍。一部运行postfix的台式PC每天可以收发上百万封邮件。
    3. 兼容性好:
        postfix是sendmail兼容的,从而使sendmail用户可以很方便地迁移到postfix。Postfix支持/var[/spool]/mail、/etc/aliases、 NIS、和 ~/.forward 文件。
       4. 更健壮:
    postfix被设计成在重负荷之下仍然可以正常工作。当系统运行超出了可用的内存或磁盘空间时,postfix会自动减少运行进程的数目。当处理的邮件数目增长时,postfix运行的进程不会跟着增加。
    5. 更灵活:
    postfix是由超过一打的小程序组成的,每个程序完成特定的功能。你可以
    通过配置文件设置每个程序的运行参数。
       6. 安全性
    postfix具有多层防御结构,可以有效地抵御恶意入侵者。如大多数的postfix程序可以运行在较低的权限之下,不可以通过网络访问安全性相关的本地投递程序等等。

    1.2 postfix的总体结构
    postfix由十几个具有不同功能的半驻留进程组成,并且在这些进程中并无特定的进程间父子关系。某一个特定的进程可以为其他进程提供特定的服务。
    大多数的postfix进程由一个进程统一进行管理,该进程负责在需要的时候调用其他进程,这个管理进程就是master进程。该进程也是一个后台程序。
    这些postfix进程是可以配置的,我们可以配置每个进程运行的数目,可重用的次数,生存的时间等等。通过灵活的配置特性可以使整个系统的运行成本大大降低。


    1.2.1 postfix的邮件队列(mail queues)
    postfix有四种不同的邮件队列,并且由队列管理进程统一进行管理:
    1. maildrop:本地邮件放置在maildrop中,同时也被拷贝到incoming中。
    2. incoming:放置正在到达或队列管理进程尚未发现的邮件。
    3. active:放置队列管理进程已经打开了并正准备投递的邮件,该队列有
                 长度的限制。
    4. deferred:放置不能被投递的邮件。
    队列管理进程仅仅在内存中保留active队列,并且对该队列的长度进行限
    制,这样做的目的是为了避免进程运行内存超过系统的可用内存。
       
    1.2.2 postfix对邮件风暴的处理
    当有新的邮件到达时,postfix进行初始化,初始化时postfix同时只接受两个并发的连接请求。当邮件投递成功后,可以同时接受的并发连接的数目就会缓慢地增长至一个可以配置的值。当然,如果这时系统的消耗已到达系统不能承受的负载就会停止增长。还有一种情况时,如果postfix在处理邮件过程中遇到了问题,则该值会开始降低。
    当接收到的新邮件的数量超过postfix的投递能力时,postfix会暂时停止投递deferred队列中的邮件而去处理新接收到的邮件。这是因为处理新邮件的延迟要小于处理deferred队列中的邮件。Postfix会在空闲时处理deferred中的邮件。

    1.2.3 postfix对无法投递的邮件的处理
    当一封邮件第一次不能成功投递时,postfix会给该邮件贴上一个将来的时间邮票。邮件队列管理程序会忽略贴有将来时间邮票的邮件。时间邮票到期时,postfix会尝试再对该邮件进行一次投递,如果这次投递再次失败,postfix就给该邮件贴上一个两倍于上次时间邮票的时间邮票,等时间邮票到期时再次进行投递,依此类推。当然,经过一定次数的尝试之后,postfix会放弃对该邮件的投递,返回一个错误信息给该邮件的发件人。

    1.2.4 postfix对不可到达的目的地邮件的处理
    postfix会在内存中保存一个有长度限制的当前不可到达的地址列表。这样就避免了对那些目的地为当前不可到达地址的邮件的投递尝试。从而大大提高了系统的性能。

    1.2.2 postfix的安全性
    postfix通过一系列的措施来提高系统的安全性,这些措施包括:
    1. 动态分配内存,从而防止系统缓冲区溢出;
    2. 把大邮件分割成几块进行处理,投递时再重组;
    3. Postfix的各种进程不在其他用户进程的控制之下运行,而是运行在驻留
       主进程master的控制之下,与其他用户进程无父子关系,所有有很好的
       绝缘性。
    4. Postfix的队列文件有其特殊的格式,只能被postfix本身识别;

    二、 postfix对邮件的处理过程
    2.1 接收邮件的过程

    图二、postfix对接收邮件的处理

    当postfix接收到一封新邮件时,新邮件首选在incoming队列处停留,然后针对不同的情况进行不同的处理:
    1.对于来自于本地的邮件:sendmail进程负责接收来自本地的邮件放在maildrop队列中,然后pickup进程对maildrop中的邮件进行完整性检测。maildrop目录的权限必须设置为某一用户不能删除其他用户的邮件。
    2.对于来自于网络的邮件:smtpd进程负责接收来自于网络的邮件,并且进行安全性检测。可以通过UCE(unsolicited commercial email)控制smtpd的行为。
    3.由postfix进程产生的邮件:这是为了将不可投递的信息返回给发件人。这些邮件是由bounce后台程序产生的。
    5. 由postfix自己产生的邮件:提示postmaster(也即postfix管理员)postfix
    运行过程中出现的问题。(如SMTP协议问题,违反UCE规则的记录等等。)

    关于cleanup后台程序的说明:cleanup是对新邮件进行处理的最后一道工序
    它对新邮件进行以下的处理:添加信头中丢失的Form信息;为将地址重写成标准的user@fully.qualified.domain格式进行排列;重信头中抽出收件人的地址;将邮件投入incoming队列中,并请求邮件队列管理进程处理该邮件;请求trivial-rewrite进程将地址转换成标准的user@fully.qualified.domain格式。

    2.2 投递邮件的过程
        新邮件一旦到达incoming队列,下一步就是开始投递邮件,postfix投递邮件时的处理过程如图三所示。相关的说明如下:
        邮件队列管理进程是整个postfix邮件系统的心脏。它和local、smtp、pipe等投递代理相联系,将包含有队列文件路径信息、邮件发件人地址、邮件收件人地址的投递请求发送给投递代理。队列管理进程维护着一个deferred队列,那些无法投递的邮件被投递到该队列中。除此之外,队列管理进程还维护着一个active队列,该队列中的邮件数目是有限制的,这是为了防止在负载太大时内存溢出。邮件队列管理程序还负责将收件人地址在relocated表中列出的邮件返回给发件人,该表包含无效的收件人地址。


    如果邮件队列管理进程请求,rewrite后台程序对收件人地址进行解析。但是缺省地,rewrite只对邮件收件人是本地的还是远程的进行区别。
    如果邮件对你管理进程请求,bounce后台程序可以生成一个邮件不可投递的报告。
    本地投递代理local进程可以理解类似UNIX风格的邮箱,sendmail风格的系统别名数据库和sendmail风格的.forward文件。可以同时运行多个local进程,但是对同一个用户的并发投递进程数目是有限制的。你可以配置local将邮件投递到用户的宿主目录,也可以配置local将邮件发送给一个外部命令,如流行的本地投递代理procmail。在流行的linux发行版本RedHat中,我们就使用procmail作为最终的本地投递代理。
    远程投递代理SMTP进程根据收件人地址查询一个SMTP服务器列表,按照顺序连接每一个SMTP服务器,根据性能对该表进行排序。在系统负载太大时,可以有数个并发的SMTP进程同时运行。
    pipe是用于UUCP协议的投递代理。

    三、 postfix的安装过程
    3.1源代码包的安装
    1. 获取postfix的源代码包
       从postfix官方站点www.postfix.org取得postfix的源代码包postfix-19991231-pl08.tar.gz。将其拷贝到/tmp
    2.解开源代码包,将生成/tmp/ postfix-19991231-pl08目录。
    tar xvzf  postfix-19991231-pl08.tar.gz
       3.编译源代码包
    cd /tmp/ postfix-19991231-pl08
    make
       4.建立一个新用户“postfix”,该用户必须具有唯一的用户id和组id号,同时应该让该用户不能登录到系统,也即不为该用户指定可执行的登录外壳程序和可用的用户宿主目录。我们可以先用adduser postfix 添加用户再编辑/etc/passwd文件中的相关条目如下所示:         
          postfix:*:12345:12345:postfix:/no/where:/no/shell
    5.确定/etc/aliases文件中包含如下的条目:
          postfix: root
    6. 以root用户登录,在/tmp/ postfix-19991231-pl08目录下执行命令:
    ./INSTALL.sh
    7. 启动postfix
    # postfix start
    8.关于maildrop目录权限的说明:
       postfix可以使用一个所有用户都可写的(也即目录权限为1773)的maildrop
    目录来让本地用户提交邮件。这种方法避免了使用set-uid 或 set-gid 软件,并且在邮件系统不可用时,用户仍然可以提交邮件。其他用户没有访问该目录中的队列文件的权限。接收来自网络的邮件时postfix不使用maildrop目录。但是,由于该目录的权限是733,其他用户可以建立一个硬连接到该目录中的文件从而导致该邮件被投递多次或无法删除,也就是说这将导致安全性问题。如果你想要使用这种方式来让用户提交邮件,就要在INSTALL.sh 脚本问你是否需要set-gid 时回答no。
    如果你的系统有多个用户的话,最好取消以上的方式而采用利用set-gid 用
    户权限提交邮件的方式。这时,我们首先需要建立一个组id唯一的组"maildrop" 并且确定该组中没有用户成员。然后在INSTALL.sh 问你是否需要set-gid 时指定"maildrop"。
        提示:在安装postfix之前,请删除已经安装的sendmail。

    3.2 rpm包的安装
    1. 获取postfix的rpm软件包。
       我们可以从http://www.alltrading.es/postfix/RPMS/i386/ 获得postfix的rpm软件包。当前的最新版本是postfix-20000531-2.i386.rpm。
    2. 备份你的/etc/aliases和/etc/aliases.db,因为postfix要使用该别名数据库。
    3. 用以下命令查看系统是否安装了sendmail:
          [root@mail /root]# rpm -qa |grep sendmail
          sendmail-doc-8.9.3-15
          sendmail-8.9.3-15
          sendmail-cf-8.9.3-15
    4. 用以下命令强行卸载sendmail:
       [root@mail /root]# rpm -e sendmail sendmail-cf sendmail-doc --nodeps
    5. 用以下命令杀死运行中的sendmail进程:
    [root@mail /root]# killall sendmail
    6. 安装postfix:
       [root@mail /root]# rpm -Uvh postfix-20000531-2.i386.rpm
        postfix ##################################################
        postfix-script: warning: creating missing Postfix pid directory
        postfix-script: warning: creating missing Postfix incoming directory
        postfix-script: warning: creating missing Postfix active directory
        postfix-script: warning: creating missing Postfix bounce directory
        postfix-script: warning: creating missing Postfix defer directory
        postfix-script: warning: creating missing Postfix deferred directory
        postfix-script: warning: creating missing Postfix saved directory
        postfix-script: warning: creating missing Postfix corrupt directory
        postfix-script: warning: creating missing Postfix public directory
        postfix-script: warning: creating missing Postfix private directory
    [root@mail /root]#
    7. 启动postfix
          [root@mail /root]# /etc/rc.d/init.d/postfix start

    3.3 配置系统每次启动时自动启动postfix
    1.如果你安装的是postfix的源代码包,可以在/etc/rc.d/rc.local文件中加入如下的语句让系统每次启动时自动启动postfix:
    if  [ -f  /usr/libexec/postfix ]; then
    /usr/libexec/postfix start
    fi
    2.如果你安装的是postfix的rpm包,可以通过setup命令来设置在系统启动时启动postfix。
    四、 postfix的配置详解
    4.1 postfix的配置文件结构
        postfix的配置文件位于/etc/postfix下,安装完postfix以后,我们可以通过ls命令查看postfix的配置文件:
        [root@mail postfix]# ls
    install.cf main.cf master.cf postfix-script

        这四个文件就是postfix最基本的配置文件,它们的区别在于:
        mail.cf:是postfix主要的配置文件。
        Install.cf:包含安装过程中安装程序产生的postfix初始化设置。
    master.cf:是postfix的master进程的配置文件,该文件中的每一行都是用来配置postfix的组件进程的运行方式。
    postfix-script:包装了一些postfix命令,以便我们在linux环境中安全地执行这些postfix命令。

    4.2 postfix的基本配置
    postfix大约有100个配置参数,这些参数都可以通过main.cf 指定。配置的格式是这样的,用等号连接参数和参数的值。如:
    myhostname = mail.mydomain.com
    等号的左边是参数的名称,等号的右边是参数的值; 当然,我们也可以在参数的前面加上$来引用该参数,如:
    myorigin = $myhostname
    虽然postfix有100个左右的参数,但是postfix为大多数的参数都设置了缺省值,所以在让postfix正常为你服务之前,你只需要配置为数不多的几个参数。下面我们一起来看一看这些基本的postfix参数。需要注意的是,一旦你更改了main.cf文件的内容,则必须运行postfix reload命令使其生效。

    1. myorigin
    myorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user@domain.com,则该参数指定@后面的域名。缺省地,postfix使用本地主机名作为myorigin,但是建议你最好使用你的域名,因为这样更具有可读性。比如:安装postfix的主机为mail.domain.com则我们可以这样指定myorigin:
    myorigin = domain.com
    当然我们也可以引用其他参数,如:
        myorigin = $mydomain
       
    2. mydestination
    mydestination参数指定postfix接收邮件时收件人的域名,换句话说,也就
    是你的postfix系统要接收什么样的邮件。比如:你的用户的邮件地址为user@domain.com, 也就是你的域为domain.com, 则你就需要接收所有收件人为user_name@domain.com的邮件。与myorigin一样,缺省地,postfix使用本地主机名作为mydestination。如:
          mydestination = $mydomain
          mydestination = domain.com
       
    3. notify_classes
    在postfix系统中,必须指定一个postfix系统管理员的别名指向一个用户,
    只有这样,在用户遇到问题时才有报告的对象,postfix也才能将系统的问题报告给管理员。notify_classes参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别:

    bounce:将不可以投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故,该邮件的拷贝不包含信头。

    2bounce:将两次不可投递的邮件拷贝发送给postfix管理员。

    delay:将邮件的投递延迟信息发送给管理员,仅仅包含信头。

    policy:将由于UCE规则限制而被拒绝的用户请求发送给postfix管理员,包含整个SMTP会话的内容。

    protocol:将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个SMTP会话的内容。

    resource:将由于资源错误而不可投递的错误信息发送给postfix管理员,比如:队列文件写错误等等。

    software:将由于软件错误而导致不可投递的错误信息发送给postfix管理员。

    缺省值为:
    notify_classes = resource, software

        4.myhostname
    myhostname 参数指定运行postfix邮件系统的主机的主机名。缺省地,该值被设定为本地机器名。你也可以指定该值,需要注意的是,要指定完整的主机名。如:
        myhostname = mail.domain.com

        5.mydomain
    mydomain参数指定你的域名,缺省地,postfix将myhostname的第一部分删除而作为mydomain的值。你也可以自己指定该值,如:
    mydomain = domain.com

    6.mynetworks
    mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问。你可以用标准的A、B、C类网络地址,也可以用CIDR(无类域间路由)地址来表示,如:
    192.168.1.0/24
    192.168.1.0/26

    7.inet_interfaces
    inet_interfaces 参数指定postfix系统监听的网络接口。缺省地,postfix监听
    所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上,则必须指定其监听的地址。如:
       inet_interfaces = all
       inet_interface = 192.168.1.1

    4.3 postfix的UCE(unsolicited commercial email)控制
    所谓UCE控制就是指控制postfix接收或转发来自于什么地方的邮件。

    缺省地,postfix转发符合以下条件的邮件:
    * 来自客户端ip地址符合$mynetworks的邮件。
    * 来自客户端主机名符合$relay_domains及其子域的邮件。
    * 目的地为$relay_domains及其子域的邮件。

    缺省地,postfix接受符合以下条件的邮件:
    * 目的地为$inet_interfaces的邮件。
    * 目的地为$mydestination的邮件。
    * 目的地为$virtual_maps的邮件。
    但是我们也可以通过下面的规则来实现更强大的控制功能。

    1. 信头过滤
    通过header_checks参数限制接收邮件的信头的格式,如果符合指定的格式,则拒绝接收该邮件。可以指定一个或多个查询列表,如果新邮件的信头符合列表中的某一项则拒绝该接收邮件。如:
    header_checks = regexp:/etc/postfix/header_checks
    header_checks = pcre:/etc/postfix/header_checks
    缺省地,postfix不进行信头过滤。

    2.客户端主机名/地址限制
    通过smtpd_client_restrictions参数限制可以向postfix发起SMTP 连接的客户端的主机名或ip地址。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:

    reject_unknown_client:如果客户端的ip地址在DNS中没有PTR记录则拒绝转发该客户端的连接请求。可以用unknown_client_reject_code参数指定返回给客户机的错误代码(缺省为450)。如果你有用户没有作DNS记录则不要启用该选项。

    permit_mynetworks:如果客户端的ip地址符合$mynetworks参数定义的范围则接受该客户端的连接请求,并转发该邮件。

    check_client_access  maptype:mapname:根据客户端的主机名、父域名、ip地址或属于的网络搜索access数据库。如果搜索的结果为REJECT 或者 "[45]XX text" 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求,并转发该邮件。。可以用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。

    reject_maps_rbl:如果客户端的网络地址符合$maps_rbl_domains参数的值则拒绝该客户端的连接请求。可以用maps_rbl_reject_code参数指定返回给客户机的错误代码(缺省为554)。

    示例:
        smtpd_client_restrictions = hash:/etc/postfix/access, reject_maps_rbl
            smtpd_client_restrictions = permit_mynetworks, reject_unknown_client
       该参数的缺省值为:
       smtpd_client_restrictions =
       也即接收来自任何客户端的SMTP连接。

    3. 是否请求HELO命令
    可以通过smtpd_helo_required参数指定客户端在SMTP会话的开始是否发
    送一个HELO命令。你可以指定该参数的值为yes或no。缺省值为:
        smtpd_helo_required = no
       
    4. HELO主机名限制
    可以通过smtpd_helo_restrictions参数指定客户端在执行HELO命令时发送
    给postfix的主机名。缺省地,postfix接收客户端发送的任意形式的主机名。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:
    reject_invalid_hostname:如果HELO命令所带的主机名参数不符合语法规范则拒绝客户机的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为501)。

    permit_naked_ip_address:RFC要求客户端的HELO命令包含的ip地址放在方括号内,你可以用permit_naked_ip_address参数取消该限制。因为有的mail客户端不遵守该RFC的规定。

    reject_unknown_hostname:如果客户端执行HELO命令时的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为450)。

    reject_non_fqdn_hostname:如果客户端执行HELO命令时的主机名不是RFC规定的完整的域名则拒绝客户端的连接请求。可以用invalid_hostname_reject_code参数指定返回给客户机的错误代码(缺省为504)。

    check_helo_access  maptype:mapname:根据客户端HELO的主机名、父域名搜索access数据库。如果搜索的结果为REJECT 或者 "[45]XX text" 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。

    示例:
    smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname

    5. RFC 821信头限制
    RFC 821对邮件的信头做了严格的规定,但是广泛使用的sendmail并不支
    持该规定,所以对于该参数我们只能说不,即:
        strict_rfc821_envelopes = no

    6. 通过发件人地址进行限制
    可以用smtpd_sender_restrictions参数通过发件人在执行MAIL FROM命令时提供的地址进行限制。可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序进行的,第一条符合条件的规则被执行。可用的规则有:

    reject_unknown_sender_domain:如果MAIL FROM命令提供的主机名在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450)。

    check_sender_access maptype:mapname:根据MAIL FROM命令提供的主机名、父域搜索access数据库。如果搜索的结果为REJECT 或者 "[45]XX text" 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。可以通过该参数过滤来自某些不受欢迎的发件人的邮件。

    reject_non_fqdn_sender:如果MAIL FROM命令提供的主机名不是RFC规定的完整的域名则拒绝客户端的连接请求。可以用non_fqdn_reject_code 参数指定返回给客户机的错误代码(缺省为504)。
    缺省地,postfix接受来自任何发件人的邮件。
    示例:
    smtpd_sender_restrictions = hash:/etc/postfix/access, reject_unknown_sender_domain

    7. 通过收件人地址进行过滤
    可以用smtpd_recipient_restrictions参数通过发件人在执行RCPT TO命令
    时提供的地址进行限制。缺省值为:
    smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains
       可以指定一个或多个参数值,中间用逗号隔开。限制规则是按照查询的顺序
    进行的,第一条符合条件的规则被执行。可用的规则有:

    check_relay_domains:如果符合以下的条件,则接受SMTP连接请求,否则拒绝该连接,可以用relay_domains_reject_code 参数指定返回给客户机的错误代码(缺省为504)。
    * 客户端主机名符合$relay_domains及其子域
    * 目的地为$inet_interfaces、$mydestination或$virtual_maps

    permit_auth_destination:不管客户端的主机名,只要符合以下的条件,就
    接受SMTP连接请求:
    * 解析后的目标地址符合$relay_domains及其子域
    * 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps

    reject_unauth_destination:不管客户端的主机名,只要符合以下的条件,
    就拒绝该客户端SMTP连接请求:
    * 解析后的目标地址符合$relay_domains及其子域
    * 解析后的目标地址符合$inet_interfaces、$mydestination或$virtual_maps

    check_recipient_access:根据解析后的目标地址、父域搜索access数据库。如果搜索的结果为REJECT 或者 "[45]XX text" 则拒绝该客户端的连接请求;如果搜索的结果为OK、RELAY 或数字则接受该客户端的连接请求。可以用access_map_reject_code参数指定返回给客户机的错误代码(缺省为554)。
       
    reject_unknown_recipient_domain:如果收件人的邮件地址在DNS中没有相应的A 或 MX 记录则拒绝该客户端的连接请求。可以用unknown_address_reject_code参数指定返回给客户机的错误代码(缺省为450)。

    reject_non_fqdn_recipient:如果发件人在执行RCPT TO命令时提供的地址
    不是完整的域名则拒绝其SMTP连接请求。可以用The non_fqdn_reject_code参数指定返回给客户机的错误代码(缺省为504)。

    4.4 posftfix的性能控制
    之所以对postfix的性能进行控制,是为了在遇到邮件风暴时保证postfix可以正常运行。通常,我们可以通过对下列postfix参数的配置来调节postfix的性能,这些参数都是通过mail.cf配置文件进行配置的,修改以后不要忘了运行postfix reload命令来使配置生效。

    1. 进程数限制
    可以通过default_process_limit 参数来控制postfix系统同时可以运行的最
    大进程数目。缺省值是50个。

    2. 对同一目标主机的并发连接限制
    当向同一目标主机发出SMTP连接时,postfix初始化发出两个SMTP连接,
    如果投递成功则增加并发的SMTP连接数目,遇到拥塞时又减少并发连接的数目。postfix中通过以下的参数对同一目标主机的并发连接进行控制:
    * initial_destination_concurrency:控制对同一目标主机的初始化并发连接数目。缺省值为2。
    * default_destination_concurrency_limit:控制初始化连接后对同一目标主机的最大并发连接数目。缺省值为10。
    * local_destination_concurrency_limit:控制对同一本地收件人的最大同时投递的邮件数目。缺省值为2,因为对本地同一收件人投递邮件时投递工作只能一个接一个的进行,所以设得在大也没用。

    3. 对同一封邮件的收件人数目限制
    通过default_destination_recipient_limit参数来控制postfix的投递代理(如
    smtp进程)可以将同一封邮件发送给多少个收件人。缺省值为50。也可以用明确指出该投递代理的参数来覆盖该缺省值。如用smtpd_recipient_limit来指定smtp投递代理可以将同一封邮件发送给多少个收件人,该参数的缺省值为1000。
       
    4. 推迟投递控制
    通过defer_transports参数,我们可以推迟投递该参数指定的邮件直到postfix明确的提出投递要求。下面我们看一个例子:
    有一个小型的局域网,用户都将邮件发送给局域网内部的一台postfix
    邮件服务器,然后通过在该服务器上拨号将邮件发送出去。这时我们可以这样指定该参数的值:
       defer_transports = smtp
    该语句表示postfix推迟投递所有的邮件直到执行sendmail -q命令,这样
    我们就可以在ppp的脚本中加上sendmail -q,以便在拨号成功后让postfix开始投递邮件。

    邮件系统postfix安装与配置(二)

    http://LinuxAid.com.cn 01-01-12 11:26 318p bye2000
    --------------------------------------------------------------------------------


    5. 关于延迟邮件的再投递控制
    可以通过以下的几个参数实现对延迟邮件的再投递控制:
    queue_run_delay:设置队列管理进行扫描deferred邮件队列的频率,缺省值为1000秒。
    maximal_queue_lifetime:设置postfix在放弃投递而返回不可投递信息前,被延迟邮件再deferred邮件队列中的生存时间。
    minimal_backoff_time:当一封邮件投递失败后,邮件队列将在一段时间内忽视该邮件的存在,也就是我们前面讲的时间邮票。该参数就是用来设置最小的时间邮票。缺省值为1000秒。
    maximal_backoff_time:设置最大的时间邮票。

    6. 对拒绝服务攻击的处理
    postfix对每一个SMTP会话都设置一个错误计数器,当该客户端的请求未
    被接受或违反那UCE规则时,该计数器就增1。随着计数器的增加,postfix将采取不同的措施来防止恶意用户的拒绝服务攻击。
    smtpd_error_sleep_time:当该错误计数器的值还很小时,postfix将暂停
    smtpd_error_sleep_time指定的时间,然后向客户端报告一个错误。该参数的缺省值为5秒。
        smtpd_soft_error_limit:当错误计数器的值超过该参数指定的值时,postfix在响应该客户端请求前将沉睡一段时间。缺省值为10。
    smtpd_hard_error_limit:当错误计数器的值超过该参数指定的值时,postfix
    中断同该客户端的连接。缺省值为100。

    4.5 postfix对使用资源的控制
    通过特定的postfix配置参数,我们可以实现postfix运行时对所消耗的资源的灵活控制。可以通过以下几个方面来控制postfix消耗的资源:

    1. 限制内存中的对象的大小
    要控制对内存资源的消耗,必须控制内存中对象的大小。可以用以下的参数来进行对象大小的控制:
    line_length_limit:控制读入数据时每一行的大小,如果太长则强行将其分割成更短的行,太长的行在投递时再重组。缺省值为2048 bytes。
    header_size_limit:限制信头长度。缺省值为102400bytes。
    message_size_limit:限制postfix队列文件的大小。缺省值为10240000 bytes。
    queue_minfree:邮件队列中可用的空间大小。缺省为无限制。建议该值最好时message_size_limit的数倍以便于处理大邮件。
    bounce_size_limit:限制某一邮件不可投递时,返回给发件人不可投递报告的大小,缺省值为50000 bytes。

    2. 限制内存中对象的数目
    qmgr_message_recipient_limit:设置内存中收件人地址的最大数目。缺省值为10000。
    qmgr_message_active_limit:设置active邮件队列中邮件数目的最大值。缺省值为1000。
    duplicate_filter_limit:设置需要local和cleanup后台程序记住的收件人地址的最大数目。缺省值为1000。

        3.限制等待一个外部命令完成的时间
    command_time_limit:设置local程序等待一个外部命令完成的时间。缺省值为1000秒。

    4. 限制文件锁定的操作时间
       deliver_lock_attempts:设置锁定一个文件的最大尝试次数。缺省值为5次。
       deliver_lock_delay:设置如果锁定一个文件失败后再次尝试的等待时间,缺省值为1秒。
       
    5. 控制错误恢复
    在某些情况下(如高负载),postfix的某个进程可能会死掉,这时master进
    程会试图重新启动该进程,我们可以通过下面的参数来控制这种行为:
    fork_attempts:试图重启动一个进程的最大尝试次数。缺省值为5次。
    fork_delay:每两次尝试之间的等待时间,缺省值为1秒。
    transport_retry_time:队列管理进程每两次尝试连接一个不正常的投递代理进程之间的等待时间。缺省为60秒。

    4.6 postfix中的地址操作

    1. 将地址改写为标准格式
    在cleanup进程进行表查询之前,它首选请求trivial-rewrite进程将新
    邮件地址改写成标准的user@fully.qualified.domain格式。改写的目的是为了减少查询表中的条目,从而提供查询的效率。trivial-rewrite进程可以实现以下的地址改写:
    * 将包含源路由信息的地址如@hosta,@hostb:user@site写成user@site,因为postfix不支持包含源路由信息的地址格式。
    * 将形如user%domain的地址改写成user@domain的形式。该特性可通过allow_percent_hack参数进行控制,其缺省值为yes。
    * 将只包含user的地址改写成user@$myorigin。该特性可通过append_at_myorigin参数进行控制,其缺省值为yes。最好不要改动其缺省值,因为大多数的postfix进程更擅长处理地址形如user@$myorigin的邮件。
    * 将形如user@host的地址改写成user@host.$mydomain。该特性可通过append_dot_mydomain参数进行控制,其缺省值为yes。
    * 将形如user@site.的地址改写成 user@site,也即除去了最后的点号。

    2. 规范地址映射
    在cleanup进程将一封新邮件存入incoming邮件队列之前,cleanup进程
    将根据查询规范表来进行地址改写,从而使之更具可读性。主要是替换形如Firstname.Lastname 风格的地址以及清除无效的域。缺省postfix是不进行规范地址改写的,你可以通过指定canonical_maps参数的值来使其生效。如:
         canonical_maps = hash:/etc/postfix/canonical
         也可以分别为收件人和发件人地址分别指定不同的改写规范,这时参数sender_canonical_maps和recipient_canonical_maps的优先级比canonical_maps高。如:
         sender_canonical_maps = hash:/etc/postfix/sender_canonical
         recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

    3. 地址欺骗
    就是将形如user@host.domain的地址改写成user@domain或user@other.domain,
    好像是从其他的邮件服务器发出的一样。缺省该功能是被禁止的,可以用参数masquerade_domains使其生效,如:
        masquerade_domains = $mydomain
        也可以通过masquerade_exceptions参数对特定的用户不进行地址欺骗,如:
    masquerade_exceptions = root
    注意:地址欺骗只对发件人地址有作用。

    4. 虚拟地址映射
    在运用了规范地址映射和地址欺骗之后,cleanup将使用虚拟表映射将邮件
    重定向到所有的收件人。注意,该操作仅仅作用于信头上的收件人地址。这样,我们就可以将发送到虚拟域的邮件投递到真实用户的邮箱。系统的别名数据库同样可以起到相同的作用。缺省该功能是被禁止的,可以用参数virtual_maps使其生效,如:
         virtual_maps = hash:/etc/postfix/virtual
         
    5. Relocated数据库查询
        Relocated表格提供如何将邮件发送给在系统中没有帐号的用户。缺省该功能是被禁止的,可以用参数relocated_maps使其生效,如:
        relocated_maps = hash:/etc/postfix/relocated
       
    6. 别名数据库查询
    当邮件在本地投递时,local投递代理进程会在别名数据库(linux下为
    /etc/aliases)中查询收件人的别名。该操作不会作用于邮件信头中的地址。可以用alias_maps指定使用的别名数据库。缺省地,该功能是有效的,如:
        alias_maps = hash:/etc/aliases
    可以通过alias_database参数控制别名数据库的路径,如:
    alias_database = hash:/etc/aliases

    五、 postfix的配置实例
    5.1为拨号用户配置postfix
    假设有一个小公司使用拨号上网,公司通过ISP的SMTP服务器(假设其域名为mail.isp.com,ip地址为201.110.1.100)发送邮件;公司内部的员工通过公司的SMTP服务器(运行postfix)收发邮件,下面我们一起来配置公司内部的SMTP服务器。

    1. 因为没有自己的固定ip和域名,所以必须指定ISP的SMTP服务器作
    为邮件网关(智能主机)。可以用如下的参数指定:
       relayhost = [201.110.1.100]
    注意:relayhost的值可以是domain、host、host:port、[address]或[address]。

    2. 当接收到新邮件时,postfix就会尝试投递该邮件。如果将该公司内部的
    SMTP服务器设置为按需拨号,也就是一有程序请求外联就拨号,则会增加上网的费用。这时我们可以通过postfix的defer_transports参数推迟投递新邮件直到postfix提出明确的要求,如指定:
        defer_transports = smtp
    这时如果我们在ppp的脚本(如/etc/ppp/ip-up.local)加上如下命令,则postfix只在拨号成功后投递新邮件:
    /usr/sbin/sendmail

    3. 因为我们是将邮件转发到邮件网关(201.110.1.100)而不是自己进行投
    递,所以我们没有必要使用DNS,因此我们通过如下的参数取消DNS查询:
    disable_dns_lookups = yes

    4. 为了保证我们能收到回信,我们必须进行域伪装。
    masquerade_domains = isp.com

    下面就是我们的配置文件mail.cf:

    #指定邮件网关
    relayhost =  [201.110.1.100]
    # 在拨号成功后才投递邮件
    defer_transports = smtp
    #取消DNS查询
    disable_dns_lookups = yes
    #一般常规配置
    queue_directory = /var/spool/postfix
    program_directory = /usr/libexec/postfix
    command_directory = /usr/sbin
    daemon_directory = /usr/libexec/postfix
    mail_owner = postfix
    default_privs = nobody
    mail_spool_directory = /var/spool/mail
    mailbox_command = /usr/bin/procmail
    local_destination_concurrency_limit = 2
    default_destination_concurrency_limit = 10
    debug_peer_level = 2
    debugger_command=PATH=/usr/bin:/usr/X11R6/bin,xxgdb$
                     daemon_directory/$ process_name $process_id & sleep 5
        # 假设本地网络为192.168.1.1/24
    mynetworks = 192.168.1.1/24
    # host specific information
    myhostname = yourhost.isp.com
    mydomain = local.isp.com
    myorigin = $mydomain
    where do we receive mail and who do we accept/receive mail for?
    inet_interfaces = all
    mydestination = $myhostname, localhost.$mydomain, $mydomain
    default_transport = smtp
    masquerade_domains = isp.com

    需要注意的是:这里的$mydomain、$myorigin、$mydestination不能为isp.com, 因为你如果设定为isp.com,内部SMTP服务器就会认为你的邮件是转发给它的,故而在本地尝试投递邮件,结果只会返回“unknown user”的错误。其次,该配置只实现了将邮件通过SMTP发送到ISP的SMTP服务器的手段,缺乏从ISP的邮件服务器取信的方法,这一点就只能通过如outlook或foxmail等的mail客户端软件来实现了。

    5.2为中小型企业用户配置postfix
    假设有一家数千名员工的公司,该公司通过租用专线上网。现在公司决定
    通过postfix来建立自己的邮件系统。在这里我们假设该公司的域为some.com, 邮件服务器的域名mail.some.com,地址为202.200.180.2,DNS服务器的域名为dns.some.com,地址为202.200.180.1。
    1. 配置DNS服务器,设置MX记录指向mail.some.com。相关的配置文件
    为/var/named/some.com(假设其zone文件就叫some.com, 有关DNS配置的内容请参看本书的相关章节)的内容如下:

    @       IN      SOA  dns.some.com. root.dns.some.com (
                           2000011307  ; serial
                           28800       ; refresh, seconds
                           14400              ; retry, seconds
                           3600000              ; expire, seconds
                           86400            ; minimum, seconds
                            )

    @             IN    NS      dns.some.com.
    @             IN    A       202.200.180.1
    @             IN    MX      10  mail.some.com.

    localhost     IN    A        127.0.0.1
    dns         IN     A        202.200.180.1
    mail         IN    A        202.200.180.2
    host1        IN     A       202.200.180.3
    host2        IN     A       202.200.180.4

    2. 配置postfix,其配置文件及相关的解释如下:

    #设置一般的路径信息
    queue_directory = /var/spool/postfix
    command_directory = /usr/sbin
    daemon_directory = /usr/libexec/postfix
    mail_spool_directory = /var/spool/mail

    #设置邮件及邮件队列的所有者为postfix
    mail_owner = postfix

    #设置邮件服务器的主机名
    myhostname = mail.some.com

    #设置mydomain、myorigin和mydomain参数
    mydomain = some.com
    myorigin =$mydomain
    mydestination = $mydomain

    #设置postfix服务监听的端口
    inet_interfaces = all

    #设置本地收件人的用户名查询手段,缺省是查询/etc/passwd文件
    #和别名数据库
    local_recipient_maps = $alias_maps unix:passwd.byname
    alias_maps = hash:/etc/aliases
    alias_database = hash:/etc/aliases

    #设置最终的本地投递代理程序,在这里我们使用流行的procmail
    mailbox_command = /usr/bin/procmail

    #设置该值为$mydomain以便客户端的连接
    relay_domains = $mydomain
    mynetworks = 202.200.180.0/24

    #设置向用户显示的主机名和版本信息
    smtpd_banner = $myhostname ESMTP $mail_name

    #对于并发进程的限制,保持系统缺省值就可以满足要求了。
    local_destination_concurrency_limit = 2
    default_destination_concurrency_limit = 10

    #如果你不知道你在做什么,最好不要改变下面的设置
    debug_peer_level = 2
    debugger_command =
             PATH=/usr/bin:/usr/X11R6/bin
             xxgdb $daemon_directory/$process_name $process_id & sleep 5

    3. 在RedHat中我们通常使用imap作为pop3服务器,可以通过rpm -q imap
    命令查看系统有没有安装imap。如果没有安装则插入linux光盘,用rpm -ivh imap-4.5-4.rpm 进行安装。

    4. 缺省地,pop3服务器是由inet 启动的,所以必须去掉/etc/inetd.conf文
    件中有关pop3的一行注释。如下所示:
      pop-3  stream  tcp    nowait  root   /usr/sbin/ipop3d    ipop3d

    5. 重新启动inet服务器,启动postfix:
    #/etc/rc.d/init.d/inet restart
    #postfix start

    5.3在防火墙内部配置postfix
        假设一公司通过租用专线上网,公司内部使用192.168.0.0的私有ip, 然后通过防火墙(双宿主主机)的ip欺骗上网,公司的邮件服务器(mail.some.com)也在内部网中,也使用私有ip。我们假设在防火墙上进行了端口转发,可以将Internet对防火墙25端口的请求包转发到内部的邮件服务器上,并且运行DNS服务的防火墙的MX记录指向防火墙本身。
    在这个例子中,我想着重说明的是有关映射文件的用法。main.cf配置文件和相关的解释如下所示:


        #表明自己的身份
    myhostname = mail.some.com
    mydomain = some.com
    mydestination = $mydomain, $myhostname, localhost.$mydomain
    myorigin = $mydomain
    #让postfix监听所有接口
    inet_interfaces = all

    #通过mynetworks参数接受内部网用户的SMTP连接请求
    mynetworks = 192.168.0.0/8  

    #向postfix管理员报告的信息量
    notify_classes = resource, software, bounce, policy

    #如果客户端的ip地址符合$maps_rbl_domains参数中列出的则拒绝之
    maps_rbl_domains = rbl.maps.vix.com, dul.maps.vix.com

    #对可以连接的客户端进行严格的限制
    smtpd_client_restrictions =
                 #客户端ip符合$mynetworks定义的范围则接受连接
    permit_mynetworks,
            #根据access的查询结果判断客户端连接的合法性
                  check_client_access hash:/etc/postfix/access,
         #拒绝ip符合$maps_rbl_domains定义范围的连接
                   reject_maps_rbl,
        #如果客户端在DNS中没有记录则拒绝连接,要慎用
                   reject_unknown_hostname

    #通过发件人的地址进行限制
    smtpd_sender_restrictions =
        permit_mynetworks,
    check_sender_access hash:/etc/postfix/access
       
    #设置虚拟主机数据库,别忘了执行"postmap virtual"进行格式转换
    virtual_maps = hash:/etc/postfix/virtual
       
    #对无系统帐号的邮件进行转发设置,如离开公司的员工
    relocated_maps = hash:/etc/postfix/relocated
       
    #设置别名数据库
    alias_maps = hash:/etc/postfix/aliases
       
    # 我们使用smtp投递代理
    default_transport = smtp
       
    # 一些常规设置
    mail_owner = postfix
    default_privs = nobody

    #设置路径信息
    queue_directory = /var/spool/postfix
    program_directory = /usr/libexec/postfix
    command_directory = /usr/sbin
    daemon_directory = /usr/libexec/postfix
    mail_spool_directory = /var/spool/mail
    mailbox_command = /usr/bin/procmail
       
    #并发连接设置
    local_destination_concurrency_limit = 2
    default_destination_concurrency_limit = 10

    然后,我们执行以下命令:

    #进入postfix配置目录
    cd /etc/postfix
    #用newaliases初始化别名数据库
    newaliases
    #用postmap分别建立virtual、access和relocated查询数据库
    postmap virtual
    postmap access
    postmap relocated
    #启动postfix
    /etc/rc.d/init.d/postfix start

    现在我们来看看virtual、access和reloacted几个查询文件的格式,下面是这几个文件的示例和注释:

        #virtual文件示例
    #假设在这个例子中我们有个虚拟域为other.com
    other.com
         
        #access 文件示例
    #如果符合前面的条件则进行后面操作,可以有三种操作:
    #1. [45]XX $messag:拒绝接受并且向客户端显示预定义的信息
    #2. REJECT:拒绝接受,不显示信息
    #3. OK允许连接
        ispy99@noman.com.cn     550 Go away
        friend.com     OK
        202.192     REJECT
       
        #relocated 文件示例
        #该文件主要是将发给无系统帐号的邮件进行转发
        who@some.com     onetwo@newone.com
    六、 postfix中的命令行工具及其它
    下面我们来看一看postfix的命令行工具,通过这些工具的使用可能会使你
    对postfix的管理更简单。

    6.1 sendmail兼容的命令行工具

    1. mailq  对邮件队列文件进行列表。表中的每一个条目包含有以下信息:
    队列文件ID、邮件的大小、到达的时间、发件人、收件人和投递延迟的原因(如果投递有延迟的话)。该命令主要是与showq后台程序通信来获取队列文件的相关信息。该命令无参数。

    2. newaliases 该工具进行别名数据库的初始化。如果没有指定数据库的类
    型,则使用系统默认的数据库类型(在linux下为hash)。该命令可以不带参数执行。

    6.2 postfix自带的命令行工具

    1. postcat  打印邮件队列文件的内容。后面界要显示的队列文件名,可以
    带一个-v的参数进行冗余显示。

    2. postconf  打印配置参数设置后的值或postfix的其他信息。
                 -d 打印配置参数的缺省值。
                 -m 列出所有支持的查询表类型。
                    不带参数则打印配置参数设置后的值。

    3. postmap  建立postfix查询数据库。在linux下可以直接跟上原始文件
    而不带任何参数来建立该数据库。

    6.3 postfix的日志
         postfix的日志文件位于/etc/log/maillog, 文件中包含有postfix的启动信息、出错信息以及同其他SMTP服务器的会话等等。如下所示:

    Sep 10 05:54:17 mail postfix/smtpd[5072]: disconnect from unknown[204.140.244.150]
    Sep 10 06:06:00 mail postfix/qmgr[467]: 50D403DF8: from=<bye2000@yxtc.edu.cn>;, size=6591 (queue active)
    Sep 10 06:11:06 mail postfix/smtp[5085]: connect to bjmx2.163.net[202.108.255.241]: read timeout (port 25)
    Sep 10 06:16:07 mail postfix/smtp[5085]: connect to bjmx3.163.net[202.108.255.242]: read timeout (port 25)
    Sep 10 06:21:08 mail postfix/smtp[5085]: connect to bjmx1.163.net[202.108.255.240]: read timeout (port 25)

    6.4 在postfix中使用MySQL数据库
         Scott Cotton 和 Joshua Marcus写了一段可以在postfix中添加mysql映射类型的代码,从而我们可以将postfix查询的别名数据库等数据存储在mysql数据库中,让postfix进行mysql查询来得到结果。这样做将有助于提供postfix的运行效率, 有其对需要不断对映射数据的站点特别有用。

       1.为postfix添加识别mysql数据库映射的功能
    a. 由于这段代码使用了mysql客户端库,所以我们必须安装mysql的开包。
    可以到www.redhat.com等linux相关站点下载mysql开发包,也可以从某些linux的资源光盘中取得mysql的开发包,如MySQL-client-3.22.30-1.i386.rpm。
       b. 安装该开发包:
       rpm -ivh MySQL-client-3.22.30-1.i386.rpm
    c. 下载postfix的源代码包,根据本章“3.1源代码包的安装”的提示进行
    安装,但是注意在执行make命令之前先执行以下命令:
    make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I /usr/include/mysql'
                              'AUXLIBS=/usr/lib/mysql/libmysqlclient.a -lm'
       
    5. 配置postfix使用mysql数据库映射
    我们以alias_maps进行说明。在main.cf中指定:
       alias_maps = mysql:/etc/postfix/mysql-aliases.cf

    6. 编辑mysql-aliases.cf

    #首先指定登录到mysql服务器的用户名和密码
    user = your_user_name
    password = your_password

    #连接的数据库名称
    dbname = your_database_name

    #查询的表名
    table = mytable

    #添加表的字段名称
    #forward_addr为转发地址
    #alias为别名数据
    select_field=forward_addr
    where_field=alias
    #添加附加的查询条件
    additional_conditions=and status='paid'

    #指定要连接的MySQL服务器
    hosts=your.mysql.server

       这样,当发生一个查询的时候,postfix是以这样的SQL语句进行查询的:
       select forward_addr from mytable where alias='$lookup' and status='paid'

       以上只是一个例子。在实际的运用中您可以指定多个mysql数据库,使用多个数据表格。

  • 转至CU

    作者:杨文军
    一、本文所用到的软件:
    Sun的JDK:j2sdk-1_4_2_09-linux-i586.bin
    Apache2.0.54:httpd-2.0.54.tar.gz
    MySQL:mysql-standard-4.1.14-pc-linux-gnu-i686.tar.gz
    Php:php-4.4.2.tar.gz
    Tomcat:jakarta-tomcat-5.0.28.tar.gz
    jakarta-tomcat-connectors-jk2:jakarta-tomcat-connectors-jk2-2.0.4-src.tar.gz
    本文中所有软件安装在/home/www目录中。
    注:文中红色字体为输入的命令行。

    二、软件安装
    1、首先安装Sun的JDK

    [root@yangwenjun www]# ./j2sdk-1_4_2_09-linux-i586.bin

    安装后会生成文件夹j2sdk1.4.2_09,将文件夹j2sdk1.4.2_09移动(或复制)到你想要存放的JDK的位置,本文中是放在/home/www/j2sdk1.4.2_09
    接下来编辑/etc/profile文件加入JDK环境变量,在文件末尾处加入以下内容:

    [root@yangwenjun www]# vi /etc/profile

    export JAVA_HOME=/home/www/j2sdk1.4.2_09
    export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    :$JAVA_HOME/lib/mysql-connector-java-3.2.0.jar:$JAVA_HOME/lib/classes12.jar
    export PATH=$PATH:$JAVA_HOME/bin
    export JRE_HOME=$JAVA_HOME/jre

    [root@yangwenjun etc]# source profile
    [root@yangwenjun etc]# set

    在这里你可以看见所有的环境变量。
    [root@yangwenjun etc]# java –version
    如果JDK配置正确的话,运行上面的命令将会出现JDK的相应版本。

    2、安装MySQL

    [root@yangwenjun www]# tar xzfv mysql-standard-4.1.14-pc-linux-gnu-i686.tar.gz
    [root@yangwenjun www]# cd mysql-standard-4.1.14-pc-linux-gnu-i686
    [root@yangwenjun mysql-standard-4.1.14-pc-linux-gnu-i686]# more INSTALL-BINARY

    认真的阅读一下这个文档,就会发现MySQL很容易安装

    [root@yangwenjun mysql-standard-4.1.14-pc-linux-gnu-i686]# groupadd mysql
    [root@yangwenjun mysql-standard-4.1.14-pc-linux-gnu-i686]# useradd -g mysql mysql
    [root@yangwenjun www]# mv mysql-standard-4.1.14-pc-linux-gnu-i686 /home/www/mysql     
    [root@yangwenjun www]# cd /home/www/mysql
    [root@yangwenjun mysql]# scripts/mysql_install_db --user=mysql
    [root@yangwenjun mysql]# chown -R root .
    [root@yangwenjun mysql]# chown -R mysql data
    [root@yangwenjun mysql]# chgrp -R mysql .
    [root@yangwenjun mysql]# bin/mysqld_safe --user=mysql &

    这样MySQL就已经启动了,下面为root用户设置密码:

    [root@yangwenjun mysql]# ./bin/mysqladmin -u root password ‘password’
    [root@yangwenjun mysql]# ./bin/mysqladmin -u root -h localhost.localdomain password 'pass'
    [root@yangwenjun mysql]# ./bin/mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 5 to server version: 4.1.14-standard

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql>

    [root@yangwenjun mysql]# cp support-files/mysql.server /etc/init.d/mysql
    [root@yangwenjun mysql]# vi /etc/init.d/mysql
    修改如下定义使其内容为:
    basedir=/home/www/mysql
    datadir=/home/www/mysql/data
    [root@yangwenjun mysql]# chkconfig --level 345 mysql on
    [root@yangwenjun mysql]# service mysql restart
    Shutting down MySQL...                                     [  OK  ]
    Starting MySQL                                                  [  OK  ]
    [root@yangwenjun mysql]#

    到这里MySQL就装好了。


    3、安装Apache
    [root@yangwenjun httpd-2.0.54]# cd /home/bruce/software/www/httpd-2.0.54
    [root@yangwenjun httpd-2.0.54]# ./configure --prefix=/home/www/apache --enable-module=most --enable-shared=max --enable-so
    [root@yangwenjun httpd-2.0.54]# make
    [root@yangwenjun httpd-2.0.54]# make install

    创建一个httpd启动脚本,内容如下:
    [root@yangwenjun init.d]# vi httpd
    #!/bin/bash
    # Startup script for the Apache Web Server
    # 包含函数库
    . /etc/rc.d/init.d/functions
    # 获取网络配置
    . /etc/sysconfig/network
    # 检测 NETWORKING 是否为 "yes"
    [ "${NETWORKING}" = "no" ] && exit 0
    # apache安装目录
    APACHE=/home/www/apache
    # 启动服务函数
    start() {
    echo $"Starting httpd service: "
    $APACHE/bin/apachectl start
    RETVAL=$?
    echo
    }
    # 关闭服务函数
    stop() {
    echo $"Stopping httpd service: "
    $APACHE/bin/apachectl stop
    RETVAL=$?
    echo
    }
    # 根据参数选择调用
    case "$1" in
      start)
    start
    ;;
      stop)
    stop
    ;;
      restart)
    stop
    start
    ;;
      *)
    echo $"Usage: $0 start|stop|restart"
    exit 1
    esac
    exit 0
    保存退出vi
    [root@yangwenjun init.d]# chmod 755 httpd
    [root@yangwenjun init.d]# chkconfig --level 345 httpd on
    [root@yangwenjun conf]# vi httpd.conf
    修改默认启动页
    DirectoryIndex index.html index.htm default.htm default.html index.php index.php3 index.jsp
    [root@yangwenjun init.d]# service httpd restart
    Apache安装完毕!
    4、安装Php
    [root@yangwenjun www]# tar zxvf php-4.4.2.tar.gz
    [root@yangwenjun www]# cd php-4.4.2
    [root@yangwenjun php-4.4.2]# ./configure --prefix=/home/www/php --with-mysql=/home/www/mysql --with-apxs2=/home/www/apache/bin/apxs
    [root@yangwenjun php-4.4.2]# make
    [root@yangwenjun php-4.4.2]# make install
    [root@yangwenjun php-4.4.2]# cp php.ini-dist /usr/local/lib/php.ini
    [root@yangwenjun php-4.4.2]# cd /home/www/apache/conf
    [root@yangwenjun conf]# vi httpd.conf
    #系统自动添加了这一行,如果没有则自己加入这一行。
    LoadModule php4_module modules/libphp4.so
    在AddType application/x-tar .tgz
    下加一行
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .php3
    编写文件index.php 写入下一行
    <? echo phpinfo() ?>
    通过浏览器我们看到了我们的测试结果。至此,PHP装好了。

    5、安装Tomcat及jakarta-tomcat-connectors-jk2
    本文安装的版本是:jakarta-tomcat-5.0.28
    [root@yangwenjun www]# tar xzfv jakarta-tomcat-5.0.28.tar.gz
    [root@yangwenjun www]# cp -rf jakarta-tomcat-5.0.28 /home/www/tomcat
    [root@yangwenjun www]# cd /home/www/tomcat
    现在来测试一下tomcat是否安装成功
    启动tomcat服务:
    [root@yangwenjun tomcat]# ./bin/startup.sh
    访问
    http://ip:8080/看能否看到tomcat的默认页面,如能看到说明tomcat已经在服务了.
    停止tomcat服务:
    [root@yangwenjun tomcat]# ./bin/shutdown.sh

    开始安装jakarta-tomcat-connectors-jk2
    [root@yangwenjun www]# tar xzfv jakarta-tomcat-connectors-jk2-2.0.4-src.tar.gz
    [root@yangwenjun www]# cd jakarta-tomcat-connectors-jk2-2.0.4-src/jk/native2/
    [root@yangwenjun native2]# ./configure --with-apxs2=/home/www/apache/bin/apxs
    [root@yangwenjun native2]# make
    [root@yangwenjun native2]# cd ../build/jk2/apache2/
    [root@yangwenjun apache2]# /home/www/apache/bin/apxs -n jk2 -i mod_jk2.so
    上条命令是将mod_jk2.so添加到apache2的modules中.
    上面就完成了Tomcat和Connectors的安装.接下来进行与Apache的整合.
    6、Tomcat与Apache的整合
    [root@yangwenjun apache2]# cd /home/www/apache/conf/
    [root@yangwenjun conf]# vi httpd.conf
    编辑配置文件在其中加入这个模块,保存退出
    LoadModule jk2_module modules/mod_jk2.so
    然后在这个目录新建一文件workers2.properties
    [root@yangwenjun conf]# vi workers2.properties
    文件内容如下:
    [root@yangwenjun conf]# more workers2.properties
      [channel.socket:202.114.33.249:8009]
      port=8009
      host=202.114.33.249
      [ajp13:202.114.33.249:8009]
      channel=channel.socket:202.114.33.249:8009
      [uri:/*]
      worker=ajp13:202.114.33.249:8009
      [uri:/examples/*]
      worker=ajp13:202.114.33.249:8009

    当然以上内容中的202.114.33.249也可改成localhost
    接下来进入tomcat下的conf目录:
    [root@yangwenjun conf]# cd /home/www/tomcat/conf/
    修改server.xml文件
    [root@yangwenjun conf]# vi server.xml
    找到其中的<Host>中的<Contest>项,我修改后的相关参数如下:
    <Context path="" docBase="/home/www/apache/htdocs" debug="0"
            reloadable="true" crossContext="true"/>
    编辑后保存退出.
    重启Apache和Tomcat后可以查看整合后的效果.如下图所示:
    [root@yangwenjun conf]# /home/www/tomcat/bin/startup.sh
    [root@yangwenjun conf]# service httpd restart


    三、架设整合后的虚拟主机
        [root@yangwenjun conf]# vi /home/www/apache/conf/httpd.conf
    在httpd.conf文档末尾虚拟主机设置处加入以下内容:
    NameVirtualHost *:80
    <VirtualHost *:80>
        Documentroot /home/www/apache/htdocs
    </VirtualHost>
    <VirtualHost *:80>
        DocumentRoot /home/bruce/test1
        ServerName test1.yangwenjun.com
    </VirtualHost>
    <VirtualHost *:80>
            DocumentRoot /home/bruce/test2
        ServerName test2.yangwenjun.com
    </VirtualHost>

        [root@yangwenjun conf]# vi /home/www/tomcat/conf/server.xml
    在server.xml文档的<Engine>......</Engine>中间添加两段<Host>......</Host>
    内容如下:
          <Host name="test1.yangwenjun.com" debug="0" appBase="webapps"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
            <Context path="" docBase="/home/bruce/test1" debug="0"
            reloadable="true" crossContext="true"/>
            <Logger className="org.apache.catalina.logger.FileLogger"
                     directory="logs"  prefix="localhost_log." suffix=".txt"
                timestamp="true"/>
          </Host>

          <Host name="test2.yangwenjun.com" debug="0" appBase="webapps"
           unpackWARs="true" autoDeploy="true"
           xmlValidation="false" xmlNamespaceAware="false">
            <Context path="" docBase="/home/bruce/test2" debug="0"
            reloadable="true" crossContext="true"/>
            <Logger className="org.apache.catalina.logger.FileLogger"
                     directory="logs"  prefix="localhost_log." suffix=".txt"
                timestamp="true"/>
          </Host>

    重启Apache和Tomcat后可以查看架设的虚拟主机的效果.如下图:
    [root@yangwenjun conf]# /home/www/tomcat/bin/startup.sh
    [root@yangwenjun conf]# service httpd restart



  • Sms2003安装步骤
    ---参考microsoft webcast 《SMS企业中的应用》《SMS.2003.实战》和论坛小折兄弟的<Microsoft Systems Management Server 2003 Operation Guide>

    安装win2003企业版 with sp1,msdn版本,hostname:test-dc,升级成DC,域名:test.com
     

    配置dns,增加反向区域,增加ptr指针,NSLOOKUP正常
     

    关闭密码安全策略,添加iis,asp.net,消息队列,BITS服务
     

    打开IIS-web服务扩展允许asp,asp.net,bits,webdav
     

    安装sql2000+sp4




    安装完成打开SQL2000,运行正常,使用net share命令检查共享情况

    扩展Active Directory schema

    安装SMS2003, 选择 Install an SMS primary site ,点击 下一步
    选择 Custom Setup ,点击 下一步
    选择 I Agree ,点击 下一步
    Site code填写001,t点击 下一步
    不勾选 Extend the Active Directory schema ,点击 下一步
    选择 Advanced security ,点击 下一步
    按默认数字(100)点击 下一步
    勾选 Remote Tools ,点击 下一步
    连续点击六次 下一步,完成

    安装SMS2003 SP1补丁
    运行SMS adminstraor console,定制站点边界

    增加角色
     

    点击site status-component status和site system status状态一切正常


    配置发现模式discovery methods

    配置连接帐号connection accounts-client(之前请在ad内建设一个user权限帐号,并且添加计算机安装权限)
     

    配置自动安装客户代理服务client installation methods


    起用agent,硬件发现,软件发现,软件分发

    配置个别计算(看到论坛上有兄弟问如何针对个别的计算机发布软件)
    collections,新建collections



    以上配置完成

    配置所有计算机collections-all system右键-所有任务-update collection membership,OK,刷新all system
     
    安装客户端
    All system右键 所有任务-install client



    等待几分钟

    至此sms2003安装和基本配置完成.
  • 转至winmag(yinjie)

    一、预备
    RMS系统建立在WIN2003上,其由服务端和客户端两部分组成,服务端只能安装在WIN2003上,不能安装在WIN2000或以下版本上。安装RMS需要的东西比较多,首先需要有活动目录支持,其次需要有电子邮件,还需要MSMQ(消息队列)和数据库支持。

    实验环境:
    * 一台WIN2003服务器,文件系统为NTFS。
    * 活动目录已经安装好,域名:ets.com.cn
    * MSMQ和IIS(ASP.NET)均已安装
    * MSDE 2000(我有这代替SQL SERVER,你也可以用SQL SERVER SP3代替)
    * INTERNET连接(这一点很重要!!!)
    满足以上要求,就可以开始安装RMS了。

    二、安装和设置RMS服务端
    1、安装MSDE ,将MSDE下载并解包后,在其安装目录执行:Setup.exe /i setup\sqlrun10.msi INSTANCENAME=RMS DISABLEAGENTSTARTUP=1 SAPWD=password,此命令的含义是建立一个名为RMS的实例的SQL 服务。见图:


    安装完成后,你可以在服务里看到MSSQL$RMS的服务对象。

    将它启动起来。

    2、安装RMS服务端程序
    安装RMS服务端程序很简单,按要求提示做就可以了,标准的MSI安装程序。

    安装好后,会在程序组里产生一个连接。


    3、设置根认证服务器
    打开程序组里的RMS管理项,就会看到系统袅艘桓鯥E,并打开了一个本机的网站。奇怪吗?不奇怪,RMS本身就是通过IE来设置的。

    这就是RMS的全局管理页面,第一次进入该页面,系统会提示你需要建立一个RMS服务器,以后可以在这里进行RMS的管理和增加群集。
    好,我们开始了,选择“在此网站设置RMS”连接,进入设置页。

    在这里你应该可以看到系统用红色的字提示你需要建立一个根认证服务器。如果你之前安装过RMS,这里就不会显示了。
    注意:如果你需要删除RMS根认证服务器,一定要先删除AD里的SCP才可以删除,否则你将不能再次建立根认证服务器。
    好,接下来我们来看看需要配置的东西:
    * 数据库:可以是本地或远程,按要求写入“服务器名\实例名”
    * 服务帐号:可以是本地系统(不安全,不推荐)或合法的域用户(注意:这里的服务帐户不能是当前安装的用户!!)
    * RMS证书保护:可以选择用软件保护,如图(需要设置复杂的密码)

    如果你希望更加安全,也可以使用硬件保护(选择新建密钥对)。

    * 服务器许可方证书:这里要写服务器管理员的信息。
    * 代理服务器设置:因为注册服务器许可方证书需要连接INTERNET,所以这里必须设置(如没有代理,则不需设置)
    OK,完成了,提交。

    设置过程中,检索服务器方许可证书

    设置完成,按提示返回全局管理页

    返回后的全局管理页

    你看到变化了吗?选择“在此网站上管理RMS”,就进入了管理页了。
    提示:在这里还可以改变RMS的服务帐号或从群集中删除该网站。

    在这个页面上,我们现在应可以看到一些服务器方许可证书的信息和过期时间等。先不管这些,看到系统用红色的提示了吗?对,首先需要注册一个服务连接点。OK,GO。。
    点“RMS服务连接点”,进入设置页。按提示进行注册。注册后,也可以今后在这里撤消服务连接点(见删除注意事项)

    返回全局页,现在服务器的设置基本完成了。
    4、以下是管理页的说明:
    1、信任策略,可以配置信任.NET PASSPORT。如果你希望DRM能和以前的IRM一起工作,必须设置。在这里还可以导出证书,或更改信任域信息。

    2、权限策略模板,简单了,是定义企业的权限策略用的,管理员可以通过定义一些现成的策略模板让企业用户直接调用。

    3、日志记录,显示当前日志数据库的位置

    4、外部群集URL,可选项

    5、RM认证用户报告,这里将显示所有使用RMS服务的用户数量(应该是用来做许可授权时用的)

    6、安全设置,在这里是关于安全的设置了,有超级用户组(就是具有管理权限的组),还有证书密钥重设,代理设置以及取消RMS配置(删除前必须先取消配置)。

    7、接下来是认证设置,这里是证书的有效时间

    8、排除策略,排除测量的作用是防止非法用户使用RMS服务,这里可以定义排除的密码箱版本,WINDOWS版本、RM用户证书以及应用程序项。

    OK,讲解到这里,服务器的配置基本结束了,下面让我们休息一会,来看看客户端的配置。
    ---------------
    三、安装和设置RMS客户端
    1、前言
    RMS的客户端和以前在OFFICE2003里提供的IRM的客户端是不一样的,请大家注意区别。
    2、安装
    安装过程同样是简单的。直接安装即可,MSI安装程序。

    3、激活计算机
    进入系统盘下的DRM目录,找到ACTMACHINE命令,执行:actmachine.exe /n /p c:\wrmstemp.cab,下载密码箱。

    下载后的密码厢

    将密码箱解压到SYSTEM32下,然后执行命令:%WINDIR%\System32\rundll32.exe advpack.dll,LaunchINFSection secrep.inf,Install,,N
    安装密码箱,如图

    注意:该操作需要连接INTERNET,如果不是在RMS服务器上操作,此操作将使用RMS服务器作为注册代理注册密码箱。
    4、启动RMS应用程序,获得用户证书
    启动支持RMS的应用程序(如OFFICE2003),创建保护内容并获得用户证书。
    在这里你可以选择使用PASSPORT或WINDOWS域用户。

    登录

    OK,你可以使用RMS了。。累死我了。。
    验证登录信息

    限制管理设置

    保存后的受RMS保护的文本


    四、排错和疑难
    还没完,RMS设置过程比较复杂,因此容易出错,MS提供了一个检查工具来检查--IRMCHECK。你可以安装RMSTOOLSKIT获得它。

    通过它可以看到一些有意义的错误提示,本图就是因为没有把授权群集的URL列入信任站点,导致用户证书下载失败的样本。
    正确的IRMCHECK信息样本:



    --------------
    受限制文本打开的时候.

    查看的当前权限

    被部分保护的文本格式

  • 转至winmag(江小帅)

    一、实验环境配置:
    小帅的主机为XP+sp1系统,安装了Vmware4.0并设置4台虚拟机构成实验环境,(如图ADMT00)



    2个森林:2003domain.com(目标:2003域模式)2000domain.com(源:2000本机模式/混合模式)
    4台计算机:dc01.2003domain.com(2003、DC、GC、DNS)、xpsp1.2003domain.com(XPSP1)、dc02.2000domain.com(2000Server、DC、GC、DNS)、pc02.2000domain.com(2000Server)
    IP依次设置:   10.0.0.1    10.0.0.2   10.0.0.3   10.0.0.4
    域管理员:administrator@2003domain.com 密码:P@ssw0rd
                     administrator@2000domain.com 密码:jzlld
    注:确保两个域时钟一致(使用虚拟机完成域实验这点特别重要)
    ----------------------------------------------
    二、域背景设置:
    目标域:2003domain.com背景:
    1、在2003domain.com域建立一个组织单元:Destination
    2、在Destination内建立用户:
    帐户:Alx.Rose 登录名:Alx@2003domain.com 密码:P@ssw0rd
    源域:2000domain.com背景:
    1、在2000domain.com域内建立一个组织单元:source
    2、在Source内建立用户:
    帐户:Kurt.Cobain 登录名Kurt@2000domain.com 密码:jzlld (不符合目标域密码复杂度要求);
    帐户:Courtney.Love 登录名Courtney@2000domain.com 密码:P@ssw0rd (符合目标域密码复杂度要求);
    3、将Courtney Love设置为Kurt Cobain的经理;
    4、在Source内建立全局组G2000,将Kurt@2000domain.com和Courtney@2000domain.com两个用户加入到该全局组G2000;
    5、在pc02.2000domain.com计算机上建立共享文件夹A1并在其中建立A1.txt,赋予G2000组“Full Controll”权限(共享、安全权限都这么设置);
    6、在pc02.2000domain.com计算机上建立共享文件夹A2并在其中建立A2.txt,赋予Kurt@2000domain.com和Courtney@2000domain.com“Full Controll”权限(共享、安全权限都这么设置);
    注:5、6两步的设置是为了验证SIDHistory是否有效
    ----------------------------------------------
    三、条件准备部分:
    1、将2003domain域提升为2003域模式(SIDHistory要求目标域模式必须为2000本机模式或更高版本);
    2、设置DNS:将两个域的DNS服务器互相设置转发(2003域可以设置条件转发);
    3、使用netdom建立信任关系(完成这个部分的操作有很多种操作方式,可以利用ADMT的信任关系向导、ADDT、netdom等),在dc01.2003domain.com上以
    administrator@2003domain.com登录,安装2003光盘上support tools,运行netdom命令建立双向信任(如图ADMT01)



    并利用各自域的ADDT确认设置;
    注:具体参数请查看帮助,但要注意一定使用/enablesidhistory参数;
        注意命令成功后的提示信息(小帅使用红色框来注明),该信息对后面的SIDHistory的验证帮助太大了!
    4、分别把Domain Admins组加入彼此的Administrator本地组中(如图ADMT02、ADMT03);





    5、在2000domain.com域和2003domain.com域各自的“域控制器策略”--“审核策略”--“审核帐户管理”中设置审核“成功、失败”,如果这步没做的话ADMT向导也会帮助你完成设置;
    6、在目标域2003domain.com启用匿名访问(域控制器策略中-安全设置-本地策略-安全选项-“网络访问:让everyone组的权利应用到匿名用户”),然后使用命令“gpupdate.exe /tatget:computer /force”刷新计算机策略设置;
    7、在目标域2003domain.com中把Everyone组放入“Pre-Windows 2000Compatible Access"组(使用命令net localgroup "pre-windows 2000 compatible access" everyone /add);
    8、在目标域dc01.2003domain.com上安装ADMT2.0到C:\ADMT2.0目录下(小帅也将其添加到管理员桌面上的2003domain.msc中,该MMC中还包含ADUC和DNS);
    9、如果希望将源域2000domain.com的用户迁移至目标域2003domain.com的同时用户的密码也一同迁移,需要在目标域2003domain.com上创建一个密码密钥文件,该密码密钥文件的作用是当你使用ADMT2.0(ADMT1.0不可以)来迁移密码的时候,源域2000domain.com用它来加密用户的密码并传递到目标域2003domain.com(如图ADMT04),



    具体参数大家可以查看帮助。
    10、将该EXWLGODY.pes文件(该文件名为随机的)通过文件共享等方式转移到源域中的dc02.2000domain.com上,小帅把它放在C盘根目录下;
    11、在源域2000domain.com中安装密码迁移DLL。在dc02.2000domain.com虚拟机上的CD-ROM中放入2003光盘。在\I386\ADMT\PWDMIG中运行一个文件名为PWMIG.EXE的程序启动密码迁移DLL安装向导,注意定位到在10步中的C:\EXWLGODY.pes(如图ADMT05)。



    完成操作之后需要重新启动计算机;
    12、修改源域dc02.2000domain.com中本地安全机构的注册表
    HKLM\System\CurrentControllSet\Control\LSA下面有一个名字为AllowPasswordExport的记录项,把这个值由0改成1。并创建以个新的REG_DWORD值项(双字节值),名为TcpipClientSupport,把这个值也设为1(以上两值如果没有建立,第一次迁移向导会做出提示,并帮助你建立,因为迁移SID历史需要以上设置)。设置好后仍然需要重新启动计算机。
    经过以上的准备工作迁移的条件设置基本完成。这里的抓图不如小帅写《ADMT迁移案例第一版》中的多了,希望大家多多参考ADMT帮助。
    ----------------------------------------------
    四、迁移全局组部分:
    先迁移2000domain.com域中的全局组G2000到2003domain.com域:
    注:肯定有人会问为什么要先迁移全局组?先迁移帐户不行吗?全局组中的成员只能是来自其各自域中的用户。因此,当将用户帐户从一个域迁移到其他域时,通过 Active Directory 迁移工具在目标域中创建的新帐户不能是源域中全局组的成员。当迁移全局组时,组从属关系将被还原。然而,如果在迁移全局组之前迁移用户,那么该用户将可能通过迁移帐户登陆到目标域,而该迁移用户帐户不具备任何组从属关系。因此在该环境中,要确保顺利迁移,应在迁移Kurt和Courtney两个用户之前迁移全局组GJZLLD。以下只对关键设置做图列分析
    1、使用administrator@2003domain.com在dc01.2003domain.com上登录并运行ADMT;
    2、开启“组帐户迁移向导”,“下一步”;
    3、“现在迁移”(如果在实际环境中推荐大家一定要选“测试迁移设置,然后再迁移”),“下一步”;
    4、选中源域为2000domain目标域为2003domain,“下一步”;
    5、添加要迁移的全局组G2000,“下一步”;
    6、在目标OU栏中定位到2003domain.com域中的destination组织单元中,“下一步”;
    7、一定要选中“将组SID迁移到目标域”复选框以保证该G2000组的SID被迁移到2003domain.com域(如图AGMTG01的红色标识区域),



    其他复选框不用我多说了应该很好理解,“下一步”;
    8、弹出对话框(如图ADMTG02),



    这个2000domain$$$的本地组需要在2000domain.com域中建立。当然如果在“三、条件准备部分”自己手工建立,该对话框不会出现。一定要选“是”;
    9、在“从迁移中排除具体对象的属性”中定义你所需要在迁移时排除的属性,小帅我什么都不定义,“下一步”;
    10、输入在源域2000domain.com中有权利完成此操作的用户帐户密码,帐户:administrator密码:jzlld,“下一步”;
    11、在“命名冲突”中设置必要设置,小帅使用默认设置,“下一步”;
    12、“完成”组帐户迁移向导,查看日志信息(如图ADMTG03);



    ---------------------------------------------
    五、验证SIDHistory的有效性#%&*@#$%^^
    方法一、在2000domain.com和2003domain.com两个域的DC上分别安装ADSI工具并将其添加到各自administrator的桌面上的2000domain.msc和2003domain.msc中,然后比较2000domain\G2000的objectSID属性值与2003domain\G2000的SIDhistory属性值是一致的(如图ADMTG04、ADMTG5)。





    证明SIDHistory确实被迁移到目标域了。
    注:2003ADSI可以使用16进制hexadecimal、8进制octal、10进制decimal、2进制binary来显示SID信息,而2000只使用16进制hexadecimal显示SID信息,以上两图使用的是16进制hexadecimal进行的比较。
    方法二、将Alx@2003domain.com加入到2003domain.com\G2000全局组中(如图ADMTG06),



    然后使用该帐户在xpsp1.2003domain.com上登录并测试是否能够连接到\\pc02.2000domain.com\A1的共享,因为Alx@2003domain.com是2003domain\G2000组的成员,该组具有SIDHistory,并且该SIDHistory的值与2000domain\G2000的SID是一致的。但结果却出现"拒绝访问"的提示(如图ADMTG07)。



    使用Alx@2003domain.com直接在pc02.2000domain.com登录“拒绝访问”依旧(在“域背景设置”中的5、6步小帅的操作肯定没有问题)。为什么呢???
    解决该问题的过程:
    小帅使用了WhoamI.exe工具(2000 Resource Kits)在登录的计算机上测试,该工具可以查看一个用户登录之后封装在登录令牌中SIDs。以下是Alx@2003domain.com在
    xpsp1.2003domain.com和pc02.2000domain.com登录之后的令牌封装SIDs比较(感谢WINMAG论坛的archangel兄弟,没他的提示我根本就没注意Whoami有/all参数):
    ------------------------------------------
    Alx@2003domain.com在xpsp1.2003domain.com登录之后的令牌封装:
    C:\>whoami.exe /all
    [User]     = "2003DOMAIN\Alx"  S-1-5-21-447874980-3871260856-2932105411-1107
    [Group  1] = "2003DOMAIN\Domain Users"  S-1-5-21-447874980-3871260856-2932105411
    -513
    [Group  2] = "Everyone"  S-1-1-0
    [Group  3] = "BUILTIN\Users"  S-1-5-32-545
    [Group  4] = "2003DOMAIN\G2000"  S-1-5-21-447874980-3871260856-2932105411-1109
    [Group  5] = "2003DOMAIN\G2000"  S-1-5-21-861567501-838170752-839522115-1107(这个是SIDHistory)
    [Group  6] = "LOCAL"  S-1-2-0
    [Group  7] = "NT AUTHORITY\INTERACTIVE"  S-1-5-4
    [Group  8] = "NT AUTHORITY\Authenticated Users"  S-1-5-11

    (X) SeChangeNotifyPrivilege         =
    (O) SeShutdownPrivilege             =
    (X) SeUndockPrivilege               =
    -----------------------------------------------
    Alx@2003domain.com在pc02.2000domain.com登录之后的令牌封装:
    C:\>whoami.exe /all
    [User]     = "2003DOMAIN\Alx"  S-1-5-21-447874980-3871260856-2932105411-1107
    [Group  1] = "2003DOMAIN\Domain Users"  S-1-5-21-447874980-3871260856-2932105411
    -513
    [Group  2] = "Everyone"  S-1-1-0
    [Group  3] = "BUILTIN\Users"  S-1-5-32-545
    [Group  4] = "NT AUTHORITY\INTERACTIVE"  S-1-5-4
    [Group  5] = "NT AUTHORITY\Authenticated Users"  S-1-5-11
    [Group  6] = "LOCAL"  S-1-2-0
    [Group  7] = "2003DOMAIN\G2000"  S-1-5-21-447874980-3871260856-2932105411-1109

    (X) SeChangeNotifyPrivilege =
    (X) SeUndockPrivilege =
    -----------------------------------------------
    结论:
    Alx@2003domain.com在xpsp1.2003domain.com登录的时候令牌中封装了G2000的SIDHistory了,可还是不能访问(如图ADMTG07),而当Alx@2003domain.com在pc02.2000domain.com上登录的时候令牌里却根本没有封装G2000的SIDHistory郁闷了好几天,翻阅了微软的KB还有一些相关的ADMT技术文档,最后知道原来原因是:FilterSIDs的禁用与否!!!这也就是小帅为什么要在“条件准备部分-3”中强调了命令运行完的提示信息的重要性并用红色框体标识。以下给出一些FilterSIDs的相关帮助信息(太多了,小帅只摘录重要部分):
    ----------------------------------------
    《Microsoft KB322970》部分摘录:
    Additional sIDHistory Information
    The sIDHistory is a multivalued attribute of security principals in the Active 
    Directory that may hold up to 850 values. To provide backward-compatibility with 
    domain controllers that are running earlier versions of Windows, the sIDHistory attribute is only available in domains that are operating at the functional 
    level of Windows 2000 Native mode or later.
    Some third-party vendor products make it possible to turn on sIDHistory in mixed mode domains. These claims do not represent the legitimate use of public 
    APIs. Domain administrators that use such tools risk putting their Active 
    Directory deployment in an unsupported state.
    During intra-forest migrations, LDAP_Rename is responsible for moving objects. Because of this, migrated objects retain important identification data, 
    including the objectGUID and password. This is not the case for inter-forest migrations, which call DSAddSidHistory to populate the attribute in the target domain. Password migration may be turned on for inter-forest cloning, but the 
    objectGUID is always lost during this type of migration.

    In both cases, migrated objects are assigned a new sID by the target domain. The original sID is added to the sIDHistory attribute of the migrated object in the new domain. After this occurs, the sIDHistory attribute may not be modified or deleted by using the standard Active Directory administration tools. This is not permitted because the sIDHistory attribute is owned by the SAM. It is possible to clear the sIDHistory by using a script or a non-public Microsoft internal 
    tool. 

    Note that the sIDHistory is a transitional tool and is not meant to exist 
    indefinitely attached to security principals. Although migrating the sIDHistory can significantly ease and simplify the domain migration process, there are important security ramifications that must be considered before you implement the sIDHistory in a production enterprise. 

    A Windows 2000 security token can hold a maximum of 1,023 sIDs, including sIDHistory and group sIDs. Kerberos is also limited because Windows 2000 
    Kerberos has a 73-sID buffer. After you apply Windows 2000 Service Pack 2 (SP2), this size can be doubled by an enterprise-wide registry change. 
    ----------------------------------------------------------------
    《SIDHistory白皮书》一文部分摘录:
    Configure SID Filtering
    The administrator of the trusting domain applies SID filtering to filter out 
    migrated SIDs stored in SIDHistory from specific domains. For example, where an 
    external trust relationship exists so that the noam domain trusts the acquired domain, an administrator of the noam domain can apply SID filtering to the 
    acquired domain, which allows all SIDs with a domain SID from the acquired domain to pass, but all other SIDs (such as those from migrated SIDs stored in SIDHistory) to be discarded.Requirements
    ? Credentials: Domain Admins of trusting domain.
    ? Tool: Netdom.exe (Support tools)
    ------------------------------------------------------------- 
    《Windows 2003 Active Directory新增特性》一文部分摘录:
    为了防止特权提升攻击,Windows Server 2003将过滤SID以确保它们与受信任的森林中的某个域相关。这样还确保了其他森林仅颁发预定的域的授权信息,而不会传入任何未经授权的SID。 SID过滤通过“森林信任”自动启用。在Windows 2000 SP4中,SID过滤对外部信任关系也是默认启用的。如果您混合安装了早于Windows 2000 SP4 DC的版本和更高版本,那将很有趣;因为结果将取决于您使用哪个DC来创建信任。
    重要提示:如果将用户迁移到一个使用SID History的受信任的域,您必须手动禁用SID过滤。
    -------------------------------------------------------------
    怪不得所有的微软的ADMT迁移案例包括Winmag杂志2004年第2期中〈活动目录迁移工具-ADMT2.0〉一文统统都是从NT4.0ADMT到2003。NT4.0域默认根本不做FilterSIDs的操作。当然没必要验证了。:)

    netdom到目前为止有3个版本(2000/XP/2003)应该使用哪一个呢?小帅分别尝试了,在2000/2003的support中的netdom根本没有/FilterSIDs参数(为什么我也不知道,我的XP虚拟机是SP1的),如果硬是使用一定会出现参数错误,应该使用XP的版本,于是在xpsp1.2003domain.com上安装了XP的support工具,使用administrator@2003domain.com在xpsp1.2000domain.com登录运行命令(如图ADMTG08)



    然后使用Alx@2003domain.com在xpsp1.2003domain.com(pc02.2000domain.com也可以)上登录,访问\\pc02.2000domain.com\A1(如图ADMTG09)。



    访问成功并可以完全控制(幽Winmag论坛一默!呵呵)SIDHistory确实在起作用!!!!!!!
    ---------------------------------------------
    六、迁移用户部分:
    迁移源域2000domain.com的两个用户帐户Kurt@2000domain.com和Courtney@2000domain.com到目标域2003domain.com\destination组织单元
    当利用ADMT迁移用户帐户出现“密码选项”的时候要注意,因为这里要迁移密码了,所以如果选择“复杂密码”或“与用户名相同”,则用户的密码会统一的保存到一个文本文件。因为我们在“条件准备部分9、10”项已经选择了要迁移密码的,所以在这里我们选择最下面的一项“迁移密码”并在“密码迁移源DC”中定位dc02也就是dc02.2000domain.com(如图ADMTU01)。



    注意SID历史的选择(如图ADMTU02),



    完成操作的日志(如图ADMTU03)。



    迁移之后Kurt@2003domain.com的经理也自动更改为Courtney@2003domain.com了(如图ADMTU04)。



    七、验证SIDHistory部分:
    方法一:使用ADSI比较,这个在上面迁移组的时候有讨论!不复述了;
    方法二:让Kurt@2003domain.com在网络上登录,然后访问\\pc02.2000domain.com\A2文件夹,因为在“2000domain.com域背景”部分已经设置了A2的共项权限Kurt@2000domain.com和Courtney@2000domain.com“Full Controll”权限(共享、安全权限都这么设置),由于FilterSIDs的禁用,所以SIDHitory可以正常使用。
    ----------------------------------------
    八、迁移计算机帐户部分:
    注:在迁移计算机帐户的时候使用administrator@2003domain.com帐户来运行迁移向导往往会在迁移的最后出现错误(如图ADMTC01),



    原因是administrator@2000domain.com虽然已经被加入到2000domain\Domain Admins组了,但对2000domain.com域中每台计算机的帐户操作权限不够,所以在最后让目标计算机重新启动的时候出现“拒绝访问,安装代理的时候失败了”的提示(ADMT2.0不用额外在目标计算机上安装代理)。解决办法很简单,让administrator@2000domain.com在dc01.2003domain.com上登录然后运行ADMT2.0来迁移计算机帐户。
    1、在“转换对象”的设置步骤中,可以根据需要做适当选择(如图ADMTC02);



    2、在“安全性转换选项”中,选择“替换”,也可以根据需要选择“添加”和“删除”;
    3、如果在“转换对象”步骤中,选择了“用户权利”并在上一步中选择了“替换”,在这一步中将出现提示(如图ADMTC03);



    4、设置“计算机机选项”中目标计算机重新启动的时间,1分钟及命名的一些设置(如图ADMT04);



    5、当所有设置完成之后出现代理的安装及运行对话框(如图ADMTC05),



    在目标计算机pc02.2000domain.com上出现倒记时提示(如图ADMT06)



    6、重新启动之后,以administrator@2003domain.com登录,在计算机属性--网络标识;
    7、在c:\B1和c:\B2的权限设置上也有了相应的变化(如图ADMTC07),



    这是因为我们在“转换对象”的设置中选择了“文件和文件夹”还有“共享”;
    ---------------------------------------
    九、后续处理部分:
    1、断开信任关系,可以使用ADDT或netdom命令:
    “netdom trust 2000domain.com /uo:administrator /po:jzlld /d:2003domain.com /ud:administrator /pd:P@ssw0rd /remove /twoway”;
    2、卸载dc02.2000domain.com,如果有必要可以重新安装OS,然后再加入到2003domain.com域中,因为源域中的DC是不能够以DC身份迁移目标域的。
    十、删除SID历史部分
    由于当整个迁移完成之后,迁移过来的对象都被赋予了新的SID,并且源域2000domain.com也已经彻底消失了,SIDHistory已经没有存在的必要。利用一个脚本文件将指定对象的SIDHistory属性值删除。比如Kurt@2003domain.com对象的SIDHistory属性值为Kurt@2000domain.com的objectSID属性值“01 05 00 00 00 00 00 05 15 00 00 00 0D 7A 5A 33 80 78 F5 31 43 17 0A 32 51 04 00 00”(16进制),我们可以利用KB295758中的脚本来删除该SIDHistory属性的值,运行操作如下:
    1、将该脚本ClearSidHistory.vbs拷贝到C盘
    2、运行命令(如图ADMTS01)



    3、然后再利用ADSI查看一下对象Kurt@2003domain.com的属性SIDHistory的值为“Not Set”(如图ADMTS02)



    4、利用此脚本将所有SIDHistory删除

  • ntdsutil夺取FSMO

    2006-08-24

    Tag:
    c:>ntdsutil
    ntdsutil: metadata cleanup
    metadata cleanup: select operation target
    select operation target: connections
    server connections: connect to domain test.com
    select operation target: list sites
    Found 1 site(s)
    0 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
    select operation target: select site 0
    Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
    No current domain
    No current server
    No current Naming Context
    select operation target: List domains in site
    Found 1 domain(s)
    0 - DC=test,DC=com
    Found 1 domain(s)
    0 - DC=test,DC=com
    select operation target: select domain 0
    Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
    Domain - DC=test,DC=com
    No current server
    No current Naming Context
    select operation target: List servers for domain in site
    Found 2 server(s)
    0 - CN=A,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=te
    st,DC=com
    1 - CN=B,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=te
    st,DC=com
    select operation target: select server 0
    select operation target: quit
    metadata cleanup:Remove selected server

    出现对话框,按“确定“删除A主控服务器。
    metadata cleanup:quit
    ntdsutil: quit

    然后在Active Directory users and computers中的Domain controllers中删除A服务器对象
    再到Active Directory Sites and Service中删除A服务器对象


    二、在额外控制器(B)上通过ntdsutil.exe工具夺取五种FMSO;
    c:>ntdsutil
    ntdsutil: roles
    fsmo maintenance: Select operation target
    select operation target: connections
    server connections: connect to domain test.com
    select operation target: list sites
    Found 1 site(s)
    0 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
    select operation target: select site 0
    Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
    No current domain
    No current server
    No current Naming Context
    select operation target: List domains in site
    Found 1 domain(s)
    0 - DC=test,DC=com
    select operation target: select domain 0
    Site - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=test,DC=com
    Domain - DC=test,DC=com
    No current server
    No current Naming Context
    select operation target: List servers for domain in site
    Found 1 server(s)
    0 - CN=B,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=te
    st,DC=com
    select operation target: select server 0
    select operation target: quit
    fsmo maintenance:Seize domain naming master
    出现对话框,按“确定“
    fsmo maintenance:Seize infrastructure master
    出现对话框,按“确定“
    fsmo maintenance:Seize PDC
    出现对话框,按“确定“
    fsmo maintenance:Seize RID master
    出现对话框,按“确定“
    fsmo maintenance:Seize schema master
    出现对话框,按“确定“
    fsmo maintenance:quit
    ntdsutil: quit



    三、设置额外控制(B)为GC(全局编录),
    Administrative Tools-->Active Directory Sites and Services-->Sites-->Default-First-Site-Name-->Servers-->B(额外控制器)-->NTDS Settings-->右键-->属性-->在”全局编录“前面打勾-->确定-->重新启动服务器

    五、重新安装A服务器:
    在A服务器安装windows,运行Dcpromo升成额外的域控制器;如果你需要使A担任五种FMSO角色,通过ntdsutil工具进行角色转换就行了。 
  • 概要
    本文介绍在域控制器降级失败后,如何删除 Active Directory 中的数据。

    警告:如果使用“ADSI 编辑”管理单元、LDP 实用工具或任何其他 LDAP 版本 3 客户端,并且不恰当地修改了 Active Directory 对象的属性,则可能造成严重问题。要解决这些问题,您可能需要重新安装 Microsoft Windows 2000 Server、Microsoft Windows Server 2003、Microsoft Exchange 2000 Server 或 Microsoft Exchange Server 2003,或者 Windows 和 Exchange 二者都需要重新安装。Microsoft 不保证能够解决因为 Active Directory 对象属性修改不当而导致的问题。修改这些属性需要您自担风险。

    Active Directory 安装向导 (Dcpromo.exe) 用于将服务器提升为域控制器,以及将域控制器降级为成员服务器(或者在该域控制器是域中的最后一个域控制器时,将其降级为工作组中的独立服务器)。作为降级过程的一部分,此向导会将该域控制器的配置数据从 Active Directory 中删除。此数据的形式是“NTDS 设置”对象,在“Active Directory 站点和服务”中作为服务器对象的一个子对象存在。

    该信息位于 Active Directory 中的以下位置:
    CN=NTDS Settings,CN=<servername>,CN=Servers,CN=<sitename>,CN=Sites,CN=Configuration,DC=<domain>...
    “NTDS 设置”对象的属性包括:代表如何针对域控制器的复制伙伴标识域控制器的数据、计算机中保存的名称上下文、域控制器是否为全局编录服务器,以及默认查询策略。“NTDS 设置”对象也是一个容器,其中可以包含代表域控制器的直接复制伙伴的子对象。该数据是域控制器在环境中运行所必需的,但域控制器降级后就不再使用该数据了。

    如果未正确删除“NTDS 设置”对象(例如,未从降级尝试中正确删除“NTDS 设置”对象),管理员可以使用 Ntdsutil.exe 实用工具手动删除“NTDS 设置”对象。以下步骤列出了在特定域控制器的 Active Directory 中删除“NTDS 设置”对象的过程。在每个 Ntdsutil 菜单上,管理员可以键入 help 以了解有关可用选项的更多信息。

    警告:在手动删除任何服务器的“NTDS 设置”对象之前,管理员还必须确保在降级之后已进行了复制。Ntdsutil 实用工具使用不当可能导致 Active Directory 功能部分或全部丧失。

    返回页首
    过程
    1. 单击“开始”,指向“程序”,指向“附件”,然后单击“命令提示符”。
    2. 在命令提示符处,键入 ntdsutil,然后按 Enter 键。
    3. 键入 metadata cleanup,然后按 Enter 键。根据所给出的选项,管理员可以执行删除操作,但在实施删除之前还必须指定另外一些配置参数。
    4. 键入 connections,然后按 Enter 键。此菜单用于连接将发生这些更改的具体服务器。如果当前登录的用户没有管理权限,可以在建立连接之前指定要使用的替代凭据。为此,请键入 set creds DomainNameUserNamePassword,然后按 Enter 键。如果密码为空,则键入 null 作为密码参数。
    5. 键入 connect to server servername,然后按 Enter 键。然后出现一条确认消息,说明已成功建立该连接。如果出现错误,则确认连接中所用的域控制器是否可用,以及您提供的凭据对该服务器是否有管理权限。

    注意:如果尝试连接的服务器正是要删除的服务器,那么在尝试删除第 15 步提到的服务器时,将显示以下错误信息:
    Error 2094. The DSA Object cannot be deleted0x2094
    6. 键入 quit,然后按 Enter 键。将出现清除元数据菜单。
    7. 键入 select operation target,然后按 Enter 键。
    8. 键入 list domains,然后按 Enter 键。将显示一个列出目录林中所有域的列表,每一个域都有一个关联的编号。
    9. 键入 select domain number,然后按 Enter 键;其中 number 是与要删除的域相关联的编号。您选择的域用于确定要删除的服务器是否为该域的最后一个域控制器。
    10. 键入 list sites,然后按 Enter 键。将显示一个站点列表,每个站点都有一个关联的编号。
    11. 键入 select site number,然后按 Enter 键;其中 number 是与要删除的域相关联的编号。将出现一条确认消息,其中列出了所选的站点和域。
    12. 键入 list servers in site,然后按 Enter 键。将显示一个列出站点中所有服务器的列表,每个服务器都有一个关联的编号。
    13. 键入 select server number,其中 number 是与要删除的服务器关联的编号。将出现一条确认消息,其中列出所选的服务器、该服务器的域名服务器 (DNS) 主机名,以及要删除的服务器的计算机帐户的位置。
    14. 键入 quit,然后按 Enter 键。将出现清除元数据菜单。
    15. 键入 remove selected server,然后按 Enter 键。将出现一条确认消息,说明删除成功完成。如果出现以下错误信息:
    Error 8419 (0x20E3)
    The DSA object could not be found
    则说明“NTDS 设置”对象可能已从 Active Directory 中删除,原因是其他管理员删除了该“NTDS 设置”对象,或者在运行 DCPROMO 实用工具成功删除对象后再执行一次此操作。

    注意:尝试绑定到要删除的域控制器时,也可能会出现此错误。Ntdsutil 必须绑定到要用 metadata cleanup 删除的域控制器以外的其他域控制器。
    16. 在每个菜单中键入 quit,退出 NTDSUTIL 实用工具。将出现一条确认消息,说明连接已成功断开。
    17. 在 DNS 的 _msdcs.root domain of forest 区域中删除 cname 记录。假定要重新安装并重新提升 DC,因此使用新的 GUID 和 DNS 中匹配的 cname 记录来创建新的“NTDS 设置”对象。您不希望现有 DC 使用旧的 cname 记录。

    最佳做法是删除主机名和其他 DNS 记录。如果已超出为脱机服务器分配的动态主机配置协议 (DHCP) 地址上所剩的租用时间,另一个客户端即可获得问题 DC 的 IP 地址。
    既然“NTDS 设置”对象已删除,因此可以删除计算机帐户、FRS 成员对象、_msdcs 容器中的 cname(或别名)记录、DNS 中的 A(或主机)记录、已删除的子域的 trustDomain 对象以及域控制器。

    Windows 2000 Server 和 Windows Server 2003 的 Windows 支持工具功能中都附带有 Adsiedit 实用工具。要安装 Windows 支持工具,请按照下列步骤操作:" Windows 2000 Server:在 Windows 2000 Server 安装光盘上,打开 Support\Tools 文件夹,双击“Setup.exe”,然后按照屏幕上的说明操作。
    " Windows Server 2003:在 Windows Server 2003 安装光盘上,打开 Support\Tools 文件夹,双击“Suptools.msi”,单击“安装”,然后按照 Windows 支持工具安装向导中的步骤操作以完成安装。
    1. 使用 ADSIEdit 删除计算机帐户。为此,请按照下列步骤操作: a. 单击“开始”,单击“运行”,在“打开”框中键入 adsiedit.msc,然后单击“确定”。
    b. 展开“域 NC”容器。
    c. 展开“DC=Your Domain Name, DC=COM, PRI, LOCAL, NET”。
    d. 展开“OU=Domain Controllers”。
    e. 右键单击“CN=domain controller name”,然后单击“删除”。
    如果在试图删除 DSA 对象时出现“DSA object cannot be deleted”错误信息,请更改 UserAccountControl 值。要更改 UserAccountControl 值,请在 ADSIEdit 中右键单击该域控制器,然后单击“属性”。在“请选择要查看的属性”下,单击“UserAccountControl”。单击“清除”,将该值更改为 4096,然后单击“设置”。现在您可以删除该对象了。

    注意:删除计算机对象时,也将删除 FRS 订户对象,因为它是计算机帐户的子对象。
    2. 使用 ADSIEdit 删除 FRS 成员对象。为此,请按照下列步骤操作: a. 单击“开始”,单击“运行”,在“打开”框中键入 adsiedit.msc,然后单击“确定”。
    b. 展开“域 NC”容器。
    c. 展开“DC=Your Domain, DC=COM, PRI, LOCAL, NET”。
    d. 展开“CN=System”。
    e. 展开“CN=File Replication Service”。
    f. 展开“CN=Domain System Volume (SYSVOL share)”。
    g. 右键单击要删除的域控制器,然后单击删除。

    3. 在 DNS 控制台中,使用 DNS MMC 删除 DNS 中的 A 记录。A 记录也称为“主机”记录。要删除 A 记录,请右键单击 A 记录,然后单击“删除”。还要删除“_msdcs”容器中的 cname(也称为“别名”)记录。为此,请展开“_msdcs”容器,右键单击 cname,然后单击“删除”。

    重要说明:如果这是一台 DNS 服务器,请在名称服务器选项卡中删除对该 DC 的引用。为此,在 DNS 控制台中,在正向搜索区域下单击该域名,然后从名称服务器选项卡中删除该服务器。

    注意:如果有反向搜索区域,也要将服务器从这些区域中删除。
    4. 如果删除的计算机是子域中的最后一个域控制器,而且该子域也已删除,则使用 ADSIEdit 删除该子域的 trustDomain 对象。为此,请按照下列步骤操作: a. 单击“开始”,单击“运行”,在“打开”框中键入 adsiedit.msc,然后单击“确定”。
    b. 展开“域 NC”容器。
    c. 展开“DC=Your Domain, DC=COM, PRI, LOCAL, NET”。
    d. 展开“CN=System”。
    e. 右键单击“Trust Domain”对象,然后单击“删除”。

    5. 使用“Active Directory 站点和服务”删除域控制器。为此,请按照下列步骤操作: a. 启动“Active Directory 站点和服务”。
    b. 展开“站点”。
    c. 展开服务器的站点。默认站点为“Default-First-Site-Name”。
    d. 展开“服务器”。
    e. 右键单击域控制器,然后单击删除。

    另外,请考虑以下几点:" 如果删除的域控制器曾经是一台全局编录服务器,请评估指向这台脱机全局编录服务器的应用程序服务器是否必须指向一台活动的全局编录服务器。
    " 如果删除的 DC 曾经是一台全局编录服务器,请评估是否必须提升其他全局编录,以解决站点、域或林全局编录的负载问题。
    " 如果删除的 DC 曾经担任 Flexible Single Master Operation (FSMO) 角色,请将这些角色重新分配给一台活动 DC。
    " 如果删除的 DC 曾经是一台 DNS 服务器,请更新所有成员工作站、成员服务器以及其他可能使用过这台 DNS 服务器进行名称解析的 DC 上的 DNS 客户端配置。如果需要,请修改 DHCP 作用域,以反映出 DNS 服务器已删除。
    " 如果删除的 DC 曾经是一台 DNS 服务器,请更新所有其他可能指向该 DC 以进行名称解析的 DNS 服务器上的转发器设置和委派设置。
  • 转自winmag

    使用ntdsutil工具删除已不存的的DS对象的一个例子
    (本例中假定要删除的对象为一台已崩溃的DC,其FQDN为addemo.acme.com,另一DC的FQDN为adddc.acme.com)

    C:\>ntdsutil
    ntdsutil: metadata cleanup - 清理不使用的服务器的对象
    metadata cleanup: select operation target - 选择的站点,服务器,域,角色和命名上下文
    select operation target: connections - 连接到一个特定域控制器
    server connections: connect to server adddc - 连接到adddc
    绑定到 adddc ...
    用本登录的用户的凭证连接 adddc。
    server connections: quit - 返回上一层目录

    select operation target: list site - 在企业中列出站点(找到1个站点,标识为0)
    找到 1 站点
    0 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=acme,DC=com
    select operation target: select site 0 - 将标识为 0 的站点定为所选站点
    站点 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=acme,DC=com
    没有当前域
    没有当前服务器
    当前的命名上下文

    select operation target: list domains - 列出所有包含交叉引用的域
    找到 1 域
    0 - DC=acme,DC=com
    select operation target: select domain 0 - 将标识为 0 的域定为所选域
    站点 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=acme,DC=com
    域 - DC=acme,DC=com
    没有当前服务器
    当前的命名上下文

    select operation target: list servers for domain in site - 列出所选域和站点中的服务器(找到两个:0-adddemo.acme.com;1-adddc.acme.com)
    找到 2 服务器
    0 - CN=ADDEMO,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=acme,DC=com
    1 - CN=ADDDC,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=acme,DC=com
    select operation target: select server 0 - 将标识为 0 的服务器(addemo)定为所选服务器——也就是要删除的DC
    站点 - CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=acme,DC=com
    域 - DC=acme,DC=com
    服务器 - CN=ADDEMO,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=acme,DC=com
    DSA 对象 - CN=NTDS Settings,CN=ADDEMO,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configur
    DNS 主机名称 - ADdemo.acme.com
    计算机对象 - CN=ADDEMO,OU=Domain Controllers,DC=acme,DC=com
    当前的命名上下文

    select operation target: quit - 返回上一层目录

    metadata cleanup: remove select server - 从所选服务器上删除 DS 对象
    在弹出的对话提示框上选择“是”,
    “CN=ADDemo,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=acme,DC=com”删除了,从服务器“adddc”
    现在,addemo.acme.com这个DS对象将和你的AD说永别了:)

    同时记得:还要从ADSIEDIT中删除相关的一些对像
  • 可以尝试重新建立GC数据库:运行nltest /dsgetdc:你的域名 /gc /force

  • 转至http://www.it-exam.net

    目录
    一、本次试验的相关环境说明
    1.1 软件环境
    1.2 硬件环境
    1.3 网络环境
    二、 设置共享磁盘.
    2.1 用PLAINMAKER.EXE生成共享磁盘文件
    三、DNS SERVER的安装配置
    3.1 略...
    四、DC部署
    4.1 略
    五、部署Cluster
    1、安装第一个群集节点
    2、安装第二个群信节点
    六、参考资料

    一、将本次试验的相关环境说明如下:
    1.1 软件环境:
    1.1.1 群集中的计算机DC01、CLUST01、CLUST02均安装了Microsoft Windows ADV Server 2000 且打好sp4及最新补丁
    1.1.2 在DC01上安装了DNS服务(请暂时不要升级为域控制器,不然以后安装VMWARE可能会有问题)。
    1.1.3. 域名:test.com
    1.1.4. DC01[DC],CLUST01、CLUST02
    1.1.5. 一个域级帐户:administrator (也可新建一个有管理员权限的帐号做为群集帐号)
    1.1.6 VMWare.GSX.Server.For.Windows.v3.1.

    1.2 硬件配置:
    1.2.1 实验电脑:ADM XP1700+ 512M RAM 120G HDD.
    1.2.2. 存储设备控制器。虚拟了共享磁盘,包括仲裁磁盘.磁盘大小分别为Quorum Disk[200M],ShareDisk[2G]
    1.2.3. 群集中的每个节点拥有两个PCI网络适配器。分别为 Public(“本地联接2”),Private(”本地联接3“) .
    1.2.4. 一台电脑、两台用VMWARE虚拟出来的WINDOWS ADV 2000操作系统。

    1.3 网络配置
    DC01 (注意请选安装VMWARE后,再升级为域控制器)

    DC01:(“vmware net 1”)--------这个网卡为由VMWARE安装后生成的网卡;
    Ipaddress:192.168.10.1
    Subnet Mask: 255.255.255.0
    DNS: 192.168.10.1

    CLUST01(由VMWARE虚拟出来的操作系统)
    CLUST02-PUBLIC(“本地联接2”)
    Ipaddress:192.168.10.3
    Subnet Mask: 255.255.255.0
    DNS: 192.168.10.1
    GW: 192.168.10.1
    CLUST02-PRIVE (“本地联接3”)
    Ipaddress:192.168.20.3
    Subnet Mask: 255.255.255.0

    CLUST01-PUBLIC(“本地联接2”)
    Ipaddress:192.168.10.2
    Subnet Mask: 255.255.255.0
    DNS: 192.168.10.1
    GW: 192.168.10.1

    CLUST01-Private(“本地联接3”)
    Ipaddress:192.168.20.2
    Subnet Mask: 255.255.255.0

    注:1.dc01做为DNS服务器;网卡的模式全部选择为"host-only"的方式;

    二、设置共享磁盘
    2.1 共享磁盘的配置
    2.1.1.创建sharedisk.pln,quorum.pln
    如图
    uploads/200505/15_112150_1_plainmaker.jpg

    uploads/200505/15_114321_2_file.jpg


    2.1.2 在VMWARE中的主机配置中:添加—出现”add hardware wizard”界面,next---出现”hardware type”界面,选择hard disk,next---选择“使用一个已存在的磁盘,分别增加shareddisk.pln和quorum.pln 这两个磁盘文件;注意:然后,选择“高级”---磁盘的SCSI类型号为:scsi1:0和scsi1:1 (因为我的虚拟的操作系统是SCSI磁盘的,所以SCSI0:0等已经被用了,而且群集好像是不能把“仲裁盘和共享盘与主机操作系统是同一个SCS卡上)。
    2.1.3 注意:生成的磁盘文件的位置最好不要改,如果,改了,则请您要修改.dat文件中“ACCESS”,改为您正确的路径。
    2.1.4 修改由VMWARE的操作系统文件*.vmx 加入以下几句:
    disk.locking="FALSE"
    scsi1:0.SharedBuse="Virtual"
    scsi1:1.ShareBuse="Virtual"
    uploads/200505/15_153132_vmware.jpg

    2.1.5 分别在两台电脑上增加这两个磁盘(CLUST01和CLUST02)
    uploads/200505/15_152922_vm_disk.jpg

    uploads/200505/15_153013_vm_disk1.jpg

    2.1.6.在CLUST01,CLUST02中配置quorum.pln,Sharedisk.pln
    分别在两台虚拟的电脑中(CLUST01、CLUST02)的:磁盘管理里面将两个 SCSI 盘转换为 basic 磁盘,创建主分区,
    格式化为 NTFS, quorum disk设置为 e 分区,卷标Quoumk , 2G 的那个设置为 f 分区,卷标 Sharedisk (注意:请不要升级为动态磁盘)
    三、在DC01上安装DNS服务。
    略............ (不明白的请留言)
    四、.提升DC01电脑为域控制器
    4.1. 在DC01中安装VMWARE GSX 3。1,和以上的一切操作;
    4.2 运行:dcpromo 一切按默认操作(域名: test.com)
    完成后重启机器

    五、群集的部署
    5.1. 部署
    把CLUST01、CLUST02电脑加入到TEST.COM域中去。然后重启电脑。
    5.2 网络设置:
    分别把CLUST01、CLUST02电脑的NETBIOS,关掉(TCPIP----高级----WINS)
    5.3 在CLUST01中进入“控制面板----增加移除程序----组件----群集"

    输入群集的名称:clustserver
    uploads/200505/15_115029_clust01.jpg

    uploads/200505/15_115340_clust02.jpg

    注意,以上我用的用户名是administrator,而不是图上的clust,因为我载图的时候搞错了.
    Next,
    uploads/200505/15_115509_clust03.jpg


    仲裁盘选择Disk E,next
    uploads/200505/15_115550_clust04.jpg

    下面是网络的选择:混合!
    uploads/200505/15_115658_clust05_network.jpg

    选择专用网络:
    uploads/200505/15_115756_clust05_network02.jpg

    选择内部通信的优先级:
    uploads/200505/15_115911_clust05_network03.jpg

    然后,输入群集的IP地址: 192.168.10.10 (和PUBLIC网卡的IP段要一制)
    uploads/200505/15_120011_clust05_network04.jpg

    在CLUST01和CLUST02两台电脑上分别把"本机的网卡"的优级选级设置为"本地联接3"在第一个位置".
    uploads/200505/15_120235_clust05_network05.jpg

    好了,现在CLUST01电脑上的群集安装完成了.
    下面我们把CLUST02这个电脑也加入到群集中去;
    在CLUST02中同样:在控制面版中的增加移除程序的方式来增加;
    选择第二个节点:
    uploads/200505/15_120527_clust2_01.jpg

    输入要加入的群集的名称:我这里是clustserver
    uploads/200505/15_120619_clust2_02.jpg

    输入加入群集权限的用户的密码;
    uploads/200505/15_120720_clust2_03.jpg

    完成群集二的安装;
    uploads/200505/15_121017_clust2_end.jpg


    **************************************************************************************
    至此cluster部署已经完成,下面进行测试.
    现在CLUST01节点上,如图所示
    uploads/200505/15_153231_clust_test01.jpg

    可以看到所有者者在CLUST01这台电脑上.下面停止CLUST01节点,再看群集如下图所示
    uploads/200505/15_153429_clust_test03.jpg

    可以看到现在所有者是由CLUST02来接管了,我测了一个,把CLUST01停止后,CLUST02接管的时间大根在35秒左右.

    NOTE:
    A.cluster的灾难恢复方法

    1. 可以NTbackup保存群集配置

    2. 用ASR恢复群集配置与磁盘信息

    3. 用win2003 resource kit tools[下载地址为:
    http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en]

    中的confdisk.exe, clusterrecovery.exe命令

    confdisk /save c:\mstools\cluster.sif---backup

    Confidisk /restore c:\mstools\cluster.sif---restore

    B.cluster故障排除

    1.win2000中提供群集日志c:\winnt\system32\cluster\clust.log

    2.诊断工具:clusterdiag.msi,在resource kit tools安装目录中的TOOLS文件夹下,需要再次安装,安装后运行tool—run,不过诊断需要一段时间^_^

    参考资料

    1. Windows Server 2003集群服务技术概述
    http://www.microsoft.com/china/technet/asp/test/prodtechnol/windowsnetserver/clustering.asp

    2. Windows Server 2003服务器集群体系结构
    http://www.microsoft.com/china/technet/asp/test/prodtechnol/windowsnetserver/servercluster.asp ;

    3. Windows Server 2003服务器群集创建和配置指南
    http://www.microsoft.com/china/technet/asp/test/prodtechnol/windowsnetserver/confclus.asp 
  • 转至河南微软技术联盟

    完成ADS部署XP

    经过几天的反复测试,终于完成了ADS部署XP的试验。看来不经过反复的失败、试验是无法从胜利中得到技术和知识积累的。

    ADS原则上是不支持桌面操作系统的,因为ADS控制客户端必须依靠ADS代理,而进入ADS代理环境有两种方式,第一种是在Windows 2000服务器版和Windows Server 2003上安装代理程序,而此程序只支持有限的系统版本;另一种是使用PXE引导至ADS的代理环境。从以上所述可以看出要想真正的实现全自动化部署,ADS代理占着至关重要的地位。

    经过多次的试验,XP的全自动化部署还是可行的。重点在于选择正确的部署顺序,并修改执行任务脚本。在这次的试验中,我的方法如下:

    1、安装XP原型机,做系统准备工作,生成全自动化mini安装应答文件,并修改相应的变量,最后手工执行sysprep及其必须的参数;

    2、在ADS服务器中添加此设备,修改默认任务为boot-to-da,添加此设备对应的变量并授予控制;

    3、开启原型机,检查其是否顺利进入代理环境并进入预备状态;

    4、创建新的Capture-Image任务脚本,其任务顺序是:捕获系统映像(或其他分区映像)—> 修改原型机的sysprep.inf(因为原型机上的sysprep.inf包含ADS变量,当重新启动后会无法正确执行自动化mini安装,所以要将变量修改为实际值)—> 将原型机默认任务修改为boot-to-hd —> reboot ;

    注:此步骤虽然按照自动化理念执行,但是当原型机重新进入系统后,ADS的控制便会出现错误,首先表现在任务执行最后一步reboot无反馈,导致任务一直在执行状态,这时候你需要手工停止任务。原因很简单原型机上未安装ADS代理,曾经尝试在任务脚本最后添加adsdevice /rc ,但是发现在代理环境下不允许执行此命令,所以最终还是要手工将其释放控制。不过,我感觉最后的reboot可以更换为shutdown,这样原型机关闭电源后,ADS设备中就可以正常释放控制,否则你会发现原型机重新启动后,ADS设备管理中你无法释放控制。

    5、在ADS设备中添加要部署的客户端设备,修改默认任务为boot-to-da,添加此设备对应的变量并授予控制;

    6、开启此客户端,检查其是否顺利进入代理环境并进入预备状态;

    7、创建新的Deploy-Image任务脚本,其任务顺序是:对客户分区(如果存在多个分区,你可以添加多条分区指令)—> 部署映像(如果要部署多分区映像,可添加多条指令) —> 修改目标客户端上的sysprep.inf —> 将原型机默认任务修改为boot-to-hd —> reboot ;

    至此ADS部署XP就算完成,如果客户端支持网卡远程启动,那么就实现了真正意义上的全自动化。多么希望ADS代理支持XP或者2000PRO,曾试着解包代理程序去掉系统版本验证,可惜对这些确实不精通无奈放弃,希望其他朋友能有能力修改代理程序使其支持桌面版系统。

    在此次的试验中我大概算了一下时间,捕获和部署映像的耗时差不多,在PIV2.4G/128M的虚拟机中,各需10多分钟,而这个时间还只是捕获纯系统映像,如果系统安装有应用软件,或包含其他分区映像捕获需要的时候可能更长。而ghost单机克隆时,只需要3分多钟,但是ADS的优势还是显而易见的。

  • 这次ADS学习中非常感谢gOxiA前辈的鼎立帮助,每一次都是在他很忙的情况下麻烦他。实在是不好意思!因为自己太菜了,所以测试过程中问题满多的-_-##,下面是我在学习中遇见的一些问题,本人是菜鸟,如果有什么表达不正确的地方,请您指出。我会马上改正。
    1、ADS我在物理环境中使用4台dell 1750实验,ADS SERVER和dhcp安装在同一台机器(如果是使用ads1.0版本,请不要在win2k3上安装sp,要不然不会进入代理环境)安装的是win2k3 sp1企业版,ADS1.1,3台win2k3标准版,部署完成用了17分钟,100mb网络,网络占用为75%左右,服务器cpu占用为35%-60%速度和网络占用还是不错,可以一边办公一边部署,基本不影响公司正常使用网络环境。
    2、多播环境下制作无人值守安装的sysprep.inf,请选择好随机生成主机名,并且在sysprep.inf脚本的两个地方用*来代替
    adminpassword=*  \\使用img系统的密码
    machinename=*    \\在使用setupmgr的时候选择随机计算机名称他自己就会用*来表示,不过需要特别注意,使用随机的计算机名称,必须在User Variables里不配置machinename,而且必须把da-deploy-image-wg.xml脚本里的set sysprep custom info....下面的^ads_computer_name^这项整个删除(要不在获取系统后他会显示脚本错误,不能进入无人值守,必须手动去重起)
    3、这个问题比较明显,gOxiA前辈在自己的blog上也说明了这问题,在物理环境中不能成功进入代理环境,这是因为计算机的网卡不被ads支持的原因,我的1750使用broadcom的网卡,就是不被ADS支持,我在实验中还把相关的驱动copy到system32/inf和windows/inf下面,问题依旧。后来问了gOxiA前辈在知道必须把网卡驱动copy到C:\Program Files\Microsoft ADS\nbs\repository\User\PreSystem下(注意,这里的驱动要完整的驱动,尽量不要使用系统盘上的驱动啊!我就是用系统盘上的驱动,结果又多失败了3次,请下载新的驱动后,COPY进去,保证驱动程序的完整)重起adsbuilder服务,如果你的驱动不完整或者不正确,该服务会拒绝启动,显示为不能在本地启动服务,计算机重起后该服务不会被启动。
    以上是我在学习中的一些问题,虽然是小问题,但是我想还是会对大家有点用处,物理环境测试遇见的问题要比在虚拟机上的多。所以有条件的兄弟还是请在物理机上实验会更有收获!
  • 转至河南微软技术联盟

    ·实录背景

    ·ADS 简要概述

    ·ADS 产品特性

    ·实验环境介绍

    ·部署 ADS 服务器

    ·准备原型机

    ·创建原型机系统映像

    ·为客户端部署映像

    ·实录感想

    ·相关链接[separator]

    实录背景

    ADS发布已经有一段时间,早先曾做过ADS1.0的实验,但因技术参考资料贫乏,而且了解的人不多无法共同学习讨论。那段时间几乎都在看技术资料,MVP文章,Webcast课程,反复实验但都总因为不知名的错误而停滞不前,最后几乎走火入魔(英文阅读能力差,机器配置低,反复实验经常要等待,而且要重复很多步骤),实在无法继续下去,决定暂停!待有更加全面的资料公布或新版本发布后再作实验。

    1个多月过去了,偶然发现微软在其网站发布了ADS1.1,于是兴奋的下载下来准备再次准备实验。在经过前期准备后开始了此次利用 ADS来部署WinSrv2003的实验。中间也遇到了很多问题,反复查资料看KB最终换来了成功。而这篇文章实际意义主要是为了给自己的实验作备忘,汇总每个资料中的关键信息,并通过每个实验细节的介绍使那些希望学习ADS的朋友们不必再因为参考资料的某些问题而走弯路。

    希望大家能从此篇文章中获得有价值的东西。因本人并不是微软的技术专家,所以篇中用词可能并不规范并且不免有遗漏或错误,还请大家谅解指正。

    ADS 简要概述

    Automated Deployment Services,自动化部署服务,简称ADS

    Windows Server 2003中,Microsoft对平台进行了扩展,管理员可以通过它容易地构建和管理超大型的可伸缩Windows服务器部署。自动部署服务(Automated Deployment ServicesADS)包括一组Microsoft开发的新映像工具,以及一个可以用来在裸机服务器上快速部署Windows 2000 ServerWindows Server 2003的、更安全且具有远程操作能力的基础结构。此外,ADS提供了一个更加安全、可靠的脚本执行,允许管理员像管理一台服务器那样简单地在1000台服务器上执行基于脚本的管理工作。

    ADS 产品特性

    ADS中,计算机被称之为设备(Device),所有被管理的设备都需要安装ADS中的Administration Agent(简称:代理程序)。ADS服务器需要由三部分组成,它们是:Controller Service(用来集中管理设备)、Network Boot Services(简称NBS,用来客户端的远程计算机启动)、Image Distribution Services(负责映像创建和部署)。这三个部分可以被分散在多台计算机,也可以集中安装在一台计算机。

    ADS使用数据库来存储信息,在ADS安装源中包含有他的本地MSDE,或者使用一个本地或远程的SQL Server 2000服务器。

    ADS需要一台DHCP服务器来为客户端作引导服务,同时ADS服务器本身也支持动态IP分配,因此ADS服务器静态IP配置不是必须的。另外建议不要在ADS服务器上部署DHCP服务。

    ADS客户端需要支持PXE引导,或被利用RIS工具创建PXE引导盘,前提是你的网卡在RIS所支持的清单中。

    ADS不依赖微软的活动目录,一个简单的LAN环境就可以实现ADS。它的任务脚本强大,可以实现对客户端更加细微的管理能力(如:为客户端分区)。

    ADS的设计目标前面提过了,主要是用来大规模部署服务器。但是在微软讲师和MVP的技术资料中提及ADS同样可以用来部署Win2000ProXPPro,不过我想可能会有很多需要修改的地方,这也是我以后的实验目标。

    以下是ADS的关键属性表,大家可以参考:

    ADS关键属性表

    典型场景

    数据中心,计算机中心,大规模部署

    部署的操作系统

    Windows Server 2003:所有32位版本

    Windows 2000:所有服务器版本(SP3以上)

    可用性

    可以运行在Windows Server 2003企业版和数据中心版

    部署方式

    基于映像

    部署初始化

    部署控制服务,推模式

    支持多播部署

    每服务器部署的并发数量

    最大128(多播),部署速度不受服务器并发部署数量影响

    每计算机多个卷的部署

    部署映像文件格式

    NTFSFAT16FAT32

    映像编辑工具

    根据硬件抽象层(HAL)自动映像过滤

    DHCP服务器类型

    任意

    活动目录需求

    配置信息存储源

    Microsoft SQL Server

    编程可扩展性

    为了方便在有防火墙的环境下实验,以下列出ADS所涉及到的端口:

    Communication ports used by ADS

    Device to the DHCP server

    Protocol

    Direction

    Port

    Notes

    DHCP

    Device (PXE firmware) to DHCP service

    UDP 67

    DHCP

    DHCP service to Device

    UDP 68

    Device to Network Boot Services

    Protocol

    Direction

    Port

    Notes

    PXE

    Device (PXE firmware) to the ADS PXE service

    UDP 67 and/or UDP 4011

    Required to support a device's boot to the Deployment Agent (using PXE). You can configure the use of port 4011 using the \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
    Services\ADSPXE\Parameters\PxeUseDhcpPort
    registry entry.

    PXE

    ADS PXE service to the device

    UDP 68

    TFTP

    Device (PXE firmware) to the TFTPD service

    UDP 69

    Required to download Startnbs into RAM.

    DHCP

    Device running Startnbs to the Deployment Agent Builder service

    UDP 4012

    You can configure the use of port 4012 using the \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\
    Services\ADSBUILDER\parameters\ServerPort
    registry entry.

    DHCP

    Device (Ntldr) to the Deployment Agent Builder service

    UDP random port

  • 安装mom2005我的测试环境
    vmgsx 3.21+winxp sp2宿主机+win2003 sp1+sql2004 sp4
     
    安装完活动目录后,开始安装mom2005的安全检测,发现认不到sql2004,提示没有安装sql2000或者没有打sp3以上版本
    解决办法:服务-sqlserver和sql agent两个都设置成自动,并开启.在注册表里
    HKEY_Local_Machine\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\CurrentVersion

    如果,你安装了SQL SP4则CSDVersion 的值为:8.00.2039, 要让MOM 2005认识你的数据库,请把此键值改为:SP3的值: 8.00.766
  • 转至河南微软技术联盟

    当浏览微软网站时发现有这么一款产品能够对系统平台和应用程序实现监控并可以帮助IT人员排错使之有效的降低管理成本后深深的吸引了我,一直都很想安装测试一下!早先拿到的是英文版,为了能够了解它的具体细节我找了一些资料并且参看了webcast的课程,可惜那次课程的录制真的不尽人意!这次我拿到了简体中文版后迫不及待的就搭建好测试平台准备一览他的风采!(PS:要知道Intel等公司已经开始着手研发针对监控市场的服务器。监控服务器的普及也会慢慢展开!紧跟先进产品技术是ITPro的宿命!)[separator]

    测试平台是搭建在VirtualPC2004SP1之上的,操作系统为:Windows Server 2003 EE SP1 CHS,之前分配了256M内存可是发现在评测的时候竟然提示硬件警告,另外由于需要安装SQL所以我决定将系统内存分配到512M。因为考虑到SQL2000+SP4的安装比较麻烦,所以就直接上的SQL2005标准版,简直是噩梦!光安装它就耗去了我1个半小时,真不知道怎么搞得我机上的VPC怎么性能会下降如此之快,难道跟我经常折腾硬盘有关!看来硬盘的寿命已经不长了……

    言归正传,下面就跟随我来体验一下MOM2005,首先让我们先了解一下MOM2005,然后再开始安装之旅!

    Microsoft Operations Manager 2005(MOM2005) 产品概述:

    Microsoft Operations Manager (MOM) 2005 帮助提供避免不必要的麻烦的知识——减少与管理当今 IT 基础结构环境有关的复杂性并降低操作的成本。MOM 2005——动态系统管理计划 (Dynamic Systems Initiative) 的一个重要组件——提供了可管理性作为 Windows Server System 技术的设计和实施的一部分。通过直接从开发人员提供操作知识和主题专业知识,MOM 2005 有助于简化问题的识别,简化确定问题的根本原因的过程,并有助于快速解决以恢复服务以及防止潜在的 IT 问题。MOM 2005 可帮助公司避免常见的 IT 服务灾难,例如:

    “我的应用程序不能用了!”
    使用 MOM 2005 和 SQL Server 2000 管理软件包,可以快速地发现潜在的数据库问题,从而使管理员可以在用户遇到问题之前修正此问题。

    “我的电子邮件怎么也收不到了!”
    使用 MOM 2005 和 Exchange Server 2003 管理软件包,可以使用合成的事务来监视 Outlook、Outlook Web Access、Outlook Mobile Access 以及 Exchange ActiveSync 技术等所遇到的延迟情况。可以在延迟超过一个预先确定的阀值时生成警告警报,使管理员可以在潜在的问题成为事实之前将其解决。

    “我无法登录!”
    使用 MOM 2005 和 Active Directory 管理软件包,可以监视每个 Active Directory 域控制器以帮助确保正确地配置了任务,发生的站点复制在合理的阀值之内,以及端对端的复制在服务水平协议之内发生,从而减少了登录失败的次数。

    简而言之,MOM 2005 提供了企业级的操作管理以改进 IT 操作的效率。现在您可以花费较少的时间来管理危机,而把更多的时间用在为公司提供新服务上。

    浏览下表以得到 MOM 2005 中重要功能的汇总信息。

    功能描述
    用户界面

    管理员控制台

    管理员控制台是配置 MOM 2005,发现服务器,部署代理,创建并维护用户权限以及创建、导入或导出管理软件包的地方。

    操作员控制台

    操作员控制台提供了一个系统状态的视图,指出问题,并推荐解决方法。甚至可以添加特定于公司的故障诊断信息。它的多窗格视图使您可以方便地查看解决问题所需的信息,而不需要打开各种窗口或对话框。

    Web 控制台

    Web 控制台使用 Web 浏览器提供了操作员控制台功能的一个子集。它使用对需要在网络上任何地方注意的特定问题的链接,提供了修改警报状态、更新公司知识、查看计算机状态和接收电子邮件通知的灵活性。

    报告控制台1

    报告控制台使用户可以从 Web 浏览器查看事件、警报和性能报表。它允许用户订阅喜欢的报表,并在报表改变时自动接收新的版本。

    操作

    可伸缩性2

    几个容量的范围得到了增加,其中包括每台 MOM 服务器的受控计算机数和每个控制台的受控服务器数。

    任务和诊断

    MOM 2005 允许用户定义、导出、导入和启动区分上下文的任务和诊断。任务可以在控制台、服务器或代理上运行。这些任务包括 ping 一台机器,刷新 DNS 缓存或从 Active Directory 移除延迟对象。

    维护模式

    将服务器切换为“维护模式”使用户可以防止警报在系统处于维护中时在操作员控制台上显示。

    规则覆盖

    规则覆盖使用户可以更改选定计算机或组的默认参数和阀值,以及设置优先级以防止潜在的由多个覆盖引起的冲突。

    自动警报解析

    自动警报解析允许代理在警报在无操作员干预的情况下自动改正时,自动更新 MOM 数据库。

    实例识别监视

    MOM 2005 识别并监视系统中的特定实例。例如,它通常会识别 SQL Server 中的特定数据库,而不只是 SQL Server。这使得监视更加详细。

    群集识别监视

    在群集的服务器环境中,MOM 2005 识别虚拟的群集服务器以及物理服务器。识别群集中的服务器的能力使管理软件包开发人员可以创建更详细的规则。

    嵌套计算机组

    计算机的逻辑分组可以进一步地进行细分,以提供管理类似系统的上下文。例如,在 SQL Server 2000 计算机组中,可以有一个 Payroll 计算机组和一个 Order Fulfillment 计算机组——每个计算机组都有不同的规则与之相关。

    警报撤销前响应

    对警报的响应可以由代理在警报撤销之前执行。

    视图

    状态视图

    状态视图由 Active Directory 域控制器等服务器角色在受控环境中提供了计算机状态的实时和合并的视图,其中突出显示了需要注意的系统。

    图表视图

    图表视图提供了管理软件包定义服务器以及关系之处的各种拓扑图。图表视图允许用户查看服务器的状态、访问其他视图以及启动区分上下文的操作,帮助用户快速找到问题的根源。

    警报视图

    警报视图提供了一个需要操作的问题列表以及每个警报的当前状态和严重性。它指示警报是否已证实、已升级或已解决,以及是否已违背了服务水平协议。

    性能视图

    性能视图使用户可以选择并显示来自多个系统一段时间之内的一个或多个性能指标。

    事件视图

    事件视图提供了在受控服务器上发生的事件、每个事件的描述和问题的来源的一个列表。

    计算机和组视图

    此视图使用户可以查看计算机所属于的组、与之相关联的处理规则组以及计算机的属性。

    安全性

    减少的帐户权限

    在 Microsoft Windows Server 2003 上,MOM 服务可以在 Network Service 帐户下运行。此帐户具有比 Local System 帐户更低的权限,并且增强了 MOM 服务的安全性。

    操作范围

    MOM 2005 允许创建自定义的视图,例如限制特定用户只能访问和管理计算机组的一个子集。定义范围可用于隔离用户,防止他们查看和操作彼此的系统。

    更安全的代理/服务器通信

    MOM 2005 代理和管理服务器之间的通信默认为是经加密并经数字签名的。加密得到了增强,并且基于动态创建的密钥,而不是静态的密钥。动态密钥使得查看在 MOM 组件之间传送的数据更加困难。

    如果启用了相互身份验证,则通信也会进行身份验证。

    部署

    无代理监视

    MOM 2005 监视无代理的服务器。针对无法在一些例外的节点上安装代理的 IT 环境。无代理监视仅限于状态监视。

    64 位代理支持

    MOM 2005 允许用户管理在基于 Intel IA–64 和 AMD–64 平台的 64 位操作系统上运行的应用程序。

    国际化

    MOM 2005 在多语言和本地化的环境中运行。控制台和管理软件包已本地化为英语、法语、德语和日语。

    服务器发现向导

    MOM 2005 中的服务器发现向导允许从 Active Directory、文件或键入的列表导入服务器列表。它还允许使用 LDAP 查询以及基于名称(域名)的通配符对列表进行筛选。

    报告功能

    更丰富的报告功能3

    通过使用 SQL Server 2000 Reporting Services,MOM 2005 可以使用高度自定义的报表。报表可以方便地导出为 Microsoft Excel、Adobe Acrobat、HTML、TIFF、CSV 或 XML 文件格式。

    报表自定义4

    报表可以通过 Visual Studio .NET 来创建和编制。

    非 Microsoft 互操作性

    MOM Connector Framework5

    MOM Connector Framework 是一种允许多个 MOM 实例和非 Microsoft 管理系统之间的双向通信以便在企业范围内共享数据和更容易地解决问题的 Web 服务。

    管理软件包开发

    非 Microsoft 的 ISV 和应用程序供应商可以开发自己的管理软件包,以与 MOM 2005 一起使用。还可以为内部开发的应用程序创建管理软件包。

    1报告控制台对于 MOM 2005 Workgroup Edition 不可用。
    2MOM 2005 Workgroup Edition 最多只能管理 10 台服务器。
    3SQL Server Reporting Services 对 MOM 2005 Workgroup Edition 不可用。
    4SQL Server Reporting Services 对 MOM 2005 Workgroup Edition 不可用。
    5MOM Connector Framework 对 MOM 2005 Workgroup Edition 不可用。

    1、放入MOM2005简体中文版光盘,安装程序自动运行并开启安装界面。在安装MOM2005前我们应当先使用安装程序自带的“检查先决条件”功能来测试一下我们当前系统是否符合MOM2005的安装标准。

    2、 在先决条件检查中选取要安装的组件,之后点击“检查”。

    3、 之后安装向导为显示检查结果,这里强烈建议使用WinSrv2003来承载MOM2005,因为接下来只要满足以下MOM2005的安装条件后,我们就可以开始安装了。
    ·SQL Server 2000 SP3或更高的版本;

    ·如果你不打算安装web控制台,那么你仍需要安装“启用网络COM+访问”这个组件,它在应用程序服务器组件当中。

    4、 全新的安装界面,不需要复述什么。

    5、 接受“最终用户许可协议”,这是必须的(PS:废话)

    6、 指定用户名、单位及序列号。

    7、 在“安装选项”中我们选择“自定义”。

    8、 选择需要的组件,这里我钩选了“Web控制台”组件,因为我之前安装了IIS。

    9、 安装程序会告知是否通过“先决条件检查”,如果这一步你没通过就要根据提示来检查一下你当前的组件状态。

    10、 选择“SQL Server 数据库实例”,在这台服务器上我之前已经安装了SQL Server 2005。

    11、 配置数据库和日志文件,这里可以指定数据库的大小及保存的位置。

    12、 输入一个管理组的名称,自己填写一个可以供轻松识别的就可以了!注意此处的提示,如果你要修改这个管理组的名称,必须删除所有MOM组件和代理!需要注意!!

    13、 指定一个管理服务器操作账户,用来收集来自供应商的运行数据、运行相应以及执行操作,比如在被管理的计算机上安装和卸载代理。

    14、 指定用来访问数据库的帐户。

    15、输入许可证的数量。

    16、这里是微软全新安装向导中的一个功能用来将错误整理后发送给微软,以帮助微软收集MOM相关的意外错误信息,大家可以选择该项。

    17、 终于可以进入安装拷贝阶段了。

    18、 开始拷贝数据并设置计算机。

    19、 正好赶上中午下班,午饭回来发现已经完成安装,所以具体的安装所耗时间我也不清楚!

    20、下图就是打开MOM2005控制台后的界面。

    21、 当然也可以运行Web控制台,使用Web控制台所带来的优势是显而易见的。

    22、 下面的界面是操作员控制台,就是用来监控和管理被监控计算机的。

    以上就是整个的安装过程,很简单也很顺利!当MOM2005捕获到一个事件警告和错误时他能够显示出KB来帮助你解决所遇到的问题。还有更多的功能和实践会放在以后介绍给大家!

    另外如果下载了微软的一些产品面向MOM的管理包,那么你在安装后应该注意的是,这些管理包并不能自动加载到MOM中,需要你手动的去指定管理包的所在路径并导入这些管理包。

    时间仓促,希望其他朋友继续补充!

  • 转至河南微软技术联盟

    Exchange2003的RPC over HTTP功能可以方便的实现用户在外网使用Outlook MAPI访问企业内部的Exchange服务器。不过RPC over HTTP在实际中发布的时候还是比较麻烦的,因为涉及到修改注册表!我查了一些资料结合这些资料实现了单台Exchange服务器发布RPC over HTTP的实验,下面就做一下总结。

    首先要在Exchange服务器上安装RpcProxy,为此从添加删除程序-添加删除Windows组件-网络服务中选择HTTP代理上的RPC。

    检查Exchange服务器的注册表,对照一下键值是否正确:


    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeIS\ParametersSystem<br />Value name: <b normal?="">Rpc/HTTP Port</b><br />Value type: REG_DWORD<br />Value data: 0x1771 (Decimal 6001)</p><p>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeSA\Parameters<br />Value name:<b normal?=""> HTTP Port</b><br />Value type: REG_DWORD<br />Value data: 0x1772 (Decimal 6002)<br /><br />HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\MSExchangeSA\Parameters<br />Value name: <b normal?="">Rpc/HTTP NSPI Port</b><br />Value type: REG_DWORD<br />Value data: 0x1774 (Decimal 6004)

    之后,登录到GC(如果域中只有一台域控,那么GC就是DC)上编辑注册表:


    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters<br />键值:<b normal?=""> </b><strong>NSPI interface protocol sequences</strong><br />键值类型: <strong>多字符串值</strong><br />键值数据: <strong>ncacn_http:6004</strong>

    随后,修改Exchange服务器中的RpcProxy配置:


    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Rpc\RpcProxy<br />修改<strong>ValidPorts</strong>这个键值为:<br /><strong><em>ServerNETBIOSName</em>:6001-6002;<var>ServerFQDN</var>:6001-6002;<var>ServerNetBIOSName</var>:6004;<var>ServerFQDN</var>:6004<em>;GCNETBIOSName:6004;GCFQDN:6004</em></strong>

    注:

    利用Exchange服务器的机器名替换其中的ServerNETBIOSName

    利用Exchange服务器的完全合格域名(FQDN)替换其中的ServerFQDN

    利用GC服务器的机器名替换其中的GCNETBIOSName

    利用GC服务器的完全合格域名替换其中的GCFQDN

    如果组织中有多台GC,需要都添加到数据中;如果是群集环境,需要将EXCHANGE群集的NETBIOS和FQDN以及各个节点的NETBIOS和FQDN都添加进去。

    重新启动Exchange服务器完成RpcProxy的配置。

    接下来就要开始在ISA2004中发布Exchange的RPC服务,为此打开ISA2004的控制器,首先创建一个RPC的访问规则:操作允许,协议RPC(所有界面),从内部,到外部,所有用户。然后创建Exchange RPC服务器的发布:邮件服务器发布规则,客户端访问:RPC,IMAP,POP3,SMTP,选择客户端要访问的协议及端口类型,服务器IP为Exchange的所在IP,侦听请求为外部,至此就完成了Exchange的RPC over HTTP的发布!

    最后,就可以在外部用客户端Outlook来测试访问了!客户端配置中的“安全性”中应该复选加密设置,在连接中配置连接属性为“使用Internet Explorer或第三方拨号程序连接”,并复选“Internet上的Exchange”中的选项“使用HTTP连接到我的Exchange邮箱”。

    注意:连接属性中的配置是必须的,在实验过程中我首次并没有配置这个选项,但是发现Outlook中的Hotmail帐号访问会失败。

    至此完成客户端的设置,接下来我们可以在运行中键入“outlook /rpcdiag”名来来测试连接是否正确。

    总结,要多看资料,多看多个人的总结。之后要从自己当初错误的步骤开始一步一步实验最后才能总结出结果,明白其中的道理!

  • 转至CU

    VSFTPD是一种在UNIX/Linux中非常安全且快速的FTP服务器,目前已经被许多大型站点所采用。VSFTPD支持将用户名和口令保存在数据库文件或数据库服务器中。VSFTPD称这种形式的用户为虚拟用户。相对于FTP的本地(系统)用户来说,虚拟用户只是FTP服务器的专有用户,虚拟用户只能访问FTP服务器所提供的资源,这大大增强系统本身的安全性。相对于匿名用户而言,虚拟用户需要用户名和密码才能获取FTP服务器中的文件,增加了对用户和下载的可管理性。对于需要提供下载服务,但又不希望所有人都可以匿名下载;既需要对下载用户进行管理,又考虑到主机安全和管理方便的FTP站点来说,虚拟用户是一种极好的解决方案。本文介绍在RedHat Linux 9上如何将VSFTPD的虚拟用户名和密码保存在MySQL数据库服务器中。

      一、VSFTPD的安装

      目前,VSFTPD的最新版本是1.2.0版。官方下载地址为ftp://vsftpd.beasts.org/users/cevans/vsftpd-1.2.0.tar.gz。在安装前,需要先做以下准备工作:

      VSFTPD默认配置中需要“nobody”用户。在系统中添加此用户,如果用户已经存在,useradd命令有相应提示。
      [root@hpe45 root]# useradd nobody
      useradd: user nobody exists

      VSFTPD默认配置中需要“/usr/share/empty”目录。在系统中此目录,如果目录已经存在,mkdir命令有相应提示。
      [root@hpe45 root]# mkdir /usr/share/empty/
      mkdir: cannot create directory '/usr/share/empty': File exists

      VSFTPD提供匿名FTP服务时,需要“ftp”用户和一个有效的匿名目录。
      [root@hpe45 root]# mkdir /var/ftp/
      [root@hpe45 root]# useradd -d /var/ftp ftp
      接下来的操作对于ftp用户是否已经存在都是有用的。
      [root@hpe45 root]# chown root.root /var/ftp
      [root@hpe45 root]# chmod og-w /var/ftp

      以上准备工作完成后,我们就可以开始编译源代码了。假定我们下载的vsftpd-1.2.0.tar.gz在/root目录,执行以下命令:
      [root@hpe45 root]# tar zxvf vsftpd-1.2.0.tar.gz
      [root@hpe45 root]# cd vsftpd-1.2.0
      [root@hpe45 vsftpd-1.2.0]# make
      [root@hpe45 vsftpd-1.2.0]# make install

      上面的“make install”命令将编译好的二进制文件、手册等复制到相应目录。在RHL9上,可能需要手动执行以下复制:
      [root@hpe45 vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd
      [root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5
      [root@hpe45 vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8

      接下来,我们复制一个简单的配置文件作为基础供后面修改。
      [root@hpe45 vsftpd-1.2.0]# cp vsftpd.conf /etc
      [root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp
      复制PAM验证文件,以允许本地用户登录VSFTPD。
      [root@hpe45 vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp

      二、创建guest用户

      VSFTPD采用PAM方式验证虚拟用户。由于虚拟用户的用户名/口令被单独保存,因此在验证时,VSFTPD需要用一个系统用户的身份来读取数据库文件或数据库服务器以完成验证,这就是VSFTPD的guest用户。这正如同匿名用户也需要有一个系统用户ftp一样。当然,我们也可以把guest用户看成是虚拟用户在系统中的代表。下面在系统中添加vsftpdguest用户,作为VSFTPD的guest。
      [root@hpe45 vsftpd-1.2.0]# useradd vsftpdguest
      当虚拟用户登录后,所在的位置为vsftpdguest的自家目录/home/vsftpdguest。如果要让虚拟用户登录到/var/ftp等其他目录,修改vsftpdguest的自家目录即可。

      三、设置VSFTPD配置文件

      在/etc/vsftpd.conf文件中,加入以下选项:
      guest_enable=YES
      guest_username=vsftpdguest

      然后执行以下命令,让VSFTPD在后台运行:
      [root@hpe45 vsftpd-1.2.0]# /usr/local/sbin/vsftpd &

      四、将虚拟用户保存在MySQL数据库服务器中

      我们建立数据库vsftpdvu,表users,字段name和passwd用于保存虚拟用户的用户名和口令,同时增加两个虚拟用户xiaotong和xiaowang。

      [root@hpe45 vsftpd-1.2.0]# mysql -p
      mysql>;create database vsftpdvu;
      mysql>;use vsftpdvu;
      mysql>;create table users(name char(16) binary,passwd char(16) binary);
      mysql>;insert into users (name,passwd) values ('xiaotong',password('qqmywife'));
      mysql>;insert into users (name,passwd) values ('xiaowang',password('ttmywife'));
      mysql>;quit

      然后,授权vsftpdguest可以读vsftpdvu数据库的users表。执行以下命令:
      [root@hpe45 vsftpd-1.2.0]# mysql -u root mysql -p
      mysql>;grant select on vsftpdvu.users to vsftpdguest@localhost identified by 'i52serial0';
      mysql>;quit

      如果要验证刚才的操作是否成功可以执行下面命令:
      [root@hpe45 vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu
      mysql>;select * from users;
      如果成功,将会列出xiaotong、xiaowang和加密后的密码

      五、设置MySQL的PAM验证

      这里我们要用到一个利用mysql进行pam验证的开源项目(http://sourceforge.net/projects/pam-mysql/)。首先从网站下载它的程序包pam_myql-0.5.tar.gz,复制到/root目录中。在编译安装之前,要确保mysql-devel的RPM包已经安装在你的机器上,如果没有请从RHL安装光盘中安装该包。然后,执行以下命令:
      [root@hpe45 root]#tar xvzf pam_mysql-0.5.tar.gz
      [root@hpe45 root]#cd pam_mysql
      [root@hpe45 pam_mysql]#make
      [root@hpe45 pam_mysql]#make install
      make install这一步可能会出现错误,那只好手动将该目录下生成的pam_mysql.o复制到/lib/security目录下。
      接下来,我们要设置vsftpd的PAM验证文件。打开/etc/pam.d/ftp文件,加入以下内容:
      auth required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
      account required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2
      上面涉及到的参数,只要对应前面数据库的设置就可以明白它们的含义。这里需要说明的是crypt参数。crypt表示口令字段中口令的加密方式:crypt=0,口令以明文方式(不加密)保存在数据库中;crypt=1,口令使用UNIX系统的DES加密方式加密后保存在数据库中;crypt=2,口令经过MySQL的password()函数加密后保存。

      六、进一步的虚拟用户设置

      经过以上的步骤,虚拟用户就可以正常使用了。这里介绍进一步的虚拟用户设置。首先,介绍虚拟用户的权限设置。

      VSFTPD-1.2.0新添了virtual_use_local_privs参数,当该参数激活(YES)时,虚拟用户使用与本地用户相同的权限。当此参数关闭(NO)时,虚拟用户使用与匿名用户相同的权限,这也就是VSFTPD-1.2.0之前版本对虚拟用户权限的处理方法。这两者种做法相比,后者更加严格一些,特别是在有写访问的情形下。默认情况下此参数是关闭的(NO)。
      当virtual_use_local_privs=YES时,只需设置write_enable=YES,虚拟用户就可以就拥有写权限。而virtual_use_local_privs=NO时,对虚拟用户权限的设置就更多一些更严格一些。
      控制虚拟用户浏览目录:如果让用户不能浏览目录,但仍可以对文件操作,那么需要执行以下二个步骤:一,配置文件中,anon_world_readable_only=YES。二,虚拟用户目录的权限改为只能由vsftpdguest操作:
      [root@hpe45 root]# chown vsftpdguest.vsftpdguest /home/vsftpdguest
      [root@hpe45 root]# chmod 700 /home/vsftpdguest
      允许虚拟用户上传文件:
      write_enable=YES
      anon_upload_enable=YES
      允许虚拟用户修改文件名和删除文件:
      anon_other_write_enable=YES
      由于以上选项的设置同样会对匿名用户生效。如果不想匿名用户趁机拥有同样的权限,最好是禁止匿名用户登录。

      其次,由于虚拟用户在系统中是vsftpdguest身份,所以可以访问到系统的其他目录。为了更加安全,我们可以将虚拟用户限制在自家目录下。有两种做法:一,在配置文件中增加以下选项
      chroot_local_user=NO
      chroot_list_enable=YES
      chroot_list_file=/etc/vsftpd.chroot_list
      然后,在/etc/vsftpd.chroot_list文件中加入虚拟用户名xiaotong和xiaowang。
      第二种做法,在配置文件中修改chroot_local_user=YES。
      经过修改后,虚拟用户登录后其根目录就限制在/home/vsftpdguest下,无法访问其他目录。

      七、虚拟用户的个人目录

      大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/vsftpdguest,即都是guest_username用户的自家目录。下面,介绍如何为每个虚拟用户建立自家目录。首先,在主配置文件中加入以下选项:
      user_config_dir=/etc/vsftpd/vsftpd_user_conf
      然后,生成/etc/vsftpd/vsftpd_user_conf目录,并在该目录下建立与特定虚拟用户同名的文件:
      [root@hpe45 root]# mkdir /etc/vsftpd/vsftpd_user_conf
      [root@hpe45 root]# cd /etc/vsftpd/vsftpd_user_conf
      [root@hpe45 vsftpd_user_conf]# touch xiaowang
      以上的操作为虚拟用户xiaowang建立了个人配置文件/etc/vsftpd/vsftpd_user_conf/xiaowang。接下来,在xiaowang的个人配置文件中将xiaowang的自家目录修改为/home/xiaowang,配置选项为:
      local_root=/home/xiaowang
      然后,新建xiaowang目录,并将权限设为vsftpdguest:
      [root@hpe45 vsftpd_user_conf]# mkdir /home/xiaowang
      [root@hpe45 vsftpd_user_conf]# chown vsftpdguest.vsftpdguest ./xiaowang
      [root@hpe45 vsftpd_user_conf]# chmod 600 /home/xiaowang
      经过以上设置,xiaowang登录VSFTPD后,用“pwd”指令就可以发现被自己被定位到自己的“/home/xiaowang”目录。
      从文件系统层次来看,由于“/home/xiaowang”目录的权限是属于vsftpdguest的,所以其他的虚拟用户同样也可以访问xiaowang的自家目录。解决这个问题也很简单,我们只需要让VSFTPD负责将虚拟用户限制在其自家目录,就可以避免虚拟用户的互相访问。具体做法参照前面第六步中所述,这里不再赘述。经过以上设置后,虚拟用户就可以拥有属于自己的目录了。

  • 使用mount挂载常用介质

    2006-08-24

    Tag:
     Linux系统在使用光盘、软盘或U盘时,必须先执行挂载(mount)命令。挂载命令会将这些存储介质指定成系统中的某个目录,以后直接访问相应目录即可读写存储介质上的数据。
      
      1.挂载光盘
      
      挂载光盘的命令如下:
      
      # mount -t is09660 /dev/cdrom /mnt/cdrom
      
      该命令将光盘挂载到/mnt/cdrom目录,使用“ls /mnt/cdrom”命令即可显示光盘中数据和文件。
      
      卸载光盘的命令如下:
      
      # umount /mnt/cdrom
      
      2.挂载软盘
      
      将软盘挂载到/mnt/floppy目录的命令如下:
      
      # mount /dev/fd0 /mnt/floppy
      
      卸载软盘的命令如下:
      
      #umount /mnt/floppy
      
      3.挂载U盘挂载U盘相对复杂一些。
      
      首先使用“fdisk -l”命令查看外挂闪存的设备号,一般为/dev/sda1。然后用“mkdir /mnt/usb”命令建立一个挂载U盘用的目录。之后使用如下命令挂载FAT格式的U盘:
      
      # mount -t msdos /dev/sda1 /mnt/usb
      
      使用如下命令挂载FAT32格式的U盘:
      
      # mount -t vfat /dev/sda1 /mnt/usb
      
      4.挂载外挂硬盘分区
      
      挂载外挂硬盘分区(FAT32格式)同样需要先用“fdisk -1”查看外挂的硬盘分区设备号,假设为/dev/hda1。建立/mnt/vfat挂载目录后,使用如下命令进行挂载:
      
      # mount -t vfat /dev/hda1 /mnt/vfat
      
      注意,默认情况下Linux只允许root用户执行mount命令。如果想让一般用户也能挂载,并且希望在系统启动时自动挂载光盘或软盘,需要修改/etc/fstab配置文件,加入以下内容:
      
      LABEL=/ / ext3   defaults  11
      /dev/cdrom/mnt/cdrom iSo9660 auto,owner,kudzu,ro,user 00
      /dev/fdo /mnt/floppy auto auto,owner,kudzu,ro,user 00
      
      其中,“user”表示将mount命令赋予一般用户使用。
      
      /etc/fstab文件在Linux的帮助手册中讲得很详细,读者不妨看一看。
  • 修改fstab文件

    2006-08-24

    Tag:
    使用权限 : root  

      使用方式 : 使用编辑器来修改 /etc/fstab (eg. vi /etc/fstab)
      
      说明 : 存放档案系统与目录结构对应资料的档案
      
      
      fstab 栏位说明:
      
      第一栏(fs_spec): 实际的 device 名称
      第二栏(fs_file): 对应到的目录结构(mount point)
      第三栏(fs_vfstype):该 partition 的档案系统,常见的有:
      
      minix、ext、ext2、msdos、iso9660、nfs、swap
      第四栏(fs_mntops): 在 mount 时的参数
      第五栏(fs_freq): 在使用 dump 时是否记录,不需要则输入0
      第六栏(fs_passno): 决定在开机时执行 fsck 的先后顺序
      
      例子 :
      IDE 硬盘分成两个 partition 与一个 swap,还有一台光碟机跟一台软碟机的情形 :
      
      
      /dev/hda1 / ext2 defaults 1 1
      /dev/hda5 /home ext2 defaults 1 2
      /dev/cdrom /mnt/cdrom iso9660 noauto,user,ro 0 0
      /dev/hda6 swap swap defaults 0 0
      /dev/fd0 /mnt/floppy ext2 noauto,owner 0 0
      none /proc proc defaults 0 0
      none /dev/pts devpts gid=5,mode=620 0 0
  • 转至cu

    一、        所用软件及版本
    1
            操作系统:RHEL as4u3
    2
            Apachehttpd-2.2.2.tar.gz
    apr-util-1.2.7.tar.gz
    apr-1.2.7.tar.gz
    3
            Tomcatapache-tomcat-5.5.15.tar.gz
    4
            Mysqlmysql-5.0.22.tar.gz
    5
            Jdkjdk-1_5_0_07-linux-i586.bin
    6
            ApacheTomcat连接:tomcat-connectors-1.2.18-src.tar.gz
    7
            Php: php-5.1.4.tar.gz
    二、        安装步骤:
    1
            安装操作系统:这里就不介绍了,主要将相关的开发包装上。我将所有开发包都安装了。
    2
            Apache安装:将以上所需要的所有软件上传到/usr/local下。
    先解压:

    CODE:

    tar xvfz httpd-2.2.2.tar.gz
    cd httpd-2.2.2

    首先可以看看里面的安装说明INSTALLREADME
    在安装apache之前先安装apr-util-1.2.7.tar.gzapr-1.2.7.tar.gz
    首先安装apr

    CODE:

    tar xvfz apr-1.2.7.tar.gz
    cd apr-1.2.7
    ./configure --prefix=/usr/local/apr-httpd
    make
    make install
    cd ..

    再安装apr-util-1.2.7.tar.gz

    CODE:

    tar xvfz apr-util-1.2.7.tar.gz
    cd apr-util-1.2.7
    ./configure --prefix=/usr/local/apr-util-httpd --with-apr=/usr/local/apr-httpd
    make
    make install

    3        接下来继续安装apache

    CODE:

    cd ../httpd-2.2.2
    ./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-module=most --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd --enable-so
    make
    make install

    如果没有报错,apache基本安装完毕。
    4
            安装JDK
    回到local目录下:

    CODE:

    cd ..
    ./jdk-1_5_0_07-linux-i586.bin
    ln –s jdk1.5.0_07 jdk

    设置JDK环境变量

    CODE:

    vi /etc/profile

    再文件尾部增加以下几句:

    CODE:

    JAVA_HOME=/usr/local/jdk
    JRE=$JAVA_HOME/jre
    LC_ALL=zh_CN.GBK
    PATH=$JAVA_HOME/bin:$JRE/bin:$PATH
    CLASSPATH=.:$JAVA_HOME/bin/tools.jar:$JAVA_HOME/lib/dt.jar
    export JAVA_HOME JRE LC_ALL CLASSPATH PATH

    5        安装MYSQL

    CODE:

    tar xvfz mysql-5.0.22.tar.gz
    cd mysql-5.0.22
    ./configure --prefix=/usr/local/mysql/ --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static --enable-assembler
    make
    make install
    groupadd mysql
    useradd -g mysql mysql
    cp support-files/my-medium.cnf /etc/my.cnf
    cd /usr/local/mysql
    bin/mysql_install_db --user=mysql
    chown -R root  .
    chown -R mysql var
    chgrp -R mysql .
    bin/mysqld_safe --user=mysql &
    mysqladmin –uroot password new-password

    6        安装php

    CODE:

    tar xvfz php-5.1.4.tar.gz
    cd php-5.1.4
    ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs
    make && make install
    cp php.ini-dist /usr/local/lib/php.ini

    7        安装tomcat

    CODE:

    tar xvfz apache-tomcat-5.5.15.tar.gz
    mv apache-tomcat-5.5.15 tomcat

    8        安装ApacheTomcat连接

    CODE:

    tar zxvf tomcat-connectors-1.2.18-src.tar.gz
    cd tomcat-connectors-1.2.18-src/ native/
    ./configure --with-apxs=/usr/local/apache/bin/apxs
    make && make install

    三、        配置httpd.conf

    CODE:

    cd /usr/local/conf/
    vi httpd.conf

    1        注释掉一下几行

    CODE:

    #ServerAdmin you@example.com
    #ServerName www.example.com:80
    #DocumentRoot "/usr/local/apache/htdocs"

    2        修改里面相关内容
    A

    CODE:

    <Directory />
        Options FollowSymLinks
    #    AllowOverride None
         AllowOverride all
         Order deny,allow
    #    Deny from all
         Allow from all
    </Directory>

    B

    CODE:

    #<Directory "/usr/local/apache/htdocs">
    <Directory "/usr/local/tomcat/webapps">
        #
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs/2.2/mod/core.html#options
        # for more information.
        #
    #    Options Indexes FollowSymLinks
        #
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   Options FileInfo AuthConfig Limit
        #
        AllowOverride None

        #
        # Controls who can get stuff from this server.
        #
        Order allow,deny
        Allow from all

    </Directory>

    因为我这里将网站放在/usr/local/tomcat/webapps

    C
    、将

    CODE:

    #Include conf/extra/httpd-vhosts.conf

    这行#除掉

    3
            增加以下内容:
    A
    、在AddType application/x-gzip .gz .tgz下增加以下两行

    CODE:

    AddType application/x-httpd-php .php .phtml
       AddType application/x-httpd-php-source .phps

    B、结尾增加

    CODE:

    #add mod_jk module
    LoadModule jk_module modules/mod_jk.so
    # Update this path to match your modules location
    # Where to find workers.properties
    # Update this path to match your conf directory location (put workers.properties next to #httpd.conf)
      JkWorkersFile /usr/local/apache/conf/workers.properties
    # Where to put jk logs
    # Update this path to match your logs directory location (put mod_jk.log next to access_log)
      JkLogFile     /usr/local/apache/logs/mod_jk.log
    # Set the jk log level [debug/error/info]
      JkLogLevel    info
    # Select the log format
      JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    # JkOptions indicate to send SSL KEY SIZE,
      JkOptions     +ForwardKeySize +ForwardURICompat -ForwardDirectories
    # JkRequestLogFormat set the request format
      JkRequestLogFormat     "%w %V %T"
    # Send everything for context /examples to worker named worker1 (ajp13)
      JkMount  /*.jsp worker1

    C、在/usr/local/apache/conf下增加一个workers.properties文件,内容如下:

    CODE:

    # Define 1 real worker using ajp13
      worker.list=worker1
    # Set properties for worker1 (ajp13)
      worker.worker1.type=ajp13
      worker.worker1.host=localhost
      worker.worker1.port=8009
      worker.worker1.lbfactor=50
      worker.worker1.cachesize=10
      worker.worker1.cache_timeout=600
      worker.worker1.socket_keepalive=1
      worker.worker1.reclycle_timeout=300

    D、再编辑/usr/local/apache/conf/extra/httpd-vhosts.conf文件

    CODE:

    vi httpd-vhosts.conf

    将里面例子修改一下

    CODE:

    <VirtualHost 192.168.0.170:80>
    <Directory "/usr/local/tomcat/webapps/ROOT" >
    DirectoryIndex index.htm index.html index.jsp index.php
    </Directory>
        ServerAdmin xxx@126.com
        DocumentRoot /usr/local/tomcat/webapps/ROOT
        ServerName 192.168.0.170
        ErrorLog logs/170-error_log
        CustomLog logs/170-access_log common
    </VirtualHost>

    因为没有做域名解析,我这里在ServerName下直接用的是IP地址。
    四、        测试
    先启动tomcat,再启动apache。启动apache之前可以到apache/bin下测试一下虚拟域是否配置正确。./httpd –S 如果配置有错误会提示你。
    没有问题后,在IE地址栏输入http://192.168.0.170 此时将显示的是tomcat的默认界面,证明可以正常访问jsp文件了。再将/usr/local/tomcat/webapps/ROOTindex.jsp换一个index.php文件,只要在index.php里输入以下内容即可测试:

    CODE:

    <? echo phpinfo() ?>

    重启apache,再在IE地址栏输入http://192.168.0.170 将能看到php的相关信息。
    主要参考文章有:
    http://www.chinaunix.net/jh/13/669895.html
    http://www.chinaunix.net/jh/13/770898.html
    http://httpd.apache.org/docs/2.2/