  23 Dec 1997 Virtual Services Howto
  Brian Ackerman, brian@nycrc.net 
  ˺ ů, isaji@mxu.meshnet.or.jp 
  v1.2, 4 November 1997

  ΥɥȤϥӥβ۲ˡˤĤƤޤޤƤ׵
  ˱ƽ񤫤ޤ (ԡʸ˴ؤɬ˺ޤǤꤤ
  ޤޤHOWTO(Ѹ)κǿǤ ftp://sun-
  site.unc.edu/pub/Linux/docs/HOWTO/ Ǥޤ)
  ______________________________________________________________________

  Table of Contents:

  1.      ȥ

  1.1.    ɬפμ

  1.2.    Ū

  1.3.    եɥХå

  1.4.    

  1.5.    ۾(Copyright/Distribution)

  2.      IPꥢ

  3.      Сǡ(virtuald)

  3.1.    ɤΤ褦ư򤹤뤫

  3.2.    inetd

  3.3.    virtual.conf

  3.4.    virtualdΥ

  4.      ۥץ(Virt scripts)

  4.1.    virtfs

  4.2.    virtexec

  4.3.    virtfsvirtexec˴ؤ

  5.      DNS

  6.      Syslog

  6.1.    

  6.2.    ˡ

  7.      FTP

  8.      Web

  9.      ŪMail/Pop

  9.1.    Qmail 

  9.2.    

  9.3.    ˡ

  9.4.    ɤˡ

  10.     ¾ŪˤǤ뤳

  11.     ޤȤ

  12.     FAQ

  13.     ȥ

  13.1.   virtfsˤĤ

  13.2.   ¾Υ顼

  13.2.1. /var/log/syslog:

  13.2.2. FTP

  13.2.3. Mail

  13.2.4. Web
  ______________________________________________________________________

  1.  ȥ

  1.1.  ɬפμ

  ۥӥϤʤ񤷤ΤǤϤޤ󡣤Ūʻ
  ˲äƤʾμɬפȤޤΥɥȤǤLinux
  λˤĤƤϼ갷ޤ

  ΥɥȤ򤹤ˤϰʲҤ٤ɥȤƤˤȴ
  ƤǤΤȲꤷޤ

  o  LinuxͥΥѥIP aliasingݡȤɲ IP alias mini-
     HOWTO

  o  ͥåȥǥХΥåȥåפ NET-3 HOWTO

  o  inetd NET-3 HOWTO

  o  ͥåȥѥåΥѥȥ󥹥ȡ Sendmail Site
     Apache Site Wu-Ftpd FAQ

  o  DNS DNS HOWTO

     ⤷˽Ҥ٤ˤĤƤޤ򤷤ƤʤСΥѥå
     ˴褦˾˻ؼ줿󥯤ȤΥɥɤ
     뤳Ȥ򶯤ޤΥɥƤˤĤƥ᡼
     äƤƤֻϽФޤHOWTOγԤľʹ
     

  1.2.  Ū

  ۥӥŪʣΥͥåȥɤȤʤʣIPɥ
  ñΥޥǧȤΤǤIPꥢϥͥ륪
  ǡΥץϳƥͥåȥǥХ˰İʾIPɥ쥹
  Ƥ褦ˤ뤿ΤǤͥϥХåɤǳIPɥ
  ®˥åפ뤳Ȥˤ¿ (multiplexes)Ԥޤ桼
  ˤȤäƤϤҤȤİʾΥͥåȥɤ뤫Τ褦˸櫓
  Ǥ

  ¿(multiplexing)ˤäwww.domain1.com, www.domain2.comʤ
  ȤäʣΥɥᥤҤȤĤΥɥᥤ٤ΥȤǱĤǤޤ
  ǰʤȤ¿Υӥ(ftp, web, mail)ϤΤޤޤǤϤʣΥɥᥤ
  ǻȤޤ󡣤Ŭڤư뤿ˤϡեȥ
  ɤʤƤϤʤޤ󡣤ΥɥȤϲۥޥΥ
  ƥ󥰤ˤƤνɤΤ褦˹Ԥ⤷Ƥޤ

  ǡƱͤ˲ۥӥεǽ󶡤뤿ɬפǤȤ
  (virtuald)Υϡθɥ˽ФƤޤ

  1.3.  եɥХå

  ѥååץǡȤ줿ѹäˡΥɥ
  ȤĥޤΥɥȤǡϤäꤷʤʤɤԶ礬
  餽Ƥʤɤ᡼˽񤤤äƲޤȤϤ
  ϤäȡɤξϤ狼ˤƲη
  ԤHOWTOʸܤ̤ˤߤޤ֥ȤˤVIRTSERVICES
  HOWTOȽ񤤤äƤȤڤǤ¾Υ᡼ϸĿѤȤ
  ޤĿѥ᡼ɤޤää᡼ʬƤޤ⤷
  ʤΤǽʬդƲ

  ΥɥȤԤ󼨤ϤۤΰˤʤΤǡΤޤ
  ԡƻȤʤǲɼԳƼʬδĶˤ褦˽񤭴
  Ʋ⤷꤬ޤԤޤǥ᡼äƲ
  κݥ᡼ˤϤե롢顼å񤤤Ƥ
  Сܤ̤ƤβʤɤƤ᡼ֻޤ

  1.4.  

  V1.0 С

  V1.1 Virtual Web SectionΥ顼

  V1.2 դι

  1.5.  ۾(Copyright/Distribution)

  This document is Copyright (c) 1997 by The Computer Resource Center
  Inc.

  A verbatim copy may be reproduced or distributed in any medium
  physical or electronic without permission of the author.  Translations
  are similiarly permitted without express permission if it includes a
  notice on who translated it.  Commercial redistribution is allowed and
  encouraged; however please notify Computer Resource Center of any such
  distributions.

  Excerpts from the document may be used without prior consent provided
  that the derivative work contains the verbatim copy or a pointer to a
  verbatim copy.

  Permission is granted to make and distribute verbatim copies of this
  document provided the copyright notice and this permission notice are
  preserved on all copies.

  In short, we wish to promote dissemination of this information through
  as many channels as possible. However, I do wish to retain copyright
  on this HOWTO document, and would like to be notified of any plans to
  redistribute this HOWTO.

  ______________________________________________________________________

  (ʸդƤޤϱѸθʸ˽ޤ)
  ԤξǧȤ餺˸ʸΥԡ򤷤ʪŪ/ŻŪΤǲ/ۤ
  ⤫ޤޤƱ̤ͤʵĤϤޤ󤬡ξï
  ΤɬƲŪʺۤǧޤޤ侩
  Τ褦ۤ򤹤 Computer Resource CenterˤޤϤ
  ФƲ

  ʸΰѤϻƱ(ʸѤ丶ʸؤΥݥ󥿤ޤƤ
  ݤƱ)ʤǻȤäƤƤޤޤ

  ɥȤθʸԡ/ۤݤϡɽ䤳εľ
  बʸ˴ޤޤƤ¤ǽǤ

  Ǥ¿ʬǤξڤ뤳ȴ˾ޤɥ
  ȤݸޤۤϤФƲ

  2.  IPꥢ

  IPꥢ(IP aliasing)ϲۥۥȥޥƯ뤿ꤹ륫
  ͥ륪ץΤȤǤmini-HOWTOǤˤΤǤ򻲾Ȥ
   (IP aliasing)ˡμʤɤƤޤ (
  Ūʥꥢꡣͥ륪ץǥꥢץ
  ƥͥκƹۤ򤷤ޤθroot

    ifconfig eth0:0 (ɲäIP)
    route add -host (ɲäIP) dev eth0:0

  ȤޤܤϡNET-2/3-HOWTOפ13.11.2.1򻲾ȤƲ)

  3.  Сǡ(virtuald)

  3.1.  ɤΤ褦ư򤹤뤫

  ͥåȥ³"IPɥ쥹""ݡֹ"ΥڥʤäƤޤ
  ͥåȥץߥ󥰤API(Applications Program
  Interface)sockets apiȸƤФޤåȤϳեΤ褦
  񤤡Фɤ߽񤭤򤹤뤳Ȥǥͥåȥͳǥǡ
  Ȥ꤬Ǥޤ

  륽åȤIPɥ쥹֤ե󥯥󥳡getsockname 
  ޤ

  virtualdgetsockname(/lib/libc.so)򡢤ɤΥޥIP
  Ƥ뤫ΤѤޤ Virtualdե
  ߹ߡIPбǥ쥯ȥޤΥǥ쥯ȥ
  chroot塢ºݤ˹Ԥ륵ӥ³Ϥޤ

  chroot  ϥ롼ȥǥ쥯ȥ'/' ̤Υǥ쥯ȥ˥åȤľ
  ǥ쥯ȥ(롼ȥǥ쥯ȥ)ˤƤΤΤϼ¹Ԥ
  Ƥץफϸޤ(ڤΥޤ)ƳIPɥ
  Ϥ줾βۥե륷ƥޤϥͥåȥץ
  फƩŪʤΤ(˽񤤤褦ϱƤΤ)ץ
  ϲʤäΤ褦ưޤ

  Τ褦ˤơinetdȤäץϢ뤵줿Virtuald Ϥ
  ʥӥ۲ƻȤȤǤΤǤ

  3.2.  inetd

  InetdʣΥݡȤƻ뤷³ä(㤨pop׵᤬ä
  Ȥʤɤ)ͥåȥͥԤäƻꤵ줿ץ
  ³ϤѡФǤˤꡢɬפʤƲ⤷Ƥʤ
  Фʤ褦ˤޤ

  ɸŪ /etc/inetd.confե

  ftp stream tcp nowait root /usr/sbin/tcpd wu.ftpd -l -a
  pop-3 stream tcp nowait root /usr/sbin/tcpd in.qpop -s

  Ȥʤޤ(pop-3pop3ξpop3ˤƲ)

  ޤŪ/etc/inetd.confե

  ftp stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.ftp wu.ftpd -l -a
  pop-3 stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.pop in.qpop -s

  Ȥʤޤ

  3.3.  virtual.conf

  줾ΥӥбIPȥǥ쥯ȥ򥳥ȥ뤹
  confեޤĤΥޥconfե뤬ꡢޤɥᥤ
  ΰۤʤꥹȤΥӥɬפʤȤϤ˱confեѰ
  뤳ȤǤޤvirtual.confϰʲΤ褦ƤǤ

  # This is a comment and so are blank lines

  # Format IP <SPACE> dir <NOSPACES>
  10.10.10.129 /virtual/foo.bar.com
  10.10.10.130 /virtual/bar.foo.com
  10.10.10.157 /virtual/boo.la.com

  (ºݤȤϳĶ˹碌ƽ񤭴ƲƤ
  ե(initd.conf˹碌)ǥ쥯ȥꤪӥե
  ̾˥ԡޤ)

  3.4.  virtualdΥ

  (VirtualdΥ gcc -o viturald virtuald.cȤƥѥ
  ǤޤޤʸϤȹ碌뤿/usr/bin˥ԡޤ)

  ______________________________________________________________________
  #include <netinet/in.h>
  #include <sys/socket.h>
  #include <arpa/inet.h>
  #include <stdarg.h>
  #include <string.h>
  #include <syslog.h>
  #include <stdio.h>

  #define BUFSIZE 8192

  main(int argc,char **argv)
  {
          char buffer[BUFSIZE];
          char *ipaddr,*dir;

          logit("Virtuald Starting: $Revision: 1.21 $");
          if (!argv[1])
          {
                  logit("invalid arguments: no conf file");
                  quitting_virtuald(0);
          }
          if (!argv[2])
          {
                  logit("invalid arguments: no program to run");
                  quitting_virtuald(0);
          }
          if (getipaddr(&ipaddr))
          {
                  logit("getipaddr failed");
                  quitting_virtuald(0);
          }
          sprintf(buffer,"Incoming ip: %s",ipaddr);
          logit(buffer);
          if (iptodir(&dir,ipaddr,argv[1]))
          {
                  logit("iptodir failed");
                  quitting_virtuald(0);
          }
          if (chroot(dir)<0)
          {
                  logit("chroot failed: %m");
                  quitting_virtuald(0);
          }
          sprintf(buffer,"Chroot dir: %s",dir);
          logit(buffer);
          if (chdir("/")<0)
          {
                  logit("chdir failed: %m");
                  quitting_virtuald(0);
          }
          if (execvp(argv[2],argv+2)<0)
          {
                  logit("execvp failed: %m");
                  quitting_virtuald(0);
          }
  }

  int logit(char *buf)
  {
          openlog("virtuald",LOG_PID,LOG_DAEMON);
          syslog(LOG_ERR,buf);
          closelog();
          return 0;
  }

  int quitting_virtuald(int retval)
  {
          exit(retval);
          return 0;
  }

  int getipaddr(char **ipaddr)
  {
          struct sockaddr_in virtual_addr;
          static char ipaddrbuf[BUFSIZE];
          int virtual_len;
          char *ipptr;

          virtual_len=sizeof(virtual_addr);
          if (getsockname(0,(struct sockaddr *)&virtual_addr,&virtual_len)<0)
          {
                  logit("getipaddr: getsockname failed: %m");
                  return -1;
          }
          if (!(ipptr=inet_ntoa(virtual_addr.sin_addr)))
          {
                  logit("getipaddr: inet_ntoa failed: %m");
                  return -1;
          }
          strncpy(ipaddrbuf,ipptr,sizeof(ipaddrbuf)-1);
          *ipaddr=ipaddrbuf;
          return 0;
  }

  int iptodir(char **dir,char *ipaddr,char *filename)
  {
          char buffer[BUFSIZE],*bufptr;
          static char dirbuf[BUFSIZE];
          FILE *fp;

          if (!(fp=fopen(filename,"r")))
          {
                  logit("iptodir: fopen failed: %m");
                  return -1;
          }
          *dir=NULL;
          while(fgets(buffer,BUFSIZE,fp))
          {
                  buffer[strlen(buffer)-1]=0;
                  if (*buffer=='#' || *buffer==0)
                          continue;
                  if (!(bufptr=strchr(buffer,' ')))
                  {
                          logit("iptodir: strchr failed");
                          return -1;
                  }
                  *bufptr++=0;
                  if (!strcmp(buffer,ipaddr))
                  {
                          strncpy(dirbuf,bufptr,sizeof(dirbuf)-1);
                          *dir=dirbuf;
                          break;
                  }
          }
          if (fclose(fp)==EOF)
          {
                  logit("iptodir: fclose failed: %m");
                  return -1;
          }
          if (!*dir)
          {
                  logit("iptodir: ip not found in conf file");
                  return -1;
          }
          return 0;
  }
  ______________________________________________________________________

  4.  ۥץ(Virt scripts)

  4.1.  virtfs

  ƥɥᥤϤ줾Υǥ쥯ȥ깽¤äƤޤ chroot Ȥä
  Τǥ饤֥(shared libraries), Хʥ, conf ե
   ʣԡɬפˤʤޤԤϳƥɥᥤѤ
  /virtual/domain.comꡢ줾˥ԡƻȤäƤޤΤ
  ¿ΥǥڡȤޤޥͥåȥɤ
  ϰ²Ǥ礦⤷ǥڡ󤷤Τʤ餽줾
  Υե󥯤д֤˹礤ޤ (Υ󥯤ϥܥå
  󥯤ǤϤޤ)

  virtfsץȤ򤢤ޤ

  ______________________________________________________________________
  #!/bin/bash

  echo '$Revision: 1.21 $'

  echo -n "Enter the domain name: "
  read domain

  if [ "$domain" = "" ]
  then
          echo Nothing entered: aborting
          exit 0
  fi

  leadingdir=/virtual

  echo -n "Enter leading dir: (Enter for default: $leadingdir): "
  read ans

  if [ "$ans" != "" ]
  then
          leadingdir=$ans
  fi

  newdir=$leadingdir/$domain

  if [ -d "$newdir" ]
  then
          echo New directory: $newdir: ALREADY exists
          exit 0
  else
          echo New directory: $newdir
  fi

  echo Create $newdir
  mkdir -p $newdir

  echo Create bin
  cp -pdR /bin $newdir

  echo Create dev
  cp -pdR /dev $newdir

  echo Create dev/log
  ln -f /virtual/log $newdir/dev/log

  echo Create etc
  mkdir -p $newdir/etc
  for i in /etc/*
  do
          if [ -d "$i" ]
          then
                  continue
          fi
          cp -pd $i $newdir/etc
  done

  echo Create etc/skel
  mkdir -p $newdir/etc/skel

  echo Create home
  for i in a b c d e f g h i j k l m n o p q r s t u v w x y z
  #   ([a-z]Ϥ줾ꤹ桼̾ѹޤ)
  do
          mkdir -p $newdir/home/$i
  done
  echo Create home/c/crc
  mkdir -p $newdir/home/c/crc
  chown crc.users $newdir/home/c/crc
  #  (ꤷ桼˹碌ѹƲ)

  echo Create lib
  mkdir -p $newdir/lib
  for i in /lib/*
  do
          if [ -d "$i" ]
          then
                  continue
          fi
          cp -pd $i $newdir/lib
  done

  echo Create proc
  mkdir -p $newdir/proc

  echo Create sbin
  cp -pdR /sbin $newdir

  echo Create tmp
  mkdir -p -m 0777 $newdir/tmp
  chmod +t $newdir/tmp

  echo Create usr
  mkdir -p $newdir/usr

  echo Create usr/bin
  cp -pdR /usr/bin $newdir/usr

  echo Create usr/lib
  mkdir -p $newdir/usr/lib

  echo Create usr/lib/locale
  cp -pdR /usr/lib/locale $newdir/usr/lib
  #       (Υǥ쥯ȥŬѹޤ)

  echo Create usr/lib/terminfo
  cp -pdR /usr/lib/terminfo $newdir/usr/lib

  echo Create usr/lib/zoneinfo
  cp -pdR /usr/lib/zoneinfo $newdir/usr/lib

  echo Create usr/lib/\*.so\*
  cp -pdR /usr/lib/*.so* $newdir/usr/lib

  echo Create usr/sbin
  cp -pdR /usr/sbin $newdir/usr

  echo Linking usr/tmp
  ln -s /tmp $newdir/usr/tmp

  echo Create var
  mkdir -p $newdir/var

  echo Create var/lock
  cp -pdR /var/lock $newdir/var

  echo Create var/log
  mkdir -p $newdir/var/log

  echo Create var/log/wtmp
  cp /dev/null $newdir/var/log/wtmp

  echo Create var/run
  cp -pdR /var/run $newdir/var

  echo Create var/run/utmp
  cp /dev/null $newdir/var/run/utmp

  echo Create var/spool
  cp -pdR /var/spool $newdir/var

  echo Linking var/tmp
  ln -s /tmp $newdir/var/tmp

  echo Create var/www/html
  mkdir -p $newdir/var/www/html
  chown webmast.www $newdir/var/www/html
  #  (chownŬѹƤƲʲƱ)
  chmod g+s $newdir/var/www/html

  echo Create var/www/master
  mkdir -p $newdir/var/www/master
  chown webmast.www $newdir/var/www/master

  echo Create var/www/server
  mkdir -p $newdir/var/www/server
  chown webmast.www $newdir/var/www/server

  exit 0
  ______________________________________________________________________

  4.2.  virtexec

  ۴Ķǥޥɤ¹ԤˤϤΥǥ쥯ȥ chroot Ƥ¹
  ޤǥޥɤvirtexecƤӽФ륹ץȤ
  ޤ (ʲΥɤڤä/usr/binǥ쥯ȥ˥ԡ
  ޤ°ѹ(chmod +x)򤷤ƤƲ)

  ______________________________________________________________________
  #!/bin/sh

  echo '$Revision: 1.21 $'

  BNAME=`basename $0`
  FIRST4CHAR=`echo $BNAME | cut -c1-4`
  REALBNAME=`echo $BNAME | cut -c5-`

  if [ "$BNAME" = "virtexec" ]
  then
          echo Cannot run virtexec directly: NEED a symlink
          exit 0
  fi

  if [ "$FIRST4CHAR" != "virt" ]
  then
          echo Symlink not a virt function
          exit 0
  fi

  list=""
  num=1
  for i in /virtual/*
  do
          if [ ! -d "$i" ]
          then
                  continue
          fi
          if [ "$i" = "/virtual/lost+found" ]
          then
                  continue
          fi
          list="$list $i $num"
          num=`expr $num + 1`
  done

  if [ "$list" = "" ]
  then
          echo No virtual environments exist
          exit 0
  fi

  dialog --clear --title 'Virtexec' --menu Pick 20 70 12 $list 2> /tmp/menu.$$
  if [ "$?" = "0" ]
  then
          newdir=`cat /tmp/menu.$$`
  else
          newdir=""
  fi
  tput clear
  rm -f /tmp/menu.$$

  echo '$Revision: 1.21 $'

  if [ ! -d "$newdir" ]
  then
          echo New directory: $newdir: NOT EXIST
          exit 0
  else
          echo New directory: $newdir
  fi

  echo bname: $BNAME

  echo realbname: $REALBNAME
  if [ "$*" = "" ]
  then
          echo args: none
  else
          echo args: $*
  fi

  echo Changing to $newdir
  cd $newdir

  echo Running program $REALBNAME

  chroot $newdir $REALBNAME $*

  exit 0
  ______________________________________________________________________

  ¹ԤˤϳƼΥƥ dialog ץब󥹥ȡ뤵
  ƤɬפޤդƤ (dialog = 륹
  ץȤܥå򳫤ޥɤǤۤȤɤΥƥǤϥ
  󥹥ȡ뤵Ƥޤ) virtexecȤ˥ܥå󥯤Ϥ
  ޤ㤨С

  ln -s /usr/bin/virtexec /usr/bin/virtpasswd
  ln -s /usr/bin/virtexec /usr/bin/virtvi
  ln -s /usr/bin/virtexec /usr/bin/virtpico
  ln -s /usr/bin/virtexec /usr/bin/virtemacs
  ln -s /usr/bin/virtexec /usr/bin/virtmailq

  virtvivirtpasswdvirtmailqϤФ줾viư
  ꡢ桼ΥѥɤѹǤꡢۥƥΥ᡼륭塼
  åǤꤷޤɬפ˱Ƥä¿󥯤Ϥ뤳ȤǤ
  ץब饤֥(shared library)ɬפȤȤ
  ϲۥե륷ƥˤʤФʤޤ󡣥ХʥեƱͤ
  ۥե륷ƥˤʤФʤޤ

  4.3.  virtfsvirtexec˴ؤ

  ԤƤΥץȤ/usr/bin˥󥹥ȡ뤷Ƥޤۥե
  ƥ֤ʤΤ/usr/local֤ƤޤץȤϥ
  ԡ˴ؤƤʤˤ⥿åʤ褦ˤޤۥե륷ƥ֤Ǥ
  ʤȤפƤΥեϺʤƤϤޤ㤨
  СԤΥƥˤssh󥹥ȡ뤵Ƥޤץ饤١ȥ
   (private key)Ϥɤβۥե륷ƥफ⸫褦ˤϤ
  ޤ󡣤virtfs¹Ԥˤ줾βۥե륷ƥफ
  ץ饤١ȥƤޤ (sshSecure ShellΤȤ
  secure authentication, encryption, encrypted X11 connections,
  encrypted TCP/IP forwarding ä⡼ȥץ,Ŭ
  ʥ֥Ф archives/net/ssh/ǥ쥯ȥʤɤǤ
  )

  ޤresolv.conf( DNSʤ /etc/resolv.conf) ѹ¾Υɥ
  ̾եưưƤޤ㤨 /etc/hosts 
  /etc/HOSTNAMEʤɤǤ

  virtexec˥ܥå󥯤ϤäƤץ

  o  virtpasswd -- ѥѹ

  o  virtadduser -- 桼ɲ

  o  virtdeluser -- 桼

  o  virtsmbstatus -- samba status

  o  virtvi -- եԽ

  o  virtmailq -- mailqΥå

  o  virtnewaliases -- ꥢơ֥ƹ

     Ǥ

  5.  DNS

  DNS̤ǤޤΥƥɤϡƤΥӥˤ
  ƥޥ(¤ϰˤ⤫餺)狼Ƥ뤫Τ褦˿񤦤Ȥ
  ȤǤ DNS˴ؤHOWTO DNS 򻲾ȤƤ

  6.  Syslog

  6.1.  

  syslogUNIXƥǶ̤ƻȤ륷ƥ桼ƥƥǤ
  (syslog=ͥ(kernel)Υå󥰡Хåեɤ
  õ(clear)ꤹ) syslogFIFO(First In First Out)ȸƤФ
  ڥե򳫤ǡǤFIFOϥѥ(pipe)˻ڥ
  եǤ syslogǡϥ꡼ɥɤΥǡԤ饤
  ȥɤ˽񤭹ि Cؿޤ⤷Cؿǥץ
  񤱤нϤsyslogޤ

  chroot ĶȤäƤơFIFO /dev/logϲ۴Ķˤ¸ߤʤȤ
  դƲƤβ۴ĶsyslogؤεϿǤʤȤ
  ̣ƤޤץϿäΤȤ/dev/log
  ȤʤΤǡեñ˥ԡ뤳ȤǤޤ

  syslogΥСˤudpåȤFIFO˻ȤäƤ
  ⤢ޤϰŪʤȤǤϤޤ

  6.2.  ˡ

  syslogϡޥɥ饤ǻꤹСۤʤFIFOõޤ㤨аʲ
  Τ褦ˤޤ

  syslog -p /virtual/log

  /dev/log/virtual/log˥󥯤Ϥޤ(ܥå)

  ln -sf /virtual/log /dev/log

  Ĥ˰ʲΤ褦ˤƤΥեƤ/dev/log󥯤ޤ (
  ϥϡɥ󥯤ǥܥå󥯤ǤϤʤȤ)

  ln /virtual/log /virtual/domain.com/dev/log

  嵭virtfsץȤǤϤǤˤԤäƤޤ/virtualϰĤϢ
  ³ǥˤꡢ/dev/logϥ󥯤ƤΤƱinode ֹ椫
  ƱǡؤȤˤʤޤchrootϤ򥹥ȥåפǤʤΤ
  β/dev/logϵǽޤĶΥåϰĤξ˵Ͽ
  ޤ⤷ץ񤭤ʤ줾log եʬ
  ȤϰʲΤ褦ˤ̡syslogȤȤǤޤ

  syslog -p /virtual/domain1.com/dev/log
  syslog -p /virtual/domain2.com/dev/log

  äȤ⤳뤳ȤϥץIDϲʤΤǤᤷޤ󡣤ΥС
  syslog.initϡŬڤ꤬Ƥˤϵư٤
   /dev/log ˺ƥ󥯤Ƥޤޤʲsyslog.initե
  󤲤Ƥޤ

  ______________________________________________________________________
  #!/bin/sh

  # Source function library.
  . /etc/rc.d/init.d/functions

  case "$1" in
    start)
          echo -n "Starting dev log: "
          ln -sf /virtual/log /dev/log
          echo done
          echo -n "Starting system loggers: "
          daemon syslogd -p /virtual/log
          daemon klogd
          echo
          echo -n "Starting virtual dev log: "
          for i in /virtual/*
          do
                  if [ ! -d "$i" ]
                  then
                          continue
                  fi
                  if [ "$i" = "/virtual/lost+found" ]
                  then
                          continue
                  fi
                  ln -f /virtual/log $i/dev/log
                  echo -n "."
          done
          echo " done"
          touch /var/lock/subsys/syslog
          ;;
    stop)
          echo -n "Shutting down system loggers: "
          killproc syslogd
          killproc klogd
          echo
          rm -f /var/lock/subsys/syslog
          ;;
    *)
          echo "Usage: syslog {start|stop}"
          exit 1
  esac

  exit 0
  ______________________________________________________________________

  ΥǥƤβۥե륷ƥ֤ʤƤ褤Ȥ
  ƲäȤǥ˲ۥե륷ƥĳƥѡƥ
  Ѥsyslog¹ԤʤФʤʤǤ礦

  7.  FTP

  Wu-ftpdⲾ۲ƻȤ褦Ǥޤ(Virtual-wu-ftpd
  ( Ϻ)ФƤΤǤ⻲ȤƲ)ƥɥᥤ
  ǥѥɥե櫓֤ˤϤǤޤ㤨Ф⤷
  bob@domain1.com  bob@domain2.com ξȤɬפȤ
  硢ɤ餫bob2ȤꤷޤĤޤ㤦̾ˤɬפ
  ƥɥᥤβۥե륷ƥब֤ʤΤǥѥɥե
  櫓ƤޤФϲäޤvirtnewuserץȤ
  virtpasswdץȤ˽񤤤褦ˡǺäꤷƤ
  ۥե륷ƥˤäƳƲ۴ĶǱƶ뤳Ȥʤanonymous
  ftp ԤȤǤޤ

  inetd.confwu-ftp򥨥ȥꤷޤ

  ftp stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.ftp wu.ftpd -l -a

  8.  Web

  ApacheϤ켫Ȥǲۥɥᥤ򥵥ݡȤƤޤۥɥᥤ
  ˥ȤȤԤ侩ƤץǤinetd̤Ʋ
  ¹ԤϥȤޤξ硢ץϼ¹Ԥ˥
  ȤͤФʤޤ󡣤ĤޤwebӥˤԸ٤Ǥ
  Ȥ̣Ƥޤ Apache¿Υ³
  ᥫ˥äƤޤ

  ⤷inetd̤ApacheȤinetd.confե˰ʲιԤɲ
  Ƥ

  www stream tcp nowait www /usr/bin/virtuald \
          virtuald /virtual/conf.www httpd -f /var/www/conf/httpd.conf

   /var/www/conf/httpd.confե(Ķˤä
  httpd.confϰ㤤ޤ)˰ʲΤ褦ޤ

  ServerType inetd

  ǥեȤǤ"standalone"ꤷƤޤȤϥ󥰥ɥᥤ
  ȤäƤƱ褦ApacheФ򤷤ޤ

  񤤤ƤǤϲweb HOWTOϤޤ (
  Virtual-Web-HOWTOפߤϽФƤޤ)줬ФƤ
  פޤ䤬ƤϤHOWTO򻲾ȤƤ˽񤳤Ȼפޤ⤷ޤ
  ФƤ׵᤬Ф褿ApacheۥۥȤˡˤĤƤξϤ
  ĤǤ

  9.  ŪMail/Pop

  9.1.  Qmail 

  ξϤsendmailΤߤ˴ؤƤǤqmailξϤHOWTOμΥС
  ɲäޤ(Qmail˴ؤޥ˥奢ϡQmail+MHפʤɤФƤ
  )

  9.2.  

  ߡۥ᡼ΥݡȤ˴ؤ׵ϤޤޤƤ
  Sendmailϲۥ᡼򥵥ݡȤȸäƤޤƤϰۤ
  ɥᥤ󤫤Υ᡼ߤΤȤΤ褦Ǥ᡼ɤ˥ե
  ɤȤȤǤޤ⤷ޥ˥եɤ
  bob@domain1.combob@domain2.com˥᡼뤬ʤɤǤƱ᡼
  եˤޤäƤޤǤ礦 bobΥ᡼뤬ºݤϰ㤦
  Ȥ㤦ΤǤ

  9.3.  ˡ

  桼ֹ̾ɲ(㤨bob1, bob2ʤ)ꡢƬʸ
  dom1bob, dom2bobˤꤹ뤳Ȥˤäƥ桼ΰ(unique)ݾ
  뤳ȤϤǤޤ΢Ѵ褦 mailpop ϥå(hack)
  뤳ȤǤޤ(messy)ˡǤФƤΥ᡼ޤС
  ʡ(إå)maindomain.comĤƤƳƥ֥ɥᥤΥ᡼Сʡ
  äΤˤΤǤ

  9.4.  ɤˡ

  Ʋۥե륷ƥ˳ƥɥᥤѤ/etc/passwdѰդƤޤ
  bob@domain1.combob@domain2.com̡ /etc/passwdΰ㤦桼
  Ǥꡢ᡼Υȥ֥ϤʤȤȤˤʤޤΥ桼ã
  ˤϼʬѤspoolǥ쥯ȥ꤬ѰդƤơƲۥե륷ƥ
  Υ᡼եϸߤ˰㤦ΤǤ뤳Ȥˤʤޤ

  sendmailϤäȤɤνɬפǤ
  sendmail/etc/sendmail.cwȸƤФեäƤޤ
  sendmail¾ΥۥȤžʤǥƤΥۥ̾
  ޤǤեǤ

  sendmailϥޥǥХå򡢥IPǤΥꥹ
  뤿˹Ԥޤ⤷Ʊޥβۥɥᥤ֤ǥ᡼
  硢꤬ФƤƤޤޤsendmailˤ¾βۥɥᥤ󤬥
  륢ɥ쥹Ǥꡢ᡼˥ס뤹ȤͤϤʤΤ
  

  㤨bob@domain1.comfred@domain2.com˥᡼äȤ
  domain1.comsendmaildomain2.comǤȽǤ
  domain1.com˥᡼򥹥ס뤷Ƥޤ̤Ȥ domain2.com˥
  뤬ϤȤϤޤ󡣤sendmailƤޤ(
  v8.8.5sendmailǤԤäϤޤ
  )src/main.c494դԽޤ sendmailΥŬʥ
  Ȥǥȥӥ塼CDROMǤޤ

  vi v8.8.5/src/main.c # Approximately Line 493

  Ȥơ

  load_if_names();

  Ȥս

  /* load_if_names(); Commented out since hurts virtual */

  ȥȥȤƤޤޤ(δؿϥ󥿡ե
  ɲ̾ξ򤷤᤹ؿconf.c line 4399ˤδؿΤ
  IPꥹȤΥʤɤԤäƤޤ)⤷ۥɥᥤ֤Υ᡼
  ɬפʤ餳ԤǤ褤ȤդƲ

  ϲ褵줿ΤǤᥤΥͥåȥǥХeth0Ϻ
  ޤ󡣤ǡ⤷ƱޥβIPeth0IP˥᡼
  ϥޤԤϥߡIPvirtual1.domain.com
  (10.10.10.157)ȤƻȤäƤޤΥۥȤˤϥ᡼ʤΤǤ
  βۥɥᥤ⤤ޤ󡣤ϥƥबפɤå
   sshǥ󤹤˻ȤIPǤ⤢ޤ

  /etc/sendmail.cwԽ

  vi /etc/sendmail.cw
  mail.domain1.com
  domain1.com
  domain1
  localhost

  m4Ȥä/etc/sendmail.cf򹥤ʤ褦˺ޤԤϰʲΤ褦ʤ
  ΤȤޤ

  divert(0)dnl
  VERSIONID(`@(#)tcpproto.mc      8.5 (Berkeley) 3/23/96')
  OSTYPE(linux)
  FEATURE(redirect)
  FEATURE(always_add_domain)
  FEATURE(use_cw_file)
  FEATURE(local_procmail)
  MAILER(local)
  MAILER(smtp)

  (m4UNIXޥץåǡƤΥƥäƤޤ
  ǿСftp://prep.ai.mit.edu/pub/gnu/Ǥޤm4
  linux.mc > /etc/sendmail.cfʤɤȤƻȤޤ m4
  /usr/lib/m4-exampleˤޤץm4 --help Ĵ٤Ʋ)

  /etc/sendmail.cfۥɥᥤ褦Խ

  vi /etc/sendmail.cf # 86դԽ

  #  my official SMTP hostname (defined automatically)
  #Dj$w.Foo.COM
  Ȥս꤬Τǡ

  #  my official SMTP hostname (defined automatically)
  Djdomain1.com
  ȤƤޤ

  sendmailϤ켫ȤǤϤΥӥϤ뤳ȤǤinetd̤
  ưɬפޤΩĤȤǤʤư֤٤Ƥ
  Ǥ礦ɼԤ®ʥȤƤʤ鲾ۥޥ¾
  ɥᥤͭ٤ǤϤʤ⤷ޤ

  -bd ե饰դƵư뤳ȤϷ褷Ƥʤǲ (Υե
  sendmailǡȤƵư륪ץǤ路Ȥman
  sendmailƲ)ޤƥɥᥤƤʤ᡼
  (queue up)뤿 sendmail -qȼ¹Ԥɬפ뤳ȤդƤ
  

  #!/bin/sh

  # Source function library.
  . /etc/rc.d/init.d/functions

  case "$1" in
    start)
          echo -n "Starting sendmail: "
          daemon sendmail -q1h
          echo
          echo -n "Starting virtual sendmail: "
          for i in /virtual/*
          do
                  if [ ! -d "$i" ]
                  then
                          continue
                  fi
                  if [ "$i" = "/virtual/lost+found" ]
                  then
                          continue
                  fi
                  chroot $i sendmail -q1h
                  echo -n "."
          done
          echo " done"
          touch /var/lock/subsys/sendmail
          ;;
    stop)
          echo -n "Stopping sendmail: "
          killproc sendmail
          echo
          rm -f /var/lock/subsys/sendmail
          ;;
    *)
          echo "Usage: sendmail {start|stop}"
          exit 1
  esac

  exit 0

  popä˲⤻˥󥹥ȡ뤷ƤޤޤvirtualdΥѡȤɲ
   inetdΥȥ꡼򤹤뤳ȤɬפǤsendmailpop˴ؤ
  inetd.confΥȥϡ

  pop-3 stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.pop in.qpop -s
  smtp stream tcp nowait root /usr/bin/virtuald virtuald /virtual/conf.mail sendmail -bs

  Ȥʤޤ

  10.  ¾ŪˤǤ뤳

  ¾ΥӥƱ褦ʼǤ

  o  ۥե륷ƥ˥Хʥꡢ饤֥եɲ

  o  /etc/inetd.confɲ

  o  /virtual/conf.service

  o  ɬפ˱ƲۥץȤԽ

     sambaѥåEudoraȤäƤβpoppassdƤߤޤɤ
     ʤưƤޤ⤷äȶ̣вsambaΥ
     ȡˡˤĤƤξϤߤȹͤƤޤ

  11.  ޤȤ

  ʾ夬ɬפʺȤǤʸˤäƿͤӤȤȿ˽в񤨤뤳
  ȤԤƤޤϢ Computer Resource Center ޤǤꤤ
  ⤷ɥȤΥåץǡȤʤɤޤ鶵Ʋ
  HOWTOɲäȻפޤ

  12.  FAQ

  Q1.    ɤƤFAQˤĤƼ䤬ʤΤǤ

  A1.    ޤ䤷ƤʤǤ

  (ʾ夳ޤǤʸ)
  ______________________________________________________________________

  13.  ȥ

  13.1.  virtfsˤĤ

  ¹Ԥ

  Enter the domain name: domain.com
  Enter leading dir: (Enter for default: /virtual):

  ʹޤ줾ϤƲǤϰʲΤ褦ʥǥ쥯
  ꤬졢Ŭʥե뤬줾Υǥ쥯ȥ˥ԡޤ

  /virtual/domain.com/
              |- bin
              |- dev
              |- etc
              |- home
              |- lib
              |- proc
              |- sbin
              |- tmp
              |- usr
              |- var
              \-log

  13.2.  ¾Υ顼

  13.2.1.  /var/log/syslog:

  Dec 22 23:28:46 kaien virtuald[298]: Virtuald Starting: $Revision: 1.21 $
  Dec 22 23:28:46 kaien virtuald[298]: getipaddr: getsockname failed:
                                       Socket opera
  Dec 22 23:28:46 kaien virtuald[298]: getipaddr failed

  ======> ip-aliasꤵƤޤ

  Dec 23 00:30:26 kaien virtuald[1132]: Virtuald Starting: $Revision: 1.21 $
  Dec 23 00:30:26 kaien virtuald[1132]: Incoming ip: 192.168.1.1
  Dec 23 00:30:26 kaien virtuald[1132]: iptodir: fopen failed: No such
  file or dir
  Dec 23 00:30:26 kaien virtuald[1132]: iptodir failed

  ======>  /etc/initd.confꤷconfե뤬ޤ

  13.2.2.  FTP

  ftp  /virtual/etc/passwdꤷ桼loginǤޤ

  㡧

  Connected to 192.168.1.4. <=== IP-alias address
  220 kaien FTP server (Version wu-2.4(1) Tue Dec 5 20:51:15 CST 1995) ready.
  Name (192.168.1.4:apple): 331 Password required for hogehoge
  230-No directory! Logging in with home=/
             ===>Ϥޤ /virtual/home/hogehogeäƤʤ顣
  230 User hogehoge logged in.
  Remote system type is UNIX.
  Using binary mode to transfer files.
  ftp> 221 Goodbye.

  13.2.3.  Mail

  13.2.4.  Web

  [     ˺  ů (isaji@mxu.meshnet.or.jp)

       ƣ Ť  (fujiwara@cim.pe.u-tokyo.ac.jp) ]

