如何在linux上设置虚拟主机(一)
一个易做图的虚拟主机业务应该包括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
@