• 当前位置: 主页 > Linux安装教程 > 系统安装 >

    CentOS 4.3 系统安装教程

    时间:2014-09-26 01:08来源:yeeyan.org 作者:Linux先生 举报 点击:
    湖南成人高考 成人高考 成人高考 成人高考  成人高考 成人高考 
    CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的
    CentOS 4.3 64位完美安装
      

    版本1.2
    作者:Falko Timme
    最后编辑:05/20/2007

    本教程详细描述了安装一个CentOS服务器,提供ISP和主机(包含web 主机(支持ssl),邮件服务器(支持SMTP-AUTH和TLS),DNS服务器,FTP服务器,MySQL数据库,POP3/IMAP,Quota,防火墙等)所需的各项服务。虽然这个教程是针对64位的CentOS 4.3的,但是要想安装32位的话,只需稍微做点修改就行了。

    我用到下列软件:
    1) web 服务器:Apach 2.0.x
    2) 数据库:MySQL 4.1
    3) 邮件服务器:Postifix(比sendmail要容易配置;比sendmail漏洞更少)
    4) DNS服务器:BIND9(权限受限)
    5) FTP服务器:proftpd
    6) POP3/IMAP服务器:dovecot
    7) 服务器日志分析程序Webalizer

    在本教程结束的时候,你应该已经安装好了一个能够稳定运行的系统,如果你喜欢的话可以装一个免费虚拟主机管理系统ISPConfig。

    首先要声明的一点是,这不是搭建这样一个系统的唯一方式,这种只是我所采取的方法,还有其它方法可以用。我并不保证这种方法对你有效。

     

    必备条件

    安装这样的一个系统我们需要这些东西:

    1) 从一个离你近的镜像站点下载CentOS 4.3的四个CD iso镜像(镜像站点的列表在这里http://www.centos.org/modules/tinycontent/index.php?id=13)。
    2) 能够接入internet

    1 安装基本系统

    从第一张光盘启动

    测试安装介质会花费很长时间,我们直接跳过: 

      

    出现了CentOS的欢迎界面。点击下一步(Next):

      选择语言:


    选择键盘布局:

      

    因为我们要安装一个服务器,所以这里选择服务器(Server):

    然后开始分区。选择自动分区,这样你就会有一个容量比较小的/boot分区和一个容量比较大的/(根)分区,这正是我们想要的:

    因为我是在一个全新的系统上安装CentOS 4.3,所以当它问到“是否要初始化硬盘,同时清除所有数据?”时,我选择“是”

    选择删除系统上的所有分区。

    因为我们要删除系统上的所有Linux分区,所以这个问题选择是:

    安装程序展示了新分区的情况,点击下一步(Next):

    现在将要安装启动引导器GRUB。不要改变默认设置,直接点击下一步:

      

    现在是网络设置。默认的网络配置是用DHCP,因为我们装的是一个服务器,所以最好选用静态IP。点击右上角的编辑按钮。在弹出的窗口中不选择使用DHCP配置(Configure using DHCP),然后给你的网卡一个静态IP(在本教程为了演示,我选用了192.168.0.100作为ip地址)。

      

    手动设置主机名,例如:serverl.example.com,输入网关(例如:192.168.0.1)并且设置至少三个DNS服务器(例如:145.253.2.75,193.174.32.18和194.25.0.60):

      

    因为我想在教程的结尾安装一个自带防火墙的ISPConfig,所以这里禁用CentOS的默认防火墙。当然,你可以不管它也可以按你的需要配置(如果你这里没有禁用的话,那么之后就不能再用别的防火墙,因为它很可能会和CentOS的防火墙冲突)

    SELinux是CentOS的一个安全扩展,它能增强安全性。我认为你不需要它来配置一个安全系统,和带来的好处相比,它带来更多的麻烦(想一想因为某些服务没有正常工作,你花了一周的时间来解决,最终却发现一切正常,所有的问题都是SELinux引起的)。因此我禁用它(如果你想装ISPConfig的话,你必须这样做)。

    点击继续:

    选择系统默认语言,如果有必要的话可以添加一些语言。

      

    选择时区。

      

    设置root密码

      

    现在选择要安装的软件包。选择编辑器,基于文本的Internet,服务器配置工具,Web服务器,邮件服务器,DNS服务器,FTP服务器,MySQL数据库,开发工具,管理工具和系统工具,然后点击下一步。

      

    安装程序告诉你它需要哪张CD来安装你选择的包。

      

    安装开始,需要几分钟。

    最终安装完成,从电脑取出CD,重启。

        

    现在,开始配置……

    2 配置多IP地址

    (这一章是可选的。只是展示在你需要多IP地址的时候如何给你的网卡eth0配置多IP地址。如果你只用一个IP就够了,可以跳过本章)

    我们假设网上是eth0,配置文件/etc/sysconfig/network-scripts/ifcfg-eth0看起来是这个样子:

    vi /etc/sysconfig/network-scripts/ifcfg-eth0

                  
          
    DEVICE=eth0
     BOOTPROTO=static
     BROADCAST=192.168.0.255
     HWADDR=00:0C:29:C8:AA:7C
     IPADDR=192.168.0.180
     NETMASK=255.255.255.0
     NETWORK=192.168.0.0
     ONBOOT=yes
     TYPE=Ethernet

    现在要创建一个虚拟网卡eth0:0,IP地址为192.168.0.101。我们需要做的就是建立一个文件/etc/sysconfig/network-scripts/ifcfg-eth0:0,它看起来是这个样子(HWADDR可以省略,因为它和物理网卡相同)

    vi /etc/sysconfig/network-scripts/ifcfg-eth0:0  

                  
          
    DEVICE=eth0:0
     BOOTPROTO=static
     BROADCAST=192.168.0.255
     IPADDR=192.168.0.101
     NETMASK=255.255.255.0
     NETWORK=192.168.0.0
     ONBOOT=yes
     TYPE=Ethernet

    然后重启网络:

    /etc/init.d/network restart

      

    3 配置防火墙

    (如果你在安装基本系统时禁用了防火墙的话,你可以跳过这章)

    因为我要在教程的最后安装ISPConfig,它有自己的防火墙,所以我禁用了CentOS的默认防火墙。你可以启用它并按你的需要对它进行配置(但是启用之后就不要用别的防火墙了,因为它们很可能冲突)。

    运行system-config-securitylevel

    选择禁用(disable)然后选择OK

    为了检查防火墙是否被禁用,可以运行iptables -L,输出结果应该是这样的:

          
            
          
    [root@server1 ~]# iptables -L
     Chain INPUT (policy ACCEPT)
     target     prot opt source               destination
     
     Chain FORWARD (policy ACCEPT)
     target     prot opt source               destination
     
     Chain OUTPUT (policy ACCEPT)
     target     prot opt source               destination


      

    4 禁用SELinux

    (如果你在安装基本系统时已经禁用了SELinux,你可以跳过这章)

    SELinux是CentOS的一个安全扩展,它能增强安全性。我认为你不需要它来配置一个安全系统,和带来的好处相比,它带来更多的麻烦(想一想因为某些服务没有正常工作,你花了一周的时间来解决,最终却发现一切正常,所有的问题都是SELinux引起的)。因此我禁用它(如果你想装ISPConfig的话,你必须这样做)。

    编辑/etc/selinux/config,设置SELINUX=disabled:

    vi /etc/selinux/config

                  
          
    # This file controls the state of SELinux on the system.
     # SELINUX= can take one of these three values:
     #       enforcing - SELinux security policy is enforced.
     #       permissive - SELinux prints warnings instead of enforcing.
     #       disabled - SELinux is fully disabled.
     SELINUX=disabled
     # SELINUXTYPE= type of policy in use. Possible values are:
     #       targeted - Only targeted network daemons are protected.
     #       strict - Full SELinux protection.
     SELINUXTYPE=targeted

    之后你必須重启系统:

    shutdown -r now

      

    5 安装一些軟件

    首先要导入软件包的GPG码:

    rpm --import /usr/share/rhn/RPM-GPG-KEY*

    然后更新系统上已经安装的软件包:

    yum update

    现在必須卸载OpenSSL软件包,否则当你用yum安装软件的时候就会得到类似下面的错误信息:

    Transaction Check Error: file /usr/share/man/man1/asn1parse.1ssl.gz from install of openssl-0.9.7a-43.8 conflicts with file from package openssl-0.9.7a-43.8

    这样卸载

    rpm -e --nodeps openssl

    现在我们安装我们后面需要的软件:

    yum install fetchmail wget bzip2 unzip zip nmap openssl lynx fileutils ncftp gcc gcc-c++

    这会安装一个新的OpenSSL软件包,但是这个包不会出问题。

    6 磁盘空间管理(Quota)

      

    我们运行这个命令安装:

    yum install quota

    编辑/etc/fstab,添加usrquota,grpquota到根分区(/dev/VolGroup00/LogVol00)

    vi /etc/fstab

                  
          
    # This file is edited by fstab-sync - see 'man fstab-sync' for details
     /dev/VolGroup00/LogVol00 /                       ext3    defaults,usrquota,grpquota        1 1
     LABEL=/boot             /boot                   ext3    defaults        1 2
     none                    /dev/pts                devpts  gid=5,mode=620  0 0
     none                    /dev/shm                tmpfs   defaults        0 0
     none                    /proc                   proc    defaults        0 0
     none                    /sys                    sysfs   defaults        0 0
     /dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0
     /dev/hdc                /media/cdrom            auto    pamconsole,exec,noauto,managed 0 0
     /dev/fd0                /media/floppy           auto    pamconsole,exec,noauto,managed 0 0

    然后运行下面命令来启用quota:

    touch /aquota.user /aquota.group
    chmod 600 /aquota.*
    mount -o remount /
    quotacheck -avugm
    quotaon -avug  


    7 安装一个权限受限的DNS服务器(BIND9)

    为了安装一个权限受限的DNS服务器,我们这样:

    yum install bind-chroot

    然后这样:

    chmod 755 /var/named/
    chmod 775 /var/named/chroot/
    chmod 775 /var/named/chroot/var/
    chmod 775 /var/named/chroot/var/named/
    chmod 775 /var/named/chroot/var/run/
    chmod 777 /var/named/chroot/var/run/named/
    cd /var/named/chroot/var/named/
    ln -s ../../ chroot
    chkconfig --levels 235 named on
    /etc/init.d/named start

    BIND会在/var/named/chroot/var/named/这个受限环境中运行。我之后会用ISPConfig配置BIND。
     
      

    8 MySQL(4.1)

    为了安装MySQL,我们这样做:

    yum install mysql mysql-devel mysql-server

    当你重启MySQL的时候,它的init脚本可能会出问题。有时它会在旧的MySQL进程停止之前就启动一个新的MySQL,这样就失败了。解决方法是编辑/etc/init.d/mysqld的restart部分,在停止MySQL和启动MySQL之间延迟一段时间:

    编辑/etc/init.d/mysqld:

      

    vi /etc/init.d/mysqld

    改变这一部分:

                  
          
    restart(){
         stop
         start
     }

    使它变成这样:

                  
          
    restart(){
         stop
             sleep 3
         start
     }

    这样就在停止和启动之间增加了三秒的延迟。

    然后创建一个MySQL的自动运行链接(这样MySQL在系统启动时也会自动启动),然后启动MySQL:

    chkconfig --levels 235 mysqld on
    /etc/init.d/mysqld start

    现在检查网络是否被启用。运行netstat -tap ,应该有这样一行


                  
          
    tcp        0      0 *:mysql                     *:*                         LISTEN      2995/mysqld

    如果没有的话,编辑/etc/my.cnf,注释掉选项skip-networking:

    vi /etc/my.cnf

                  
          
    #skip-networking

    重启MySQL服务:

    /etc/init.d/mysqld restart

    给root用户设置密码(否则任何人都可以访问你的数据库),运行

    mysqladmin -u root password yourrootsqlpassword
    mysqladmin -h server1.example.com -u root  password yourrootsqlpassword  

    9 Postfix With SMTP-AUTH And TLS 

    现在安装Postfix和dovecot(dovecot作为POP3/IMAP服务器):

    yum install cyrus-sasl cyrus-sasl-devel cyrus-sasl-gssapi cyrus-sasl-md5 cyrus-sasl-plain postfix dovecot

    然后配置SMTP-AUTH and TLS:

    postconf -e 'smtpd_sasl_local_domain ='
    postconf -e 'smtpd_sasl_auth_enable = yes'
    postconf -e 'smtpd_sasl_security_options = noanonymous'
    postconf -e 'broken_sasl_auth_clients = yes'
    postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
    postconf -e 'inet_interfaces = all'

    为了使Postfix允许PLAIN和LOGIN登录,必须编辑/usr/lib64/sasl2/smtpd.conf。它看起来是这样子:

    vi /usr/lib64/sasl2/smtpd.conf

                  
          
    pwcheck_method: saslauthd
     mech_list: plain login

    mkdir /etc/postfix/ssl
    cd /etc/postfix/ssl/
    openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024
    chmod 600 smtpd.key
    openssl req -new -key smtpd.key -out smtpd.csr
    openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt
    openssl rsa -in smtpd.key -out smtpd.key.unencrypted
    mv -f smtpd.key.unencrypted smtpd.key
    openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

    postconf -e 'smtpd_tls_auth_only = no'
    postconf -e 'smtp_use_tls = yes'
    postconf -e 'smtpd_use_tls = yes'
    postconf -e 'smtp_tls_note_starttls_offer = yes'
    postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key'
    postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt'
    postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem'
    postconf -e 'smtpd_tls_loglevel = 1'
    postconf -e 'smtpd_tls_received_header = yes'
    postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
    postconf -e 'tls_random_source = dev:/dev/urandom'

    做完这些配置之后,你应该有一个/etc/postfix/main.cf文件,它看起来是这个样子(我已经将所有的注释删除):

    vi /etc/postfix/main.cf

                  
          
    queue_directory = /var/spool/postfix
     command_directory = /usr/sbin
     daemon_directory = /usr/libexec/postfix
     
     mail_owner = postfix
     
     inet_interfaces = all
     mydestination = $myhostname, localhost.$mydomain, localhost
     
     unknown_local_recipient_reject_code = 550
     alias_maps = hash:/etc/aliases
     alias_database = hash:/etc/aliases
     debug_peer_level = 2
     debugger_command =
              PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
              xxgdb $daemon_directory/$process_name $process_id & sleep 5
     
     sendmail_path = /usr/sbin/sendmail.postfix
     newaliases_path = /usr/bin/newaliases.postfix
     mailq_path = /usr/bin/mailq.postfix
     setgid_group = postdrop
     html_directory = no
     manpage_directory = /usr/share/man
     sample_directory = /usr/share/doc/postfix-2.1.5/samples
     readme_directory = /usr/share/doc/postfix-2.1.5/README_FILES
     smtpd_sasl_local_domain =
     smtpd_sasl_auth_enable = yes
     smtpd_sasl_security_options = noanonymous
     broken_sasl_auth_clients = yes
     smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
     smtpd_tls_auth_only = no
     smtp_use_tls = yes
     smtpd_use_tls = yes
     smtp_tls_note_starttls_offer = yes
     smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
     smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
     smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem
     smtpd_tls_loglevel = 1
     smtpd_tls_received_header = yes
     smtpd_tls_session_cache_timeout = 3600s
     tls_random_source = dev:/dev/urandom

    默认情况下,CentOS的dovecot只提供IMAP和IMAPs服务。因为我们同样需要POP3和POP3s服务,所以我们必须配置dovecot。编辑/etc/dovecot.conf,加入这样一行protocols = imap imaps pop3 pop3s:

    vi /etc/dovecot.conf

                  
          
    [...]
     # Base directory where to store runtime data.
     #base_dir = /var/run/dovecot/
     
     # Protocols we want to be serving:
     #  imap imaps pop3 pop3s
     protocols = imap imaps pop3 pop3s
     
     # IP or host address where to listen in for connections. It's not currently
     # possible to specify multiple addresses. "*" listens in all IPv4 interfaces.
     [...]

    现在重启Postfix, saslauthd, and dovecot:

    chkconfig --levels 235 sendmail off
    chkconfig --levels 235 postfix on
    chkconfig --levels 235 saslauthd on
    chkconfig --levels 235 dovecot on
    /etc/init.d/sendmail stop
    /etc/init.d/postfix start
    /etc/init.d/saslauthd start
    /etc/init.d/dovecot start

    为了确保SMTP-AUTH和TLS正常工作,运行下面命令 

    telnet localhost 25

    当和Postfix邮件服务器建立连接后,键入ehlo localhost,你会看到250-STARTTLS和250-AUTH,一切正常。键入quit返回到系统shell。


    键入quit返回到系统shell。  

    9.1 Maildir

    dovecot使用Maildir格式(而不是mbox),因此如果你在服务器上安装ISPConfig,确保在Management -> Server -> Settings -> Email下启用了Maildir。ISPConfig然后就会做必要的配置。

    如果你不想安装ISPConfig,你必须配置Postfix,让它把邮件发送到Maildir:

    postconf -e 'home_mailbox = Maildir/'
    postconf -e 'mailbox_command ='
    /etc/init.d/postfix restart   

    10  Apache2和PHP

    现在我们安装Apache2,使它支持PHP(这是PHP4.3.9;CentOS没有提供PHP5包):

    yum install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel

    然后编辑/etc/httpd/conf/httpd.conf:

    vi /etc/httpd/conf/httpd.conf

    把DirectoryIndex改为

                  
          
    DirectoryIndex index.html index.htm index.shtml index.cgi index.php index.php3 index.pl

    现在配置Apache在系统启动时运行:

    chkconfig --levels 235 httpd on

    启动Apache:

    /etc/init.d/httpd start  

    10.1 全局禁用PHP

    (如果你不打算安装ISPConfig,请跳过这一节)

    在ISPConig中,你可以以站点变基础来配置PHP,也就是说,你可以指定哪个站点可以运行PHP,哪个不可以。只有当你全局禁用PHP时候你才能这样配置,因为不全局禁用的话,不管你在ISPConfig中如何配置,所有的站点都能运行PHP脚本。

    为了全局禁用PHP,我们编辑/etc/httpd/conf.d/php.conf,注释掉AddType这一行:

    vi /etc/httpd/conf.d/php.conf

                  
          
    #
     # PHP is an HTML-embedded scripting language which attempts to make it
     # easy for developers to write dynamically generated webpages.
     #
     
     LoadModule php4_module modules/libphp4.so
     
     #
     # Cause the PHP interpreter to handle files with a .php extension.
     #
     #AddType application/x-httpd-php .php
     # AddType application/x-httpd-php-source .phps
     
     #
     # Add index.php to the list of files that will be served as directory
     # indexes.
     #
     DirectoryIndex index.php

    然后重启Apache:

    /etc/init.d/httpd restart 

    11 ProFTPd

    和vsftpd相比,proftpd能得到ISPConfig更好的支持,所以删除vsftpd:

      

    yum remove vsftpd

    因为CentOS没有proftpd包,我们必须用一个第三方的软件仓库来安装它:

    cd /etc/yum.repos.d/
    wget http://centos.karan.org/kbsingh-CentOS-Extras.repo
    rpm --import http://centos.karan.org/RPM-GPG-KEY-karan.org.txt

    现在安装proftpd:

    yum install proftpd

    创建proftpd自动运行链接,并启动它:

    chkconfig --levels 235 proftpd on
    /etc/init.d/proftpd start

    然后创建文件/etc/pam.d/ftp,内容如下:

    vi /etc/pam.d/ftp

                  
          
    #%PAM-1.0
     auth    required        pam_unix.so     nullok
     account required        pam_unix.so
     session required        pam_unix.so

    重启proftpd:

    /etc/init.d/proftpd restart 

    12 Webalizer

    安装Webalizer,运行yum install webalizer就行了。 

    13 同步系统时钟

    如果你想让系统时钟和一个NTP服务器同步,这样做:

    yum install ntp
    chkconfig --levels 235 ntpd on
    ntpdate 0.pool.ntp.org
    /etc/init.d/ntpd start

     

    14 安装一些Perl模块

    ISPConfig中的SpamAssassin需要一些Perl模块才能工作。我们用一条命令安装这些模块:

    yum install perl-DBI perl-Net-DNS perl-Digest-SHA1

    我们也需要HTML::Parser模块。我们可以安装CentOS软件包中的perl-HTML-Parser,但是这个版本对SpamAssassin来说太旧了,会导致安装ISPConfig时出下面的错误信息:

    REQUIRED module out of date: HTML::Parser

    因此我们必须用Perl shell来安装最新的HTML::Parser模块。

    运行下面命令来启动Perl shell:

    perl -MCPAN -e shell

    如果你是第一次运行Perl shell,你会被问到几个问题。大多数情况下默认的回答是OK。因为CentOS没有ncftp包,所以Perl shell不能找到nctfpget和nctfp,所以你会看到这些:

    Warning: ncftpget not found in PATH
    Where is your ncftpget program? []
    Warning: ncftp not found in PATH
    Where is your ncftp program? []

    两个问题都直接按回车就行了。

    请注意:如果你的系统开启了防火墙,在运行Perl shell的时候,你要把它关掉,这样Perl shell能够更快的获取需要的模块。之后你再把它开启。

    现在键入下面的命令来安装HTML::Parser模块:

    install HTML::Parser

      

    如果安装成功,在结束的时候会看到这样一行:

    /usr/bin/make install -- OK

    键入q退出Perl shell。
     

    15 更新zlib

    CentOS自带的zlib(1.2.1)已经过时,并且有安全漏洞。因此我们需要从源码编译来安装最新的zlib。

    cd /tmp
    wget http://www.zlib.net/zlib-1.2.3.tar.gz
    tar xvfz zlib-1.2.3.tar.gz
    cd zlib-1.2.3
    ./configure --shared
    make
    make install 

    16 结束

    服务器的配置现在就完成了,如果你愿意的话,可以现在安装ISPConfig. 

    16.1 关于SuExec的一点注意

    如果你要在SuExec下运行CGI脚本,你应该为ISPConfig创建的站点指定/var/www作为主目录,因为CentOS的SuExec把/var/www作为Doc_Root。运行

    /usr/sbin/suexec -V

    输出看起来是这样

    为了选择/var/www作为主目录,在安装ISPConfig的时候这样做:当你被问及安装模式的时候,选择expert mode。

      

    然后当被问及默认的/home/www是否应该做为ISPConfig创建站点的目录时,回答n,并且输入/var/www做为站点的主目录。

     

    17 链接

    推荐内容