一个全套的虚拟主机业务应该包括DNS解析,FTP上传,APACHE虚拟主机设置,磁盘空间限定等等,本文的目的就在于如何让大家在短时间内学会如何配置虚拟主机服务。前提条件:假设我们有一台经过注册合法的DNS服务器,域名为ns.domain.com(aa.aa.aa.aa),一台用作邮件转发服务器(bb.bb.bb.bb)以及一台WEB服务器(cc.cc.cc.cc),客户在申请域名的时候将自己的DNS服务器指向设置为 ns.domain.com或其IP地址aa.aa.aa.aa。现在假设一家公司注册了test.com这个域名并由我们来负责做DNS指向和网站寄存业务,我们来看一看具体的步骤是怎样的1.添加用户帐号# groupadd guest(设置一个用户组,将所有的虚拟主机用户都放到这个组里)# adduser -g guest -s /usr/bin/passwd -d /opt/vhosts/www.test.com test;创建一个用户,该用户符合下列条件:1.他的登陆用户名是test2.用户组是guest3.他的shell是/usr/bin/passwd
这样用户将无法登陆我们的系统,而只能用ftp上传文件,当他试图用telnet或者ssh方式访问server时,他只能修改自己的明码。4.他的主页空间是在/opt/vhosts/www.test.com目录下。
我们还需要修改/etc/shells文件把/usr/bin/passwd追加到该文件的最后:
# echo /usr/bin/passwd >>/etc/shells
# cat /etc/shells(检查改动是否生效)
/bin/bash
/bin/sh
/bin/tcsh
/bin/csh
/bin/ash
/bin/bsh
/bin/bash2
/bin/ksh
/bin/zsh
/usr/bin/passwd <--我们所修改的部分
之所以这么做是因为出于安全的因素,如果用户的shell没有在/etc/shells文件中列出,那么该用户将被禁止使用ftp服务。2.设置FTP服务
设置ftp服务主要是设置访问控制,禁止FTP用户访问除其自己目录以外的其他目录以免其对我们的服务器构成威胁。修改你自己机器上的/etc/ftpaccess文件把该文件改为:
class all real,guest,anonymous *
email root@localhost
loginfails 5
readme README* login
readme README* cwd=*
message /welcome.msg login
message .message cwd=*
guestgroup guest
compress yes all
tar yes all
chmod yes guest
chmod no anonymous
delete yes guest
delete no anonymous
overwrite yes guest
overwrite no anonymous
rename yes guest
rename no anonymous
log transfers anonymous,real inbound,outbound
shutdown /etc/shutmsg
passwd-check rfc822 warn
注意这里的guest要和你上面添加用户之前定义的用户组一致,也就是说如果你添加的用户是其他组比如是ftpuser的话,那么你要把ftpaccess文件里的guest全部换成ftpuser。
之后,还需要把/home/ftp/目录下的所有文件都复制到该用户的目录下才能保证安全的目录控制:
# cp -r /home/ftp/* /opt/vhosts/www.test.com/
注意要保证etc,lib,bin等目录的权限和/home/ftp/目录下的权限一致。这样该用户的ftp就基本设置好了,测试一下吧:
# ftp 127.0.0.1Connected to 127.0.0.1.
220 ns2.cnuol.com FTP server (Version wu-2.6.0(1) Mon Feb 28 10:30:36 EST 2000) ready.
Name (127.0.0.1:root): test
Password:
230 User linuxpub logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>ls
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 13872
-rw-r--r-- 1 jiangpen zelex 1422 Dec 6 03:53 .Xdefaults
-rw------- 1 root root 31 Dec 6 04:04 .bash_history
-rw-r--r-- 1 jiangpen zelex 24 Dec 6 03:53 .bash_logout
-rw-r--r-- 1 jiangpen zelex 230 Dec 6 03:53 .bash_profile
-rw-r--r-- 1 jiangpen zelex 124 Dec 6 03:53 .bashrc
drwxr-xr-x 3 jiangpen zelex 4096 Nov 4 00:03 .kde
-rw-r--r-- 1 jiangpen zelex 435 Dec 6 03:53 .kderc
-rw-r--r-- 1 jiangpen zelex 3394 Dec 6 03:53 .screenrc
d--x--x--x 2 root root 4096 Mar 12 08:24 bin
d--x--x--x 2 root root 4096 Mar 12 08:24 etc
drwxr-xr-x 2 root root 4096 Mar 12 08:24 lib
drwxr-sr-x 2 root ftp 4096 Feb 4 2000 pub
226 Transfer complete.
ftp>cd /
ftp>ls
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 13872
-rw-r--r-- 1 jiangpen zelex 1422 Dec 6 03:53 .Xdefaults
-rw------- 1 root root 31 Dec 6 04:04 .bash_history
-rw-r--r-- 1 jiangpen zelex 24 Dec 6 03:53 .bash_logout
-rw-r--r-- 1 jiangpen zelex 230 Dec 6 03:53 .bash_profile
-rw-r--r-- 1 jiangpen zelex 124 Dec 6 03:53 .bashrc
drwxr-xr-x 3 jiangpen zelex 4096 Nov 4 00:03 .kde
-rw-r--r-- 1 jiangpen zelex 435 Dec 6 03:53 .kderc
-rw-r--r-- 1 jiangpen zelex 3394 Dec 6 03:53 .screenrc
d--x--x--x 2 root root 4096 Mar 12 08:24 bin
d--x--x--x 2 root root 4096 Mar 12 08:24 etc
drwxr-xr-x 2 root root 4096 Mar 12 08:24 lib
drwxr-sr-x 2 root ftp 4096 Feb 4 2000 pub
226 Transfer complete.
好了,我们可以看到这个用户只能访问自己的home目录了。
3.设置DNS服务
本人水平很次,文章中有什么不周之处还望大家批评指正,谢谢! DNS服务如果只是达到能使用的话,我觉得配置起来是最简单的了,可是最近论坛以及OICQ上总有网友向我询问这方面的问题,可是有很少能把自己的问题说清楚,所以忙的我不亦乐乎。下面我就讲讲最基本的DNS配置以及在虚拟主机业务中的DNS的配置。 首先,还是要先说明前提条件: 1.有一台安装好了的DNS服务器,版本建议用BIND-8.2.3,该版本本站有下载,路径是http: //ftp.cnuol.com/network/bind/bind-8.2.3-src.tar.gzBIND9我没使用过但是听说有一些安全隐患,大家如果要选用的话最好先了解清楚。 2.这台服务器必须是经过注册的合法的DNS服务器(ns.domain.com),此外当客户在填写域名注册表的时候必须将其主DNS服务器填写为该服务器所对应的域名ns.domain.com。具体的做法请到CNNIC或NIC上查询,此项内容不在本文讨论范围之内。接下来要首先要把主DNS配置好使它能解析域名domain.com,我不具体讲如何配置,我只把配置文件的示例列出来,大家只要把其中的 domain.com换成你自己域的域名,把IP换成自己的IP就可以启动DNS服务了。
/etc/named.conf文件:
options {
directory "/var/named";
};
zone "." {
type hint;
file "named.ca";
};
zone "domain.com"{
type master;
file "db.domain.com";
};
zone "8.96.202.in-addr.arpa"{
type master;
file "named.rev";
};
zone "0.0.127.in-addr.arpa"{
type master;
file "named.local";
};
/var/named/named.ca
这是一个cache文件可以通过运行
# dig > named.ca来获得
/var/named/named.local
@ IN SOA localhost. root.localhost. (
1997022700 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ; default_ttl
)
@ IN NS localhost.
1 IN PTR localhost.
/var/named/db.domain.com
@ IN SOA domain.com. root.domain.com. (
2000122001 ; serial
28800 ; refresh
14400 ; retry
1209600 ; expire
43200 ; default_ttl
)
@ IN NS ns.domain.com.
@ IN MX 10 smtp.domain.com.
domain.com. IN A 202.96.8.198
ns.domain.com. IN A 202.96.8.193
smtp.domain.com. IN A 202.96.8.193
pop3.domain.com. IN A 202.96.8.194
web.domain.com IN A 202.96.8.195
/var/named/named.rev
@ IN SOA domain.com. root.domain.com. (
2001032102 ; serial
28800 ; refresh
14400 ; retry
3600000 ; expire
86400 ; default_ttl
)
@ IN NS ns.domain.com.
193 IN PTR ns.domain.com.
194 IN PTR smtp.domain.com.
195 IN PTR web.domain.com.
修改/etc/resolv.conf把DNS服务器设置为本机
nameserver 202.96.8.193
然后启动DNS服务
# ndc start
测试:
#nslookup
Default Server: ns.domain.com
Address: 202.96.8.93
>ns.domain.com
Server: ns.domain.com
Address: 202.96.8.193
Name: ns.domain.com
Address: 202.96.8.193
如果正向和反向都可以解析的话就没有什么问题了。
下面看看虚拟主机的DNS是如何实现的。虚拟主机的DNS其实和主DNS的配置差不多,只是少了反向解析的部分,我们只需要修改 /etc/named.conf和/var/named/下的一个DB文件就可以了。对于我门上次提到的test.com这个域名来说具体步骤如下:
1。修改/etc/named.conf,在最后加入下面几行
zone "test.com"{
type master;
file "db.test.com";
};
2.在/var/named目录下创建一个名为db.test.com的文件,内容如下:
@ IN SOA test.com. root.test.com. (
2000122001 ; serial
28800 ; refresh
14400 ; retry
1209600 ; expire
43200 ; default_ttl
)
@ IN NS ns.test.com.
@ IN MX 10 smtp.test.com.
test.com. IN A 202.96.8.200
ns.test.com. IN A 202.96.8.193
smtp.test.com. IN A 202.96.8.200
pop3.test.com. IN A 202.96.8.200
web.test.com. IN A 202.96.8.201
从这个文件可以看出来,将来我们要把该域名的邮件服务器放在202.96.8.200这台服务器上,外发和POP3服务都是由202.96.8.200台服务器提供。该域的HTTP服务器是202.96.8.201,因此我们要把上面的ftp用户开在202.96.8.200这台服务器上以方便用户自己上传更新主页。
做好解析之后,必须重新启动DNS使改动生效:
# ndc restart
如果你觉得不放心还可以用nslookup来做一下测试,看看我们刚才做的虚拟主机能否正常解析。当客户的虚拟主机解析工作作好之后,根据DNS服务器的刷新时间的长短可能需要等半天他的域名才能被internet上其他的DNS服务器被正常解析。
在下一次,本人将介绍配置apache的虚拟主机服务
4.Apache
在开始之前要规划好网站需要提供哪些服务设计好合理的虚拟主机目录存放位置,以免日后改动给自己带来麻烦。
本文以最常用的方式介绍Apache+MySQL+PHP的配置方式,尽量以简单直接的命令行和配置文件说明问题避免涉及一些原理性问题以免给初学者带来困难。
首先安装MySQL
# tar zxvf mysql-3.23.36.tar.gz
# cd mysql-3.23.36
# 调整mysql的最大连接数,具体作好看本站文章《加大MySQL的最大连接数》
# ./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charsets=all --with-mysqld-user=mysql
# make
# make install
# echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf(将mysql的lib库加入系统)
# su -
# ldconfig(使改动生效)
# cd mysql-3.23.36/support-files/
# chmod 700 mysql.server(使脚本root可执行)
# cp mysql.server /etc/rc.d/init.d/mysql
# chkconfig --add mysql(将mysql的加入启动文件)
# chown -R mysql.root /usr/local/mysql/var(调整目录属性)
# chmod 700 /usr/local/mysql/var
# adduser mysql -s /bin/false
# /usr/local/mysql/bin/mysql_install_db(初始化数据库)
# /etc/rc.d/init.d/mysql start(启动数据库)
# /usr/local/mysql/bin/mysql
elcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11856 to server version: 3.22.32
Type 'help' for help.
mysql> usr mysql
mysql> update user set password=password("password") where user='root';(给root分配口令)
mysql>flush privileges;(使改动生效)
安装apache
# tar zxvf apache-1.3.19.tar.gz
# cd apache-1.3.19
# ./configure --enable-module=most --enable-shared=max --disable-rule=WANTHSREGEX
# make
# make install
# cp /usr/local/apache/bin/apachectl /etc/rc.d/rc3.d/S85httpd(自动启动httpd)
# cp /usr/local/apache/bin/apachectl /etc/rc.d/rc0.d/K15httpd(自动关闭HTTPD)
# cp /usr/local/apache/bin/apachectl /etc/rc.d/rc6.d/K15httpd
安装PHP
# tar zxvf php-version.tar.gz
# cd php-version
# ./configure --with-apxs=/usr/local/apache/bin/apxs --with-mysql --with-system-regex
# make
# make install
# cp php.ini-dist /usr/local/lib/php.ini
配置Apache使之支持虚拟主机和PHP
在httpd.conf文件里找到:
DirectoryIndex index.html
把她改为:(使支持以php结尾的入口文件)
DirectoryIndex index.php index.php3 index.html index.htm
添加:(使支持对PHP文件的解释)
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
AddType application/x-httpd-php-source .phps
在文件最后添加:
NameVirtualHost 202.96.8.201(使支持虚拟主机,IP为你服务器的IP)
(设置本机的web是IP202.96.8.201的虚拟主机)
ServerAdmin webmast@domain.com(设置本机WEB的管理员信箱)
DocumentRoot /opt/vhosts/web.domain.com(设置本机WEB目录)
ServerName web.domain.com (设置web服务名,需要有DNS解析)
ErrorLog logs/domain.com-error_log(设置错误日志)
CustomLog logs/domain.com-access_log common(设置访问日志)
(设置本机的web是IP202.96.8.201的虚拟主机)
ServerAdmin webmast@test.com(设置本机WEB的管理员信箱)
DocumentRoot /opt/vhosts/web.test.com(设置本机WEB目录,要和我们上面定义的ftp用户的目录一致,以方便用户自己上传主页)
ServerName web.test.com (设置web服务名,需要有DNS解析)
ErrorLog logs/test.com-error_log(设置错误日志)
CustomLog logs/test.com-access_log common(设置访问日志)
基本上就是这样,以后如果有新的虚拟主机就按照这个格式添加到httpd.conf文件的最后然后重新启动apache就可以生效了
下次将介绍基于sendmail和postfix的虚拟邮件的配置以及如何在这2中邮件系统中实现stmp认证服务
设置sendmail的虚拟主机
其实很简单的,只要修改sendmail.cw文件加入虚拟与名就可以了
vi /etc/sendmail.cw(新版本的是/etc/mail/local-host-names
virtualdomain1.com
aaa.com
ccc.com
然后重新启动sendmail