; TeX output 2003.11.26:1337_2 ~?ՁZݺIqqecss2074VirtualfServicesHowmwto cG 1 ecrm1000BrianU Ackerman,qL ectt1000brian@nycrc.net{gv2.1,15Agosto1998&6 ecss1000QuestoAAdoGcumentostatoscrittopersoddisfarelacrescenterichiestadiinformazionisuiservizivirtuali.T*raduzionea8curadiRiccardoFabrisskizzo?atmail.seta.it,(~su8contributoinizialedigAspgasp?ateponet.it,nelMaggioU 1999.qUngrazieaicorrettoriU dellatraduzione(l'onnipresenteGiovanniBortolozzoegAsp).(&Lt$ffffecbx1440Indice]f ecbx10001In>troQduzione3ؼ1.1%ConoscenzeU richieste#.荍........................................w31.2%ScopGo,ύ.荍................................................w41.3%CommentiU ecriticheۍ.荍........................................w41.4%ArchivioU storicodellerevisioni덍.荍...................................w41.5%Copyright/Distribuzioneᛍ.荍......................................w52IPAliasingl63Virtuald\Z63.1%IntroGduzione {.荍.............................................w63.2%Inetd󿍍.荍................................................w63.3%FileU dicongurazionev.荍........................................w63.4%CoGdiceU sorgente{.荍...........................................w74Gliscriptdishellc104.1%VirtfsÍ.荍................................................x?104.2%Virtexec󍍑.荍...............................................x?134.3%Notee.荍.................................................x?155DNS166Syslogd1g166.1%Problema.荍..............................................x?166.2%Soluzionetw.荍..............................................x?16%6.2.1EImpGostareU deilinkE.荍.....................................x?16%6.2.2ESyslogd.init.荍.........................................x?166.3%SyslogdU multipliK.荍...........................................x?17%6.3.1EUnoU pGerdisco.荍........................................x?17%6.3.2EUnoU pGerdominioፍ.荍......................................x?18*_2 ~?GINDICE]!2ՁV7FTPvirtualeyn)18ؼ7.1%Inetd,׍.荍.................................................x?187.2%FTPU anonimo.荍............................................x?187.3%UtentiU dell'FTPvirtualec.荍......................................x?188W ebvirtualey198.1%UsandoU virtualdC덍.荍...........................................x?19%8.1.1ENonU raccomandabile)5.荍....................................x?19%8.1.2EInetdJy.荍.............................................x?19%8.1.3EHttpGd.confٍ.荍.........................................x?19%8.1.4ECongurazione.荍.......................................x?19%8.1.5EHttpGd.init<.荍..........................................x?208.2%UsandoU ApacheVirtualHost)S.荍....................................x?20%8.2.1EAccess.conf.ٍ.荍.........................................x?20%8.2.2EHttpGd.confٍ.荍.........................................x?20%8.2.3ESrm.confC퍍.荍...........................................x?22%8.2.4EHttpGd.init<.荍..........................................x?238.3%OverowU deidescrittoridileˍ.荍...................................x?23%8.3.1EAttenzione!v.荍.........................................x?23%8.3.2EServerU ApachemultipliA.荍...................................x?238.4%ServerU checondividonoununicoIPۍ.荍................................x?23%8.4.1ERisparmiareU indirizziIP=.荍..................................x?23%8.4.2EInconveniente!.荍.......................................x?238.5%MaggioriU informazioni.荍.......................................x?249Mail/P>opvirtuale`5249.1%Problema.荍..............................................x?249.2%Soluzionetw.荍..............................................x?249.3%LaU soluzioneconSendmailӻ.荍.....................................x?24%9.3.1EIntroGduzione.荍........................................x?24%9.3.2ECreareU illedicongurazionediSendmail%.荍........................x?25%9.3.3EMoGdicareU illedicongurazionediSendmail).荍.....................x?25%9.3.4EConsegnaU loGcaleconSendmaila.荍...............................x?25%9.3.5EPostaU tradominivirtualiconSendmail:qiltrucco(V*ersioniprecedentila8.8.6).荍...x?25%9.3.6EPostaAtradominivirtualiconSendmail:Nuovefunzionalit(V*ersionisuccessivealla E8.8.6)鍍.荍............................................x?26%9.3.7ESendmail.initvI.荍........................................x?26%9.3.8ECongurazioneU diinetd.荍..................................x?27'ɠ_2 ~?G1.8In>troQduzione~3ՁV9.4%LaU soluzioneconQmailaS.荍......................................x?27ؼ%9.4.1EIntroGduzione.荍........................................x?27%9.4.2ECongurareU idominivirtualiU%.荍...............................x?28%9.4.3ECongurareU l'utenterespGonsabileperildominio4.荍.....................x?28%9.4.4ET*cpservera.荍..........................................x?28%9.4.5EQmail.init<.荍..........................................x?29%9.4.6ESorgenti ݍ.荍...........................................x?29%9.4.7ESorgenti ݍ.荍...........................................x?329.5%RingraziamentiX.荍...........................................x?3610Sam>bavirtualeoN3610.1%Congurazione.荍...........................................x?3610.2%Inetd,׍.荍.................................................x?3610.3%Smb.init.荍...............................................x?3611AltriservizivirtualiV_3612Conclusione~<3713FA>QK{37(1Inctropduzione荍!N ecbx12001.1ConoscenzerichiesteMCreare`QunsistemapGerservizivirtualinontroppodicile,tuttaviarichiestoqualcosadipicheuna conoscenza%vdibase.aQuestodoGcumentononun'introGduzioneallacongurazionecompletadiunamacchinaLinux.ؼPerU unapienacomprensionediquestodoGcumentonecessarioavereassolutafamiliaritconquantosegue:ؼ !", cmsy10CompilazioneU delkernelLinuxeaggiuntadelsuppGortoIPaliasingHЃ ecti1000IPaliasmini-HOWTOInstallazioneU econgurazionedidispGositividireteNET-3HOWTOCongurazioneU diinetdNET-3HOWTOtradottoU initaliano:qNET-3HOWTOPacchettiU vqaripGerilnetworkingU quali:qSendmailAp}/acheQmailSAMBAImpGostazioneU delDNSDNSHOWTOConoscenzeU basediamministrazionedisistemiLinuxSystemsA}/dministrators'sGuide` _2 ~?G1.8In>troQduzione~4ՁVtradottoU initaliano:qGuidadell'Amministr}/atorediSistemaConoscenzeU basesullacongurazionediunserverwebWWWHOWTOtradottoU initaliano:qWWW-HOWTOؼSe nonsisicuridiconoscereleproGcedureconcernentiunoqualsiasideicomponenticitatisopra,FOR*TE- MENTEaraccomandatoadiprenderecondenzacontuttiipacchettifacendoriferimentoailinkripGortati.=IoNON}rispGonder}amessaggidipostariguardantigliargomentisopraindicati.9RivolgetelevostredomandeagliU autorideirispGettiviHOWTO.#Í1.2Scop_oMLafunzionedeiservizivirtualiquelladipGermettereadunasingolamacchinadiriconoscereindirizziIPmultiplisenzailbisognodischedediretemultiple.L'IPaliasingun'opzionedicompilazionedelkernelchepGermettediassegnareaciascunainterfacciadiretepidiun'indirizzoIP*.EssopGermettealkerneldigestiresimultaneamentepiindirizziIPinmoGdotrasparente,Qsaltandodaunoall'altroinrapidasuccessione(`multiplexing').qAll'utenteU sembrerchecisiapidiunserver.ؼIlT`multiplexing'pGermettechedominimultipli(www.dominio1.com,www.dominio2.comeccetera)venganoospitati4sullastessamacchinaallostessocostodiununicodominio.XSfortunatamentelamaggiorpartedeiservizip(FTP*,web,mail)nonsonostatiprogettatipGergestiredominimultipli.pAlloscopGodifarlilavorarecorrettamenteaquindinecessariomoGdicaresiailedicongurazionecheilcoGdicesorgente. pDQuestodoGcumentoU descrivecomeappGortarequestemodichenelcorsodell'impostazionediunamacchinavirtuale.PerϤpGoterfarfunzionareiservizivirtualiancherichiestoundemone.EIςsorgentidiquestodemone(virtuald)vengonoU fornitipiavqantiinquestodoGcumento.#Í1.3CommentiecriticheMQuestoHdoGcumentosiespandermanmanocheipacchettiverrannoaggiornatiecambierannolemoGdichedaappGortare!vaisorgentioallacongurazione.`HSecisonopartidiquestodocumentochenonsonochiarepGotetemandarmiunae-mailconsuggerimentiodomande.AlloscopGodifacilitarmiillavorosietepregatidifarecommentispGeciciediincluderelasezioneinquestione.\ȑimportantecheilmessaggiodipGostacontengaladicitura:`VIR*TSERVICESHOWTO'nelsoggetto.QualunquealtromessaggioverrconsideratopGersonalee,xcome sannobGenetuttiimieiamici,iononsonosolitoleggerelamiapGostapersonaleedperciprobabilevengaU scartatoassiemeailoro.Notatemanchecheimieiesempisonosoloesempi,quindinondovrebbGeroesserecopiatiparipari.gPotresteavereinfattibisognodiinserireivostrivqalori.EfSeavetedeiproblemi,pGoteteinviarmiun'e-mail.EfAllegatetuttiLiledicongurazionepGertinentieimessaggidierrorechericevetedurantel'installazione.nCidarunoGcchiataU eviinvierimieisuggerimenti.#Í1.4ArchiviostoricodellerevisioniMV1.0V*ersioneU originariaV1.1CorrettoU unerrorenellasezioneW*ebVirtuale.V1.2{_2 ~?G1.8In>troQduzione~5ՁVCorrettaU ladata.ؼV2.0AggiornatiU ilinkhtml.AggiornamentiU allasezioneW*eb.NuovqaU opzionediSendmail.NuovqaU sezionesuQmail.AggiornataU lasezionesulSyslog.AggiornataU lasezionesull'FTP*.OpzioneU predenitadiVirtuald.NuovqaU sezionesuSamba.AggiornateU leFAQ.V2.1CambiatiU tuttiipGercorsiin/usr/local.AggiuntaU l'opzionedicompilazioneVERBOSELOGavirtuald.CorrettoU unbugdisetuid/setgidinvirtmaillter.CorrettoU unbugdiexeclinvirtmaillter.CorrettoU unbugnellatrasformazioneminuscole/maiuscoleinvirtmaillter.CorrettaU lavqariabilediambienteU sanitycheckinvirtmaillter.T*oltoU ilcoGdicemboxU davirtmaillter/virtmaildelivery*.AggiuntaU lasezionetcpserver.initpGopperQmail.AggiuntaU lasezioneriguardanteglialiasdeinomididominioalleFAQ.#Í1.5Copyright/DistribuzioneM[QuestaU partevienelasciatainoriginalepGermotivilegaliN.d.T.]ThisU doGcumentisCopyright(c)1997byTheComputerResourceCenterInc.AverbatimcopymaybGereproducedordistributedinanymediumphysicalorelectronicwithoutpGermission oftheauthor.ΚT*ranslationsaresimiliarlypGermittedwithoutexpresspermissionifitincludesanoticeonwhoxtranslatedit.XCommercialredistributionisallowedxandencouraged;HhoweverxpleasenotifyComputerR}/esourceCenterU ofanysuchdistributions.ؼExcerptsIlfromthedoGcumentmaybGeusedwithoutpriorconsentprovidedthatthederivqativeworkcontainstheU verbatimcopyorapGointertoaverbatimcopy*.PermissionisgrantedtomakeanddistributeverbatimcopiesofthisdoGcumentprovidedthecopyrightnoticeandU thispGermissionnoticearepreservedonallcopies.Inshort,\wewishtopromotedisseminationofthisinformationthroughasmanychannelsaspGossible.However,Ido!wishtoretaincopyright!onthisHOWTOdoGcument,and!wouldliketobGenotiedofanyplanstoU redistributethisHOWTO._2 ~?G2.8IPAliasingIr6ՁV2IPG\Aliasing:L'IPdAliasingdހun'opzionedicompilazionedelkernelchedeveessereabilitatapGerpermettereil`virtual hosting'.Esistebgiunmini-HOWTObsull'argomentobIPLaliasing.SipregadiconsultarlopGerquestionicheriguardanoU lasuaimpGostazione.(3Virtuald荍3.1Intro_duzioneMOgnimconnessionediretebasatasuduecoppiediindirizziIPmlepGorte.=L'`API'(ApplicationsProgramInterface)C}pGerlaprogrammazionediretevienechiamata`SoGcketAPI'.Un`soGcket'sicompGortacomeunleapGerto,+conoperazionidilettura/scritturasudiessopossibilescambiaredatisuunaconnessionedirete.C'unafunzionechiamatagetsocknamecherestituiscel'indirizzoIPdelsoGcketloGcale.,Virtualdinprimoluogo@utilizzagetsocknamepGerdeterminareaqualeindirizzoIP@dellamacchinalocalesivuoleaccedere.Quindi/leggedaunledicongurazionequaledirectoryassoGciataataleindirizzoIP*.Virtualdfachroota]quelladirectoryepassalaconnessionealservizio.7ChrootreimpGosta`/',lladirectoryradice,inunnuovopuntodell'albGerodelledirectory*,inmodotalecheilprogrammainesecuzionenonpossaaccedereanullafuoridaquestoramo.]fQuindiogniindirizzoIPassoGciatoadunpropriolesystemvirtuale.T*uttoci莡trasparentehpGerilprogrammadirete,mchesicompGortercomesenientefossesuccesso.KVirtualdpuquindiessereU utilizzatoinsiemeconunprogrammacomeinetdpGerrenderevirtualeunservizio.#Í3.2InetdInetd½unsupGerserverdiretechestainascoltosuvqariepGortee,quandoriceveunaconnessione(adesempio,unaErichiestapGopinentrata),eettualafasedinegoziazioneepassalaconnessioneadunprogrammachegestisceCllospGecicoservizio.kQuestoperevitarechevenganoeseguitideiservizicherestanoinattiviquandoinutilizzati.ؼUnU le/etc/inetd.confstandardapparecos:ؼftp?streamtcpnowaitroot/usr/sbin/tcpd\)`wu.ftpd?-l-apop-3?streamtcpnowaitroot/usr/sbin/tcpd\)`in.qpop?-sIlU le/etc/inetd.confdiunsistemaincuisiutilizzavirtualdapparecos:ftp?streamtcpnowaitroot/usr/local/bin/virtuald\)`virtuald?/virtual/conf.ftpwu.ftpd-l-apop-3?streamtcpnowaitroot/usr/local/bin/virtuald\)`virtuald?/virtual/conf.popin.qpop-s#Í3.3FiledicongurazioneMCiascuniserviziohaunledicongurazionechecontrollaqualiindirizziIPiedirectorysonoautorizzatipGerquelservizio.gSipuavereoununicoleprincipaleoppurepiledicongurazione,sesidesideracheadogniU serviziosiaassoGciatounalistadiversadidomini.qUntipicoledicongurazioneapparecos: _2 ~?G3.8Virtuald87ՁV#?Questouncommentoeallostessomodovengonotrattatelelineevuote #?Formato:IndirizzoIP[spazio]directory[nessunspazio]10.10.10.129?/virtual/domain1.com10.10.10.130?/virtual/domain2.com10.10.10.157?/virtual/domain3.com#?OpzionepredefinitapertuttiglialtriindirizziIPdefault?/#Í3.4Co_dicesorgenteMQuestoilcoGdicesorgenteinCdelprogrammavirtuald. ʸȘnecessariocompilarloeinstallarloin/usr/loGcal/bin|conpermessi0755,Eutenteroot,Eegrupporoot. SL'unicaopzionedicompilazione莡VERBOSELOGU cheattivqa/disattivaU laregistrazionedelleconnessionineiledilog:ؼ#include?#include?#include?#include?#include?#include?#include?#include?#undef?VERBOSELOG#define?BUFSIZE8192int?getipaddr(char**ipaddr){)`struct?sockaddr_invirtual_addr;)`static?charipaddrbuf[BUFSIZE];)`int?virtual_len;)`char?*ipptr;)`virtual_len=sizeof(virtual_addr);)`if?(getsockname(0,(structsockaddr*)&virtual_addr,&virtual_len)<0))`{Ssyslog(LOG_ERR,"getipaddr:?getsocknamefailed:%m");Sreturn?-1;)`})`if?(!(ipptr=inet_ntoa(virtual_addr.sin_addr))))`{Ssyslog(LOG_ERR,"getipaddr:?inet_ntoafailed:%m");Sreturn?-1;)`})`strncpy(ipaddrbuf,ipptr,sizeof(ipaddrbuf)-1);)`*ipaddr=ipaddrbuf;)`return?0;Z_2 ~?G3.8Virtuald88ՁV} int?iptodir(char**dir,char*ipaddr,char*filename){)`char?buffer[BUFSIZE],*bufptr;)`static?chardirbuf[BUFSIZE];)`FILE?*fp;)`if?(!(fp=fopen(filename,"r"))))`{Ssyslog(LOG_ERR,"iptodir:?fopenfailed:%m");Sreturn?-1;)`})`*dir=NULL;)`while(fgets(buffer,BUFSIZE,fp)))`{Sbuffer[strlen(buffer)-1]=0;Sif?(*buffer=='#'||*buffer==0)} continue;Sif?(!(bufptr=strchr(buffer,'')))S{} syslog(LOG_ERR,"iptodir:?strchrfailed");} return?-1;S}S*bufptr++=0;Sif?(!strcmp(buffer,ipaddr))S{} strncpy(dirbuf,bufptr,sizeof(dirbuf)-1);} *dir=dirbuf;} break;S}Sif?(!strcmp(buffer,"default"))S{} strncpy(dirbuf,bufptr,sizeof(dirbuf)-1);} *dir=dirbuf;} break;S})`})`if?(fclose(fp)==EOF))`{Ssyslog(LOG_ERR,"iptodir:?fclosefailed:%m");Sreturn?-1;)`})`if?(!*dir))`{Ssyslog(LOG_ERR,"iptodir:?ipnotfoundinconffile");Sreturn?-1;)`})`return?0;} _2 ~?G3.8Virtuald89ՁV int?main(intargc,char**argv){)`char?*ipaddr,*dir;)`openlog("virtuald",LOG_PID,LOG_DAEMON);#ifdef?VERBOSELOG)`syslog(LOG_ERR,"Virtuald?Starting:$Revision:1.49$");#endif)`if?(!argv[1]))`{Ssyslog(LOG_ERR,"invalid?arguments:noconffile");Sexit(0);)`})`if?(!argv[2]))`{Ssyslog(LOG_ERR,"invalid?arguments:noprogramtorun");Sexit(0);)`})`if?(getipaddr(&ipaddr)))`{Ssyslog(LOG_ERR,"getipaddr?failed");Sexit(0);)`}#ifdef?VERBOSELOG)`syslog(LOG_ERR,"Incoming?ip:%s",ipaddr);#endif)`if?(iptodir(&dir,ipaddr,argv[1])))`{Ssyslog(LOG_ERR,"iptodir?failed");Sexit(0);)`})`if?(chroot(dir)<0))`{Ssyslog(LOG_ERR,"chroot?failed:%m");Sexit(0);)`}#ifdef?VERBOSELOG)`syslog(LOG_ERR,"Chroot?dir:%s",dir);#endif)`if?(chdir("/")<0))`{Ssyslog(LOG_ERR,"chdir?failed:%m");Sexit(0);)`})`if?(execvp(argv[2],argv+2)<0))`{Ssyslog(LOG_ERR,"execvp?failed:%m");Sexit(0); _2 ~?G4.8Gliscriptdishellb[V10ՁV)`} )`closelog();)`exit(0);}(4GliG\scriptdishell荍4.1VirtfsMCiascun;|dominiodovrebbGeavereunapropriastrutturadidirectory*.hDalmomentochesistausandochrootbisogner>inserirviunduplicatodituttiilenecessari,vcomelibreriecondivise,lebinari,ledicongurazioneeccetera.qIoU utilizzo/virtual/domain1.compGerciascundominiochecreo.ؼT*utto*cioGccupadellospaziosudisco,macomunquemenocostosodiunanuovqamacchinacontantodischede.direte.Severamentenecessariorisparmiarespaziosudisco,2sipGossonocollegareinsiemetuttelecopieEdeilecondeglihardlink,FinmoGdocheesistaeettivqamentesolounacopiadiognilebinario.IllesystemsscheutilizzoiooGccupapocopidi2Mbyte.yComunquessloscriptcheseguetentadicopiaretuttiileU dallesystemprincipaleinmoGdodaessereilpigenericopossibile.EccoU unesempiodisemplicescriptvirtfs:#!/bin/shecho?'$Revision:1.49$'echo?-n"Inserisciilnomedidominio:"read?domainif?["$domain"=""]then)`echo?Nonstatoinseritoniente:esecuzioneinterrotta)`exit?0fileadingdir=/virtualecho?-n"Inserireladirectoryprincipale:(Sceltapredefinita:$leadingdir):"read?ansif?["$ans"!=""]then)`leadingdir=$ansfinewdir=$leadingdir/$domainif?[-d"$newdir"]then)`echo?Lanuovadirectory:$newdir:giesistente _2 ~?G4.8Gliscriptdishellb[V11ՁV)`exit?0 else)`echo?Lanuovadirectory:$newdirfiecho?Crea$newdirmkdir?-p$newdirecho?Creabincp?-pdR/bin$newdirecho?Creadevcp?-pdR/dev$newdirecho?Creadev/logln?-f/virtual/log$newdir/dev/logecho?Creaetcmkdir?-p$newdir/etcfor?iin/etc/*do)`if?[-d"$i"])`thenScontinue)`fi)`cp?-pd$i$newdir/etcdoneecho?Creaetc/skelmkdir?-p$newdir/etc/skelecho?Creahomefor?iinabcdefghijklmnopqrstuvwxyzdo)`mkdir?-p$newdir/home/$idoneecho?Creahome/c/crcmkdir?-p$newdir/home/c/crcchown?crc.users$newdir/home/c/crcecho?Crealibmkdir?-p$newdir/libfor?iin/lib/*do)`if?[-d"$i"])`thenScontinue)`fi)`cp?-pd$i$newdir/lib ߠ_2 ~?G4.8Gliscriptdishellb[V12ՁVdone echo?Creaprocmkdir?-p$newdir/procecho?Creasbincp?-pdR/sbin$newdirecho?Creatmpmkdir?-p-m0777$newdir/tmpchmod?+t$newdir/tmpecho?Creausrmkdir?-p$newdir/usrecho?Creausr/bincp?-pdR/usr/bin$newdir/usrecho?Creausr/libmkdir?-p$newdir/usr/libecho?Creausr/lib/localecp?-pdR/usr/lib/locale$newdir/usr/libecho?Creausr/lib/terminfocp?-pdR/usr/lib/terminfo$newdir/usr/libecho?Creausr/lib/zoneinfocp?-pdR/usr/lib/zoneinfo$newdir/usr/libecho?Creausr/lib/\*.so\*cp?-pdR/usr/lib/*.so*$newdir/usr/libecho?Creausr/sbincp?-pdR/usr/sbin$newdir/usrecho?Faunlinkausr/tmpln?-s/tmp$newdir/usr/tmpecho?Creavarmkdir?-p$newdir/varecho?Creavar/lockcp?-pdR/var/lock$newdir/varecho?Creavar/logmkdir?-p$newdir/var/logecho?Creavar/log/wtmpcp?/dev/null$newdir/var/log/wtmp ߠ_2 ~?G4.8Gliscriptdishellb[V13ՁV echo?Creavar/runcp?-pdR/var/run$newdir/varecho?Creavar/run/utmpcp?/dev/null$newdir/var/run/utmpecho?Creavar/spoolcp?-pdR/var/spool$newdir/varecho?Faunlinkavar/tmpln?-s/tmp$newdir/var/tmpecho?Creavar/www/htmlmkdir?-p$newdir/var/www/htmlchown?webmast.www$newdir/var/www/htmlchmod?g+s$newdir/var/www/htmlecho?Creavar/www/mastermkdir?-p$newdir/var/www/masterchown?webmast.www$newdir/var/www/masterecho?Creavar/www/servermkdir?-p$newdir/var/www/serverchown?webmast.www$newdir/var/www/serverexit?0#Í4.2VirtexecMPer3pGotereseguiredeicomandiinunambientevirtualebisognaprimafarechrootnelladirectorypressatae?"pGoieseguireilcomando./HoscrittounappositoscriptdishellchiamatovirtexecchefaquestopGerunqualsiasiU comando:ؼ#!/bin/shecho?'$Revision:1.49$'BNAME=`basename?$0`FIRST4CHAR=`echo?$BNAME|cut-c1-4`REALBNAME=`echo?$BNAME|cut-c5-`if?["$BNAME"="virtexec"]then)`echo?Nonsipueseguiredirettamentevirtexec:NECESSARIOunlinksimbolico)`exit?0fiif?["$FIRST4CHAR"!="virt"]thenM_2 ~?G4.8Gliscriptdishellb[V14ՁV)`echo?Illinksimbolicononaunafunzionevirt )`exit?0filist=""num=1for?iin/virtual/*do)`if?[!-d"$i"])`thenScontinue)`fi)`if?["$i"="/virtual/lost+found"])`thenScontinue)`fi)`list="$list?$i$num")`num=`expr?$num+1`doneif?["$list"=""]then)`echo?Nonesistonoambientivirtuali)`exit?0fidialog?--clear--title'Virtexec'--menuPick207012$list2>/tmp/menu.$$if?["$?"="0"]then)`newdir=`cat?/tmp/menu.$$`else)`newdir=""fitput?clearrm?-f/tmp/menu.$$echo?'$Revision:1.49$'if?[!-d"$newdir"]then)`echo?Lanuovadirectory:$newdir:NONESISTE)`exit?0else)`echo?Nuovadirectory:$newdirfiecho?bname:$BNAMEecho?realbname:$REALBNAMEՠ_2 ~?G4.8Gliscriptdishellb[V15ՁVif?["$*"=""] then)`echo?args:noneelse)`echo?args:$*fiecho?Spostamentoin$newdircd?$newdirecho?Esecuzionedelprogramma$REALBNAMEchroot?$newdir$REALBNAME$*exit?0Sipregadinotarecheloscriptfunzionasolosesihainstallatosulpropriosistemailprogrammadialog.PerU usarevirtexecbastacollegareconunlinksimbGolicounprogrammaavirtexec.qAdesempio:ln?-s/usr/local/bin/virtexec/usr/local/bin/virtpasswdln?-s/usr/local/bin/virtexec/usr/local/bin/virtviln?-s/usr/local/bin/virtexec/usr/local/bin/virtpicoln?-s/usr/local/bin/virtexec/usr/local/bin/virtemacsln?-s/usr/local/bin/virtexec/usr/local/bin/virtmailqIn+questomoGdoquandosidigitervirtviovirtpasswdovirtmailqsipotreditareunleconvi,ncambiarelaY%passworddiunutenteocontrollarelacoGdadipostasulpropriosistemavirtuale.}SipossonocrearetantilinksimbGoliciavirtexecquantioGccorrono.{Danotareche, seilprogrammarichiedeunalibreriacondivisa,essaU devetrovqarsinellesystemvirtuale,coscomeillebinariostesso."c.4.3NoteMDi5solitoioinstallotuttigliscriptin/usr/loGcal/bin.H2T*uttocichenonvogliocompaianellesystemvirtualeloCmettoin/usr/loGcal.kLoscriptnoncopiaalcunledi/usr/localnellesystemvirtuale.kȑCimportantecheognilechenondevetrovqarsiintuttiilesystemvirtualivengarimosso.nAdesempio,):sulmiosistema莡installatoVNsshediononvogliochelachiaveprivqatapGerilserversiadispGonibilesututtiilesystemvirtuali,Ecos쎡locancellodaciascunlesystemvirtualedopGoaverlanciatovirtfs.:nOltreaquesto,cambioancheresolv.conferimuovolpGerragionilegalituttocichecontieneunriferimentoadunaltrodominio.TDAdesempio,/etc/hosts/etc/HOSTNAME.ؼQuestiU sonoiprogrammichehocollegatoconunlinksimbGolicoavirtexec:virtpasswdU cambialapassworddiunutentevirtadduserU creaunutentevirtdeluserU cancellaunutentevirtsmbstatusU visualizzalostatodiSAMBAvirtviU editaunlevirtmailqU controllavqar/spGool/mqueuevirtnewaliasesU ricostruiscelatabGelladeglialiasנ_2 ~?G5.8DNS16ՁV5DNS:IlU DNSpuessereconguratonormalmente.qC'unHOWTOsulDNS.(6Syslogd荍6.1ProblemaMSyslogd_`ilprogrammautilitdiregistrazionedeimessaggideiservizitipicamenteutilizzatosuisistemi UNIX.\SyslogdundemonecheapreunlespGecialechiamatoFIFO.UnaFIFO.unlespGecialechesicompGorta˸comeuna`pipe'.HT*uttocichevienemandatosullatoscritturauscirsullatolettura.CisonodelleVfunzioniCVchescrivonosullatoscrittura.vSeunprogrammautilizzatalifunzioniCVl'outputverrmandatoU alsyslogd.ؼCisiricordichesiimpGostatounambientechrootechelaFIFOdacuisyslogdstaleggendo(/dev/log)non3presente.flQuestosignicache[inassenzadioppGortunemodicheN.d.T.]asyslogdnongiungerannoimessaggiU provenientidagliambientivirtuali.#=6.2Soluzione6.2.1#!\ImpQostaredeilinkSyslogdU ingradodiutilizzareunaFIFOdierentesespGecicatasullarigadicomando:հsyslogd?-p/virtual/logPoiU sicolleghiconunlinksimbGolico/dev/loga/virtual/logcon:ln?-sf/virtual/log/dev/logInneU sicolleghinoconhardlinktuttelecopiedi/dev/logaquestolecon:ln?-f/virtual/log/virtual/domain1.com/dev/logLoscriptvirtfssopraripGortatofagituttoquesto.,)Datoche/virtualsitrovqasuununicodiscoeile/dev/log sonoccollegaticonhardlink,essihannolostessonumerodiinoGdeepuntanoaglistessidati.TChrootnonpu򎡍impGedirlo,ccosoratuttii/dev/logvirtualifunzioneranno.GSinotichetuttiimessaggiprovenientidaivqariambientivirtualiverrannoregistratiassieme.ȑpGossibilecomunqueideareprogrammiseparatipGerltrareleU informazionicheinteressano. Տ6.2.2#!\Syslogd.initQuestamversionedisyslogd.initeettuaunhardlinka/dev/logadognisuoavviopGoichsyslogdcancellaecreaU laFIFO/dev/logadognisuanuovqaesecuzione.qEccounaversionemoGdicatadellesyslogd.init:հ#!/bin/sh.?/etc/rc.d/init.d/functionsԩ_2 ~?G6.8Syslogd17ՁVcase?"$1"in  Xstart))`echo?-n"Oravienefattol'hardlinkadevlog:")`ln?-sf/virtual/log/dev/log)`echo?done)`echo?-n"Lanciodeidemonidilogdisistema:")`daemon?syslogd-p/virtual/log)`daemon?klogd)`echo)`echo?-n"Oravienefattoillinkdeidevlogvirtuali:")`for?iin/virtual/*)`doSif?[!-d"$i"]Sthen} continueSfiSif?["$i"="/virtual/lost+found"]Sthen} continueSfiSln?-f/virtual/log$i/dev/logSecho?-n".")`done)`echo?"done")`touch?/var/lock/subsys/syslogd)`;; Xstop))`echo?-n"Arrestodeidemonidilogdisistema:")`killproc?syslogd)`killproc?klogd)`echo)`rm?-f/var/lock/subsys/syslogd)`;; X*))`echo?"Impiego:syslogd{start|stop}")`exit?1esacexit?0#Í6.3SyslogdmultipliM6.3.1#!\UnopQerdiscoSe#c'carenzadispazioinunlesystemebisognasuddividereidominivirtualisupidischi,cisiricordiche gliؒhardlinknonfunzionanotradischidiversi.QuestosignicachebisognerlanciareunsyslogddistintopGerognigruppodidominidiundisco.Adesempio,secifosserotredicidominisu/virtual1equindicisu/virtual2, sidovrebbGerocollegaretramitehardlinkitredicidominia/virtual1/logelanciareunsyslogdconsyslogd?-p/virtual1/log,l#pGoigcollegareconhardlinkglialtriquindicidominia/virtual2/logelanciareunU altrosyslogdconsyslogd?-p/virtual2/log.<_2 ~?G7.8FTPvirtualex 18ՁV6.3.2#!\UnopQerdominioMSeGsipreferiscenonaccentrareiloginununicopGostopossibilelanciareunsyslogdperdominio.Questo metoGdocomportaunosprecodirisorsedisistema(cisonopiprocessiattivi),/quindinonloraccomando,ma:qpifaciledaimplementarediquelloprecedente.!rȑ:6necessariomoGdicareillesyslogd.initanch鎡ilbsyslogdvengamandatoinesecuzioneconchroot?/virtual/domain1.comsyslogdbequestopGerciascundominio.86CosAfacendoognisyslogdverreseguitoall'internodell'ambientedichrooteilogdeivqariambientivirtualiGsitroverannoGsingolarmentein/virtual/domain1.com/vqar/logpiuttostochetuttiassiemeinunsolo/vqar/log.bNon&bisognadimenticaredilanciareunsyslogdnormalepGerilsistemaprincipaleeundemonedilogU delkernelklogd.(7FTPG\virtuale荍7.1InetdW*u-ftpGd'vienefornitoconunsupportointernoallavirtualizzazione.bgAdognimoGdononsipossonoavere'ledipasswordseparatipGerognidominio. Adesempio,sebob@domain1.comandbob@domain2.comvoglionoentrambi%;unaccount,YBnecessarioassegnarenomiutentediversi,YBcomebGobebob2,YBochiedereadunodeidueLZutentidiscegliereunnomeutentediverso.nOrainveceabbiamounlesystemvirtualepGerognidominio,quindiledellepasswordseparati,equestoproblemanonsussiste.QȑsucientecrearegliscriptvirtnewusereU virtpasswdnelmoGdosummenzionatoelacongurazionecompleta.ؼLeU voGcidiinetd.confperwu-ftpd:ؼftp?streamtcpnowaitroot/usr/local/bin/virtuald\)`virtuald?/virtual/conf.ftpwu.ftpd-l-a#Í7.2FTPanonimoLecosenoncambianousandovirtuald.$zȑsucientecrearel'utenteFTPin/virtual/domain1.com/etc/passwdU comesifarebbGenormalmente.ؼftp:x:14:50:Anonymous?FTP:/var/ftp:/bin/falsePoi"bisognacongurareladirectorypGerl'FTP"anonimo.`CisonoledellepassworddistintipGerognisingolo dominio,&pGercuipossibilelimitarel'FTPanonimoaunqualsivoglianumerodiessi.Sinotiche,&datocheil`serverFTP`sitrovqagiinunambientedichrootnelladirectory/virtual/domain1.com,cnonnecessariopremettereU alcunpGercorso.#Í7.3Utentidell'FTPvirtualeW*u-ftpGdsupportal'utilizzodelgruppoguest.RNCipermettedicreareareeFTPsdierentiperciascunutente.IlserverFTPeettuaunchrootsull'areaspGecicatainmodochel'utentenonpGossausciredaquelramodell'albGeroRdelledirectory*.pzGliutenticreatiinquestomodoall'internodiundominiovirtualenonpotrannovedereU iledisistema.ؼSiU aggiungailgruppGoguestalle/virtual/domain1.com/etc/ftpaccessle.SivcreiunavoGce/virtual/domain1.com/etc/passwdconladirectorydichrooteladirectoryhomedipartenza separateU da/./:N_2 ~?G8.8W ebvirtualexp19ՁVguest1:x:8500:51:Guest?FTP:/home/g/guest1/./incoming:/bin/falsedjInnesiconguriladirectoryhomediguestcomesifarebbGeperl'FTPanonimo.UCisonoledellepassword distintiPpGerciascundominio,Ĝquindipossibilespecicarequalidominihannoaccountguestequaliutentisonoutentiguestall'internodiundominio.Sinotiche,^datocheilserverFTPsitrovqagiinunambientediU chrootnelladirectory/virtual/domain1.com,nonnecessariopremetterealcunpGercorso.((Z8W(ebG\virtuale荍8.1UsandovirtualdM8.1.1#!\NonraccomandabileApacheVhaunsuppGortointernopGeridominivirtuali.X#ȑ,ilsoloprogrammadicuiraccomandodiusarele funzionalit+internepGerlagestionedeidominivirtuali.Ogniqualvoltasilanciaqualcosaattraversoinetdc'|unprezzodapagare:7ilprogrammadeveripartiredazeroognivoltachenevienerichiestal'esecuzione.Questo`causaunrallentamento`neltempidirispGosta,cheaccettabileperlagranpartedeiservizi,mainaccettabile>vpGerquelloweb.iApache>vhaancheunmeccanismoperimpedireconnessioniquandocenesianotroppGeU inentrata,chepGotrebbeU essereunfattorecriticoanchepGersiticonunvolumeditracomedio.ؼDettoinpGocheparole,renderevirtualeApacheconvirtualdunapGessimaidea.GVirtualdtrovqalasuaragiond'esserenelcolmarelelacunediservizichenonhannolacapacitdigestireinproprioidominivirtuali.Virtuald+nonpGensatoperrimpiazzaredelcodicedibuonaqualitchesiaingradodisvolgeredasquestocompito.Per\colorochesonoabbastanzasconsideratidafarlocomunque,Lmalgradoquantodettosopra,Leccocomefare: =Ӎ8.1.2#!\InetdMMoGdicareU /etc/inetd.confdjvi?/etc/inetd.conf#Aggiungiquestalineawww?streamtcpnowaitwww/usr/local/bin/virtuald\)`virtuald?/virtual/conf.wwwhttpd-f/var/www/conf/httpd.conf8.1.3#!\HttpQd.confMMoGdicareU /vqar/www/conf/httpd.confdjvi?/var/www/conf/httpd.conf#OdovunquesitrovinoifilediconfigurazioneDovrebbe?esserci:ServerType?standaloneRimpiazzare?larigacon:ServerType?inetd8.1.4#!\CongurazioneMSiU conguripGoiognisingolaistanzadelserverApachecomesifarebbGeusandoloperunsingolodominio._2 ~?G8.8W ebvirtualexp20ՁV8.1.5#!\HttpQd.initMNonU necessariounlehttpGd.init,datocheilprogrammaservervieneeseguitoattraversoinetd."׍8.2UsandoApacheVirtualHostApachehatreledicongurazioneaccess.conf,xhttpd.conf,eͼsrm.conf.QLeversionirecentidiApache hannoresononnecessariitreledicongurazione.]ComunquehotrovqatochesuddividerelacongurazioneinU tresezioninesemplicalagestione,pGercuicontinuerU afarecosinquestoHOWTO. )8.2.1#!\A>ccess.confMQuestoDledicongurazioneusatopGercontrollarel'accessoalledirectorydellastrutturadelsito.OEccounacongurazioneU diesempiochemostracomesipGossanogestireopzionidierentipGerciascundominio:#?/var/www/conf/access.conf:Configurazionediaccessoglobale#?Leopzionisonoereditatedalladirectorygenitore#?ConfiguraladirectoryprincipaleconleopzionipredefiniteAllowOverride?NoneOptions?Indexes#?FornisceaundominiounadirectoryprotettadapasswordAuthUserFile?/var/www/passwd/domain1.com-privAuthGroupFile?/var/www/passwd/domain1.com-priv-gAuthName?PRIVSECTIONAuthType?Basicrequire?valid-user#?PermetteiServerSideIncludeinunaltrodominioOptions?IncludesNOEXEC8.2.2#!\HttpQd.confMQuestoledicongurazioneusatopGergestireleopzioniprincipalidelserverApache. PEccounacongurazioneU diesempiochemostracomesipGossanogestireopzionidierentipGerciascundominio:#?/var/www/conf/httpd.conf:Fileprincipalediconfigurazionedelserver#?Inizio:sezioneprincipalediconfigurazione#?Larigaseguentenecessariadatochenonsistausandoinetdb_2 ~?G8.8W ebvirtualexp21ՁVServerType?standalone #?PortasullaqualegirailserverPort?80#?Registraneilogglihostdeiclientconiloronomipiuttostochecon#?gliindirizziIPHostnameLookups?on#?UtenteconiprivilegidelqualegirailserverUser?wwwGroup?www#?Collocazionedeifilediconfigurazione,dierroreedilogServerRoot?/var/www#?Fileincuisitroval'identificatorediprocesso(ProcessId)delserverPidFile?/var/run/httpd.pid#?FilediinformazionisullostatointernodelserverScoreBoardFile?/var/www/logs/apache_status#?OpzionidiTimeouteKeepAliveTimeout?400KeepAlive?5KeepAliveTimeout?15#?LimitazioniperiserverinesecuzioneMinSpareServers?5MaxSpareServers?10StartServers?5MaxClients?150MaxRequestsPerChild?30#?Fine:sezioneprincipalediconfigurazione#?Inizio:sezionehostvirtuale#?SpecificalecoppieIP:portasucuiildemoneaccettaconnessioni#?IohounadirettivaperogniIPnecessarioinmododapoter#?ignorareesplicitamentecertidominiListen?10.10.10.129:80Listen?10.10.10.130:80#?LadirettivaVirtualHostpermettedispecificareunaltrodominio#?virtualesulserver.LamaggiorpartedelleopzionidiApachepossono#?esserespecificateall'internodiquestasezione.#?Indirizzodie-maildacontattareincasodierrori_2 ~?G8.8W ebvirtualexp22ՁVServerAdmin?webmaster@domain1.com #?CollocazionedeidocumentiwebneldominiovirtualeDocumentRoot?/virtual/domain1.com/var/www/html#?NomedidominiodelserverServerName?www.domain1.com#?FilediLogrelativialladirettivaServerRootErrorLog?logs/domain1.com-error_logTransferLog?logs/domain1.com-access_logRefererLog?logs/domain1.com-referer_logAgentLog?logs/domain1.com-agent_log#?UsagliscriptCGIinquestodominioScriptAlias?/cgi-bin//var/www/cgi-bin/domain1.com/AddHandler?cgi-script.cgiAddHandler?cgi-script.pl#?Indirizzodie-maildacontattareincasodierroriServerAdmin?webmaster@domain2.com#?CollocazionedellepaginewebneldominiovirtualeDocumentRoot?/virtual/domain2.com/var/www/html#?NomedidominiodelserverServerName?www.domain2.com#?FilediLogrelativialladirettivaServerRootErrorLog?logs/domain2.com-error_logTransferLog?logs/domain2.com-access_logRefererLog?logs/domain2.com-referer_logAgentLog?logs/domain2.com-agent_log#?NientescriptCGIperquestohostvirtuale#?Fine:sezionehostvirtuale 8.2.3#!\Srm.confMQuestohNledicongurazionevieneusatopGercontrollareilmodoincuivengonoprocessatelerichiesteeilformatodeirisultati.X,NoncisonomoGdicheparticolaridaapportareperidominivirtuali.X,IlledicongurazioneU diesempiodovrebbGeandarbene. W_2 ~?G8.8W ebvirtualexp23ՁV8.2.4#!\HttpQd.initMNonsidevonoappGortatemodicheparticolariallehttpGd.init.GSipuusarequellostandard, compresonella congurazioneU diApache.#Í8.3Overowdeidescrittoridile8.3.1#!\A>ttenzione!QuantoXsidirsiapplicasoloalserverApacheeseguitocome`standalone'(indipGendente).{Seilprogrammaserveruvieneeseguitoattraversoinetd,}essononinteragisceconglialtridomini,}pGercuihaun'interatabGelladiU descrittoridilepGerognidominio.ؼOgnij=ledilogcheilserverApacheapresignicaundescrittoredileinpipGerilprocesso.C'unlimitedi256descrittoridilepGerprocessoinLinux.erApachemultipliSe siipGotizzal'usodicinquedescrittoridileperdominio,<sipossonogestire50dominisuunsoloserv-erZxApachesenzanessunproblema.Comunque,nelcasosiriscontrinoproblemidelgenere,sipucreare/vqar/www1conunserverApacheches'incarichideidominidadomain1adomain25e/vqar/www2conunserver8Apachechegestiscaidominidaldomain26aldomain50ecosvia.YCosfacendoogniserveravrlapropriadirectorydiledicongurazione,dierroreedilog.Ogniserverdovressereconguratosepa-ratamente,tqognunon-conlepropriedirettiveListeneVirtualHost.NoncisidimentichidilanciarepiservertramiteU ilpropriolehttpGd.init.#Í8.4ServerchecondividonoununicoIP8.4.1#!\RisparmiareindirizziIPHTTP'(HypGerT*extTransferProtoGcol)versione1.1fornisceunafunzionalitpercomunicareilnomedidominioWdelserveralclient.CCisignicacheilclientnonhanecessitdirisolvereilnomedelserverapartiredall'indirizzoIP*.PercidueservervirtualipGotrannoavereglistessiindirizziIPiedesseresitiwebdiversi.LaRcongurazionediApachelastessadisopraeccettochenonsarnecessarioinseriredirettiveListendierenti,U datocheiduedominiavrannolostessoIP*. 8.4.2#!\Incon>veniente!IlsoloproblemachevirtualdusagliindirizziIP)pGerdistingueretraivqaridomini.qNellasuastesuraattuale,=[nelcasosicondividanoindirizziIPN.d.T.]virtualdnonsarebbGeingradodieseguireilchrootadierentirdirectorydispGoolrperognidominio.4PerciilserviziodipostarisponderebbesoloalivellodisingoloindirizzoIPߣenoncisarebbGepiunasingoladirectorydispoolperognidominio.JaT*uttiiclientdelmedesimoIPjcondivisojsulwebdovrebbGerocondividerelamedesimadirectorydispool.Cisignicacheduplicatidi3nomiutentecostituerebbGeronuovqamenteunproblema[nonsipGotrebbero3usareglistessinomiutenteindominiͲvirtualidiversiN.d.T.].6ComunquequestoilprezzodapagarepGercondividerelostessoindirizzoIP*._2 ~?G9.8Mail/P>opvirtuale^њ24ՁV8.5MaggioriinformazioniMQuestoޕHOWTOwmostracomeimplementareilsuppGortoaidominivirtualisoloconilwebserverApache.ILa maggiorpartedeiserverwebusanoun'interfacciasimile.ULPermaggioriinformazionisulwebhostingvirtualesiconsultiWWWXHOWTO׹,ladoGcumentazionediApachepressoSitoXwebdiAp}/ache,!oladoGcumentazionepressoU Ap}/acheW;eek.(9Mail/PcopG\virtuale荍9.1ProblemaLadomandapGerilsupportoallapostaelettronicavirtualeincontinuacrescita.1iSendmaildicedisupportarelapGostavirtuale.ICichesupportainrealtlaricezionedimessaggiperdominidiversi.IQuindisipu򎡍spGecicareNdireinoltrarelapostaaltrove.odComunque,PseNimessaggivengonoreinoltratiallamacchinaloGcaleecisonodeimessaggipGerbob@domain1.comebob@domain2.com,essinirannonellostessofolder.ZQuestoU unproblema,datochei`bGob'sonopersonediverseconpostadiversa.#Í9.2SoluzioneCi'sipuaccertarecheogninomeutentesiaunico,0usandounoschemadinumerazione:ZbGob1,0bob2'ecceterao(prepGonendopochicaratteriaciascunnomeutente:Zdom1bGob,1dom2bob(eccetera.b}SipGotrebbe(anchesman-ettaresuisingoliprogrammicoinvolti,facendoinmoGdocheeseguanoquesteconversionipGercontolorodietroleKquinte,[macipGotrebbeKcausareconfusione.UBInoltreimessaggidipGostainuscitahannol'intestazionedi9Gdominiomaindomain.com,rQmentresivorrebbGechelapGostainuscitaavesseleintestazionidiversicatesecondoU idiversisottoGdomini.ؼPropGongoIduesoluzioni.NUnafunzionaconsendmailel'altraconQmail.LasoluzionecheusasendmaildovrebbGeGfunzionaresuun'installazionedibasedisendmail.Comunqueessacondividetuttelelimitazioniimplicite Tdisendmail.QuestasoluzionerichiedeinoltrechepGerognidominiovengaeseguitounsendmailin7moGdalitcoda.!Avere50opiprocessidisendmailchesirisveglianoadogniorapusottopGorreunamacchinaU aduncaricononindierente.Larsoluzionechecontemplal'usodiQmailnonrichiedel'esecuzionediistanzemultiplediQmailepufarea0?menodiunadirectorydicoGda.Richiedeinveceunprogrammaextra,gdatocheQmailnonsiappGoggiaaӶvirtuald.CSuppGongocheunasoluzionesimilepossaesserearontataancheconsendmail.CAdognimoGdoQmailU siprestaatalesoluzioneinmoGdopipulito.NonsappGoggiocomunquel'usodiunprogrammapiuttostochedell'altro.L'installazionedisendmaillaunpGo'U pilisciamaQmailprobabilmenteilpipotentedeiduepacchetti.#Í9.3LasoluzioneconSendmailM9.3.1#!\In>troQduzioneUnlesystemvirtualepGerognidominiopermetteaquest'ultimodiavereilsuoproprio/etc/passwd.JQuesto vuoldirechebGob@domain1.comebob@domain2.comsonoutentidiversipresentiinle/etc/passwddiversicosicch5gestirelapGostanonsarunproblema.H2Inoltreidominihannociascunolepropriedirectorydispool,inU moGdocheifolderdipostasarannolediversiinlesystemvirtualidiversi.!_2 ~?G9.8Mail/P>opvirtuale^њ25ՁV9.3.2#!\CreareilledicongurazionediSendmailMSiU creiille/etc/sendmail.cfcomesifarebbGenormalmenteusandom4.qIohousato:ؼdivert(0) VERSIONID(`tcpproto.mc')OSTYPE(linux)FEATURE(redirect)FEATURE(always_add_domain)FEATURE(use_cw_file)FEATURE(local_procmail)MAILER(local)MAILER(smtp) 9.3.3#!\MoQdicareilledicongurazionediSendmailSiVmoGdichi/virtual/domain1.com/etc/sendmail.cfinmodocherispondaconleintestazioniappropriatealproprioU dominiovirtuale:ؼvi?/virtual/domain1.com/etc/sendmail.cf#Circaallariga86Dovrebbe?esserci:#Dj$w.Foo.COMRimpiazzarlo?con:Djdomain1.com 9.3.4#!\ConsegnaloQcaleconSendmailSiU introGducanoin/virtual/domain1.com/etc/sendmail.cwinomihostlocali.ؼvi?/virtual/domain1.com/etc/sendmail.cwmail.domain1.comdomain1.comdomain1localhost 9.3.5#!\P>ostatradominivirtualiconSendmail: iltrucco(V ersioniprecedentila8.8.6)Inognicaso,QsendmailrichiedeunapiccolamoGdicaalcodicesorgente. 69Sendmailhaunlechiamato/etc/sendmail.cw4checontienetuttiinomidellemacchinecuisendmailconsegnerlapGostapostalocalmenteinvece$Cdireindirizzarlaadun'altramacchina.SendmailfauncontrollointernodituttiidispGositividellamacchina pGerinizializzarequestalistacongliindirizziIP locali.CicausaunproblemanelcasodiinviidimessaggidipGostatradominivirtualisullastessamacchina.xSendmailsarportatoacrederechel'altrodominio {virtualesiaunindirizzoloGcaleetratterimessaggilocalmente.Ad {esempio,:Rbob@domain1.cominvia`un'e-mailafred@domain2.com.ADatocheilsendmaildidomain1.comcredechedomain2.comsiaunfindirizzoloGcale,\metterilmessaggionelladirectorydispooldidomain1.comenonloinviermaiadomain2.com.qȖU necessariomoGdicaresendmail(iol'hofattosuunaversione8.8.5senzaproblemi):0_2 ~?G9.8Mail/P>opvirtuale^њ26ՁVvi?v8.8.5/src/main.c#Circaallariga494 Dovrebbe?esserci:load_if_names();Rimpiazzarlo?con:/*?load_if_names();Commentatoperchdaproblemiconidominivirtuali*/ؼDanotarechequestopassonecessariosolosesivuoleessereingradodispGedirepostatraidominivirtuali,cosaU cheritengoprobabile.ؼCirisolverilproblema.ZComunqueildeviceethernetprincipaleeth0nonvienerimosso.ZQuindisesiinviaunmessaggiodipGostadaunIPvirtualeaquellousatodaeth0sullastessamacchina,FSessoverrconseg-natoloGcalmente./PerquestoiononfaccioaltrocheusarlocomeunIPpGosticciovirtual1.maindomain.com(10.10.10.157). PNoninviermaipGostaaquestohost,Lnlofarannoidominivirtuali.Questoanchel'IPcheU usereipGercollegarmiallamacchinaamezzosshpGercontrollaresetuttovqabGene. 9.3.6#!\P>ostatradominivirtualiconSendmail:2 Nuovefunzionalit(V ersionisuccessivealla#!\8.8.6)MDallaversione8.8.6diSendmaildispGonibileunanuovqaopzione,qchepGermettedidisabilitareilcaricamentodelle2interfacceextradirete.^CisignicacheNONpinecessariomoGdicareilsorgenteinalcunmoGdo.T*aleU opzionechiamataDontProbeInterfaces.MoGdicareU /virtual/domain1.com/etc/sendmail.cfؼvi?/virtual/domain1.com/etc/sendmail.cf#AggiungerelalineaO?DontProbeInterfaces=True 9.3.7#!\Sendmail.initMSendmailBnonpupiesserelanciatocomedemone`standalone'(indipGendente),necessarioeseguirloat-traversotinetd.ICiinecienteecauserunpGeggioramentodeitempidiavvio,0manelcasosiavesseunsitocon6tracopiuttostoaltononglisidovrebbGefarcomunquecondividereunbGoxvirtualeconaltridomini.gdȎdaJnotarechesendmailNON=vieneeseguitoconl'opzione-bd._Sinotianchechenecessariovengaeseguitounsendmail?-qpGerognidominio,3Rperprocessarelacodadeimessaggidaconsegnare.Eccoilnuovolesendmail.init:#!/bin/sh.?/etc/rc.d/init.d/functionscase?"$1"in Xstart))`echo?-n"Avviodisendmail:")`daemon?sendmail-q1h)`echo)`echo?-n"Avviodelsendmailvirtuale:")`for?iin/virtual/*)`do9_2 ~?G9.8Mail/P>opvirtuale^њ27ՁVSif?[!-d"$i"] Sthen} continueSfiSif?["$i"="/virtual/lost+found"]Sthen} continueSfiSchroot?$isendmail-q1hSecho?-n".")`done)`echo?"done")`touch?/var/lock/subsys/sendmail)`;; Xstop))`echo?-n"Arrestodisendmail:")`killproc?sendmail)`echo)`rm?-f/var/lock/subsys/sendmail)`;; X*))`echo?"Utilizzo:sendmail{start|stop}")`exit?1esacexit?0 9.3.8#!\CongurazionediinetdMIlserviziopGopsidovrebbeinstallarenormalmentesenzalavoroaggiuntivo.T/BastasolocheallasuavoGceininetdU vengaaggiuntalapartepGervirtuald.qEccolevoGcidiinetd.confpersendmailepop:ؼpop-3?streamtcpnowaitroot/usr/local/bin/virtuald\)`virtuald?/virtual/conf.popin.qpop-ssmtp?streamtcpnowaitroot/usr/local/bin/virtuald\)`virtuald?/virtual/conf.mailsendmail-bs#Í9.4LasoluzioneconQmail9.4.1#!\In>troQduzioneQuestapsoluzionescavqalcaqmail-loGcalnellemansionidiconsegna,quindiile.qmailnelledirectoryhomevirtualinonfunzionerannopi.1ComunqueognidominioavrancoraunutenterespGonsabiledelcontrollosugliWaliasdell'interodominio.AWtalescopGoverranousatidueprogrammiesternipGerile.qmail-defaultditaliutentidrespGonsabili.LapostapasserattraversodquestidueprogrammiperessereconsegnatacorrettamenteadU ognidominio.ؼSonourichiestidueprogrammipGoichunodiessivieneeseguitoconiprivilegidiroGot.' ȑuunpiccoloprogrammacheՄcambiadivoltainvoltaipropriprivilegiadunutentenonroGotemandainesecuzioneilsecondo.SiconsultiU unsitodidoGcumentazionesullasicurezzaperunadisaminadeimotivipercuicinecessario.D(_2 ~?G9.8Mail/P>opvirtuale^њ28ՁVQuestasoluzioneevitailbisognodiusarevirtuald.>/var/qmail/control/virtualdomains9.4.3#!\Congurarel'uten>terespQonsabileperildominioMSi"aggiungaalle/etc/passwdprincipalel'utentedomain1.LMeglioattribuirglilashell/bin/falseinmoGdochetaleutentenonpGossaaccedereadunaconsole.T*aleutentepGotraggiungerele.qmailetuttalapGostaMindirizzataaldominiovirtualedomain1passerattraversoMtaleaccount.SinoticheinomiutentepGossono)esserelunghisoloottocaratterimentreinomididominiopossonoesserepilunghi.c I)carattericheavqanzanovengonotroncati.QCisignicachegliutentidominio12edominio123nirannopGeresserelostessoutenteoQeQmailpGotrebbeoQfarconfusione.BisognapGercifareattenzioneasceglierebeneleproprieregoledidenominazioneU dell'utenterespGonsabiledeldominio.ؼSi,/home/d/domain1/.qmail-mailer-daemonecho?"user@domain1.com">/home/d/domain1/.qmail-postmasterecho?"user@domain1.com">/home/d/domain1/.qmail-rootSirjcreiille.qmail-defaultdelrespGonsabiledidominio.]QuestoleltrertuttalapostaindirizzataaldominioU virtuale.echo?"|/usr/local/bin/virtmailfilter">/home/d/domain1/.qmail-default 9.4.4#!\T cpserv>erMQmail]richiedeunospGecialeprogrammapop,ingradodisupportareilformatoMaildir. 7Ilprogrammapopdev'essereresovirtuale.*PL'autorediQmailraccomandadiusareaquestoscopGotcpserver(unrimpiazzodiinetd)U conQmail,quindineimieiesempiusertcpservereNONinetd.ؼT*cpservernonrichiedeunledicongurazione.7T*utteleinformazioninecessarieglipGossonoesserepassatedaNrigadicomando.g Segueilletcpserver.initchesidovrebbGeusareperidemonidiconsegnaeprelievodellaU pGosta(`maildemon'e`popper'):#!/bin/shL_2 ~?G9.8Mail/P>opvirtuale^њ29ՁV .?/etc/rc.d/init.d/functionsQMAILDUSER=`grep?qmaild/etc/passwd|cut-d:-f3`QMAILDGROUP=`grep?qmaild/etc/passwd|cut-d:-f4`#?Dareunosguardoacomevengonochiamati.case?"$1"in Xstart))`echo?-n"Avvioditcpserver:")`tcpserver?-u0-g00pop-3/usr/local/bin/virtuald\S/virtual/conf.pop?qmail-popupvirt.domain1.com\S/bin/checkpassword?/bin/qmail-pop3dMaildir&)`echo?-n"pop")`tcpserver?-u$QMAILDUSER-g$QMAILDGROUP0smtp\S/var/qmail/bin/qmail-smtpd?&)`echo?-n"qmail")`echo)`touch?/var/lock/subsys/tcpserver)`;; Xstop))`echo?-n"Arrestoditcpserver:")`killall?-TERMtcpserver)`echo?-n"killing")`echo)`rm?-f/var/lock/subsys/tcpserver)`;; X*))`echo?"Utilizzo:tcpserver{start|stop}")`exit?1esacexit?0 9.4.5#!\Qmail.initMSiFpuutilizzarel'`initscript'standardfornitoconQmail.DgLadoGcumentazionecheaccompagnaQmail莡descriveU ottimamentecomefarlo.9.4.6#!\Sorgen>tiMPerfarfunzionareiservizidipGostavirtualiconQmailsonorichiestialtridueprogrammi.Essisonovirt-maillter9=evirtmaildelivery*.h4SeguesottoilsorgenteC96divirtmaillter.h4IlprogrammaandrebbGeinstallatoin/usr/loGcal/binU conmodi4750,utenterootegrupponoles.ؼ#include?#include?#include?#include?#include?Z_2 ~?G9.8Mail/P>opvirtuale^њ30ՁV#include? #include?#define?VIRTPREY:l"/virtual"#define?VIRTPWFILEI{h"etc/passwd"#define?VIRTDELIVERY>"/usr/local/bin/virtmaildelivery"#define?VIRTDELIVERY09d"virtmaildelivery"#define?PERMhp100#define?TEMPhp111#define?BUFSIZEY:l8192int?main(intargc,char**argv){)`char?*username,*usernameptr,*domain,*domainptr,*homedir;)`char?virtpath[BUFSIZE];)`struct?passwd*p;)`FILE?*fppw;)`int?status;)`gid_t?gid;)`pid_t?pid;)`if?(!(username=getenv("EXT"))))`{Sfprintf(stdout,"environment?variableEXTnotset\n");Sexit(TEMP);)`})`for(usernameptr=username;*usernameptr;usernameptr++))`{S*usernameptr=tolower(*usernameptr);)`})`if?(!(domain=getenv("HOST"))))`{Sfprintf(stdout,"environment?variableHOSTnotset\n");Sexit(TEMP);)`})`for(domainptr=domain;*domainptr;domainptr++))`{Sif?(*domainptr=='.'&&*(domainptr+1)=='.')S{} fprintf(stdout,"environment?variableHOSThas..\n");} exit(TEMP);S}Sif?(*domainptr=='/')S{} fprintf(stdout,"environment?variableHOSThas/\n");am_2 ~?G9.8Mail/P>opvirtuale^њ31ՁV} exit(TEMP); S}S*domainptr=tolower(*domainptr);)`})`for(domainptr=domain;;))`{Ssnprintf(virtpath,BUFSIZE,"%s/%s",VIRTPRE,domainptr);Sif?(chdir(virtpath)>=0)} break;Sif?(!(domainptr=strchr(domainptr,'.')))S{} fprintf(stdout,"domain?failed:%s\n",domain);} exit(TEMP);S}Sdomainptr++;)`})`if?(!(fppw=fopen(VIRTPWFILE,"r+"))))`{Sfprintf(stdout,"fopen?failed:%s\n",VIRTPWFILE);Sexit(TEMP);)`})`while((p=fgetpwent(fppw))!=NULL))`{Sif?(!strcmp(p->pw_name,username))} break;)`})`if?(!p))`{Sfprintf(stdout,"user?%s:notexist\n",username);Sexit(PERM);)`})`if?(fclose(fppw)==EOF))`{Sfprintf(stdout,"fclose?failed\n");Sexit(TEMP);)`})`gid=p->pw_gid;)`homedir=p->pw_dir;)`if?(setgid(gid)<0||setuid(p->pw_uid)<0))`{ f_2 ~?G9.8Mail/P>opvirtuale^њ32ՁVSfprintf(stdout,"setuid/setgid?failed\n"); Sexit(TEMP);)`})`switch(pid=fork()))`{Scase?-1:} fprintf(stdout,"fork?failed\n");} exit(TEMP);Scase?0:} if?(execl(VIRTDELIVERY,VIRTDELIVERY0,username,homedir,NULL)<0)} {fprintf(stdout,"execl?failed\n");exit(TEMP);} }Sdefault:} if?(wait(&status)<0)} {fprintf(stdout,"wait?failed\n");exit(TEMP);} }} if?(!WIFEXITED(status))} {fprintf(stdout,"child?didnotexitnormally\n");exit(TEMP);} }} break;)`})`exit(WEXITSTATUS(status));} 9.4.7#!\Sorgen>tiMPerfarfunzionareiservizidipGostavirtualiconQmailsonorichiestialtridueprogrammi.@\Essisonovirtmail-lterHevirtmaildelivery*.mLSeguesottoilsorgenteCHdivirtmaildelivery*.mLAndrebbGeinstallatoin/usr/local/binconU moGdi0755,utenterootegrupporoot.ؼ#include?#include?#include?#include?#include?#include?#include?#include?#define?TEMPhp111#define?BUFSIZEY:l8192#define?ATTEMPTSS10!k(_2 ~?G9.8Mail/P>opvirtuale^њ33ՁV int?main(intargc,char**argv){)`char?*user,*homedir,*dtline,*rpline,buffer[BUFSIZE],*p,mail[BUFSIZE];)`char?maildir[BUFSIZE],newmaildir[BUFSIZE],host[BUFSIZE];)`int?fd,n,nl,i,retval;)`struct?statstatp;)`time_t?thetime;)`pid_t?pid;)`FILE?*fp;)`retval=0;)`if?(!argv[1]))`{Sfprintf(stdout,"invalid?arguments:needusername\n");Sexit(TEMP);)`})`user=argv[1];)`if?(!argv[2]))`{Sfprintf(stdout,"invalid?arguments:needhomedirectory\n");Sexit(TEMP);)`})`homedir=argv[2];)`if?(!(dtline=getenv("DTLINE"))))`{Sfprintf(stdout,"environment?variableDTLINEnotset\n");Sexit(TEMP);)`})`if?(!(rpline=getenv("RPLINE"))))`{Sfprintf(stdout,"environment?variableRPLINEnotset\n");Sexit(TEMP);)`})`while?(*homedir=='/')Shomedir++;)`snprintf(maildir,BUFSIZE,"%s/Maildir",homedir);)`if?(chdir(maildir)<0))`{Sfprintf(stdout,"chdir?failed:%s\n",maildir);Sexit(TEMP);)`}"pʠ_2 ~?G9.8Mail/P>opvirtuale^њ34ՁV)`time(&thetime); )`pid=getpid();)`if?(gethostname(host,BUFSIZE)<0))`{Sfprintf(stdout,"gethostname?failed\n");Sexit(TEMP);)`})`for(i=0;i=ATTEMPTS))`{Sfprintf(stdout,"could?notcreate%s\n",mail);Sexit(TEMP);)`})`if?(!(fp=fopen(mail,"w+"))))`{Sfprintf(stdout,"fopen?failed:%s\n",mail);Sretval=TEMP;?gotounlinkit;)`})`fd=fileno(fp);)`if?(fprintf(fp,"%s",rpline)<0))`{Sfprintf(stdout,"fprintf?failed\n");Sretval=TEMP;?gotounlinkit;)`})`if?(fprintf(fp,"%s",dtline)<0))`{Sfprintf(stdout,"fprintf?failed\n");Sretval=TEMP;?gotounlinkit;)`})`while(fgets(buffer,BUFSIZE,stdin)))`{Sfor(p=buffer;*p=='>';p++)} ;#u_2 ~?G9.8Mail/P>opvirtuale^њ35ՁVSif?(!strncmp(p,"From",5)) S{} if?(fputc('>',fp)<0)} {fprintf(stdout,"fputc?failed\n");retval=TEMP;?gotounlinkit;} }S}Sif?(fprintf(fp,"%s",buffer)<0)S{} fprintf(stdout,"fprintf?failed\n");} retval=TEMP;?gotounlinkit;S})`})`p=buffer+strlen(buffer);)`nl=2;)`if?(*p=='\n')Snl=1;)`for(n=0;nbavirtualeh+36ՁV)`if?(unlink(mail)<0) )`{Sfprintf(stdout,"unlink?failed:%s\n",mail);Sretval=TEMP;)`})`exit(retval);}#9.5RingraziamentiMRingrazioVic}/enteGonzalez(vince@nycrc.net)pGerl'aiutocheharesopossibilelasoluzionepresentataperQmail.]ȑlcertolpGossibileringraziareVincetramitee-mail,rcomunqueledomandeeicommentisuquestionicheU riguardanoQmailnelcontestodiquestoHOWTOdovrebbGeroessereindirizzatialsottoscritto.(s10%SamcbaG\virtuale荍10.1%}CongurazioneIlQ(_38ՁVvirtuald.+Ilvlebinariorisultantevieneinstallatoin/usr/loGcal/bin.AggiungendodelleappGositelineein /etc/inetd.confU pGotraiusarlocome`wrapper'perunnormaleprogrammaserverdirete.ؼD4.qEU senonhodialoginstallatosulmiosistema?R4.,DialogKunprogrammachepGermettediutilizzarenestredidialogoascomparsa(`dialogpop-upwindow')(negliscriptdishell.bȑ(richiestopGerilfunzionamentodegliscriptdishelldiesempiochesitrovqanoinquestoHOWTO.Puoiottenereunacopiadidialogpressosunsite.7mȑdifacilecompilazioneeinstallazione.D5.qComeU pGossosapereseilsyslogdvirtualefunziona?R5.qQuandoU virtualdpartedovrebbGeinviareiseguentimessaggiasyslogd(/vqar/log/messages):/Nov?1917:21:07virtualvirtuald[10223]:VirtualdStarting:$Revision:1.49$Nov?1917:21:07virtualvirtuald[10223]:Incomingip:204.249.11.136Nov?1917:21:07virtualvirtuald[10223]:Chrootdir:/virtual/domain1.comIlmessaggiocircaladirectorysucuivienefattochrootinviatodavirtualddopGol'esecuzionedellachiamatadi funzionechroot.Q(_39ՁVLaU linea`exec'dev'esserecambiatada:ؼ)`if?(execvp(argv[2],argv+2)<0)in:)`if?(execvp(argv[2],argv+3)<0)ComeU secondopassolelineediinetd.confdevonoesseremoGdicateda:ftp?streamtcpnowaitroot/usr/local/bin/virtuald\ )`virtuald?/virtual/conf.ftpwu.ftpd-l-ain:ftp?streamtcpnowaitroot/usr/local/bin/virtuald\)`virtuald?/virtual/conf.ftptcpdwu.ftpd-l-aCome ,rterzopassomoGdicainmodoappropriatoile/virtual/domain1.com/etc/hosts.allowe/virtual/domain1.com/etc/hosts.deny*.ؼD10.qIU mieihostvirtualipGossonoeseguirescriptCGI?R10.TS,lokpGossonofare,matiraccomandodimetterei/cgi-bininunpGostononaccessibiledopoilchroot,al?qualeabbiaaccessosolotu.%Adesempio/vqar/www/cgi-bin/domain1.com.Permettereaiclientl'accessoa3/cgi-binsignicadarelorolapGossibilitdieseguireprogrammisultuoserver.flCicostituirebbeungrossoproblemaddisicurezza.F*a'attenzione.PersonalmentednonlascioeseguirenessuncgisuimieisistemisenondopGoU avercontrollatodipGersonal'assenzadibug.D11.qIU mieiledicongurazionesonodiversidagliesempiripGortati.Chedevofare?R11.6Ci]sonoduestilifondamentalidicongurazione:System*VeBSD.GliesempiripGortatiinquestoHOWTOnsononbasatisuiledicongurazionenellostileSystem*V.IservizivirtualifunzionanougualmentebGeneinentrambiisistemi.PerinformazionisuiledicongurazionestileBSDjconsultalefontidellatuadistribuzioneU oilpivicinositoLDP*.D12.7eTihoscrittounae-mailenonhoricevutoalcunarispGostaoc'volutomoltotempoperaverla.7ePerch?R12.aProbabilmente&pGerchnonhaimessoVIR*TSERVICES& HOWTOnel&soggettodelmessaggio.aTipregoditenereamentechesonounamministratorediretieche,tralealtrecosechefaccionellemiegiornatesempre^5troppGobrevi[inmy20hourdays3}nell'originaleN.d.T.],`zmiprendocuradeibGoxvirtualimieiedeimiei!jclienti.`DI!]messaggicorrettamenteindirizzatitrovqanosemprerispGostaindueotregiorni.`DI!]messaggicheinvecenoncontengonoilsoggettodicuisopranonvengonodepGositatinellamiacasellaVIR*TSERVICESepGossonoU nonriceverealcunaattenzionepergiornioanchesettimane.D13.qVirtualdU funzionasuconnessionisottoi100Mbit?R13gLaveloGcitdellaschedadiretenoncorrelataalfunzionamentodivirtuald.+ProvqaadassicurarticheilStuoserverlavorisottoi10Mbitechelatuaschedadiretea100MbitfunzioninormalmenteinassenzadiU unservervirtuale.D14.qDovreiU usarelatabGellavirthostdisendmail?R14.HNo.Quella-unafunzionalitdisendmailcheglipGermettediricevereinformazionipGerlagestionedidominimultipli.Virtualdfornisceadognisendmaililsuoproprioambiente,Bseparatodaglialtritramitechroot.qInstallaU virtualdepGoicongurasendmailcomefarestinormalmenteperognisingolodominio.(j_2 ~?G13.8FA>Q(_40ՁVD15.Posso4congurareuntelnetvirtualesullamiamacchina?ChenepGensidellacreazionediunaccount diU roGotvirtualechepermettaaiclientidiamministrareipropridomini?ؼR15.QuestoԩgeneredidomandemivengonofattepiuttostospGessoe,peressereonesti,mistannounpo'stufando..La*rispGosta,comeespressogiparecchievoltenelladoGcumentazione,chequalsiasiservizioese-guitoqCattraversoinetdpuessereresovirtualeusandoloscriptvirtuald,xKquindinonc'nullacheimpGediscadifarlo.iQ(_41ՁVR17.*Chroot|unachiamatadisistemaristrettaaiprivilegidiroGot.SoloilsupGerutentepueseguirla.Lo scriptU virtexeclanciailprogrammachroot,pGercuinecessarioessererootpereseguirloconsuccesso.ؼD18.HoconguratopGopesendmailmailprelievodellapostaamezzopopnonsembrafunzionare.Chesuccede?R18.allepaginemandibash,odiqualunquealtrashelltustiausando,pGerquestioniconcernentiU laprogrammazioneinlinguaggiodishell.D21.0HounadomandasuQmail,SAMBA,Apache,ecc.0chenoncorrelataconlacongurazionedivirtualdoU conl'usodelpacchettoinrappGortoavirtuald.R21.