diff --git a/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml index 34ca974cfb..3279b3fa1e 100644 --- a/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml @@ -1,3279 +1,3289 @@ Chern Lee Geschreven door Mike Smith Naar een tutorial van Matt Dillon Tevens gebaseerd op tuning(7) door Danny Pansters Vertaald door Instellingen en Optimalisatie Overzicht systeeminstellingen systeemoptimalisatie Systeeminstellingen zijn een belangrijk aspect van &os;. Correcte instellingen helpen moeilijkheden bij toekomstige upgrades te voorkomen. In dit hoofdstuk wordt het instellen van &os; beschreven, alsmede een aantal prestatiebevorderende maatregelen waarmee een &os; systeem geoptimaliseerd kan worden. Na het lezen van dit hoofdstuk weet de lezer: Hoe efficiënt om te gaan met bestandssystemen en wisselpartities; De grondbeginselen van het rc.conf instellingensysteem en van het opstarten van toepassingen (diensten) met /usr/local/etc/rc.d; Hoe een netwerkkaart ingesteld en getest wordt; Hoe virtuele hosts op netwerkapparatuur ingesteld worden; Hoe de instellingenbestanden in /etc gebruikt worden; Hoe &os; geoptimaliseerd kan worden met sysctl variabelen; Hoe schijfprestaties te verbeteren en hoe kernelbeperkingen gewijzigd kunnen worden. Veronderstelde voorkennis: De &unix; en &os; grondbeginselen () begrijpen; Bekend zijn met de grondbeginselen van kernelinstellingen en compilatie (). Initiële Instellingen Partitioneren partitioneren /etc /var /usr Basispartities Bij het aanmaken van bestandssystemen met &man.disklabel.8; of &man.sysinstall.8; is het van belang dat op een harde schijf de data-overdracht het snelst is aan de buitenste sporen en het langzaamst aan de binnenste. Kleinere en veelgebruikte bestandssystemen kunnen daarom het beste aan het begin van de schijf geplaatst worden, terwijl grotere partities als /usr meer naar het einde van de schijf geplaatst kunnen worden. Het is een goed idee om partities aan te maken in deze of gelijksoortige volgorde: root, swap, /var, /usr. De grootte van /var hangt af van de wijze waarop de machine gebruikt gaat worden. /var wordt gebruikt voor onder meer mailboxen, logbestanden en printerdata en -wachtrijen. Mailboxen en logbestanden kunnen onverwacht groot worden, afhankelijk van het aantal systeemgebruikers en de bewaarduur van logbestanden. Meestal is minder dan een gigabyte voldoende. /var/tmp moet wel groot genoeg moet zijn om packages te kunnen bevatten. De partitie /usr bevat veel van de benodigde systeembestanden. Die bevat tevens de &man.ports.7;collectie (aanbevolen) en de broncode (optioneel). Beide zijn optioneel tijdens de installatie. Voor deze partitie wordt tenminste 2 gigabyte aanbevolen. Het is verstandig rekening te houden met de vereiste schijfruimte bij het kiezen van partitiegroottes. Als in een partitie onvoldoende vrije schijfruimte is, terwijl een andere vrijwel niet gebruikt wordt, is dat een vervelend en niet optimaal oplosbaar probleem. &man.sysinstall.8;'s Auto-defaults partitiekeuze kan in de ervaring van sommige gebruikers mogelijk te kleine /var en / partities opleveren. Partitioneren moet verstandig en niet te zuinig gebeuren. Wisselpartities (swap) swap grootte wisselpartitie wisselpartitiegrootte De vuistregel is dat het wisselbestand ongeveer het dubbele van de grootte van het systeemgeheugen (RAM) moet zijn. Als de machine bijvoorbeeld 128 megabytes geheugen heeft, kan het beste een wisselbestand van (tenminste) 256 megabytes gebruikt worden. Minder dan 256 megabytes swap is in dit geval af te raden. Systemen met weinig geheugen kunnen overigens beter functioneren met meer swap. Ook is het verstandig rekening te houden met eventuele geheugenuitbreiding in de toekomst. Bovendien zijn de VM paging algoritmen van de kernel zo afgestemd dat ze het beste presteren bij een wisselbestand van tenminste tweemaal de grootte van het geheugen. Een te kleine swap kan dus inefficiënties in de VM code tot gevolg hebben en mogelijk problemen veroorzaken als het systeemgeheugen uitgebreid wordt. Op grotere systemen met meerdere SCSI schijven (of meerdere IDE schijven op verschillende controllers) is het aan te raden om op elke schijf een wisselpartitie in te stellen (dit kan tot en met vier schijven), elk met ongeveer dezelfde grootte. De kernel kan met arbitraire groottes werken, maar interne datastructuren schalen tot viermaal de grootste swappartitie. De kernel kan de beschikbare ruimte voor het wisselbestand het meest optimaal indelen als de partities ongeveer even groot zijn. Een grote swap is prima, ook als ze zelden gebruikt wordt. Zo kan het gemakkelijker zijn om een (uit de hand gelopen) proces dat het systeem grotendeels bezet houdt te beëindigen, voordat er opnieuw opgestart moet worden. Waarom partitioneren? Waarom niet één enkele grote partitie gebruiken? Er zijn verscheidene redenen waarom dit niet zo'n goed idee is. De verschillende partities hebben hun eigen karakteristieke operationele gedrag en vereisten. Door ze te scheiden zijn er betere mogelijkheden om het systeem te optimaliseren. Vanaf de / en /usr partities wordt bijvoorbeeld vooral gelezen en er wordt weinig naar geschreven, terwijl er in /var en /var/tmp zowel veel gelezen als geschreven wordt. Door een systeem goed te partitioneren wordt vermeden dat fragmentatie die optreedt in de kleinere partities met veel schrijfactiviteit doorsijpelt naar partities die vooral lees-intensief zijn. Door schrijf-intensieve partities aan het begin van de schijf te plaatsen, zijn de prestaties wat betreft invoer/uitvoer het beste is daar waar het het meest nodig is. Ofschoon er natuurlijk ook de best mogelijke in/uit prestaties wenselijk zijn in de grotere partities, weegt het plaatsen van deze bestandssystemen aan het begin van de schijf niet tegen de voordelen van het plaatsen van /var aan het begin van de schijf (na root en swap) voor de totale snelheid van het systeem. Tenslotte zijn er veiligheidsoverwegingen. Een compacte en nette rootpartitie die vrijwel alleen-lezen is, heeft een betere kans om een nare crash te overleven. Hoofdinstellingen rc bestanden rc.conf De voornaamste lokatie voor systeeminstellingen is /etc/rc.conf. Dit bestand bevat een scala aan instellingen, die gebruikt wordt om het systeem in te stellen bij het opstarten. De naam impliceert dit al. Het is informatie voor de rc* bestanden (rc staat voor resource configuration of broninstellingen). De systeembeheerder wordt geacht regels toe te voegen aan rc.conf om de standaardinstellingen uit /etc/defaults/rc.conf aan te passen. Het standaardbestand moet niet letterlijk gekopiëerd worden naar /etc. Het bevat standaardwaardes en is niet bedoeld als voorbeeld. Alle wijzigingen die specifiek zijn voor een systeem horen in /etc/rc.conf thuis. In een clusterscenario is het nuttig om systeemspecifieke instellingen te scheiden van algemene instellingen die voor het hele cluster gelden. Hiervoor kunnen een aantal strategieën worden gebruikt. De aanbevolen benadering is om gedeelde instellingen in een ander bestand te plaatsen, zoals /etc/rc.conf.site en dit invoegen in /etc/rc.conf, wat verder alleen systeemspecifieke informatie bevat. Aangezien rc.conf gelezen wordt door &man.sh.1; is dit eenvoudig te bereiken: rc.conf: . rc.conf.site hostname="node15.example.com" network_interfaces="fxp0 lo0" ifconfig_fxp0="inet 10.1.1.1" rc.conf.site: defaultrouter="10.1.1.254" saver="daemon" blanktime="100" rc.conf.site kan dan naar elk systeem gedistribueerd worden met rsync of een gelijksoortig programma, terwijl rc.conf uniek blijft. Het actualiseren van het systeem met &man.sysinstall.8; of make world overschrijft rc.conf niet, zodat de bestaande systeeminstellingen niet verloren gaan. Toepassingen Instellingen Geïnstalleerde toepassingen hebben meestal hun eigen instellingenbestanden, met hun eigen syntaxis, etc. Het is van belang deze bestanden apart te houden van het basissysteem, zodat ze makkelijk gelokaliseerd kunnen worden en beheerd kunnen worden met de hulpmiddelen voor pakketbeheer. /usr/local/etc Deze bestanden worden meestal geïnstalleerd in /usr/local/etc. Als een toepassing een uitgebreide set bestanden voor instellingen heeft, wordt er een submap voor aangemaakt. Bij de installatie van een port of package, worden normaliter ook voorbeeldbestanden met instellingen geïnstalleerd. Deze zijn doorgaans te herkennen aan een toevoegsel .default. Als er geen bestaande instellingenbestanden voor de toepassing zijn, kunnen ze gemaakt worden door de .default bestanden te kopiëren. Een voorbeeld is de map /usr/local/etc/apache: -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf -rw-r--r-- 1 root wheel 2184 May 20 1998 access.conf.default -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf -rw-r--r-- 1 root wheel 9555 May 20 1998 httpd.conf.default -rw-r--r-- 1 root wheel 12205 May 20 1998 magic -rw-r--r-- 1 root wheel 12205 May 20 1998 magic.default -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types -rw-r--r-- 1 root wheel 2700 May 20 1998 mime.types.default -rw-r--r-- 1 root wheel 7980 May 20 1998 srm.conf -rw-r--r-- 1 root wheel 7933 May 20 1998 srm.conf.default Aan de grootte van de bestanden is te zien dat alleen srm.conf gewijzigd is. Als later de Apache port wordt vernieuwd, wordt dit bestand niet overschreven. Tom Rhodes Bijgedragen door Diensten Starten diensten Veel gebruikers kiezen ervoor om software van derden te installeren op &os; vanuit de Portscollectie. In veel gevallen is het noodzakelijk om de software dusdanig in te stellen dat het opstart tijdens het booten. Diensten zoals mail/postfix of www/apache13 zijn slechts twee voorbeelden van softwarepakketten die gestart kunnen worden tijdens de systeemstart. In deze paragraaf wordt toegelicht hoe software van derde partijen kan worden gestart. In &os; worden de meeste diensten, zoals &man.cron.8;, door de opstartscripts van het systeem gestart. Deze scripts kunnen verschillen tussen &os; en leverancierversies, echter het meest belangrijke aspect om in gedachten te houden is dat hun opstartinstellingen verwerkt kunnen worden door simpele opstartscripts. Voor de komst van rcNG zetten applicaties simpelweg een opstartscript in de map /usr/local/etc/rc.d dat dan uitgelezen werd door de opstartscripts van het systeem. Deze scripts werden dan uitgevoerd tijdens de laatste stappen van een systeemstart. Terwijl veel individuen bezig waren om de oude stijl van instellen naar de nieuwe stijl over te zetten, bleef sommige software nog steeds een script nodig hebben in de genoemde map. De subtiele verschillen in de scripts hangen af van het wel of niet gebruiken van rcNG. Vóór &os; 5.1 werden scripts oude stijl gebruikt en in bijna alle gevallen voldoet een script nieuwe stijl. Elk script moet een .sh toegevoegd hebben aan het einde en elk script moet opstartbaar zijn door het systeem. Het laatstgenoemde kan bereikt worden met chmod en door het zetten van de rechten 755. Er zouden ook minimaal de opties start en stop moeten zijn voor de applicatie. Het simpelste opstartscript ziet er waarschijnlijk als volgt uit: #!/bin/sh echo -n ' utility' case "$1" in start) /usr/local/bin/utility ;; stop) kill -9 `cat /var/run/utility.pid` ;; *) echo "Usage: `basename $0` {start|stop}" >&2 exit 64 ;; esac exit 0 Dit script levert de opties stop en start voor de applicatie met de naam utility. Dit kan handmatig gestart worden met: &prompt.root; /usr/local/etc/rc.d/utility.sh start Hoewel niet alle software van derden een regel nodig heeft in /etc/rc.conf, wordt er bijna elke dag een wel een port veranderd om deze instellingen te ondersteunen. De meldingen tijdens de installatie van de port bevatten vaak meer informatie. Sommige software van derden levert opstartscripts die de applicatie kunnen laten werken met rcNG. Dit wordt in de volgende paragraaf behandeld. Uitgebreide Applicatieinstellingen Nu &os; rcNG heeft, zijn de instellingen van applicaties die mee moeten opstarten verbeterd. Er is meer diepgang in gekomen. Door gebruik te maken van de sleutelwoorden die in de paragraaf rcNG behandeld worden, kunnen applicaties nu starten na andere diensten. DNS kan bijvoorbeeld extra opties meekrijgen van /etc/rc.conf in plaats van hard ingestelde opties in het opstartscript. Een basisscript ziet er ongeveer als volgt uit: #!/bin/sh # # PROVIDE: utility # REQUIRE: DAEMON # BEFORE: LOGIN # KEYWORD: FreeBSD shutdown # # WIJZIG DEZE WAARDEN NIET HIER # MAAR IN HET BESTAND /etc/rc.conf # utility_enable=${utility_enable-"NO"} utility_flags=${utility_flags-""} utility_pidfile=${utility_pidfile-"/var/run/utility.pid"} . /etc/rc.subr name="utility" rcvar=`set_rcvar` command="/usr/local/sbin/utility" load_rc_config $name pidfile="${utility_pidfile}" start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${utility_flags} ${command_args}" run_rc_command "$1" Dit script zorgt ervoor dat utility wordt gestart voor de dienst login, maar na de dienst daemon. Het biedt ook de mogelijkheid voor het instellingen en volgen van het PID of het process ID bestand. Voor deze applicatie kan dan de volgende regel in /etc/rc.conf geplaatst worden: utility_enable="YES" Deze nieuwe methode maakt het volgende mogelijk: makkelijker commandoregelopties manipuleren, importeren van standaardfuncties uit /etc/rc.subr, compatibiliteit met het &man.rcorder.8; programma en het eenvoudiger instellingen via /etc/rc.conf. In essentie kan dit script zelfs geplaatst worden in de map /etc/rc.d. Dat kan in potentie wel het &man.mergemaster.8; programma van de wijs brengen als dat gebruikt wordt voor het bijwerken van software. Diensten met Diensten Starten Andere diensten, zoals POP3 server daemons, IMAP, enzovoort, kunnen gestart worden door gebruik te maken van &man.inetd.8;. Daaraan is voorafgegaan dat die dienst uit de Portscollectie is geïstalleerd en dat er een regel met instellingen is toegevoegd aan /etc/inetd.conf of één van de bestaande niet actieve regels is geactiveerd. Werken met inetd en zijn instellingen wordt uitgebreid toegelicht in de paragraaf over inetd. In sommige gevallen is het handiger om &man.cron.8; te gebruiken om diensten te starten. Deze aanpak heeft een aantal voordelen omdat cron start als de eigenaar van crontab. Dit stelt reguliere gebruikers in staat om sommige applicaties te starten en te onderhouden. cron levert een unieke optie: plaats van een tijdsspecificatie kan @reboot gebruikt worden. Dit zorgt ervoor dat de taak gestart wordt als &man.cron.8; gestart wordt, meestal tijdens een systeemstart. Tom Rhodes Geschreven door <command>cron</command> Instellen cron instellen Een zeer nuttig hulpprogramma in &os; is &man.cron.8;. De cron daemon draait op de achtergrond en controleert voortdurend /etc/crontab. Ook controleert cron de map /var/cron/tabs, op zoek naar nieuwe crontab bestanden. Deze crontab bestanden bevatten informatie over specifieke taken die cron moet verrichten op gezette tijden. cron gebruikt twee verschillende soorten instellingenbestanden: de systeemcrontab en gebruikerscrontabs. Het enige verschil tussen deze twee formaten is het zesde veld. In de systeemcrontab is dit de gebruikersnaam die het commando uitvoert. Hierdoor kunnen met de systeemcrontab commando's als iedere gebruiker uitgevoerd worden. In een gebruikerscrontab is het zesde veld het uit te voeren commando en alle commando's worden uitgevoerd als de gebruiker die de crontab heeft aangemaakt. Dit is een belangrijke veiligheidsmaatregel. Gebruikerscrontabs geven individuele gebruikers de mogelijkheid om bepaalde terugkerende taken automatisch te laten uitvoeren zonder dat root rechten noodig zijn. Commando's in de crontab van een gebruiker worden uitgevoerd met de rechten van de eigenaar. root kan ook een gebruikerscrontab aanleggen. Dit is niet dezelfde als /etc/crontab (de systeemcrontab). Omdat er al een systeemcrontab is, is het doorgaans niet nodig om een gebruikerscrontab voor root te maken. /etc/crontab (de systeemcrontab) ziet er uit als volgt: # /etc/crontab - root's crontab for &os; # # $&os;: src/etc/crontab,v 1.32 2002/11/22 16:13:39 tom Exp $ # # SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log # # #minuut uur mdag maand wdag wie commando # # */5 * * * * root /usr/libexec/atrun Zoals in de meeste &os; instellingenbestanden gaat het karakter # vooraf aan commentaar. Commentaar wordt gebruikt als uitleg en geheugensteun. Commentaar dient niet vermengd te worden met commando's, anders wordt het commentaar opgevat als deel van het commando. Blanco regels worden genegeerd. Eerst worden omgevingsvariabelen gedefiniëerd. Hoervoor wordt het is-gelijk karakter (=) gebruikt. In het bovenstaande voorbeeld wordt het gebruikt voor de variabelen SHELL, PATH en HOME. Als de regel SHELL ontbreekt, gebruikt cron standaard sh als shell. Voor de omgevingsvariabele PATH bestaat geen standaardwaarde. Als PATH ontbreekt moeten absolute paden gebruikt worden. Als HOME ontbreekt, gebruikt cron de thuismap van de de gebruiker die cron aanroept. In deze commentaarregel staan de zeven velden van een crontabdefinitie. Dit zijn minuut, uur, mdag, maand, wdag, wie en commando. De betekenissen liggen voor de hand: minute is het aantal minuten van het tijdstip waarop het commando moet worden uitgevoerd; hour geeft het uur aan; mdag staat voor de dag van de maand; maand staat voor het maandnummer en wdag geeft de dag van de week aan. Het veld wie is bijzonder en bestaat alleen in /etc/crontab. Het geeft aan als welke gebruiker het commando uitgevoerd moet worden. Een gebruiker die zijn eigen crontab installeert, heeft deze optie niet. Het veld command bevat het uit te voeren commando. In deze regel worden aan de hierboven besproken opties waarden toegekend. Er wordt gebruik gemaakt van */5 en * karakters. Deze betekenen eerst-laatst en kunnen gezien worden als telkens. In deze regel staat dus dat het commando atrun elke vijf minuten moet worden uitgevoerd door root, ongeacht welke dag of maand het is. Meer informatie over atrun staat in &man.atrun.8;. Commando's kunnen een willekeurig aantal opties of argumenten meekrijgen. Als commando's echter meerdere regels nodig hebben moeten deze regels afgebroken worden met een backslash \ karakter, om aan te geven dat ze op de volgende regel vervolgd worden. Dit is de basisopzet voor elk crontab bestand. De enige uitzondering is de aanwezigheid van veld zes, waar de gebruikersnaam wordt aangegeven. Dit veld bestaat alleen in het systeembestand /etc/crontab. Voor crontabbestanden van individuele gebruikers moet dit veld worden weggelaten. Een Crontab Installeren De onderstaande procedure moet niet gebruikt worden om de systeemcrontab te wijzigen of te installeren. Er kan een gewone editor gebruikt worden. cron ziet dat het bestand veranderd is en begint direct met het gebruiken van de nieuwe versie. Deze FAQ vraag geeft verdere uitleg. Om een nieuwe crontab te installeren moet eerst een bestand in het juiste formaat gemaakt worden en daarna moet het geiuml;nstalleerd worden met crontab commando: &prompt.root; crontab crontabbestand In dit voorbeeld is crontabbestand de naam van een eerder gemaakt crontabbestand. Er bestaat ook een optie om een lijst van geïnstalleerde crontab bestanden op te vragen, namelijk de optie van crontab. Gebruikers die hun eigen crontabbestand willen schrijven zonder het gebruik van een sjabloon, kunnen gebruik maken van crontab -e. Dit opent de EDITOR met een leeg bestand. Als het bestand wordt opgeslagen en de editor wordt afgesloten, wordt het bestand automatisch als crontab geïnstalleerd. Een gebruikerscrontab kan verwijderd worden door de met crontab de optie te gebruiken. Tom Rhodes Geschreven door Gebruik van rc met &os; 5.X rcNG &os; gebruikt inmiddels het NetBSD rc.d systeem bij het opstarten van het systeem. Veel van de bestanden in /etc/rc.d zijn scripts voor basisdiensten die werken met de opties , en , analoog aan hoe diensten die via een port of package zijn geïnstalleerd gestart worden met de scripts in /usr/local/etc/rc.d. &man.sshd.8; kan bijvoorbeeld als volgt herstart worden: &prompt.root; /etc/rc.d/sshd restart Deze procedure is vrijwel gelijk voor andere diensten. Uiteraard worden diensten meestal automatisch gestart zoals in &man.rc.conf.5; staat. Om de Network Address Translation daemon bij het opstarten te laten starten is de volgende regel in /etc/rc.conf bijvoorbeeld voldoende: natd_enable="YES" Als er reeds een natd_enable="NO" regel is, kan NO gewoon in YES veranderd worden. De rc scripts starten, voor zover nodig, automatisch andere afhankelijke diensten. Omdat het rc.d systeem in eerste instantie bedoeld is om diensten te starten en stoppen bij het opstarten en afsluiten van het systeem, werken de standaardopties , en alleen als de juiste variabelen in /etc/rc.conf zijn ingesteld. Het commando sshd restart alleen dan als sshd_enable de waarde YES heeft in /etc/rc.conf. Als er een service gestart, gestopt of herstart moet worden, ongeacht de definities in /etc/rc.conf, moet het commando voorafgegaan worden door force. Dus om sshd te herstarten ongeacht /etc/rc.conf setting, voldoet het volgende commando: &prompt.root; /etc/rc.d/sshd forcerestart Het is eenvoudig te controleren of een dienst is ingeschakeld is in /etc/rc.conf door het bijpassende rc.d script uit te voeren met de optie . Voor sshd: &prompt.root; /etc/rc.d/sshd rcvar # sshd $sshd_enable=YES De tweede regel (# sshd) is de uitvoer van sshd, geen root console. De optie wordt gebruikt om vast te stellen of een dienst gestart is. Om bijvoorbeeld te controleren of sshd gestart is: &prompt.root; /etc/rc.d/sshd status sshd is running as pid 433. Het is ook mogelijk om een dienst te herladen met de optie . Dan wordt er getracht een signaal te sturen aan een individuele dienst, waarbij de dienst de bestanden met instellingen opnieuw in moet lezen. Meestal komt dit neer op het verzenden van het signaal SIGHUP signaal. De structuur van rcNG wordt niet alleen gebruikt voor netwerkdiensten, maar ook voor het merendeel van de systeemstart. In dit kader is bijvoorbeeld het bestand bgfsck interessant. Als dit script wordt uitgevoerd, wordt de volgende boodschap getoond: Starting background file system checks in 60 seconds. Dit script wordt dus gebruikt voor bestandssysteemcontrole in de achtergrond, hetgeen alleen tijdens de systeemstart gebeurt. Veel systeemdiensten zijn afhankelijk van andere diensten om correct te kunnen functioneren. Zo starten NIS en andere RPC-gebaseerde diensten niet als de rpcbind (portmapper) dienst nog niet draait. Om dit te stroomlijnen wordt informatie over afhankelijkheden en andere meta-data ingevoegd in het commentaar bovenaan het opstartscript. Deze commentaarregels worden vervolgens tijdens de systeemstart met &man.rcorder.8; verwerkt om zo vast te stellen in welke volgorde de systeemdiensten gestart moeten worden. De volgende sleutelwoorden kunnen worden opgenomen aan het begin van elk opstartscript: PROVIDE: geeft aan in welke diensten dit bestand voorziet. REQUIRE: geeft aan welke andere diensten vereist zijn voor deze dienst. Dit script wordt uitgevoerd na de aangegeven diensten. BEFORE: geeft diensten aan die afhankelijk zijn van deze dienst. Dit bestand wordt uitgevoerd vóór de aangegeven diensten. KEYWORD: &os; of NetBSD. Dit wordt gebruikt voor speciale eigenschappen van één van de *BSD's. Met deze methode kan een systeembeheerder gemakkelijk systeemdiensten besturen, zonder gedoe met runlevels zoals bij sommige andere &unix; systemen. Meer informatie over het &os; 5.X rc.d staat in &man.rc.8; en &man.rc.subr.8;. Marc Fonvieille Geschreven door Netwerkkaarten Instellen netwerkkaarten instellen Het is tegenwoordig nauwelijks voorstelbaar dat een computer geen netwerkverbinding heeft. Het toevoegen en instellen van een netwerkkaart is een gebruikelijke taak voor een &os; beheerder. Het Juiste Stuurprogramma Vinden netwerkkaarten stuurprogramma Voor het zoeken begint, moet duidelijk zijn om welke kaart het gaat, welke chip erop zit en of het een PCI of ISA kaart is. &os; ondersteunt vele kaarten. Op de Hardware Compatibiliteitslijst voor de betreffende release om staan de kaarten die ondersteund worden. Als duidelijk is dat een kaart ondersteund wordt, moet vastgesteld worden wat het geschikte stuurprogramma is. In het bestand /usr/src/sys/conf/NOTES (/usr/src/sys/arch/conf/LINT voor &os; 4.X) staat een lijst van stuurprogramma's voor netwerkinterfaces met wat informatie over de ondersteunde chipsets of kaarten. In geval van twijfel biedt de hulppagina voor het stuurprogramma (man) vaak uitkomst. In het algemeen bevat deze meer informatie over de ondersteunde hardware en mogelijke problemen die kunnen optreden. NOTES bestaat niet op &os; 4.X. In plaats daarvan kan in het bestand LINT informatie gevonden worden over een groot aantal netwerkkaarten. In staan meer details over NOTES versus LINT. Als een veelgebruikte kaart gebruikt wordt, hoeft meestal niet ver gezocht te worden. Stuurprogramma's voor veelvoorkomende netwerkinterfaces al aanwezig in de algemene GENERIC kernel. In dat geval wordt zo'n al gevonden worden bij het opstarten, bijvoorbeeld met het volgende bericht: dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38 000ff irq 15 at device 11.0 on pci0 dc0: Ethernet address: 00:a0:cc:da:da:da miibus0: <MII bus> on dc0 ukphy0: <Generic IEEE 802.3u media interface> on miibus0 ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30 000ff irq 11 at device 12.0 on pci0 dc1: Ethernet address: 00:a0:cc:da:da:db miibus1: <MII bus> on dc1 ukphy1: <Generic IEEE 802.3u media interface> on miibus1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto In dit voorbeeld zitten er twee kaarten in het systeem die het stuurprogramma &man.dc.4; gebruiken. Als het stuurprogramma voor een NIC geen onderdeel is van de GENERIC kernel, dan dient het juiste stuurprogramma voor die NIC geladen te worden. Dit kan op twee manieren: De meest eenvoudige manier is het laden van een kernelmodule voor een netwerkkaart met &man.kldload.8;. Niet alle NIC stuurprogramma's zijn als module beschikbaar. Zo zijn er bijvoorbeeld geen modules beschikbaar voor ISA kaarten. Ondersteuning voor een kaart kan ook in de kernel gecompileerd worden. In /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES en de hulppagina van het stuurprogramma is na te lezen wat er in het kernelinstellingenbestand moet staan. In staat meer informatie over het compileren van een eigen kernel. Als een netwerkkaart al bij het opstarten wordt herkend door de GENERIC kernel, is er geen reden om een andere kernel te bouwen. De Netwerkkaart Instellen netwerkkaarten instellen Nadat een geschikt stuurprogramma geladen is, moet de kaart nog ingestelt worden. Mogelijk is dit al gebeurd door sysinstall tijdens de installatie. Om de instellen van de netwerkkaarten weer te geven zien: &prompt.user; ifconfig dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 ether 00:a0:cc:da:da:da media: Ethernet autoselect (100baseTX <full-duplex>) status: active dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255 ether 00:a0:cc:da:da:db media: Ethernet 10baseT/UTP status: no carrier lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384 inet 127.0.0.1 netmask 0xff000000 tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500 Op oudere versies van of &os; moet volgens &man.ifconfig.8; misschien de optie gebruikt worden. In &man.ifconfig.8;zijn meer details over de syntaxis te lezen. In dit voorbeeld is de uitvoer over IPv6 (inet6 etc.) achterwege gelaten. In dit voorbeeld werden de volgende apparaten weergegeven: dc0: de eerste Ethernet interface; dc1: de tweede Ethernet interface; lp0: de parallelle poort interface; lo0: het loopback apparaat; tun0: het tunnelapparaat gebruikt door ppp. &os; gebruikt de naam van het stuurprogramma gevolgd door een nummer voor de volgorde waarop de kaarten gedetecteerd zijn bij het opstarten. sis2 is de derde netwerkkaart in het systeem die het stuurprogramma &man.sis.4; gebruikt. In het vorige voorbeeld is het apparaat dc0 volledig operationeel. Dit blijkt uit de volgende indicatoren: UP betekent dat de kaart geconfigureerd is en klaar voor gebruik; De kaart heeft een Internet (inet) adres (in dit geval 192.168.1.3); Het heeft een geldig subnetmasker (netmask; 0xffffff00 is hetzelfde als 255.255.255.0); Het heeft een geldig broadcastadres (in dit geval, 192.168.1.255); Het MAC adres van de kaart (ether) is 00:a0:cc:da:da:da; De fysieke mediaselectie staat in autoselectiemodus (media: Ethernet autoselect (100baseTX <full-duplex>)). dc1 is ingesteld om met 10baseT/UTP media te werken. Meet informatie over de mogelijke media types staan in de hulppagina's voor het betreffende stuurprogramma. De status van de link (status) is active, dat wil zeggen dat de drager is gevonden. Bij dc1staat echter status: no carrier. Dit is normaal als er geen ethernet kabel in de kaart gestoken is. Als de uitvoer &man.ifconfig.8; uitvoer er ongeveer zoals hieronder uitziet, dan is de netwerkkaart nog niet ingesteld: dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500 ether 00:a0:cc:da:da:da Om de kaart te instellen zijn root rechten nodig. De netwerkkaart van vanaf de console worden ingesteld met &man.ifconfig.8;, maar dan moet dat na elke herstart herhaald worden. Daarom wordt het vrijwel altijd in /etc/rc.conf gezet. In /etc/rc.conf moet voor elke netwerkkaart in een systeem een regel toegevoegd worden. In het huidige voorbeeld zou dat het volgende kunnen zijn: ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP" dc0, dc1, enzovoort, moeten vervangen worden door de correcte stuurprogramma's voor de netwerkkaarten, zo ook de IP adressen. In de handleiding van het stuurprogramma en van &man.ifconfig.8; staan meer details over de mogelijke opties en in &man.rc.conf.5; staat meer informatie over /etc/rc.conf. Als het netwerk al geconfigureerd is tijdens het installeren van &os; staan er al enkele regels met betrekking tot de netwerkkaart(en) in /etc/rc.conf. Het is dus handig /etc/rc.conf te controleren voordat er regels toegevoegd worden. Ook /etc/hosts moet worden gewijzigd om de namen en IP adressen van verschillende machines op het lokale netwerk, als ze er nog niet in staan. Meer informatie staat in &man.hosts.5; en /usr/share/examples/etc/hosts. Testen en Problemen Oplossing Als de veranderingen in /etc/rc.conf zijn gemaakt, moet het systeem opnieuw gestarten worden (of moeten nauwkeurig alle daemons gestart of herstart worden). Veranderingen aan de interface(s) worden dan toegepast en dan kan er controleerd worden of herstarten goed werkt zonder foutmeldingen. Als de kaart werkt, maar de performance is slecht, dan kan het de moeite waard zijn om &man.tuning.7; door te nemen. Incorrecte netwerkinstellingen kunnen ook tot langzame verbindingen leiden. Soms kunnen enkele device timeouts optreden. Met sommige kaarten is dit normaal gedrag. Maar als dit continu gebeurd of storend is, is het verstandig uit te zoeken of er geen sprake is van een hardwareconfict tussen de netwerkkaart en een ander apparaat Ook dient nogmaals de bekabeling gecontroleer te worden. Misschien zit er niets anders op dan een andere netwerkkaart te gebruiken. Het is ook mogelijk dat er watchdog timeout foutmeldingen optreden. Als eerste moet dan de netwerkkabel fecontroleerd worden. Veel kaarten hebben een PCI slot nodig dat Bus Mastering ondersteunt. Sommige oudere moederborden hebben maar één PCI slot waarmee dit kan (meestal slot 0). In de documentatie van de netwerkkaart en het moederbord is na te gaan of dit het probleem is. No route to host meldingen treden op als het systeem niet in staat is om een pakket naar de eindbestemming te routeren. Dit kan gebeuren als er geen standaardroute aangegeven is of als er een kabel niet verbonden is. De uitvoer van netstat -rn moet gecontroleerd worden en of er een geldige route is naar de bestemming. Mocht dit niet het geval zijn, dan staat er meer informatie in . ping: sendto: Permission denied foutmeldingen worden vaak veroorzaakt door een verkeerd ingestelde firewall. Als de kernel ipfw activeert bij het opstarten zonder dat er firewallregels zijn gedefiniëerd, is het standaardbeleid om alle verkeer te weigeren, zelfs pings! In staat meer informatie. Er kan ook sprake zijn van onvoldoende prestaties doordat de mediaselectie instelling niet optimaal is. In dergelijke gevallen is het mogelijk om de mediaselectie niet als autoselect in te stellen, maar expliciet aan te geven wat de mediaselectie moet zijn, bijvoorbeeld 10baseT/UTP voor twisted pair. Hoewel dit voor de meeste hardware helpt, kan het zijn dat de problemen blijven. Dan moeten nogmaals de netwerkinstellingen gecontroleerd worden en geeft de &man.tuning.7; handleiding wellicht meer informatie. Virtuele Hosts virtuele hosts IP aliassen &os; wordt veel gebruikt voor virtuele sitehosting, waarbij één fysieke server er op het netwerk uitziet alsof het meerdere servers zijn. Dit kan bereikt worden door meerdere IP adressen toe te kennen aan dezelfde interface. Een bepaalde netwerkinterface heeft een echt adres en kan daarnaast een willekeurig aantal alias adressen hebben. Normaliter worden dergelijke aliassen toegevoegd door aliasregels toe te voegen aan /etc/rc.conf. Een aliasregel voor de interface fxp0 ziet er zo uit: ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx" De aliasregels moeten beginnen met alias0 en moete elkaar dan opvolgen (bijvoorbeeld _alias1,, _alias2, enzovoort). Het instelproces stopt als er een nummer ontbreekt. Het is belangrijk dat aliassen het juiste netmasker hebben. Dit is eenvoudig: Een bepaalde interface moet altijd één adres hebben dat het netmasker van het netwerk correct representeert. Elk ander adres binnen dit netwerk op deze interface (alias) moet een netmasker van allemaal 1'en (bits) hebben (getoond als 255.255.255.255 of 0xffffffff). Een voorbeeld. Stel de fxp0 interface is verbonden met twee netwerken, het 10.1.1.0 netwerk met masker 255.255.255.0 en het 202.0.75.16 met netmasker 255.255.255.240. Het systeem moet ook de adressen 10.1.1.1 tot en met 10.1.1.5 en 202.0.75.17 tot en met 202.0.75.20 krijgen. Zoals hierboven vermeld, heeft alleen het eerste adres in een netwerkreeks (in dit geval 10.0.1.1 en 202.0.75.17) een geldig netmasker. Alle overige (10.1.1.2 tot en met 10.1.1.5 en 202.0.75.18 tot en met 202.0.75.20) moeten ingesteld worden met het netmasker 255.255.255.255. Dit kan als volgt: ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0" ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255" ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255" ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255" ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255" ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240" ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255" ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255" ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255" Instellingenbestanden <filename>/etc</filename> layout Instellingengegevens wordt in een aantal mappen bewaard. Daar zijn onder andere: /etc Generieke systeeminstellingenbestanden, specifiek voor het systeem. /etc/defaults De standaardversies van systeeminstellingenbestanden die gebruikt worden als er geen in /etc staat. /etc/mail Extra &man.sendmail.8; instellingenbestanden of instellingenbestanden voor andere MTAs. /etc/ppp Instellingen voor zowel user- als kernel-ppp programma's. /etc/namedb Standaardlocatie voor &man.named.8; gegevens. Normaal gesproken bevinden zich hier named.conf en zonebestanden. /usr/local/etc Instellingenbestanden voor geïnstalleerde software. Kan submappen hebben waarin bij elkaar horende instellingengegevens van een applicatie gegroepeerd zijn. /usr/local/etc/rc.d Start en stop scripts voor geïnstalleerde diensten. /var/db Automatisch gemaakte systeemspecifieke databasebestanden, zoals de packagedatabase, de &man.locate.1; database, enzovoort. Hostnamen hostnaam DNS <filename>/etc/resolv.conf</filename> - - resolv.conf - + resolv.conf In /etc/resolv.conf wordt voorgeschreven op welke wijze &os; het Domain Name System (DNS) moet gebruiken. De meest voorkomende termen in resolv.conf zijn: nameserver Het IP adres van een naamserver die ondervraagd moet worden voor naam/IP conversie. De servers worden in volgorde geprobeerd en het maximale aantal is drie. search Zoeklijst voor het opzoeken van hostnamen. Meestal wordt deze bepaald door het domein waarop de lokale hostnaam zich bevindt. domain De lokale domeinnaam. Een typisch resolv.conf bestand: search example.com nameserver 147.11.1.11 nameserver 147.11.100.30 search en domain dienen niet tegelijk gebruikt te worden. Als DHCP wordt gebruikt: &man.dhclient.8; overschrijft meestal resolv.conf met informatie ontvangen van de DHCP server. <filename>/etc/hosts</filename> hosts /etc/hosts is een eenvoudige tekstdatabase uit de dagen van het oude internet. Het werkt samen met DNS en NIS om namen en IP adressen over en weer te vertalen. Lokale computers, verbonden via een LAN, kunnen hier het beste in opgenomen worden om zo op simpele wijze naam/IP conversie voor een LAN te hebben, zonder noodzaak voor een &man.named.8; server. Ook kunnen naamaliassen toegekend worden (vergelijkbaar met CNAMES bij DNS). Op soortgelijke wijze kan /etc/hosts gebruikt worden als een (zeer beperkte) lokale DNS cache. # $&os;$ # # Host Database # Dit bestand hoort de adressen en aliassen te bevatten # voor de lokale hosts die dit bestand gebruiken. # Bij gebruik van DNS of NIS hoeft dit bestand helemaal niet gebruikt # te worden. Zie /etc/nsswitch.conf voor de volgorde van resolutie. # # ::1 localhost localhost.my.domain myname.my.domain 127.0.0.1 localhost localhost.my.domain myname.my.domain # # Verzonnen netwerk. #10.0.0.2 myname.my.domain myname #10.0.0.3 myfriend.my.domain myfriend # # Volgens RFC 1918 mogen de volgende IP netwerken gebruikt worden # als private netwerken die niet met internet verbonden zijn: # # 10.0.0.0 - 10.255.255.255 # 172.16.0.0 - 172.31.255.255 # 192.168.0.0 - 192.168.255.255 # # Als er toch verbinding moet zijn met internet, zijn echte # officieel toegewezen nummers nodig. Probeer ECHT GEEN eigen # netwerknummers te verzinnen, maar vraag ze op bij de provider # (als die er is) of bij de Internet Registry (ftp naar # rs.internic.net, map `/templates'). # /etc/hosts heeft als formaat: [Internet address] [official hostname] [alias1] [alias2] ... Bijvoorbeeld: 10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2 In &man.hosts.5; staat meer informatie. Logboekbestanden Instellen logboekbestanden <filename>syslog.conf</filename> syslog.conf syslog.conf is het instellingenbestand voor het programma &man.syslogd.8;. Het geeft aan welke soorten syslog berichten er gelogd moeten worden en naar welke logboekbestanden, apparaten, gebruikers of machines. # $&os;$ # # Spaties zijn TOEGESTAAN als veldscheiding in dit bestand. # Maar andere *nix-achtige systemen eisen nog steeds het gebruik # van tabs als veldscheiding. Als dit bestand gedeeld wordt met # andere systemen, is het verstandig alle tabs als veldscheiding # te gebruiken. # Zie ook de handleding van syslog.conf(5). *.err;kern.debug;auth.notice;mail.crit /dev/console *.notice;kern.debug;lpr.info;mail.crit;news.err /var/log/messages security.* /var/log/security mail.info /var/log/maillog lpr.info /var/log/lpd-errs cron.* /var/log/cron *.err root *.notice;news.err root *.alert root *.emerg * # verwijder het commentaarkarakter om alle schrijfacties naar # /dev/console naar /var/log/console.log te schrijven. #console.info /var/log/console.log # verwijder het commentaarkarakter om alle berichten naar # /var/log/all.log te schrijven. #*.* /var/log/all.log # # verwijder het commentaarkarakter om alle liggen naar een andere # host in te schakelen met de naam loghost. #*.* @loghost # # verwijder het commentaarkarakter als inn draait. # news.crit /var/log/news/news.crit # news.err /var/log/news/news.err # news.notice /var/log/news/news.notice !startslip *.* /var/log/slip.log !ppp *.* /var/log/ppp.log In &man.syslog.conf.5; staat meer informatie. <filename>newsyslog.conf</filename> newsyslog.conf newsyslog.conf is het instellingenbestand voor &man.newsyslog.8;, een programma dat op gezette tijden via &man.cron.8; wordt uitgevoerd. &man.newsyslog.8; stelt vast wanneer logboekbestanden gearchiveerd moeten worden of anderszins opnieuw gerangschikt moeten worden. logfile wordt hernoemd naar logfile.0, logfile.0 naar logfile.1, enzovoort. newsyslog.conf geeft aan welke logboekbestanden beheerd moeten worden, hoeveel er in archieven bewaard moeten worden en wanneer ze aangemaakt moeten worden. Logboekbestanden kunnen gereorganiseerd en/of gearchiveerd worden als ze een bepaalde grootte bereikt hebben of op een bepaald periodiek tijdstip of een bepaalde datum. # configuration file for newsyslog # $&os;$ # # filename [owner:group] mode count size when [ZB] [/pid_file] [sig_num] /var/log/cron 600 3 100 * Z /var/log/amd.log 644 7 100 * Z /var/log/kerberos.log 644 7 100 * Z /var/log/lpd-errs 644 7 100 * Z /var/log/maillog 644 7 * @T00 Z /var/log/sendmail.st 644 10 * 168 B /var/log/messages 644 5 100 * Z /var/log/all.log 600 7 * @T00 Z /var/log/slip.log 600 3 100 * Z /var/log/ppp.log 600 3 100 * Z /var/log/security 600 10 100 * Z /var/log/wtmp 644 3 * @01T05 B /var/log/daily.log 640 7 * @T00 Z /var/log/weekly.log 640 5 1 $W6D0 Z /var/log/monthly.log 640 12 * $M1D0 Z /var/log/console.log 640 5 100 * Z In &man.newsyslog.8; staat meer informatie. <filename>sysctl.conf</filename> sysctl.conf sysctl sysctl.conf lijkt veel op rc.conf. Waardetoekenning heeft weer de vorm variable=value. De ingestelde &man.sysctl.8; waarden worden doorgevoerd op het moment dat het systeem naar multi-user modus gaat. Niet alle variabelen kunnen in deze modus gewijzigd worden. Hieronder staat een voorbeeld van sysctl.conf waarin het loggen van gevallen waarin een proces beëindigd wordt ten gevolge van een - fataal signaal (bijv. een TERM signaal of een exitcode van een - programma dat crasht) wordt uitgezet en waarin de &linux; - emulatielaag zodanig wordt ingesteld dat een &linux; programma - ook echt rapporteert dat het onder &os; draait: + fataal signaal (bijvoorbeeld een TERM signaal of een exitcode + van een programma dat crasht) wordt uitgezet en waarin de + &linux; emulatielaag zodanig wordt ingesteld dat een &linux; + programma ook echt rapporteert dat het onder &os; + draait: kern.logsigexit=0 # Do not log fatal signal exits (e.g. sig 11) compat.linux.osname=&os; compat.linux.osrelease=4.3-STABLE Optimaliseren met sysctl sysctl optimalisering met sysctl &man.sysctl.8; is een interface waarmee veranderingen gemaakt kunnen worden aan een draaiend &os; systeem. Er zijn onder meer vele geavanceerde opties voor de TCP/IP stack en het virtuele geheugensysteem, waarmee een ervaren systeembeheerder de systeemprestaties drastisch kan verbeteren. Met &man.sysctl.8; kunnen meer dan vijfhonderd ststeemvariabelen opgevraagd en ingesteld worden. In essentie heeft &man.sysctl.8; twee funkties: het lezen en wijzigen van systeeminstellingen. Om alle leesbare variabelen te tonen: &prompt.user; sysctl -a Om een bepaalde variabele op te vragen, bijvoorbeeld kern.maxproc: &prompt.user; sysctl kern.maxproc kern.maxproc: 1044 Om een bepaalde variabele toe te kennen (te wijzigen), is de syntaxis variable=value: &prompt.root; sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000 Waarden van sysctl variabelen zijn doorgaans strings (tekst), getallen of booleans (1 als waar, 0 als onwaar). Om automatisch variabelen in te stellen als de machine start, kunnen ze toegevoegd worden aan /etc/sysctl.conf. Meer informatie staat in &man.sysctl.conf.5; en . Tom Rhodes Geschreven door &man.sysctl.8; Alleen-lezen In sommige gevallen is het wenselijk zijn om &man.sysctl.8; waarden die alleen-lezen zijn toch te wijzigen. Dit wordt niet aangeraden, maar het is soms onvermijdelijk. Op sommige laptops is bijvoorbeeld het apparaat &man.cardbus.4; niet in staat om geheugenregio's af te tasten, met als gevolg foutmeldingen als: cbb0: Could not map register memory device_probe_and_attach: cbb0 attach returned 12 In dergelijke gevallen moeten er meestal enkele &man.sysctl.8; instellingen gewijzigd worden die alleen-lezen zijn en een standaardwaarde hebben. Dit kan bereikt worden door &man.sysctl.8; OIDs in de lokale /boot/loader.conf te zetten. Standaardinstellingen staan in /boot/defaults/loader.conf. Om het bovenstaande probleem op te lossen moet in in /boot/loader.confhw.pci.allow_unsupported_io_range=1 ingesteld worden. Dan werkt &man.cardbus.4; wel goed. Harde schijven optimaliseren Sysctl Variabelen <varname>vfs.vmiodirenable</varname> vfs.vmiodirenable De sysctl variabele vfs.vmiodirenable kan de waarde 0 (uit) of 1 (aan) hebben. De standaardwaarde is 1. Deze variabele bepaalt hoe mappen door het systeem in een cache bewaard worden. De meeste mappen zijn klein en gebruiken slechts een klein fragment (typisch 1 K) in het bestandssysteem en nog minder (typisch 512 bytes) in de buffercache. Als deze variabele uit staat (op 0) bewaart de buffercache slechts een bepaald aantal mappen in de cache, ook al is er een overvloed aan geheugen beschikbaar. Wanneer deze aan staat (op 1), wordt de VM pagecache gebruikt, waardoor voor het cachen van mappen al het geheugen kan worden gebruikt. Het is echter wel zo dat het minimale in-core geheugen dat gebruikt wordt om een map te cachen in dat geval de fysieke pagegrootte is (typisch 4 K) in plaats van 512  bytes. Het is aan te raden deze optie aan te laten staat als gebruik gemaakt worden van diensten die met grote aantallen bestanden werken, zoals webcaches, grote mailsystemen en newsservers. Als deze optie aan blijft staan, verlaagt die de prestaties niet, ook al kost het meer geheugen. Door experimenteren is dit voor een systeem na te gaan. <varname>vfs.write_behind</varname> vfs.write_behind De sysctl variabele vfs.write_behind staat standaard aan (1). Dit betekent dat het bestandssysteem gegevens naar het medium gaat schrijven op het moment dat er een volledig cluster aan data verzameld is Dit is meestal het geval bij het schrijven van grote sequentiële bestanden. Het idee is om te voorkomen dat de buffercache verzadigd raakt met vuile buffers zonder dat dit bijdraagt aan de I/O prestaties. Dit kan echter processen ophouden en onder sommige omstandigheden is het wellicht beter deze sysctl uit te zetten. <varname>vfs.hirunningspace</varname> vfs.hirunningspace De sysctl variabele vfs.hirunningspace bepaalt hoeveel nog te schrijven gegevens er in het complete systeem op elk moment in de wachtrij naar schijfcontrollers mag staan. De standaardwaarde is meestal voldoende, maar op machines met veel schijven, is het beter deze te verhogen naar vier of vijf megabyte. Het instellen van een te hoge waarde (groter dan de schrijfdrempel van de buffercache) kan leiden tot zeer slechte prestaties bij clustering. Stel deze waarde niet arbitrair hoog in! Hogere schrijfwaarden kunnen vertraging veroorzaken in het lezen, als dit tegelijk plaatsvindt. Er zijn verscheidene andere sysctls voor buffercache en VM pagecache. Het wordt afgeraden deze te wijzigen. Sinds &os; 4.3 is het VM systeem zeer goed in staat zichzelf automatisch te optimaliseren. <varname>vm.swap_idle_enabled</varname> vm.swap_idle_enabled De sysctl variabele vm.swap_idle_enabled is nuttig in grote multi-user systemen met veel gebruikers die af- en aanmelden en veel onbenutte processen. Dergelijke systemen hebben de neiging om voortdurend de vrije geheugenreserves onder druk te zetten. Het is mogelijk om de prioriteit van geheugenpages die verband houden met onbenutte processen sneller te laten dalen dan met het normale pageout algoritme, door deze sysctl aan te zetten en via vm.swap_idle_threshold1 en vm.swap_idle_threshold2 de swapout hysterese (in seconden onbenut) af te stemmen. Deze optie dient alleen gebruikt te worden als ze echt nodig is, want de andere kant van de medaille is dat dit eerder pre-page geheugen inhoudt in plaats van later, waardoor het meer wisselbestand- en schijfbandbreedte kost. In een klein systeem heeft deze optie een voorspelbaar effect, maar in grote systemen waar al sprake is van een matige paging kan deze optie het mogelijk maken voor het VM systeem om hele processen gemakkelijk in en uit het geheugen te halen. <varname>hw.ata.wc</varname> hw.ata.wc Ten tijde van &os; 4.3 is er geflirt met het uitzetten van IDE schrijfcaching. Hierdoor neemt de bandbraadte naar IDE schijven af, maar het werd als noodzakelijk beschouwd vanwege ernstige problemen met gegevensinconsistentie die door harddiskproducenten geëintroduceerd waren. Het probleem is dat IDE schijven niet de waarheid vertellen over wanneer een schrijfactie klaar is. Door IDE schrijfcaching wordt data niet alleen ongeordend geschreven, maar soms kan zelfs het schrijven van sommige blokken voortdurend uitgesteld worden als er sprake is van een hoge disklast. Een crash of stroomstoring kan dan ernstige corruptie van het bestandssysteem veroorzaken. Daarom werd de standaardinstelling van &os; voor alle zekerheid gewijzigd. Helaas was het resultaat een groot verlies aan prestaties en na die release is de standaardwaarde weer terug veranderd. Met de sysctl variabele hw.ata.wc kan gecontroleerd worden of schrijfcaching aan of uit staat. Als schrijfcaching uit staat, het die weer aangezet worden door hw.ata.wc naar 1 te zetten. Aangezien dit een kernelvariabele is, moet deze ingesteld worden vanuit de bootloader tijdens het opstarten. Nadat de kernel eenmaal opgestart is, heeft het wijzigen van deze sysctl geen effect. Meer informatie staat in &man.ata.4;. <literal>SCSI_DELAY</literal> (<varname>kern.cam.scsi_delay</varname>) kern.cam.scsi.delay kernelopties SCSI_DELAY De SCSI_DELAY kernelinstelling kan gebruikt worden om de opstarttijd te versnellen. De standaardwaarde is nogal hoog en kan 15 seconden vertraging veroorzaken. Met modernere SCSI systemen is 5 seconden al voldoende. Nieuwere versies van &os; (5.0 en hoger) gebruiken de opstartvariabele kern.cam.scsi_delay. Zowel deze als de optie SCSI_DELAY gebruiken waarden uitgedrukt in milliseconden en niet in seconden. Softupdates Softupdates tunefs &man.tunefs.8; kan gebruikt worden om een bestandsysteem nauwkeurig af te stellen. Het heeft veel opties, maar nu wordt alleen het aan- en uitzetten van softupdates besproken. Dat gaat als volgt: &prompt.root; tunefs -n enable /filesystem &prompt.root; tunefs -n disable /filesystem Een bestandssysteem kan niet met &man.tunefs.8; gewijzigd worden als het gemount is. Softupdates aanzetten wordt dus in het algemeen gedaan vanuit single-user modus, voordat partities gemount zijn. Vanaf &os; 4.5, is het mogelijk om softupdates aan te zetten op het moment dat de bestandssystemen aangemaakt worden, door middel van de -U optie van &man.newfs.8;. Softupdates zorgen voor een drastische verbetering van de meta-data prestaties, met name het aanmaken en verwijderen van bestanden, door gebruik van een geheugencache. Het wordt dan ook aangeraden om op alle bestandssystemen softupdates te gebruiken. Er zijn twee nadelen aan softupdates: softupdates garandeert een consistent bestandssysteem in geval van een crash, maar het kan makkelijk enkele seconden (zelfs een minuut) achter liggen met het daadwerkelijk bijwerken op de fysieke harde schijf. Als een systeem crasht wordt wellicht meer werk verloren dan anders het geval zou zijn. Daarnaast vertraagt softupdates het vrijgeven van bestandssysteemblokken. Als een bestandssysteem (zoals de root partitie) bijna vol is, dan kan het verrichten van een grote update, zoals make installworld, ertoe leiden dat het bestandssysteem ruimtegebrek krijgt en dat daardoor de operatie mislukt. Meer over Softupdates Softupdates details Er zijn traditioneel twee methodes om de metadata van een bestandssysteem terug naar de schijf te schrijven. Het bijwerken van metadata houdt het bijwerken van van niet-inhoudelijke data zoals inodes of mappen in. Historisch gezien was het gebruikelijk om metadataupdates synchroon weg te schrijven. Als een map bijvoorbeeld gewijzigd was, wachtte het systeem totdat de verandering daadwerkelijk naar de schijf geschreven was. De databuffers (de inhoud van een bestand) werden doorgeschoven naar de buffercache en op een later moment asynchroon op de schijf opgeslagen. Het voordeel van deze benadering is dat ze altijd veilig is. Als het systeem faalt tijdens het bijwerken, is de metadata nog altijd consistent. Een bestand kan volledig gecreëerd zijn of helemaal niet. Als de datablokken van een bestand nog niet van de buffercache naar de schijf geschreven zijn ten tijde van de crash, is &man.fsck.8; in staat om dit te herkennen en het bestandssysteem te repareren door de lengte van het bestand nul te maken. Deze implementatie is ook helder en eenvoudig. Het nadeel is echter dat het wijzigen van metadata een traag proces is. Een rm -r commando benadert bijvoorbeeld alle bestanden in een map sequentiëel, maar elke mapverandering (verwijderen van een bestand) wordt synchroon naar de schijf geschreven. Dit omvat ook het bijwerken van de map zelf, van de inodetabel en mogelijk ook van indirecte blokken die voor het bestand in kwestie zijn gealloceerd. Gelijksoortige processen spelen zich af bij een commando als tar -x, waarbij een grote bestandshiëearchie wordt uitgepakt. De tweede mogelijkheid is om het bijwerken van metadata asynchroon weg te schrijven. Dit is standaard in &linux;/ext2fs en als een *BSD ufs bestandssysteem met mount -o async gemount is, is de werking hetzelfde. Alle bijwerkingen aan metagegevens worden eenvoudigweg doorgegeven aan de buffercache en vermengd met inhoudelijke updates van de bestandsgegevens. Het voordeel is een grote winst aan snelheid, omdat er niet telkens gewacht hoeft te worden op het bijwerken van metagegevens tot deze daadwerkelijk naar de schijf geschreven zijn. De implementatie is ook in dit geval helder en eenvoudig. Het grote nadeel is uiteraard dat er geen enkele garantie is voor de consistentie van het bestandssysteem. Als het systeem faalt tijdens een operatie waarbij veel metagegevens worden bijgewerkt (bijvoorbeeld door een stroomstoring of iemand drukt op de resetknop), blijft het bestandssysteem in een onvoorspelbare toestand achter. Er is geen mogelijkheid om de toestand van het bestandssysteem te onderzoeken als het systeem weer opstart, want de datablokken van een bestand kunnen al weggeschreven zijn geweest terwijl het wegschrijven van bijwerkingen aan de inodetabel of de bijhorende map nog niet plaats heeft gevonden. Het is zelfs onmogelijk om een fsck te implementeren die de overgebleven chaos kan opruimen: de benodigde informatie is gewoon niet volledig aanwezig op de schijf. Als een bestandssysteem op deze manier onherstelbaar beschadigd is, is de enige optie &man.newfs.8; te gebruiken en vervolgens te herstellen van een backup. De gebruikelijke oplossing voor dit probleem is het implementeren van dirty region logging, ook wel journaling genoemd, hoewel deze term niet consistent gebruikt wordt en soms ook wordt gebruikt voor andere vormen van transactielogging. Het bijwerken van metagegevens wordt nog steeds synchroon geschreven, maar slechts naar een klein gebied van de schijf. Later worden ze dan naar de juiste locatie verplaatst. Omdat het loggebied klein is, hoeven de koppen van de schijf zelfs tijdens schrijfintensieve operaties nog maar over een kleine fysieke afstand te bewegen en door deze snellere respons zijn dit soort operaties sneller dan op de traditionele manier. De extra complexiteit van de implementatie is nogal beperkt, dus het risico van introductie van extra bugs valt mee. Een nadeel is dat alle metagegevens tweemaal geschreven worden (eerst naar het loggebied en later nog eens naar de definitieve locatie). Dus bij normaal gebruik kan er sprake zijn van wat men wel noemt een performance pessimization. Anderzijds kunnen in geval van een crash alle nog uitstaande metagegevensoperaties snel worden teruggedraaid of vanuit het loggebied alsnog worden afgemaakt, wanneer de machine weer opstart. Het bestandssysteem start dan snel op. Kirk McKusick, de vader van het Berkeley FFS, loste dit probleem op met softupdates, wat betekent dat alle uitstaande acties voor het bijwerken van metagegevens in het geheugen bewaard worden en dan geordend naar de schijf geschreven worden. Dit heeft het gevolg dat in geval van intensieve operaties met betrekking tot metagegevens, latere bijwerkingen aan een item eerdere bewerkingen opvangen (catch) als deze nog in het geheugen zitten en nog niet weggeschreven waren. Dus alle operaties, op bijvoorbeeld een map, worden in het algemeen eerst in het geheugen uitgevoerd voordat er wordt bijgewerkt naar schijf. De datablokken worden geordend conform hun positie, zodat ze nooit weggeschreven worden voordat hun metagegevens geschreven zijn. Als het systeem een crash ondervindt, veroorzaakt dat impliciet het terugdraaien van uitstaande operaties (log rewind): alle operaties die nog niet weggeschreven waren lijken nooit gebeurd te zijn. Zo wordt een consistent bestandssysteem in stand gehouden dat eruit ziet alsof het 30 tot 60 seconden eerder was. Het gebruikte algoritme garandeert dat alle bronnen die in gebruik zijn als zodanig gemarkeerd worden in hun daarvoor geschikte bitmaps: blokken en inodes. Na een crash is de enige allocatiefout die kan optreden dat bronnen gemarkeerd kunnen zijn als in gebruik (used), terwijl ze feitelijk alweer beschikbaar (free) zijn. &man.fsck.8; herkent deze situatie en stelt dergelijke vrij te maken bronnen opnieuw beschikbaar. Het is volkomen veilig om na een crash te negeren dat het bestandssysteem niet schoon is en het tot mounten te dwingen met mount -f. Om niet langer gebruikte bronnen vrij te maken moet later &man.fsck.8; uitgevoerd worden. Dit is dan ook het idee achter background fsck: op het moment dat het systeem aan het opstarten is, wordt er alleen een snapshot van het systeem bewaard. fsck kan later uitgevoerd worden. Alle bestandssystemen kunnen dirty gemount worden en het systeem kan gewoon verder opstarten naar multi-user modus. Vervolgens zijn er fscks gepland die in de achtergrond draaien voor elk bestandssysteem dat niet schoon is en waarmee bezette bronnen vrijgegeven worden. Bestandssystemen die geen gebruik maken van softupdates moeten echter nog steeds gebruik maken van de normale fsck in de voorgrond. Het voordeel van softupdates is dat operaties op metagegevens bijna net zo snel zijn als asynchrone updates (dat wil zeggen sneller dan met logging, waarbij de metagegevens keer keer geschreven worden). Nadelen zijn de complexiteit van de code (wat een groter risico op bugs impliceert in een gebied dat bijzonder gevoelig is voor verlies van gebruikersgegevens) en een groter geheugenverbruik. Tevens moet de gebruiker wennen aan enkele eigenaardigheden. Na een crash lijkt de toestand van het bestandssysteem wat ouder. In situaties waar de standaard synchrone benadering een aantal lege bestanden zou hebben achtergelaten na fsck, is het met softupdates juist zo dat dergelijke bestanden er helemaal niet zijn, omdat de metadata of de bestandsinhoud nooit naar de schijf is geschreven. Schijfruimte wordt pas vrijgegeven als de bijwerkingen aan metagegevens en inhoudelijke bestandsdata weggeschreven zijn, wat mogelijk pas enige tijd na het uitvoeren van rm plaatsvindt. Dit kan problemen veroorzaken als er grote hoeveelheden data naar een bestandssysteem geschreven worden dat onvoldoende vrije ruimte heeft om alle bestanden twee keer te kunnen bevatten (bijvoorbeeld in /tmp). Fijnafstemming van Kernellimieten fijnafstemming kernellimieten Bestandsproceslimieten <varname>kern.maxfiles</varname> kern.maxfiles kern.maxfiles kan worden verhoogd of verlaagd, afhankelijk van de systeembehoeften. Deze variabele geeft het maximale aantal bestandsdescriptors op een systeem. Als de bestandsdescriptortabel vol is,.toont de systeembuffer meerdere malen file: table is full, hetgeen achteraf te zien is net dmesg. Elk geopend bestand, socket of fifo heeft een bestandsdescriptor. Een grote produktieserver kan makkelijk enige duizenden bestandsdescriptors nodig hebben, afhankelijk van het soort en aantal diensten die tegelijk draaien. De standaardwaarde voor kern.maxfiles wordt bepaald door de optie MAXUSERS in het bestand met kernelinstellingen. kern.maxfiles groeit evenredig met de waarde van MAXUSERS. Als een aangepaste kernel wordt gebouwd, is het een goed idee om deze kerneloptie in te stellen afhankelijk van het gebruikt van een systeemhet (maar niet te laag). Hoewel een produktieserver misschien niet 256 gebruikers gelijktijdige gebruikers heeft, kunnen de benodigde systeembronnen best vergelijkbaar zijn met een grootschalige webserver. Vanaf &os; 4.5 kan meestal het beste MAXUSERS op 0 gezet worden in het bestand met kernelinstellingen. Er wordt dan een redelijke waarde gekozen, die gebaseerd is op de hoeveelheid RAM in een systeem. <varname>kern.ipc.somaxconn</varname> kern.ipc.somaxconn De sysctl variabele kern.ipc.somaxconn beparkt de grootte van de luisterwachtrij voor het accepteren van nieuwe TCP verbindingen. De standaardwaarde van 128 is meestal te laag voor robuuste behandeling van nieuwe verbindingen in een zwaarbeladen webserver omgeving. Voor zulke omgevingen wordt aangeraden deze waarde te verhogen tot 1024 of hoger. De dienstdaemon beperkt misschien zelf de luisterwachtrij (bijvoorbeeld &man.sendmail.8; of Apache), maar heeft vaak een mogelijkheid in een configuratiebestand de wachtrijgrootte aan te passen. Grote luisterwachtrijen zijn ook beter in het ontwijken van Ontzegging van Dienst (DoS) aanvallen. Netwerkbeperkingen De kerneloptie NMBCLUSTERS bepaalt het aantal netwerk Mbufs dat beschikbaar is voor een systeem. Een veel bezochte server met een laag aantal Mbufs beperkt de mogelijkheden van &os;. Elk cluster staat voor ongeveer 2 K geheugen, dus een waarde van 1024 stelt 2 megabyte aan kernelgeheugen voor, dat is gereserveerd voor netwerkbuffers. Een simpele berekening geeft aan hoeveel er nodig is. Stel dat een webserver met een maximum van 1000 simultane verbindingen voor elke verbinding 16 K aan ontvangst netwerkbuffers en 16 K aan zendbuffers kost, dan is ongeveer 32 MB aan netbuffers nodig voor de webserver. Een goede vuistregel is te vermeniguldigen met twee, dus 2x32 MB / 2 KB = 64 MB / 2 kB = 32768. Voor machines met veel geheugen wordt 4096 tot 32768 aangeraden. Er moet in geen geval een arbitrair hoge waarde voor deze sysctl opgegeven worden, want dat kan leiden tot een crash tijdens het opstarten. Met de optie van &man.netstat.1; kan clustergebruik van het netwerk bekeken worden. De loaderparameter kern.ipc.nmbclusters moet gebruikt worden om dit tijdens het opstarten toe te passen. Alleen voor oudere versies van &os; is het nodig om de kerneloptie NMBCLUSTERS te gebruiken. Voor drukke servers die extensief gebruik maken van de systeemaanroep &man.sendfile.2;, kan het nodig zijn het aantal &man.sendfile.2; buffers te verhogen via de kerneloptie NSFBUFS of door de waarde in te stellen in /boot/loader.conf (in &man.loader.8; staan details). Als er in de procestabel processen staan met een status sfbufa is dat een algemene indicator dat deze parameter aangepast moet worden. De sysctl variabele kern.ipc.nsfbufs is alleen-lezen en laat zien op welke waarde deze kernelvariabele is ingesteld. Deze parameter schaalt engiszins met de variabele kern.maxusers, maar het kan nodig zijn om deze bij te stellen. Zelfs als een socket als non-blocking gemarkeerd is, dan nog kan het aanroepen van &man.sendfile.2; op de non-blocking socket ertoe leiden dat er toch blokkade optreedt totdat er voldoende struct sf_buf's vrijgemaakt zijn. <varname>net.inet.ip.portrange.*</varname> net.inet.ip.portrange.* De sysctle variabelelen net.inet.ip.portrange.* bepalen welke reeks poortnummers automatisch gebonden wordt aan TCP en UDP sockets. Er zijn drie gebieden: een laag gebied, een (standaard) middengebied en een hoog gebied. De meeste netwerkprogramma's gebruiken het standaardbereik, wat begrensd wordt door net.inet.ip.portrange.first en net.inet.ip.portrange.last met standaardwaarden van respectievelijk 1024 en 5000. Gebonden poortreeksen worden gebruikt voor uitgaande verbindingen en het is onder bepaalde omstandigheden mogelijk dat poorten op raken. Dit gebeurt meestal in het geval van een zwaar belaste webproxy. Poortbereik is niet van belang als vooral diensten draaien die zich bezighouden met inkomende verbindingen, zoals een normale webserver, of als het aantal uitgaande verbindingen beperkt is, zoals bij een mailrelay. Voor situaties waarin een tekort aan poorten dreigt, wordt aangeraden om net.inet.ip.portrange.last bescheiden op te hogen. Een waarde van 10000, 20000 of 30000 is redelijk. Er moet ook rekening met effecten op firewalls gehouden worden als de poortreeks gewijzigd wordt. Sommige firewalls kunnen grote poortreeksen blokkeren, meestal de lagere poorten, en verwachten dat andere systemen hogere poorten gebruiken voor uitgaande verbindingen. Om deze reden wordt het aanbevolen om net.inet.ip.portrange.first te verlagen. TCP Bandbreedtevertragingsproduct (TCP Bandwidth Delay Product) TCP bandbreedtevertragingsproduct net.inet.tcp.inflight.enable De TCP bandbreedtevertragingsproduct limitatie lijkt op TCP/Vegas in NetBSD. Het kan aangezet worden door de sysctl variabelel net.inet.tcp.inflight.enable de waarde 1 te geven. Het systeem tracht dan het bandbreedtevertragingssprodukt te berekenen voor elke verbinding en beperkt dan de hoeveelheid gegevens in de wachtrij naar het netwerk tot de hoeveelheid die vereist is om maximale doorvoer te kunnen handhaven. Dit is nuttig bij gebruik van modems, Gigabit Ethernet of zelfs bij hoge snelheid WAN links (of elke andere link met een groot bandbreedtevertragingsprodukt), in het bijzonder als ook windowschaling of een groot verzendwindow gebruikt wordt. Als deze optie aangezet wordt, dient ook net.inet.tcp.inflight.debug de waarde 0 te krijgen (geen debugging) en voor produktiegebruik kan het instellen van net.inet.tcp.inflight.min naar minstens 6144 voordeel opleveren. Het instellen van hoge minima kan effectief het beperken van bandbreedte ondermijnen, afhankelijk van de link. De mogelijkheid tot limitering zorgt ervoor dat de hoeveelheid data die opgebouwd wordt, in tussentijdse route- en switchwachtrijen verlaagd kan worden en tevens kan de hoeveelheid gegevens die opgebouwd wordt in de interfacewachtrij van de lokale host verlaagd worden. Met minder pakketten in wachtrijen, kunnen interactieve verbindingen opereren met lagere Round Trip tijden, met name over langzame modems. Deze optie gaat alleen over datatransmissie (upload / serverkant) en heeft geen effect gegevensontvangst (download / clientkant). Aanpassen van net.inet.tcp.inflight.stab wordt niet aangeraden. Deze parameter krijgt standaard een waarde van 20, wat 2 maximale pakketten opgeteld bij de bandbreedtevensterberekening representeert. Het extra venster is nodig om het algoritme stabiel te houden en om de reactietijd bij veranderende omstandigheden te verbeteren, maar het kan ook leiden tot langere pingtijden over langzame verbindingen (zonder het inflight algoritme kan dit echter nog erger zijn). In dergelijke gevallen kan deze parameter misschien verlaagd worden naar 15, 10 of 5 en misschien moet voor het gewenste effect ook net.inet.tcp.inflight.min verlaagd worden (bijvoorbeeld naar 3500). Het verlagen van deze parameters moet pas in laatste instantie overwogen worden. In 4.X en eerdere releases van &os; staan de sysctl variabelen inflight direct onder - net.inet.tcp. Hun namen zijn (in + net.inet.tcp. Hun namen waren (in alfabetische volgorde): - net.inet.tcp.inflight.debug, - net.inet.tcp.inflight.enable, - net.inet.tcp.inflight.max, - net.inet.tcp.inflight.min, - net.inet.tcp.inflight.stab. + net.inet.tcp.inflight_debug, + net.inet.tcp.inflight_enable, + net.inet.tcp.inflight_max, + net.inet.tcp.inflight_min, + net.inet.tcp.inflight_stab. Wisselbestandruimte Toevoegen Hoe goed er ook gepland wordt, soms draait een systeem gewoon niet zoals verwacht. Een oorzaak hiervoor kan een tekort aan wisselbestandruimte zijn. Als blijkt dat er meer wisselbestandruimte nodig is, kan dat eenvoudig. Er zijn drie manieren om de totale ruimte beschikbaar als wisselbestand te vergroten: een nieuwe harde schijf toevoegen, swappen over NFS of een wisselbestand maken op een bestaande (UFS of andere) partitie. Wisselbestand (partitie) op een Nieuwe Harde Schijf Dit is natuurlijk de beste manier om de wisselbestandsruimte te vergroten en een goed excuus om een extra harde schijf toe te voegen. Die komt immers altijd wel van pas. In dat geval kan het beste de discussie over wisselbestandruimte in nog eens herlezen worden om wat suggesties te krijgen over hoe wisselbestandpartitie(s) het beste ingedeeld kunnen worden. Swappen over NFS In het algemeen wordt swappen over NFS niet aangeraden omdat het langzaam is. Dit dient alleen gebruikt te worden als het onmogelijk om naar een lokale schijf te swappen. In &os; versies voor 4.X was het hanteren van een wisselbestand over NFS erg langzaam en inefficiënt. Nieuwere versies werken beter, maar dan nog wordt swappen over NFS sterk gelimiteerd door de aanwezige netwerkbandbreedte en belast het de NFS server. Wisselbestanden Het is mogelijk om een bestand aan te maken van een bepaalde grootte en dit als swap te gebruiken. In dit voorbeeld wordt een 64 MB bestand gebruikt, /usr/swap0. Uiteraard kan een willekeurige naam gebruikt worden. Een Wisselbestand Aanmaken met &os; 4.X De kernel moet het vnode stuurprogramma bevatten. In recente versies van GENERIC is vnode niet opgenomen. pseudo-device vn #Vnode driver (turns a file into a device) Een vn-apparaat aanmaken: &prompt.root; cd /dev &prompt.root; sh MAKEDEV vn0 Een wisselbestand aanmaken (/usr/swap0): &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 Correcte rechten op (/usr/swap0) instellen: &prompt.root; chmod 0600 /usr/swap0 Wisselbestand opnemen in /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. Nu kan de machine herstart worden of het wisselbestand meteen te gebruiken: &prompt.root; vnconfig -e /dev/vn0b /usr/swap0 swap Een Wisselbestand Aanmaken met &os; 5.X De kernel moet het stuurprogramma voor de geheugendisk (&man.md.4;) bevatten. Dat zit standaard in de GENERIC kernel. device md # Memory "disks" Het wisselbestand /usr/swap0 aanmaken: &prompt.root; dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 De correctie rechten op /usr/swap0 instellen: &prompt.root; chmod 0600 /usr/swap0 Het wisselbestand opnemen in /etc/rc.conf: swapfile="/usr/swap0" # Set to name of swapfile if aux swapfile desired. De machine moet herstart worden of om het wisselbestand direct in te schakelen: &prompt.root; mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0 Hiten Pandya Geschreven door Tom Rhodes Energie- en Bronnenbeheer Het is belangrijk om hardwarebronnen op een efficiënte wijze te benutten. Voordat ACPI geïntroduceerd werd was het erg lastig en onflexibel om het energieverbruik en de thermische eigenschappen van een systeem te beheersen. De hardware werd beheerst door deze of gene interface, ingebed in het BIOS, zoals de Plug-n-play BIOS (PNPBIOS) of Advanced Power Management (APM), enzovoort. Energie- en bronnenbeheer is een kerntaak van moderne besturingssystemen. Het besturingssysteem moet bijvoorbeeld systeemlimieten in de gaten houdt (en mogelijk een SMS sturen of iets dergelijks) als de systeemtemperatuur onverwacht toeneemt. In dit deel van het &os; handboek wordt uitgebreide informatie verschaft over ACPI. Aan het einde staan referenties naar meer leesmateriaal. ACPI is op &os; 5.X en nieuwere systemen als een standaard ingeladen kernelmodule aanwezig. In &os; 4.9 kan ACPI aangezet worden door de regel device acpica toe te voegen aan het bestand met kernelinstellingen en een nieuwe kernel te bouwen en te installeren. Wat is ACPI? ACPI APM Advanced Configuration and Power Interface (ACPI) is een standaard die door een alliantie van producenten geschreven is, met als doel te voorzien in een een standaardinterface voor hardware bronnen- en energiebeheer. Een belangrijk element is dat het meer flexibiliteit en beheersmogelijkheden biedt aan het besturingssysteem (OS). Moderne systemen hebben de limieten van de huidige PNP interfaces verder opgerekt dan wenselijk en misschien wel mogelijk was. ACPI is de directe opvolger van APM (Advanced Power Management). Centraal is het verleggen van hardwarebeheer en -monitoring naar de OS laag in plaats van de zeer beperkte BIOS laag. Tekortkomingen van APM Met de Advanced Power Management (APM) faciliteit kan het energieverbruik van een systeem geregeld worden op basis van de systeemactiviteit. Het APM BIOS wordt geleverd door de systeemproducent of -verkoper en het is specifiek voor dat betreffende hardware platform. Een APM stuurprogramma in het besturingssysteem regelt vervolgens de toegang tot de APM Software Interface, die het besturen van vermogensniveau mogelijk maakt. Er zijn vier hoofdproblemen met APM te onderscheiden: ten eerste wordt het energiebeheer verricht door een BIOS (afhankelijk van producent) en het besturingssysteem heeft daar geen kennis van. De gebruiker die idle-time waarden instelt voor een harde schijf in het APM BIOS is hier een voorbeeld van. Dan zal het BIOS de harde schijf langzamer kunnen laten draaien zonder dat het besturingssysteem de noodzaak ziet of het goedkeurt. Ten tweede: de APM logica is ingebed in de BIOS, waardoor het buiten het besturingssysteem om opereert. Dit houdt in dat gebruikers problemen met hun APM BIOS alleen kunnen verhelpen door een nieuw BIOS in het ROM te flashen, wat een gevaarlijke en mogelijk onherstelbare operatie is. Ten derde is APM een producent-specifieke technologie, in de zin dat er altijd een hoge mate van duplicatie zal zijn van al dan niet geslaagde pogingen om het wiel opnieuw uit te vinden en uiteraard ook van bugs. Er is geen enkele garantie dat het wegnemen van een bug door een producent ook een zelfde bug wegneemt bij een concurrent. Tenslotte is het van belang te weten dat de APM BIOS in het algemeen gewoon te weing geheugen kon gebruiken om een ingewikkeld energiebeheer te kunnen implementeren. Laat staan dat deze goed aanpasbaar was aan veranderlijke doelstellingen voor de betreffende machine. Plug-n-play BIOS (PNPBIOS) was in veel situations onbetrouwbaar. PNPBIOS is 16-bit technologie, dus het besturingssysteem moet 16-bit emulatie gebruiken om met PNPBIOS methoden te kunnen samenwerken. Het &os; stuurprogramma APM is gedocumenteerd in &man.apm.4;. <acronym>ACPI</acronym> Instellen Het stuurprogramma acpi.ko wordt standaard geladen bij het opstarten door de &man.loader.8; en hoeft niet gecompileerd te worden. De redenatie is dat er met modules gemakkelijker gewerkt kan worden, bijvoorbeeld een andere acpi.ko gebruiken zonder dat er een nieuwe kernel gebouwd moet worden. Dit heeft het voordeel dat testen eenvoudiger is. Een andere reden is dat het opstarten van ACPI nadat een systeem eenmaal volledig opgestart is, weinig nuttig is en in sommige gevallen fataal kan zijn. In geval van tijfel kan ACPI beter uitgeschakeld worden. Dit stuurprogramma kan niet gestopt worden als het eenmaal geladen is, omdat de systeembus het gebruikt voor allerlei interacties met hardware. ACPI kan uitgezet worden met het hulpprogramma &man.acpiconf.8;. In feite kan de meeste interactie met het ACPI systeem gedaan worden via &man.acpiconf.8;. In wezen betekent dit dat als er iets over ACPI in &man.dmesg.8; staat, het hoogstwaarschijnlijk al draait. ACPI en APM kunnen niet samenleven en moeten afzonderlijk en exclusief gebruikt worden. De laatste die gestart wordt bepaalt of het stuurprogramma de ander wel of niet ziet. In haar eenvoudigste vorm kan ACPI gebruikt worden om het systeem in slaapmodus te zetten met de vlag en een 1-5 optie met &man.acpiconf.8;. De meeste gebruikers hebben alleen 1 nodig. De optie 5 verricht een soft-off, wat hetzelfde is als: &prompt.root; halt -p Andere opties zijn mogelijk. In &man.acpiconf.8; staat meer informatie. Nate Lawson Geschreven door Peter Schultz Met medewerking van Tom Rhodes &os; <acronym>ACPI</acronym> Gebruiken en Debuggen ACPI is een totaal nieuwe manier om apparaten te ontdekken, om energieverbruik te beheren en om een gestandaardiseerde toegang te bieden tot allerlei apparaten die eerder via het BIOS beheerd werden. Er wordt voortdurend vooruitgang geboekt om ACPI op alle systemen te laten werken, maar bugs in de ACPIMachine Language (AML) bytecode van sommige moederborden, onvolledigheden in &os;'s kernel subsystemen en bugs in de &intel; ACPI-CA interpreter blijven opduiken. Deze tekst is bedoeld om de &os; ACPI beheerders (maintainers) te helpen met het vinden van de hoofdoorzaken van problemen die voorkomen en met het debuggen en het vinden van een oplossing. Debuginformatie Aanleveren Voordat een probleem wordt aanmeld, moet het zeker zijn dat de laatste BIOS versie draait en indien beschikbaar de geïntregeerde controller firmware versie. Diegenen die meteen een probleem willen indienen, sturen de volgende informatie naar freebsd-acpi@FreeBSD.org: Omschrijving van het foutieve gedrag, inclusief systeemtype en model en alles wat de fout kan veroorzaken. Als het een nieuw fenomeen is, dan dient ook zo accuraat mogelijk aangegeven te worden wanneer de fout het eerst optrad. De &man.dmesg.8; uitvoer van boot -v, inclusief foutmeldingen die gegenereerd worden als de fout optreedt. De &man.dmesg.8; uitvoer van boot -v met ACPI uitgeschakeld, indien het uitzetten van ACPI het probleem oplost. Uitvoer van sysctl hw.acpi. Dit is tevens een goede manier om uit te vinden welke ACPI mogelijkheden een systeem heeft. Een URL waar de ACPISource Language (ASL) gevonden kan worden. De ASL dient niet rechtstreeks naar de lijst gezonden te worden, omdat deze nogal groot kan zijn. Een kopie van een ASL kan gemaakt worden met het volgende commando: &prompt.root; acpidump -t -d > name-system.asl (Vervang een aanmeldnaam door $NAME en producent/model door $SYSTEM. Bijvoorbeeld: njl-FooCo6000.asl) De meeste &os; programmeurs lezen de &a.current; mailinglijst, maar problemen gaan bij voorkeur ook naar &a.acpi.name; zodat ze zeker gezien worden. Het kan enige tijd duren voordat er antwoord komt, omdat deze mensen elders ook nog fulltime banen hebben. Als de bug niet meteen duidelijk is, komt er waarschijnlijk en verzoek om een PR in te dienen via &man.send-pr.1;. Als er een PR moet worden opgesteld, dan dient alle hierboven gevraagde informatie vermeld te worden. Dit helpt om het probleem te kunnen volgen en oplossen. Het sturen van een PR zonder eerst &a.acpi.name; te mailen is niet wenselijk, aangezien men PRs gebruikt als herinnering, niet als rapportagesysteem. Mogelijk is een probleem al eens door iemand anders aangemeld. Achtergrond ACPI is aanwezig op alle moderne computers die voldoen aan de ia32 (x86), ia64 (Itanium) of amd64 (AMD) architecturen. De volledige standaard heeft vele mogelijkheden zoals CPU prestatiebeheer, energiebeheer, thermische zones, diverse batterijsystemen, ingebedde controllers en busnummering. De meeste systemen implementeren minder dan de volledige standaard. Een desktopsysteem implementeert bijvoorbeeld meestal alleen busnummering, terwijl laptops mogelijk ook koeling- en batterijbeheer ondersteunen. Laptops hebben ook suspend en resume (slapen en wakker worden) met hun eigen aanverwante comlexiteit. Een ACPI-compliant systeem heeft verscheidene componenten. Het BIOS is de eerste en dan zijn er verscheidene tabellen in het geheugen zoals FADT die zaken als de APIC map (gebruikt voor SMP) specificeren, beschikbaar gesteld door verschillende producenten/verkopers. Daarnaast zijn er specifieke eenvoudige instellingen en instellingenregisters, ook allen specifiek voor de leverancier. Ook wordt er een tabel van bytecode (de Differentiated System Description Table DSDT) geleverd die een op een boomstructuur lijkende namespace biedt voor apparaten en apparaatobjectfuncties. Het stuurprogramma ACPI moet de voorgedefinieerde tabellen verwerken, een interpreter voor de bytecode implementeren en apparaatstuurprogramma's en de kernel aanpassen om alleen al informatie van het ACPI subsysteem te kunnen accepteren. &intel; heeft een interpreter beschikbaar gesteld (ACPI-CA) die door &os; en ook door &linux; en NetBSD gebruikt wordt. De ACPI-CA broncode staat in src/sys/contrib/dev/acpica. De lijmcode (glue code) die ACPI-CA laat werken met &os; staat in src/sys/dev/acpica/Osd. Stuurprogramma's die verscheidene ACPI apparaten implementeren staan in src/sys/dev/acpica. Algemene Problemen Wil ACPI goed werken, dan moeten alle onderdelen goed werken. Hieronder staan enkele algemene problemen in volgorde van hoe vaak ze optreden en enkele mogelijke oplossingen of manieren om de problemen te vermijden. + + Muisproblemen + + Soms doet een muis het niet bij het opstarten uit de + slaapstand. Een bekend lapmiddel is het toevoegen van + hint.psm.0.flags="0x3000" aan het bestand + /boot/loader.conf. Als dat niet werkt, + dan wordt aangeraden een bugrapport in te sturen, zoals + eerder is beschreven. + + Suspend/resume ACPI heeft drie slaapstanden waarbij het geheugen (RAM) wordt ingezet. Dit zijn de STR toestanden S1-S3,en nog een slaap-met-gebruik-van-harde-schijf toestand (STD) die S4 heet. S5 is zacht uit en is de normale status van een systeem als het is aangesloten maar niet is aangezet. S4 kan feitelijk op twee manieren geïmplementeerd worden: S4BIOS is een slaapstand naar schijf met behulp van het BIOS en S4OS wordt volledig door het besturingssysteem beheerd. als eerste dienen de sysctl items die iets met de slaapstand te maken hebben gecontroleerd te worden. Hieronder staan de resultaten voor een Thinkpad: hw.acpi.supported_sleep_state: S3 S4 S5 hw.acpi.s4bios: 0 Dit betekent dat hier acpiconf -s gebruikt kan worden om S3, S4 OS en S5 te testen. Als gelijk was aan (1), dan zou er S4BIOS ondersteuning zijn in plaats van S4 OS. Als suspend/resume getest moet worden, dient, indien ondersteund, bij S1 begonnen te worden. Deze toestand heeft de grootste kans om te werken, omdat deze niet veel stuurprogrammaondersteuning vereist. Niemand heeft nog S2 geïmplementeerd, maar het is ongeveer hetzelfde als S1. Daarna wordt S3 getest. Dit is het diepste STR niveau en heeft uitgebreide ondersteuning van stuurprogramma's nodig om hardware goed opnieuw te kunnen starten. Mochten er blokkades optreden, dan kan naar de &a.acpi.name; lijst gemaild worden. Er kan echter geen snelle oplossing verwacht worden, omdat er nog de nodige stuurprogramma's/hardware liggen om getest en bewerkt te worden. Om een probleem te kunnen isoleren helpt het om zoveel mogelijk stuurprogramma's uit de kernel te halen. Als dit werkt, kan er teruggewerkt worden naar de driver die schuldig is aan het falen. Meestal vertonen binaire stuurprogramma's als nvidia.ko, X11 beeldschermstuurprogramma's en USB de meeste problemen, terwijl bijvoorbeeld Ethernet interfaces meestal meteen goed werken. Als de stuurprogramma's zonder problemen geladen en verwijderd kunnen worden, dan is dit te automatiseren door de juiste commando's in /etc/rc.suspend en /etc/rc.resume te zetten. Er staat een voorbeeld (achter commentaartekens) voor het laden en verwijderen van een driver. Als het beeldscherm er na wakker worden vreemd uitziet, kan geprobeerd worden naar nul (0) te zetten. Met langere of kortere waarden voor kan bekeken worden of dat helpt. In geval van problemen is het ook een optie om een recente &linux; distibutie met ondersteuning voor ACPI support te starten en daarvan de suspend/resume ondersteuning op dezelfde hardware uit te proberen. Als het werkt met &linux;, dan is het waarschijnlijk een &os; stuurprogrammaprobleem en als het mogelijk is uit te vinden over welke driver het gaat, kan dat bijdragen aan het oplossen van het probleem. ACPI houdt zich in het algemeen niet bezig met andere stuurprogramma's bijvoorbeeld geluid, ATA, enzovoort. Als er dus een echt driverprobleem is, dan is waarchijnlijk uiteindelijk ook nodig naar de &a.current.name; lijst te posten en naar de beheerder van het stuurprogramma. Voor degenen met moed is het vooral aan te raden een paar &man.printf.3;s in problematische stukken van een stuurprogramma te plaatsen voor debugging om na te gaan waar de resumefunctie precies hangt. Tot slot kan geprobeerd worden om ACPI uit te zetten en in plaats daarvan APM aan te zetten. Als suspend/resume werkt met APM, is het wellicht verstandig het daarbij te houden, vooral met wat oudere apparatuur (voor 2000). Producenten hebben nogal wat tijd nodig gehad om ACPI ondersteuning goed te krijgen en voor oudere hardware is het waarschijnlijker dat er BIOS problemen zijn met ACPI. Systeem Hangt (tijdelijk of permanent) Meestal is het hangen van het systeem het gevolg van verloren interrupts of een interruptstorm. Chipsets kunnen een heleboel problemen hebben, afhankelijk van hoe het BIOS interrupts instelt voor het opstarten, of de APIC (MADT) tabel correct is en de routering van het System Control Interrupt (SCI). interrupt storms Interruptstorms kunnen onderscheiden worden van verloren geraakte interrupts door de uitvoer van vmstat -i te controleren en de regel met acpi0 goed te lezen. Als de teller in toenemende mate hoger staat dan enkele per seconde, dan is sprake van een interruptstorm. Als het systeem lijkt te hangen, is het wellicht nog mogelijk door te dringen tot de DDB (CTRL ALTESC) show interrupts uit te voeren. - ACPI + APIC - disabling + uitschakelen De beste hoop in geval van interruptproblemen is om APIC ondersteuning uit te zetten met hint.apic.0.disabled="1" in loader.conf. Panics Panics zijn relatief zeldzaam met ACPI en krijgen de hoogste prioriteit bij het oplossen. Eerst moeten de verschillende gebeurtenissen waarmee de panic (als mogelijk) te reproduceren is geïsoleerd worden en moet een backtrace gemaakt worden. options DDB dient aangezet te worden en er dient een een seriële console () of een &man.dump.8; partitie te komen.. In DDB is een backtrace te maken met tr. Als de backtrace handmatig opgeschreven moet worden, is het belangrijk dat in ieder geval de bovenste en onderste vijf (5) regels van de backtrace genoteerd worden. Daarna dient getracht te worden het systeem te starten zonder ACPI. Als dat werkt, is het ACPI subsysteem geïsoleerd en kunnen de verschillende waarden uitgeprobeerd worden. In &man.acpi.4; staan enkele voorbeelden. Systeem Slaat Aan na Slaapstand of Stop hw.acpi.disable_on_poweroff="0" kan uitgezet worden in &man.loader.conf.5;. Hierdoor schakelt ACPI bepaalde gebeurtenissen tijdens het afsluitproces niet uit. Om dezelfde redenen moeten sommige systemen deze waarde altijd op 1 (standaard) hebben staan. In het algemeen lost dit een probleem op waarbij een systeem spontaan weer opkomt nadat het in slaapstand is gezet of geheel gestopt is. Overige Problemen Als er nog andere problemen zijn met ACPI (met een docking station of apparaten niet gedetecteerd, enzovoort), dan kan een mail met beschijving naar de mailinglijst gezonden worden. Sommige zaken kunnen echter gerelateerd zijn aan delen van het ACPI subsysteem die nog niet af zijn, dus het kan in sommige gevallen een tijd duren. Gebruikers moeten soms geduld hebben en de bereidheid om eventuele patches uit te proberen. <acronym>ASL</acronym>, <command>acpidump</command> en <acronym>IASL</acronym> ACPI ASL Het grootste probleem is dat BIOS producenten vaak incorrecte (of gewoon foutieve) bytecode leveren. Dit blijkt doorgaans uit kernelboodschappen als: ACPI-1287: *** Error: Method execution failed [\\_SB_.PCI0.LPC0.FIGD._STA] \\ (Node 0xc3f6d160), AE_NOT_FOUND Vaak kunnen dergelijke problemen geoplost worden door de BIOS bij te werken tot de laatste revisie. De meeste consoleberichten zijn onschuldig, maar als er andere problemen zijn, zoals batterijstatus die niet werkt, dan ligt het voor de hand te zoeken naar problemen in de AML code. De bytecode die AML genoemd wordt, wordt gecompileerd van een broncodetaal ASL. Deze staat weer in een tabel DSDT. Met &man.acpidump.8; kan een kopie van de ASL gemaakt worden. Dan moeten zowel de opties (laat inhoud van vaste tabellen zien) als (disassembleer AML naar ASL) gebruikt worden. In Debuginformatie Aanleveren staat een voorbeeld. De eenvoudigste eerste controle is de ASL code opnieuw compileren en kijken of er foutmeldingen optreden. Waarschuwingen kunnen doorgaans genegeerd worden, maar fouten zijn bugs die er meestal toe leiden dat ACPI niet correct werkt. Om ASL te hercompileren: &prompt.root; iasl eigen.asl <acronym>ASL</acronym> Repareren ACPI ASL Op langere termijn is het de bedoeling dat voor vrijwel elke machine ACPI werkt zonder enig ingrijpen van de gebruiker. Op dit moment wordt er echter nog gewerkt aan oplossingen voor veel voorkomende vergissingen die BIOS producenten maken. De µsoft; interpreter (acpi.sys en acpiec.sys) controleert niet strikt of het BIOS volledig aan de standaard voldoet, waardoor het voorkomt dat BIOS makers die alleen testen onder &windows; bepaalde fouten in hun ASL nooit correct repareren. &os; hoopt door te gaan met de identificatie en documentatie van welk niet-standaard gedrag precies wordt toegelaten door µsoft;'s interpreter en te dit te repliceren zodat &os; kan werken zonder dat gebruikers zich gedwongen zien om de ASL te repareren. Als een tijdelijke oplossing en om te helpen met het in kaart brengen van bepaald gedrag, kan de ASL handmatig gerepareerd worden. Mocht dit lukken, dan wordt erop aangedrongen een &man.diff.1; van de oude en de nieuwe ASL te mailen, zodat het foutieve gedrag mogelijk in ACPI-CA kan worden verwerkt, waardoor andere gebruikers niet meer handmatig met hun ASL aan de gang hoeven. ACPI error messages Hieronder staat een lijst algemene foutmeldingen, hun oorzaken en hoe ze op te lossen: _OS afhankelijkheden Sommige AMLs gaan ervan uit dat de wereld enkel bestaat uit &windows; versies. &os; kan zich voordoen als elk OS om te kijken of dit problemen oplost. Een gemakkelijke manier om dit te doen is hw.acpi.osname="Windows 2001" in te stellen in /boot/loader.conf of andere gelijksoortige strings die in een ASL staan. Ontbrekende Return Opdrachten Sommige methoden hebben geen specifieke returnwaarde, zoals wel vereist wordt door de standaard. Hoewel ACPI-CA hier niets mee doet, heeft &os; de mogelijkheid tot impliciete returns. Er kunnen ook expliciet return opdrachten toegevoegd worden waar vereist, als het bekend is welke waarden teruggevoerd moeten worden. Om iasl te dwingen tot compilatie van ASL kan de schakeloptie gebruikt worden. De Standaard <acronym>AML</acronym> Aanpassen Nadat eigen.asl aangepast is, kan deze als volgt gecompileerd wordent: &prompt.root; iasl eigen.asl Met de optie is af te dwingen dat de AML gemaakt wordt, zelfs als er compileerfouten optreden. Sommige fouten (zoals ontbrekende return opdrachten) worden automatisch opgelost door de interpreter. DSDT.aml is de standaardnaam voor het bestand dat door iasl wordt geproduceerd. Dit is in plaats van de foutieve versie uit het BIOS (die nog steeds aanwezig is in het flashgeneugen) te laden door /boot/loader.conf als volgt te wijzigen: acpi_dsdt_load="YES" acpi_dsdt_name="/boot/DSDT.aml" DSDT.aml moet in de map /boot staan. Debuguitvoer van <acronym>ACPI</acronym> Verkrijgen ACPI - problems + problemen ACPI - debugging + debuggen Het stuurprogramma ACPI heeft een zeer flexibele debugfaciliteit. Er kan zowel een set van subsystemen aangegeven worden als het niveau van uitvoerigheid. De te debuggen subsystemen worden aangegeven als lagen (layers) en zijn opgedeeld in ACPI-CA componenten (ACPI_ALL_COMPONENTS) en ACPI hardware ondersteuning (ACPI_ALL_DRIVERS). De uitvoerigheid van debuguitvoer wordt aangegeven als het niveau (level) en gaat van CPI_LV_ERROR (alleen fouten rapporteren) tot ACPI_LV_VERBOSE (alles). Het niveau is een bitmasker en dus kunnen er meerdere opties tegelijk ingeschakeld worden (gescheiden door spaties). In de praktijk wordt wellicht een seriële console gebruikt om de uitvoer te loggen als deze zo omvangrijk is dat de console berichtbuffer vol loopt (misschien wel meerdere keren). Een complete lijst van de individuele lagen en niveaus staat in &man.acpi.4;. Debuguitvoer staat staandaard niet aan. Door options ACPI_DEBUG toe te voegen aan het bestand met kernelinstellingen als ACPI als de kernel is gebouwd, wordt het ingeschakeld. Door ACPI_DEBUG=1 toe te voegen aan /etc/make.conf wordt het systeembreed ingeschakeld. Als ACPI als module wordt gebruikt (de normale situatie), dan hoeft slechts de acpi.ko module opnieuw gecompileerd te worden: &prompt.root; cd /sys/modules/acpi/acpi && make clean && make ACPI_DEBUG=1 acpi.ko moet in /boot/kernel komen te staan en de gewenste debuglaag en het gewenste niveau van uitvoerigheid dienen toegevoegd te worden aan loader.conf. Hieronder een voorbeeld waarmee debuguitvoer wordt aangezet voor alle ACPI-CA componenten en alle ACPI hardware stuurprogramma's (CPU, LID, enzovoort. Het niveau van uitvoerigheid is het laagst mogelijke. Er worden alleen fouten gemeld. debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS" debug.acpi.level="ACPI_LV_ERROR" Als de gezochte informatie wordt veroorzaakt door een specifieke gebeurtenis (bijvoorbeeld in en uit slaapstand gaan), dan kunnen wijzigingen aan loader.conf achterwege blijven en in plaats daarvan kan sysctl gebruikt worden om laag en niveau in te stellen na het opstarten en zo het systeem voor te bereiden op die specifieke gebeurtenis. De sysctls hebben dezelfde namen als de parameters in loader.conf. Verwijzingen Meer informatie over ACPI staat op de volgende locaties: De &a.acpi; De ACPI mailinglijst archieven De oude ACPI mailinglijst archieven De ACPI 2.0 specificatie &os; Handleidingen: &man.acpi.4;, &man.acpi.thermal.4;, &man.acpidump.8;, &man.iasl.8;, &man.acpidb.8; DSDT debugging informatie. (Gebruikt Compaq als voorbeeld, maar van algemeen nut). diff --git a/nl_NL.ISO8859-1/books/handbook/desktop/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/desktop/chapter.sgml index 52187fc21e..d22e7e7203 100644 --- a/nl_NL.ISO8859-1/books/handbook/desktop/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/desktop/chapter.sgml @@ -1,1424 +1,1424 @@ Chrisptophe Juliet Bijgedragen door René Ladan Vertaald door Bureaubladapplicaties Overzicht &os; kan een groot aantal bureaubladapplicaties draaien, zoals browsers en tekstverwerkers. De meeste hiervan zijn beschikbaar als packages of kunnen automatisch vanuit de Portscollectie gebouwd worden. Veel nieuwe gebruikers verwachten dit soort applicaties op hun bureaublad. Dit hoofdstuk laat zien hoe populaire bureaubladapplicaties moeiteloos geïnstalleerd kunnen worden vanuit een package of vanuit de Portscollectie. Als programma's vanuit ports geïnstalleerd worden, wordt hun broncode gecompileerd. Dit kan erg lang duren, afhankelijk van wat er gecompileerd wordt en de rekenkracht van een machine. Als compileren vanuit broncode te veel tijd kost, kunnen de meeste programma's van de Portscollectie als een voorafgebouwd package geïnstalleerd worden. Omdat &os; compatibel is met &linux;, zijn veel applicaties die voor &linux; zijn ontwikkeld beschikbaar een &os; bureaublad. Het wordt sterk aanbevolen om te lezen voordat &linux; applicaties geïnstalleerd worden. Veel ports die gebruik maken van &linux; compatibiliteit beginnen met linux-. Dit is handig om te onthouden wanneer er naar een port gezocht wordt met bijvoorbeeld &man.whereis.1;. In dit hoofdstuk wordt aangenomen dat &linux; binaire compatibiliteit is ingeschakeld voordat &linux; applicaties worden geïnstalleerd. In dit hoofdstuk worden de volgende categoriën behandeld: Browsers (zoals Mozilla, &netscape;, Opera, Firefox, Konqueror) Productiviteit (zoals KOffice, AbiWord, The GIMP, OpenOffice.org) Documentviewers (zoals &acrobat.reader;, gv, Xpdf, GQview) Financieel (zoals GnuCash, Gnumeric, Abacus) Er wordt aangenomen dat de lezer van dit hoofdstuk: Weet hoe aanvullende software van derde partijen geïnstalleerd wordt (). Weet hoe aanvullende &linux; software geïnstalleerd wordt (). Meer informatie over een multimedia-omgeving staat in . Installatie van e-mail staat beschreven in . Browsers browsers web &os; wordt zonder een voor-geïnstalleerde browser geleverd. In plaats hiervan bevat de www map van de Portscollectie browsers om te installeren. Het is ook mogelijk voor de meeste ports een package te installeren als compileren niet gewenst is. Compileren kan soms lang duren. KDE en GNOME bevatten reeds HTML-browsers. In staat meer informatie over de installatie van deze complete bureaubladen. Lichtgewicht browsers uit de Portscollectie zijn onder andere www/dillo, www/links of www/w3m. Dit gedeelte behandelt deze applicaties: Applicatie Bronnen Ports Afhankelijkheden Mozilla veel zwaar Gtk+ &netscape; veel licht &linux; binaire compatibiliteit Opera weinig licht &os; en &linux; versies beschikbaar. De &linux; versie is afhankelijk van de &linux; binaire compatibiliteit en linux-openmotif. Firefox gemiddeld zwaar Gtk+ Konqueror gemiddeld zwaar KDE bibliotheken Mozilla Mozilla Mozilla is misschien wel de meest geschikte browser voor &os;. De browser is modern, stabiel en volledig geschikt naar &os;. De HTML-weergave engine voldoet in grote mate aan de standaarden. Er worden een mail- en nieuwslezer bijleverd en het pakket bevat zelfs een HTML-bewerker voor het maken van webpagina's. Mozilla heeft dezelfde broncodebasis met &netscape; Communicator. Op langzame machines, met een CPU-snelheid van 233MHz of minder dan 64MB aan RAM, kan Mozilla te veeleisend zijn om volledig bruikbaar te zijn. In dat geval is Opera browser een mogelijke vervanger. Als het niet wenselijk of mogelijk is om Mozilla te compileren, dan is dit al door het &os; GNOME team gedaan. Het package kan geïnstalleerd worden met: &prompt.root; pkg_add -r mozilla Als het package niet beschikbaar is en er genoeg tijd en schijfruimte schikbaar zijn, kan de broncode van Mozilla gedownload, gecompileerd en geïnstalleerd worden. Dit gaat met: &prompt.root; cd /usr/ports/www/mozilla &prompt.root; make install clean De Mozilla port zorgt voor een correcte installatie door de chrome registry setup met root rechten te draaien. Als echter ook toevoegingen zoals muisgebaren geïnstalleerd moeten worden, dan moet Mozilla als root gedraaid worden om dat op de juiste wijze geïnstalleerd te krijgen. Als de installatie van Mozilla eenmaal voltooid is, is root zijn niet langer nodig. Mozilla kan als browser gestart worden met: &prompt.user; mozilla Het kan direct als mailprogramma of nieuwslezer gestart worden met: &prompt.user; mozilla -mail Tom Rhodes Bijgedragen door Mozilla, &java;, en ¯omedia; &flash; Mozilla installeren is eenvoudig, maar helaas neemt Mozilla installeren met ondersteuning voor add-ons zoals &java; en ¯omedia; &flash; zowel tijd als schijfruimte in beslag. Als eerste moeten de bestanden gedownload worden die gebruikt worden met Mozilla. Op kan een account aangemaakt worden. De gebruikersnaam en het wachtwoord moeten bewaard worden omdat ze in de toekomst nog nodig kunnen zijn. Daarna dient j2sdk-1_3_1-src.tar.gz gedownload te worden en in /usr/ports/distfiles/ geplaatst te worden, omdat de port het bestand niet automatisch kan ophalen. Dit komt door licentiebeperkingen. Ook kan meteen de java environment kan vanaf gedownload worden. De bestandsnaam is j2sdk-1_3_1_08-linux-i586.bin en is rond 25 megabyte groot. Ook dit bestand dient in /usr/ports/distfiles/ te worden geplaatst. Tenslotte dient de java patchkit van gedownload te worden en in /usr/ports/distfiles/ gezet te worden. Installeer de java/jdk13 port met make install clean en installeer vervolgens de www/flashpluginwrapper port. Deze is afhankelijk van emulators/linux_base wat een grote port is. Er bestaan andere &flash; plug-ins, maar die werken niet op het moment van schrijven. Installeer de www/mozilla port als Mozilla niet al is geïnstalleerd. Kopieer de &flash; plug-in met: &prompt.root; cp /usr/local/lib/flash/libflashplayer.so \ /usr/X11R6/lib/browser_plugins/libflashplayer_linux.so &prompt.root; cp /usr/local/lib/flash/ShockwaveFlash.class \ /usr/X11R6/lib/browser_plugins/ Voeg de volgende regels bovenin (meteen onder #!/bin/sh) aan het opstartscript van Mozilla /usr/X11R6/bin/mozilla toe: LD_PRELOAD=/usr/local/lib/libflashplayer.so.1 export LD_PRELOAD Mozilla kan gestart worden met: &prompt.user; mozilla & Ga naar de About Plug-ins optie van het Help menu. Er verschijnt een lijst met alle beschikbare plugins. &java; en &shockwave; &flash; horen beiden in de lijst te staan. &netscape; &netscape; De Portscollectie bevat verschillende versies van de &netscape; browser. Omdat in de &os; versie een serieuze veiligheidsfout zit, wordt installatie sterk afgeraden ten faveure van een meer recente &linux; of DIGITAL UNIX versie. De laatste stabiele uitgave van de &netscape; browser is &netscape; 7. Deze kan geïnstalleerd worden vanaf de Portscollectie: &prompt.root; cd /usr/ports/www/netscape7 &prompt.root; make install clean Er zijn ook versies in de Franse, Duitse en Japanse categoriën. &netscape; 4.x versies worden niet aangeraden omdat ze niet voldoen aan de hedendaagse standaarden. &netscape; 7.x en nieuwere versies zijn echter alleen beschikbaar voor het &i386; platform. Opera Opera Opera is een zeer snelle, complete browser en voldoet aan standaarden. Hij komt in twee smaken: een &os; versie en een versie die draait onder &linux; emulatie. Voor elk besturingssysteem is er een gratis versie van de browser (adware) en een reclameloze versie die gekocht kan worden op de Opera website. De &os; package versie van Opera wordt zo geïnstalleerd: &prompt.root; pkg_add -r opera Sommige FTP-sites hebben niet alle packages, maar hetzelfde resultaat kan worden behaald met de Portscollectie door te typen: &prompt.root; cd /usr/ports/www/opera &prompt.root; make install clean De &linux; versie van Opera kan geïnstlleerd worden door bij de bovenstaande voorbeelden linux-opera te gebruiken in plaats van opera. De &linux; versie is nuttig in situaties waarin plugins nodig zijn die alleen voor &linux; beschikbaar zijn, zoals Adobe &acrobat.reader;. In alle andere opzichten lijken de &os; en &linux; versies identiek. Firefox Firefox Firefox is de browser voor de volgende generatie, gebaseerd op de codebase van Mozilla. Mozilla is een volledig pakket van applicaties, zoals een browser, een mailclient, een chatclient en nog veel meer. Firefox is gewoon een browser wat het kleiner en sneller maakt. Het package is te installeren met: &prompt.root; pkg_add -r firefox Via de Portscollectie kan ook de broncode gecompileerd worden: &prompt.root; cd /usr/ports/www/firefox &prompt.root; make install clean Konqueror Konqueror Konqueror is deel van KDE, maar kan ook buiten KDE gebruikt worden door x11/kdebase3 te installeren. Konqueror is meer dan een browser. Het is ook een bestandsbeheerder en multimedia-viewer. Konqueror wordt ook met een verzameling plugins geleverd, beschikbaar in misc/konq-plugins. Konqueror ondersteunt ook &flash;. Daarover is meer informatie beschikbaar op . Productiviteit Als het op productiviteit aankomt, zoeken nieuwe gebruikers vaak een goed kantoorpakket of een vriendelijke tekstverwerker. Hoewel sommige bureaubladomgevingen zoals KDE reeds een kantoorpakket verschaffen, is er geen standaardapplicatie. &os; verschaft alles wat nodig is, ongeacht de bureaubladomgeving. In dit gedeelte worden de onderstaande applicaties beschreven: Applicatie Bronnen Ports Afhankelijkheden KOffice weinig zwaar KDE AbiWord weinig licht Gtk+ of GNOME The GIMP weinig licht Gtk+ OpenOffice.org veel erg zwaar GCC 3.1, &jdk; 1.3, Mozilla KOffice KOffice kantoorpakket KOffice De KDE-gemeenschap heeft zijn bureaubladomgeving met een kantoorpakket geleverd dat buiten KDE gebruikt kan worden. Het bevat de vier standaardcomponenten uit andere kantoorpakketten. KWord is de tekstverwerker, KSpread is het spreadsheetprogramma, KPresenter beheert diapresentaties en Kontour voorziet in grafische mogelijkheden. Voordat de nieuwste KOffice wordt geïnstalleert, moet er een recente versie van KDE geïnstalleerd zijn. KOffice als package installeren gaat met het volgende commando: &prompt.root; pkg_add -r koffice Als het package niet beschikbaar is, kan de Portscollectie gebruiken worden. Om KOffice voor KDE3 te installeren: &prompt.root; cd /usr/ports/editors/koffice-kde3 &prompt.root; make install clean AbiWord AbiWord AbiWord is een vrij tekstverwerkingsprogramma, ongeveer gelijk aandoet als µsoft; Word. Het is geschikt - om verslagen, brieven, rapporten, memo's, enz. mee te typen. - Het is erg snel, bevat veel mogelijkheden en is erg + om verslagen, brieven, rapporten, memo's, enzovoort mee te + typen. Het programma is snel, bevat veel mogelijkheden en is gebruikersvriendelijk. AbiWord kan veel bestandsformaten importeren en exporteren, waaronder enkele gesloten formaten, zoals µsoft; .doc. AbiWord is beschikbaar als package en te installeren met: - &prompt.root; pkg_add -r AbiWord2 + &prompt.root; pkg_add -r abiword Als het package niet beschikbaar is, kan het worden gecompileerd vanuit de Portscollectie. De Portscollectie is meer recent. Dat kan als volgt: - &prompt.root; cd /usr/ports/editors/AbiWord2 + &prompt.root; cd /usr/ports/editors/abiword &prompt.root; make install clean The GIMP The GIMP Voor het bewerken of retoucheren van afbeeldingen is The GIMP een zeer geavanceerd afbeeldingenmanipulatieprogramma. Het kan als eenvoudig tekenprogramma worden gebruikt of als kwalititeitspakket voor het retoucheren van foto's. Het ondersteunt een groot aantal plugins en bevat een scripting interface. The GIMP kan een groot aantal bestandsformaten lezen en schrijven. Het ondersteunt interfaces met scanners en tabletten. Het pakket is te installeren als package met: &prompt.root; pkg_add -r gimp Als een FTP-site dit package niet heeft, kan de Portscollectie gebruikt worden. De graphics map van de Portscollectie bevat ook The GIMP Manual. Die kan zo geïnstalleerd worden: &prompt.root; cd /usr/ports/graphics/gimp &prompt.root; make install clean &prompt.root; cd /usr/ports/graphics/gimp-manual-pdf &prompt.root; make install clean De graphics map van de Portscollectie bevat de ontwikkelversie van The GIMP in graphics/gimp-devel. Een HTML versie van The GIMP Manual staan in graphics/gimp-manual-html. OpenOffice.org OpenOffice.org kantoorpakket OpenOffice.org OpenOffice.org bevat alle noodzakelijke applicaties in een compleet kantoorproductiviteitspakket: een tekstverwerker, een spreadsheet, een presentatiebeheerder en een tekenprogramma. De gebruikersinterface is vrijwel gelijk aan die van andere kantoorpakketten en het kan veel populaire bestandsformaten in- en uitvoeren. Het is beschikbaar in een aantal verschillende talen met interfaces, spellingcontrole en woordenboeken. De tekstverwerker van OpenOffice.org gebruikt een eigen XML-bestandsformaat voor overdraagbaarheid en flexibiliteit. Het spreadsheetprogramma bevat een macrotaal en kan gekoppeld worden aan externe databases. OpenOffice.org is stabiel en draait zonder aanpassingen op &windows;, &solaris;, &linux;, &os; en &macos; X. Meer informatie over OpenOffice.org staat op de OpenOffice website. Voor specifieke &os; informatie en om direct packages te downloaden is er de website van het &os; OpenOffice Porting Team. Om OpenOffice.org te installeren: &prompt.root; pkg_add -r openoffice Als het package geïnstalleerd is, moet het installatieprogramma gedraaid worden en gekozen worden voor . Dit programma dient uitgevoerd te worden door de gebruiker die OpenOffice.org gaat gebruiken: &prompt.user; openoffice-setup Als de OpenOffice.org packages niet beschikbaar zijn, kan het uit de ports gecompileerd worden. Hiervoer is veel schijfruimte en tijd nodig: &prompt.root; cd /usr/ports/editors/openoffice-1.1 &prompt.root; make install clean Als de installatie klaar is, moet het installatieprogramma gedraaid worden en gekozen worden voor . Dit programma dient uitgevoerd te worden door de gebruiker die OpenOffice.org gaat gebruiken: &prompt.user; cd /usr/ports/editors/openoffice-1.1 &prompt.user; make install-user Vertaalde versies zijn als de onderstaande ports beschikbaar: Taal Port Catalaans editors/openoffice-1.1-ca Tsjechisch editors/openoffice-1.1-cs Deens editors/openoffice-1.1-dk Grieks editors/openoffice-1.1-gr Spaans editors/openoffice-1.1-es Estlands editors/openoffice-1.1-et Fins editors/openoffice-1.1-fi Italiaans editors/openoffice-1.1-it Nederlands editors/openoffice-1.1-nl Zweeds editors/openoffice-1.1-se Slowaaks editors/openoffice-1.1-sk Sloveens editors/openoffice-1.1-sl_SI Turks editors/openoffice-1.1-tr Arabisch arabic/openoffice-1.1 Chinees (Vereenvoudigd) chinese/openoffice-1.1-zh_CN Chinees (Traditioneel) chinese/openoffice-1.1-zh_TW Frans french/openoffice-1.1 Duits german/openoffice-1.1 Hongaars hungarian/openoffice-1.1 Japans japanese/openoffice-1.1 Koreaans korean/openoffice-1.1 Pools polish/openoffice-1.1 Portugees (Braziliaans) portuguese/openoffice-1.1-pt_BR Portugees portuguese/openoffice-1.1-pt_PT Russisch russian/openoffice-1.1 Documentviewers Het kan zijn dat de standaardviewers voor een aantal populaire bestandsformaten niet in het basissysteem zitten. In dit gedeelte wordt aangegeven hoe die geïnstalleerd kunnen worden. Dit gedeelte behandelt de onderstaande applicaties: Applicatie Bronnen Ports Afhankelijkheden &acrobat.reader; weinig licht &linux; binaire compatibiliteit gv weinig licht Xaw3d Xpdf weinig licht FreeType GQview weinig licht Gtk+ of GNOME &acrobat.reader; &acrobat.reader; PDF bekijken Documenten worden vaak als PDF-bestanden, Portable Document Format, verspreid. Een van de aanbevolen viewers voor dit bestandstype is &acrobat.reader; dat Adobe voor &linux; heeft uitgegeven. Omdat &os; &linux; binaries kan draaien, is het ook beschikbaar voor &os;. Het &acrobat.reader; 5 package wordt geïnstalleerd met: &prompt.root; pkg_add -r acroread Zoals gewoonlijk kan ook de Portscollectie gebruikt worden als het package niet beschikbaar is: &prompt.root; cd /usr/ports/print/acroread5 &prompt.root; make install clean gv gv PDF bekijken &postscript; bekijken gv is een &postscript; en PDF viewer. Het is gebaseerd op ghostview maar heeft een vriendelijker uiterlijk dankzij de Xaw3d bibliotheek. Het is snel en heeft mogelijkheden als oriëntatie, papiergrootte, schalen en anti-aliassen. Bijna elke bewerking kan met het toetsenbord of de muis worden gedaan. gv is als package te installeren: &prompt.root; pkg_add -r gv Of uit de Portscollectie: &prompt.root; cd /usr/ports/print/gv &prompt.root; make install clean Xpdf Xpdf PDF bekijken Xpdf een efficiënte lichtgewicht PDF-viewer voor &os;. Het heeft erg weinig bronnen nodig en is zeer stabiel. Het gebruikt de standaard X-fonts en is niet afhankelijk van &motif; of andere X-toolkits. Xpdf is als package te installeren: &prompt.root; pkg_add -r xpdf Of uit de Portscollectie: &prompt.root; cd /usr/ports/graphics/xpdf &prompt.root; make install clean Als de installatie voltooid is, kan Xpdf gestart worden en het menu kan met de rechtermuisknop geactiveerd worden. GQview GQview GQview is een afbeeldingenbeheerder. Een bestand kan met één klik bekeken worden, er kan een externe editor opgestart worden er kunnen thumbnail-voorbeelden gemaakt worden en nog veel meer. Het bevat ook een diapresentatie-modus en enkele standaard bestandsoperaties. Er kunnen afbeeldingsverzamelingen beheerd worden en eenvoudig duplicaten gevonden worden. GQview kan het complete scherm gebruiken en ondersteunt meerdere talen. GQview is als package te installeren: &prompt.root; pkg_add -r gqview Of vanuit de Portscollectie: &prompt.root; cd /usr/ports/graphics/gqview &prompt.root; make install clean Financiën Om financiën via het &os; bureaublad te beheren zijn er krachtige en gemakkelijk te gebruiken applicaties om te installeren. Sommige zijn compatibel met wijdverbreide bestandsformaten zoals Quicken of Excel documenten. Dit gedeelte behandelt deze applicaties: Applicatie Bronnen Ports Afhankelijkheden GnuCash weinig zwaar GNOME Gnumeric weinig zwaar GNOME Abacus weinig licht Tcl/Tk GnuCash GnuCash GnuCash is onderdeel van GNOME dat gebruikersvriendelijke en krachtige applicaties aan eindgebruikers wil leveren. Met GnuCash kunnen inkomsten en uitgaven, bankrekeningen en voorraden bijgehouden worden. Het bevat een intuïtieve interface terwijl het erg professioneel blijft. GnuCash levert een slim kasboek, een hiërarchisch systeem van rekeningen, veel toetsenbordversnellers en auto-invul mogelijkheden. Het een transactie splitsen in meer gedetailleerde stukken. GnuCash kan Quicken QIF-bestanden invoeren en samenvoegen. Het kan ook met de meeste internationale datum- en valutaformaten omgaan. GnuCash is als package te installeren: &prompt.root; pkg_add -r gnucash Of uit de Portscollectie: &prompt.root; cd /usr/ports/finance/gnucash &prompt.root; make install clean Gnumeric Gnumeric spreadsheet Gnumeric Gnumeric is een spreadsheet uit de GNOME bureaubladomgeving. Het maakt gebruikt van auto-invullen afhankelijk van het celformaat. Het kan bestanden in een aantal populaire formaten zoals Excel, Lotus 1-2-3 en Quattro Pro inlezen. Gnumeric ondersteunt grafieken door middel van het grafiekprogramma math/guppi. Het heeft een groot aantal ingebouwde functies en kent gebruikelijke celformaten als nummer, valuta, datum, tijd en veel meer. Gnumeric is als package te installeren: &prompt.root; pkg_add -r gnumeric Of uit de Portscollectie: &prompt.root; cd /usr/ports/math/gnumeric &prompt.root; make install clean Abacus Abacus spreadsheet Abacus Abacus is een kleine en gemakkelijk te gebruiken spreadsheet en bevat veel ingebouwde functies die nuttig zijn in verschillende domeinen zoals statistiek, financiën, en wiskunde. Het kan Excelbestanden lezen en schrijven. Abacus kan &postscript; uitvoer produceren. Abacus is als package te installeren: &prompt.root; pkg_add -r abacus Of uit de Portscollectie: &prompt.root; cd /usr/ports/deskutils/abacus &prompt.root; make install clean Samenvatting Hoewel &os; populair is bij ISP's om zijn prestaties en stabiliteit, is het behoorlijk klaar voor dagelijks gebruik als een bureaublad. Met enkele duizenden applicaties als packages of ports, is een perfect bureaublad te bouwen dat aan alle noden voldoet. Als een bureaublad is geïnstalleerd is het mogelijk een stap verder te gaan met misc/instant-workstation. Met deze meta-port kan een verzameling ports gebouwd worden die aangepast kan worden door /usr/ports/misc/instant-workstation/Makefile te bewerken en de gebruikte syntaxis voor de standaardverzameling om ports toe te voegen of te verwijderen te gebruiken. Het bouwen gaat volgens de gebruikelijke procedure. Uiteindelijk is het zo mogelijk één groot package te creëren voldoet aan de persoonlijke eisen van een gebruiker dat te installeren is op alle gebruikte werkstations! Nu volgt nog een overzicht van alle bureaubladapplicaties die in dit hoofdstuk zijn behandeld: Applicatie Package Port Mozilla mozilla www/mozilla &netscape; linux-netscape7 www/netscape7 Opera linux-opera www/linux-opera Firefox firefox www/firefox KOffice koffice-kde3 editors/koffice-kde3 AbiWord - AbiWord2 + abiword - editors/AbiWord2 + editors/abiword The GIMP gimp graphics/gimp OpenOffice.org openoffice editors/openoffice-1.1 &acrobat.reader; acroread5 print/acroread5 gv gv print/gv Xpdf xpdf graphics/xpdf GQview gqview graphics/gqview GnuCash gnucash finance/gnucash Gnumeric gnumeric math/gnumeric Abacus abacus deskutils/abacus diff --git a/nl_NL.ISO8859-1/books/handbook/mirrors/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/mirrors/chapter.sgml index 2f130e34c6..b5e88f0bf9 100644 --- a/nl_NL.ISO8859-1/books/handbook/mirrors/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/mirrors/chapter.sgml @@ -1,3080 +1,3108 @@ &os; Verkrijgen CDROM en DVD Uitgevers Winkelproducten in Doos &os; is beschikbaar in een doos (&os; CD's, additionele software en gedrukte documentatie) bij verschillende verkopers:
CompUSA WWW:
Frys Electronics WWW:
CD's en DVD's &os; CD's en DVD's zijn te koop bij veel online winkels:
Daemon News Mall PO Box 161 Nauvoo, IL 62354 Verenigde Staten Telefoon: +1 866 273-6255 Fax: +1 217 453-9956 E–mail: sales@bsdmall.com WWW:
BSD-Systems E–mail: info@bsd-systems.co.uk WWW:
fastdiscs.com 6 Eltham Close Leeds, LS6 2TY Verenigd Koninkrijk Telefoon: +44 870 1995 171 E–mail: sales@fastdiscs.com WWW:
&os; Mall, Inc. 3623 Sanford Street Concord, CA 94520-1405 Verenigde Staten Telefoon: +1 925 674-0783 Fax: +1 925 674-0821 E–mail: info@freebsdmall.com WWW:
&os; Services Ltd 11 Lapwing Close Bicester OX26 6XR Verenigd Koninkrijk WWW:
Hinner EDV St. Augustinus-Str. 10 D-81825 München Duitsland Telefoon: (089) 428 419 WWW:
Ikarios 22-24 rue Voltaire 92000 Nanterre Frankrijk WWW:
JMC Software Ierland Telefoon: 353 1 6291282 WWW:
The Linux Emporium Hilliard House, Lester Way Wallingford OX10 9TA Verenigd Koninkrijk Telefoon: +44 1491 837010 Fax: +44 1491 837016 WWW:
Linux System Labs Australia 21 Ray Drive Balwyn North VIC - 3104 Australië Telefoon: +61 3 9857 5918 Fax: +61 3 9857 8974 WWW:
LinuxCenter.Ru Galernaya Street, 55 Saint-Petersburg 190000 Rusland Telefoon: +7-812-3125208 E–mail: info@linuxcenter.ru WWW:
UNIXDVD.COM LTD 57 Primrose Avenue Sheffield S5 6FS Verenigs Koninkrijk WWW:
Distributeurs Wederverkopers die &os; CDROM producten willen verkopen kunnen contact opnemen met een distributeur:
Cylogistics 809B Cuesta Dr., #2149 Mountain View, CA 94040 Verenigde Staten Telefoon: +1 650 694-4949 Fax: +1 650 694-4953 E–mail: sales@cylogistics.com WWW:
&os; Services Ltd 11 Lapwing Close Bicester OX26 6XR Verenigd Koninkrijk WWW:
Ingram Micro 1600 E. St. Andrew Place Santa Ana, CA 92705-4926 Verenigde Staten Telefoon: 1 (800) 456-8000 WWW:
Kudzu, LLC 7375 Washington Ave. S. Edina, MN 55439 Verenigde Staten Telefoon: +1 952 947-0822 Fax: +1 952 947-0876 E–mail: sales@kudzuenterprises.com
LinuxCenter.Ru Galernaya Street, 55 Saint-Petersburg 190000 Rusland Telefoon: +7-812-3125208 E–mail: info@linuxcenter.ru WWW:
Navarre Corp 7400 49th Ave South New Hope, MN 55428 Verenigde Staten Telefoon: +1 763 535-8333 Fax: +1 763 535-0341 WWW:
FTP Sites De officië broncode voor &os; is beschikbaar via anoniem toegankelijke FTP in de hele wereld via vele mirrorsites. De site heeft een goede verbinding en staat veel verbindingen toe, maar het is waarschijnlijk beter om een mirrorsite te zoeken die dichterbij is (zeker als het doel is ook een soort mirrorsite op te zetten). De &os; mirrorsites database is beter bijgewerkt dan die in het Handboek omdat die lijst uit DNS komt in plaats van een met de hand ingevoerde lijst. &os; is beschikbaar via de onderstaande anonieme FTP mirror sites. Bij het kiezen van anonieme FTP voor het verkrijgen van &os; wordt aangeraden een site die dichtbij ligt te kiezen. De mirrorsites die in de lijst staan als Primaire Mirrorsites hebben meestal het complete &os; archief (alle beschikbare versies voor alle architecturen) maar downloads zijn waarschijnlijk sneller van een site die in het land of de regio van de gebruiker staat. De regionale sites hebben de meeste recente versies voor de meest populaire architecturen, maar hebben wellicht niet het complete archief. Alle sites geven toegang via anonieme FTP, maar een aantal sites hebben ook andere toegangsmogelijkheden. De toegangsmogelijkheden voor iedere site staan tussen haakjes achter de hostnaam. De rest van deze paragraaf wordt automatisch samengesteld en is niet vertaald. &chap.mirrors.ftp.inc; Anonieme CVS <anchor id="anoncvs-intro">Inleiding CVS anoniem Anonieme CVS (of ook wel bekend als anoncvs) is een functie die beschikbaar is met de hulpprogramma's die bij &os; zitten om te synchroniseren met een elders aanwezig CVS depot. Het staat gebruikers van &os; onder andere toe om zonder bijzondere rechten alleen-lezen operaties uit te voeren op een van de officiële anoncvs servers van het &os; project. Om het te kunnen gebruiken dient de omgevingsvariabele CVSROOT zo ingesteld te worden dat hij wijst naar de gewenste anoncvs server, dient het bekende wachtwoord anoncvs bij het commando cvs login opgegeven te worden en kan daarna &man.cvs.1; gebruikt worden om het te benaderen als ieder lokaal aanwezig depot. Het commando cvs login slaat de wachtwoorden die voor aanmelden bij de CVS server op in een bestand met de naam .cvspass in de map HOME. Als dit bestand niet bestaat, is het mogelijk dat er een foutmelding wordt gegeven als cvs login de eerste keer wordt gebruikt. Dat kan opgelost worden door een leeg bestand .cvspass te maken en dan opnieuw aan te melden. Hoewel de diensten CVSup en anoncvs beiden vrijwel dezelfde functie invullen, zijn er redenen die de keuze voor de synchronisatiemethode beïnvloeden. In een notendop is CVSup veel efficiënter in het gebruik van netwerkbronnen en is het de meest geavanceerde van de twee, maar daar staat iets tegenover. Voor het gebruik van CVSup moet eerst een speciale client geïnstalleerd en ingesteld worden voordat er bits kunnen gaan stromen en dat kan dan alleen in de redelijk grote brokken die in CVSup collections heten. Anoncvs kan daarentegen gebruikt worden om alles te bekijken van een individueel bestand tot aan een specifiek programma (als ls of grep) door aan de naam van de CVS module te refereren. Ook anoncvs is alleen geschikt voor alleen-lezen operaties op het CVS depot, dus als het de bedoeling is om lokaal ontwikkelwerk en hetzelfde depot met delen uit het &os; project te combineren, dan biedt alleen CVSup daar een oplossing voor. <anchor id="anoncvs-usage">Anonieme CVS Gebruiken Het instellen van &man.cvs.1; om gebruik te maken van een Anoniem CVS depot is een kwestie van het instellen van de omgevingsvariabele CVSROOT op een van de anoncvs servers van het &os; project. Op het moment van schrijven zijn de volgende servers beschikbaar: Oostenrijk: :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs Gebruikt cvs login en gebruik een willekeurig wachtwoord. Frankrijk: :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs (pserver (wachtwoord anoncvs), ssh (geen wachtwoord) Duitsland: :pserver:anoncvs@anoncvs.de.FreeBSD.org:/home/ncvs Gebruik cvs login en gebruik als wachtwoord anoncvs Duitsland: :pserver:anoncvs@anoncvs2.de.FreeBSD.org:/home/ncvs (rsh, pserver, ssh, ssh/2022) Japan: :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs Gebruik cvs login en gebruik als wachtwoord anoncvs Zweden: freebsdanoncvs@anoncvs.se.FreeBSD.org:/home/ncvs (alleen ssh - geen wachtwoord) + + SSH HostKey: 1024 a7:34:15:ee:0e:c6:65:cf:40:78:2d:f3:cd:87:bd:a6 root@apelsin.fruitsalad.org +SSH2 HostKey: 1024 21:df:04:03:c7:26:3e:e8:36:1a:50:2d:c7:ae:b8:5f ssh_host_dsa_key.pub VS: freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs (alleen ssh - geen wachtwoord) + + SSH HostKey: 1024 a1:e7:46:de:fb:56:ef:05:bc:73:aa:91:09:da:f7:f4 root@sanmateo.ecn.purdue.edu +SSH2 HostKey: 1024 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65 /etc/ssh/ssh_host_dsa_key.pub VS: anoncvs@anoncvs1.FreeBSD.org:/home/ncvs (alleen ssh - geen wachtwoord) + + SSH HostKey: 1024 f1:6a:9c:6d:e3:f3:ae:f8:b5:68:ac:30:cb:11:32:9b root@ender.liquidneon.com +SSH2 HostKey: 1024 9a:d6:e1:e2:4f:58:36:77:e5:5b:60:ee:94:1b:c1:c0 ssh_host_dsa_key.pub Omdat met CVS vrijwel iedere versie die ooit beschikbaar is geweest uitgecheckt kan worden, is het van belang op de hoogte te zijn van de &man.cvs.1; vlag voor revisie () en welke waarden zie zoal kan aannemen in het &os; Project depot. Er zijn twee soorten labels (tags): revisielabels en taklabels (branch). Een revisielabel refereert aan een specifieke revisie. De betekenis blijft van dag tot dag gelijk. Aan de andere kant refereert een taklabel aan de laatste revisie in een bepaalde ontwikkellijn op een bepaald moment. Omdat een taklabel niet refereert aan een specifieke revisie, kan die morgen anders zijn dan vandaag. bevat revisielabels waar gebruikers in geïnteresseerd kunnen zijn. Nogmaals: deze zijn allemaal niet geldig voor de Portscollectie omdat de Portscollectie geen meerdere revisies kent. Als een specifiek taklabel wordt aangegeven, worden als alles goed gaat, de laatste revisies uit een bepaalde ontwikkellijn ontvangen. Als er een oudere versie opgehaald moet worden, kan dat door met de vlag een datum aan te geven. In &man.cvs.1; staan meer details. Voorbeelden Hoewel het sterk wordt aangeraden eerst de hulppagina's voor &man.cvs.1; grondig door te lezen, volgen hier een aantal snelle voorbeelden die feitelijk aangeven hoe Anonieme CVS gebruikt kan worden. SSH Gebruiken om de <filename>src/</filename> Tree Uit te Checken: &prompt.user; cvs -d freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs co src The authenticity of host 'anoncvs.freebsd.org (128.46.156.46)' can't be established. DSA key fingerprint is 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known hosts. Iets Uitchecken uit -CURRENT (&man.ls.1;) en Dat Weer Verwijderen: &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.FreeBSD.org:/home/ncvs &prompt.user; cvs login At the prompt, enter the password anoncvs. &prompt.user; cvs co ls &prompt.user; cvs release -d ls &prompt.user; cvs logout SSH Gebruiken om de <filename>src/</filename> Structuur uit te Checken: &prompt.user; cvs -d freebsdanoncvs@anoncvs.FreeBSD.org:/home/ncvs co src The authenticity of host 'anoncvs.freebsd.org (128.46.156.46)' can't be established. DSA key fingerprint is 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'anoncvs.freebsd.org' (DSA) to the list of known hosts. De Versie van &man.ls.1; in de 3.X-STABLE Tak Uitchecken: &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.FreeBSD.org:/home/ncvs &prompt.user; cvs login At the prompt, enter the password anoncvs. &prompt.user; cvs co -rRELENG_3 ls &prompt.user; cvs release -d ls &prompt.user; cvs logout Een Lijst Wijzigingen Maken (als Unified Diffs) voor &man.ls.1; &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.FreeBSD.org:/home/ncvs &prompt.user; cvs login At the prompt, enter the password anoncvs. &prompt.user; cvs rdiff -u -rRELENG_3_0_0_RELEASE -rRELENG_3_4_0_RELEASE ls &prompt.user; cvs logout Uitzoeken Welke Modulenamen Gebruikt Kunnen Worden: &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.FreeBSD.org:/home/ncvs &prompt.user; cvs login At the prompt, enter the password anoncvs. &prompt.user; cvs co modules &prompt.user; more modules/modules &prompt.user; cvs release -d modules &prompt.user; cvs logout Andere Bronnen De volgende bronnen kunnen bijdragen aan een beter begrip van CVS: CVS Tutorial van Cal Poly. CVS Home, de CVS gemeenschap voor ontwikkeling en ondersteuning. CVSweb is de &os; Project webinterface voor CVS. CTM Gebruiken CTM CTM is een methode om een map elders gesynchroniseerd te houden met een centrale. Het is ontwikkeld voor gebruik met de &os; broncode, hoewel sommigen het ook voor andere doeleinden handig vinden. Er bestaat op dit moment weinig tot geen documentatie over het proces van het maken van delta's. Voor informatie over het gebruik van CTM kan het beste contact gezocht worden met de &a.ctm-users.name; mailinglijst. Waarom <application>CTM</application> Gebruiken? CTM geeft een lokale kopie van de &os; broncode. Die is in een aantal smaken beschikbaar. Of het gaat om slechts één tak of de complete CVS structuur, CTM kan het bieden. CTM is gewoon gemaakt voor actieve ontwikkelaars die met &os; werken, maar geen of een slechte internetverbinding hebben of gewoon automatisch de laatste wijzigingen willen ontvangen. De meest actieve takken kennen op z'n hoogst drie delta's per dag. Het is het overwegen waard om ze per automatische mail te laten sturen. De grootte van de updates wordt altijd zo klein mogelijk gehouden. Meestal kleiner dan 5 K en soms (in tien procent van de gevallen) is het 10–50 K. In uitzonderlijke gevallen komt het voor dat een mail van 100 K of meer wordt gestuurd. Het is wel van belang op de hoogte te zijn van de valkuilen die een rol spelen bij het direct werken met broncode in plaats van met een voorverpakte release. Dit geldt nog meer als wordt gewerkt met de current code. Het lezen van Bijblijven met &os; wordt sterk aangeraden. Wat Is Er Nodig om <application>CTM</application> te Gebruiken? Voor het gebruik van CTM zijn twee dingen nodig: het CTM programma en de initiële delta's om de applicatie te voeden en naar een current niveau te komen. CTM is al onderdeel van &os; sinds versie 2.0 is uitgebracht en is te vinden in /usr/src/usr.sbin/ctm, als de broncode aanwezig is. Als er een oudere versie van 2.0 draait van &os;, is het mogelijk om de huidige CTM code direct op te halen van . De delta's voor CTM kunnen op twee manieren komen: met FTP of per e-mail. De volgende FTP sites bieden ondersteuning voor CTM: Er staan er nog meer in de paragraaf mirrors. FTP de relevante map en download het bestand README vanaf daar. Voor delta's via e-mail: Er dient een abonnement genomen te worden op een van de CTM distributielijsten. &a.ctm-cvs-cur.name; ondersteunt de complete CVS structuur. &a.ctm-src-cur.name; ondersteunt het hoofd van de ontwikkeltak. &a.ctm-src-4.name; ondersteunt de 4.X release tak, enzovoort. Om te abonneren kan geklikt worden op de bovenstaande links of via &a.mailman.lists.link; kan in een lijst geklikt worden op de lijst waarvoor waarvoor een abonnement gewenst is. De lijstpagina bevat instructies over hoe te abonneren. Na het ontvangen van CTM updates per mail, kan ctm_rmail gebruikt worden voor het uitpakken en verwerken. ctm_rmail kan zelfs direct vanuit /etc/aliases gebruikt worden om het proces volledig automatisch te laten verlopen. In de hulppagina van ctm_rmail staan meer details. Welke methode ook gebruikt wordt voor de CTM delta's, het is belangrijk een abonnement te nemen op de &a.ctm-announce.name; mailinglijst. In de toekomst worden alleen op die lijst aankondigingen gedaan over het CTM systeem. Abonneren kan door op de link hierboven te klikken en de instructies te volgen. <application>CTM</application> de Eerste Keer Gebruiken Voordat de CTM delta's gebruikt kunnen worden, moet er een startpunt voor bepaald worden. Eerst moet bepaald worden wat er al is. Het is mogelijk te beginnen vanuit een lege map. Dan moet een initiële Empty delta gebruikt worden om een door CTM ondersteunde structuur te starten. Het is de bedoeling dat deze start delta's ooit voor het gemak op de CD komen te staan, maar dit is nog niet het geval. Omdat de structuren tientallen megabytes groot zijn, heeft het de voorkeur om al met iets te beginnen. Als er een -RELEASE CD beschikbaar is, kan de initiële broncode gekopieerd of uitgepakt worden. Dit bespaart nogal wat dataverkeer. De start delta's kunnen herkend worden aan de X die aan het nummer is toegevoegd (bijvoorbeeld src-cur.3210XEmpty.gz). De nummering achter de X komt overeen met de oorsprong van het initiële zaad. Empty is een lege map. Er wordt in het algemeen iedere honderd delta's een basistransitie voor Empty gemaakt. Die zijn trouwens groot: 70 tot 80 Megabytes gzip data is normaal voor de XEmpty delta's. Als er een delta als startpunt is gekozen, zijn ook alle delta's met hogere volgnummers nodig. <application>CTM</application> in het Dagelijk Leven Gebruiken Om de delta's toe te passen: &prompt.root; cd /where/ever/you/want/the/stuff &prompt.root; ctm -v -v /where/you/store/your/deltas/src-xxx.* CTM begrijpt delta's in gzip formaat, dus het niet nodig om eerst gunzip te gebruiken. Dat spaart diskruimte. Tenzij het zeker is van de veiligheid van het proces, doet CTM niets met de structuur. Om een delta te verifiëren kan ook de vlag gebruikt worden en dan komt CTM ook niet aan een structuur. Dan wordt alleen de integriteit van de delta gecontroleerd en of die zonder problemen op de huidige structuur kan worden toegepast. CTM kent nog meer opties die in de hulppagina's worden besproken. Meer is er niet. Iedere keer dat er een delta wordt ontvangen, moet die door CTM gehaald worden om de broncode bijgewerkt te houden. Delta's kunnen het beste niet verwijderd worden als het lastig is ze opnieuw te downloaden. Dan kunnen ze het beste bewaard worden voor het geval er eens iets gebeurt. Zelfs als er alleen floppy's beschikbaar zijn, is het wellicht verstandig die te gebruiken met fdwrite. Lokale Wijzigingen Behouden Een ontwikkelaar wil graag experimenteren met bestanden in de structuur en die bestanden veranderen. CTM ondersteunt lokale wijzigingen in beperkte mate: alvorens te kijken of bestand foo bestaat, zoekt het eerst naar foo.ctm. Als dat bestand bestaat, past CTM de wijzigigen daarop toe in plaats van op foo. Dit gedrag biedt een eenvoudige mogelijkheid om lokale wijzigingen bij te houden. Dat kan dus door bestanden die gewijzigd gaan worden te kopiëren naar een bestand met dezelfde naam met de toevoeging .ctm. Dan kan er vrijelijk gespeeld worden met de code, terwijl CTM het bestand .ctm bijwerkt. Andere Interessante Mogelijkheden van <application>CTM</application> Uitvinden Wat Precies Wordt Veranderd door een Update Het is mogelijk een lijst met wijzigingen te maken die CTM zou maken op het broncodedepot met de optie . Dit is nuttig als het gewenst is om een logboek bij te houden van de wijzigingen, de te wijzigen bestanden voor- of na te bewerken op welke manier dan ook, of als de gebruiker gewoon een beetje paranoïde is. Back-ups Maken vóór Bijwerken Soms kan het wenselijk zijn om een back-up te maken van alle bestanden die gewijzigd gaan worden door een CTM update. Met back-upt CTM alle bestanden die gewijzigd gaan worden door een CTM delta naar back–upbestand. Te Wijzigen Bestanden door een Update Beperken Soms is het wenselijk de reikwijdte voor een CTM update te beperken of kan het wenselijk zijn om maar een paar bestanden bij te werken uit een aantal delta's. Een lijst met bestanden die CTM mag bewerken kan aangegeven worden met de opties en en het opgeven van regular expressions. Om bijvoorbeeld een bijgewerkte kopie van lib/libc/Makefile te maken uit de verzameling met opgeslagen CTM delta's, kan het volgende commando uitgevoerd worden: &prompt.root; cd /where/ever/you/want/to/extract/it/ &prompt.root; ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.* Voor ieder te wijzigen bestand in een CTM delta worden de opties en toegepast in de volgorde waarin ze op de commandoregel staan. Het bestand wordt alleen door CTM verwerkt als het passend is bevonden na het toepassen van alle parameters in en . Toekomstige Plannen voor <application>CTM</application> Die zijn er: Een of andere vorm van authenticatie in het CTM systeem bouwen zodat vervalste CTM updates afgevangen kunnen worden; De opties voor CTM opruimen omdat ze verwarrend zijn geworden. Nog Meer Er zijn ook delta's voor de portscollectie, maar daar is nog niet zo veel belangstelling voor. CTM Mirrors CTM/&os; is op de volgende mirrorsites via anonieme FTP beschikbaar. Als voor CTM anonieme FTP wordt gebruikt, heeft het de voorkeur een site die in geografische zin dichtbij is te gebruiken. Bij problemen kan contact gezocht worden met de &a.ctm-users.name; mailinglijst. Californië, Bay Area, officiële bron Zuid-Afrika, back-upserver voor oude delta's Taiwan/R.O.C. Als er geen mirror dichtbij is of als die incompleet is, kan een zoekmachine als alltheweb gebruikt worden. CVSup Gebruiken Inleiding CVSup is een softwarepakket voor het verspreiden en bijwerken van broncodestructueren vanaf een master CVS depot op een andere server. De &os; broncode wordt beheerd in een broncode depot op een centrale ontwikkelmachine in Californië. Met CVSup kunnen &os; gebruikers op eenvoudige wijze hun broncode bijwerken. CVSup gebruikt een zogenaamd pull model voor het bijwerken. In het pull-model vraagt iedere client de server om updates als die nodig zijn. De server wacht passief op een verzoek om updates van zijn clients. Alle updates worden dus op initiatief van de client gedaan. De server stuurt nooit ongevraagde updates. Gebruikers moeten de CVSup client handmatig draaien om te updaten of een cron taak instellen om op regelmatige basis bij te werken. De term CVSup, op de gegeven wijze geschreven, doelt op het complete softwarepakket. De belangrijkste componenten zijn de client cvsup, die op de machine van een gebruiker draait, en de server cvsupd, die op alle &os; mirrorsites draait. In de &os; documentatie en op de mailinglijsten zijn referenties aan sup te vinden. Sup was de voorloper van CVSup en diende hetzelfde doel. CVSup wordt op dezelfde manier gebruikt als sup en gebruikt zelfs bestanden met instellingen die ook te gebruiken zijn met sup. Sup wordt niet langer gebruikt in het &os; project omdat CVSup sneller en flexibeler is. Installatie De meest eenvoudige wijze van installatie van CVSup is met het voorgecompileerde package net/cvsup uit de &os; packagescollectie. Als het gewenst is, kan CVSup ook uit de broncode gebouwd worden in net/cvsup. De net/cvsup port is afhankelijk van het Modula-3 systeem en dat kan wel even duren en er is ook nogal wat schijfruimte voor nodig om het te downloaden en te bouwen. Als CVSup gebruikt gaat worden op een machine waarop geen &xfree86; of &xorg; staat, zoals een server, dan dient de port waar geen CVSup GUI bij zit geïnstalleerd te worden: net/cvsup-without-gui. CVSup Instellingen De werking van CVSup wordt gestuurd door een bestand met instellingen met de naam supfile. Er staan een aantal supfiles als voorbeeld in de map /usr/share/examples/cvsup/. De informatie in een supfile beantwoordt de volgende vragen voor CVSup: Welke bestanden moeten ontvangen worden? Welke versies daarvan moeten ontvangen worden? Waar moeten ze vandaan komen? Waar moeten ze komen te staan? Waar moet cvsup zijn statusbestanden bijhouden? In de volgende paragrafen wordt een supfile bestand opgebouwd door achtereenvolgens alle gestelde vragen te beantwoorden. Als eerste wordt de algemene structuur van een supfile beschreven. Een supfile is een tekstbestand. Commentaar begint met een # en loopt tot het einde van de regel. Lege regels en regels die alleen commentaar bevatten worden genegeerd. Iedere regel die overblijft slaat op een groep bestanden die ontvangen moet worden. De regel begint met de naam van een collectie, een logische groep bestanden op de server. De naam van de collectie geeft de server aan welke bestanden er gestuurd moeten worden. Na de naam van de collectie komen er geen of meer velden die gescheiden worden door witruimte. Die velden beantwoorden de hierboven gestelde vragen. Er zijn twee soorten velden: vlagvelden en waardevelden. Een vlagveld bestaat uit een alleenstaand sleutelwoord, bijvoorbeeld delete of compress. Een waardeveld begint ook met een sleutelwoord, maar het sleutelwoord wordt direct (zonder witruimte) gevolgd door = en een tweede woord. release=cvs is bijvoorbeeld een waardeveld. In een supfile wordt meestal aangegeven dat er meerdere collecties ontvangen moeten worden. Het is mogelijk om een supfile te structureren door expliciet alle relevante velden aan te geven voor iedere collectie, maar dat maakt de regels in de supfile nogal lang en het is onhandig omdat de meeste velden hetzelfde zijn voor alle collecties in een supfile. CVSup biedt een systeem met standaardinstellingen om dit probleem te omzeilen. Regels die beginnen met de speciale pseuso-collectienaam *default kunnen gebruikt worden om standaarden in te stellen voor de collecties die er in de supfile achteraan komen. Een standaardwaarde kan voor individuele collecties overschreven worden door een andere waarde in de collectie zelf aan te geven. Standaarden kunnen ook middenin het bestand gewijzigd of aangevuld worden met extra *default regels. Na deze achtergronden wordt er nu een supfile samengesteld voor het ontvangen en bijwerken van de hoofd broncodestructuur van &os;-CURRENT. Welke bestanden moeten ontvangen worden? De bestanden die via CVSup beschikbaar zijn, zijn beschikbaar in groepen die collecties heten. De beschikbare collecties staan beschreven in de volgende paragraaf. In dit voorbeeld is het de bedoeling dat de hele hoofd broncodestructuur voor &os; wordt ontvangen. Daar is één grote collectie voor: src-all. De eerste stap in het maken van een supfile is het opsommen van de gewenste collecties, één per regel (in dit geval maar één regel): src-all Welke versies daarvan moeten ontvangen worden? Met CVSup kan vrijwel iedere versie van de broncode die ooit heeft bestaan opgehaald worden. Dat kan omdat de cvsupd server direct vanaf het CVS depot werkt, dat alle versies bevat. Er kan aangegeven welke ontvangen moeten worden met de waardevelden tag= en . Voorzichtigheid is geboden bij het correct aangeven van velden met tag=. Sommige labels zijn alleen geldig voor bepaalde collecties of bestanden. Als ze incorrect worden aangeven of als er een spelfout wordt gemaakt in een label, verwijdert CVSup bestanden waarvan dat waarschijnlijk niet de bedoeling is. Het label tag=. dient eigenlijk alleen gebruikt te worden voor de ports-* collecties. Het veld tag= benoemt een symbolisch label in het depot. Er zijn twee soorten labels: revisielabels en taklabels. Een revisielabel refereert aan een specifieke revisie. De betekenis blijft altijd hetzelfde. Een taklabel refereert echter aan de laatste revisie van een gegeven ontwikkellijn op een gegeven moment. Omdat een taklabel niet refereert aan een specifieke revisie, kan het morgen iets anders betekenen dan vandaag. beschrijft de meest interessante taklabels. Als er in het instellingenbestand van CVSup een label wordt aangegeven, moet dat vooraf gegaan worden door tag= (RELENG_4 zal tag=RELENG_4 worden). Voor de Portscollectie is alleen tag=. relevant. Labels dienen exact zo ingegeven te worden als ze staan beschreven. CVSup kan geen onderscheid maken tussen geldige en ongeldige labels. Als er een spelfout in een label wordt gemaakt, doet CVSup alsof er een geldig label is ingegeven dat aan geen enkel bestand refereert. Dan zal CVSup de bestaande broncode wissen. Bij het aangeven van een taklabel wordt meestal de laatste versie van de bestanden voor een bepaalde ontwikkellijn ontvangen. Om een oudere versie te ontvangen kan in het veld een datum opgegeven worden. In &man.cvsup.1; staat hoe dat werkt. Om bijvoorbeeld &os;-CURRENT te ontvangen dient het volgende aan het begin van supfile toegevoegd te worden: *default tag=. Er ontstaat een belangrijk speciaal geval als er geen velden met tag= of date= worden aangegeven. In dat geval worden de eigenlijke RCS bestanden direct uit het CVS depot van de server ontvangen in plaats van dat een bepaalde versie wordt ontvangen. Ontwikkelaars geven in het algemeen de voorkeur aan deze optie. Door zelf een kopie van de broncode op hun systeem te hebben, krijgen ze de mogelijkheid om zelf door eerdere versies van bestanden te bladeren en de geschiedenis ervan te bekijken. Dit voordeel kost wel veel schijfruimte. Waar moeten ze vandaan komen? Het veld host= wordt gebruikt om cvsup aan te geven waar de updates vandaan moeten komen. Dat kan van elke CVSup mirrorsite, hoewel er wordt aangeraden een site die geografisch dichtbij ligt te kiezen. In dit voorbeeld wordt een fictieve &os; distributiesite gebruikt, cvsup99.FreeBSD.org: *default host=cvsup99.FreeBSD.org In een werkelijke situatie dient de hostnaam gewijzigd te worden in een host die echt bestaat voordat CVSup gaat draaien. Iedere keer dat cvsup wordt gestart, kan er een andere host op de commandoregel opgegeven worden met de optie . Waar moeten ze komen te staan? Het veld prefix= geeft cvsup aan waar de ontvangen bestanden terecht moeten komen. In dit voorbeeld worden de bestanden direct in de hoofd broncodestructuur /usr/src geplaatst. De map src is al impliciet in de gekozen collecties, vandaar dat het onderstaande de juiste instelling is: *default prefix=/usr Waar moet cvsup zijn statusbestanden bijhouden? De CVSup client houdt statusbestanden bij in een map die base wordt genoemd. Die bestanden helpen CVSup efficiënter te werken door bij te houden welke updates al eerder zijn ontvangen. Hier wordt de standaard basemap gebruikt, /var/db: *default base=/var/db De bovenstaande instelling wordt standaard gebruikt als die niet wordt aangegeven in de supfile, dus hij is eigenlijk niet nodig. Als de basemap niet al bestaat, moet die gemaakt worden. De cvsup client weigert te draaien als de basemap niet bestaat. Allerlei supfile instellingen: Er is nog een regel die in een supfile moet staan: *default release=cvs delete use-rel-suffix compress release=cvs geeft de server aan dat de informatie uit het &os; hoofd CVS depot moet komen. Dat is eigenlijk altijd het geval, maar er zijn mogelijkheden die buiten het bereik van dit handboek vallen. delete geeft CVSup het recht om bestanden te verwijderen. Dit moet altijd aangegeven worden zodat CVSup de broncode altijd kan bijwerken. CVSup gaat voorzichtig om met het verwijderen van bestanden waar het verantwoordelijk voor is. Extra bestanden in de structuur worden met rust gelaten. use-rel-suffix is nogal geheimzinnig. Voor de nieuwsgierigen staat er meer over in &man.cvsup.1;. Anders kan het gewoon ingesteld worden zonder erover na te denken. compress schakelt het gebruikt van gzip compressie in voor het communicatiekanaal. Als de verbinding een E1 of sneller is, hoeft er geen compressie gebruikt te worden. Anders helpt het aanzienlijk. Alles combinerend: Hieronder staat de hele supfile uit het voorbeeld: *default tag=. *default host=cvsup99.FreeBSD.org *default prefix=/usr *default base=/var/db *default release=cvs delete use-rel-suffix compress src-all Het Bestand <filename>refuse</filename> Zoals hierboven al is aangegeven, gebruikt CVSup een pull methode. Dat betekent eigenlijk dat er een verbinding wordt gemaakt met de CVSup server en die zegt dan: Dit kan er van mij gedownload worden..., en dan antwoordt de client met: Oké, ik wil dit en dat en zus en zo. Met de standaardinstellingen haalt de CVSup client alle bestanden die bij een collectie en het label horen dat in het bestand met de instellingen is opgegeven. Maar dat is niet altijd wenselijk, in het bijzonder als de doc, ports of www structuren worden gesynchroniseerd. De meeste mensen kunnen geen vier of vijf talen lezen en die hebben de taalspecifieke bestanden dus niet nodig. Als de Portscollectie met CVSup wordt opgehaald, is het mogelijk om iedere collectie apart aan te geven (bijvoorbeeld ports-astrology, ports-biology, enzovoort, in plaats van eenvoudigweg ports-all). Maar omdat de doc en www structuren geen taalspecifieke collecties hebben, moet er gebruik gemaakt worden van een van de vele mooie mogelijkheden van CVSup: het bestand refuse. Het bestand refuse geeft CVSup in feite aan dat niet ieder bestand uit een collectie opgehaald moet worden. Het geeft dus aan dat de client bepaalde bestanden van de server moet weigeren. Het bestand refuse staat in (of kan gemaakt worden in) base/sup/. base staat ingesteld in supfile. De standaardlocatie voor base is /var/db. De standaardplaats voor refuse is dus /var/db/sup/refuse. Het bestand refuse heeft een erg eenvoudige opmaak. Het bevat de namen van de bestanden die niet gedownload mogen worden. Als een gebruiker bijvoorbeeld geen andere talen spreekt dan Engels en Nederlands, maar de Nederlandse vertaling van de documentatie hoeft niet binnengehaald te worden, dan kan het volgende in het bestand refuse gezet worden: doc/bn_* doc/da_* doc/de_* doc/el_* doc/es_* doc/fr_* doc/it_* doc/ja_* doc/nl_* doc/no_* doc/pl_* doc/pt_* doc/ru_* doc/sr_* doc/tr_* doc/zh_* Dit gaat zo door voor de andere talen. De volledige lijst staat in het &os; CVS depot. Met deze handige eigenschap kunnen gebruikers met langzamere verbindingen of zij die per minuut voor hun internetverbinding betalen waardevolle tijd besparen omdat er geen bestanden meer gedownload worden die nooit gebruikt worden. Meer informatie over refuse bestanden en andere leuke mogelijkheden van CVSup staat in de handleiding. <application>CVSup</application> Draaien Nu kan het bijwerken beginnen. Het commando is best wel eenvoudig: &prompt.root; cvsup supfile De supfile is de naam van het supfile bestand dat gebruikt moet worden. Aangenomen dat er X11 draait op een machine, toont cvsup een GUI venster met wat knoppen om de bekende acties uit te voeren. Het proces start na het klikken op de knop go. Omdat in dit voorbeeld de werkelijke structuur in /usr/src wordt bijgewerkt, moet het programma als root uitgevoerd worden, zodat cvsup de rechten heeft die het nodig heeft om de bestanden bij te werken. Het is voorstelbaar dat de benodigde rechten, het net gemaakte bestand met instellingen en het voor de eerste keer draaien van een programma zorgt voor wat onrust. Daarom is het mogelijk proef te draaien zonder dat er bestanden gewijzigd worden. Dat kan door ergens een lege map te maken en een extra argument mee te geven op de commandoregel: &prompt.root; mkdir /var/tmp/dest &prompt.root; cvsup supfile /var/tmp/dest De opgegeven map is de bestemming voor alle bestandsupdates. CVSup bekijkt wel de bestanden in /usr/src, maar wijzigt ze niet. Alle updates belanden in /var/tmp/dest/usr/src. CVSup werkt ook de statusbestanden niet bij als het op deze wijze wordt uitgevoerd. De nieuwe versies van de bestanden worden naar de aangegeven map geschreven. Als er maar leestoegang is tot /usr/src, hoeft een gebruiker zelfs geen root te zijn bij het uitvoeren van dit experiment. Als er geen X11 draait of als het niet wenselijk is een GUI te gebruiken, dan kunnen daarvoor opties op de commandoregel meegegeven worden bij het draaien van cvsup: &prompt.root; cvsup -g -L 2 supfile De optie geeft CVSup aan dat de GUI niet gebruikt hoeft te worden. Dit gebeurt automatisch als X11 niet draait, maar anders moet het aangegeven worden. De optie geeft CVSup aan dat details getoond moeten worden over alle bestanden die bijgewerkt worden. Er zijn drie niveau's van uitvoerigheid, van tot . Standaard is het 0, wat betekent dat er geen enkel bericht wordt getoond, met uitzondering van foutmeldingen. Er zijn nog veel andere opties beschikbaar. Met cvsup -H wordt een lijst met korte uitleg getoond. Beschrijvingen met meer details staan in de handleiding. Als het bijwerken op de gewenste manier loopt, kan het regulier draaien van CVSup met &man.cron.8; ingesteld worden. Natuurlijk hoort CVSup zonder GUI te draaien als het programma vanuit de &man.cron.8; draait. <application>CVSup</application> Bestandscollecties De via CVSup beschikbare bestandscollecties zijn hiërarchisch georganiseerd. Er zijn een paar grote collecties en die zijn opgedeeld in kleinere sub-collecties. Het ontvangen van een collectie is hetzelfde als het ontvangen van alle sub-collecties. De hiërarchische relatie tussen de collecties wordt hieronder aangegeven door het niveau van inspringen. De meest gebruikte collecties zijn src-all en ports-all. De andere collecties worden door kleine groepen mensen gebruikt voor bijzondere doeleinden en sommige mirrorsites hebben ze niet allemaal. cvs-all release=cvs Het &os; CVS hoofddepot, inclusief de cryptografische code. distrib release=cvs Bestanden die betrekking hebben op het verspreiden en spiegelen van &os;. doc-all release=cvs Broncode voor het &os; Handboek en andere documentatie, zonder de bestanden voor de &os; website. ports-all release=cvs De &os; Portscollectie. Als ports-all (het complete portssysteem) niet bijgewerkt hoeft te worden, maar enkele van de onderstaande sub-collecties, dan moet altijd ook de ports-base sub-collectie bijgewerkt worden! Als er iets wijzigt in de infrastructuur van de ports waar ports–base voor staat, is het vrijwel zeker dat die wijzigingen heel snel door echte ports gebruikt gaan worden. Dus als alleen de echte ports bijgewerkt worden en als die gebruik maken van nieuwe mogelijkheden, dan is de kans groot dat het bouwen daarvan foutloopt met een vage foutmelding. Het eerste dat gedaan moeten worden is ervoor zorgen dat de ports-base sub-collectie is bijgewerkt. Bij het zelf bouwen van een lokale kopie van ports/INDEX mOEt ports-all geaccepteerd worden (de hele port structuur). Het bouwen van ports/INDEX met een gedeeltelijke structuur wordt niet ondersteund. Zie ook de FAQ. ports-accessibility release=cvs Software voor minder valide gebruikers. ports-arabic release=cvs Ondersteuning voor de Arabische taal. ports-archivers release=cvs Archiveringshulpmiddelen. ports-astro release=cvs Astronomie ports. ports-audio release=cvs Geluidsondersteuning. ports-base release=cvs De infrastructuur van de Portscollectie. Bestanden uit de mappen Mk/ en Tools/ van /usr/ports. Zie ook de belangrijke waarschuwing hierboven: deze sub-collectie dient altijd bijgewerkt te worden als er een onderdeel van de &os; Portscollectie wordt bijgewerkt! ports-benchmarks release=cvs Benchmarks. ports-biology release=cvs Biologie. ports-cad release=cvs Computer aided design programma's. ports-chinese release=cvs Ondersteuning voor de Chinese taal. ports-comms release=cvs Communicatiesoftware. ports-converters release=cvs Karaktercode omzetters. ports-databases release=cvs Databases. ports-deskutils release=cvs Dingen die op een bureaublad stonden voordat computers waren uitgevonden. ports-devel release=cvs Ontwikkelhulpmiddelen. ports-dns release=cvs DNS gerelateerde software. ports-editors release=cvs Editors. ports-emulators release=cvs Emulatoren voor besturingssystemen. ports-finance release=cvs Monetaire, financiële en gerelateerde applicaties. ports-ftp release=cvs FTP client en server programma's. ports-games release=cvs Spelletjes. ports-german release=cvs Ondersteuning voor de Duitse taal. ports-graphics release=cvs Grafische programma's. ports-hebrew release=cvs Ondersteuning voor de Hebreeuwse taal. ports-hungarian release=cvs Ondersteuning voor de Hongaarse taal. ports-irc release=cvs Internet Relay Chat hulpprogramma's. ports-japanese release=cvs Ondersteuning voor de Japanse taal. ports-java release=cvs &java; programma's. ports-korean release=cvs Ondersteuning voor de Koreaanse taal. ports-lang release=cvs Programmeertalen. ports-mail release=cvs Mailsoftware. ports-math release=cvs Numerieke rekensoftware. ports-mbone release=cvs MBone applicaties. ports-misc release=cvs Verschillende programma's. ports-multimedia release=cvs Multimedia software. ports-net release=cvs Netwerksoftware. ports-net-mgmt release=cvs Netwerkbeheersoftware. ports-news release=cvs USENET news software. ports-palm release=cvs Softwareondersteuning voor Palm apparatuur. ports-polish release=cvs Ondersteuning voor de Poolse taal. ports-portuguese release=cvs Ondersteuning voor de Portugese taal. ports-print release=cvs Printsoftware. ports-russian release=cvs Ondersteuning voor de Russische taal. ports-science release=cvs Wetenschappelijk. ports-security release=cvs Beveiligingsprogramma's. ports-shells release=cvs Commandoregelshells. ports-sysutils release=cvs Systeemprogramma's. ports-textproc release=cvs Tekstverwerkingsprogramma's (zonder desktop publishing). ports-ukrainian release=cvs Ondersteuning voor de Oekraïnische taal. ports-vietnamese release=cvs Ondersteuning voor de Vietnamese taal. ports-www release=cvs Software gerelateerd aan het Wereldwijde Web. ports-x11 release=cvs Ports voor het X windowsysteem. ports-x11-clocks release=cvs X11 klokken. ports-x11-fm release=cvs X11 bestandsbeheerders. ports-x11-fonts release=cvs X11 lettertypen en lettertypeprogramma's. ports-x11-toolkits release=cvs X11 hulpprogramma's. ports-x11-servers release=cvs X11 servers. ports-x11-themes X11 thema's. ports-x11-wm release=cvs X11 vensterbeheerprogramma's. src-all release=cvs De hoofdbroncode van &os;, inclusief de cryptografische code. src-base release=cvs Verschillende bestanden bovenin de /usr/src structuur. src-bin release=cvs Gebruikersprogramma's die wellicht nodig zijn in single-user modus (/usr/src/bin). src-contrib release=cvs Programma's en bibliotheken van buiten het &os; project die vrijwel ongewijzigd gebruikt worden (/usr/src/contrib). src-crypto release=cvs Cryptografische programma's en bibliotheken van buiten het &os; project, die vrijwel ongewijzigd worden gebruikt (/usr/src/crypto). src-eBones release=cvs Kerberos en DES (/usr/src/eBones). Niet gebruikt in recente uitgaves van &os;. src-etc release=cvs Bestanden met systeeminstellingen (/usr/src/etc). src-games release=cvs Spelletjes (/usr/src/games). src-gnu release=cvs Programma's die onder de GNU Public License vallen (/usr/src/gnu). src-include release=cvs Headerbestanden (/usr/src/include). src-kerberos5 release=cvs Kerberos5 beveiligingspakket (/usr/src/kerberos5). src-kerberosIV release=cvs KerberosIV beveiligingspakket (/usr/src/kerberosIV). src-lib release=cvs Bibliotheken (/usr/src/lib). src-libexec release=cvs Systeemprogramma's die meestal door andere programma's worden uitgevoerd (/usr/src/libexec). src-release release=cvs Bestanden die nodig zijn voor het maken van een &os; release (/usr/src/release). src-sbin release=cvs Systeemprogramma's voor single-user modus (/usr/src/sbin). src-secure release=cvs Cryptografische bibliotheken en commando's (/usr/src/secure). src-share release=cvs Bestanden die tussen meerdere systemen gedeeld kunnen worden (/usr/src/share). src-sys release=cvs De kernel (/usr/src/sys). src-sys-crypto release=cvs Cryptografische kernelcode (/usr/src/sys/crypto). src-tools release=cvs Verschillende hulpprogramma's voor het onderhoud van &os; (/usr/src/tools). src-usrbin release=cvs Gebruikersprogramma's (/usr/src/usr.bin). src-usrsbin release=cvs Systeemprogramma's (/usr/src/usr.sbin). www release=cvs De broncode voor de &os; website. distrib release=self De instellingenbestanden van de CVSup server zelf. Gebruikt door de CVSup mirrorsites. gnats release=current De GNATS bug-tracking database. mail-archive release=current &os; mailinglijstarchief. www release=current De voorbewerkte &os; websitebestanden (niet de broncode). Gebruikt door WWW mirrorsites. Voor Meer Informatie De CVSup FAQ en andere informatie over CVSup is te vinden op De CVSup Homepage. De meeste &os;–gerelateerde discussie over CVSup vindt plaats op de &a.hackers;. Daar worden nieuwe versies van de software aangekondigd, net als op de &a.announce;. Vragen en foutrapporten kunnen gericht worden aan de auteur van het programma op cvsup-bugs@polstra.com. CVSup Sites CVSup servers voor &os; draaien op de onderstaande sites. Het overige deel van deze paragraaf wordt automatisch samengesteld en is daarom niet vertaald. &chap.mirrors.cvsup.inc; CVS Labels Bij het ophalen of bijwerken van broncode met cvs of CVSup moet een revisielabel meegegeven worden. Een revisielabel refereert aan een specifieke lijn in de &os; ontwikkeling of aan een specifiek moment in de tijd. Het eerste type heet taklabel (branch tag) en het tweede type heet releaselabel (release tag). Taklabels Deze zijn, met uitzondering van HEAD (dat altijd een geldig label is), alleen van toepassing op de src/ structuur. De ports/, doc/ en www/ structuren kennen geen takken. HEAD Symbolische naam voor de hoofdlijn van &os;-CURRENT. Ook de standaard als geen revisie is aangegeven. In CVSup wordt dit label aangegeven met een . (dat is dus geen interpunctie, maar een echt . karakter). In CVS is dit de standaard als er geen revisietabel is aangegeven. Het is meestal geen goed idee om een checkout of update van CURRENT broncode op een STABLE machine te doen, tenzij dat expliciet de bedoeling is. RELENG_5 De ontwikkellijn voor &os;-5.X, ook bekend als &os; 5-STABLE. RELENG_5_3 De releasetak voor &os;-5.3, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_5_2 De releasetak voor &os;-5.2 en &os;-5.2.1, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_5_1 De releasetak voor &os;-5.1, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_5_0 De releasetak voor &os;-5.0, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_4 De ontwikkellijn voor &os;-4.X, ook bekend als &os; 4-STABLE. + + RELENG_4_11 + + + De releasetak voor &os;-4.11, alleen gebruikt voor + beveiligingswaarschuwingen en andere kritische + aanpassingen. + + + RELENG_4_10 De releasetak voor &os;-4.10, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_4_9 De releasetak voor &os;-4.9, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_4_8 De releasetak voor &os;-4.8, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_4_7 De releasetak voor &os;-4.7, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_4_6 De releasetak voor &os;-4.6 en &os;-4.6.2, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_4_5 De releasetak voor &os;-4.5, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_4_4 De releasetak voor &os;-4.4, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_4_3 De releasetak voor &os;-4.3, alleen gebruikt voor beveiligingswaarschuwingen en andere kritische aanpassingen. RELENG_3 De ontwikkellijn voor &os;-3.X, ook bekend als 3.X-STABLE. RELENG_2_2 De ontwikkellijn voor &os;-2.2.X, ook bekend als 2.2-STABLE. Deze tak is sterk verouderd. Releaselabels Deze labels refereren aan een specifiek moment in de tijd waarop een versie van &os; is uitgegeven. Het proces om tot een release te komen is gedetailleerder beschreven in de Release Engineering Informatie en Release Proces documenten. De src structuur gebruikt labelnamen die beginnen met RELENG_ labels. De ports en doc structuren gebruiken labels waarvan de naam begint met het label RELEASE. De www tenslotte, is niet gemarkeerd met een bijzondere naam bij releases. + + RELENG_4_11_0_RELEASE + + + FreeBSD 4.11 + + + RELENG_5_3_0_RELEASE &os; 5.3 RELENG_4_10_0_RELEASE &os; 4.10 RELENG_5_2_1_RELEASE &os; 5.2.1 RELENG_5_2_0_RELEASE &os; 5.2 RELENG_4_9_0_RELEASE &os; 4.9 RELENG_5_1_0_RELEASE &os; 5.1 RELENG_4_8_0_RELEASE &os; 4.8 RELENG_5_0_0_RELEASE &os; 5.0 RELENG_4_7_0_RELEASE &os; 4.7 RELENG_4_6_2_RELEASE &os; 4.6.2 RELENG_4_6_1_RELEASE &os; 4.6.1 RELENG_4_6_0_RELEASE &os; 4.6 RELENG_4_5_0_RELEASE &os; 4.5 RELENG_4_4_0_RELEASE &os; 4.4 RELENG_4_3_0_RELEASE &os; 4.3 RELENG_4_2_0_RELEASE &os; 4.2 RELENG_4_1_1_RELEASE &os; 4.1.1 RELENG_4_1_0_RELEASE &os; 4.1 RELENG_4_0_0_RELEASE &os; 4.0 RELENG_3_5_0_RELEASE &os;-3.5 RELENG_3_4_0_RELEASE &os;-3.4 RELENG_3_3_0_RELEASE &os;-3.3 RELENG_3_2_0_RELEASE &os;-3.2 RELENG_3_1_0_RELEASE &os;-3.1 RELENG_3_0_0_RELEASE &os;-3.0 RELENG_2_2_8_RELEASE &os;-2.2.8 RELENG_2_2_7_RELEASE &os;-2.2.7 RELENG_2_2_6_RELEASE &os;-2.2.6 RELENG_2_2_5_RELEASE &os;-2.2.5 RELENG_2_2_2_RELEASE &os;-2.2.2 RELENG_2_2_1_RELEASE &os;-2.2.1 RELENG_2_2_0_RELEASE &os;-2.2.0 AFS Sites Er draaien AFS servers voor &os; op de volgende sites: Sweden The path to the files are: /afs/stacken.kth.se/ftp/pub/FreeBSD/ stacken.kth.se # Stacken Computer Club, KTH, Sweden 130.237.234.43 #hot.stacken.kth.se 130.237.237.230 #fishburger.stacken.kth.se 130.237.234.3 #milko.stacken.kth.se Beheerder: ftp@stacken.kth.se rsync Sites De volgende sites bieden &os; aan via het protocol rsync. Het programma rsync werkt vrijwel hetzelfde als &man.rcp.1;, maar kent meer mogelijkheden en gebruikt het rsync remote-update protocol, dat alleen verschillen tussen twee groepen bestanden overbrengt, waardoor het synchroniseren via een netwerk drastisch wordt versneld. Dit kan het beste gedaan worden als er een mirrorsite voor de &os; FTP server of het &os; CVS depot draait. De rsync suite is voor veel besturingssystemen beschikbaar. Voor &os; kan het package of de port uit net/rsync geïnstalleerd worden. Tschechische Republiek rsync://ftp.cz.FreeBSD.org/ Beschikbare collecties: ftp: Een gedeeltelijke mirror van de &os; FTP server. &os;: Een volledige mirror van de &os; FTP server. Duitsland rsync://grappa.unix-ag.uni-kl.de/ Beschikbare collecties: freebsd-cvs: Het volledige &os; CVS depot. Deze machine mirrort onder andere ook de CVS depots voor de NetBSD en OpenBSD projecten. Nederland rsync://ftp.nl.FreeBSD.org/ Beschikbare collecties: vol/4/freebsd-core: Een volledige mirror van de &os; FTP server. Verenigd Koninkrijk rsync://rsync.mirror.ac.uk/ Beschikbare collecties: ftp.FreeBSD.org: Een volledige mirror van de &os; FTP server. Verenigde Staten rsync://ftp-master.FreeBSD.org/ Deze server mag alleen gebruikt worden door &os; primaire mirrorsites. Beschikbare collecties: &os;: Het masterarchief van de &os; FTP server. acl: De &os; master ACL lijst. rsync://ftp13.FreeBSD.org/ Beschikbare collecties: &os;: Een volledige mirror van de &os; FTP server.
diff --git a/nl_NL.ISO8859-1/books/handbook/network-servers/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/network-servers/chapter.sgml index eac66f308c..1dfc4dee5c 100644 --- a/nl_NL.ISO8859-1/books/handbook/network-servers/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/network-servers/chapter.sgml @@ -1,5543 +1,5552 @@ Murray Stokely Gereorganiseerd door Siebrand Mazeland Vertaald door Netwerkdiensten Overzicht Dit hoofdstuk behandelt een aantal veelgebruikte netwerkdiensten op &unix; systemen. Er wordt ingegaan op de installatie, het instellen, testen en beheren van verschillende typen netwerkdiensten. Overal in dit hoofdstuk staan voorbeeldbestanden met instellingen waar de lezer zijn voordeel mee kan doen. Na het lezen van dit hoofdstuk weet de lezer: Hoe om te gaan met de inetd daemon; Hoe een netwerkbestandssysteem opgezet kan worden; Hoe een netwerkinformatiedienst (NIS) opgezet kan worden voor het delen van gebruikersaccounts; Hoe automatische netwerkinstellingen gemaakt kunnen worden met DHCP; Hoe een domeinnaam server opgezet kan worden; Hoe een Apache HTTP Server opgezet kan worden; Hoe een File Transfer Protocol (FTP) Server opgezet kan worden; Hoe een bestands- en printserver voor &windows; clients opgezet kan worden met Samba; Hoe datum en tijd gesynchroniseerd kunnen worden en hoe een tijdserver opgezet kan worden met het NTP protocol. Veronderstelde voorkennis: Basisbegrip van de scripts in /etc/rc; Bekend zijn met basis netwerkterminologie; Kennis van de installatie van software van derde partijen (). Chern Lee Geschreven door De <application>inetd</application> <quote>Super-Server</quote> Overzicht &man.inetd.8; wordt de internet Super-Server genoemd, omdat die verbindingen voor meerdere diensten beheert. Als door inetd een verbinding wordt ontvangen, bepaalt die voor welk programma de verbinding bedoeld is, spawnt dat proces en delegeert de socket (het programma wordt gestart met de socket van de dienst als zijn standaard invoer, uitvoer en foutbeschrijvingen). Het draaien van één instantie van inetd reduceert de load op een systeem in vergelijking met het in stand-alone modus draaien van alle daemons. inetd wordt primair gebruikt om andere daemons aan te roepen, maar het handelt een aantal triviale protocollen direct af, zoals chargen, auth en daytime. In deze paragraaf worden de basisinstellingen van inetd behandeld met de opties vanaf de commandoregel en met het instellingenbestand /etc/inetd.conf. Instellingen inetd wordt gestart door het /etc/rc.conf systeem. De optie inetd_enable staat standaard op NO, maar wordt door sysinstall vaak ingeschakeld door de instellingen van het medium beveiligingsprofiel. Door het instellen van inetd_enable="YES" of inetd_enable="NO" in /etc/rc.conf wordt inetd bij het opstarten van een systeem wel of niet ingeschakeld. Dan kunnen er ook nog een aantal commandoregelopties aan inetd meegegeven worden met de optie inetd_flags. Commandoregelopties inetd overzicht: inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a adres | hostnaam] [-p bestandsnaam] [-R rate] [instellingenbestand] -d Schakel debugging in. -l Schakel het loggen van succesvolle verbindingen in. -w Schakel TCP Wrapping voor externe diensten in (staat standaard aan). -W Schakel TCP Wrapping voor internet diensten uit inetd in (staat standaard aan). -c maximum Geeft het maximale aantal gelijktijdige verzoeken voor iedere dienst aan. De standaard is ongelimiteerd. Kan per dienst ter zijde geschoven worden met de parameter . -C rate Geeft het maximale aantal keren aan dat een dienst vanaf een bepaald IP adres per minuut aangeroepen kan worden. Kan per dienst ter zijde geschoven worden met de parameter . -R rate Geeft het maximale aantal keren aan dat een dienst per minuut aangeroepen kan worden. De standaard is 256. De instelling 0 geeft aan dat er geen limiet is. -a Geeft een of meer IP adres associaties aan. Er kan ook een hostnaam opgegeven worden, in welk geval het IPv4 of IPv6 adres dat met de hostnaam overeenkomst wordt gebruikt. Meestal wordt er een hostnaam gebruikt als inetd in een &man.jail.8; draait en de hostnaam dus overeenkomst met de &man.jail.8;-omgeving. Als er een hostnaam wordt aangegeven en zowel IPv4 als IPv6 zijn nodig, dan moeten er twee instellingen in /etc/inetd.conf gemaakt worden, voor beide protocollen een. Een TCP-gebaseerde dienst heeft bijvoorbeeld twee regels met instellingen nodig: tcp4 en tcp6 voor beide protocollen. -p Geeft het bestand aan waarin het proces ID opgeslagen moet worden. Al deze opties kunnen aan inetd meegegeven worden met de optie inetd_flags in /etc/rc.conf. Standaard staat inetd_flags op –wW, dat TCP wrapping voor de interne en externe diensten van inetd inschakelt. Voor beginnende gebruikers hoeven deze waarden meestal niet aangepast te worden of ingegeven te worden in /etc/rc.conf. Een externe dienst is een daemon buiten inetd, die wordt aangesproken als er een verbinding voor wordt ontvangen. Een interne dienst is een dienst die inetd vanuit zichzelf kan aanbieden. <filename>inetd.conf</filename> De instellingen van inetd worden beheerd in /etc/inetd.conf. Als er een wijziging wordt aangebracht in /etc/inetd.conf, dan kan inetd gedwongen worden om de instellingen opnieuw in te lezen door een HangUP signaal naar het inetd proces te sturen: <application>inetd</application> een HangUP Signaal Sturen &prompt.root; kill -HUP `cat /var/run/inetd.pid` Iedere regel in het bestand met instellingen heeft betrekking op een individuele daemon. Commentaar wordt vooraf gegaan door een #. De opmaak van /etc/inetd.conf is als volgt: service-name socket-type protocol {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] user[:group][/login-class] server-program server-program-arguments Een voorbeeldregel voor de ftpd daemon met IPv4: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l service-name Dit is de dienstnaam van een daemon. Die moet overeenkomen met een dienst uit /etc/services. Hiermee kan de poort waarop inetd moet luisteren aangegeven worden. Als er een nieuwe dienst wordt gemaakt, moet die eerst in /etc/services gezet worden. socket-type Dit is stream, dgram, raw of seqpacket. stream moet gebruikt worden voor connectie gebaseerde TCP daemons, terwijl dgram wordt gebruikt voor daemons die gebruik maken van het UDP transport protocol. protocol Een van de volgende: Protocol Toelichting tcp, tcp4 TCP IPv4 udp, udp4 UDP IPv4 tcp6 TCP IPv6 udp6 UDP IPv6 tcp46 Zowel TCP IPv4 als v6 udp46 Zowel UDP IPv4 als v6 {wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] geeft aan of de daemon die door inetd wordt aangesproken zijn eigen sockets kan afhandelen of niet. sockettypen moeten de optie gebruiken, terwijl streamsocket daemons, die meestal multi-threaded zijn, de optie horen te gebruiken. geeft meestal meerdere sockets aan een daemon, terwijl een child daemon spawnt voor iedere nieuwe socket. Het maximun aantal child daemons dat inetd mag spawnen kan ingesteld worden met de optie . Als een limiet van tien instanties van een bepaalde daemon gewenst is, dan zou er /10 achter gezet worden. Naast is er nog een andere optie waarmee het maximale aantal verbindingen van een bepaalde plaats naar een daemon ingesteld kan worden. Dat kan met . Een waarde van tien betekent hier dat er van iedere IP adres maximaal tien verbindingen naar daemon tot stand gebracht kunnen worden. Dit kan gebruikt worden om bedoeld en onbedoeld bronnengebruik van een machine te voorkomen. In dit veld is of verplicht. en zijn optioneel. Een stream-type multi-threaded daemon zonder or limieten is eenvoudigweg: nowait. Dezelfde daemon met een maximale limiet van tien daemons zou zijn: nowait/10. Dezelfde instellingen met een limiet van twintig connecties per IP adres per minuut en een totaal maximum van tien child daemons zou zijn: nowait/10/20. Deze opties worden allemaal gebruikt door de standaardinstelling voor de fingerd daemon: finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s user Dit is de gebruikersnaam waar een daemon onder draait. Daemons draaien meestal als de gebruiker root. Om veiligheidsredenen draaien sommige daemons onder de gebruiker daemon of de gebruiker met de minste rechten: nobody. server-program Het volledige pad van de daemon die uitgevoerd moet worden als er een verbinding wordt ontvangen. Als de daemon een dienst is die door inetd intern wordt geleverd, dan moet de optie gebruikt worden. server-program-arguments Deze optie werkt samen met de optie en hierin worden de argumenten ingesteld, beginnend met argv[0], die bij het starten aan de daemon worden meegegeven. Als mijndaemon -d de commandoregel is, dan zou mijndaemon -d de waarde van zijn. Hier geldt ook dat als de daemon een interne dienst is, hier de optie moet worden. Beveiliging Afhankelijk van het beveiligingsprofiel dat bij de installatie is gekozen, kunnen veel van de daemons van inetd standaard ingeschakeld zijn. Het is verstandig een daemon die niet noodzakelijk is uit te schakelen! Dat kan door een # voor de daemon in /etc/inetd.conf en dan een hangup signaal naar inetd te sturen. Sommige daemons, zoals fingerd, zijn wellicht helemaal niet gewenst omdat ze een aanvaller te veel informatie geven. Sommige daemons zijn zich niet echt bewust van beveiliging en hebben lange of niet bestaande time-outs voor verbindingspogingen. Hierdoor kan een aanvaller langzaam veel verbindingen maken met een daemon en zo beschikbare bronnen verzadigen. Het is verstandig voor die daemons de limietopties en te gebruiken. TCP wrapping staat standaard aan. Er staat meer informatie over het zetten van TCP restricties op de verschillende daemons die door inetd worden aangesproken in &man.hosts.access.5;. Allerlei daytime, time, echo, discard, chargen en auth zijn allemaal interne diensten van inetd. De dienst auth biedt identiteitsnetwerkdiensten (ident, identd) en is tot op een bepaald niveau instelbaar. Er staat meer informatie in &man.inetd.8;. Tom Rhodes Gereorganiseerd en verbeterd door Bill Swingle Geschreven door Netwerkbestandssysteem (NFS) NFS Het Netwerkbestandssysteem (Network File System) is een van de vele bestandssystemen die &os; ondersteunt. Het staat ook wel bekend als NFS. Met NFS is het mogelijk om mappen en bestanden met anderen in een netwerk te delen. Door het gebruik van NFS kunnen gebruikers en programma's bij bestanden op andere systemen op bijna dezelfde manier als bij hun eigen lokale bestanden. De grootste voordelen van NFS zijn: Lokale werkstations gebruiken minder diskruimte omdat veel gebruikte data op één machine opgeslagen kan worden en nog steeds toegankelijk is voor gebruikers via het netwerk; Gebruikers hoeven niet op iedere machine een thuismap te hebben. Thuismappen kunnen op de NFS server staan en op het hele netwerk beschikbaar zijn; Opslagapparaten als floppydisks, CDROM drives en &iomegazip; drives kunnen door andere machines op een netwerk gebruikt worden. Hierdoor kan het aantal drives met verwijderbare media in een netwerk verkleind worden. Hoe <acronym>NFS</acronym> Werkt NFS bestaat uit tenminste twee hoofdonderdelen: een server en een of meer clients. De client benadert de gegevens die op een server machine zijn opgeslagen via een netwerk. Om dit mogelijk te maken moeten er een aantal processen ingesteld en gestart worden. In &os; 4.X is het hulpprogramma portmap gebruikt in plaats van rpcbind. Dus in &os; 4.X moet elke rpcbind vervangen worden door portmap in de volgende voorbeelden. Op de server moeten de volgende daemons draaien: NFS server fileserver UNIX clients rpcbind portmap mountd nfsd Daemon Beschrijving nfsd De NFS daemon die verzoeken van de NFS clients afhandelt. mountd De NFS mountdaemon die doorgestuurde verzoeken van &man.nfsd.8; uitvoert. rpcbind Deze daemon geeft NFS clients aan welke poort de NFS server gebruikt. Op de client kan ook een daemon draaien: nfsiod. De nfsiod daemon handelt verzoeken van de NFS server af. Dit is optioneel en kan de prestaties verbeteren, maar het is niet noodzakelijk voor een normale en correcte werking. Meer informatie staat in &man.nfsiod.8;. <acronym>NFS</acronym> Instellen NFS instellen NFS instellen gaat redelijk rechtlijnig. Alle processen die moeten draaien kunnen meestarten bij het opstarten door een paar wijzigingen in /etc/rc.conf. Op de NFS server dienen de volgende opties in /etc/rc.conf te staan: rpcbind_enable="YES" nfs_server_enable="YES" mountd_flags="-r" mountd start automatisch als de NFS server is ingeschakeld. Op de client dient de volgende optie in /etc/rc.conf te staan: nfs_client_enable="YES" In het bestand /etc/exports staat beschreven welke bestandssystemen NFS moet exporteren (soms heet dat ook wel delen of sharen). Iedere regel in /etc/exports slaat op een bestandssysteem dat wordt geëxporteerd en welke machines toegang hebben tot dat bestandssysteem. Samen met machines die toegang hebben, kunnen ook toegangsopties worden aangegeven. Er zijn veel opties beschikbaar, maar hier worden er maar een paar beschreven. Alle opties staan beschreven in &man.exports.5;. Nu volgen een aantal voorbeelden voor /etc/exports: NFS export voorbeelden Het volgende voorbeeld geeft een beeld van hoe een bestandssysteem te exporteren, hoewel de instellingen afhankelijk zijn van de omgeving en het netwerk. Om bijvoorbeeld de map /cdrom te exporteren naar drie machines die dezelfde domeinnaam hebben als de server (vandaar dat de machinenamen geef domeinachtervoegsel hebben) of in /etc/hosts staan. De vlag exporteert het bestandssysteem als alleen–lezen. Door die vlag kan een ander systeem niet schrijven naar het geëxporteerde bestandssysteem. /cdrom -ro host1 host2 host3 Het volgende voorbeeld exporteert /home naar drie hosts op basis van IP adres. Dit heeft zin als er een privaat netwerk bestaat, zonder dat er een DNS server is ingesteld. Optioneel kan /etc/hosts gebruikt worden om interne hostnamen in te stellen. Er is meer informatie te vinden in &man.hosts.5;. Met de vlag mogen submappen ook mountpunten zijn. De submap wordt dan niet feitelijk gemount, maar de client mount dan alleen de submappen die verplicht of nodig zijn. /home -alldirs 10.0.0.2 10.0.0.3 10.0.0.4 Het volgende voorbeeld exporteert /a zo dat twee clients uit verschillende domeinen bij het bestandssysteem mogen. Met de vlag mag de gebruiker op het andere systeem gegevens naar het geëxporteerde bestandssysteem schrijven als root. Als de vlag niet wordt gebruikt, dan kan een gebruiker geen bestanden wijzigen op het geëxporteerde bestandssysteem, zelfs niet als een gebruiker daar root is. /a -maproot=root host.example.com box.example.org Om een client toegang te geven tot een geëxporteerd bestandssysteem, moet die client daar rechten voor hebben. De client moet daarvoor genoemd worden in /etc/exports. In /etc/exports staat iedere regel voor de exportinformatie van één bestandssysteem naar één host. Per bestandssysteem mag een host maar één keer genoemd worden en mag maar één standaard hebben. Stel bijvoorbeeld dat /usr een enkel bestandssysteem is. Dan is de volgende /etc/exports niet valide: ># Werkt niet als /usr 1 bestandssysteem is /usr/src client /usr/ports client Eén bestandssysteem, /usr, heeft twee regels waarin exports naar dezelfde host worden aangegeven, client. In deze situatie is de juiste instelling: /usr/src /usr/ports client De eigenschappen van een bestandssysteem dat naar een bepaalde host wordt geëxporteerd moeten allemaal op één regel staan. Regels waarop geen client wordt aangegeven worden behandeld als een enkele host. Dit beperkt hoe bestandssysteem geëxporteerd kunnen worden, maar dat blijkt meestal geen probleem. Het volgende voorbeeld is een valide exportlijst waar /usr en /exports lokale bestandssystemen zijn: # Export src and ports to client01 and client02, but only # client01 has root privileges on it /usr/src /usr/ports -maproot=root client01 /usr/src /usr/ports client02 # The client machines have root and can mount anywhere # on /exports. Anyone in the world can mount /exports/obj read-only /exports -alldirs -maproot=root client01 client02 /exports/obj -ro Als /etc/exports wordt aangepast, moet mountd herstart worden om de wijzigingen actief te maken. Dat kan door een HUP signaal naar het mountd proces te sturen: &prompt.root; kill -HUP `cat /var/run/mountd.pid` Het is ook mogelijk een machine te herstarten, zodat &os; alles netjes in kan stellen, maar dat is niet nodig. Het uitvoeren van de volgende commando's als root hoort hezelfde resultaat te hebben. Op de NFS server: &prompt.root; rpcbind &prompt.root; nfsd -u -t -n 4 &prompt.root; mountd -r Op de NFS client: &prompt.root; nfsiod -n 4 Nu is alles klaar om feitelijk het netwerkbestandssysteem te mounten. In de volgende voorbeelden is de naam van de server server en de naam van de client is client. Om een netwerkbestandssysteem slechts tijdelijk te mounten of om alleen te testen, kan een commando als het onderstaande als root op de client uitgevoerd worden: NFS mounten &prompt.root; mount server:/home /mnt Hiermee wordt de map /home op de server gemount op /mnt op de client. Als alles juist is ingesteld, zijn nu in /mnt op de client de bestanden van de server zichtbaar. Om een netwerkbestandssysteem iedere keer als een computer opstart te mounten, kan het bestandssysteem worden toegevoegd aan /etc/fstab file: server:/home /mnt nfs rw 0 0 Alle beschikbare opties staan in &man.fstab.5;. Mogelijkheden voor Gebruik NFS is voor veel doeleinden in te zetten. Een aantal voorbeelden: NFS gebruik Een aantal machines een CDROM of andere media laten delen. Dat is goedkoper en vaak ook handiger, bijvoorbeeld bij het installeren van software op meerdere machines; Op grote netwerken kan het praktisch zijn om een centrale NFS server in te richten, waarop alle thuismappen staan. Die thuismappen kunnen dan geëxporteerd worden, zodat gebruikers altijd dezelfde thuismap hebben, op welk werkstation ze ook aanmelden; Meerdere machines kunnen een gezamenlijke map /usr/ports/distfiles hebben. Dan is het mogelijk om een port op meerdere machines te installeren, zonder op iedere machine de broncode te hoeven downloaden. Wylie Stilwell Geschreven door Chern Lee Herschreven door Automatisch Mounten met <application>amd</application> amd automatic mounter daemon &man.amd.8; (de automatic mounter daemon) mount automatisch netwerkbestandssystemen als er aan een bestand of map binnen dat bestandssysteem wordt gerefereerd. amd unmount ook bestandssystemen die een bepaalde tijd niet gebruikt worden. Het gebruikt van amd is een aantrekkelijk en eenvoudig alternatief ten opzichte van permanente mounts, die meestal in /etc/fstab staan. amd werkt door zichzelf als NFS server te koppelen aan de mappen /host en /net. Als binnen die mappen een bestand wordt geraadpleegd, dan zoekt amd de bijbehorende netwerkmount op en mount die automatisch. /net wordt gebruikt om een geëxporteerd bestandssysteem van een IP adres te mounten, terwijl /host wordt gebruikt om een geëxporteerd bestandssysteem van een hostnaam te mounten. Het raadplegen van een bestand in /host/foobar/usr geeft amd aan dat die moet proberen de /usr export op de host foobar te mounten. Een Export Mounten met <application>amd</application> De beschikbare mounts van een netwerkhost zijn te bekijken met showmount. Om bijvoorbeeld de mounts van de host foobar te bekijken: &prompt.user; showmount -e foobar Exports list on foobar: /usr 10.10.10.0 /a 10.10.10.0 &prompt.user; cd /host/foobar/usr Zoals in het bovenstaande voorbeeld te zien is, toont showmount /usr als een export. Als er naar de map /host/foobar/usr wordt gegaan, probeert amd de hostnaam foobar te resolven en de gewenste export automatisch te mounten. amd kan gestart worden door de opstartscript door de volgende regel in /etc/rc.conf te plaatsen: amd_enable="YES" Er kunnen ook nog opties meegegeven worden aan amd met de optie amd_flags. Standaard staat amd_flags ingesteld op: amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map" In het bestand /etc/amd.map staan de standaardinstellingen waarmee exports gemount worden. In het bestand /etc/amd.conf staan een aantal van de meer gevorderde instellingen van amd. In &man.amd.8; en &man.amd.conf.5; staat meer informatie. John Lind Geschreven door Problemen bij Samenwerking met Andere Systemen Bepaalde Ethernet adapters voor ISA PC systemen kennen limieten die tot serieuze netwerkproblemen kunnen leiden, in het bijzonder met NFS. Dit probleem is niet specifiek voor &os;, maar het kan op &os; wel voor komen. Het probleem ontstaat bijna altijd als (&os;) PC systemen netwerken met high-performance werkstations, zoals van Silicon Graphics, Inc. en Sun Microsystems, Inc. De NFS mount werkt prima en wellicht lukken een aantal acties ook, maar dan ineens lijkt de server niet meer te reageren voor de client, hoewel verzoeken van en naar andere systemen gewoon verwerkt worden. Dit gebeurt op een clientsysteem, of de client nu het &os systeem is of het werkstation. Op veel systemen is er geen manier om de client netjes af te sluiten als dit probleem is ontstaan. Vaak is de enige mogelijkheid een reset van de client, omdat het probleem met NFS niet opgelost kan worden. Hoewel de enige correcte oplossing de aanschaf van een snellere en betere Ethernet adapter voor het &os; systeem is, is er zo om het probleem heen te werken dat het werkbaar is. Als &os; de server is, kan de optie gebruikt worden bij het mounten door de client. Als het &os; systeem de client is, dan dient het NFS bestandssysteem gemount te worden met de optie . Deze opties kunnen het vierde veld zijn in een regel in fstab voor automatische mounts en bij handmatige mounts met &man.mount.8; kan de parameter gebruikt worden. Soms wordt een ander probleem voor dit probleem versleten, als servers en clients zich op verschillende netwerken bevinden. Als dat het geval is, dan dient vastgesteld te worden dat routers de UDP informatie op de juiste wijze routeren, omdat er anders nooit NFS verkeer gerouteerd kan worden. In de volgende voorbeelden is fastws de host(interface)naam van een high-performance werkstation en freebox is de host(interface)naam van een &os; systeem met een Ehernet adapter die mindere prestaties levert. /sharedfs wordt het geëxporteerde NFS bestandssysteem (zie &man.exports.5;) en /project wordt het mountpunt voor het geëxporteerde bestandssysteem op de client. In sommige gevallen kunnen applicaties beter draaien als extra opties als of en gebruikt worden. Voorbeelden voor het &os; systeem (freebox) als de client in /etc/fstab op freebox: fastws:/sharedfs /project nfs rw,-r=1024 0 0 Als een handmatig mountcommando op freebox: &prompt.root; mount -t nfs -o -r=1024 fastws:/sharedfs /project Voorbeelden voor het &os; systeem als de server in /etc/fstab op fastws: freebox:/sharedfs /project nfs rw,-w=1024 0 0 Als een handmatig mountcommando op fastws: &prompt.root; mount -t nfs -o -w=1024 freebox:/sharedfs /project Bijna iedere 16–bit Ethernet adapter werkt zonder de hierboven beschreven restricties op de lees- en schrijfgrootte. Voor wie het wil weten wordt nu beschreven wat er gebeurt als de fout ontstaan, wat ook duidelijk maakt waarom het niet hersteld kan worden. NFS werkt meestal met een blockgrootte van 8 K (hoewel het mogelijk is dat er kleinere fragmenten worden verwerkt). Omdat de maximale grootte van een Ethernet pakket rond de 1500 bytes ligt, wordt een block opgesplitst in meerdere Ethernet pakketten, hoewel het hoger in de code nog steeds één eenheid is, en wordt ontvangen, samengevoegd en bevestigd als een eenheid. De high-performance werkstations kunnen de pakketten waaruit een NFS eenheid bestaat bijzonder snel naar buiten pompen. Op de kaarten met minder capaciteit worden de eerdere pakketten door de latere pakketten van dezelfde eenheid ingehaald voordat ze bij die host zijn aangekomen en daarom kan de eenheid niet worden samengesteld en bevestigd. Als gevolg daarvan ontstaat er op het werkstation een time-out en probeert die de eenheid opnieuw te sturen, maar dan weer de hele eenheid van 8 K, waardoor het proces wordt herhaald, ad infinitum. Door de grootte van de eenheid kleiner te houden dan de grootte van een Ethernet pakket, is het zeker dat elk Ethernet pakket dat compleet is aangekomen bevestigd kan worden, zodat de deadlock niet ontstaat. Toch kan een PC systeem nog wel overrompeld worden als high-performance werkstations er op inhakken, maar met de betere netwerkkaarten valt het dan in ieder geval niet om door de NFS eenheden. Als het systeem toch wordt overrompeld, dan worden de betrokken eenheden opnieuw verstuurd en dan is de kans groot dat ze worden ontvangen, samengevoegd en bevestigd. Bill Swingle Geschreven door Eric Ogren Verbeterd door Udo Erdelhoff Netwerkinformatiesysteem (NIS/YP) Wat Is Het? NIS Solaris HP-UX AIX Linux NetBSD OpenBSD NIS, dat staat voor Netwerkinformatiediensten (Network Information Services), is ontwikkeld door Sun Microsystems om het beheer van &unix; (origineel &sunos;) systemen te centraliseren. Tegenwoordig is het eigenlijk een industriestandaard geworden. Alle grote &unix; achtige systemen (&solaris;, HP-UX, &aix;, &linux;, NetBSD, OpenBSD, &os;, enzovoort) ondersteunen NIS. yellow pagesNIS NIS stond vroeger bekend als Yellow Pages, maar vanwege problemen met het handelsmerk heeft Sun de naam veranderd. De oude term, en yp, wordt nog steeds vaak gebruikt. NIS domeinen Het is een op RPC gebaseerd client/server systeem waarmee een groep machines binnen een NIS domein een gezamenlijke set met instellingenbestanden kan delen. Hierdoor kan een beheerder NIS systemen opzetten met een minimaal aantal instellingen en vanaf een centrale lokatie instellingen toevoegen, verwijderen en wijzigen. Windows NT Het is te vergelijken met het &windowsnt; domeinsysteem en hoewel de interne implementatie van de twee helemaal niet overeenkomt, is de basisfunctionaliteit vergelijkbaar. Termen en Processen om te Onthouden Er zijn een aantal termen en belangrijke gebruikersprocessen die een rol spelen bij het implementeren van NIS op &os;, zowel bij het maken van een NIS server als bij het maken van een systeem dan NIS client is: rpcbind portmap Term Beschrijving NIS domeinnaam Een NIS master server en al zijn clients (inclusief zijn slave master) hebben een NIS domeinnaan. Vergelijkbaar met een &windowsnt; domeinnaam, maar de NIS domeinnaam heeft niets te maken met DNS. rpcbind Moet draaien om RPC (Remote Procedure Call in te schakelen, een netwerkprotocol dat door NIS gebruikt wordt). Als rpcbind niet draait, dan kan een NIS server niet draaien en kan een machine ook geen NIS client zijn (In &os; 4.X wordt portmap in plaats van rpcbind). ypbind Verbindt een NIS client aan zijn NIS server. Dat gebeurt door met de NIS domeinnaam van het systeem en door het gebruik van RPC te verbinden met de server. ypbind is de kern van client-server communicatie in een NIS omgeving. Als ypbind op een machine stopt, dan kan die niet meer bij de NIS server komen. ypserv Hoort alleen te draaien op NIS servers. Dit is het NIS server proces zelf. Als &man.ypserv.8; stopt, dan kan de server niet langer reageren op NIS verzoeken (hopelijk is er dan een slave server om het over te nemen). Er zijn een aantal implementaties van NIS, maar niet die op &os;, die geen verbinding met een andere server proberen te maken als de server waarmee ze verbonden waren niet meer reageert. In dat geval is vaak het enige dat werkt het server proces herstarten (of zelfs de hele server) of het ypbind proces op de client. rpc.yppasswdd Nog een proces dat alleen op NIS master servers hoort te draaien. Dit is een daemon waarbij NIS clients hun NIS wachtwoorden kunnen wijzigen. Als deze daemon niet draait, moeten gebruikers aanmelden op de NIS master server en daar hun wachtwoord wijzigen. Hoe Werkt Het? Er zijn drie typen hosts in een NIS omgeving: master servers, slave servers en clients. Servers zijn het centrale depot voor instellingen voor een host. Master servers bevatten de geauthoriseerd kopie van die informatie, terwijl slave servers die informatie spiegelen voor redundantie. Clients verlaten zich op de servers om hun die informatie ter beschikking te stellen. Op deze manier kan informatie uit veel bestanden gedeeld worden. De bestanden master.passwd, group en hosts worden meestal via NIS gedeeld. Als een proces op een client informatie nodig heeft die normaliter in een van die lokale bestanden staat, dan vraagt die het in plaats daarvan aan de NIS servers waarmee hij verbonden is. Soorten Machines NIS master server Een NIS master server. Deze server onderhoudt, analoog aan een &windowsnt; primary domain controller, de bestanden die door alle NIS clients gebruikt worden. De bestanden passwd, group en andere bestanden die door de NIS clients gebruikt worden staan op de master server. Het is mogelijk om één machine master server te laten zijn voor meerdere NIS domeinen. Dat wordt in deze inleiding echter niet beschreven, omdat die uitgaat van een relatief kleine omgeving. NIS slave server NIS slave servers. Deze zijn te vergelijken met &windowsnt; backup domain controllers. NIS slave servers beheren een kopie van de bestanden met gegevens op de NIS master. NIS slave servers bieden redundantie, die nodig is in belangrijke omgevingen. Ze helpen ook om de belasting te verdelen met de master server: NIS client maken altijd een verbinding met de NIS server die het eerst reageert en dat geldt ook voor antwoorden van slave servers. NIS client NIS clients. NIS clients authenticeren, net als de meeste &windowsnt; werkstations, tegen de NIS server (of de &windowsnt; domain controller in het geval van &windowsnt; werkstations) bij het aanmelden. NIS/YP Gebruiken Dit onderdeel behandelt het opzetten van een NIS voorbeeldomgeving. Dit onderdeel veronderstelt dat &os; 3.3 of later draait. De nu volgende instructies werken waarschijnlijk voor iedere versie van &os; hoger dan 3.0, maar dat hoeft niet waar te zijn. Plannen Er wordt uitgegaan van een beheerder van een klein universiteitslab. Dat lab, dat bestaat uit &os; machines, kent op dit moment geen centraal beheer. Iedere machine heeft zijn eigen /etc/passwd en /etc/master.passwd. Die bestanden worden alleen met elkaar in lijn gehouden door handmatige handelingen. Als er op dit moment een gebruiker aan het lab wordt toegevoegd, moet adduser op alle 15 machines gedraaid worden. Dat moet natuurlijk veranderen en daarom is besloten het lab in te richten met NIS, waarbij twee machines als server worden gebruikt. Het lab ziet er ongeveer als volgt uit: Machinenaam IP adres Rol Machine ellington 10.0.0.2 NIS master coltrane 10.0.0.3 NIS slave basie 10.0.0.4 Wetenschappelijk werkstation bird 10.0.0.5 Client machine cli[1-11] 10.0.0.[6-17] Andere client machines Bij het voor de eerste keer instellen van een NIS schema is het verstandig eerst na te denken over hoe dat opgezet moet worden. Hoe groot een netwerk ook is, er moeten een aantal beslissingen gemaakt worden. Een NIS Domeinnaam Kiezen NIS domeinnaam Dit is wellicht niet de bekende domeinnaam. Daarom wordt het ook de NIS domeinnaam genoemd. Bij de broadcast van een client om informatie wordt ook de naam van het NIS domein waar hij onderdeel van uitmaakt meegezonden. Zo kunnen meerdere servers op een netwerk bepalen of er antwoord gegeven dient te worden op een verzoek. De NIS domeinnaam is kan voorgesteld worden als de naam van een groep hosts op op een of andere manier aan elkaar gerelateerd zijn. Sommige organisaties kiezen hun internet domeinnaam als NIS domeinnaam. Dat wordt niet aangeraden omdat het voor verwarring kan zorgen bij het debuggen van netwerkproblemen. De NIS domeinnaam moet uniek zijn binnen een netwerk en het is handig als die de groep machines beschrijft waarvoor hij geldt. Zo kan bijvoorbeeld de Financiële afdeling van Acme Inc. als NIS domeinnaam acme-fin hebben. In dit voorbeeld wordt de naam test-domain gekozen. SunOS Sommige besturingssystemen gebruiken echter (met name &sunos;) hun NIS domeinnaam als hun internet domeinnaam. Als er machines zijn op een netwerk die deze restrictie kennen, dan moet de internet domeinnaam als de naam voor het NIS domainnaam gekozen worden. Systeemeisen Bij het kiezen van een machine die als NIS server wordt gebruikt zijn er een aantal aandachtspunten. Een van de onhandige dingen aan NIS is de afhankelijkheid van de clients van de server. Als een client de server voor zijn NIS domein niet kan bereiken, dan wordt die machine vaak onbruikbaar. Door het gebrek aan gebruiker- en groepsinformatie bevriezen de meeste systemen. Daarom moet er een machine gekozen worden die niet vaak herstart hoeft te worden of wordt gebruikt voor ontwikkeling. De NIS server is in het meest ideale geval een alleenstaande server die als enige doel heeft NIS server te zijn. Als een netwerk niet zwaar wordt gebruikt, kan de NIS server op een machine die ook andere diensten aanbiedt gezet worden, maar het blijft belangrijk om ervan bewust te zijn dat als de NIS server niet beschikbaar is, dat nadelige invloed heeft op alle NIS clients. NIS Servers De hoofdversies van alle NIS informatie staan opgeslagen op één machine die de NIS master server heet. De databases waarin de informatie wordt opgeslagen heten NIS maps. In &os; worden die maps opgeslagen in /var/yp/[domainnaam] waar [domeinnaam] de naam is van het NIS domein dat wordt bediend. Een enkele NIS server kan tegelijkertijd meerdere NIS domeinen ondersteunen en het is dus mogelijk dat er meerdere van zulke mappen zijn, een voor ieder ondersteund domein. Ieder domein heeft zijn eigen onafhankelijke set maps. In NIS master en slave servers worden alle NIS verzoeken door de ypserv daemon afgehandeld. ypserv is verantwoordelijk voor het ontvangen van inkomende verzoeken van NIS clients, het vertalen van de gevraagde domeinnaam en mapnaam naar een pad naar het corresponderende databasebestand en het terugsturen van de database naar de client. Een NIS Master Server Opzetten NIS server opzetten Het opzetten van een master NIS server kan erg eenvoudig zijn, afhankelijk van de behoeften. &os; heeft ondersteuning voor NIS als basisfunctie. Alleen de volgende regels hoeven aan /etc/rc.conf toegevoegd te worden en &os; doet de rest: nisdomainname="test-domain" Deze regel stelt de NIS domainnaam in op test-domain bij het instellen van het netwerk (bij het opstarten). nis_server_enable="YES" Dit geeft &os; aan de NIS server processen te starten als het netwerk de volgende keer wordt opgestart. nis_yppasswdd_enable="YES" Dit schakelt de dameon rpc.yppasswdd in die, zoals al eerder aangegeven, clients toestaat om hun NIS wachtwoord vanaf een client machine te wijzigen. Afhankelijk van de inrichting van NIS, kunnen er nog meer instellingen nodig zijn. In het onderdeel NIS Servers die ook NIS Clients Zijn staan meer details. Nu hoeft alleen /etc/netstart als superuser uitgevoerd te worden. Dat stelt alles in met gebruikmaking van de waarden uit /etc/rc.conf. NIS Maps Initialiseren NIS maps Die NIS maps zijn databasebestanden die in de map /var/yp staan. Ze worden gemaakt uit de bestanden met instellingen uit de map /etc van de NIS master, met één uitzondering: /etc/master.passwd. Daar is een goede reden voor, want het is niet wenselijk om de wachtwoorden voor root en andere administratieve accounts naar alle servers in het NIS domein te sturen. Daar moet voor het initialiseren van de NIS maps het volgende uitgevoerd worden: &prompt.root; cp /etc/master.passwd /var/yp/master.passwd &prompt.root; cd /var/yp &prompt.root; vi master.passwd Dan horen alle systeemaccounts verwijderd te worden (bin, tty, kmem, games, enzovoort) en alle overige accounts waarvoor het niet wenselijk is dat ze op de NIS clients terecht komen (bijvoorbeeld root en alle andere UID 0 (superuser) accounts). /var/yp/master.passwd hoort niet te lezen te zijn voor een groep of voor de wereld (dus modus 600)! Voor het aanpassen van de rechten kan chmod gebruikt worden. Tru64 UNIX Als dat is gedaan, kunnen de NIS maps geïnitialiseerd worden. Bij &os; zit een script ypinit waarmee dit kan (in de hulppagina staat meer informatie). Dit script is beschikbaar op de meeste &unix; besturingssystemen, maar niet op allemaal. Op Digital UNIX/Compaq Tru64 UNIX heet het ypsetup. Omdat er maps voor een NIS master worden gemaakt, wordt de optie meegegeven aan ypinit. Aangenomen dat de voorgaande stappen zijn uitgevoerd, kunnen de NIS maps gemaakt worden op de volgende manier: ellington&prompt.root; ypinit -m test-domain Server Type: MASTER Domain: test-domain Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. At this point, we have to construct a list of this domains YP servers. rod.darktech.org is already known as master server. Please continue to add any slave servers, one per line. When you are done with the list, type a <control D>. master server : ellington next host to add: coltrane next host to add: ^D The current list of NIS servers looks like this: ellington coltrane Is this correct? [y/n: y] y [..uitvoer van het maken van de maps..] NIS Map update completed. ellington has been setup as an YP master server without any errors. ypinit hoort /var/yp/Makefile gemaakt te hebben uit /var/yp/Makefile.dist. Als dit bestand is gemaakt, neemt dat bestand aan dat er in een omgeving met een enkele NIS server wordt gewerkt met alleen &os; machines. Omdat test-domain ook een slave server bevat, dient /var/yp/Makefile gewijzigd te worden: ellington&prompt.root; vi /var/yp/Makefile Als de onderstaande regel niet al uitgecommentarieerd is, dient dat alsnog te gebeuren: NOPUSH = "True" Een NIS Slave Server Opzetten NIS slave server Het opzetten van een NIS slave server is nog makkelijker dan het opzetten van de master. Dit kan door aan te melden op de slave server en net als voor de master server /etc/rc.conf te wijzigen. Het enige verschil is dat nu de optie gebruikt wordt voor het draaien van ypinit. Met de optie moet ook de naam van de NIS master meegegven worden. Het commando ziet er dus als volgt uit: coltrane&prompt.root; ypinit -s ellington test-domain Server Type: SLAVE Domain: test-domain Master: ellington Creating an YP server will require that you answer a few questions. Questions will all be asked at the beginning of the procedure. Do you want this procedure to quit on non-fatal errors? [y/n: n] n Ok, please remember to go back and redo manually whatever fails. If you don't, something might not work. There will be no further questions. The remainder of the procedure should take a few minutes, to copy the databases from ellington. Transferring netgroup... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byuser... ypxfr: Exiting: Map successfully transferred Transferring netgroup.byhost... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byuid... ypxfr: Exiting: Map successfully transferred Transferring passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring group.bygid... ypxfr: Exiting: Map successfully transferred Transferring group.byname... ypxfr: Exiting: Map successfully transferred Transferring services.byname... ypxfr: Exiting: Map successfully transferred Transferring rpc.bynumber... ypxfr: Exiting: Map successfully transferred Transferring rpc.byname... ypxfr: Exiting: Map successfully transferred Transferring protocols.byname... ypxfr: Exiting: Map successfully transferred Transferring master.passwd.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byname... ypxfr: Exiting: Map successfully transferred Transferring networks.byaddr... ypxfr: Exiting: Map successfully transferred Transferring netid.byname... ypxfr: Exiting: Map successfully transferred Transferring hosts.byaddr... ypxfr: Exiting: Map successfully transferred Transferring protocols.bynumber... ypxfr: Exiting: Map successfully transferred Transferring ypservers... ypxfr: Exiting: Map successfully transferred Transferring hosts.byname... ypxfr: Exiting: Map successfully transferred coltrane has been setup as an YP slave server without any errors. Don't forget to update map ypservers on ellington. Nu hoort er een map /var/yp/test-domain te zijn waarin kopieë van de NIS master server maps staan. Die moeten bijgewerkt blijven. De volgende regel in /etc/crontab op de slave servers regelt dat: 20 * * * * root /usr/libexec/ypxfr passwd.byname 21 * * * * root /usr/libexec/ypxfr passwd.byuid Met de bovenstaande twee regels wordt de slave gedwongen zijn maps met de maps op de master server te synchroniseren. Hoewel dit niet verplicht is, omdat de master server probeert veranderingen aan de NIS maps door te geven aan zijn slaves, is het wel verstandig om een slave tot bijwerken te dwingen, omdat wachtwoordinformatie van vitaal belang is voor systemen die van de server afhankelijk zijn. Dit is des te belangrijker op drukke netwerken, omdat daar het bijwerken van maps niet altijd compleet afgehandeld hoeft te worden. Nu kan ook op de slave server het commando /etc/netstart uitgevoerd worden, dat op zijn beurt de NIS server start. NIS Clients Een NIS client maakt wat heet een verbinding (binding) met een NIS server met de ypbind daemon. ypbind controleert het standaarddomein van het systeem (zoals ingesteld met domainname) en begint met het broadcasten van RPC verzoeken op het lokale netwerk. Die verzoeken bevatten de naam van het domein waarvoor ypbind een binding probeert te maken. Als een server die is ingesteld om het gevraagde domein te bedienen een broadcast ontvangt, dan antwoordt die aan ypbind dat dan het IP adres van de server opslaat. Als er meerdere servers beschikbaar zijn, een master en bijvoorbeeld meerdere slaves, dan gebruikt ypbind het adres van de eerste server die antwoord geeft. Vanaf dat moment stuurt de client alle NIS verzoeken naar die server. ypbind pingt de server zo nu en dan om te controleren of die nog draait. Als er na een bepaalde tijd geen antwoord komt op een ping, dan markeert ypbind het domein als niet verbonden en begint het broadcasten opnieuw, in de hoop dat er een andere server wordt gelocaliseerd. Een NIS Client Opzetten NIS client instellen Het opzetten van een &os; machine als NIS client is redelijk doorzichtig: Wijzig /etc/rc.conf en voeg de volgende regels toe om de NIS domeinnaam in te stellen en ypbind mee te laten starten bij het starten van het netwerk: nisdomainname="test-domain" nis_client_enable="YES" Om alle mogelijke regels voor accounts uit de NIS server te halen, dienen alle gebruikersaccounts uit /etc/master.passwd verwijderd te worden en dient met vipw de volgende regel aan het einde van het bestand geplaatst te worden: +::::::::: Door deze regel wordt alle geldige accounts in de password map van de NIS server toegang gegeven. Er zijn veel manieren om de NIS client in te stellen door deze regel te veranderen. In het onderdeel netgroups hieronder staat meer informatie. Zeer gedetailleerde informatie staat in het boek NFS en NIS beheren van O'Reilly. Er moet tenminste één lokale account behouden blijven (dus niet geïmporteerd via NIS) in /etc/master.passwd en die hoort ook lid te zijn van de groep wheel. Als er iets mis is met NIS, dan kan die account gebruikt worden om via het netwerk aan te melden, root te worden en het systeem te repareren. Om alle groepen van de NIS server te importeren, kan de volgende regel aan /etc/group toegevoegd worden: +:*:: Na het afronden van deze stappen zou met ypcat passwd de passwd map van de NIS server te zien moeten zijn. NIS Beveiliging In het algemeen kan iedere netwerkgebruiker een RPC verzoek doen uitgaan naar &man.ypserv.8; en de inhoud van de NIS maps ontvangen, mits die gebruiker de domeinnaam kent. Omdat soort ongeautoriseerde transacties te voorkomen, ondersteunt &man.ypserv.8; de optie securenets, die gebruikt kan worden om de toegang te beperken tot een opgegeven aantal hosts. Bij het opstarten probeert&man.ypserv.8; de securenets informatie te laden uit het bestand /var/yp/securenets. Dit pad kan verschillen, afhankelijk van het pad dat opgegeven is met de optie . Dit bestand bevat regels die bestaan uit een netwerkspecificatie en een netwerkmasker, gescheiden door witruimte. Regels die beginnen met # worden als commentaar gezien. Een voorbeeld van een securenetsbestand zou er zo uit kunnen zien: # allow connections from local host -- mandatory 127.0.0.1 255.255.255.255 # allow connections from any host # on the 192.168.128.0 network 192.168.128.0 255.255.255.0 # allow connections from any host # between 10.0.0.0 to 10.0.15.255 # this includes the machines in the testlab 10.0.0.0 255.255.240.0 Als &man.ypserv.8; een verzoek ontvangt van een adres dat overeenkomt met een van de bovenstaande regels, dan wordt dat verzoek normaal verwerkt. Als er geen enkele regel op het verzoek van toepassing is, dan wordt het verzoek genegeerd en wordt er een waarschuwing gelogd. Als het bestand /var/yp/securenets niet bestaat, dan accepteert ypserv verbindingen van iedere host. Het programma ypserv ondersteunt ook het pakket TCP Wrapper van Wietse Venema. Daardoor kan een beheerder de instellingenbestanden van TCP Wrapper gebruiken voor toegangsbeperking in plaats van /var/yp/securenets. Hoewel beide methoden van toegangscontrole enige vorm van beveiliging bieden, zijn ze net als de privileged port test kwetsbaar voor IP spoofing aanvallen. Al het NIS gerelateerde verkeer hoort door een firewall tegengehouden te worden. Servers die gebruik maken van /var/yp/securenets kunnen wellicht legitieme verzoeken van NIS clients weigeren als die gebruik maken van erg oude TCP/IP implementaties. Sommige van die implementaties zetten alle host bits op nul als ze een broadcast doen en/of kijken niet naar het subnetmasker als ze het broadcastadres berekenen. Hoewel sommige van die problemen opgelost kunnen worden door de instellingen op de client aan te passen, zorgen andere problemen voor het noodgedwongen niet langer kunnen gebruiker van NIS voor die client of het niet langer gebruiken van /var/yp/securenets. Het gebruik van /var/yp/securenets op een server met zo'n oude implementatie van TCP/IP is echt een slecht idee en zal leiden tot verlies van NIS functionaliteit voor grote delen van een netwerk. tcpwrapper Het gebruik van het TCP Wrapper pakket leidt tot langere wachttijden op de NIS server. De extra vertraging kan net lang genoeg zijn om een timeout te veroorzaken in clientprogramma's, in het bijzonder als het netwerk druk is of de NIS server traag is. Als een of meer clients last hebben van dat symptoom, dan is het verstandig om de clientsystemen in kwestie NIS slave server te maken en naar zichzelf te laten wijzen. Aanmelden voor Bepaalde Gebruiker Blokkeren In het lab staat de machine basie, die alleen faculteitswerkstation hoort te zijn. Het is niet gewenst die machine uit het NIS domein te halen, maar het passwd bestand op de master NIS server bevat nu eenmaal accounts voor zowel de faculteit als de studenten. Hoe kan dat opgelost worden? Er is een manier om het aanmelden van specifieke gebruikers op een machine te weigeren, zelfs als ze in de NIS database staan. Daarvoor hoeft er alleen maar username aan het einde van /etc/master.passwd op de client machine toegevoegd te worden, waar username de gebruikersnaam van de gebruiker die niet mag aanmelden is. Dit gebeurt bij voorkeur met vipw, omdat vipw de wijzigingen aan /etc/master.passwd controleert en ook de wachtwoord database opnieuw bouwt na het wijzigen. Om bijvoorbeeld de gebruiker bill aan te kunnen laten aanmelden op basie: basie&prompt.root; vipw [add -bill to the end, exit] vipw: rebuilding the database... vipw: done basie&prompt.root; cat /etc/master.passwd root:[password]:0:0::0:0:The super-user:/root:/bin/csh toor:[password]:0:0::0:0:The other super-user:/root:/bin/sh daemon:*:1:1::0:0:Owner of many system processes:/root:/sbin/nologin operator:*:2:5::0:0:System &:/:/sbin/nologin bin:*:3:7::0:0:Binaries Commands and Source,,,:/:/sbin/nologin tty:*:4:65533::0:0:Tty Sandbox:/:/sbin/nologin kmem:*:5:65533::0:0:KMem Sandbox:/:/sbin/nologin games:*:7:13::0:0:Games pseudo-user:/usr/games:/sbin/nologin news:*:8:8::0:0:News Subsystem:/:/sbin/nologin man:*:9:9::0:0:Mister Man Pages:/usr/share/man:/sbin/nologin bind:*:53:53::0:0:Bind Sandbox:/:/sbin/nologin uucp:*:66:66::0:0:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico xten:*:67:67::0:0:X-10 daemon:/usr/local/xten:/sbin/nologin pop:*:68:6::0:0:Post Office Owner:/nonexistent:/sbin/nologin nobody:*:65534:65534::0:0:Unprivileged user:/nonexistent:/sbin/nologin +::::::::: -bill basie&prompt.root; Udo Erdelhoff Geschreven door Netgroups Gebruiken netgroups De methode uit het vorige onderdeel werkt prima als er maar voor een beperkt aantal gebruikers en/of machines speciale regels nodig zijn. Op grotere netwerken gebeurt het gewoon dat er wordt vergeten om een aantal gebruikers de aanmeldrechten op gevoelige machines te ontnemen of dat zelfs iedere individuele machine aangepast moet worden, waardoor het voordeel van NIS teniet wordt gedaan: centraal beheren. De ontwikkelaars van NIS hebben dit probleem opgelost met netgroups. Het doel en de semantiek kunnen vergeleken worden met de normale groepen die gebruikt worden op &unix; bestandssystemen. De belangrijkste verschillen zijn de afwezigheid van een numeriek ID en de mogelijkheid om een netgroup aan te maken die zowel gebruikers als andere netgroups bevat. Netgroups zijn ontwikkeld om gebruikt te worden voor grote, complexe netwerken met honderden gebruikers en machines. Aan de ene kant is dat iets Goeds. Aan de andere kant is het wel complex en bijna onmogelijk om netgroups met een paar eenvoudige voorbeelden uit te leggen. Dat probleem wordt in de rest van dit onderdeel duidelijk gemaakt. Stel dat de succesvolle implementatie van NIS in het lab de interesse heeft gewekt van een centrale beheerclub. De volgende taak is het uitbreiden van het NIS domein met een aantal andere machines op de campus. De onderstaande twee tabellen bevatten de namen van de nieuwe gebruikers en de nieuwe machines met een korte beschijving. Gebruikersna(a)m(en) Beschrijving alpha, beta Gewone medewerkers van de IT afdeling charlie, delta Junior medewerkers van de IT afdeling echo, foxtrott, golf, ... Gewone medewerkers able, baker, ... Stagiairs Machinena(a)m(en) Beschrijving war, death, famine, pollution De belangrijkste servers. Alleen senior medewerkers van de IT afdeling mogen hierop aanmelden. pride, greed, envy, wrath, lust, sloth Minder belangrijke servers. Alle leden van de IT afdeling mogen aanmelden op deze machines. one, two, three, four, ... Gewone werkstations. Alleen echte medewerkers mogen op deze machines aanmelden. trashcan Een erg oude machine zonder kritische data. Zelfs de stagiair mag deze doos gebruiken. Als deze restricties ingevoerd worden door iedere gebruiker afzonderlijk te blokkeren, dan wordt er een -user regel per systeem toegevoegd aan de passwd voor iedere gebruiker die niet mag aanmelden op dat systeem. Als er maar één regel wordt vergeten, kan dat een probleem opleveren. Wellicht lukt het nog dit juist in te stellen bij de bouw van een machine, maar het wordt echt vergeten de regels toe te voegen voor nieuwe gebruikers in de produktiegase. Murphy was tenslotte een optimist. Het gebruik van netgroups biedt in deze situatie een aantal voordelen. Niet iedere gebruiker hoeft separaat afgehandeld te worden. Een gebruik kan aan een of meer groepen worden toegevoegd en aanmelden kan voor alle leden van zo'n groep worden toegestaan of geweigerd. Als er een nieuwe machine wordt toegevoegd, dan hoeven alleen de aanmeldrestricties voor de netgroups te worden ingesteld. Als er een nieuwe gebruiker wordt toegevoegd, dan hoeft die alleen maar aan de juiste netgroups te worden toegevoegd. Die veranderingen zijn niet van elkaar afhankelijk: geen voor iedere combinatie van gebruiker en machine moet het volgende .... Als de NIS opzet zorgvuldig is gepland, dan hoeft er maar één instellingenbestand gewijzigd te worden om toegang tot machines te geven of te ontnemen. De eerst stap is het initialiseren van de NIS map netgroup. &man.ypinit.8; van &os; maakt deze map niet standaard, maar als die is gemaakt, ondersteunt de NIS implementatie hem wel. Een lege map wordt als volgt gemaakt: ellington&prompt.root; vi /var/yp/netgroup Nu kan hij gevuld worden. In het gebruikte voorbeeld zijn tenminste vier netgroups: IT medewerkers, IT junioren, gewone medewerkers en stagiars. IT_MW (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) USERS (,echo,test-domain) (,foxtrott,test-domain) \ (,golf,test-domain) STAGS (,able,test-domain) (,baker,test-domain) IT_MW, IT_APP enzovoort, zijn de namen van de netgroups. Iedere groep tussen haakjes bevat een of meer gebruikersnamen voor die groep. De drie velden binnen een groep zijn: De na(a)m(en) van de host(s) waar de volgende onderdelen geldig zijn. Als er geen hostnaam wordt opgegeven dan is de regel geldig voor alle hosts. Als er wel een hostnaam wordt opgegeven, dan wordt een donker, spookachtig en verwarrend domein betreden. De naam van de account die bij deze netgroup hoort. Het NIS domein voor de account. Er kunnen accounts uit andere NIS domeinen geïmporteerd worden in een netgroup als een beheerder zo ongelukkig is meerdere NIS domeinen te hebben. Al deze velden kunnen jokerkarakters bevatten. Details daarover staan in &man.netgroup.5;. netgroups De naam van een netgroup mag niet langer zijn dan acht karakters, zeker niet als er andere besturingssystemen binnen een NIS domein worden gebruikt. De namen zijn hoofdlettergevoelig: alleen hoofdletters gebruiken voor de namen van netgroups is een makkelijke manier om onderscheid te kunnen maken tussen gebruikers-, machine- en netgroupnamen. Sommige NIS clients (andere dan die op &os; draaien) kunnen niet omgaan met netgroups met veel leden. Sommige oudere versies van &sunos; gaan bijvoorbeeld lastig doen als een netgroup meer dan 15 leden heeft. Dit kan omzeild worden door meerdere sub-netgroups te maken met 15 gebruikers of minder en een echte netgroup die de sub-netgroups bevat: BIGGRP1 (,joe1,domain) (,joe2,domain) (,joe3,domain) [...] BIGGRP2 (,joe16,domain) (,joe17,domain) [...] BIGGRP3 (,joe31,domain) (,joe32,domain) BIGGROUP BIGGRP1 BIGGRP2 BIGGRP3 Dit proces kan herhaald worden als er meer dan 225 gebruikers in een netgroup moeten. Het activeren en distribueren van de nieuwe NIS map is eenvoudig: ellington&prompt.root; cd /var/yp ellington&prompt.root; make Hiermee worden drie nieuwe NIS maps gemaakt: netgroup, netgroup.byhost en netgroup.byuser. Met &man.ypcat.1; kan bekeken worden op de nieuwe NIS maps beschikbaar zijn: ellington&prompt.user; ypcat -k netgroup ellington&prompt.user; ypcat -k netgroup.byhost ellington&prompt.user; ypcat -k netgroup.byuser De uitvoer van het eerste commando hoort te lijken op de inhoud van /var/yp/netgroup. Het tweede commando geeft geen uitvoer als er geen host-specifieke netgroups zijn ingesteld. Het derde commando kan gebruikt worden om een lijst van netgroups voor een gebruiker op te vragen. Het instellen van de client is redelijk eenvoudig. Om de server war in te stellen hoeft alleen met &man.vipw.8; de volgende regel in de regel daarna vervangen te worden: +::::::::: Vervang de bovenstaande regel in de onderstaande. +@IT_MW::::::::: Nu worden alleen de gebruikers die in de netgroup IT_MW geïmporteerd in de wachtwoord database van de host war, zodat alleen die gebruikers kunnen aanmelden. Helaas zijn deze beperkingen ook van toepassing op de functie ~ van de shell en alle routines waarmee tussen gebruikersnamen en numerieke gebruikers ID's wordt gewisseld. Met andere woorden: cd ~user werkt niet, ls –l toont het numerieke ID in plaats van de gebruikersnaam en find . –user joe –print faalt met de foutmelding No such user. Om dit te repareren moeten alle gebruikers geïmporteerd worden, zonder ze het recht te geven aan te melden op een server. Dit kan gedaan worden door nog een regel aan /etc/master.passwd toe te voegen: +:::::::::/sbin/nologin Dit betekent importeer alle gebruikers, maar vervang de shell door /sbin/nologin. Ieder veld in een passwd regel kan door een standaardwaarde vervangen worden in /etc/master.passwd. De regel +:::::::::/sbin/nologin moet na +@IT_MW::::::::: komen. Anders krijgen alle gebruikers die uit NIS komen /sbin/nologin als aanmeldshell. Na deze wijziging hoeft er nog maar één NIS map gewijzigd te worden als er een nieuwe medewerker komt bij de IT afdeling. Dezelfde aanpak kan gebruikt worden voor de minder belangrijke servers door de oude regel +::::::::: in de lokale versie van /etc/master.passwd door iets als het volgende te vervangen: +@IT_MW::::::::: +@IT_APP::::::::: +:::::::::/sbin/nologin Voor normale werkstations zijn het de volgende regels: +@IT_MW::::::::: +@USERS::::::::: +:::::::::/sbin/nologin En dat zou allemaal leuk en aardig zijn als er niet na een paar weken een beleidsverandering komt: de IT afdeling gaat stagiairs aannemen. De IT stagiairs mogen de normale werkstations en de minder belangrijke servers gebruiken en de junior beheerders mogen gaan aanmelden op de hoofdservers. Dat kan door een nieuwe groep IT_STAG te maken en de nieuwe IT stagiairs toe te voegen aan die netgroup en dan de instellingen op iedere machine te gaan veranderen. Maar zoals het spreekwoord zegt: Fouten in een centrale planning leiden tot complete chaos. Deze situaties kunnen voorkomen worden door gebruik te maken van de mogelijkheid in NIS om netgroups in netgroups op te nemen. Het is mogelijk om rol-gebaseerde netgroups te maken. Er kan bijvoorbeeld een netgroup BIGSRV gemaakt worden om het aanmelden op de belangrijke servers te beperken en er kan een andere netgroup SMALLSRV voor de minder belangrijke servers zijn en een derde netgroup met de naam USERBOX voor de normale werkstations. Al die netgroups kunnen de netgroups bevatten die op die machines mogen aanmelden. De nieuwe regels in de NIS map netgroup zien er dan zo uit: BIGSRV IT_MW IT_APP SMALLSRV IT_MW IT_APP ITSTAG USERBOX IT_MW ITSTAG USERS Deze methode voor het instellen van aanmeldbeperkingen werkt redelijk goed als er groepen van machines gemaakt kunnen worden met identieke beperkingen. Helaas blijkt dat eerder uitzondering dan regel. Meestal moet het mogelijk zijn om per machine in te stellen wie wel en wie niet mogen aanmelden. Daarom is het ook mogelijk om via machine-specifieke netgroups de hierboven aangegeven beleidswijziging op te vangen. In dat scenario bevat /etc/master.passwd op iedere machine twee regels die met + beginnen. De eerste voegt de netgroup toe met de accounts die op de machine mogen aanmelden en de tweede voegt alle andere accounts toe met /sbin/nologin als shell. Het is verstandig om als naam van de netgroup de machinenaam in HOOFDLETTERS te gebruiken. De regels zien er ongeveer als volgt uit: +@MACHINENAAM::::::::: +:::::::::/sbin/nologin Als dit voor alle machines is gedaan, dan hoeven de lokale versies van /etc/master.passwd nooit meer veranderd te worden. Alle toekomstige wijzigingen kunnen dan gemaakt worden door de NIS map te wijzigen. Hieronder staat een voorbeeld van een mogelijke netgroup map voor het beschreven scenario met een aantal toevoegingen: # Definieer eerst de gebruikersgroepen IT_MW (,alpha,test-domain) (,beta,test-domain) IT_APP (,charlie,test-domain) (,delta,test-domain) DEPT1 (,echo,test-domain) (,foxtrott,test-domain) DEPT2 (,golf,test-domain) (,hotel,test-domain) DEPT3 (,india,test-domain) (,juliet,test-domain) ITSTAG (,kilo,test-domain) (,lima,test-domain) D_STAGS (,able,test-domain) (,baker,test-domain) # # En nu een aantal groepen op basis van rollen USERS DEPT1 DEPT2 DEPT3 BIGSRV IT_MW IT_APP SMALLSRV IT_MW IT_APP ITSTAG USERBOX IT_MW ITSTAG USERS # # Een een groep voor speciale taken. # Geef echo en golf toegang tot de anti-virus machine. SECURITY IT_MW (,echo,test-domain) (,golf,test-domain) # # Machine-gebaseerde netgroups # Hoofdservers WAR BIGSRV FAMINE BIGSRV # Gebruiker india heeft toegang tot deze server nodig. POLLUTION BIGSRV (,india,test-domain) # # Deze is erg belangrijk en heeft strengere toegangseisen nodig. DEATH IT_MW # # De anti-virus machine als hierboven genoemd. ONE SECURITY # # Een machine die maar door 1 gebruiker gebruikt mag worden. TWO (,hotel,test-domain) # [...hierna volgen de andere groepen] Als er een soort database wordt gebruikt om de gebruikersaccounts te beheren, dan is het in ieder geval nodig dat ook het eerste deel van de map met de database rapportagehulpmiddelen gemaakt kan worden. Dan krijgen nieuwe gebruikers automatisch toegang tot de machines. Nog een laatste waarschuwing: het is niet altijd aan te raden gebruik te maken van machine-gebaseerde netgroups. Als er tientallen of zelfs honderden gelijke machines voor bijvoorbeeld studentenruimtes worden uitgerold, dan is het verstandiger rol-gebaseerde netgroups te gebruiken in plaats van machine-gebaseerde netgroups om de grootte van de NIS map binnen de perken te houden. Belangrijk om te Onthouden In een NIS omgeving werken een aantal dingen wel anders. Als er een gebruiker toegevoegd moet worden, dan moet die alleen toegevoegd worden aan de master NIS server en mag niet vergeten worden dat de NIS maps herbouwd moeten worden. Als dit wordt vergeten, dan kan de nieuwe gebruiker nergens anders aanmelden dan op de NIS master. Als bijvoorbeeld een nieuwe gebruiker jsmith toegevoegd moet worden: &prompt.root; pw useradd jsmith &prompt.root; cd /var/yp &prompt.root; make test-domain Er kan ook adduser jsmith in plaats van pw useradd jsmith gebruikt worden. De beheeraccounts moeten buiten de NIS maps gehouden worden. Het is niet handig als de beheeraccounts en wachtwoorden naar machines waarop gebruikers aanmelden die geen toegang tot die informatie horen te hebben zouden gaan. De NIS master en slave moeten veilig blijven en zo min mogelijk niet beschikbaar zijn. Als de machine wordt gehackt of als hij wordt uitgeschakeld, dan kunnen er in theorie nogal wat mensen niet meer aanmelden. Dit is de belangrijkste zwakte van elk gecentraliseerd beheersysteem. Als de NIS servers niet goed beschermd worden, dan worden veel gebruikers boos! NIS v1 Compatibiliteit ypserv voor &os; biedt wat ondersteuning voor NIS v1 clients. De NIS implementatie van &os; gebruikt alleen het NIS v2 protocol, maar andere implementaties bevatten ondersteuning voor het v1 protocol voor achterwaartse compatibiliteit met oudere systemen. De ypbind daemons die bij deze systemen zitten proberen een binding op te zetten met een NIS v1 server, hoewel dat niet per se ooit nodig is (en ze gaan misschien nog wel door met broadcasten nadat ze een antwoord van een v2 server hebben ontvangen). Het is belangrijk om te melden dat hoewel ondersteuning voor gewone clientcalls aanwezig is, deze versie van ypserv geen v1 map transferverzoeken af kan handelen. Daarom kan ypserv niet gebruikt worden als master of slave in combinatie met oudere NIS servers die alleen het v1 protocol ondersteunen. Gelukkig worden er in deze tijd niet meer zoveel van deze servers gebruikt. NIS Servers die ook NIS Clients Zijn Het is belangrijk voorzichtig om te gaan met het draaien van ypserv in een multi-server domein waar de server machines ook NIS clients zijn. Het is in het algemeen verstandiger om de servers te dwingen met zichzelf te binden dan ze toe te staan een bindverzoek te broadcasten en het risico te lopen dat ze een binding met elkaar maken. Er kunnen vreemde fouten optreden als een van de servers plat gaat als er andere servers van die server afhankelijk zijn. Na verloop van tijd treedt op de clients wel een timeout op en verbinden ze met een andere server, maar de daarmee gepaard gaande vertraging kan aanzienlijk zijn en de foutmodus is nog steeds van toepassing, omdat de servers dan toch weer opnieuw een verbinding met elkaar kunnen vinden. Het is mogelijk een host aan een specifieke server te binden door aan ypbind de vlag mee te geven. Om dit niet iedere keer handmatig na een herstart te hoeven uitvoeren, kan de volgende regel worden opgenomen in /etc/rc.conf van de NIS server: nis_client_enable="YES" # start ook het client gedeelte nis_client_flags="-S NIS domain,server" In &man.ypbind.8; staat meer informatie. Wachtwoordformaten NIS wachtwoordformaten Een van de meest voorkomende problemen bij het implementeren van NIS is de compatibiliteit van het wachtwoordformaat. Als een NIS server wachtwoorden gebruikt die met DES gecodeerd zijn, dan kunnen alleen clients die ook DES gebruiken ondersteund worden. Als er bijvoorbeeld &solaris; NIS clients in een netwerk zijn, dan moet er vrijwel zeker gebruik gemaakt worden van met DES gecodeerde wachtwoorden. Van welk formaat clients en servers gebruik maken is te zien in /etc/login.conf. Als een host gebruik maakt van met DES gecodeerde wachtwoorden, dan staat er in de klasse default een regel als de volgende: default:\ :passwd_format=des:\ :copyright=/etc/COPYRIGHT:\ [Overige regels weggelaten] Andere mogelijke waarden voor passwd_format zijn blf en md5 (respectievelijk voor Blowfish en MD5 gecodeerde wachtwoorden). Als er wijzigingen gemaakt zijn aan /etc/login.conf dan moet de login capability database herbouwd worden door het volgende commando als root uit te voeren: &prompt.root; cap_mkdb /etc/login.conf Het formaat van de wachtwoorden die al in /etc/master.passwd staan worden niet bijgewerkt totdat een gebruiker zijn wachtwoord voor de eerste keer wijzigt nadat de login capability database is herbouwd. Om te zorgen dat de wachtwoorden in het gekozen formaat zijn gecodeerd, moet daarna gecontroleerd worden of de waarde crypt_default in /etc/auth.conf de voorkeur geeft aan het gekozen formaat. Om dat te realiseren dient het gekozen formaat vooraan gezet te worden in de lijst. Als er bijvoorbeeld gebruik gemaakt wordt van DES gecodeerde wachtwoorden, dan hoort de regel er als volgt uit te zien: crypt_default = des blf md5 Als de bovenstaande stappen op alle &os; gebaseerde NIS servers en clients zijn uitgevoerd, dan is het zeker dat ze het allemaal eens zijn over welk wachtwoordformaat er op het netwerk wordt gebruikt. Als er problemen zijn bij de authenticatie op een NIS client, dan is dit een prima startpunt voor het uitzoeken waar de problemen vandaan komen. Nogmaals: als er een NIS server in een heterogene omgeving wordt geplaatst, dan is het waarschijnlijk dat er gebruik gemaakt moet worden van DES op alle systemen, omdat dat de laagst overeenkomende standaard is. Greg Sutter Geschreven door Automatisch Netwerk Instellen (DHCP) Wat Is DHCP? Dynamic Host Configuration Protocol DHCP Internet Software Consortium (ISC) DHCP, het Dynamic Host Configuration Protocol, schrijft voor hoe een systeem verbinding kan maken met een netwerk en hoe het de benodigde informatie kan krijgen om met dat netwerk te communiceren. &os; gebruikt de ISC (Internet Software Consortium) DHCP implementatie, dus alle implementatie-specifieke informatie die hier wordt gegeven is bedoeld voor de ISC distributie. Wat Behandeld Wordt In dit onderdeel worden de client- en servercomponenten van het ISC DHCP systeem beschreven. Het programma voor de client, dhclient, zit standaard in &os; en de server is beschrikbaar via de net/isc-dhcp3-server port. Naast de onderstaande informatie, zijn de hulppagina's van &man.dhclient.8;, &man.dhcp-options.5; en &man.dhclient.conf.5; bruikbare bronnen. Hoe Het Werkt UDP Als dhclient, de DHCP client, wordt uitgevoerd op een clientmachine, dan begint die met het broadcasten van verzoeken om instellingeninformatie. Standaard worden deze verzoeken op UDP poort 68 gedaan. De server antwoordt op UDP 67 en geeft de client een IP adres en andere relevante netwerkinformatie, zoals een netmasker, router en DNS servers. Al die informatie komt in de vorm van een DHCP lease en is voor een bepaalde tijd geldig (die is ingesteld door de beheerder van de DHCP server). Op die manier kunnen IP adressen voor clients die niet langer met het netwerk verbonden zijn (stale) automatisch weer ingenomen worden. DHCP clients kunnen veel informatie van de server krijgen. Er staat een uitputtende lijst in &man.dhcp-options.5;. &os; Integratie &os; integreert de ISC DHCP client dhclient volledig. Er is ondersteuning voor de DHCP client in zowel het installatieprogramma als in het basissysteem, waardoor het niet noodzakelijk is om kennis te hebben van het maken van netwerkinstellingen voor het netwerk waar een DHCP server draait. dhclient is onderdeel van &os; distributies sinds 3.2. sysinstall DHCP wordt ondersteund door sysinstall. Bij het instellen van een netwerkinterface binnen sysinstall is de tweede vraag: Wil je proberen de interface met DHCP in te stellen? Als het antwoord bevestigend luidt, dan wordt dhclient uitgevoerd en als dat succesvol verloopt, dan worden de netwerkinstellingen automatisch ingevuld. Voor het gebruiken van DHCP bij het opstarten van het systeem zijn twee instellingen nodig: DHCP vereisten Het apparaat bpf moet in de kernel gecompileerd zijn. Dit kan door device bpf (pseudo-device bpf onder &os; 4.X) aan het bestand met kernelinstellingen toe te voegen en de kernel te herbouwen. Meer informatie over het bouwen van een kernel staat in . Het apparaat bpf is al onderdeel van de GENERIC kernel die bij &os; zit, dus als er geen sprake is van een aangepaste kernel, dan hoeft er geen nieuwe gemaakt te worden om DHCP aan te praat te krijgen. Voor de lezer die bijzonder begaan is met beveiliging, is het belangrijk aan te geven dat bpf ook het apparaat is waardoor pakketsnuffelaars hun werk kunnen doen (hoewel ze nog steeds als root moeten draaien). bpf is noodzakelijk voor DHCP, maar als beveiliging bijzonder belangrijk is, dan hoort bpf waarschijnlijk niet in een kernel te zitten omdat de verwachting dat er in de toekomst ooit DHCP gebruikt gaat worden. In /etc/rc.conf moet het volgende worden opgenomen: ifconfig_fxp0="DHCP" fxp0 dient vervangen te worden door de juiste aanduiding van de interface die dynamisch ingesteld moet worden, zoals beschreven staat in . Als er een andere lokatie voor dhclient wordt gebruikt of als er extra parameters aan dhclient meegegeven moeten worden, dan dient ook iets als het volgende toegevoegd te worden: dhcp_program="/sbin/dhclient" dhcp_flags="" DHCP server De DHCP server, dhcpd, zit bij de port net/isc-dhcp3-server in de Portscollectie. Deze port bevat de ISC DHCP server en documentatie. Bestanden DHCP instellingenbestanden /etc/dhclient.conf Voor dhclient is een instellingenbestand /etc/dhclient.conf nodig. Dat bestand bevat meestal alleen maar commentaar, omdat de standaardinstellingen redelijk zinvol zijn. Dit bestand wordt beschreven in &man.dhclient.conf.5;. /sbin/dhclient dhclient is statisch gelinkt en staat in /sbin. Er staat meer informatie over dhclient in &man.dhclient.8;. /sbin/dhclient-script dhclient-script is het &os;-specifieke DHCP client instellingenscript. Het wordt beschreven in &man.dhclient-script.8;, maar het is niet nodig het te wijzigen om goed te werken. /var/db/dhclient.leases De DHCP client houdt in dit bestand een database bij van geldige leases, die naar een logboekbestand worden geschreven. In &man.dhclient.leases.5; staat een iets uitgebreidere beschrijving. Verder Lezen Het DHCP protocol staat volledig beschreven in RFC 2131. Er is nog een bron van informatie ingesteld op . Een DHCP Server Installeren en Instellen Wat Behandeld Wordt In dit onderdeel wordt beschreven hoe een &os; systeem zo ingesteld kan worden dat het opereert als DHCP server door gebruik te maken van de ISC (Internet Software Consortium) implementatie van de DHCP suite. Het servergedeelte van de suite is geen standaardonderdeel van &os; en om deze dienst aan te bieden dient de port net/isc-dhcp3-server geïnstalleerd te worden. In staat meer informatie over de Portscollectie. DHCP Serverinstallatie DHCP installatie Om een &os; systeem in te stellen als DHCP server moet het apparaat &man.bpf.4; in de kernel zijn opgenomen. Om dit te doen dient device bpf (pseudo-device bpf onder &os; 4.X) aan het bestand met kernelinstellingen toegegvoegd te worden en dient de kernel herbouwd te worden. Meer informatie over het bouwen van kernels staat in . Het apparaat bpf is al onderdeel van de GENERIC kernel die bij &os;, dus het is meestal niet nodig om een aangepaste kernel te bouwen om DHCP aan de praat te krijgen. Het is belangrijk te vermelden dat bpf ook het apparaat is waardoor pakketsnuffelaars kunnen werken (hoewel de programma's die er gebruik van maken wel bijzondere toegang nodig hebben). bpf is verplicht voor DHCP, maar als beveiliging van belang is, dan is het waarschijnlijk niet verstandig om bpf in een kernel op te nemen alleen omdat er in de toekomst misschien ooit DHCP gebruikt gaat worden. Hierna dient het standaardbestand dhcpd.conf dat door de port net/isc-dhcp3-server is geïnstalleerd gewijzigd te worden. Standaard is dit /usr/local/etc/dhcpd.conf.sample en dit bestand dient gekopieerd te worden naar /usr/local/etc/dhcpd.conf voordat de wijzgingen worden gemaakt. De DHCP Server Instellen DHCP dhcpd.conf dhcpd.conf is opgebouwd uit declaraties over subnetten en hosts en is wellicht het meest eenvoudig te beschijven met een voorbeeld: option domain-name "example.com"; option domain-name-servers 192.168.4.100; option subnet-mask 255.255.255.0; default-lease-time 3600; max-lease-time 86400; ddns-update-style none; subnet 192.168.4.0 netmask 255.255.255.0 { range 192.168.4.129 192.168.4.254; option routers 192.168.4.1; } host mailhost { hardware ethernet 02:03:04:05:06:07; fixed-address mailhost.example.com; } Deze optie geeft het domein aan dat door clients als standaard zoekdomein wordt gebruikt. In &man.resolv.conf.5; staat meer over wat dat betekent. Deze optie beschrijft een door komma's gescheiden lijst met DNS servers die de client moet gebruiken. Het netmasker dat aan de clients wordt voorgeschreven. Een client kan om een bepaalde duur vragen die een lease geldig is. Anders geeft de server aan wanneer de lease vervalt (in seconden). Dit is de maximale duur voor een lease die de server toestaat. Als een client vraagt om een langere lease, dan wordt die wel verstrekt, maar is de maar geldig gedurende max-lease-time seconden. Deze optie geeft aan of de DHCP server moet proberen de DNS server bij te werken als een lease is geaccepteerd of wordt vrijgegeven. In de ISC implementatie is deze optie verplicht. Dit geeft aan welke IP adressen in de groep met adressen zitten die zijn gereserveerd om uitgegeven te worden aan clients. Alle IP adressen tussen de aangegeven adressen en die adressen zelf worden aan clients uitgegeven. Geeft de default gateway aan die aan de clients wordt voorgeschreven. Het hardware MAC adres van een host, zodat de DHCP server een host kan herkennen als die een verzoek doet. Geeft een host aan die altijd hetzelfde IP adres moet krijgen. Hier kan een hostnaam gebruikt worden, omdat de DHCP server de hostnaam zelf opzoekt voordat de lease-informatie terug wordt gegeven. Als dhcpd.conf is ingesteld, kan de server met het volgende commando gestart worden: &prompt.root; /usr/local/etc/rc.d/isc-dhcpd.sh start Als er later wijzigingen in de instellingen gemaakt moeten worden, dan is het belangrijk te onthouden dat het sturen van een SIGHUP signaal naar dhcpd niet resulteert in het opnieuw laden van de instellingen, zoals voor de meeste daemons geldt. Voor deze daemon dient een signaal SIGTERM gestuurd te worden om het proces te stoppen. Daarna dient de daemon met het hiervoor beschreven commando weer gestart worden. Bestanden DHCP instellingenbestanden /usr/local/sbin/dhcpd dhcpd is statisch gelinkt en staat in /usr/local/sbin. In de hulppagina voor &man.dhcpd.8; die meekomt met de port staat meer informatie over dhcpd. /usr/local/etc/dhcpd.conf dhcpd heeft een instellingenbestand, /usr/local/etc/dhcpd.conf, nodig voordat de daemon diensten aan clients kan leveren. Het bestand moet alle informatie bevatten die aan clients gegeven moet worden en de informatie die nodig is voor het draaien van de dienst. Dit instellingenbestand staat beschreven in de hulppagina voor &man.dhcpd.conf.5; die meekomt met de port. /var/db/dhcpd.leases De DHCP server houdt in dit bestand een database bij met leases die zijn uitgegeven en die naar een logboek worden geschreven. In de hulppagina &man.dhcpd.leases.5; die bij de port zit wordt dit uitvoeriger beschreven. /usr/local/sbin/dhcrelay dhcrelay wordt in uitgebreidere omgevingen gebruikt waar de ene DHCP server een verzoek van een client naar een andere DHCP server op een ander netwerk doorstuurt. Als deze functionaliteit nodig is, kan die beschikbaar komen door de port net/isc-dhcp3-relay te installeren. De hulppagina voor &man.dhcrelay.8; die bij de port zit bevat meer details. Chern Lee Geschreven door Domeinnaamsysteem (DNS) Overzicht BIND &os; gebruikt standaard een versie van BIND (Berkeley Internet Name Domain), wat de meest gebruikte implementatie van het DNS protocol is. DNS is het protocol waarmee namen aan IP adressen gebonden worden en vice versa. Zo wordt bijvoorbeeld op een zoekopdracht voor www.FreeBSD.org geantwoord met het IP adres van de webserver van het &os; Project en op een zoekopdracht voor ftp.FreeBSD.org wordt geantwoord met het bijbehorende IP adres van de FTP machine. Het tegenovergestelde kan ook gebeuren. Een zoekopdracht voor een IP adres kan de bijbehorende hostnaam opleveren. Het is niet nodig om een nameserver te draaien om op een systeem zoekopdrachten met DNS te maken. DNS DNS wordt op internet onderhouden door een complex systeem van autoritaire root nameservers en andere nameservers met een kleinere scope die domeininformatie hosten en cachen. In dit document wordt BIND 8.x beschreven, de stabiele versie die in &os; wordt gebruikt. BIND 9.x kan op &os; geïnstaleerd worden met de net/bind9 port. RFC1034 and RFC1035 schrijven het DNS protocol voor. Op dit moment wordt BIND beheerd door het Internet Software Consortium . Terminologie Voor het begrip van dit document dienen aan aantal termen begrepen te worden. resolver reverse DNS root zone Term Definitie Voorwaartse DNS Het koppelen van hostnamen aan IP adressen; Herkomst (origin) Verwijst naar het domein dat door een bepaald zonebestand wordt gedekt; named, BIND, nameserver Vaak gebruikte namen voor het BIND nameserver pakket in &os;; Resolver Een systeemproces waarmee een machine zoekopdrachten om zoneinformatie aan een nameserver stelt; Reverse DNS Het tegenovergestelde van voorwaartse DNS. Het koppelen van IP adressen aan hostnamen; Root zone Het begin van de internet zonehiërarchie. Alle zones vallen onder de root zone, net zoals alle bestanden in een bestandssysteem onder de rootmap vallen; Zone Een individueel domein, subdomein of een deel van de DNS die door dezelfde autoriteit wordt beheerd. zones voorbeelden Voorbeelden van zones: . is de root zone; org. is een zone onder de root zone; example.org. is een zone onder het zone org.; foo.example.org. is een subdomein onder de zone example.org.; 1.2.3.in-addr.arpa is een zone waarin alle IP adressen die onder de IP ruimte 3.2.1.* vallen. Zoals te zien is staat het meer specifieke deel van een hostnaam aan de linkerkant. Zo is example.org. bijvoorbeeld meer specifiek dan org. en is org. meer specifiek van de root zone. De indeling van ieder deel van een hostnaam lijkt veel op een bestandssysteem: de map /dev valt onder de root, enzovoort. Redenen om een Nameserver te Draaien Nameservers bestaan in het algemeen in twee smaken: een authoritative namserver en een caching namserver. Er is een authoritative namserver nodig als: het nodig is DNS informatie aan te bieden aan de wereld om met autoriteit (authoritatively) op verzoeken te antwoorden; een domein, zoals example.org, is geregistreerd en er IP adressen aan hostnamen die daaronder liggen toegewezen moeten worden; een IP adresblok reverse DNS entries nodig heeft (IP naar hostnaam); een backup namserver, die slave wordt genoemd, moet antwoorden op verzoeken als de primaire down of niet toegankelijk is. Er is een caching namserver nodig als: een lokale DNS server kan cachen en wellicht sneller kan antwoorden dan een namserver die verder weg staat; het wenselijk is om het totale netwerkverkeer te reduceren. Er is ooit vastgesteld dat DNS verkeer 5% of meer van het totale verkeer op internet uitmaakt. Als er een verzoek wordt gedaan voor www.FreeBSD.org, dan doet de resolver meestal een verzoek bij de nameserver van de ISP die de uplink levert en ontvangt daarop een antwoord. Met een lokale, caching namserver hoeft het verzoek maar één keer door de caching nameserver naar de buitenwereld gedaan te worden. Voor ieder volgend verzoek hoeft niet buiten het lokale netwerk gekeken te worden omdat het al lokaal in de cache staat. Hoe Het Werkt Om begrijpelijke redenen heet de BIND daemon in &os; named. Bestand Beschrijving named de BIND daemon ndc name daemon beheerprogramma /etc/namedb map waar BIND zoneinformatie staat /etc/namedb/named.conf daemon instellingenbestand Zonebestanden staat meestal binnen de map /etc/namedb en bevatten de DNS zone informatie die de namserver aanbiedt. BIND Starten BIND starten Omdat BIND standaard wordt geïnstalleerd, is het instellen relatief eenvoudig. Om de named daemon bij het booten te laten starten kan de volgende regel in /etc/rc.conf gezet worden: named_enable="YES" Om na het instellen de daemon handmatig te starten: &prompt.root; ndc start Instellingenbestanden BIND instellingenbestanden/secondary> <command>make-localhost</command> Gebruiken Het volgende commando dient uitgevoerd te worden om het bestand voor de lokale reverse DNS zone in /etc/namedb/localhost.rev op de juiste wijze aan te maken: &prompt.root; cd /etc/namedb &prompt.root; sh make-localhost <filename>/etc/namedb/named.conf</filename> // $FreeBSD$ // // In de hulppagina named(8) zijn meer details te vinden. Voor het // opzetten van een primaire server is begrip van de werking van DNS // noodzakelijk. Zelfs eenvoudige fouten kunnen de werking verstoren // of veel onnodig verkeer veroorzaken. options { directory "/etc/namedb"; // Als toevoeging op de "forwarders" clausule kan de namserver ook // worden aangegeven dat hij nooit zelf verzoeken mag maken, maar dat // altijd aan zijn forwarders moet vragen door de volgende regel te // activeren: // // forward only; // Als er een DNS server beschikbaar is bij een upstream provider dan // kan het IP adres op de regel hieronder ingegeven worden en kan die // geactiveerd worden. Hierdoor wordt voordeel gehaald uit de cache, // waardoor het DNS verkeer op internet vermindert. /* forwarders { 127.0.0.1; }; */ Zoals al in het commentaar staat kan het gebruik van een cache in de uplink met forwarders ingeschakeld worden. In normale omstandigheden maakt een namserver recursief verzoeken tot er een antwoord komt waar de server naar op zoek is. Door de bovenstaande optie in te schakelen wordt eerst bij de namserver die is opgegeven gevraagd, waardoor er gebruik gemaakt kan worden van de cache van die server. Als die namserver een drukke, snelle namserver is, kan het erg de moeite waard zijn van deze optie gebruik te maken. 127.0.0.1 werkt hier niet. Dat IP adres dient gewijzigd te worden naar een werkende namserver in de uplink. /* * Als er een firewall tussen een host en namservers staat waarmee * gesproken moet worden, dan dient het commentaar voor het * query-source hieronder verwijderd te worden. In eerdere versies van * BIND werden verzoeken altijd via poort 53 gedaan, maar vanaf * BIND 8.1 wordt een poort zonder privileges gebruikt. */ // query-source address * port 53; /* * Als de namserver in een sandbox draait, kan het wenselijk zijn om * een andere lokatie voor het dumpbestand in te geven. */ // dump-file "s/named_dump.db"; }; // Opmerking: het volgende wordt in een latere release ondersteund. /* host { any; } { topology { 127.0.0.0/8; }; }; */ // Het opzetten van een secondary is veel eenvoudiger en dat wordt // hieronder ruweg beschreven. // // Als er een lokale nameserver wordt gebruikt, dan dient niet // vergeten te worden om 127.0.0.1 in /etc/resolv.conf te zetten zodat // die eerst bevraagd wordt. Het is ook belangrijk wijzigingen aan te // brengen in /etc/rc.conf om named te starten. zone "." { type hint; file "named.root"; }; zone "0.0.127.IN-ADDR.ARPA" { type master; file "localhost.rev"; }; zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" { type master; file "localhost.rev"; }; // NB: De IP adressen hieronder zijn bedoeld als voorbeeld en dienen // niet gebruikt te worden! // // Voorbeeld secondary instellingen. Het kan handig zijn om tenminste // secondary te worden voor de zone waar de host onderdeel van // uitmaakt. Bij netwerkbeheerders kan nagevraagd worden welke server // de primaire server is. // // De reverse lookup zone (IN-ADDR.ARPA) mag nooit vergeten worden! Dat // zijn de eerste bytes van het respectievelijke IP adres in omgekeerde // volgorde met daarachter ".IN-ADDR.ARPA". // // Het is echter van groot belang om de werking van DNS en BIND te // begrijpen voordat er een primaire zone wordt opgeset. Er zijn // nogal wat onverwachte valkuiten. Het opzetten van een secondary is // veel eenvoudiger. // // NB: Het wordt afgeraden de onderstaande voorbeelden actief te maken. // Er dienen bestaande namen en adressen gebruikt te worden. // // BELANGRIJK!!! &os; draait BIND in een zandbak (zie named_flags in // rc.conf). In de map waarin de secundaire zones staat moet // geschreven kunnen worden door BIND. Dat kan als volgt: // // mkdir /etc/namedb/s // chown bind:bind /etc/namedb/s // chmod 750 /etc/namedb/s Meer informatie over het draaien van BIND in een zandbak staat in named in een Zandbak Draaien. /* zone "example.com" { type slave; file "s/example.com.bak"; masters { 192.168.1.1; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "s/0.168.192.in-addr.arpa.bak"; masters { 192.168.1.1; }; }; */ De bovenstaande voorbeelden komen uit named.conf en zijn voorbeelden van instellingen voor een slave, voor een forward en reverse zone. Voor iedere nieuwe zone die wordt aangeboden dient een nieuwe instelling voor de zone aan named.conf toegevoegd te worden. De meest eenvoudige instelling voor de zone example.org kan er als volgt uitzien: zone "example.org" { type master; file "example.org"; }; De zone is een master, dat geeft de instelling aan, waarvan de zoneinformatie in /etc/namedb/example.org staat, wat de instelling aangeeft. zone "example.org" { type slave; file "example.org"; }; In het geval van de slave wordt de zoneinformatie voor een zone getransporteerd van de master namserver en opgeslagen in het ingestelde bestand. Als een master server het niet meer doet of niet bereikbaar is, dan heeft de slave server de getransporteerde zoneinformatie nog en kan die aanbieden. Zonebestanden Een voorbeeldbestand voor een master zone voor example.org (als bestand /etc/namedb/example.org): $TTL 3600 example.org. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 86400 ) ; Minimum TTL ; DNS Servers @ IN NS ns1.example.org. @ IN NS ns2.example.org. ; Machinenamen localhost IN A 127.0.0.1 ns1 IN A 3.2.1.2 ns2 IN A 3.2.1.3 mail IN A 3.2.1.10 @ IN A 3.2.1.30 ; Aliases www IN CNAME @ ; MX Record @ IN MX 10 mail.example.org. Iedere hostnaam die eindigt op een . is een exacte hostnaam, terwijl alles zonder een . op het einde refereert aan de oorsprong. Zo wordt www bijvoorbeeld vertaald naar www.origin. In de zone uit het voorbeeld hierboven is de oorsprong example.org., dus www vertaalt naar www.example.org. De regels in een zonebestand volgen de volgende opmaak: recordnaam IN recordtype waarde DNS records De meest gebruikte DNS records: SOA begin van zoneautoriteit (start of authority) NS een bevoegde (authoritative) name server A een hostadres CNAME de canonieke (canonical) naam voor een alias MX mail exchanger PTR een domeinnaam pointer (gebruikt in reverse DNS) example.org. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh after 3 hours 3600 ; Retry after 1 hour 604800 ; Expire after 1 week 86400 ) ; Minimum TTL of 1 day example.org. de domeinnaam, ook de oorsprong voor dit zonebestand. ns1.example.org. de primaire/bevoegde namserver voor deze zone. admin.example.org. de persoon die verantwoordelijk is voor deze zone, e-mailadres met @ vervangen. admin@example.org wordt admin.example.org. 5 het serienummer van het bestand. Dit moet iedere keer als het zonebestand wordt aangepast opgehoogd worden. Tegenwoordig geven veel beheerders de voorkeur aan de opmaak yyyymmddrr voor het serienummer. 2001041002 betekent dan dat het voor het laatst is aangepast op 10–04–2001. De laatste 02 betekent dat het zonebestand een aantal keer is aangepast op die dag. Het serienummer is belangrijk omdat het slave nameservers aangeeft dat een zone is bijgewerkt. @ IN NS ns1.example.org. Hierboven staat een NS regel. Voor iedere nameserver die bevoegde antwoorden moet geven voor de zone hoort er zo'n regel te zijn. De @ betekent hetzelfde als example.org. Een @ vertaalt naar de oorsprong. localhost IN A 127.0.0.1 ns1 IN A 3.2.1.2 ns2 IN A 3.2.1.3 mail IN A 3.2.1.10 @ IN A 3.2.1.30 Een A record geeft een machinenaam aan. Hierboven is te zien dat ns1.example.org zou resolven naar 3.2.1.2. Nogmaals, het symbool voor oorsprong, @, wordt hier gebruikt en dus zou example.org resolven naar 3.2.1.30. www IN CNAME @ Een canoniek name record wordt meestal gebruikt voor het geven van aliasen aan een machine. In het voorbeeld is www een alias naar de machine die gelijk is aan de oorsprong, example.org (3.2.1.30). CNAME's kunnen gebruikt worden om een alias aan hostnamen te geven of om round robin één hostnaam naar meerdere machines te laten wijzen. MX record @ IN MX 10 mail.example.org. MX records geven aan welke mailservers verantwoordelijk zijn voor het afhandelen van inkomende mail voor de zone. mail.example.org is de hostnaam voor de mailserver en 10 is de prioriteit voor die mailserver. Het is mogelijk meerdere mailservers in te stellen met prioriteiten 3, 2 en 1. Een mailserver die probeert mail af te leveren voor example.org probeert dat eerst bij de MX met de hoogste prioriteit, daarna de op een na hoogste, enzovoort, totdat de mail afgeleverd kan worden. Voor in-addr.arpa zonebestanden (reverse DNS) wordt dezelfde opmaak gebruikt, maar dan met PTR regels in plaats van A of CNAME. $TTL 3600 1.2.3.in-addr.arpa. IN SOA ns1.example.org. admin.example.org. ( 5 ; Serial 10800 ; Refresh 3600 ; Retry 604800 ; Expire 3600 ) ; Minimum @ IN NS ns1.example.org. @ IN NS ns2.example.org. 2 IN PTR ns1.example.org. 3 IN PTR ns2.example.org. 10 IN PTR mail.example.org. 30 IN PTR example.org. Dit bestand geeft de juiste IP adressen voor hostnamen in het voorbeelddomein hierboven. Caching Nameserver BIND caching namserver Een caching namserver is een namserver die voor geen enkele zone bevoegd is en alleen verzoeken doet en die onthoudt voor later gebruik. Het opzetten ervan is eenvoudigweg het opzetten van een namserver zonder zones toe te voegen. <application>named</application> in een Zandbak Draaien BIND in een zandbak draaien chroot Als extra beveiligingsmaatregel is het wellicht wenselijk om &man.named.8; als een gebruiker zonder privileges te draaien en de instellingen zo te maken dat die &man.chroot.8; in een zandbakmap draait. Hierdoor is alles buiten de zandbak niet toegankelijk voor de named daemon. Hierdoor wordt de schade die aangericht kan worden beperkt in het geval dat named wordt gehackt. Standaard kent &os; een gebruiker en groep bind die voor dit doel bestemd zijn. Er wordt ook wel gesteld dat het verstandiger is om named met chroot te draaien, maar in plaats daarvan in een &man.jail.8; te draaien. Dit wordt hier niet beschreven. Omdat named niet in staat is ook maar iets buiten de zankbak te raadplegen (zoals gedeelde bibliotheken, log sockets, enzovoort), moeten er een aantal stappen gevolgd worden om named goed te laten draaien. In de onderstaande controlelijst wordt aangenomen dat het pad naar de zandbak /etc/namedb is en dat er geen wijzigingen gemaakt zijn aan de inhoud van die map. De volgende stappen dienen als root uitgevoerd te worden: Maak alle mappen die named verwacht: &prompt.root; cd /etc/namedb &prompt.root; mkdir -p bin dev etc var/tmp var/run master slave &prompt.root; chown bind:bind slave var/* named hoeft alleen in deze mappen te schrijven, dus krijgt het alleen daar rechten. Herschik en maak de basiszone en stel het bestand met instellingen in: &prompt.root; cp /etc/localtime etc &prompt.root; mv named.conf etc && ln -sf etc/named.conf &prompt.root; mv named.root master &prompt.root; sh make-localhost && mv localhost.rev localhost-v6.rev master &prompt.root; cat > master/named.localhost $ORIGIN localhost. $TTL 6h @ IN SOA localhost. postmaster.localhost. ( 1 ; serial 3600 ; refresh 1800 ; retry 604800 ; expiration 3600 ) ; minimum IN NS localhost. IN A 127.0.0.1 ^D Hierdoor kan named de correcte tijd melden aan &man.syslogd.8;. syslog logboekbestanden named Als er een oudere versie dan &os; 4.9-RELEASE draait, dient een statisch gelinkte kopie van named-xfer gebouwd te worden en naar de zankbak gekopieerd te worden: &prompt.root; cd /usr/src/lib/libisc &prompt.root; make cleandir && make cleandir && make depend && make all &prompt.root; cd /usr/src/lib/libbind &prompt.root; make cleandir && make cleandir && make depend && make all &prompt.root; cd /usr/src/libexec/named-xfer &prompt.root; make cleandir && make cleandir && make depend && make NOSHARED=yes all &prompt.root; cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer Nadat de statisch gelinkte named-xfer is geïnstalleerd, is het nodig wat op te ruimen om te voorkomen dat er kopieen van bibliotheken of programma's in de boomstructuur met broncode achterblijven: &prompt.root; cd /usr/src/lib/libisc &prompt.root; make cleandir &prompt.root; cd /usr/src/lib/libbind &prompt.root; make cleandir &prompt.root; cd /usr/src/libexec/named-xfer &prompt.root; make cleandir Deze stap gaat wel eens verkeerd. Als dit gebeurt, kan het volgende commando uitgevoerd worden: &prompt.root; cd /usr/src && make cleandir && make cleandir Daarnaast kan de /usr/obj structuur verwijderd worden: &prompt.root; rm -fr /usr/obj && mkdir /usr/obj Hiermee wordt aanwezige rommel uit de broncodestructuur verwijderd en kunnen de hierboven beschreven stappen opnieuw uitgevoerd worden. Als &os; version 4.9-RELEASE of later wordt gebruikt, dan is named-xfer in /usr/libexec standaard statisch gelinkt en kan er simpelweg met &man.cp.1; een kopie naar de zandbak gemaakt worden. Maak een dev/null die zichtbaar is voor named en waar named kan schrijven: &prompt.root; cd /etc/namedb/dev && mknod null c 2 2 &prompt.root; chmod 666 null Symlink /var/run/ndc naar /etc/namedb/var/run/ndc: &prompt.root; ln -sf /etc/namedb/var/run/ndc /var/run/ndc Hiermee wordt voorkomen dat er iedere keer als &man.ndc.8; wordt uitgevoerd de optie meegegeven moet worden. Omdat de inhoud van /var/run bij het booten wordt verwijderd, kan het wenselijk zijn dit commando aan de &man.crontab.5; van root toe te voegen met de optie . syslog logboekbestanden named Stel &man.syslogd.8; in om een extra log socket te maken waar named heen kan schrijven. Dit kan door -l /etc/namedb/dev/log toe te voegen aan de syslogd_flags variable in /etc/rc.conf. chroot Maak de instelling om named te starten en zich met chroot in een zandbak te plaatsen met de volgende aanpassing in /etc/rc.conf: named_enable="YES" named_flags="-u bind -g bind -t /etc/namedb /etc/named.conf" In het instellingenbestand /etc/named.conf staan volledige paden relatief aan de zandbak. Het bestand in de regel hierboven is dus feitelijk /etc/namedb/etc/named.conf. Nu dient /etc/namedb/etc/named.conf gewijzigd te worden, zodat named weet welke zones geladen moeten worden en waar ze staan. Nu volgt een van commentaar voorzien voorbeeld. Alle regels zonder commentaar wijken niet af van de opzet voor een DNS server die niet in een zandbak draait: options { directory "/"; named-xfer "/bin/named-xfer"; version ""; // Laat versie BIND niet zien query-source address * port 53; }; // ndc control socket controls { unix "/var/run/ndc" perm 0600 owner 0 group 0; }; // Zones follow: zone "localhost" IN { type master; file "master/named.localhost"; allow-transfer { localhost; }; notify no; }; zone "0.0.127.in-addr.arpa" IN { type master; file "master/localhost.rev"; allow-transfer { localhost; }; notify no; }; zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" { type master; file "master/localhost-v6.rev"; allow-transfer { localhost; }; notify no; }; zone "." IN { type hint; file "master/named.root"; }; zone "private.example.net" in { type master; file "master/private.example.net.db"; allow-transfer { 192.168.10.0/24; }; }; zone "10.168.192.in-addr.arpa" in { type slave; masters { 192.168.10.2; }; file "slave/192.168.10.db"; }; De opdracht directory heeft als waarde / omdat alle bestanden die named nodig heeft binnen die map staan. Dit staat dus gelijk aan /etc/namedb voor een normale gebruiker. Geeft het volledige pad naar het uitvoerbare bestand named-xfer (vanuit de optiek van named). Dit is nodig omdat named is gecompileerd om standaard te zoeken naar named-xfer in /usr/libexec. Geeft de bestandsnaam (relatief aan de instelling directory hierboven) waar named het zonebestand voor deze zone kan vinden. Geeft de bestandsnaam (relatief aan de instelling directory hierboven) waar named een kopie van het zonebestand moet schrijven nadat die succesvol van de master server is gekopieerd. Daarom moest de eigenaar van de map slave naar bind gewijzigd worden in een eerdere stap. Na het doorlopen van de hierboven beschreven stappen kan de server herstart worden of kunnen &man.syslogd.8; herstart en &man.named.8; gestart worden, mits de nieuwe opties voor syslogd_flags en named_flags zijn ingesteld. Dan draait named in een zandbak! Beveiliging Hoewel BIND de meest gebruikte implementatie van DNS is, is er altijd nog het beveiligingsvraagstuk. Soms worden er mogelijke en te misbruiken beveiligingsgaten gevonden. Het is verstandig om bij te blijven met CERT beveiligingswaarschuwingen en een abonnement te nemen op de &a.security-notifications; om bij te blijven met de beveiligingsproblemen wat betreft internet en &os;. Als er problemen ontstaan, kan het bijwerken van broncode en het opnieuw bouwen van named geen kwaad doen. Verder Lezen BIND/named hulppagina's: &man.ndc.8;, &man.named.8;, &man.named.conf.5; Officiële ISC BIND pagina BIND FAQ O'Reilly DNS en BIND 4e Editie RFC1034 - Domeinnamen - Concepten en Faciliteiten RFC1035 - Domeinnamen - Implementatie en Specificatie Tom Rhodes Geschreven door <acronym>BIND</acronym>9 en &os; bind9 instellen Het uitbrengen van &os; 5.3 was het moment van introductie van de BIND9 DNS server software in de distributie. Dit betekende nieuwe beveiligingsmogelijkheden, een nieuwe indeling van het bestandssysteem en automatische instelling van &man.chroot.8;. Deze paragraaf bestaat uit twee delen. In het eerste deel worden de nieuwe mogelijkheden en hun instelling beschreven en het tweede gedeelte gaat over hulp bij het upgraden naar &os; 5.3. Vanaf dit moment wordt er simpelweg verwezen naar &man.named.8; in plaats van naar BIND. Dit onderdeel slaat het beschrijven van de terminologie over, omdat die eerder is besproken. De theorie wordt ook niet beschreven. Het is aan te raden om die eerdere onderdelen te lezen voor dit onderdeel. De bestanden met instellingen voor named staan op dit moment in /var/named/etc/namedb/ en moeten voor gebruik aangepast worden. Daar worden de meeste instellingen gemaakt. Een Master Zone Instellen Om een master zone in te stellen kan in /var/named/etc/namedb/ het volgende uitgevoerd worden: &prompt.root; sh make-localhost Als alles goed is gegaan hoort er een nieuw bestand in de master map te staan. De bestandsnamen horen localhost.rev voor de lokale domeinnaam te zijn en localhost-v6.rev voor IPv6 instellingen. Instellingen voor standaardgebruik staan al in het instellingenbestand named.conf file. Een Slave Zone Instellen Instellingen voor extra domeinen of subdomeinen kunnen worden ingesteld als slave zones. In de meeste gevallen kan het bestand master/localhost.rev gewoon naar de map slave gekopieerd worden en aangepast worden. Als dat is gedaan, moeten de bestanden op de juiste wijze toegevoegd worden aan named.conf, zoals in het volgende voorbeeld voor example.com: zone "example.com" { type slave; file "slave/example.com"; masters { 10.0.0.1; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "slave/0.168.192.in-addr.arpa"; masters { 10.0.0.1; }; }; In dit voorbeeld is het master IP adres de primaire domain server vanwaar de zones gehaald worden. Die hoeft niet per se zelf een DNS server te zijn. Opstarten Instellen Om de named daemon met het systeem te laten starten, hoort de volgende optie in rc.conf te staan: named_enable="YES" Hoewel er nog andere mogelijkheden bestaan, is dit het absolute minimum. In &man.rc.conf.5; staan nog meer mogelijkheden beschreven. Als er niets in rc.conf staat, kan named gestart worden vanaf de commandoregel: &prompt.root; /etc/rc.d/named start <acronym>BIND</acronym>9 Beveiliging Hoewel &os; named automatisch in een &man.chroot.8; omgeving zet, zijn er nog een aantal andere beveiligingsmogelijkheden die kunnen helpen om mogelijke aanvallen op de DNS dienst af te slaan. Toegangscontrolelijsten Opvragen Een toegangscontrolelijst (acl) voor vraagstellingen kan gebruikt worden om vraagstellingen voor zones te beperken. De instelling gaat door een netwerk te definiëren binnen het token acl en dan een lijst met IP adressen aan te geven in de instellingen voor de zone. Om domeinen toe te staan om de voorbeeldhost te gebruiken, kan iets als het volgende gebruikt worden: acl "example.com" { 192.168.0.0/24; }; zone "example.com" { type slave; file "slave/example.com"; masters { 10.0.0.1; }; allow-query { example.com; }; }; zone "0.168.192.in-addr.arpa" { type slave; file "slave/0.168.192.in-addr.arpa"; masters { 10.0.0.1; }; allow-query { example.com; }; }; Opvragen Versie Beperken Het opvragen van de versie van de DNS server kan een ingang zijn voor een aanvaller, die deze informatie kan gebruiken om te zoeken naar bekende exploits - of bugs om in te breken op de host. Er kan een vervalste - versiestring gezet worden in de sectie - options van + of bugs om in te breken op de host. + + + Het instellen van een vals versienummer beschermt een + server niet tegen exploits. Alleen het bijwerken naar een + versie die niet kwetsbaar is beschermt een server. + + + Er kan een valse versiestring ingesteld worden in de + sectie options van named.conf: options { directory "/etc/namedb"; pid-file "/var/run/named/pid"; dump-file "/var/dump/named_dump.db"; statistics-file "/var/stats/named.stats"; - version "None of your business"; + version "None of your business"; +}; + Murray Stokely Geschreven door Apache HTTP Server webservers opzetten Apache Overzicht &os; wordt gebruikt om een paar van de drukste websites ter wereld te draaien. De meeste webservers op internet maken gebruik van de Apache HTTP Server. Apache softwarepackages staan op de &os; installatiemedia. Als Apache niet bij de oorsponkelijke installatie van &os; is meegeïnstalleerd, dan kan dat vanuit de www/apache13 of www/apache2 port. Als Apache succesvol is geïnstalleerd, moeten er instelingen gemaakt worden. In dit onderdeel wordt versie 1.3.X van de Apache HTTP Server behandeld omdat die het meest gebruikt wordt op &os;. Apache 2.X biedt veel nieuwe mogelijkheden, maar wordt hier niet beschreven. Meer informatie over Apache 2.X is te vinden op . Instellen Apache configuration file Het belangrijkste bestand met instellingen voor de Apache HTTP Server op &os; is /usr/local/etc/apache/httpd.conf. Dit bestand is een typisch &unix; tekstgebaseerd instellingenbestand waarin regels met commentaar beginnen met het karakter #. Het uitputtend beschrijven van alle mogelijke instellingen valt buiten het bereik van dit boek, dus worden alleen de meest gebruikte directieven beschreven. ServerRoot "/usr/local" Hierin wordt de standaard mappenhiërarchie voor de Apache installatie aangegeven. Binaire bestanden staan in de submappen bin en sbin van de serverroot en bestanden met instellingen staan in etc/apache. ServerAdmin beheerder@beheer.adres Het adres waaraan problemen met de server gemaild kunnen worden. Dit adres verschijnt op een aantal door de server gegenereerde pagina's, zoals documenten met foutmeldingen. ServerName www.example.com Met ServerName kan een hostnaam ingesteld worden die wordt teruggezonden aan de clients als de naam van de server anders is dan die is ingesteld (gebruik bijvoorbeeld www in plaats van de echte hostnaam). DocumentRoot "/usr/local/www/data" DocumentRoot: de map waaruit de documenten worden geserveerd. Standaard worden alle verzoeken uit deze map gehaald, maar er kunnen symbolische links en aliasen gebruikt worden om naar andere locaties te wijzen. Het is altijd een goed idee om back-ups te maken van het instellingenbestand voor Apache vóór het maken van wijzigingen. Als de juiste instellingen gemaakt zijn, kan Apache gestart worden. <application>Apache</application> Draaien Apache starten of stoppen Apache draait niet vanuit de inetd super server zoals veel andere netwerkdiensten. Hij is ingesteld om zelfstandig te draaien vanwege beter prestaties voor het afhandelen van inkomende HTTP verzoeken van client webbrowsers. Er wordt een shellscriptwrapper bijgeleverd om het starten, stoppen en herstarten zo eenvoudig mogelijk te maken. Het volgende commando start Apache voor de eerste keer: &prompt.root; /usr/local/sbin/apachectl start De server kan op iedere moment gestopt worden met: &prompt.root; /usr/local/sbin/apachectl stop Na het maken van wijzigingen aan het instellingenbestand moet de dienst herstart worden: &prompt.root; /usr/local/sbin/apachectl restart Om Apache te herstarten zonder bestaande connecties te verbreken: &prompt.root; /usr/local/sbin/apachectl graceful In &man.apachectl.8; staat meer informatie. Om Apache met het systeem mee te starten kan de volgende regel aan /etc/rc.conf worden toegevoegd: apache_enable="YES" Als het nodig is additionele commandoregelopties op te geven voor de Apache httpd bij het opstarten, dan kunnen die in de volgende regel in rc.conf meegegeven worden: apache_flags="" Nu de webserver draait, is die te benaderen door een webbrowser te wijzen naar http://localhost/. De standaard webpagina is /usr/local/www/data/index.html. Virtuele Hosting Apache ondersteunt twee verschillende manieren van Virtuele Hosting. De eerste methode is Naam-gebaseerde Virtuele Hosting. Naam-gebaseerde Virtuele Hosting gebruikt de HTTP/1.1 headers van de clients om de hostnaam uit te zoeken. Hierdoor kunnen meerdere domeinen hetzelfde IP adres delen. Om Apache gebruik te laten maken van Naam-gebaseerde Virtuele Hosting kan een regel als de volgende in httpd.conf worden opgenomen: NameVirtualHost * Als een webserver www.domein.tld heet en er moet een virtueel domein voor www.anderdomein.tld gaan draaien, dan kunnen de volgende regels aan httpd.conf worden toegevoegd: <VirtualHost *> ServerName www.domein.tld DocumentRoot /www/domein.tld <VirtualHost> <VirtualHost *> ServerName www.anderdomein.tld DocumentRoot /www/anderdomein.tld </VirtualHost> De adressen en de paden uit dit voorbeeld kunnen in echte implementaties uiteraard gewijzigd worden. Meer informatie over het opzetten van virtuele hosts staat in de officiële documentatie voor Apache op Apache Modules Apache modules Er zijn veel verschillende Apache modules die functionaliteit toevoegen aan de basisdienst. De &os; Portscollectie biedt op een eenvoudige manier de mogelijkheid om Apache samen met de meeste populaire add-on modules te installeren. mod_ssl webserver veilig SSL cryptografie De module mod_ssl gebruikt de OpenSSL bibliotheek om sterke cryptografie te leveren via de protocollen Secure Sockets Layer (SSL v2/v3) en Transport Layer Security (TLS v1). Deze module levert alles wat nodig is om een getekend certificaat aan te vragen bij een vertrouwde certificaatautoriteit om een veilige webserver onder &os; te kunnen draaien. Als Apache nog niet is geïnstalleerd, dan is er een versie van Apache 1.3.X die mod_ssl bevat en geïnstalleerd kan worden met de www/apache13-modssl port. SSL ondersteuning is ook voor Apache 2.X beschikbaar in de www/apache2 port, waar het standaard is ingeschakeld. mod_perl Perl Het Apache/Perl integratieproject brengt de volledige kracht van de Perl programmeertaal en de Apache HTTP Server samen. Met de mod_perl module is het mogelijk om Apache modules volledig in Perl te schrijven. Daarnaast voorkomt een ingebouwde persistente interpreter in de server de overhead van het starten van een externe interpreter en de nadelen van het opstarten van Perl. Als Apache nog niet is geïnstalleerd, dan is er een versie van Apache die mod_perl bevat en geïnstalleerd kan worden met de www/apache13-modperl port. PHP PHP PHP, dat staat voor PHP: Hypertext Preprocessor, is een veelgebruikte algemene Open Source scripttaal die bijzonder bruikbaar is voor webontwikkeling en die ingebed kan worden in HTML. De syntaxis is afgeleid van C, &java; en Perl en blijkt makkelijk te leren. Het belangrijkste doel van de taal is webontwikkelaars in staat te stellen om gemakkelijk dynamisch samengestelde webpagina's te schrijven. Maar er kan nog veel meer met PHP gedaan worden. PHP kan geïnstalleerd worden met de lang/php5 port. Murray Stokely Geschreven door File Transfer Protocol (FTP) FTP servers Overzicht Het File Transfer Protocol (FTP) biedt gebruikers een eenvoudige manier om bestanden van en naar een FTP server te verplaatsen. &os; bevat FTP server software, ftpd, in het basissysteem. Hierdoor is het opzetten en beheren van een FTP server op &os; erg overzichtelijk. Instellen De belangrijkste stap bij het instellen is de beslissing welke accounts toegang krijgen tot de FTP server. Een normaal &os; systeem heeft een aantal systeemaccounts die gebruikt worden voor daemons, maar onbekende gebruikers mag niet toegestaan worden van die accounts gebruikt te maken. In /etc/ftpusers staat een lijst met gebruikers die geen FTP toegang hebben. Standaard staan daar de voorgenoemde accounts in, maar het is ook mogelijk om daar gebruikers toe te voegen die geen FTP toegang mogen hebben. Het kan ook wenselijk zijn de FTP toegang voor sommige gebruikers te beperken, maar niet onmogelijk te maken. Dit kan met /etc/ftpchroot. In dat bestand staan gebruikers en groepen waarop FTP toegangsbeperkingen van toepassing zijn. In &man.ftpchroot.5; staan alle details die hier niet beschreven zijn. FTP anoniem Om anonieme FTP toegang voor een server in te schakelen, dient er een gebruiker ftp op een &os; systeem aangemaakt te worden. Dan kunnen gebruikers op de server aanmelden met de gebruikersnaam ftp of anonymous en met ieder wachtwoord (de geldende conventie schrijft voor dat dit een e-mail adres van de gebruiker is). De FTP server roep bij een anonieme aanmelding &man.chroot.2; aan, zodat er alleen toegang is tot de thuismap van de gebruiker ftp. Er zijn twee tekstbestanden waarin welkomstberichten voor de FTP clients gezet kunnen worden. De inhoud van /etc/ftpwelcome wordt getoond voordat gebruikers een aanmeldprompt zien. Na een succesvolle aanmelding wordt de inhoud van /etc/ftpmotd getoond. Het genoemde pad is relatief ten opzichte van de aanmeldomgeving, dus voor anonieme gebruikers wordt ~ftp/etc/ftpmotd getoond. Als een FTP server eenmaal correct is ingesteld, moet die ingeschakeld worden in /etc/inetd.conf. Daar moet het commentaarkarakter # voor de bestaande ftpd regel verwijderd worden: ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l Nadat het bestand met instellingen is gewijzigd, moet er een HangUP signaal verstuurd worden naar inetd, zoals uitgelegd in . Nu kan aangemeld worden op de FTP server met: &prompt.user; ftp localhost Beheren syslog logboekbestanden FTP De ftpd daemon gebruikt &man.syslog.3; om berichten te loggen. Standaard plaatst de systeemlogdaemon berichten over FTP in /var/log/xferlog. De lokatie van het FTP logboek kan gewijzigd worden door de volgende regels in /etc/syslog.conf te wijzigen: ftp.info /var/log/xferlog FTP anoniem Het is verstandig na te denken over de gevaren die op de loer liggen bij het draaien van een anonieme FTP server. Dat geldt in het bijzonder voor het laten uploaden ven bestanden. Het is dan goed mogelijk dat een FTP site een forum wordt om commerciële software zonder licenties uit te wisselen of erger. Als anonieme uploads toch nodig zijn, dan horen de rechten op die bestanden zo te staan dat ze niet door andere anonieme gebruikers gelezen kunnen worden tot er door een beheerder naar gekeken is. Murray Stokely Geschreven door Bestands- en Printdiensten voor µsoft.windows; Clients (Samba) Samba server Microsoft Windows file server Windows clients print server Windows clients Overzicht Samba is een populair open source softwarepakket dat bestands- en printdiensten voor µsoft.windows; clients biedt. Die clients kunnen dan ruimte op een &os; bestandssysteem gebruiken alsof het een lokale schijf is en &os; printers gebruiken alsof het lokale printers zijn. Samba software packages horen op de &os; installatiemedia te staan. Als Samba bij de basisinstallatie niet mee is geïnstalleerd, dan kan dat alsnog via de net/samba3 port of met het package. Instellen Een standaardbestand met instellingen voor Samba wordt geïnstalleerd als /usr/local/etc/smb.conf.default. Dit bestand dient gekopieerd te worden naar /usr/local/etc/smb.conf en voordat Samba gebruikt kan worden, moeten er aanpassingen aan worden gemaakt. smb.conf bevat de instellingen voor Samba, zoals die voor de printers en de gedeelde bestandssystemen die gedeeld worden met &windows; clients. Het Samba pakket bevat een webgebaseerde beheermodule die swat heet, waarmee smb.conf op een eenvoudige manier ingesteld kan worden. De Samba Webbeheermodule Gebruiken (SWAT) De Samba Webbeheermodule (SWAT) draait als een daemon vanuit inetd. Daarom dient voor de volgende regel uit /etc/inetd.conf het commentaarkarakter verwijderd te worden voordat swat gebruikt kan worden om Samba in te stellen: swat stream tcp nowait/400 root /usr/local/sbin/swat Nadat het bestand met instellingen is gewijzigd, moet er een HangUP signaal verstuurd worden naar inetd, zoals uitgelegd in . Als swat is ingeschakeld in inetd.conf, kan de module gebruikt worden door met een browser een verbinding te maken met . Er dient aangemeld te worden met de root account van het systeem. Na succesvol aanmelden op de hoofdpagina voor de Samba instellingen, is het mogelijk de systeemdocumentatie te bekijken of te starten door op het tabblad Globals te klikken. Het onderdeel Globals correspondeert met de sectie [global] in /usr/local/etc/smb.conf. Systeembrede Instellingen Of Samba nu wordt ingesteld door /usr/local/etc/smb.conf direct te bewerken of met swat, de eerste instellingen die gemaakt moeten worden zijn de volgende: workgroup NT Domeinnaam of Werkgroepnaam voor de computers die verbinding gaan maken met de server. netbios name NetBIOS Hiermee wordt de NetBIOS naam waaronder de Samba server bekend zal zijn ingesteld. Standaard is de naam het eerste gedeelte van de DNS naam van een host. server string Hiermee wordt de string ingesteld die te zien is als het commando net view en een aantal andere commando's die gebruik maken van de descriptieve tekst voor de server gebruikt worden. Beveiligingsinstellingen Twee van de belangrijkste instellingen in /usr/local/etc/smb.conf zijn het gekozen beveiligingsmodel en het wachtwoord voor clientgebruikers. Deze worden met de volgende instellingen gemaakt: security De twee meest gebruikte mogelijkheden hier zijn security = share en security = user. Als de clients gebruikersnamen hebben die overeenkomen met hun gebruikersnaam op de &os; machine, dan is het verstandig om te kiezen voor beveiliging op gebruikersniveau. Dit is het standaard beveiligingsbeleid en kent als voorwaarde dat gebruikers zich eerst moeten aanmelden voordat ze toegang krijgen tot gedeelde bronnen. Bij beveiliging op shareniveau hoeft een client niet met een geldige gebruikersnaam en wachtwoord aan te melden op de server voor het mogelijk is om een verbinding te proberen te krijgen met een gedeelde bron. Dit was het standaardbeveiligingsmodel voor oudere versies van Samba. passdb backend NIS+ LDAP SQL database Samba kent aan de achterkant verschillende authenticatiemodellen. Clients kunnen authenticeren met LDAP, NIS+, een SQL database of een aangepast wachtwoordbestand. De standaard authenticatiemethode is smbpasswd. Meer wordt hier niet behandeld. Als aangenomen wordt dat de standaard achterkant smbpasswd wordt gebruikt, dan moet /usr/local/private/smbpasswd gemaakt worden om Samba in staat te stellen clients te authenticeren. Alle &unix; gebruikersaccounts toegang geven vanaf &windows; clients gaat met het volgende commando: &prompt.root; grep -v "^#" /etc/passwd | make_smbpasswd > /usr/local/private/smbpasswd &prompt.root; chmod 600 /usr/local/private/smbpasswd In de Samba documentatie staat meer informatie over instellingen. Met de hier gegeven basisuitleg moet het mogelijk zijn Samba draaiende te krijgen. <application>Samba</application> Starten Om Samba in te schakelen bij het starten van een systeem dient de volgende regel aan /etc/rc.conf toegevoegd te worden: samba_enable="YES" Samba kan op ieder moment gestart worden met: &prompt.root; /usr/local/etc/rc.d/samba.sh start Starting SAMBA: removing stale tdbs : Starting nmbd. Starting smbd. Samba bestaat feitelijk uit drie afzonderlijke daemons. Het script samba.sh start de daemons nmbd en smbd. Als de winbind name resolution diensten in smb.conf zijn ingeschakeld, dan start ook de daemon winbindd. Samba kan op ieder moment gestopt worden met: &prompt.root; /usr/local/etc/rc.d/samba.sh stop Samba is een complexe softwaresuite met functionaliteit waarmee verregaande ingratie met µsoft.windows; netwerken mogelijk wordt. Informatie die verder gaat dan de basisinstallatie staat op . Tom Hukins Geschreven door Tijd Synchroniseren met NTP NTP Overzicht Na verloop van tijd gaat de tijd van een computer meestal uit de pas lopen. Het Netwerk Tijd Protocol (NTP) kan ervoor zorgen dat de tijd accuraat blijft. Veel diensten op internet zijn afhankelijk, of hebben veel voordeel, van het betrouwbaar zijn van de tijd. Zo ontvangt een webserver bijvoorbeeld veel verzoeken om een bestand te sturen als dat gewijzigd is sinds een bepaald moment. In een LAN omgeving is het van groot belang dat computers die bestanden delen van eenzelfde server gesynchroniseerde tijd hebben zodat de tijdstempels consistent blijven. Diensten zoals &man.cron.8; zijn ook afhankelijk van een betrouwbare systeemtijd om commando's op het ingestelde moment uit te voeren. NTP ntpd Bij &os; zit de &man.ntpd.8; NTP server die gebruikt kan worden om bij andere NTP servers de tijd op te vragen om de eigen klok gelijk te zetten of om de juiste tijd te verstrekken aan andere apparaten. Passende NTP Servers Kiezen NTP choosing servers Om de tijd te synchroniseren moeten er één of meer NTP servers beschikbaar zijn. Een lokale systeembeheerder of een ISP heeft wellicht een NTP server voor dit doel opgezet. Het is verstandig om documentatie te raadplegen en te bekijken of dat het geval is. Er is een online lijst van publiek toegankelijke NTP servers waarop een NTP server gezocht kan worden die in geografische zin dichtbij een te synchroniseren computer ligt. Het is belangrijk te voldoen aan het beleid voor de betreffende server en toestemming te vragen als dat in de voorwaarden staat. Het is verstandig meerdere, niet van elkaar afhankelijke, NTP servers te kiezen voor het geval een van de servers niet langer betrouwbaar is of niet bereikbaar is. &man.ntpd.8; gebruikt de antwoorden die van andere servers ontvangen worden op intelligente wijze: betrouwbare servers krijgen voorrang boven ontbetrouwbare servers. Machine Instellen NTP instellen Basisinstellingen ntpdate Als het alleen de bedoeling is de tijd te synchroniseren bij het opstarten van een machine, dan kan &man.ntpdate.8; gebruikt worden. Dit kan van toepassing zijn op desktops die regelmatig herstart worden en niet echt regelmatig gesynchroniseerd hoeven te worden. Op sommige machines hoort echter &man.ntpd.8; te draaien. Het gebruik van &man.ntpdate.8; bij het opstarten is ook een goed idee voor machines waarop &man.ntpd.8; draait. De &man.ntpd.8; wijzigt de tijd geleidelijk, terwijl &man.ntpdate.8; gewoon de tijd instelt, hoe groot het verschil tussen de bestaande tijd van een machine en de correcte tijd ook is. Om &man.ntpdate.8; tijdens het opstarten in te schakelen kan ntpdate_enable="YES" aan /etc/rc.conf worden toegevoegd. Alle voor de synchronisatie te gebruiken servers moeten dan, samen met eventuele opties voor &man.ntpdate.8;, in ntpdate_flags aangegeven worden. NTP ntp.conf Algemene Instellingen NTP wordt ingesteld met het bestand /etc/ntp.conf in het formaat dat beschreven staat in &man.ntp.conf.5;. Hieronder volgt een eenvoudig voorbeeld: server ntplocal.example.com prefer server timeserver.example.org server ntp2a.example.net driftfile /var/db/ntp.drift De optie server geeft aan welke servers er gebruikt moeten worden, met op elke regel een server. Als de server wordt ingesteld met het argument prefer, zoals bij ntplocal.example.com, dan krijgt die server de voorkeur boven de andere. Een antwoord van een voorkeursserver wordt genegeerd als dat significant afwijkt van de antwoorden van de andere servers. In andere gevallen wordt het gebruikt zonder rekening te houden met de andere antwoorden. Het argument prefer wordt meestal gebruikt voor NTP servers waarvan bekend is dat ze erg betrouwbaar zijn, zoals die met speciale tijdbewaking hardware. De optie driftfile geeft aan welk bestand gebruikt wordt om de offset van de klokfrequentie van het systeem op te slaan. &man.ntpd.8; gebruikt die om automatisch te compenseren voor het natuurlijke afwijken van de tijd, zodat er zelfs bij gebrek aan externe bronnen een redelijke accurate tijdsinstelling mogelijk is. De optie driftfile geeft aan welk bestand gebruikt wordt om informatie over eerdere antwoorden van NTP servers die gebruikt worden op te slaan. Dit bestand bevat interne informatie voor NTP. Het hoort niet door andere processen gewijzigd te worden. Toegang tot een Server Instellen Een NTP server is standaard toegankelijk voor alle hosts op een netwerk. De optie restrict in /etc/ntp.conf maakt het mogelijk om aan te geven welke machines de dienst mogen benaderen. Voor het blokkeren van toegang voor alle andere machines kan de volgende regel aan /etc/ntp.conf toegevoegd worden: restrict default ignore Om alleen machines op bijvoorbeeld het locale netwerk toe te staan hun tijd te synchroniseren met een server, maar ze tegelijkertijd niet toe te staan om de server te draaien of de server als referentie voor synchronisatie te gebruiken, kan de volgende regel toegevoegd worden: restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap Hierboven is 192.168.1.0 een IP adres op een LAN en 255.255.255.0 is het bijbehorende netwerkmasker. /etc/ntp.conf mag meerdere regels met restrict bevatten. Meer details staan in het onderdeel Access Control Support van &man.ntp.conf.5;. De NTP Server Draaien De NTP server kan bij het opstarten gestart worden door de regel ntpd_enable="YES" aan /etc/rc.conf toe te voegen. Om extra opties aan &man.ntpd.8; mee te geven kan de parameter ntpd_flags in /etc/rc.conf gebruikt worden. Om de server zonder een herstart van de machine te starten kan ntpd uitgevoerd worden, met toevoeging van de parameters uit ntpd_flags in /etc/rc.conf. Bijvoorbeeld: &prompt.root; ntpd -p /var/run/ntpd.pid In &os; 4.X, dienen de ntpd uit het bovenstaande voorbeeld vervangen te worden door xntpd. ntpd Gebruiken met een Tijdelijke Internetverbinding &man.ntpd.8; heeft geen permanente verbinding met een netwerk nodig om goed te werken. Maar als er gebruik gemaakt wordt van een inbelverbinding, is het wellicht verstandig om ervoor te zorgen dat uitgaande NTP verzoeken geen uitgaande verbinding kunnen starten. Als er gebruik gemaakt wordt van user PPP, kunnen er filter commando's ingesteld worden in /etc/ppp/ppp.conf. Bijboorbeeld: set filter dial 0 deny udp src eq 123 # NTP verkeer zorgt niet voor uitbellen set filter dial 1 permit 0 0 set filter alive 0 deny udp src eq 123 # Inkomend NTP verkeer houdt de verbinding niet open set filter alive 1 deny udp dst eq 123 # Uitgaand NTP verkeer houdt de verbinding niet open set filter alive 2 permit 0/0 0/0 Meer details staan in de PACKET FILTERING sectie in &man.ppp.8; en in de voorbeelden in /usr/share/examples/ppp/. Sommige internet providers blokkeren lage poorten, waardoor NTP niet kan werken omdat er nooit een antwoord ontvangen kan worden door een machine. Meer Informatie HTML documentatie voor de NTP server staat in /usr/share/doc/ntp/. diff --git a/nl_NL.ISO8859-1/books/handbook/pgpkeys/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/pgpkeys/chapter.sgml index 34ecdd1b86..d856961e4e 100644 --- a/nl_NL.ISO8859-1/books/handbook/pgpkeys/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/pgpkeys/chapter.sgml @@ -1,911 +1,916 @@ PGP Sleutels pgp sleutels In het geval een handtekening van een van de beambten of ontwikkelaars gecontroleerd moet worden of er een versleutelde e-mail aan ze gezonden moet worden, worden hier voor het gemak een aantal sleutels weergegeven. Een complete sleutelring van FreeBSD.org gebruikers kan op de volgende link gedownload worden: http://www.FreeBSD.org/doc/pgpkeyring.txt . Beambten &a.security-officer; &pgpkey.security-officer; &a.core-secretary; &pgpkey.core-secretary; Leden Kernteam &a.jhb; &pgpkey.jhb; &a.kuriyama; &pgpkey.kuriyama; &a.scottl; &pgpkey.scottl; &a.imp; &pgpkey.imp; &a.wes; &pgpkey.wes; &a.murray; &pgpkey.murray; &a.peter; &pgpkey.peter; Ontwikkelaars &a.will; &pgpkey.will; &a.mat; &pgpkey.mat; &a.asami; &pgpkey.asami; &a.dougb; &pgpkey.dougb; &a.tobez; &pgpkey.tobez; &a.mbr; &pgpkey.mbr; &a.harti; &pgpkey.harti; &a.obraun; &pgpkey.obraun; &a.jmb; &pgpkey.jmb; &a.brueffer; &pgpkey.brueffer; &a.markus; &pgpkey.markus; &a.wilko; &pgpkey.wilko; &a.perky; &pgpkey.perky; &a.jon; &pgpkey.jon; &a.luoqi; &pgpkey.luoqi; &a.ache; &pgpkey.ache; &a.seanc; &pgpkey.seanc; &a.cjh; &pgpkey.cjh; &a.cjc; &pgpkey.cjc; &a.marcus; &pgpkey.marcus; &a.nik; &pgpkey.nik; &a.ceri; &pgpkey.ceri; &a.brooks; &pgpkey.brooks; &a.gnn; &pgpkey.gnn; &a.pjd; &pgpkey.pjd; &a.bsd; &pgpkey.bsd; &a.danfe; &pgpkey.danfe; &a.dd; &pgpkey.dd; &a.ale; &pgpkey.ale; &a.peadar; &pgpkey.peadar; &a.josef; &pgpkey.josef; &a.ue; &pgpkey.ue; &a.ru; &pgpkey.ru; &a.le; &pgpkey.le; &a.stefanf; &pgpkey.stefanf; &a.jedgar; &pgpkey.jedgar; &a.green; &pgpkey.green; &a.lioux; &pgpkey.lioux; &a.fanf; &pgpkey.fanf; &a.blackend; &pgpkey.blackend; &a.petef; &pgpkey.petef; &a.billf; &pgpkey.billf; &a.patrick; &pgpkey.patrick; &a.gioria; &pgpkey.gioria; &a.jmg; &pgpkey.jmg; &a.dannyboy; &pgpkey.dannyboy; &a.dhartmei; &pgpkey.dhartmei; &a.jhay; &pgpkey.jhay; &a.sheldonh; &pgpkey.sheldonh; &a.mikeh; &pgpkey.mikeh; &a.mheinen; &pgpkey.mheinen; &a.niels; &pgpkey.niels; &a.ghelmer; &pgpkey.ghelmer; &a.mux; &pgpkey.mux; &a.mich; &pgpkey.mich; &a.foxfair; &pgpkey.foxfair; &a.jkh; &pgpkey.jkh; &a.ahze; &pgpkey.ahze; &a.trevor; &pgpkey.trevor; &a.phk; &pgpkey.phk; &a.joe; &pgpkey.joe; &a.vkashyap; &pgpkey.vkashyap; &a.kris; &pgpkey.kris; &a.keramida; &pgpkey.keramida; &a.fjoe; &pgpkey.fjoe; &a.andreas; &pgpkey.andreas; &a.jkois; &pgpkey.jkois; &a.sergei; &pgpkey.sergei; &a.maxim; &pgpkey.maxim; &a.jkoshy; &pgpkey.jkoshy; &a.rik; &pgpkey.rik; &a.rushani; &pgpkey.rushani; &a.clement; &pgpkey.clement; &a.mlaier; &pgpkey.mlaier; &a.alex; &pgpkey.alex; &a.erwin; &pgpkey.erwin; &a.leeym; &pgpkey.leeym; &a.netchild; &pgpkey.netchild; &a.lesi; &pgpkey.lesi; &a.glewis; &pgpkey.glewis; &a.delphij; &pgpkey.delphij; &a.ijliao; &pgpkey.ijliao; &a.clive; &pgpkey.clive; &a.clsung; &pgpkey.clsung; &a.arved; &pgpkey.arved; &a.remko; &pgpkey.remko; &a.pav; &pgpkey.pav; &a.bmah; &pgpkey.bmah; &a.mtm; &pgpkey.mtm; &a.dwmalone; &pgpkey.dwmalone; &a.kwm; &pgpkey.kwm; &a.matusita; &pgpkey.matusita; &a.ken; &pgpkey.ken; &a.dinoex; &pgpkey.dinoex; &a.sanpei; &pgpkey.sanpei; &a.jim; &pgpkey.jim; &a.marcel; &pgpkey.marcel; &a.marck; &pgpkey.marck; &a.tmm; &pgpkey.tmm; &a.rich; &pgpkey.rich; &a.knu; &pgpkey.knu; &a.max; &pgpkey.max; &a.yoichi; &pgpkey.yoichi; &a.bland; &pgpkey.bland; &a.simon; &pgpkey.simon; &a.anders; &pgpkey.anders; &a.obrien; &pgpkey.obrien; &a.philip; &pgpkey.philip; &a.hmp; &pgpkey.hmp; &a.mp; &pgpkey.mp; &a.roam; &pgpkey.roam; &a.den; &pgpkey.den; &a.pirzyk; &pgpkey.pirzyk; &a.jdp; &pgpkey.jdp; &a.krion; &pgpkey.krion; &a.markp; &pgpkey.markp; &a.thomas; &pgpkey.thomas; &a.hq; &pgpkey.hq; &a.dfr; &pgpkey.dfr; &a.trhodes; &pgpkey.trhodes; &a.benno; &pgpkey.benno; &a.paul; &pgpkey.paul; &a.roberto; &pgpkey.roberto; &a.guido; &pgpkey.guido; &a.niklas; &pgpkey.niklas; &a.marks; &pgpkey.marks; &a.hrs; &pgpkey.hrs; &a.wosch; &pgpkey.wosch; &a.das; &pgpkey.das; &a.schweikh; &pgpkey.schweikh; &a.gshapiro; &pgpkey.gshapiro; &a.arun; &pgpkey.arun; + + &a.nork; + &pgpkey.nork; + + &a.vanilla; &pgpkey.vanilla; &a.cshumway; &pgpkey.cshumway; &a.demon; &pgpkey.demon; &a.jesper; &pgpkey.jesper; &a.scop; &pgpkey.scop; &a.glebius; &pgpkey.glebius; &a.kensmith; &pgpkey.kensmith; &a.ben; &pgpkey.ben; &a.des; &pgpkey.des; &a.sobomax; &pgpkey.sobomax; &a.dcs; &pgpkey.dcs; &a.brian; &pgpkey.brian; &a.nsouch; &pgpkey.nsouch; &a.ssouhlal; &pgpkey.ssouhlal; &a.vs; &pgpkey.vs; &a.gsutter; &pgpkey.gsutter; &a.metal; &pgpkey.metal; &a.nyan; &pgpkey.nyan; &a.mi; &pgpkey.mi; &a.gordon; &pgpkey.gordon; &a.lth; &pgpkey.lth; &a.thierry; &pgpkey.thierry; &a.viny; &pgpkey.viny; &a.ups; &pgpkey.ups; &a.nectar; &pgpkey.nectar; &a.adamw; &pgpkey.adamw; &a.nate; &pgpkey.nate; &a.wollman; &pgpkey.wollman; &a.joerg; &pgpkey.joerg; &a.bz; &pgpkey.bz; &a.phantom; &pgpkey.phantom; diff --git a/nl_NL.ISO8859-1/books/handbook/security/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/security/chapter.sgml index 0e2cd7bbfa..38b8416072 100644 --- a/nl_NL.ISO8859-1/books/handbook/security/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/security/chapter.sgml @@ -1,5314 +1,5389 @@ Matthew Dillon Veel uit dit hoofdstuk is overgenomen uit de security(7) handboekpagina van Siebrand Mazeland Vertaald door Beveiliging beveiliging Overzicht Dit hoofdstuk biedt een basisinleiding in systeembeveiligingsconcepten, een aantal goede basisregels en een paar gevorderde onderwerpen binnen &os;. Veel van de onderwerpen die worden behandeld kunnen ook worden toegepast op systemen en internet in het algemeen. Het internet is niet langer een vriendelijke omgeving waar iedereen een goede buur wil zijn. Het beveiligen van een systeem is onontbeerlijk als gegevens, intellectueel eigendom, tijd en wat dan ook uit de handen van hackers c.s. gehouden moeten worden. &os; biedt veel hulpmiddelen en mechanismen om te zorgen voor de integriteit en veiligheid van een systeem en netwerk. Na het lezen van dit hoofdstuk weet de lezer: Van basis systeembeveiligingsconcepten in relatie tot &os;; Meer over verschillende versleutelingsmechanismen die beschikbaar zijn in &os; zoals DES en MD5; Hoe eenmalige wachtwoordauthenticatie opgezet kan worden; Hoe TCP Wrappers in te stellen voor gebruik met inetd; Hoe KerberosIV op &os; releases eerder dan 5.0 opgezet kan worden; Hoe Kerberos5 op &os; 5.0 release en verder opgezet kan worden; Hoe IPsec wordt ingesteld en hoe een VPN op te zetten tussen &os; en µsoft.windows; machines; Hoe OpenSSH, &os;'s SSH implementatie, in te stellen en te gebruiken; Wat filesysteem ACLs zijn en hoe die te gebruiken; Hoe om te gaan met publicaties van &os; beveiligingswaarschuwingen. Er wordt aangenomen dat de lezer van dit hoofdstuk: Basisbegrip heeft van &os; en internetconcepten. In dit boek worden nog meer onderwerpen met betrekking tot beveiliging beschreven. Zo wordt bijvoorbeeld Verplichte Toegangscontrole (Mandatory Access Control) besproken in en Internet Firewalls in . Introductie Beveiliging is een taak die begint en eindigt bij de systeembeheerder. Hoewel alle BSD &unix; multi-user systemen enige inherente beveiliging kennen, is het bouwen en onderhouden van additionele beveiligingsmechanismen om de gebruikers eerlijk te houden waarschijnlijk een van de zwaarste taken voor de systeembeheerder. Machines zijn zo veilig als ze gemaakt worden en beveiligingsoverwegingen staan altijd op gespannen voet met de wens om gebruiksvriendelijkheid. &unix; systemen zijn in het algemeen in staat tot het tegelijkertijd uitvoeren van een enorm aantal processen en veel van die processen acteren als server - daarmee wordt bedoeld dat externe entiteiten er verbindingen mee kunnen maken en ertegen kunnen praten. Nu de minicomputers en mainframes van gisteren de desktops van vandaag zijn en computers onderdeel zijn van netwerken en internetwerken, wordt beveiliging nog belangrijker. Beveiliging kan het beste ingesteld worden door een gelaagde ui-aanpak. In een notendop zijn er het beste net zoveel lagen van beveiliging als handig is en daarna dient het systeem zorgvuldig gemonitord te worden op inbraken. Het is niet wenselijk beveiliging te overontwerpen, want dat doet afbreuk aan de detectiemogelijkheden en detectie is een van de belangrijkste aspecten van beveiligingsmechanismen. Zo heeft het bijvoorbeeld weinig zin om de schg vlaggen (zie &man.chflags.1;) op ieder binair bestand op een systeem te zetten, omdat het, hoewel dit misschien tijdelijk binaire bestanden beschermt, een inbreker in een systeem ervan kan weerhouden een eenvoudig te detecteren wijziging te maken waardoor beveiligingsmaatregelen de inbreker misschien helemaal niet ontdekken. Systeembeveiliging heeft ook te maken met het omgaan met verschillende vormen van aanvallen, zoals een poging om een systeem te crashen of op een andere manier onstabiel te maken, zonder te proberen de root account aan te vallen (break root). Aandachtspunten voor beveiliging kunnen opgesplitst worden in categorieën: Ontzeggen van dienst aanvallen (Denial of service). Gebruikersaccounts compromitteren. root compromitteren via toegankelijke servers. root compromitteren via gebruikersaccounts. Achterdeur creëren (Backdoor). DoS aanvallen Ontzegging van Dienst (DoS) beveiliging Ontzegging van Dienst DoS aanvallen (DoS) Ontzegging van Dienst (DoS) Een ontzegging van dienst (DoS) aanval is een techniek die de machine middelen ontneemt. In het algemeen zijn DoS aanvallen brute kracht mechanismen die proberen de machine te crashen of op een andere manier onbruikbaar te maken door de machine of de netwerkcode te overvragen. Sommige DoS aanvallen proberen misbruik te maken van bugs in de netwerkcode om een machine met een enkel pakket te crashen. Zoiets kan alleen gerepareerd worden door een aanpassing aan de kernel te maken. Aanvallen op servers kunnen vaak hersteld worden door op de juiste wijze opties in stellen om de belasting van servers te limiteren in ongunstige omstandigheden. Omgaan met brute kracht aanvallen is lastiger. Zo is een aanval met gefingeerde pakketten (spoofed-packet) vrijwel niet te stoppen, behalve dan door het systeem van internet los te koppelen. Misschien gaat de machine er niet door plat, maar het kan wel een volledige internetverbinding verzadigen. beveiliging account compromittering Een gecompromitteerde gebruikersaccount komt nog veel vaker voor dan een DoS aanval. Veel systeembeheerders draaien nog steeds standaard telnetd, rlogind, rshd en ftpd servers op hun machines. Deze servers communiceren standaard niet over beveiligde verbindingen. Het resultaat is dat als er een redelijk grote gebruikersgroep is, er altijd wel van een of meer van de gebruikers die van afstand op dat systeem aanmelden (wat toch de meest normale en makkelijke manier is om op een systeem aan te melden) het wachtwoord is afgeluisterd (sniffed). Een oplettende systeembeheerder analyseert zijn logboekbestanden om te zoeken naar verdachte bronadressen, zelfs als het om succesvolle aanmeldpogingen gaat. Uitgangspunt moet altijd zijn dat als een aanvaller toegang heeft tot een gebruikersaccount, de aanvaller de root account kan compromitteren. In werkelijkheid is het wel zo dat voor een systeem dat goed beveiligd is en goed wordt onderhouden, toegang tot een gebruikersaccount niet automatisch betekent dat de aanvaller ook root privileges kan krijgen. Het is van belang dit onderscheid te maken, omdat een aanvaller zonder toegang tot root in het algemeen zijn sporen niet kan wissen en op z'n best wat kan rommelen met bestanden van de gebruiker of de machine kan crashen. Gecompromitteerde gebruikersaccounts zijn vrij normaal omdat gebruikers normaliter niet de voorzorgsmaatregelen nemen die systeembeheerders nemen. beveiliging achterdeuren Systeembeheerders moeten onthouden dat er in potentie heel veel manieren zijn om toegang tot root te krijgen. Een aanvaller zou het root wachtwoord kunnen kennen, een bug kunnen ontdekken in een dienst die onder root draait en daar via een netwerkverbinding op in kunnen breken of een aanvaller zou een probleem kunnen met een suid-root programma dat de aanvaller in staat stelt root te worden als hij eenmaal toegang heeft tot een gebruikersaccount. Als een aanvaller een manier heeft gevonden om root te worden op een machine, dan hoeft hij misschien geen achterdeur (backdoor) te installeren. Veel bekende manieren die zijn gevonden om root te worden, en weer zijn afgesloten, vereisen veel werk van de aanvaller om zijn rommel achter zich op te ruimen, dus de meeste aanvallers installeren een achterdeur. Een achterdeur biedt de aanvaller een manier om makkelijk opnieuw root toegang tot het systeem te krijgen, maar dit geeft de slimme systeembeheerder ook een makkelijke manier om de inbraak te ontdekken. Het onmogelijk maken een achterdeur te installeren zou best wel eens nadelig kunnen zijn voor beveiliging, omdat hiermee nog niet het gat gedicht is waardoor er in eerste instantie is ingebroken. Beveiligingsmaatregelen moeten altijd geïmplementeerd worden in een meerlagenmodel en worden als volgt gecategoriseerd: Beveiligen van root en medewerkersaccounts. Beveiligen van root – servers onder root en suid/sgid binaire bestanden. Beveiligen van gebruikersaccounts. Beveiligen van het wachtwoordbestand. Beveiligen van de kern van de kernel, ruwe devices en bestandssystemen. Snel detecteren van ongeoorloofde wijzigingen aan het systeem. Paranoia. In het volgende onderdeel van dit hoofdstuk gaan we dieper in op de bovenstaande punten. &os; Beveiligen beveiliging &os; beveiligen Commando vs. Protocol In dit hele document gebruiken we vette tekst om te verwijzen naar een commando of applicatie en een monospaced lettertype om te verwijzen naar specifieke commando's. Protocollen staan vermeld in een normaal lettertype. Dit typografische onderscheid is zinvol omdat bijvoorbeeld ssh zowel een protocol als een commando is. In de volgende onderdelen behandelen we de methodes uit de vorige paragraaf om een &os; systeem te beveiligen. Beveiligen van <username>root</username> en Medewerkersaccounts. su Om te beginnen: doe geen moeite om medewerkersaccounts te beveiligen als de root account niet beveiligd is. Op de meeste systemen heeft de root account een wachtwoord. Als eerste moet aangenomen worden dat dit wachtwoord altijd gecompromitteerd is. Dit betekent niet dat het wachtwoord verwijderd moet worden. Het wachtwoord is namelijk bijna altijd nodig voor toegang via het console van de machine. Het betekent wel dat het niet mogelijk gemaakt moet worden om het wachtwoord te gebruiken buiten het console om en mogelijk zelfs niet via het &man.su.1; commando. Pty's moeten bijvoorbeeld gemarkeerd staan als onveilig (insecure) in het bestand /etc/ttys zodat direct aanmelden met root via telnet of rlogin niet wordt toegestaan. Als andere aanmelddiensten zoals sshd gebruikt worden, dan hoort direct aanmelden via root uitgeschakeld staat. Dit kan door het bestand /etc/ssh/sshd_config te bewerken en ervoor te zorgen dat PermitRootLogin op NO staat. Dit moet gebeuren voor iedere methode van toegang – diensten zoals FTP worden vaak over het hoofd gezien. Het direct aanmelden van root hoort alleen te mogen via het systeemconsole. wheel Natuurlijk moet een systeembeheerder de mogelijkheid hebben om root te worden. Daarvoor kunnen een paar gaatjes geprikt worden. Maar dan moet ervoor gezorgd worden dat er voor deze gaatjes extra aanmelden met een wachtwoord nodig is. Eén manier om root toegankelijk te maken is door het toevoegen van de juiste medewerkersaccounts aan de wheel groep (in /etc/group). De medewerkers die lid zijn van de groep wheel mogen su–en naar root. Maak medewerkers nooit native lid van de groep wheel door ze in de groep wheel te plaatsen in /etc/group. Medewerkersaccounts horen lid te zijn van de groep staff en horen dan pas toegevoegd te worden aan de groep wheel in het bestand /etc/group. Alleen medewerkers die ook echt toegang tot root nodig hebben horen in de groep wheel geplaatst te worden. Het is ook mogelijk, door een authenticatiemethode als Kerberos te gebruiken, om het bestand .k5login van Kerberos in de root account te gebruiken om een &man.ksu.1; naar root toe te staan zonder ook maar iemand lid te maken van de groep wheel. Dit is misschien wel een betere oplossing, omdat het wheel-mechanisme het nog steeds mogelijk maakt voor een inbreker root te breken als de inbreker een wachtwoordbestand te pakken heeft gekregen en toegang kan krijgen tot één van de medewerkersaccounts. Hoewel het instellen van het wheel-mechanisme beter is dan niets, is het niet per se de meest veilige optie. Een indirecte manier om de medewerkersaccounts te beveiligen en uiteindelijk ook de toegang tot root, is het gebruik van alternatieve aanmeldmethodes en de wachtwoorden van de medewerkersaccounts, zoals het heet uit te sterren. Met &man.vipw.8; kan iedere instantie van een gecodeerd wachtwoord vervangen worden door een enkel * karakter. Met dit commando worden /etc/master.passwd en de gebruikers/wachtwoord database bijgewerkt om het aanmelden met wachtwoord uit te schakelen. Een regel voor een medewerkersaccount als: foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh Zou veranderd moeten worden naar: foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh Door deze wijziging kan niet langer normaal aangemeld worden omdat het gecodeerde wachtwoord nooit gelijk is aan de *. Nu dit is gebeurd, moeten medewerkers een ander mechanisme gebruiken om zich te authenticeren zoals &man.kerberos.1; of &man.ssh.1; met een publiek/privaat sleutelpaar. Bij het gebruik van iets als Kerberos moeten gewoonlijk de machines waarop de Kerberos server draait en het desktop werkstation beveiligd worden. Bij het gebruik van een publiek/privaat sleutelpaar met ssh, moet in het algemeen de machine van waar wordt aangemeld beveiligd worden (meestal een werkstation). Het is mogelijk nog een beveiligingslaag toe te voegen door het sleutelpaar te beschermen met een wachtwoord als het aan te maken met &man.ssh-keygen.1;. Door accounts van medewerkers uit te sterren is het ook gegarandeerd dat ze alleen aan kunnen melden door gebruik te maken van de veilige toegangsmethodes die de beheerder heeft ingesteld. Hierdoor worden alle medewerkers gedwongen veilige, gecodeerde verbindingen te gebruiken voor al hun sessies. Daarmee wordt een belangrijk beveiligingsgat gesloten dat veel indringers gebruiken: snuffelen aan het netwerk vanaf een niet-relevante minder veilige machine. Meer indirecte beveiligingsmechanismen hebben ook als uitgangspunt dat vanaf een zwaarder beveiligde machine wordt aangemeld op een minder beveiligd systeem. Als een hoofdserver bijvoorbeeld allerlei servers draait, zou het werkstation er geen moeten draaien. Om een werkstation redelijk veilig te laten zijn, dienen er zo min mogelijk servers op te draaien, bij voorkeur zelfs geen en er zou een schermbeveiliging met wachtwoordbeveiliging op moeten draaien. Maar als een aanvaller fysieke toegang heeft tot een werkstation, dan kan hij elke beveiliging die erop is aangebracht omzeilen. Dit probleem dient echt overwogen te worden, net als het feit dat de meeste aanvallen van een afstand plaatsvinden, via het netwerk, door mensen die geen fysieke toegang hebben tot werkstations of servers. KerberosIV Het gebruik van iets als Kerberos geeft de mogelijkheid om het wachtwoord van de account van een medewerker buiten gebruik te stellen of te wijzigen op één plaats, waarbij het meteen actief is op alle machines waarop die medewerker een account heeft. Als de account van een medewerker gecompromitteerd raakt, moet vooral de mogelijkheid om per direct het wachtwoord voor machines te kunnen aanpassen niet onderschat worden. Met afzonderlijke wachtwoorden kan het veranderen van wachtwoorden op N systemen een puinhoop worden. Met Kerberos kunnen ook wachtwoordrestricties opgelegd worden: het is niet alleen mogelijk om een Kerberos ticket na een bepaalde tijd te laten verlopen, maar het Kerberos systeem kan afdwingen dat de gebruiker na een bepaalde tijd een nieuw wachtwoord kiest (na bijvoorbeeld een maand). Beveiligen van <username>root</username> – servers onder <username>root</username> en suid/sgid Binaire Bestanden ntalk comsat finger zandbakken sshd telnetd rshd rlogind Een voorzichtige systeembeheerder draait alleen die servers die nodig zijn, niets meer, niets minder. Bedenk dat servers van derde partijen vaak de meeste neiging hebben tot het vertonen van bugs. Zo staat bijvoorbeeld het draaien van een oude versie van imapd of popper gelijk aan het weggeven van de root account aan de hele wereld. Draai nooit een server die niet zorgvuldig is onderzocht. Veel servers hoeven niet te draaien als root. Zo kunnen de ntalk, comsat en finger daemons bijvoorbeeld draaien in speciale gebruikerszandbakken (sandboxes). Een zandbak is niet perfect, tenzij er heel veel moeite gedaan wordt, maar de meerlagenbenadering blijft bestaan: als iemand via een server die in een zandbak draait weet in te breken, dan moeten ze eerst nog uit de zandbak komen. Hoe groter het aantal lagen is waar een inbreker doorheen moet, hoe kleiner de kans op succes is. root gaten zijn historisch gezien aanwezig geweest in vrijwel iedere server die ooit als root gedraaid heeft, inclusief de basisservers van een systeem. Op een machine waarop mensen alleen aanmelden via sshd en nooit via telnetd of rshd of rlogind dienen die servers uitgeschakeld te worden! &os; draait ntalkd, comsat en finger tegenwoordig standaard in een zandbak. Een ander programma dat misschien beter in een zandbak kan draaien is &man.named.8;. In /etc/defaults/rc.conf staat als commentaar welke parameters er nodig zijn om named in een zandbak te draaien. Afhankelijk van of het een nieuwe systeeminstallatie of het bijwerken van een bestaand systeem betreft, worden de speciale gebruikersaccounts die bij die zandbakken horen misschien niet geïnstalleerd. Een voorzichtige systeembeheerder onderzoekt en implementeert zandbakken voor servers waar dat ook maar mogelijk is. sendmail Er zijn een aantal diensten die vooral niet in een zandbak draaien: sendmail, popper, imapd, ftpd en andere. Voor sommige servers zijn alternatieven, maar dat kost misschien meer tijd dan er te besteden is (gemak dient de mens). Het kan voorkomen dat deze servers als root moeten draaien en dat er vertrouwd moet worden op andere mechanismen om een inbraak via die servers te detecteren. De andere grote mogelijkheid voor root gaten in een systeem zijn de suid-root en sgid binaire bestanden die geïnstalleerd zijn op een systeem. Veel van die bestanden, zoals rlogin, staan in /bin, /sbin, /usr/bin of /usr/sbin. Hoewel het niet 100% veilig is, mag aangenomen worden dat de suid en sgid binaire bestanden van een standaardsysteem redelijk veilig zijn. Toch worden er nog wel eens root gaten gevonden in deze bestanden. Zo is er in 1998 een root gat gevonden in Xlib waardoor xterm (die normaliter suid is) kwetsbaar bleek. Een voorzichtige systeembeheerder kiest voor better to be safe than sorry door de suid bestanden die alleen medewerkers hoeven uit te voeren aan een speciale groep toe te wijzen en de suid bestanden die niemand gebruikt te lozen (chmod 000). Een server zonder monitor heeft normaal gezien xterm niet nodig. Sgid bestanden kunnen bijna net zo gevaarlijk zijn. Als een inbreker een sgid-kmem stuk kan krijgen, dan kan hij wellicht /dev/kmem lezen en dus het gecodeerde wachtwoordbestand, waardoor mogelijk ieder account met een wachtwoord besmet is. Een inbreker toegang tot de groep kmem kan krijgen, zou bijvoorbeeld mee kunnen kijken met de toetsaanslagen die ingegeven worden via de pty's, inclusief die pty's die gebruikt worden door gebruikers die via beveiligde methodes aanmelden. Een inbreker die toegang krijgt tot de groep tty kan naar bijna alle tty's van gebruikers schrijven. Als een gebruiker een terminalprogramma of een terminalemulator met een toetsenbordsimulatieoptie draait, dan kan de inbreker in potentie een datastroom genereren die ervoor zorgt dat de terminal van de gebruiker een commando echot, dat dan wordt uitgevoerd door die gebruiker. Beveiligen van Gebruikersaccounts Gebruikersaccounts zijn gewoonlijk het meest lastig om te beveiligen. Hoewel er allerlei Draconische maatregelen genomen kunnen worden met betrekking tot de medewerkers en hun wachtwoorden weggesterd kunnen worden, gaat dat waarschijnlijk niet lukken met de gewone gebruikersaccounts. Als er toch voldoende vrijheid is, dan prijst de beheerder zich gelukkig en is het misschien toch mogelijk de accounts voldoende te beveiligen. Als die vrijheid er niet is, dan moeten die accounts gewoon netter gemonitord worden. Het gebruik van ssh en Kerberos voor gebruikersaccounts is problematischer vanwege het extra beheer en de ondersteuning, maar nog steeds een prima oplossing in vergelijking met een gecodeerd wachtwoordbestand. Beveiligen van het Wachtwoordbestand De enige echte oplossing is zoveel mogelijk wachtwoorden * maken en ssh of Kerberos gebruiken voor toegang tot die accounts. Hoewel een gecodeerd wachtwoordbestand (/etc/spwd.db) alleen gelezen kan worden door root, is het wel mogelijk dat een inbreker leestoegang krijgt tot dat bestand zonder dat de aanvaller root-schrijftoegang krijgt. Beveiligingsscripts moeten altijd controleren op en rapporteren over wijzigingen in het wachtwoordbestand (zie ook Bestandsintegriteit Controleren hieronder). Beveiligen van de Kern van de Kernel, Ruwe Devices en Bestandssystemen Als een aanvaller toegang krijgt tot root dan kan hij ongeveer alles, maar er zijn een paar slimmigheidjes. Zo hebben bijvoorbeeld de meeste moderne kernels een ingebouwde pakketsnuffeldriver (packet sniffing). Bij &os; is dat het bpf device. Een inbreker zal in het algemeen proberen een pakketsnuffelaar te draaien op een gecompromitteerde machine. De inbreker hoeft deze mogelijkheid niet te hebben en bij de meeste systemen is het niet verplicht het bpf device mee te compileren. sysctl Maar zelfs als het bpf device is uitgeschakeld, dan zijn er nog /dev/mem en /dev/kmem. De inbreker kan namelijk nog schrijven naar ruwe diskdevices. En er is ook nog een optie in de kernel die modulelader (module loader) heet, &man.kldload.8;. Een ondernemende inbreker kan een KLD module gebruiken om zijn eigen bpf device of een ander snuffeldevice te installeren in een draaiende kernel. Om deze problemen te voorkomen, moet de kernel op een hoger veiligheidsniveau draaien, ten minste securelevel 1. Het securelevel wordt ingesteld met sysctl op de kern.securelevel variabele. Als securelevel op 1 staat, is het niet langer mogelijk te schrijven naar ruwe devices en speciale chflags vlaggen als schg worden dan afgedwongen. Ook dient de vlag schg gezet te worden op kritische opstartbestanden, mappen en scriptbestanden. Alles dat wordt uitgevoerd voordat het securelevel wordt ingesteld. Dit is misschien wat overdreven en het wordt lastiger een systeem te vernieuwen als dat in een hoger securelevel draait. Er is een compromis mogelijk door het systeem in een hoger securelevel te draaien maar de schg vlag niet op alle systeembestanden en mappen te zetten die maar te vinden zijn. / en /usr zouden ook als alleen-lezen gemount kunnen worden. Het is nog belangrijk om op te merken dat als de beheerder te Draconisch omgaat met dat wat hij wil beschermen, hij daardoor kan veroorzaken dat die o-zo belangrijke detectie van een inbraak wordt misgelopen. Bestandsintegriteit Controleren: Binaire Bestanden, Instellingenbestanden, Etc. Als puntje bij paaltje komt kan de kern van een systeem maar tot een bepaald punt beveiligd worden zonder dat het minder prettig werken wordt. Zo werk het zetten van de schg bit met chflags op de meeste bestanden in / en /usr waarschijnlijk averechts, omdat, hoewel de bestanden beschermd zijn, ook het venster waarin detectie plaats kan vinden is gesloten. De laatste laag van beveiliging is waarschijnlijk de meest belangrijke: detectie. Alle overige beveiliging is vrijwel waardeloos (of nog erger: geeft een vals gevoel van veiligheid) als een mogelijke inbraak niet gedetecteerd kan worden. Een belangrijk doel van het meerlagenmodel is het vertragen van een aanvaller, nog meer dan hem te stoppen, om de detectiekant van de vergelijking de kans te geven hem op heterdaad te betrappen. De beste manier om te zoeken naar een inbraak is zoeken naar gewijzigde, missende of onverwachte bestanden. De beste manier om te zoeken naar gewijzigde bestanden is vanaf een ander (vaak gecentraliseerd) systeem met beperkte toegang. Met zelfgeschreven scripts op dat extra beveiligde systeem met beperkte toegang ben is een beheerder vrijwel onzichtbaar voor mogelijke aanvallers en dat is belangrijk. Om het nut te maximaliseren moeten in het algemeen dat systeem met beperkte toegang best veel rechten gegeven worden op de andere machines in het netwerk, vaak via een alleen-lezen NFS export van de andere machines naar het systeem met beperkte toegang of door ssh sleutelparen in te stellen om het systeem met beperkte toegang een ssh verbinding te laten maken met de andere machines. Buiten het netwerkverkeer, is NFS de minst zichtbare methode. Hierdoor kunnen de bestandssystemen op alle client machines vrijwel ongezien gemonitord worden. Als de server met beperkte toegang verbonden is met de client machines via een switch, dan is de NFS methode vaak de beste keus. Als de server met beperkte toegang met de andere machines is verbonden via een hub of door meerdere routers, dan is de NFS methode wellicht niet veilig genoeg (vanuit een netwerk standpunt) en kan beter ssh gebruikt worden, ondanks de audit-sporen die ssh achterlaat. Als de machine met beperkte toegang eenmaal minstens leestoegang heeft tot een clientsysteem dat het moet gaan monitoren, dan moeten scripts gemaakt worden om dat monitoren ook echt uit te voeren. Uitgaande van een NFS mount, kunnen de scripts gebruik maken van eenvoudige systeem hulpprogramma's als &man.find.1; en &man.md5.1;. We adviseren minstens één keer per dag een md5 te maken van alle bestanden op de clientmachine en van instellingenbestanden als in /etc en /usr/local/etc zelfs vaker. Als er verschillen worden aangetroffen ten opzichte van de basis md5 informatie op het systeem met beperkte toegang, dan hoort het script te gillen om een beheerder die het moet gaan uitzoeken. Een goed beveiligingsscript controleert ook op onverwachte suid bestanden en op nieuwe en verwijderde bestanden op systeempartities als / en /usr. Als ssh in plaats van NFS wordt gebruikt, dan is het schrijven van het script lastiger. Dan moeten de scripts met scp naar de client verplaatst worden om ze uit te voeren, waardoor ze zichtbaar worden. Voor de veiligheid dienen ook de binaire bestanden die het script gebruikt, zoals &man.find.1;, gekopieerd te worden. De ssh client op de client zou al gecompromitteerd kunnen zijn. Het is misschien noodzakelijk ssh te gebruiken over onveilige verbindingen, maar dat maakt alles een stuk lastiger. Een goed beveiligingsscript voert ook controles uit op de instellingenbestanden van gebruikers en medewerkers: .rhosts, .shosts, .ssh/authorized_keys, enzovoort… Dat zijn bestanden die buiten het bereik van de MD5 controle vallen. Als gebruikers veel diskruimte hebben, dan kan het te lang duren om alle bestanden op deze partitie te controleren. In dat geval is het verstandig de mount vlaggen zo in te stellen dat suid binaire bestanden en devices op die partities niet zijn toegestaan. Zie daarvoor de nodev en nosuid opties (zie &man.mount.8;). Die partities moeten wel toch nog minstens eens per week doorzocht worden, omdat het doel van deze beveiligingslaag het ontdekken van een inbraak is, of die nu succesvol is of niet. Procesverantwoording (zie &man.accton.8;) kost relatief gezien weinig en kan bijdragen aan een evaluatie mechanisme voor na inbraken. Het is erg handig om uit te zoeken hoe iemand precies heeft ingebroken op het systeem, mits het bestand nog onbeschadigd is na de inbraak. Tenslotte horen beveiligingsscripts de logboekbestanden te verwerken en de logboekbestanden zelf horen zo veilig mogelijk tot stand te komen. remote syslog kan erg zinvol zijn. Een aanvaller probeert zijn sporen uit te wissen en logboekbestanden zijn van groot belang voor een systeembeheerder als het gaat om uitzoeken wanneer en hoe er is ingebroken. Een manier om logboekbestanden veilig te stellen is door het systeemconsole via een seriële poort aan te sluiten op een veilige machine en zo continu informatie te verzamelen. Paranoia Een beetje paranoia is niet verkeerd. Eigenlijk kan de systeembeheerder zoveel beveiligingsopties inschakelen als hij wil, als deze maar geen impact hebben op het gebruiksgemak en de beveiligingsopties die wel impact hebben op het gebruiksgemak kunnen ingeschakeld worden als daar zorgvuldig mee wordt omgegaan. Nog belangrijker is misschien dat er een juiste combinatie wordt gevonden. Als de aanbevelingen uit dit document woord voor woord worden opgevolgd, dan worden daarmee de methodes aan een toekomstige aanvaller verraden, die ook toegang heeft tot dit document. Ontzeggen van Dienst Aanvallen Ontzegging van Dienst (DoS) In deze paragraaf worden Ontzeggen van Dienst aanvallen (Denial of Service of DoS) behandeld. Een DoS aanval wordt meestal uitgevoerd als pakketaanval. Hoewel er weinig gedaan kan worden tegen de huidige aanvallen met gefingeerde pakketten die een netwerk kunnen verzadigen, kan de schade geminimaliseerd worden door ervoor te zorgen dat servers er niet door plat gaan. Limiteren van server forks. Limiteren van springplank (springboard) aanvallen (ICMP response aanvallen, ping broadcast, etc.). Kernel Route Cache. Een veelvoorkomende DoS aanval tegen een server die forkt is er een die probeert processen, file descriptors en geheugen te gebruiken tot de machine het opgeeft. inetd (zie &man.inetd.8;) kent een aantal instellingen om dit type aanval af te zwakken. Hoewel het mogelijk is ervoor te zorgen dat een machine niet plat gaat, is het in het algemeen niet mogelijk te voorkomen dat de dienstverlening door de aanval wordt verstoord. Meer is te lezen in de handleiding van inetd en het advies is in het bijzonder aandacht aan de , en opties te besteden. Aanvallen met gefingeerde IP adressen omzeilen de optie naar inetd, dus in het algemeen moet een combinatie van opties gebruikt worden. Sommige op zichzelf staande servers hebben parameters waarmee het aantal forks gelimiteerd kan worden. Sendmail heeft de optie die veel beter blijkt te werken dan het gebruik van de opties van sendmail waarmee de werklast gelimitteerd kan worden. De parameter MaxDaemonChildren moet zodanig ingesteld worden dat als sendmail start, hij hoog genoeg is om de te verwachten belasting aan te kunnen, maar niet zo hoog is dat de computer het aantal instanties van sendmails niet aankan zonder plat te gaan. Het is ook verstandig om sendmail in de wachtrij modus () te draaien en de daemon (sendmail -bd) los te koppelen van de verwerking van de wachtrij (sendmail -q15m). Als de verwerking van wachtrij real-time moet, kunnen de tussenpozen voor verwerking verkort worden door deze bijvoorbeeld op in te stellen, maar dan is een redelijke instelling van MaxDaemonChildren van belang om die sendmail te beschermen tegen trapsgewijze fouten (cascade failures). Syslogd kan direct aangevallen worden en het is sterk aan te raden de optie te gebruiken waar dat ook maar mogelijk is en anders de optie. Er dient voorzichtig omgesprongen te worden met diensten die terugverbinden zoals TCP Wrapper's reverse-identd die direct aangevallen kan worden. In het algemeen is het hierom onverstandig gebruik te maken van de reverse-ident optie van TCP Wrapper. Het is een goed idee om interne diensten af te schermen voor toegang van buitenaf door ze te firewallen op de routers aan de rand van een netwerk (border routers). Dit heeft als achtergrond dat verzadigingsaanvallen voorkomen van buiten het LAN voorkomen kunnen worden. Daarmee wordt geen aanval op root via het netwerk en die diensten daaraan voorkomen. Er dient altijd een exclusieve firewall te zijn, d.w.z. firewall alles behalve poorten A, B, C, D en M-Z. Zo worden alle lage poorten gefirewalled behalve die voor specifieke diensten als named (als er een primary is voor een zone), ntalkd, sendmail en andere diensten die vanaf internet toegankelijk moeten zijn. Als de firewall andersom wordt ingesteld, als een inclusieve of tolerante firewall, dan is de kans groot dat er wordt vergeten een aantal diensten af te sluiten of dat er een nieuwe interne dienst wordt toegevoegd en de firewall niet wordt bijgewerkt. Er kan nog steeds voor gekozen worden de hoge poorten open te zetten, zodat een tolerante situatie ontstaat, zonder de lage poorten open te stellen. &os; biedt ook de mogelijkheid een reeks poortnummers die gebruikt worden voor dynamische verbindingen in te stellen via de verscheidene net.inet.ip.portrange sysctls (sysctl -a | fgrep portrange), waardoor ook de complexiteit van de firewall instellingen kan vereenvoudigen. Zo kan bijvoorbeeld een normaal begin tot eindbereik ingesteld worden van 4000 tot 5000 en een hoog poortbereik van 49152 tot 65535. Daarna kan alles onder 4000 op de firewall geblokkeerd worden (met uitzondering van bepaalde poorten die vanaf internet bereikbaar moeten zijn natuurlijk). ICMP_BANDLIM Een andere veelvoorkomende DoS aanval is de springplank aanval: een server zo aanvallen dat de respons van die server de server zelf, het lokale netwerk of een andere machine overbelast. De meest voorkomende aanval van dit type is de ICMP ping broadcast aanval. De aanvaller fingeert ping pakketten die naar het broadcast adres van het LAN worden gezonden met als bron het IP adres van de machine die hij eigenlijk aan wil vallen. Als de routers aan de rand van het netwerk niet zijn ingesteld om een ping aan een broadcast adres te blokkeren, dan kan het LAN genoeg antwoorden produceren om de verbinding van het slachtoffer (het gefingeerde bronadres) te verzadigen, zeker als de aanvaller hetzelfde doet met tientallen andere netwerken. Broadcastaanvallen met een volume van meer dan 120 megabit zijn al voorgekomen. Een tweede springplank aanval is er een tegen het ICMP foutmeldingssysteem. Door een pakket te maken waarop een ICMP foutmelding komt, kan een aanvaller de inkomende verbinding van een server verzadigen en de uitgaande verbinding wordt verzadigd door de foutmeldingen. Dit type aanval kan een server ook laten crashen, zeker als de server de ICMP antwoorden niet zo snel kwijt kan als ze ontstaan. De kernel van &os; kent een nieuwe compileeroptie waarmee de effectiviteit van dit type aanvallen afneemt. De laatste belangrijke klasse springplankaanvallen hangt samen met een aantal interne diensten van inetd zoals de UDP echo dienst. Een aanvaller fingeert eenvoudigweg een UDP pakket met als bronadres de echopoort van Server A en als bestemming de echopoort van Server B, waar Server A en B allebei op een LAN staan. Die twee servers gaan dat pakket dan heen en weer kaatsen. Een aanvaller kan beide servers overbelasten door een aantal van deze pakketten te injecteren. Soortgelijke problemen kunnen ontstaan met de chargen poort. Een competente systeembeheerder zal al deze interne inetd test-diensten uitschakelen. Gefingeerde pakketten kunnen ook gebruikt worden om de kernel route cache te overbelasten. Raadpleeg daarvoor de net.inet.ip.rtexpire, rtminexpire en rtmaxcache sysctl parameters. Een aanval met gefingeerde pakketten met een willekeurig bron IP zorgt ervoor dat de kernel een tijdelijke cached route maakt in de routetabel, die uitgelezen kan worden met netstat -rna | fgrep W3. Deze routes hebben een levensduur van ongeveer 1600 seconden. Als de kernel merkt dat de cached routetabel te groot is geworden, dan wordt rtexpire dynamisch verkleind, maar deze waarde wordt nooit lager dan rtminexpire. Er zijn twee problemen: De kernel reageert niet snel genoeg als een laag belaste server wordt aangevallen. rtminexpire is niet laag genoeg om de kernel de aanval te laten overleven. Als servers verbonden zijn met het internet via een E3 of sneller, dan is het verstandig om handmatig rtexpire en rtminexpire aan te passen via &man.sysctl.8;. Als de een van de parameters op nul wordt gezet, dan crasht de machine. Het instellen van beide waarden op 2 seconden is voldoende om de routetabel tegen een aanval te beschermen. Aandachtspunten voor Toegang met <application>Kerberos</application> en <application>SSH</application> ssh KerberosIV Er zijn een aantal aandachtspunten die in acht genomen moeten worden als Kerberos of ssh gebruikt worden. Kerberos V is een prima authenticatieprotocol, maar er zitten bugs in de kerberos versies van telnet en rlogin waardoor ze niet geschikt zijn voor binair verkeer. Kerberos codeert standaard sessie niet, tenzij de optie wordt gebruikt. ssh codeert standaard wel alles. ssh werkt prima, maar het stuurt coderingssleutels standaard door. Dit betekent dat als gegeven een veilig werkstation met sleutels die toegang geven tot de rest van het systeem en ssh wordt gebruikt om verbinding te maken met een onveilige machine, die sleutels gebruikt kunnen worden. De sleutels zelf zijn niet bekend, maar ssh stelt een doorstuurpoort in zolang als een gebruikers aangemeld blijft. Als de aanvaller roottoegang heeft op de onveilige machine, dan kan hij die poort gebruiken om toegang te krijgen tot alle machines waar de sleutels van de gebruiker toegang toe geven. Het advies is ssh in combinatie met Kerberos te gebruiken voor het aanmelden door medewerkers wanneer dat ook maar mogelijk is. ssh kan gecompileerd worden met Kerberos ondersteuning. Dit vermindert de kans op blootstelling van ssh sleutels en beschermt tegelijkertijd de wachtwoorden met Kerberos. ssh sleutels zouden alleen gebruikt moeten worden voor geautomatiseerde taken vanaf veilige machines (iets waar Kerberos ongeschikt voor is). Het advies is om het doorsturen van sleutels uit te schakelen in de ssh instellingen of om de from=IP/DOMAIN optie te gebruiken die ssh in staat stelt het bestand authorized_keys te gebruiken om de sleutel alleen bruikbaar te maken voor entiteiten die zich aanmelden vanaf vooraf aangewezen machines. Bill Swingle Delen geschreven en herschreven door Siebrand Mazeland Vertaald door DES, MD5 en Crypt beveiliging crypt crypt DES MD5 Iedere gebruiker op een &unix; systeem heeft een wachtwoord bij zijn account. Het lijkt voor de hand liggend dat deze wachtwoorden alleen bekend horen te zijn bij de gebruiker en het eigenlijke besturingssysteem. Om deze wachtwoorden geheim te houden, zijn ze gecodeerd in een eenweg hash (one-way hash), wat betekent dat ze eenvoudig gecodeerd kunnen worden maar niet gedecodeerd. Met andere woorden, wat net gesteld werd is helemaal niet waar: het besturingssysteem kent het echte wachtwoord niet. De enige manier om een wachtwoord in platte tekst te verkrijgen, is door er met brute kracht naar te zoeken in alle mogelijke wachtwoorden. Helaas was DES, de Data Encryption Standard, de enige manier om wachtwoorden veilig te coderen toen &unix; ontstond. Dit was geen probleem voor gebruikers in de VS, maar omdat de broncode van DES niet geëxporteerd mocht worden moest &os; een manier vinden om zowel te gehoorzamen aan de wetten van de VS als aansluiting te houden bij alle andere &unix; varianten die nog steeds DES gebruikten. De oplossing werd gevonden in het splitsen van de coderingsbibliotheken zodat gebruikers in de VS de DES bibliotheken konden installeren en gebruiken en internationale gebruikers een coderingsmethode konden gebruiken die geëxporteerd mocht worden. Zo is het gekomen dat &os; MD5 is gaan gebruiken als coderingsmethode. Van MD5 wordt aangenomen dat het veiliger is dan DES, dus de mogelijkheid om DES te installeren is vooral beschikbaar om aansluiting te kunnen houden. Het Crypt Mechanisme Herkennen Voor &os; 4.4 was libcrypt.a een symbolic link die wees naar de bibliotheek die gebruikt werd voor codering. In &os; 4.4 veranderde libcrypt.a zodat er een instelbare wachtwoordhash bibliotheek kwam. Op dit moment ondersteunt de bibliotheek DES, MD5 en Blowfish hashfuncties. Standaard gebruikt &os; MD5 om wachtwoorden te coderen. Het is vrij makkelijk om uit te vinden welke coderingsmethode &os; op een bepaald moment gebruikt. De gecodeerde wachtwoorden in /etc/master.passwd bekijken is een manier. Wachtwoorden die gecodeerd zijn met MD5 zijn langer dan wanneer ze gecodeerd zijn met DES hash. Daarnaast beginnen ze met de karakters $1$. Wachtwoorden die beginnen met $2a$ zijn gecodeerd met de Blowfish hashfunctie. DES password strings hebben geen bijzondere kenmerken, maar ze zijn korter dan MD5 wachtwoorden en gecodeerd in een 64-karakter alfabet waar geen $ karakter in zit. Een relatief korte string die niet begint met een dollar teken is dus waarschijnlijk een DES wachtwoord. Het wachtwoord formaat voor nieuwe wachtwoorden wordt ingesteld met de passwd_format aanmeldinstelling in /etc/login.conf waar des, md5 of blf mag staan. Zie de &man.login.conf.5; handboekpagina voor meer informatie over aanmeldinstellingen. Eenmalige Wachtwoorden eenmalige wachtwoorden beveiliging eenmalige wachtwoorden S/Key is een eenmalige wachtwoord methode die gebaseerd is op de eenweg hashfunctie. &os; gebruikt een MD4 hash om aansluiting te houden, maar andere systemen gebruiken ook wel MD5 en DES-MAC. S/Key is al een onderdeel van het &os; basissysteem vanaf versie 1.1.5 en wordt ook in een groeiend aantal andere besturingssystemen gebruikt. S/Key is een geregistreerd handelsmerk van Bell Communications Research, Inc. Vanaf versie 5.0 van &os; is S/Key vervangen door OPIE (Eenmalige Wachtwoorden in Alles - One-time Passwords In Everything). OPIE gebruikt standaard een MD5 hash. Hier worden drie verschillende soorten wachtwoorden besproken. De eerste is het normale &unix; of Kerberos wachtwoord. Dit heet het &unix; wachtwoord. Het tweede type is een eenmalig wachtwoord dat wordt gemaakt met het S/Key programma key of het OPIE programma &man.opiekey.1; en dat wordt geaccepteerd door keyinit of &man.opiepasswd.1; en de aanmeldprocedure. Dit heet het eenmalige wachtwoord. Het laatste type wachtwoord is het wachtwoord dat wordt opgegeven aan de key/ opiekey programma's (en soms aan de keyinit / opiepasswd programma's) die gebruikt worden om eenmalige wachtwoorden te maken. Dit type heet geheim wachtwoord of gewoon een wachtwoord zonder toevoeging. Het geheime wachtwoord heeft niets te maken met het &unix; wachtwoord; ze kunnen hetzelfde zijn, dat wordt afgeraden. S/Key en OPIE geheime wachtwoorden kennen niet de beperking van 8 karakters als de oude &unix; wachtwoorden. Bij &os; mag het wachtwoord voor aanmelden tot 128 karakters lang zijn. Het mag onbeperkt lang zijn. Wachtwoorden van een zes of zeven woorden lange zin zijn niet ongewoon. Voor het overgrote deel werkt het S/Key of OPIE systeem volledig onafhankelijk van het &unix; wachtwoordsysteem. Buiten het wachtwoord zijn er nog twee stukjes data die van belang zijn voor S/Key en OPIE. Het eerste wordt zaad (seed) of sleutel (key) genoemd en bestaat uit twee letters en vijf cijfers. Het tweede stukje data heet de iteratieteller (iteration count), een nummer tussen 1 en 100. S/Key maakt een eenmalig wachtwoord door het zaad en het geheime wachtwoord aaneen te schakelen en daarop het door de iteratieteller aangegeven keren MD4/MD5 hash toe te passen. Daarna wordt het resultaat omgezet in zes korte Engelse woorden. Die zes woorden zijn een eenmalige wachtwoord. Het authenticatiesysteem (hoofdzakelijk PAM) houdt bij welk eenmalig wachtwoord het laatst is gebruikt en de gebruiker wordt geauthenticeerd als de hash van het door de gebruiker ingegeven wachtwoord gelijk is aan het vorige wachtwoord. Omdat er een eenweg hash wordt gebruikt, is het onmogelijk om toekomstige eenmalige wachtwoorden te maken als iemand toch een eenmalig wachtwoord heeft afgevangen. De iteratieteller wordt verlaagd na iedere succesvolle aanmelding om de gebruiker en het aanmeldprogramma synchroon te houden. Als de iteratieteller op 1 staat, moeten S/Key en OPIE opnieuw ingesteld worden. Er zijn drie programma's bij ieder systeem betrokken die hieronder worden besproken. De key en opiekey programma's hebben een iteratieteller, zaad en een geheim wachtwoord nodig en maken dan een eenmalig wachtwoord of een lijst van opeenvolgende eenmalige wachtwoorden. De programma's keyinit en opiepasswd worden gebruikt om respectievelijk S/Key en OPIE te initialiseren en om wachtwoorden, iteratietellers en zaad te wijzigen. Ze accepteren zowel wachtwoordzinnen als een iteratieteller, zaad en een eenmalig wachtwoord. De programma's keyinfo en opieinfo bekijken de relevante bestanden waarin de eigenschappen staan (/etc/skeykeys of /etc/opiekeys) en tonen de huidige iteratieteller en zaad van de gebruiker die het commando uitvoert. Nu worden vier verschillende acties besproken. Bij de eerste worden keyinit of opiepasswd gebruikt in een beveiligde verbinding om voor het eerst eenmalige wachtwoorden in te stellen of om een wachtwoord of zaad aan te passen. Bij de tweede worden keyinit of opiepasswd gebruikt in een niet-beveiligde verbinding samen met key of opiekey over een beveiligde verbinding om hetzelfde te bereiken. In een derde scenario wordt key/opiekey gebruikt om te melden over een onveilige verbinding. Het vierde scenario behandelt het gebruik van key of opiekey om een aantal sleutels aan te maken die opgeschreven of afgedrukt kunnen worden, zodat ze meegenomen kunnen worden naar een plaats van waar geen enkele veilige verbinding opgezet kan worden. Veilige Verbinding Initialiseren Om S/Key voor de eerste keer te initialiseren, een wachtwoord te wijzigen of zaad te veranderen over een - beveiligde verbinding (bv. op het console van een machine of - via ssh), moet het commando - keyinit gebruikt worden zonder parameters - terwijl een gebruiker als zichzelf is aangemeld: + beveiligde verbinding (bijvoorbeeld op het console van een + machine of via ssh), moet het + commando keyinit gebruikt worden zonder + parameters terwijl een gebruiker als zichzelf is + aangemeld: &prompt.user; keyinit Adding unfurl: Reminder - Only use this method if you are directly connected. If you are using telnet or rlogin exit with no password and use keyinit -s. Enter secret password: Again secret password: ID unfurl s/key is 99 to17757 DEFY CLUB PRO NASH LACE SOFT Bij OPIE wordt opiepasswd gebruikt: &prompt.user; opiepasswd -c [grimreaper] ~ $ opiepasswd -f -c Adding unfurl: Only use this method from the console; NEVER from remote. If you are using telnet, xterm, or a dial-in, type ^C now or exit with no password. Then run opiepasswd without the -c parameter. Using MD5 to compute responses. Enter new secret pass phrase: Again new secret pass phrase: ID unfurl OTP key is 499 to4268 MOS MALL GOAT ARM AVID COED Als Enter new secret pass phrase: of Enter secret password: op het scherm verschijnt, dient een wachtwoord of wachtwoordzin ingevoerd te worden. Dit is dus niet het aanmeldwachtwoord is, maar dat dit wordt gebruikt om eenmalige wachtwoorden te maken. De ID regel geeft de parameters van het verzoek weer: de aanmeldnaam, de iteratieteller en zaad. Bij het aanmelden kent het systeem deze parameters en worden deze weergegeven zodat ze niet onthouden hoeven te worden. Op de laatste regel staat het eenmalige wachtwoord dat overeenkomt met die parameters en het geheime wachtwoord. Als de gebruiker direct opnieuw zou aanmelden, zou hij dat eenmalige wachtwoord moeten gebruiken. Onveilige Verbinding Initialiseren Om te initialiseren of een wachtwoord te wijzigen over een onveilige verbinding, moet er al ergens een veilige verbinding bestaand de gebruiker key of opiekey kan uitvoeren. Dit kan een desktop programma zijn op een &macintosh; of een shell prompt op een machine die vertrouwd wordt. De gebruiker moet ook een iteratieteller verzinnen (100 is wellicht een prima getal) en moet een eigen zaad bedenken of er een laten fabriceren. Over de onveilige verbinding (naar de machine die de gebruiker wil initialiseren) wordt het commando keyinit -s gebruikt: &prompt.user; keyinit -s Updating unfurl: Old key: to17758 Reminder you need the 6 English words from the key command. Enter sequence count from 1 to 9999: 100 Enter new key [default to17759]: s/key 100 to 17759 s/key access password: s/key access password:CURE MIKE BANE HIM RACY GORE Bij OPIE is dat opiepasswd: &prompt.user; opiepasswd Updating unfurl: You need the response from an OTP generator. Old secret pass phrase: otp-md5 498 to4268 ext Response: GAME GAG WELT OUT DOWN CHAT New secret pass phrase: otp-md5 499 to4269 Response: LINE PAP MILK NELL BUOY TROY ID mark OTP key is 499 gr4269 LINE PAP MILK NELL BUOY TROY Om het standaard zaad te accepteren (dat het programma keyinit nogal verwarrend een key) noemt, is de invoer Return. Voor een toegangswachtwoord wordt ingevoerd, dient eerst gewisseld te worden naar de veilige verbinding of het S/Key desktop programma en dienen dezelfde parameters ingegeven te worden: &prompt.user; key 100 to17759 Reminder - Do not use this program while logged in via telnet or rlogin Enter secret password: <secret password> CURE MIKE BANE HIM RACY GORE Of bij OPIE: &prompt.user; opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT In de onveilige verbinding wordt nu het eenmalige wachtwoord in het relevante programma gekopieerd. Een Enkel Eenmalig Wachtwoord Maken Als S/Key of OPIE eenmaal is ingesteld staat er bij het aanmelden iets als het volgende: &prompt.user; telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> s/key 97 fw13894 Password: Of bij OPIE: &prompt.user; telnet example.com Trying 10.0.0.1... Connected to example.com Escape character is '^]'. FreeBSD/i386 (example.com) (ttypa) login: <username> otp-md5 498 gr4269 ext Password: NB: de S/Key en OPIE meldingen hebben een erg zinvolle optie (die hier niet te zien is): als er op Return wordt gedrukt bij de wachtwoordregel, wordt de echo aangezet, zodat de invoer zichtbaar is. Dit is erg handig als er met de hand een wachtwoord wordt ingegeven, zoals wanneer het wordt ingevoerd vanaf een afdruk. MS-DOS Windows MacOS Nu moet het eenmalige wachtwoord gemaakt worden om het aanmeldprompt mee te antwoorden. Dit moet gedaan worden op een vertrouwd systeem waarop key of opiekey beschikbaar is. Er zijn ook versies voor &ms-dos;, &windows; en &macos;. Voor beide commando's moet zowel de iteratieteller als het zaad ingeven worden op de commandoregel. Deze kan zo overgenomen worden vanaf het aanmeldprompt op de machine waarop de gebruiker wil aanmelden. Op het vertrouwde systeem: &prompt.user; key 97 fw13894 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: WELD LIP ACTS ENDS ME HAAG Bij OPIE: &prompt.user; opiekey 498 to4268 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: GAME GAG WELT OUT DOWN CHAT Nu het eenmalige wachtwoord er is, kan het aanmelden doorgang vinden: login: <username> s/key 97 fw13894 Password: <return to enable echo> s/key 97 fw13894 Password [echo on]: WELD LIP ACTS ENDS ME HAAG Last login: Tue Mar 21 11:56:41 from 10.0.0.2 ... Meerdere Eenmalige Wachtwoorden Maken Soms moet is een gebruiker ergens waarvandaan er geen toegang is tot een vertrouwde machine of een beveiligde verbinding. In dat geval is het mogelijk om met de key en opiekey commando's een aantal eenmalige wachtwoorden te maken om uit te printen en deze mee te nemen: &prompt.user; key -n 5 30 zz99999 Reminder - Do not use this program while logged in via telnet or rlogin. Enter secret password: <secret password> 26: SODA RUDE LEA LIND BUDD SILT 27: JILT SPY DUTY GLOW COWL ROT 28: THEM OW COLA RUNT BONG SCOT 29: COT MASH BARR BRIM NAN FLAG 30: CAN KNEE CAST NAME FOLK BILK Of bij OPIE: &prompt.user; opiekey -n 5 30 zz99999 Using the MD5 algorithm to compute response. Reminder: Don't use opiekey from telnet or dial-in sessions. Enter secret pass phrase: <secret password> 26: JOAN BORE FOSS DES NAY QUIT 27: LATE BIAS SLAY FOLK MUCH TRIG 28: SALT TIN ANTI LOON NEAL USE 29: RIO ODIN GO BYE FURY TIC 30: GREW JIVE SAN GIRD BOIL PHI Met worden vijf opeenvolgende sleutels aangevraagd, geeft aan wat het laatste iteratiegetal moet zijn. Deze wachtwoorden worden weergegeven in omgekeerde volgorde voor gebruik. Als de gebruiker echt paranoïde bent kan hij ze opschrijven of hij kan er ook voor kiezen ze af te drukken met lpr. Op iedere regel staat dus de iteratieteller en het eenmalige wachtwoord, maar misschien is het toch handig om ze na gebruik af te strepen. Gebruik van &unix; Wachtwoorden Beperken S/Key kan beperkingen plaatsen op het gebruik van &unix; wachtwoorden gebaseerd op hostnaam, gebruikersnaam, terminalpoort of IP adres van een aanmeldsessie. Deze beperkingen staan in het instellingenbestand /etc/skey.access. De handboekpagina voor &man.skey.access.5; bevat meer informatie over de inhoud van het bestand en bevat ook details over een aantal aandachtspunten voor beveiliging voordat besloten wordt dit bestand te gebruiken in de beveiliging. Als het bestand /etc/skey.access niet bestaat (dat mag in &os; 4.X systemen), dan mogen alle gebruikers hun &unix; wachtwoord gebruiken. Maar als het bestand wel bestaat, dan moeten alle gebruikers S/Key gebruiken, tenzij iets anders expliciet wordt toegestaan door instellingen in het bestand skey.access. In alle gevallen worden &unix; wachtwoorden op het console wel toegestaan. Nu volgt een voorbeeld met instellingen in het bestand skey.access waarin de drie meest gebruikte instellingen terugkomen: permit internet 192.168.0.0 255.255.0.0 permit user fnord permit port ttyd0 In de eerste regel (permit internet) staat dat gebruikers met een bron IP adres (wat gefingeerd kan worden) dat past binnen de aangegeven waarde en masker altijd &unix; wachtwoorden mogen gebruiken. Dit mag niet gezien worden als beveiligingsmechanisme, maar eerder als een mogelijkheid om gebruikers aan wie het wordt toegestaan eraan te herinneren dat ze op een onveilig netwerk zitten en gebruik moeten maken van S/Key bij het aanmelden. De tweede regel (permit user) staat de gebruiker fnord toe om altijd &unix; wachtwoorden te gebruiken. In het algemeen dient dit alleen gebruikt te worden voor gebruikers die niet in staat zijn het programma key te gebruiken, zoals gebruikers met domme terminals of gebruikers die totaal niet op te voeden zijn. De derde regel (permit port) staat gebruikers die aanmelden vanaf een aangegeven terminalverbinding toe om &unix; wachtwoorden te gebruiken. Dit kan gebruikt worden voor inbellers. Met OPIE kan ook paal en perk gesteld worden aan het gebruik van &unix; wachtwoorden op basis van het IP adres van een aanmeldsessie, net als met S/Key. Dat kan met het bestand /etc/opieaccess dat standaard aanwezig is op &os; 5.0 en latere systemen. Bij &man.opieaccess.5; staat meer informatie over dit bestand en welke beveiligingsoverwegingen bestaan bij het gebruik. Hieronder een voorbeeld voor een opieaccess bestand: permit 192.168.0.0 255.255.0.0 In deze regel (permit internet) staat dat gebruikers met een bron IP adres (wat gefingeerd kan worden) dat past binnen de aangegeven waarde en masker altijd &unix; wachtwoorden mogen gebruiken. Als geen van de regels uit opieaccess van toepassing is, worden standaard pogingen zonder OPIE geweigerd. Tom Rhodes Geschreven door Siebrand Mazeland Vertaald door TCP Wrapper TCP Wrappers Iedereen die bekend is met &man.inetd.8; heeft waarschijnlijk wel eens van TCP Wrappers gehoord. Maar slechts weinigen lijken volledig te begrijpen hoe ze in een netwerkomgeving toegepast kunnen worden. Het schijnt dat iedereen een firewall wil hebben om netwerkverbindingen af te handelen. Ondanks dat een firewall veel kan, zijn er toch dingen die hij niet kan, zoals tekst terugsturen naar ontstaansplaats van een verbinding. De TCP software kan dat en nog veel meer. In dit onderdeel worden de TCP Wrappers mogelijkheden besproken en, waar dat van toepassing is, worden ook voorbeelden voor implementatie gegeven. De TCP Wrappers software vergroot de mogelijkheden van inetd door de mogelijkheid al zijn serverdaemons te controleren. Met deze methode is het mogelijk om te loggen, berichten te zenden naar verbindingen, een daemon toe te staan alleen interne verbindingen te accepteren, etc. Hoewel een aantal van deze mogelijkheden ook ingesteld kunnen worden met een firewall, geeft deze manier niet alleen een extra laag beveiliging, maar gaat dit ook verder dan wat een firewall kan bieden. De toegevoegde waarde van TCP Wrappers is niet dat het een goede firewall vervangt. TCP Wrappers kunnen samen met een firewall en andere beveiligingsinstellingen gebruikt worden om een extra laag van beveiliging voor het systeem te bieden. Omdat dit een uitbreiding is op de instellingen van inetd, wordt aangenomen dat de lezer het onderdeel inetd configuration heeft gelezen. Hoewel programma's die onder &man.inetd.8; draaien niet echt daemons zijn, heten ze traditioneel wel zo. Deze term wordt hier dus ook gebruikt. Voor het Eerst Instellen De enige voorwaarde voor het gebruiken van TCP Wrappers in &os; is ervoor te zorgen dat de inetd gestart wordt vanuit rc.conf met de optie . Dit is de standaardinstelling. Er wordt vanuit gegaan dat /etc/hosts.allow juist is ingesteld, maar als dat niet zo is, dan zal &man.syslogd.8; dat melden. In tegenstelling tot bij andere implementaties van TCP Wrappers is het gebruik van hosts.deny niet langer mogelijk. Alle instellingen moeten in /etc/hosts.allow staan. In de meest eenvoudige instelling worden verbindingen naar daemons toegestaan of geweigerd afhankelijk van de opties in /etc/hosts.allow. De standaardinstelling in &os; is verbindingen toe te staan naar iedere daemon die met inetd is gestart. Na de basisinstelling wordt aangegeven hoe dit gewijzigd kan worden. De basisinstelling heeft meestal de vorm daemon : adres : actie. daemon is de daemonnaam die inetd heeft gestart. Het adres kan een geldige hostnaam, een IP adres of een IPv6 adres tussen blokhaken ([ ]) zijn. Het veld actie kan allow of deny zijn, afhankelijk van of toegang toegestaan of geweigerd moet worden. De instellingen werken zo dat ze worden doorlopen van onder naar boven om te kijken welke regel als eerste van toepassing is. Als een regel van toepassing is gevonden, dan stop het zoekproces. Er zijn nog andere mogelijkheden, maar die worden elders toegelicht. Een eenvoudige instelling kan al van met deze informatie worden gemaakt. Om bijvoorbeeld POP3 verbindingen toe te staan via de mail/qpopper daemon, zouden de volgende instellingen moeten worden toegevoegd aan hosts.allow: # This line is required for POP3 connections: qpopper : ALL : allow Nadat deze regel is toegevoegd moet inetd herstart worden. Dit gaat met het &man.kill.1; commando of met de restart parameter met /etc/rc.d/inetd. Gevorderde Instellingen TCP Wrappers hebben ook gevorderde instellingen. Daarmee komt meer controle over de wijze waarop er met verbindingen wordt omgegaan. Soms is het een goed idee om commentaar te sturen naar bepaalde hosts of daemonverbindingen. In andere gevallen moet misschien iets in een logboekbestand geschreven worden of een e-mail naar de beheerder gestuurd worden. Dit kan allemaal met instellingen die wildcards, uitbreidingskarakters (expansion characters) en het uitvoeren van externe commando's heten. De volgende twee paragrafen beschrijven deze mogelijkheden. Externe Commando's Stel dat zich de situatie voordoet waar een verbinding geweigerd moet worden, maar er een reden gestuurd moet worden naar het individu dat die verbinding probeerde op te zetten. Hoe gaat dat? Dat is mogelijk door gebruik te maken van de optie . Als er een poging tot verbinding wordt gedaan, wordt er met een shellcommando of script uitgevoerd. Er staat al een voorbeeld in hosts.allow: # De andere daemons zijn beschermd. ALL : ALL \ : severity auth.info \ : twist /bin/echo "You are not welcome to use %d from %h." Dit voorbeeld geeft aan dat het bericht You are not allowed to use daemon from hostname. wordt teruggestuurd voor iedere daemon die niet al is ingesteld in het toegangsbestand. Het is erg handig om een antwoord terug te sturen naar degene die een verbinding op heeft willen zetten meteen nadat een tot stand gekomen verbinding is verbroken. Let wel dat alle berichten die gezonden worden moeten staan tussen " karakters. Hier zijn geen uitzonderingen op. Het is mogelijk een ontzegging van dienst aanval uit te voeren op de server als een aanvaller, of een groep aanvallers, deze daemons kan overstromen met verzoeken om verbindingen te maken. Het is ook mogelijk hier de optie te gebruiken. Net als weigert impliciet de verbinding en kan het gebruikt worden om shellcommando's of scripts uit te voeren. Anders dan bij stuurt geen bericht aan degene die de verbinding wilde maken. Zie bijvoorbeeld de volgende instelling: # Geen verbindingen van example.com: ALL : .example.com \ : spawn (/bin/echo %a from %h attempted to access %d >> \ /var/log/connections.log) \ : deny Hiermee worden alle verbindingen van het domein *.example.com geweigerd. Tegelijkertijd worden ook hostnaam, IP adres en de daemon waarmee verbinding werd gemaakt naar /var/log/connections.log geschreven. Naast de vervangingskarakters die al zijn toegelicht, zoals %a, bestaan er nog een paar andere. In de handboekpagina van &man.hosts.access.5; staat een volledige lijst. Wildcard Opties Tot nu toe is in ieder voorbeeld ALL gebruikt. Er bestaan nog andere opties waarmee de mogelijkheden nog verder gaan. Zo kan ALL gebruikt worden om van toepassing te zijn op iedere instantie van een daemon, domein of een IP adres. Een andere wildcard die gebruikt kan worden is PARANOID. Daarmee wordt iedere host die een IP adres geeft dat gefingeerd kan zijn aangeduid. In andere woorden: paranoid kan gebruikt worden om een actie aan te geven als er een IP adres gebruikt wordt dat verschilt van de hostnaam. Het volgende voorbeeld kan wat verheldering brengen: # Weiger mogelijke gespoofte verzoeken aan sendmail: sendmail : PARANOID : deny In het voorgaande voorbeeld worden alle verbindingsverzoeken aan sendmail met een IP adres dat verschilt van de hostnaam geweigerd. Het gebruik van PARANOID kan nogal wat schade aanrichten als de client of de server kapotte DNS instellingen heeft. Voorzichtigheid van de beheerder is geboden. De handboekpagina van &man.hosts.access.5; geeft meer uitleg over wildcards en de mogelijkheden die ze bieden. Voordat de bovenstaande instellingen werken, dient de eerste regels in hosts.allow als commentaar gemarkeerd te worden. Mark Murray Bijgedragen door Mark Dapoz Gebaseerd op een bijdrage van Siebrand Mazeland Vertaald door <application>KerberosIV</application> Kerberos is een netwerkdienst, protocol en systeem waarmee gebruikers zich kunnen aanmelden met behulp van een dienst op een veilige server. Diensten als op een andere server aanmelden, op afstand kopiëren, veilig tussen systemen kopiëren en andere taken met een hoog risico worden aanmerkelijk veiliger en beter controleerbaar. De onderstaande instructies kunnen gebruikt worden als handleiding voor het opzetten van Kerberos op &os;. Voor een volledige beschrijving wordt verwezen naar de relevante handboekpagina's. <application>KerberosIV</application> Installeren MIT KerberosIV installeren Kerberos is een optioneel component van &os;. De meest eenvoudige manier om de software te installeren is het selecteren van de krb4 of krb5 distributie in sysinstall tijdens de initiële installatie van &os;. Hierdoor wordt de eBones (KerberosIV) of Heimdal (Kerberos5) implementatie van Kerberos geïnstalleerd. Deze implementaties zijn beschikbaar omdat ze ontwikkeld zijn buiten de VS/Canada en dus zijn ze beschikbaar voor systeemeigenaren buiten die landen in dit tijdperk waarin er beperkingen gelden ten aanzien van de export van coderingsprogramma's uit de VS. Het is ook mogelijk te kiezen voor de MIT implementatie van Kerberos via de Portscollectie: security/krb5. Maken van de Initiële Database Dit hoeft alleen op de Kerberos gedaan te worden. Er dienen geen oude Kerberos databases rond te slingeren. Controleer in de map /etc/kerberosIV of de volgende bestanden aanwezig zijn: &prompt.root; cd /etc/kerberosIV &prompt.root; ls README krb.conf krb.realms Als er nog meer bestanden zijn (zoals principal.* of master_key), dan kan met het programma kdb_destroy de oude Kerberos database vernietigd worden of de overige bestanden kunnen verwijderd worden als Kerberos niet draait. Nu moeten de bestanden krb.conf en krb.realms gewijzigd om de Kerberos wereld te definiëren. In dit geval heet de wereld EXAMPLE.COM en de server heet grunt.example.com. Wijzig of creëer het bestand krb.conf: &prompt.root; cat krb.conf EXAMPLE.COM EXAMPLE.COM grunt.example.com admin server CS.BERKELEY.EDU okeeffe.berkeley.edu ATHENA.MIT.EDU kerberos.mit.edu ATHENA.MIT.EDU kerberos-1.mit.edu ATHENA.MIT.EDU kerberos-2.mit.edu ATHENA.MIT.EDU kerberos-3.mit.edu LCS.MIT.EDU kerberos.lcs.mit.edu TELECOM.MIT.EDU bitsy.mit.edu ARC.NASA.GOV trident.arc.nasa.gov In dit geval hoeven de andere werelden er niet te zijn. Ze staan er als voorbeeld van hoe een machine attent gemaakt kan worden op het bestaan van meerdere werelden. In een eigen test kan ervoor gekozen worden ze weg te laten. De eerste regel benoemt de wereld waarin het systeem opereert. De andere regels bevatten werelden/hosts. Het eerste deel van een regel bevat de wereld en het tweede deel is een host in die wereld die fungeert als sleutel distributiecentrum. De woorden admin server achter een hostnaam betekenen dat een host ook administratieve database server is. In de handboekpagina's van Kerberos wordt hierover meer uitleg gegeven. Nu moet grunt.example.com aan de wereld EXAMPLE.COM toegevoegd worden en er moet ook een instelling gemaakt worden voor alle hosts uit het .example.com domein in de wereld EXAMPLE.COM. Het bestand krb.realms dient dan als volgt gewijzigd te worden: &prompt.root; cat krb.realms grunt.example.com EXAMPLE.COM .example.com EXAMPLE.COM .berkeley.edu CS.BERKELEY.EDU .MIT.EDU ATHENA.MIT.EDU .mit.edu ATHENA.MIT.EDU Nogmaals: de andere werelden hoeven er niet te staan. Ze staan er als voorbeeld hoe een machine van het bestaan van andere werelden op de hoogte gebracht kan worden. Om het overzichtelijker te maken, kan mogen ze verwijderd worden. De eerste regel plaatst het specifieke systeem in de genoemde wereld. De rest van de regels geeft aan hoe standaardsystemen uit een bepaald subdomein in een wereld plaatst worden. Nu kan de database aangemaakt worden. Dit hoeft alleen op de Kerberos server gedaan te worden (of Sleutel Distributie Centrum) met het commando kdb_init: &prompt.root; kdb_init Realm name [default ATHENA.MIT.EDU ]: EXAMPLE.COM You will be prompted for the database Master Password. It is important that you NOT FORGET this password. Enter Kerberos master key: Nu moet de sleutel opgeslagen worden zodat diensten op de lokale machine er gebruik van kunnen maken met het commando kstash: &prompt.root; kstash Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Nu is de gecodeerde hoofdsleutel opgeslagen in /etc/kerberosIV/master_key. Help Het aan de Praat KerberosIV eerste keer starten Voor ieder systeem dat met Kerberos wordt beveiligd moeten twee principals worden aangemaakt. Die heten kpasswd en rcmd. Deze twee principals worden aangemaakt voor iedere systeem en de instantie is de naam van het systeem. Deze daemons, kpasswd en rcmd, staan andere systemen toe om Kerberos wachtwoorden te wijzigen en commando's als &man.rcp.1;, &man.rlogin.1; en &man.rsh.1; uit te voeren. Deze worden nu toegevoegd: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: passwd Instance: grunt <Not found>, Create [y] ? y Principal: passwd, Instance: grunt, kdc_key_ver: 1 New Password: <---- enter RANDOM here Verifying password New Password: <---- enter RANDOM here Random password [y] ? y Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: rcmd Instance: grunt <Not found>, Create [y] ? Principal: rcmd, Instance: grunt, kdc_key_ver: 1 New Password: <---- enter RANDOM here Verifying password New Password: <---- enter RANDOM here Random password [y] ? Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- null entry here will cause an exit Aanmaken van het Serverbestand Nu moeten alle instanties die de diensten op iedere server definiëren geëxtraheerd worden. Dat kan met het commando ext_srvtab. Dit commando maakt een bestand aan dat veilig gekopieerd moet worden naar de map /etc/kerberosIV van iedere Kerberos client. Dit bestand moet aanwezig zijn op iedere server en op iedere client en is van doorslaggevend belang voor de werking van Kerberos. &prompt.root; ext_srvtab grunt Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Generating 'grunt-new-srvtab'.... Het bovenstaande commando maakt een tijdelijk bestand aan dat hernoemd moet worden naar srvtab zodat alle diensten erbij kunnen. Met &man.mv.1; kan het op de juiste plaats op het originele systeem gezet worden: &prompt.root; mv grunt-new-srvtab srvtab Als het bestand voor een clientsysteem is en het netwerk is niet veilig, dan kan het bestand client-new-srvtab dan naar een verwijderbaar medium gekopieerd worden en dan fysiek veilig getransporteerd worden. Op de client dient het bestand srvtab te heten in de map /etc/kerberosIV en in mode 600 te staan: &prompt.root; mv grumble-new-srvtab srvtab &prompt.root; chmod 600 srvtab De Database Vullen Nu moeten de gebruikers in de database. In dit voorbeeld wordt de gebruiker jane als eerste ingevoerd. Hiervoor is het commando kdb_edit: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: <Not found>, Create [y] ? y Principal: jane, Instance: , kdc_key_ver: 1 New Password: <---- enter a secure password here Verifying password New Password: <---- re-enter the password here Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? Attributes [ 0 ] ? Edit O.K. Principal name: <---- null entry here will cause an exit Alles Testen Eerst moeten de Kerberos daemons gestart worden. Als de juiste wijziging in /etc/rc.conf zijn gemaakt, dan gebeurt dit automatisch na een herstart. Dit hoeft alleen ingesteld te worden op de Kerberos server. Kerberos clients vinden automatisch wat ze zoeken in de map /etc/kerberosIV. &prompt.root; kerberos & Kerberos server starting Sleep forever on error Log file is /var/log/kerberos.log Current Kerberos master key version is 1. Master key entered. BEWARE! Current Kerberos master key version is 1 Local realm: EXAMPLE.COM &prompt.root; kadmind -n & KADM Server KADM0.0A initializing Please do not use 'kill -9' to kill this job, use a regular kill instead Current Kerberos master key version is 1. Master key entered. BEWARE! Nu kunnen kan er getest worden of met het commando kinit een ticket (kaartje) gekregen kan worden voor het ID jane dat net is aangemaakt: &prompt.user; kinit jane MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane" Password: Met klist kan gecontroleerd worden of de tokens er echt zijn: &prompt.user; klist Ticket file: /tmp/tkt245 Principal: jane@EXAMPLE.COM Issued Expires Principal Apr 30 11:23:22 Apr 30 19:23:22 krbtgt.EXAMPLE.COM@EXAMPLE.COM Nu wordt het wachtwoord gewijzigd met &man.passwd.1; om te controleren of de kpasswd daemon autorisatie krijgt van de Kerberos database: &prompt.user; passwd realm EXAMPLE.COM Old password for jane: New Password for jane: Verifying password New Password for jane: Password changed. <command>su</command> Rechten Toewijzen Kerberos biedt mogelijkheid iedere gebruiker die rootrechten nodig heeft zijn eigen afzonderlijke &man.su.1; wachtwoord te geven. Nu wordt een ID toegevoegd dat geautoriseerd is om &man.su.1; te gebruiken naar root. Dit wordt geregeld door een instantie van root te verbinden met een principal. Met kdb_edit kan jane.root gemaakt worden in de Kerberos database: &prompt.root; kdb_edit Opening database... Enter Kerberos master key: Current Kerberos master key version is 1. Master key entered. BEWARE! Previous or default values are in [brackets] , enter return to leave the same, or new value. Principal name: jane Instance: root <Not found>, Create [y] ? y Principal: jane, Instance: root, kdc_key_ver: 1 New Password: <---- enter a SECURE password here Verifying password New Password: <---- re-enter the password here Principal's new key version = 1 Expiration date (enter yyyy-mm-dd) [ 2000-01-01 ] ? Max ticket lifetime (*5 minutes) [ 255 ] ? 12 <--- Keep this short! Attributes [ 0 ] ? Edit O.K. Principal name: <---- null entry here will cause an exit Een lijst van de tokens kan bevestigen als alles werkt zoals verwacht: &prompt.root; kinit jane.root MIT Project Athena (grunt.example.com) Kerberos Initialization for "jane.root" Password: Nu dient de gebruiker toegevoegd te worden aan het bestand .klogin van root: &prompt.root; cat /root/.klogin jane.root@EXAMPLE.COM Na een &man.su.1;: &prompt.user; su Password: kan de lijst met tokens bekeken worden: &prompt.root; klist Ticket file: /tmp/tkt_root_245 Principal: jane.root@EXAMPLE.COM Issued Expires Principal May 2 20:43:12 May 3 04:43:12 krbtgt.EXAMPLE.COM@EXAMPLE.COM Andere Commando's Gebruiken In een eerder voorbeeld is een principal met de naam jane gemaakt met een instantie root. Dit was gebaseerd op een gebruiker met dezelfde naam als de principal en dit is de standaard binnen Kerberos: een <principal>.<instantie> in de vorm van <gebruikersnaam>. root staat die <gebruikersnaam> het gebruik van &man.su.1; naar root toe als de benodigde instellingen in het bestand .klogin in de home directory van root zijn gemaakt: &prompt.root; cat /root/.klogin jane.root@EXAMPLE.COM Zo werkt het ook als een gebruiker in zijn eigen home directory iets als volgt heeft opgenomen: &prompt.user; cat ~/.klogin jane@EXAMPLE.COM jack@EXAMPLE.COM Hierdoor mag iedereen die zich in de wereld EXAMPLE.COM heeft geauthenticeerd als jane of jack (via kinit, zie boven) bij jane's account of de bestanden op dit systeem (grunt) met &man.rlogin.1;, &man.rsh.1; of &man.rcp.1;. Nu meldt bijvoorbeeld jane zich aan op een ander systeem met Kerberos: &prompt.user; kinit MIT Project Athena (grunt.example.com) Password: &prompt.user; rlogin grunt Last login: Mon May 1 21:14:47 from grumble Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995 Of jack meldt zich aan op jane's account op dezelfde machine (jane heeft het bestand .klogin ingesteld zoals hierboven en de beheerder van Kerberos heeft een principal jack aangemaakt zonder instantie): &prompt.user; kinit &prompt.user; rlogin grunt -l jane MIT Project Athena (grunt.example.com) Password: Last login: Mon May 1 21:16:55 from grumble Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD BUILT-19950429 (GR386) #0: Sat Apr 29 17:50:09 SAT 1995 Tillman Hodgson Bijgedragen door Mark Murray Gebaseerd op een bijdrage van Siebrand Mazeland Vertaald door <application>Kerberos5</application> Iedere &os; release hoger dan &os;-5.1 bevat alleen ondersteuning voor Kerberos5. Daarom is Kerberos5 de enige versie die erbij zit. De instellingen zijn op veel gebieden gelijk aan die van KerberosIV. De nu volgende informatie geldt alleen voor &os;-5.0 releases en verder. Gebruikers die het KerberosIV package willen gebruiken kunnen dat installeren uit de security/krb4 port. Kerberos is een netwerkdienst, protocol en systeem waarmee gebruikers zich kunnen aanmelden met behulp van een dienst op een veilige server. Diensten als op een andere server aanmelden, op afstand kopiëren, veilig tussen systemen kopiëren en andere taken met een hoog risico worden aanmerkelijk veiliger en beter controleerbaar. Kerberos kan omschrijven worden als identiteitbevestigend proxy systeem. Het kan ook omschreven worden als een vertrouwd authenticatiesysteem van een derde partij. Kerberos vervult maar één taak: het veilig authenticeren van gebruikers op het netwerk. Het vervult geen autorisatietaken (wat gebruikers mogen) en controleert ook niets (wat gebruikers hebben gedaan). Nadat een client en server Kerberos hebben gebruikt om hun identiteit vast te stellen kunnen ze ook al hun communicatie coderen om hun privacy en data-integriteit te garanderen. Daarom wordt het sterk aangeraden om Kerberos samen met andere beveiligingsmechanismen te gebruiken die autorisatie en controlemogelijkheden bieden. De aanwijzingen die nu volgen kunnen gebruikt worden als werkinstructie om Kerberos in te stellen zoals dat wordt meegeleverd met &os;. Een complete beschrijving staat in de handboekpagina. Voor demonstratie van de installatie van Kerberos wordt gebruik gemaakt van de volgende naamgeving: Het DNS domein (zone) is example.org. De Kerberos wereld is EXAMPLE.ORG. Het advies is voor installaties van Kerberos echte domeinnamen te gebruiken, zelfs als het alleen intern wordt gebruikt. Hiermee worden DNS problemen voorkomen is een goede samenwerking met andere Kerberos werelden verzekerd. Geschiedenis Kerberos5 geschiedenis Kerberos is ontworpen door MIT als oplossing voor netwerkbeveiligingsproblemen. Het Kerberos protocol gebruikt sterke codering zodat een client zijn identiteit kan bewijzen aan een server (en andersom) over een onveilige netwerkverbinding. Kerberos is zowel de naam van een netwerkautorisatieprotocol als een bijvoeglijk naamwoord om de programma's te beschrijven die gebruik maken van het programma (zoals Kerberos telnet). De huidige versie van het protocol is versie 5 en is beschreven in RFC 1510. Er zijn een aantal vrij beschikbare implementaties van dit protocol beschikbaar voor veel systemen. Het Massachusetts Institute of Technology (MIT), waar Kerberos ooit is ontwikkeld, ontwikkelt nog steeds door aan hun Kerberos pakket. Het wordt in de VS veel gebruikt als coderingspakket en daarom wordt het ook geraakt door de exportwetgeving van de VS. Kerberos van MIT is beschikbaar als port (security/krb5). Heimdal Kerberos is een andere implementatie van versie 5 die expliciet buiten de VS is ontwikkeld om de exportwetgeving de omzeilen (en wordt daarom vaak gebruikt in niet-commerciële &unix; varianten). De Heimdal Kerberos distributie is beschikbaar als port (security/heimdal) en er zit een minimale installatie in de basisinstallatie van &os;. Om het grootst mogelijke publiek te bereiken gaan deze instructies ervan uit dat de Heimdal distributie die bij &os; zit wordt gebruikt. Opzetten van een Heimdal <acronym>KDC</acronym> Kerberos5 sleutel distributie centrum instellingen Het Sleutel Distributie Centrum (KDC, voluit Key Distribution Center) is de gecentraliseerde authenticatiedienst die Kerberos levert. Het is de computer die Kerberos tickets uitgeeft. Het KDC wordt vertrouwd door alle andere computer in de Kerberos wereld en daarom dient er een strenger beveiligingsregime op van kracht te zijn. Hoewel het draaien van de Kerberos dienst erg weinig van een systeem vraagt, wordt het wel aangeraden om een machine in te richten exclusief voor het KDC om beveiligingsredenen. Het opzetten van een KDC begint met de controle of de instellingen in /etc/rc.conf juist zijn om te functioneren als KDC (misschien moeten paden veranderd worden voor een eigen systeem): kerberos5_server_enable="YES" kadmind5_server_enable="YES" kerberos_stash="YES" is alleen beschikbaar in &os; 4.X. Daarna wordt het Kerberos instellingenbestand /etc/krb5.conf aangemaakt: [libdefaults] default_realm = EXAMPLE.ORG [realms] EXAMPLE.ORG = { kdc = kerberos.example.org admin_server = kerberos.example.org } [domain_realm] .example.org = EXAMPLE.ORG /etc/krb5.conf gaat ervan uit dat de KDC de fully-qualified hostname kerberos.example.org heeft. Als de KDC een andere hostname heeft, moet er nog een CNAME (alias) toevoegd aan de zonefile. Voor grotere netwerken met een juist ingestelde BIND DNS server kan het bovenstaande voorbeeld ingekort worden tot: [libdefaults] default_realm = EXAMPLE.ORG Door de volgende regels toe te voegen aan de zonefile voor example.org: _kerberos._udp IN SRV 01 00 88 kerberos.example.org. _kerberos._tcp IN SRV 01 00 88 kerberos.example.org. _kpasswd._udp IN SRV 01 00 464 kerberos.example.org. _kerberos-adm._tcp IN SRV 01 00 749 kerberos.example.org. _kerberos IN TXT EXAMPLE.ORG. Om clients de Kerberos diensten te kunnen laten vinden, moet er een volledig ingestelde /etc/krb5.conf zijn of een minimaal ingestelde /etc/krb5.conf en een correct ingestelde DNS server. Nu wordt de Kerberos database aangemaakt. Deze database bevat de sleutels voor alle principals en zijn versleuteld met een hoofdwachtwoord. Dit wachtwoord hoeft niet onthouden te worden omdat het wordt opgeslagen in (/var/heimdal/m-key). De hoofdsleutel wordt aangemaakt door kstash te starten en een wachtwoord in te voeren. Als de hoofdsleutel is gemaakt, kan de database ingeschakeld worden met kadmin met de optie -l (die staat voor local). Deze optie geeft kadmin de opdracht om de databasebestanden direct te wijzigingen in plaats van via de kadmind netwerkdienst. Hiermee wordt het kip-ei probleem opgelost waarbij een verbinding wordt gemaakt met de database voordat hij bestaat. Op het prompt van kadmin kan met init de database met de werelden aangemaakt worden. Tenslotte, nog steeds in kadmin, kan de eerste principal gemaakt worden met add. De standaardopties voor de principal worden nu aangehouden. Deze kunnen later altijd nog gewijzigd worden met modify. Met het commando ? kunnen alle beschikbare mogelijkheden getoond worden. Hieronder een sessie waarin een voorbeelddatabase wordt aangemaakt: &prompt.root; kstash Master key: xxxxxxxx Verifying password - Master key: xxxxxxxx &prompt.root; kadmin -l kadmin> init EXAMPLE.ORG Realm max ticket life [unlimited]: kadmin> add tillman Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: Password: xxxxxxxx Verifying password - Password: xxxxxxxx Nu kan de KDC dienst gestart worden met /etc/rc.d/kerberos start en /etc/rc.d/kadmind start. Op dit moment draait er nog geen enkele daemon die gebruik maakt van Kerberos. Bevestiging dat KDC draait is te krijgen door een ticket te vragen en dat uit te lezen voor de principal (user) die zojuist is aangemaakt vanaf de commandoregel van het KDC zelf: &prompt.user; k5init tillman tillman@EXAMPLE.ORG's Password: &prompt.user; k5list Credentials cache: FILE:/tmp/krb5cc_500 Principal: tillman@EXAMPLE.ORG Issued Expires Principal Aug 27 15:37:58 Aug 28 01:37:58 krbtgt/EXAMPLE.ORG@EXAMPLE.ORG <application>Kerberos</application> inschakelen op een Server met Heimdal diensten Kerberos5 diensten inschakelen Als eerste is een kopie van het instellingenbestand van Kerberos nodig, /etc/krb5.conf. Dit bestand kan eenvoudigweg op een veilige manier (met netwerkprogramma's als &man.scp.1;, of fysiek via een floppy) naar de clientcomputer gekopieerd worden vanaf de KDC. Hierna is het /etc/krb5.keytab nodig. Dit is het belangrijkste verschil tussen een server die een daemons met Kerberos aanbiedt en een werkstation: de server heeft het bestand keytab nodig. Dit bestand bevat de hostsleutel van de server waardoor het werkstation en de KDC elkaars identiteit kunnen bevestigen. Dit bestand dient veilig overgebracht te worden omdat de beveiliging van de server doorbroken kan worden als de sleutel openbaar wordt gemaakt. Dit betekent expliciet dat overdracht via een protocol dat platte tekst gebruikt, bv. FTP, een slecht idee is. Meestal wordt keytab naar de server gebracht met kadmin. Dat werkt handig omdat ook de host principal (het KDC onderdeel van krb5.keytab) aangemaakt moet worden met kadmin. Let wel op dat er al een ticket moet zijn en dat dit ticket de kadmin interface moet mogen gebruiken in kadmind.acl. Zie Beheer op Afstand in de Heimdal informatiepagina's (info heimdal) voor details over het ontwerpen van toegangscontrole. Als kadmin via het netwerk geen toegang mag hebben, dan kan ook op een veilige verbinding gemaakt worden met de KDC (via het lokale console, &man.ssh.1; of Kerberos &man.telnet.1;) zodat alles lokaal uitgevoerd kan worden met kadmin -l. Na het installeren van /etc/krb5.conf kan kadmin van de Kerberos server gebruikt worden. Met add --random-key kan de host principal toegevoegd worden en met ext kan de host principal van de server naar zijn eigen keytab getrokken worden. Bijvoorbeeld: &prompt.root; kadmin kadmin> add --random-key host/myserver.example.org Max ticket life [unlimited]: Max renewable life [unlimited]: Attributes []: kadmin> ext host/myserver.example.org kadmin> exit Let op: ext slaat de sleutel standaard op in /etc/krb5.keytab. Als kadmind niet beschikbaar is op de KDC (wellicht om beveiligingsredenen) en er via het netwerk dus geen toegang is tot kadmin, dan kan de host principal (host/myserver.EXAMPLE.ORG) ook direct aan de KDC toegevoegd worden en daarna in een tijdelijk bestand gezet worden. Het volgende kan gebruikt worden om te voorkomen dat /etc/krb5.keytab op de KDC) wordt overschreven: &prompt.root; kadmin kadmin> ext --keytab=/tmp/example.keytab host/myserver.example.org kadmin> exit Hierna kan de keytab veilig gekopieerd worden naar de server (met scp of een floppy). Geef een niet-standaard naam op voor de keytab om te voorkomen dat de keytab op de KDC wordt overschreven. Nu kan de server communiceren met de KDC (vanweg krb5.conf) en zijn identiteit bewijzen (vanwege krb5.keytab). Nu is de server klaar om er een aantal Kerberos diensten op te activeren. In dit voorbeeld wordt de dienst telnet geactiveerd door de volgende regel in /etc/inetd.conf te zetten en dan &man.inetd.8; te herstarten met /etc/rc.d/inetd restart: telnet stream tcp nowait root /usr/libexec/telnetd telnetd -a user Het belangrijkste is dat de typering -a (van authenticatie) op user staat. Meer details zijn in &man.telnetd.8; te vinden. <application>Kerberos</application> Activeren op een Client met Heimdal Kerberos5 clientinstellingen Het opzetten van een clientcomputer is eigenlijk kinderlijk eenvoudig. Wat betreft de Kerberos instelling is alleen het Kerberos instellingenbestand (/etc/krb5.conf) nodig. Dat kan eenvoudigweg naar de clientcomputer gekopieerd worden vanaf de KDC. Test de client met kinit, klist en kdestroy vanaf de client om een ticket te krijgen, te bekijken en daarna te verwijderen voor de principal die hierboven is aangemaakt. Nu moeten ook Kerberos applicaties gebruikt kunnen worden om verbindingen te maken met servers waarop Kerberos is geactiveerd. Als dat niet lukt en het verkrijgen van een ticket is wel mogelijk, dan ligt dat hoogstwaarschijnlijk aan de server en niet aan de client of de KDC. Bij het testen van een applicatie als telnet kan het beste een pakketsnuffelaar (bv. &man.tcpdump.1;) gebruikt worden om te bevestigen dat een wachtwoord niet als tekst wordt verzonden. Gebruik telnet met de optie -x. Dan wordt de complete datastroom versleuteld (vergelijkbaar met ssh). De Kerberos sleutelapplicaties op de client (meestal kinit, klist, kdestroy en kpasswd) zitten in de basisinstallatie van &os;. Let wel dat ze in &os; versies van voor 5.0 hernoemd zijn naar k5init, k5list, k5destroy, k5passwd en k5stash (deze commando's worden gewoonlijk maar een keer gebruikt). Er worden standaard ook andere Kerberos applicaties op de client geïnstalleerd. Hier komt de minimalistische natuur van de Heimdal basisinstallatie boven drijven: telnet is de enige dienst waarvoor Kerberos geactiveerd is. De Heimdal port voegt een aantal missende clientapplicaties toe: versies met ondersteuning voor Kerberos van ftp, rsh, rcp, rlogin en een paar minder gebruikelijke programma's. De MIT port bevat ook een volledig gamma aan Kerberos clientapplicaties. Instellingenbestanden voor Gebruikers: <filename>.k5login</filename> en <filename>.k5users</filename> - - Kerberos5 + .k5login - bestanden met gebruikersinstellingen - + .k5users Voor gebruikers binnen een wereld wijst hun Kerberos principal (bv. tillman@EXAMPLE.ORG) gewoonlijk naar - een lokale gebruikeraccount (bv. een lokale account met de - naam tillman). Voor Clientapplicaties - als telnet is gewoonlijk geen - gebruikersnaam of principal nodig. + een lokale gebruikeraccount (bijvoorbeeld een lokale account + met de naam tillman). Voor + clientapplicaties als telnet is gewoonlijk + geen gebruikersnaam of principal nodig. Soms moet iemand zonder bijpassende Kerberos principal toch toegang hebben tot een lokale gebruikersaccount. tillman@EXAMPLE.ORG zou bijvoorbeeld toegang nodig kunnen hebben tot de lokale gebruikersaccount webdevelopers. Andere principals zouden die toegang wellicht ook nodig kunnen hebben. De bestanden .k5login en .k5users uit de gebruikersmap kunnen op eenzelfde manier gebruikt worden als .hosts en .rhosts. Zo wordt het voorgaande probleem opgelost. Als bijvoorbeeld een .k5login met de volgende inhoud: tillman@example.org jdoe@example.org in de thuismap van de lokale gebruiker webdevelopers gezet wordt dan zouden beide principals toegang hebben tot die account zonder dat ze een wachtwoord hoeven te delen. We raden aan de handboekpagina's voor deze commando's te lezen. Let op dat de ksu handboekpagina .k5users behandelt. <application>Kerberos</application> Tips, Trucs en Problemen Oplossen Kerberos5 problemen oplossen Als de Heimdal of MIT Kerberos port wordt gebruikt dan dient de PATH omgevingsvariabele de Kerberos versies van de clientapplicaties te tonen voor de systeemversies. Hebben alle computers in de wereld hun tijd gesynchroniseerd? Als dat niet zo is, dan slaagt de authenticatie wellicht niet. beschrijft hoe klokken met NTP gesynchroniseerd kunnen worden. MIT en Heimdal werken prima samen. Dit geldt niet voor kadmin omdat daarvoor geen protocolstandaard is. Als een hostnaam wordt gewijzigd, dan moet ook de host/ principal aangepast en de keytab. Dit geldt ook voor bijzondere instellingen in de keytab zoals de www/ principal voor www/mod_auth_kerb van Apache. Alle hosts in een wereld moeten oplosbaar (resolvable) zijn (zowel vooruit als achteruit) in de DNS (of tenminste in /etc/hosts). CNAMEs werken wel, maar de A en PTR records moeten juist en actief zijn. De foutmelding is niet erg duidelijk: Kerberos5 refuses authentication because Read req failed: Key table entry not found. Sommige besturingssystemen van clients voor een KDC zetten wellicht geen setuid root voor ksu. Dit betekent dat ksu niet werkt. Dat is vanuit beveiligingsoogpunt een prima idee, maar wel lastig. Dit is dus geen KDC fout. Als met MIT Kerberos een principal een ticket moet krijgen dat langer geldig is dan de standaard van tien uur, dan moet modify_principal in kadmin gebruikt worden om de maximale geldigheidsduur (maxlife) van zowel de principal waar het om gaat als de krbtgt principal aan te passen. Dan kan de principal kinit -l gebruiken om een ticket met een langere levensduur aan te vragen. Als een pakketsnuffelaar op de KDC draait bij om te helpen bij het oplossen van problemen en dan kinit vanaf een werkstation wordt gestart, dan wordt zichtbaar dat de TGT meteen wordt verstuurd als kinit start, zelfs nog voor het wachtwoord! De reden hiervoor is dat de Kerberos server vrijelijk een TGT (Ticket Granting Ticket) verstuurt op iedere niet geautoriseerd verzoek. Maar iedere TGT is versleuteld met een sleutel die is afgeleid van het wachtwoord van de gebruiker. Als een gebruiker zijn wachtwoord ingeeft, wordt dat dus niet naar de KDC gezonden, maar ontcijfert het de TGT die kinit al heeft ontvangen. Als de ontcijfering resulteert in een geldige ticket met een geldige tijdstempel, dan heeft de gebruiker geldige Kerberos rechten. Deze rechten bevatten ook een sessiesleutel voor het opzetten van beveiligde communicatie met de Kerberos server in de toekomst en de eigenlijke ticket-granting ticket, die is versleuteld met de sleutel van de Kerberos server zelf. Deze tweede laag van versleuteling is niet bekend voor de gebruiker, maar het stelt de Kerberos server in staat om de juistheid van iedere TGT te bevestigen. Als tickets worden gebruik die lang geldig zijn (bv. een week) en OpenSSH wordt gebruikt om een verbinding te maken met de machine waarop het ticket staat, zorg er dan voor dat de Kerberos optie op no staat in sshd_config want anders worden tickets verwijderd bij afmelden. Host principals kunnen ook een langere levensduur hebben. Als een gebruikers principal een levensduur van een week heeft, maar de host waar de verbinding mee gemaakt wordt heeft een levensduur van negen uur, dan heb staat er een verlopen host principal in de cache en dan werkt e.e.a. niet zoals verwacht. Een krb5.dict bestand om het gebruik van bepaalde slechte wachtwoorden te voorkomen (dit wordt kort behandeld in de handboekpagina voor kadmind) heeft alleen betrekking op principals waar een wachtwoordbeleid voor geldt. De opmaak van krb5.dict is eenvoudig: een rij tekens per regel. Een symbolic link maken naar /usr/share/dict/words is misschien handig. Verschillen met de <acronym>MIT</acronym> port Het belangrijkste verschil tussen de MIT en Heimdal installatie heeft betrekking op kadmin, dat een andere (maar gelijkwaardige) set commando's kent en een andere protocol gebruikt. Dit betekent nogal wat als een KDC MIT is, omdat dan de kadmin van Heimdal niet gebruikt kan worden om de KDC vanaf afstand te beheren (dat geldt trouwens ook vice versa). De clientapplicaties kunnen ook commandoregelopties gebruiken die een beetje verschillen, maar waarmee wel hetzelfde wordt bereikt. We raden aan de instructies op de MIT Kerberos website () te volgen. Wees voorzichtig met paden: de MIT port installeert standaard in /usr/local/ en dus kunnen de normale systeemapplicaties gestart worden in plaats van die van MIT als de PATH omgevingsvariabele de systeemmappen als eerste weergeeft. Als de MIT security/krb5 port die bij &os; zit wordt gebruikt, dan zorgt het lezen van /usr/local/share/doc/krb5/README.FreeBSD dat bij de port wordt geïnstalleerd voor een beter begrip over waarom het aanmelden via telnetd en klogind soms wat vreemd verloopt. Als belangrijkste wijzen we erop dat het bij het corrigeren van onjuiste rechten op het cachebestand noodzakelijk is dat het binaire bestand login.krb5 wordt gebruikt voor authenticatie zodat het op de juiste wijze eigenaarschap kan wijzigen voor de doorgegeven rechten. Beperkingen in <application>Kerberos</application> Kerberos5 beperkingen en tekortkomingen <application>Kerberos</application> is een alles of niets aanpak Iedere ingeschakelde dienst op het netwerk moet aangepast worden om met Kerberos te werken (of op een andere manier beschermd zijn tegen netwerkaanvallen), want anders kunnen gebruikersrechten worden gestolen en hergebruikt. Een voorbeeld hier van is het inschakelen van Kerberos voor alle shells op afstand (via rsh en telnet bijvoorbeeld), maar de POP3 mailserver die wachtwoorden als platte tekst verzend ongemoeid laten. <application>Kerberos</application> is bedoeld voor werkstations met een gebruiker In een multi-user omgeving is Kerberos minder veilig. Dit komt doordat de tickets worden opgeslagen in de map /tmp, waar gelezen kan worden door alle gebruikers. Als een gebruiker een computer deelt met andere gebruikers op hetzelfde moment (dus multi-user), dan is het mogelijk dat een ticket van een gebruiker wordt gestolen (gekopieerd) door een andere gebruiker. Dit kan voorkomen worden met de commandoregeloptie -c bestandsnaam of (bij voorkeur) de omgevingsvariabele KRB5CCNAME, maar dat wordt zelden gedaan. In principe kan het opslaan van een ticket in de thuismap van een gebruiker in combinatie met eenvoudige bestandsrechten dit probleem verhelpen. De KDC is een single point of failure Zoals het is ontworpen, moet de KDC zo goed mogelijk beveiligd zijn, omdat de hoofd wachtwoorddatabase erop staat. De KDC hoort geen enkele andere dienst aan te bieden en moet ook fysiek afgeschermd worden. Het gevaar is groot, omdat Kerberos alle wachtwoorden versleutelt met dezelfde sleutel (de master sleutel) die als een bestand op de KDC staat. Toch is een gecompromitteerde master sleutel niet zo'n groot probleem als wellicht wordt verondersteld. De mastersleutel wordt alleen gebruikt om de Kerberos database te versleutelen en als zaad voor de generator van willekeurige nummers. Zo lang als de toegang tot de KDC is beveiligd, kan een aanvaller niet echt iets doen met de mastersleutel. Als de KDC niet beschikbaar is (misschien door een ontzeggen van dienst aanval of netwerkproblemen) kunnen de netwerkdiensten niet gebruikt worden omdat er geen authenticatie uitgevoerd kan worden; een recept voor een ontzeggen van dienst aanval. Dit risico kan omzeild worden door meerdere KDC's (één master en één of meer slaves) en een zorgvuldige implementatie van secundaire of fall-back authenticatie. PAM is hier uitermate geschikt voor. Tekortkomingen van <application>Kerberos</application> Kerberos stelt gebruikers, hosts en diensten in staat om elkaar te authenticeren. Maar het heeft geen mechanisme om de KDC te authenticeren aan de gebruikers, hosts of diensten. Dit betekent dat bijvoorbeeld een vervalste kinit alle gebruikersnamen en wachtwoorden zou kunnen afluisteren. Iets als security/tripwire of andere controle-instrumenten voor de integriteit van bestandssystemen kunnen hier verlichting brengen. Bronnen en Verdere Informatie Kerberos5 externe bronnen De Kerberos FAQ (Engels) Een Authenticatiesysteem Ontwerpen: een Dialoog in Vier Scenes (Engels) RFC 1510, De Kerberos Netwerk Authenticatie Dienst (V5) (Engels) MIT Kerberos homepage Heimdal Kerberos homepage Tom Rhodes Geschreven door Siebrand Mazeland Vertaald door OpenSSL beveiliging OpenSSL OpenSSL Een toepassing die bij &os; zit die veel gebruikers over het hoofd zien is OpenSSL. OpenSSL biedt een versleutelde transportlaag bovenop de normale communicatielaag. Daardoor biedt het de mogelijkheid met veel netwerktoepassingen en diensten verweven te raken. Een aantal toepassingen van OpenSSL zijn versleutelde authenticatie van mailclients, webgebaseerde transacties als creditcardbetalingen en nog veel meer. Veel ports zoals www/apache13-ssl en mail/sylpheed-claws bieden tijdens het compileren ondersteuning om OpenSSL in te bouwen. In de meeste gevallen zal de Portscollectie proberen de port security/openssl te bouwen, tenzij de make variabele WITH_OPENSSL_BASE expliciet naar yes is gezet. De versie van OpenSSL die bij &os; zit ondersteunt Secure Sockets Layer v2/v3 (SSLv2/SSLv3), Transport Layer Security v1 (TLSv1) netwerk beveiligingsprotocollen en kan gebruikt worden als generieke versleutelingsbibliotheek. Hoewel OpenSSL ondersteuning biedt voor het IDEA algoritme, is dat standaard uitgeschakeld in verband met patenten in de VS. Om het te gebruiken dient de licentie gelezen te worden en, als de restricties aanvaardbaar zijn, dient de make variabele MAKE_IDEA ingesteld te worden in make.conf. Een van de meest gebruikte toepassingen van OpenSSL is het leveren van certificaten voor gebruik met softwaretoepassingen. Deze certificaten verzekeren dat de eigenschappen van een bedrijf of individu geldig zijn en niet vervalst. Als het certificaat in kwestie niet geldig verklaard is door een van de Certificate Authorities of CA's, dan komt er een waarschuwing. Een Certificate Authority is een bedrijf, zoals VeriSign, dat certificaten ondertekent zodat de eigenschappen van een bedrijf of individu geldig verklaard kunnen worden. Dit proces kost geld en het is zeker geen voorwaarde voor het gebruik van certificaten. Het stelt wel de meer paranoïde gebruikers gerust. Certificaten Maken OpenSSL certificaten maken Voor het maken van certificaten is het volgende commando beschikbaar: &prompt.root; openssl req -new -nodes -out req.pem -keyout cert.pem Generating a 1024 bit RSA private key ................ ....................................... writing new private key to 'cert.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:PA Locality Name (eg, city) []:Pittsburgh Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company Organizational Unit Name (eg, section) []:Systems Administrator Common Name (eg, YOUR name) []:localhost.example.org Email Address []:trhodes@FreeBSD.org Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:SOME PASSWORD An optional company name []:Another Name Let op dat het antwoord direct na Common Name een domeinnaam weergeeft. De prompt wil dat er een servernaam wordt ingegeven voor het verificatieproces. Het plaatsen van iets anders dan een domeinnaam zorgt ervoor dat het certificaat waardeloos wordt. Er zijn ook andere opties als verloopdatum, andere versleutelingsalgoritmen, etc, beschikbaar. Een volledige lijst is na te lezen in de handboekpagina van &man.openssl.1;. Er zou nu een bestand cert.pem moeten bestaan in de map waar het voorgaande commando is uitgevoerd. Dit is het certificaat dat aan een CA ter ondertekening gezonden kan worden. In gevallen waar ondertekening door een CA niet vereist is, kan een zelfondertekend certificaat gemaakt worden. Maak als eerste de RSA sleutel: &prompt.root; openssl dsaparam -rand -genkey -out myRSA.key 1024 Hierna kan de CA sleutel gemaakt worden: &prompt.root; openssl gendsa -des3 -out \ myca.key myRSA.key Deze sleutel kan gebruikt worden om een certificaat te maken: &prompt.root; openssl req -new -x509 -days 365 -key myca.key -out new.crt Er zouden nu twee bestanden bijgekomen moeten zijn in de map: een certificate authority ondertekeningsbestand myca.key en new.crt, het certificaat zelf. Deze moeten in een map geplaatst worden, bij voorkeur onder /etc waar alleen root kan lezen. De rechten 0700 zijn hier prima en die kunnen ingesteld worden met chmod. Certificate Gebruiken: een Voorbeeld En wat kunnen deze bestanden? Een prima toepassing zou het versleutelen van verbindingen naar de Sendmail MTA kunnen zijn. Daardoor zouden gebruikers niet langer platte tekst hoeven te authenticeren om mail te sturen via de lokale MTA. Dit is niet de best denkbare toepassing omdat sommige MUA's de gebruiker een foutmelding geven als ze het certificaat niet lokaal geïnstalleerd hebben. De documentatie bij de software geeft meer informatie over het installeren van certificaten. De volgende regels moeten opgenomen worden in het lokale .mc bestand: dnl SSL Options define(`confCACERT_PATH',`/etc/certs')dnl define(`confCACERT',`/etc/certs/new.crt')dnl define(`confSERVER_CERT',`/etc/certs/new.crt')dnl define(`confSERVER_KEY',`/etc/certs/myca.key')dnl define(`confTLS_SRV_OPTIONS', `V')dnl /etc/certs/ is de map die gebruikt wordt voor het lokaal opslaan van certificaten en sleutels. De laatste voorwaarde het is opnieuw aanmaken van het lokale .cf bestand. Dit gaat door eenvoudigweg make< install te typen in de map /etc/mail. Laat dat volgen door een make restart waardoor de Sendmail daemon herstart zou moeten worden. Als alles goed is gegaan, dan staan er geen foutmeldingen /var/log/maillog en is Sendmail zichtbaar in de proceslijst. Maak als eenvoudige test een verbinding met de mailserver met &man.telnet.1;: &prompt.root; telnet example.com 25 Trying 192.0.34.166... Connected to example.com. Escape character is '^]'. 220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT) ehlo example.com 250-example.com Hello example.com [192.0.34.166], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-ETRN 250-AUTH LOGIN PLAIN 250-STARTTLS 250-DELIVERBY 250 HELP quit 221 2.0.0 example.com closing connection Connection closed by foreign host. Als de regel STARTTLS verschijnt in de uitvoer dan werkt alles correct. Nik Clayton
nik@FreeBSD.org
Gerschreven door
Siebrand Mazeland Vertaald door
+ IPsec + VPN via IPsec Een VPN opzetten met &os; gateways tussen twee netwerken die gescheiden zijn door internet. Hiten M. Pandya
hmp@FreeBSD.org
Geschreven door
Siebrand Mazeland Vertaald door
IPsec Begrijpen Deze paragraaf is een gids in het proces van het opzetten, en gebruiken van IPsec en het veilig laten communiceren van machines in een omgeving die bestaat uit &os; en µsoft.windows; 2000/XP. Voordat IPsec opgezet kan worden dient de lezer bekend te zijn met de concepten die nodig zijn om een aangepaste kernel te bouwen (zie ). IPsec is een protocol dat bovenop de Internet Protocol (IP) laag ligt. Hiermee kunnen twee of meer host op een veilige manier communiceren (vandaar de naam). De &os; IPsec netwerk wachtrij (stack) is gebaseerd op de KAME implementatie, die zowel de IPv4 als de IPv6 protocolfamilies ondersteunt. &os; 5.X bevat een door hardware geaccelereerde IPsec wachtrij die Fast IPsec heet en uit OpenBSD komt. Die kan gebruik maken van cryptografische hardware (waar mogelijk) via het &man.crypto.4; subsysteem om de prestaties van IPsec te optimaliseren. Dit subsysteem is nieuw en ondersteunt niet alle opties die beschikbaar zijn in de KAME versie van IPsec. Voordat er gebruik gemaakt kan worden van door hardware versnelde IPsec, moet de volgende optie in het kernelinstellingenbestand worden gezet: + + kernelopties + + FAST_IPSEC + + options FAST_IPSEC # new IPsec (cannot define w/ IPSEC) - Het is op dit moment niet mogelijk om het - Fast IPsec subsysteem samen met de KAME - implementatie van IPsec te gebruiken. Zie + Het is op dit moment niet mogelijk om het + Fast IPsec subsysteem samen met de + KAME-implementatie van IPsec te gebruiken. Zie &man.fast.ipsec.4; voor meer informatie. + + IPsec + + ESP + + + + IPsec + + AH + + IPsec bestaat uit twee subprotocollen: Encapsulated Security Payload (ESP) beschermt de IP pakketdata tegen inmenging door een derde partij door de inhoud te versleutelen met symmetrische versleutelingsalgoritmen (als Blowfish en 3DES). Authentication Header (AH) beschermt de IP pakketkop tegen inmenging door een derde partij en spoofing door een cryptografische checksum te berekenen en de IP pakketkopvelden te hashen met een veilige hashfunctie. Hierna wordt een extra kop ingevoegd die de hash bevat zodat de informatie in het pakket geauthenticeerd kan worden. ESP en AH kunnen samen of apart gebruikt worden, afhankelijk van de omgeving. + VPN + + + virtual private network + + VPN + + + + virtueel privaat netwerk + + VPN + + IPsec kan gebruikt worden om het verkeer tussen twee hosts direct te versleutelen (dat heet Transport Mode) of door virtuele tunnels te bouwen tussen twee subnetten die gebruikt kunnen worden voor veilige communicatie tussen twee bedrijfsnetwerken (dat heet Tunnel Mode). De laatste versie staat beter bekend als Virtual Private Network (VPN). In &man.ipsec.4; staat gedetailleerde informatie over het IPsec subsysteem in &os;. Voor ondersteuning voor IPsec in de kernel zijn de volgende opties nodig in het kernelinstellingenbestand: + + kernelopties + + IPSEC + + + + kernelopties + + IPSEC_ESP + + options IPSEC #IP security options IPSEC_ESP #IP security (crypto; define w/ IPSEC) + + kernelopties + + IPSEC_DEBUG + + Als er ook fouten in IPsec (debugging) verwijderd moeten kunnen worden, dan is de volgende optie ook nodig: options IPSEC_DEBUG #debug for IP security
Het Probleem Er bestaat geen standaard voor wat een VPN is. VPN's kunnen opgezet worden met behulp van een aantal verschillende technologieën die allemaal hun eigen voor- en nadelen hebben. Dit onderdeel bevat een scenario en de strategieën die gebruikt kunnen worden voor het implementeren van een VPN in iedere situatie. Het Scenario: twee netwerken die één moeten lijken en via internet verbonden zijn + + VPN + + maken + + Dit is het uitgangspunt: Er zijn tenminste twee locaties Beide locaties gebruiken IP Beide locaties hebben een internetverbinding via een gateway waarop &os; draait. De gateway op ieder netwerk heeft tenminste één publiek IP adres. De interne adressen van de twee netwerken mogen publieke of private IP adressen zijn, dat maakt niet uit. Er mag NAT draaien op de gateway als dat nodig is. De interne IP adressen van de twee netwerken mogen niet conflicteren. Hoewel dit in theorie mogelijk is een combinatie van VPN en NAT te gebruiken om dit te laten werken, wordt het vast een drama om dit in te stellen. Als de twee netwerken die met elkaar verbonden moeten worden intern dezelfde private IP adresreeksen gebruiken (beiden gebruiken bijvoorbeeld 192.168.1.x), dan moet een van de netwerken hernummerd worden. De netwerk topologie zou er zo uit kunnen zien: Netwerk #1 [ Interne Hosts ] Privaat Net, 192.168.1.2-254 [ Win9x/NT/2K ] [ UNIX ] | | .---[fxp1]---. Privaat IP, 192.168.1.1 | FreeBSD | `---[fxp0]---' Publiek IP, A.B.C.D | | -=-=- Internet -=-=- | | .---[fxp0]---. Publiek IP, W.X.Y.Z | FreeBSD | `---[fxp1]---' Privaat IP, 192.168.2.1 | | Netwerk #2 [ Internal Hosts ] [ Win9x/NT/2K ] Privaat Net, 192.168.2.2-254 [ UNIX ] Let op de twee publieke IP adressen. In de rest van dit onderdeel worden de letters gebruikt om ze aan te duiden. Overal waar die letters staan, kunnen ze vervangen worden door eigen publieke IP adressen. Zo hebben ook de twee gateway machines intern .1 IP adressen en de twee netwerken hebben andere IP adressen (respectievelijk 192.168.1.x en 192.168.2.x). Alle machines op de private netwerken zijn zo ingesteld dat ze de .1 machine als hun standaard gateway gebruiken. Het is de bedoeling dat, vanuit het netwerkstandpunt, ieder netwerk de machines in het andere netwerk kan zien alsof ze beiden aan dezelfde router zouden zitten; wel een router die een beetje langzaam is en af een toe een pakketje laat vallen. Dit betekent dat (bijvoorbeeld) op machine 192.168.1.20: ping 192.168.2.34 uitgevoerd kan worden en dat werkt, transparant. µsoft.windows; machines moeten het andere netwerk kunnen zien, gedeelde bestanden kunnen benaderen, enzovoort, op dezelfde manier als ze dat kunnen op het lokale netwerk. En dat alles moet veilig zijn. Dat betekent dat verkeer tussen de twee netwerken versleuteld moet zijn. Het opzetten van een VPN tussen twee netwerken is een proces dat uit meerdere stappen bestaat: Het maken van een virtuele netwerkverbinding tussen de twee netwerken over het internet. Testen met gereedschappen als &man.ping.8; om te bevestigen dat het werkt. Het instellen van beveiligingsbeleid om te verzekeren dat het verkeer tussen de twee netwerken transparant wordt versleuteld en ontsleuteld wanneer dat nodig is. Testen met gereedschappen als &man.tcpdump.1; om te bevestigen dat het werkt. Additionele software instellen op de &os; gateways om µsoft.windows; machines de andere kant van het VPN te laten zien. Stap 1: De <quote>virtuele</quote> netwerkverbinding maken en testen Stel dat een gebruiker is aangemeld op de gatewaymachine in netwerk #1 (met publiek IP adres A.B.C.D en privaat IP adres 192.168.1.1) en de voert ping 192.168.2.1 uit, naar het private adres van de machine met IP adres W.X.Y.Z. Wat moet er gebeuren om dat te laten werken? De gateway host moet weten hoe hij 192.168.2.1 kan bereiken. Met andere woorden: hij moet een route hebben naar 192.168.2.1. Private IP adressen als de reeks 192.168.x horen in het algemeen niet thuis op internet. Ieder pakket naar 192.168.2.1 moet dus ingepakt worden in een ander pakket. Dit pakket moet afkomstig lijken van A.B.C.D en moet naar W.X.Y.Z verstuurd worden. Dit proces heet inkapseling (encapsulation). Als dit pakket aankomt bij W.X.Y.Z dan moet het uitgekapseld (unencapsulated) worden en afgeleverd worden aan 192.168.2.1. Dit is alsof er een tunnel moet bestaan tussen de twee netwerken. De twee tunnelopeningen zijn de IP adressen A.B.C.D en W.X.Y.Z en de tunnel moet op de hoogte zijn van de private IP adressen die door de tunnel mogen. De tunnel wordt gebruikt om verkeer met private IP adressen over het internet te leiden. Deze tunnel wordt gemaakt door gebruik te maken van de generieke interface of gif devices op &os;. De gif interface moet op iedere gatewaymachine ingesteld zijn met vier IP adressen: twee voor de publieke IP adressen en twee voor de private IP adressen. Ondersteuning voor het gif device moet in de &os; kernel van beide machine gecompileerd worden. Dit kan door de volgende optie toe te voegen aan de kernelinstellingenbestanden op beide machines, dan de kernel te compileren, te installeren en dan gewoon te herstarten: pseudo-device gif Het instellen van de tunnel gaat in twee stappen. Eerst moet de tunnel verteld worden wat de IP adressen aan de buitenkant (publiek) zijn met &man.gifconfig.8;. Daarna moeten de private IP adressen ingesteld worden met &man.ifconfig.8;. In &os; 5.X is de functionaliteit van &man.gifconfig.8; opgenomen in &man.ifconfig.8;. Op de gatewaymachine op netwerk #1 moeten de volgende commando's uitgevoerd worden om te tunnel in te stellen. gifconfig gif0 A.B.C.D W.X.Y.Z ifconfig gif0 inet 192.168.1.1 192.168.2.1 netmask 0xffffffff Op de andere gatewaymachine moeten dezelfde commando's uitgevoerd worden met omgedraaide IP adressen. gifconfig gif0 W.X.Y.Z A.B.C.D ifconfig gif0 inet 192.168.2.1 192.168.1.1 netmask 0xffffffff Daarna toont: gifconfig gif0 de instellingen. Op netwerk #1 zou dat het volgende zijn: &prompt.root; gifconfig gif0 gif0: flags=8011<UP,POINTTOPOINT,MULTICAST> mtu 1280 inet 192.168.1.1 --> 192.168.2.1 netmask 0xffffffff physical address inet A.B.C.D --> W.X.Y.Z Er is nu een tunnel gemaakt tussen de fysieke adressen A.B.C.D en W.X.Y.Z en het verkeer dat door de tunnel mag is dat tussen 192.168.1.1 en 192.168.2.1. Hiermee is ook een regel gemaakt in de routetabel op beide machines die te bekijken zijn met netstat -rn. Deze uitvoer komt van de gatewayhost op netwerk #1. &prompt.root; netstat -rn Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire ... 192.168.2.1 192.168.1.1 UH 0 0 gif0 ... De Flags waarde geeft aan dat dit een hostroute is, wat betekent dat iedere gateway weet hoe hij de andere gateway kan bereiken, maar dat ze niet weten hoe ze bij de rest van elkaars netwerk kunnen komen. Dat probleem wordt snel opgelost. Het is waarschijnlijk dat op beide machines een firewall draait. Die moet omzeild worden voor VPN verkeer. Het is mogelijk al het verkeer tussen de beide netwerken toestaan of firewallregels toe te voegen waarmee de beide netwerken die het VPN met elkaar verbindt tegen elkaar beschermd worden. Het testen wordt een stuk eenvoudiger als de firewall zo is ingesteld dat al het verkeer door het VPN wordt doorgelaten. Laten kunnen nog restricties toegevoegd worden. Met &man.ipfw.8; wordt met ipfw add 1 allow ip from any to any via gif0 al het verkeer tussen de twee eindstations van het VPN toegestaan zonder dat dit de andere regels van de firewall beïnvloedt. Dit commando moet natuurlijk wel op beide gatewayhosts uitgevoerd worden. Deze instelling is toereikend om elke gateway machine het recht te geven de ander te pingen. Op 192.168.1.1 kan nu: ping 192.168.2.1 gedraaid worden en moet een antwoord komen. Op de andere machine kan dezelfde test gedaan worden. Maar nu zijn de andere machines op het interne netwerk nog niet te bereiken. Dat komt door de routering: hoewel de gateway machines elkaar nu weten te vinden, weten ze nog niet hoe ze het netwerk achter elkaar kunnen bereiken. Om dat probleem op te lossen moet een statische route worden toevoegd op iedere gateway machine. Het commando daarvoor is: route add 192.168.2.0 192.168.2.1 netmask 0xffffff00 Dit betekent: om hosts op het netwerk 192.168.2.0 te bereiken moeten pakketten naar de host 192.168.2.1 sturen. Een zelfde dient op de andere gateway uitgevoerd te worden, maar dan met de 192.168.1.x adressen. IP verkeer van hosts op het ene netwerk kan nu hosts op het andere netwerk bereiken. Hiermee is tweederde van het VPN tussen twee netwerken aangelegd in de zin dat het virtueel is en er een netwerk is. Maar het is nog niet privaat. Dit wordt aangetoond met &man.ping.8; en &man.tcpdump.1;. Voer op de gateway host het volgende commando uit:/para> tcpdump dst host 192.168.2.1 Voer vanuit een andere sessie op de host het onderstaande commando uit: ping 192.168.2.1 De uitvoer is ongeveer als volgt: 16:10:24.018080 192.168.1.1 > 192.168.2.1: icmp: echo request 16:10:24.018109 192.168.1.1 > 192.168.2.1: icmp: echo reply 16:10:25.018814 192.168.1.1 > 192.168.2.1: icmp: echo request 16:10:25.018847 192.168.1.1 > 192.168.2.1: icmp: echo reply 16:10:26.028896 192.168.1.1 > 192.168.2.1: icmp: echo request 16:10:26.029112 192.168.1.1 > 192.168.2.1: icmp: echo reply Het is zichtbaar dat de ICMP berichten niet versleuteld heen en weer gaan. Als met &man.tcpdump.1; de parameter was gebruikt om meer bytes te tonen uit de pakketten, dan was meer informatie te zien geweest. Dit is natuurlijk onacceptabel. In de volgende paragraaf gaat het dan ook over het beveiligen van de verbinding tussen de twee netwerken zodat al het verkeer automatisch wordt versleuteld. Samenvatting: Stel voor beide kernels het pseudo-device gif in. Wijzig /etc/rc.conf op gateway host #1 en voeg de volgende regels toe (wijzig IP adressen naar wens). gifconfig_gif0="A.B.C.D W.X.Y.Z" ifconfig_gif0="inet 192.168.1.1 192.168.2.1 netmask 0xffffffff" static_routes="vpn" route_vpn="192.168.2.0 192.168.2.1 netmask 0xffffff00" Wijzig het firewallscript (/etc/rc.firewall of iets dergelijks) op beide hosts en voeg het volgende toe: ipfw add 1 allow ip from any to any via gif0 Maak gelijksoortige wijzigingen in /etc/rc.conf op gateway host #2 en draai de volgorde van de IP adressen om. Stap 2: De Verbinding Beveiligen Om de verbinding te beveiligen wordt IPsec gebruikt. IPsec biedt een mechanisme waarmee twee hosts samen een sleutel hebben en die sleutel dan gebruiken om gegevens te versleutelen tussen die twee hosts. Hiervoor moet op twee plaatsen een aanpassing gemaakt worden in de instellingen. Er moet een mechanisme zijn voor de twee hosts om het eens te worden over het versleutelingsmechanisme dat gebruikt gaat worden. Als de twee hosts het daar over eens zijn, dan hebben ze een zogenaamde beveiligingssamenwerking (security association). Er moet een mechanisme zijn waarmee wordt aangegeven welk verkeer versleuteld moet worden. Tenslotte moet niet al het uitgaande verkeer versleuteld worden, maar alleen het verkeer dat onderdeel is van het VPN. De regels die worden opgesteld om te bepalen welke verkeer versleuteld wordt heten beveiligingsbeleid (security policies). Beveiligingssamenwerking en beveiligingsbeleid worden beiden onderhouden door de kernel en kunnen aangepast worden met programma's in userland. Maar voor dit mogelijk is, moet de kernel geschikt gemaakt worden voor ondersteuning van IPsec en het Encapsulated Security Payload (ESP) protocol. Dit kan door de volgende regel op te nemen in het kernelinstellingenbestand: + + kernel options + + IPSEC + + options IPSEC options IPSEC_ESP Daarna dienen hercompilatie en installatie van de kernel plaats te vinden en moet de machine gereboot worden. Dit moet voor beide gateway hosts uitgevoerd worden. + IKE + Het is mogelijk twee wegen te bewandelen voor het opzetten van beveiligingssamenwerking. Als het met de hand wordt opgezet dan moeten een versleutelingsalgoritme, coderingssleutels, enzovoort gekozen worden. Er kan ook een daemons gebruikt worden die het Internet Key Exchange protocol (IKE) implementeert om dit uit te voeren. Het advies is voor het laatste te kiezen. Los van andere overwegingen is het makkelijker in te stellen. + + IPsec + + security policies + + + setkey + Voor het wijzigen en weergeven van het beveiligingsbeleid is er &man.setkey.8;. Ter vergelijking: setkey is voor het beveiligingsbeleid van de kernel wat &man.route.8; is voor de routetabellen van de kernel. setkey kan ook de huidige beveiligingssamenwerkingen weergeven en om de vergelijking door te zetten is het in die zin verwant aan netstat -r. Er zijn een aantal daemons beschikbaar voor het bijhouden van beveiligingssamenwerking in &os;. In dit artikel wordt beschreven hoe dat met racoon gaat. racoon zit in de &os; Portscollectie in de security/ categorie en kan op de gebruikelijke manier geïnstalleerd worden. + racoon + racoon moet draaien op beide gateway hosts. Op iedere host moet het IP adres van de andere kant van het VPN ingesteld worden en een geheime sleutel (die door de gebruiker zelf is gekozen en die hetzelfde moet zijn op beide gateways). De twee daemons zoeken dan contact met elkaar en stellen vast dat ze zijn wie ze beweren te zijn (door gebruik te maken van de geheime sleutel die is ingesteld). De daemons maken dan een nieuwe geheime sleutel aan en gebruiken die om het verkeer over het VPN te versleutelen. Ze wijzigen die sleutel periodiek zodat een aanvaller er niets aan heeft in het geval hij achter een van de sleutels zou komen. Dit is theoretisch trouwens vrijwel onuitvoerbaar. Tegen de tijd dat de sleutel gekraakt is, hebben de twee daemons al een nieuwe gekozen. De instellingen van racoon worden opgeslagen in ${PREFIX}/etc/racoon. Daar tref staat een instellingenbestand aan dat niet ingrijpend hoeft te wijzigen. De andere component van de instellingen van racoon die gewijzigd moet worden is de wederzijds bekende sleutel (pre-shared key). Standaard verwacht racoon dat die in ${PREFIX}/etc/racoon/psk.txt staat. Het is belangrijk op te merken dat de wederzijds bekende sleutel niet de sleutel is die gebruikt wordt om het verkeer van de VPN verbinding te versleutelen. Het is gewoon een token die de sleutelbeheerdaemons in staat stelt elkaar te vertrouwen. psk.txt bevat een regel voor iedere locatie waarmee verbinding bestaat. In dit voorbeeld zijn er twee locaties en dus bevat ieder psk.txt bestand één regel (omdat de ene kant van de VPN alleen iets te maken heeft met één andere kant). Op gateway host #1 ziet dat er als volgt uit: W.X.Y.Z secret Er staat dus het publieke IP adres van de andere kant, witruimte ;– spatie(s) of tab(s) – en een stuk tekst met de geheime sleutel. Natuurlijk dient secret niet als sleutel gebruikt te worden. Ook hier gelden de normale regels voor wachtwoorden. Op gateway host #2 ziet dat er dan zo uit: A.B.C.D secret Dus het publieke IP adres van de andere kant en dezelfde geheime sleutel. psk.txt moet in mode 0600 staan (alleen lees en schrijfrechten voor root) voordat racoon zal werken. Racoon moet draaien op beide gatewaymachines. Er moeten ook een aantal firewallregels toegevoegd worden om IKE verkeer toe te staan, dat over UDP naar de ISAKMP (Internet Security Association Key Management Protocol) poort loopt. Nogmaals: deze regels staan bij voorkeur zo vroeg mogelijk in de firewallregels. ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp Als racoon eenmaal draait, dan kan de ene gateway host vanaf de andere gepingd worden. De verbinding is dan nog steeds niet versleuteld, maar racoon stelt wel de beveiligingssamenwerking tussen de twee hosts op. Dat kan heel even duren en dat uit zich in een kleine vertraging voordat er een antwoord op de ping komt. Als de beveiligingssamenwerking tot stand is gekomen, dan kan deze getoond worden met &man.setkey.8;: setkey -D Het bovenstaande commando toont de beveiligingssamenwerkingsingsinformatie. Dat is de ene helft van het probleem. De andere helft is het instellen van het beveiligingsbeleid. Voor er een zinvol beveiligingsbeleid opgesteld kan worden volgt eerst een samenvatting van wat tot nu toe is bereikt. Het volgende geldt voor beide kanten van de verbinding. Ieder IP pakket dat wordt verzonden heeft een kop die gegevens over het pakket bevat. De kop bevat het IP adres van zowel de bron als de bestemming. Zoals bekend horen private IP adressen zoals de reeks 192.168.x.y niet thuis op internet. Ze moeten eerst ingepakt worden in een ander pakket. Voor dat pakket moeten het publieke bron en bestemmingsadres op de plaats van de private adressen gezet worden. Dus als een uitgaand pakket als volgt begon: .----------------------. | Src: 192.168.1.1 | | Dst: 192.168.2.1 | | <andere kopinfo> | +----------------------+ | <pakket data> | `----------------------' Dan wordt het ingepakt in een andere pakket dat er ongeveer als volgt uitziet: .--------------------------. | Src: A.B.C.D | | Dst: W.X.Y.Z | | <andere kop info> | +--------------------------+ | .----------------------. | | | Src: 192.168.1.1 | | | | Dst: 192.168.2.1 | | | | <andere kop info> | | | +----------------------+ | | | <pakket data> | | | `----------------------' | `--------------------------' Het gif device zorgt voor het inpakken. Het pakket heeft nu een echt IP adres aan de buitenkant en het originele pakket zit ingepakt als data in het pakket dat het internet opgestuurd gaat worden. Nu moet het verkeer over het VPN natuurlijk versleuteld worden. Dat kan als volgt worden weergegeven: Als een pakket A.B.C.D verlaat met als bestemming W.X.Y.Z, versleutel het dan met de benodigde beveiligingssamenwerkingen. Als een pakket aankomt van W.X.Y.Z en het heeft A.B.C.D als bestemming, ontcijfer het dan met de benodigde beveiligingssamenwerkingen. Dat klopt bijna, maar niet helemaal. Als dit gebeurde, dan zou al het verkeer van en naar W.X.Y.Z, zelfs als dat geen deel uit zou maken van het VPN, versleuteld worden. Dat is niet wenselijk. Het correcte beleid ziet er zo uit: Als een pakket A.B.C.D verlaat en dat pakket bevat een ander pakket en als het W.X.Y.Z als bestemming heeft, versleutel het dan met de benodigde beveiligingssamenwerkingen. Als een pakket aankomt van W.X.Y.Z en het pakket bevat een ander pakket en het heeft A.B.C.D als bestemming, ontcijfer het dan met de benodigde beveiligingssamenwerkingen. Dat is een subtiele aanpassing, maar wel noodzakelijk. Beveiligingsbeleid wordt ook ingesteld met &man.setkey.8;. &man.setkey.8; biedt een instellingtaal voor het definiëren van beleid. Instructies kunnen via STDIN gegeven worden of met de optie uit een bestand komen dat de instellingen bevat. De instellingen op gateway host #1 (die het publieke IP adres A.B.C.D heeft) om al het uitgaande verkeer naar W.X.Y.Z te laten versleutelen is: spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; Deze commando's kunnen in een bestand (bv. /etc/ipsec.conf) gezet worden om uitgevoerd te worden: &prompt.root; setkey -f /etc/ipsec.conf vertelt &man.setkey.8; dat er een regel toegevoegd moet worden aan de database met het beveiligingsbeleid. De rest van de regel geeft aan op welke pakketten dit beleid van toepassing is. A.B.C.D/32 en W.X.Y.Z/32 zijn de IP adressen en netmaskers waarmee het netwerk of de hosts worden aangegeven waarop het beleid van toepassing is. In dit geval is het van toepassing op het verkeer tussen twee hosts. vertelt de kernel dat dit beleid alleen van toepassing is op pakketten waarin een ander pakket ingepakt zit. betekent dat dit beleid van toepassing is op uitgaande pakketten en betekent dat de pakketten beveiligd moeten worden. Het tweede deel geeft aan hoe een pakket versleuteld wordt. is het protocol dat gebruikt moet worden en geeft aan dat het pakket ingepakt moet worden in een IPsec pakket. Het herhaalde gebruik van A.B.C.D en W.X.Y.Z heeft te maken met het aangeven welke beveiligingssamenwerking gebruikt moet worden en als laatste is het door verplicht dat de pakketten versleuteld worden als deze regel van toepassing is. Deze regel is alleen van toepassing op uitgaande pakketten. Er moet ook nog een regel komen voor inkomende pakketten. spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; Let wel dat hier dus staat in plaats van en dat de IP adressen zijn omgedraaid. Op de andere gateway host (met een publiek IP adres W.X.Y.Z) zijn soortgelijke regels nodig. spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; Tenslotte moeten de firewalls ESP en IPENCAP pakketten naar beide kanten toestaan. Deze regels moeten op beide hosts toegevoegd worden. ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D Omdat deze regels symmetrisch zijn, kunnen ze op beide gateway hosts gebruikt worden. Uitgaande pakketten zien er nu ongeveer zo uit: .------------------------------. --------------------------. | Src: A.B.C.D | | | Dst: W.X.Y.Z | | | <andere kop info> | | Versleuteld +------------------------------+ | pakket. | .--------------------------. | -------------. | inhoud | | Src: A.B.C.D | | | | is | | Dst: W.X.Y.Z | | | | volledig | | <andere kop info> | | | |- veilig | +--------------------------+ | | Ingepakt | voor | | .----------------------. | | -. | pakket | snoopen | | | Src: 192.168.1.1 | | | | Origineel|- met echt | door derden | | | Dst: 192.168.2.1 | | | | pakket, | IP adres | | | | <andere kop info> | | | |- privaat | | | | +----------------------+ | | | IP adres | | | | | <pakket data> | | | | | | | | `----------------------' | | -' | | | `--------------------------' | -------------' | `------------------------------' --------------------------' Als ze ontvangen worden door de andere kant van het VPN dan worden ze eerst ontcijferd (met de beveiligingssamenwerking die door racoon tot stand is gebracht). Daarna komen ze de gif interface binnen die de tweede laag uitpakt zodat het binnenste pakket overblijft, dan nu naar het interne netwerk kan reizen. De beveiliging kan gecontroleerd worden met dezelfde &man.ping.8; test die eerder is uitgevoerd, door eerst aan te melden op de A.B.C.D gateway machine en het onderstaande uit te voeren: tcpdump dst host 192.168.2.1 In nog een sessie op dezelfde host kan dan het volgende commando uitgevoerd worden: ping 192.168.2.1 Nu hoort de volgende uitvoer te zien te zijn: XXX tcpdump output &man.tcpdump.1; toont nu de ESP pakketten. Als deze pakketten verder bekeken worden met de optie dan is de uitvoer onbegrijpelijk vanwege de versleuteling. Gefeliciteerd. Nu is het VPN tussen de twee locaties opgezet. Samenvatting Stel beide kernels in met: options IPSEC options IPSEC_ESP Installeer security/racoon. Wijzig ${PREFIX}/etc/racoon/psk.txt op beide gateway hosts en voeg een regel toe voor het IP adres van de host aan de andere kant en een geheime sleutel die aan beide kanten bekend is. Dit bestand hoort mode 0600 te hebben. Voeg de volgende regels toe aan /etc/rc.conf voor iedere host: ipsec_enable="YES" ipsec_file="/etc/ipsec.conf" Maak /etc/ipsec.conf op iedere host die de benodigde spdadd regels bevat. Op gateway host #1 zou dat zijn: spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P out ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P in ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; En op gateway host #2 is dat: spdadd W.X.Y.Z/32 A.B.C.D/32 ipencap -P out ipsec esp/tunnel/W.X.Y.Z-A.B.C.D/require; spdadd A.B.C.D/32 W.X.Y.Z/32 ipencap -P in ipsec esp/tunnel/A.B.C.D-W.X.Y.Z/require; Voeg firewallregels toe om IKE, ESP en IPENCAP verkeer toe te staan naar beide hosts: ipfw add 1 allow udp from A.B.C.D to W.X.Y.Z isakmp ipfw add 1 allow udp from W.X.Y.Z to A.B.C.D isakmp ipfw add 1 allow esp from A.B.C.D to W.X.Y.Z ipfw add 1 allow esp from W.X.Y.Z to A.B.C.D ipfw add 1 allow ipencap from A.B.C.D to W.X.Y.Z ipfw add 1 allow ipencap from W.X.Y.Z to A.B.C.D De voorgaande twee stappen zouden voldoende moeten zijn voor het opzetten van het VPN. Machines op ieder netwerk kunnen elkaar nu bereiken op basis van IP adressen en al het verkeer over de verbinding wordt automatisch en veilig versleuteld.
Chern Lee Bijgedragen door Siebrand Mazeland Vertaald door OpenSSH OpenSSH beveiliging OpenSSH OpenSSH is een groep netwerkverbindingsprogramma's waarmee computers via het netwerk veilig benaderd kunnen worden. Het kan ingezet worden als een directe vervanger van rlogin, rsh, rcp en telnet. Daarnaast kunnen alle andere TCP/IP verbindingen veilig getunneld of geforward worden door SSH. OpenSSH versleutelt al het verkeer om afluisteren, het stelen van een verbinding en andere netwerkaanvallen effectief te voorkomen. OpenSSH wordt onderhouden door het OpenBSD project en is gebaseerd op SSH v1.2.12 met alle recente bugfixes en updates. Het is compatibel met beide protocollen SSH 1 en 2. OpenSSH zit in de basisinstallatie sinds &os; 4.0. Voordelen van Gebruik van OpenSSH Als gewoonlijk &man.telnet.1; of &man.rlogin.1; wordt gebruikt, wordt de data in platte tekst en niet versleuteld verzonden. Netwerksnuffelaars die ergens tussen de client en de server meeluisteren, kunnen een gebruikersnaam en wachtwoord stelen en zien welke gegevens er worden overgezonden tijdens een sessie. OpenSSH biedt een verscheidenheid aan authenticatie en versleutelingsmethoden die het voorgaande voorkomen. sshd Inschakelen OpenSSH inschakelen In rc.conf dient het volgende te staan: sshd_enable="YES" Hierdoor wordt &man.sshd.8; geladen, het daemonprogramma voor OpenSSH, als het systeem de volgende keer opstart. De sshd daemon kan ook direct gestart worden door sshd in te geven op de commandoregel. SSH Client OpenSSH client &man.ssh.1; werkt net zoals &man.rlogin.1;. &prompt.root; ssh user@example.com Host key not found from the list of known hosts. Are you sure you want to continue connecting (yes/no)? yes Host 'example.com' added to the list of known hosts. user@example.com's password: ******* Het aanmelden gaat nu net zoals het zou gaan als wanneer er een sessie gestart zou worden met rlogin of telnet. SSH maakt gebruik van een systeem met vingerafdrukken als sleutels voor het vaststellen met welke server verbinding wordt gemaakt op het moment dat de client verbinding zoekt. De gebruiker krijgt alleen de eerste keer dat verbinding wordt gezocht met de server een vraag waarop yes geantwoord dient te worden. Bij volgende pogingen om aan te melden wordt de vingerafdruksleutel vergeleken met de sleutel die is opgeslagen. De SSH client alarmeert de gebruiker als de opgeslagen vingerafdruk sleutel anders is dan de sleutel die de server meldt. De vingerafdrukken worden opgeslagen in ~/.ssh/known_hosts of in ~/.ssh/known_hosts2 voor SSH v2 vingerafdrukken. OpenSSH servers staan standaard ingesteld om alleen SSH v2 connecties toe te staan. De client kan echter tussen beiden kiezen. Versie 2 is robuster en veiliger dan zijn voorloper. Het commando &man.ssh.1; kan gedwongen worden om een van de twee protocollen te gebruiken door de optie of voor respectievelijk v1 en v2 aan te geven. Veilig Kopiëren OpenSSH veilig kopiëren scp Het commando &man.scp.1; (secure copy) werkt gelijk aan &man.rcp.1;. Het kopieert een bestand van of naar een andere machine, maar doet dat veilig. &prompt.root; scp user@example.com:/COPYRIGHT COPYRIGHT user@example.com's password: ******* COPYRIGHT 100% |*****************************| 4735 00:00 &prompt.root; Omdat de vingerafdruk al is opgeslagen voor deze host in het vorige voorbeeld, is die al geverifieerd als &man.scp.1; gebruik wordt. De argumenten die aan &man.scp.1; gegeven worden zijn vrijwel gelijk aan die voor &man.cp.1; met het bestand of de bestanden als het eerste argument en de bestemming als het tweede. Omdat het bestand over het netwerk gaat, door SSH, hebben een of meer van de bestandsargumenten de vorm . Instellen OpenSSH instellen Het instellingenbestand dat voor het hele systeem geldt voor zowel de OpenSSH daemon als client staat in de map /etc/ssh. ssh_config bevat de instellingen voor de client en sshd_config bevat ze voor de daemon. Daarnaast bieden het (standaard /usr/sbin/sshd) en rc.conf opties nog meer mogelijkheden voor instellingen. ssh-keygen In plaats van het gebruik van wachtwoorden kan &man.ssh-keygen.1; gebruikt worden om RSA sleutels te maken om een gebruiker te authenticeren: &prompt.user; ssh-keygen -t rsa1 Initializing random number generator... Generating p: .++ (distance 66) Generating q: ..............................++ (distance 498) Computing the keys... Key generation complete. Enter file in which to save the key (/home/user/.ssh/identity): Enter passphrase: Enter the same passphrase again: Your identification has been saved in /home/user/.ssh/identity. ... &man.ssh-keygen.1; maakt een publiek en privaat sleutelpaar aan dat gebruikt kan worden voor authenticatie. De private sleutel staat opgeslagen in ~/.ssh/identity en de publieke sleutel staat in ~/.ssh/identity.pub. De publieke sleutel moet in ~/.ssh/authorized_keys van de andere machine staan om dit te laten werken. Nu is het mogelijk een verbinding te maken met een andere machine die gebaseerd is op RSA authenticatie in plaats van op wachtwoorden. De optie maakt RSA sleutels voor versie 1 van het SSH protocol. Als gebruik van versie 2 gewenst is, dan het commando ssh-keygen -t rsa gebruikt te worden. Als er een wachtwoordzin is gebruikt bij &man.ssh-keygen.1; dan wordt de gebruiker iedere keer dat de private sleutel wordt gebruikt een wachtwoord gevraagd. Het is mogelijk een SSH protocol versie 2 DSA sleutel te maken voor hetzelfde doel met het commando ssh-keygen -t dsa. Hiermee wordt een publiek/privaat DSA sleutelpaar gemaakt dat alleen gebruikt kan worden in SSH protocol versie 2 sessies. De publieke sleutel staat in ~/.ssh/id_dsa.pub en de private sleutel staat in ~/.ssh/id_dsa. Publieke DSA staan ook in ~/.ssh/authorized_keys op de andere machine. &man.ssh-agent.1; en &man.ssh-add.1; zijn hulpprogramma's die gebruikt worden om meerdere met wachtwoorden beschermde private sleutels te beheren. Opties en bestandslocaties kunnen afhankelijk zijn van de gebruikte OpenSSH versie op een systeem. Raadpleeg de &man.ssh-keygen.1; handboekpagina voor de correcte gegevens. SSH Tunnels OpenSSH tunnels OpenSSH kan een tunnel maken waarin een ander protocol ingepakt kan worden zodat er een versleutelde sessie ontstaat. Het volgende commando geeft &man.ssh.1; aan dat er een tunnel voor telnet gemaakt moet worden: &prompt.user; ssh -2 -N -f -L 5023:localhost:23 user@foo.example.com &prompt.user; Aan het ssh commando worden de volgende opties meegegeven: Dit dwingt ssh om versie 2 van het protocol te gebruiken. Gebruik van deze optie wordt afgeraden als er verbinding wordt gemaakt met oudere SSH servers. Dit geeft aan dat er geen commando volgt, maar dat er een tunnel opgezet moet worden. Als deze optie niet aanwezig was, zou ssh een normale sessie starten. Dit dwingt ssh om in de achtergrond te draaien. Dit geeft aan dat de lokaal een tunnel wordt gemaakt in de vorm lokale_poort:netwerk_host:netwerk_poort. Wijst naar een gebruiker op de SSH server op het netwerk. Een SSH tunnel werkt doordat een luistersocket wordt gemaakt op localhost op de aangegeven poort. Die stuurt dan iedere ontvangen verbinding op de lokale host/poort via de SSH verbinding door naar de aangegeven host en poort op het netwerk. In het voorbeeld wordt poort 5023 op localhost doorgestuurd naar poort 23 op localhost van de machine op het netwerk. Omdat 23 telnet is, zou dit een veilige telnet verbinding opleveren door een SSH tunnel. Dit kan gebruikt worden om ieder willekeurig onveilig TCP protocol in te pakken als SMTP, POP3, FTP, etc. SSH Gebruiken om een Veilige Tunnel te Maken voor SMTP &prompt.user; ssh -2 -N -f -L 5025:localhost:25 user@mailserver.example.com user@mailserver.example.com's password: ***** &prompt.user; telnet localhost 5025 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 mailserver.example.com ESMTP Dit kan samen met een &man.ssh-keygen.1; en extra gebruikersaccounts gebruikt worden om een min of meer naadloze en eenvoudige SSH tunnelomgeving te maken. In plaats van wachtwoorden kunnen sleutels gebruikt worden en de tunnels kunnen in de omgeving van een aparte gebruiker draaien. Praktische Voorbeelden van een SSH Tunnel Veilige Toegang tot een POP3 Server Op het werk staat een SSH server die verbindingen van buitenaf toestaat. Op hetzelfde netwerk op kantoor staat een mailserver waarop POP3 draait. Het netwerk of het netwerkpad tussen de locatie op internet en kantoor is wellicht niet helemaal te vertrouwen. Om deze reden dient de mailserver op een veilige manier benaderd te worden. De oplossing is een SSH verbinding opzetten naar de SSH server op kantoor en dan door de tunnel heen een verbinding opzetten met de mailserver. &prompt.user; ssh -2 -N -f -L 2110:mail.example.com:110 user@ssh-server.example.com user@ssh-server.example.com's password: ****** Als de tunnel eenmaal draait, dan kan de mailclient naar localhost poort 2110 gewezen worden. Alle verbinding naar die poort worden veilig doorgestuurd door de tunnel naar mail.example.com. Een Draconische Firewall Omzeilen Sommige netwerkbeheerders stellen draconische firewallregels op en filteren niet alleen inkomende verbindingen, maar ook uitgaande. Meestal mag dan alleen maar verbinding gemaakt worden met andere machines op poorten 22 en 80 voor SSH en websurfen. Soms wil een gebruiker dan toch toegang krijgen tot andere (wellicht niet netwerk-gerelateerd) diensten, zoals een Ogg Vorbis server om muziek te streamen. Als die Ogg Vorbis server streamt op een andere poort dan 22 of 80, dan kan deze niet bereikt worden. De oplossing ligt in het opzetten van een SSH verbinding naar een machine buiten de firewall en die tunnel te gebruiken om bij de Ogg Vorbis server te komen. &prompt.user; ssh -2 -N -f -L 8888:music.example.com:8000 user@unfirewalled-system.example.org user@unfirewalled-system.example.org's password: ******* De streamingclient kan nu gewezen worden naar localhost poort 8888 vanwaar er wordt doorverwezen naar music.example.com poort 8000 en zo wordt de firewall succesvol ontwerken. Meer Lezen OpenSSH &man.ssh.1; &man.scp.1; &man.ssh-keygen.1; &man.ssh-agent.1; &man.ssh-add.1; &man.sshd.8; &man.sftp-server.8; Tom Rhodes Bijgedragen door Siebrand Mazeland Vertaald door ACL Bestandssysteem Toegangscontrolelijsten In combinatie met verbeteringen als snapshots, bieden &os; 5.0 en volgende versies de veiligheid van Bestandssysteem Toegangscontrolelijsten (Access Control Lists, ACLs). Met Toegangscontrolelijsten wordt het standaard &unix; rechtenmodel uitgebreid op een zeer verenigbare (&posix;.1e) manier. Deze methodes stellen een beheerder in staat om gebruik te maken en voordeel te halen uit een geraffineerder beveiligingsmodel. Om ondersteuning voor ACLs voor bestandssystemen in te schakelen dient het volgende in de kernel gecompileerd te worden: options UFS_ACL Als deze optie niet aanwezig is, dan wordt er een waarschuwing weergegeven als er wordt geprobeerd een bestandssysteem te mounten dat gebruik maakt van ACLs. Deze optie is al geactiveerd in de GENERIC kernel. ACLs zijn afhankelijk van uitgebreide attributen die zijn ingeschakeld op het bestandssysteem. Uitgebreide attributen worden standaard ondersteund in het volgende generatie &unix; bestandssysteem UFS2. Er is meer administratieve overhead nodig om uitgebreide attributen in te stellen op UFS1 dan op UFS2. De prestaties van uitgebreide attributen zijn op UFS2 ook veel beter. Daarom wordt UFS2 ook meestal aangeraden boven UFS1 bij het gebruik van toegangscontrolelijsten. ACLs worden ingeschakeld door de beheersvlag op het moment van mounten. Dit kan ook in /etc/fstab staan. De vlag op het moment van mounten kan ook automatisch gezet worden op een persistente wijze met &man.tunefs.8; door een superblok in de bestandssysteemkop te wijzigen. In het algemeen wordt de voorkeur gegeven aan de vlag in het superblok om een aantal redenen: De ACLs vlag op het moment van mounten kan niet gewijzigd worden bij opnieuw mounten (&man.mount.8; ), maar alleen door een volledige &man.umount.8; en een verse &man.mount.8;. Dit betekent dat ACLs niet ingeschakeld kunnen worden op root bestandssysteem na het booten. Het betekent ook dat de aard van een bestandssysteem niet veranderd kan worden als het eenmaal in gebruik is. Het inschakelen van de superblok vlag zorgt ervoor dat het bestandssysteem altijd wordt gemount met de ACLs ingeschakeld, zelfs als het niet in fstab staat of als de apparaten van plaats veranderen. Hiermee wordt voorkomen dat het bestandssysteem wordt gebruikt zonder dat ACLs ingeschakeld zijn, wat ervoor zou kunnen zorgen dat ACLs onjuist worden toegepast wat weer kan zorgen voor beveiligingsproblemen. Wellicht wordt het mogelijk om de ACLs via de vlag in te schakelen zonder een compleet verse &man.mount.8;, maar de ontwikkelaars vinden het wenselijk om het per ongeluk zonder ACLs mounten te ontmoedigen, omdat er bijzonder vervelende gevolgen kunnen zijn als ACLs worden ingeschakeld, daarna worden uitgezet en weer worden ingeschakeld zonder dat de uitgebreide attributen worden geschoond. In het algemeen geldt dat als ACLs eenmaal zijn ingeschakeld voor een bestandssysteem, ze niet meer uitgeschakeld moeten worden, omdat de resulterende bestandsbescherming wellicht niet compatibel is met dat wat gebruikers van het systeem nodig hebben en het opnieuw aanzetten van ACLs kan leiden tot het opnieuw koppelen van voorheen bestaande ACLs aan bestanden waarvoor de toegangsrechten sindsdien zijn aangepast, wat kan leiden tot onverwachte situaties. Bestandssystemen waarvoor ACLs zijn ingeschakeld worden weergegeven met een + (plus) teken als de toegangsrechten worden bekeken: drwx------ 2 robert robert 512 Dec 27 11:54 private drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1 drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2 drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3 drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html Hierboven is te zien dat mappen directory1, directory2 en directory3 allemaal gebruik maken van ACLs. De map public_html doet dat niet. Gebruik Maken van <acronym>ACL</acronym>s De ACLs van het bestandssysteem kunnen bekeken worden met het hulpprogramma &man.getfacl.1;. Om de ACL op het bestand test te bekijken zou het volgende commando nodig zijn: &prompt.user; getfacl test #file:test #owner:1001 #group:1001 user::rw- group::r-- other::r-- Om de ACL op dit bestand te wijzigen wordt het hulpprogramma &man.setfacl.1; als volgt gebruikt: &prompt.user; setfacl -k test De vlag verwijdert alle bestaande ACLs van een bestand of bestandssysteem. De methode die de voorkeur geniet is gebruiken omdat die optie de basisvelden die nodig zijn voor het laten werken van de ACLs laat staan. &prompt.user; setfacl -m u:trhodes:rwx,group:web:r--,o::--- test Bij het commando hierboven, werd de optie gebruikt om de standaard ACL aan te passen. Omdat er geen voorgedefinieerde instellingen waren, die waren verwijderd door het commando daarvoor, werden nu de standaardinstellingen hersteld en de rechten die werden aangegeven toegevoegd. Let op dat bij het toevoegen van een gebruiker of een groep die niet bekend is op het systeem een foutmelding Invalid argument wordt geschreven naar stdout. Tom Rhodes Bijgedragen door Siebrand Mazeland Vertaald door &os; Beveiligingswaarschuwingen &os; Beveiligingswaarschuwingen Net als veel andere kwalitatief goede productiebesturingssystemen publiceert &os; Beveiligingswaarschuwingen. Deze waarschuwingen worden meestal pas naar de beveiligingslijst gemaild en gedocumenteerd in de Errata als de van toepassing zijnde releases gepatcht zijn. In deze paragraaf wordt toegelicht wat een waarschuwing is, hoe die te begrijpen en welke maatregelen er genomen moeten worden om een systeem bij te werken. Hoe Ziet een Waarschuwing eruit? De &os; beveiligingswaarschuwingen zien er ongeveer uit als die hieronder die van de &a.security-notifications.name; mailinglijst komt. ============================================================================= &os;-SA-XX:XX.UTIL Security Advisory The &os; Project Topic: denial of service due to some problem Category: core Module: sys Announced: 2003-09-23 Credits: Person@EMAIL-ADDRESS Affects: All releases of &os; &os; 4-STABLE prior to the correction date Corrected: 2003-09-23 16:42:59 UTC (RELENG_4, 4.9-PRERELEASE) 2003-09-23 20:08:42 UTC (RELENG_5_1, 5.1-RELEASE-p6) 2003-09-23 20:07:06 UTC (RELENG_5_0, 5.0-RELEASE-p15) 2003-09-23 16:44:58 UTC (RELENG_4_8, 4.8-RELEASE-p8) 2003-09-23 16:47:34 UTC (RELENG_4_7, 4.7-RELEASE-p18) 2003-09-23 16:49:46 UTC (RELENG_4_6, 4.6-RELEASE-p21) 2003-09-23 16:51:24 UTC (RELENG_4_5, 4.5-RELEASE-p33) 2003-09-23 16:52:45 UTC (RELENG_4_4, 4.4-RELEASE-p43) 2003-09-23 16:54:39 UTC (RELENG_4_3, 4.3-RELEASE-p39) &os; only: NO For general information regarding FreeBSD Security Advisories, including descriptions of the fields above, security branches, and the following sections, please visit http://www.FreeBSD.org/security/. I. Background II. Problem Description III. Impact IV. Workaround V. Solution VI. Correction details VII. References Het veld Topic geeft aan wat precies het probleem is. Het is eigenlijk een inleiding op de beveiligingswaarschuwing en geeft aan welke programma kwetsbaar is. Het veld Category geeft aan welk onderdeel van het systeem kwetsbaar is. Dat kan een van de onderdelen core, contrib of ports zijn. De categorie core betekent dat de een kerncomponent van het &os; besturingssysteem kwetsbaar is. De categorie contrib betekent dat software die toegevoegd is aan het &os; Project kwetsbaar is, zoals sendmail. Tenslotte geeft de categorie ports aan dat een optionele component uit de Portscollectie kwetsbaar is. Het veld Module geeft aan waar de component zich bevindt, bijvoorbeeld sys. In dit voorbeeld wordt het duidelijk dat de module sys kwetsbaar is. Hier gaat het dus om een kwetsbaar component die gebruikt wordt in de kernel. Het veld Announced geeft aan wanneer de beveiligingswaarschuwing gepubliceerd of aangekondigd is. Dit betekent dat het beveiligingsteam heeft bevestigd dat het probleem bestaat en dat er een patch is gecommit in het depot met de broncode van &os;. In het veld Credits wordt iemand of een organisatie bedankt die de kwetsbaarheid heeft ontdekt en gerapporteerd. Het veld Affects geeft aan welke releases van &os; door deze kwetsbaarheid worden getroffen. Voor de kernel kan snel gekeken worden naar de uitvoer van ident voor de betreffende bestanden om te bepalen welke revisie ze hebben. Voor ports is het versienummer te zien in /var/db/pkg. Als het systeem niet gelijk op loopt met het &os; CVS depot en dagelijks herbouwd wordt, dan is de kans groot dat het systeem kwetsbaar is. Het veld Corrected geeft de datum, tijd en tijdzone aan en de release die is aangepast. Het veld &os; only geeft aan of deze kwetsbaarheid alleen betrekking heeft op &os; of dat hij ook betrekking heeft op andere besturingssystemen. Het veld Background geeft meer informatie over wat er precies aan de hand is. Meestal staat hier waarom het programma aanwezig is in &os;, waar het voor gebruikt wordt en hoe het programma is ontstaan. Het veld Problem Description geeft gedetailleerde toelichting op het beveiligingsprobleem. Hier kan informatie bij staat over programmacode die fouten bevat of zelfs hoe het programma gebruikt kan worden om een beveiligingsgat te openen. Het veld Impact beschrijft welke invloed het probleem kan hebben op het systeem. Dit kan bijvoorbeeld een ontzegging van dienst aanval zijn, gebruikers extra rechten geven of het verkrijgen van supergebruiker toegang voor de aanvaller zijn. Het veld Workaround geeft aan hoe het mogelijk is het probleem te omzeilen (workaround) in het geval systeembeheerders niet in staat zijn om het systeem bij te werken. Dit zou te maken kunnen hebben met de tijd, beschikbaarheid van het netwerk en een hele lijst met andere redenen. Hoe dan ook, beveiliging dient serieus genomen te worden en een systeem dat kwetsbaar is moet bijgewerkt worden of het gat in de beveiliging moet gedicht worden met de alternatieve oplossing. Het veld Solution geeft instructies over hoe een systeem aangepast kan worden. Dit is een werkinstructie die getest en gecontroleerd is om een systeem aan te passen en weer veilig werkend te krijgen. In het veld Correction Details staan de CVS takken of releasenamen, met de punten veranderd in een liggend streepje. Er staat ook welke revisienummer de aangetaste bestanden binnen een tak hebben. In het veld References wordt gewoonlijk verwezen naar andere bronnen. Dit kunnen URLs, boeken, mailinglijsten en nieuwsgroepen zijn.
diff --git a/nl_NL.ISO8859-1/books/handbook/vinum/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/vinum/chapter.sgml index 19ef6b0ea9..e76ac6b9e4 100644 --- a/nl_NL.ISO8859-1/books/handbook/vinum/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/vinum/chapter.sgml @@ -1,1566 +1,1566 @@ Greg Lehey Geschreven door Erwin Kooi Vertaald door - De VINUM volume manager + De VINUM Volume Manager Overzicht Welke harde schijven er ook gebruikt worden, er zijn altijd mogelijke problemen: Ze kunnen te klein zijn Ze kunnen te traag zijn Ze kunnen te onbetrouwbaar zijn. Eén manier waarop gebruikers zich wapenen tegen een aantal van deze problemen is door meerdere en soms ook redundante disks te gebruiken. Naast ondersteuning voor verschillende kaarten en controllers die hardware RAID ondersteunen, bevat het &os; basissysteem ook de Vinum Volume Manager, een block device driver waarmee virtuele disken gemaakt kunnen worden. Vinum biedt meer flexibiliteit, prestaties en betrouwbaarheid dan traditionele diskopslag en er kan RAID-0, RAID-1 en RAID-5 mee gemaakt worden of een combinatie van deze RAID niveau's. In dit hoofdstuk wordt een overzicht gegeven van de mogelijke problemen die traditionele diskopslag met zich meebrengt en de Vinum Volume Manager wordt geïntroduceerd. Schijfgrootte Vinum RAID software Vinum is een Volume Manager, een virtuele schijfdriver die de drie genoemde problemen op kan lossen. Het probleem wordt in de volgende paragrafen verder uitgediept. Verscheidene oplossingen zijn al voorgesteld en toegepast: De capaciteit van schijven wordt groter, maar ook de vraag naar capaciteit neemt toe. Vaak is het gewenste bestandsysteem groter dan de op dat moment beschikbare schijven. Hoewel dit probleem niet meer zo actueel als het tien jaar geleden was, bestaat het nog steeds. In sommige systemen is dit opgelost door een virtuele harde schijf te maken die de data op meerdere fysieke harde schijven kan opslaan. Snelheid van Toegang Moderne systemen hebben vaak simultaan toegang tot data nodig. FTP en webservers kunnen bijvoorbeeld duizenden simultane sessies onderhouden en hebben vaak meerdere 100 Mbit/s verbindingen met de rest van de wereld. De benodigde datadoorvoer is dan groter dan de meeste schijven kunnen leveren. Huidige schijven kunnen data sequentieel overdragen met ongeveer 70 MB/s, maar deze snelheid heeft geen waarde in een omgeving waar onafhankelijke processen toegang tot de schijf hebben. In zo'n situatie is het interessanter om vanuit het standpunt van de schijfdriver te kijken: de belangrijkste parameter is dan de belasting die een bepaalde data overdracht op de driver plaatst. Met andere woorden: wat is het tijdbeslag van een dataoverdracht op te schijf? Bij elke dataoverdracht moet de schijf eerst zijn kop positioneren, wachten tot de eerste sector onder de kop doorkomt en vervolgens de overdracht starten. Deze acties duren bijzonder kort. Het heeft geen enkele zin om ze te onderbreken. Neem een overdracht van ongeveer 10 kB: de huidige generatie high-performance schijven kan de kop in 3.5 ms plaatsen. De snelste schijven draaien met 15.000 toeren per minuut, dus de gemiddelde rotatie vertraging (een halve omwenteling) bedraagt 2 ms. Met 70 MB/s de overdracht zelf duurt ongeveer 150 μs, bijna niets vergeleken met de tijd die verloren is gegaan aan het positioneren. In zulke gevallen daalt de data overdracht naar iets meer dan 1 MB/s en is dus duidelijk afhankelijk van de grootte van de over te dragen data. De traditionele en logische oplossing voor dit probleem is meer schijven: in plaats van één grote schijf, meerdere kleine schijven met een zelfde totale opslagcapaciteit. Iedere schijf is in staat om onafhankelijk de kop te plaatsen en de data over te dragen, dus de effectieve doorvoer neemt toe met een factor bijna gelijk aan het aantal schijven. De exacte verbetering van de doorvoer is natuurlijk kleiner dan het aantal schijven, want hoewel iedere schijf in staat is om parallel de data over te dragen, er is geen garantie dat de data gelijk over de schijven verdeeld is. De belasting op de ene schijf zal dan ook groter zijn dan op de andere schijf. aaneenschakelen disken aaneenschakelen Vinum aaneenschakelen RAID Een gelijke belasting van de schijven is in grote mate afhankelijk van de manier waarop data over de schijven is verdeeld. In het volgende stuk is de opslag van een virtuele schijf voor te stellen als een verzameling sectoren die met een nummer aangesproken kan worden, net als bladzijden in een boek. De meest voor de hand liggende methode om een virtuele schijf te maken is het achter elkaar plakken van de fysieke schijven. Een virtueel boek zou dan opgebouwd zijn uit verschillende achter elkaar zittende fysieke hoofdstukken. Deze methode heet aaneenschakelen (concatenation) en heeft het voordeel dat schijven verschillend van grootte kunnen zijn. Dit werkt prima als toegang tot de data gelijk verdeeld is over de hele dataset. Als die toegang beperkt is tot een klein deel van de dataset, is de snelheidsverbetering een stuk kleiner. laat de manier zien hoe aaneengeschakelde schijven hun data opslaan.
- Aaneengeschakeld georganiseerd + Aaneengeschakeld Georganiseerd
verdelen disk striping Vinum verdelen Een andere methode is het verdelen van de totale opslag van de virtuele schijf in kleinere stukjes van gelijke grootte en ze achter elkaar op verschillende fysieke schijven op te slaan. Bijvoorbeeld: de eerste 256 sectoren worden op schijf 1 opgeslagen, de tweede 256 sectoren op schijf 2 enzovoort, tot de laatste schijf is gebuikt, waarna weer bij schijf 1 verder wordt gegaan, net zolang tot de schijven vol zijn. Deze methode heet verdelen (striping) of RAID-0. RAID staat voor Redundant Array of Inexpensive Disks (Redundante Reeks van Goedkope Disks) en biedt verschillende vormen van fout-tolerantie. Hoewel die laatste term wat misleidend is: het biedt namelijk geen redundantie. . Bij RAID-0 kost het iets meer moeite om de data te vinden en het kan extra I/O belasting met zich meebrengen als data is verdeeld over verschillende fysieke schijven. Het kan echter ook zorgen voor een constantere belasting van die schijven. geeft weer hoe RAID-0 schijven hun data opslaan.
- Verdeeld georganiseerd + Verdeeld Georganiseerd
Betrouwbaarheid van Data Het laatste probleem met de huidige schijven is dat ze onbetrouwbaar zijn. Hoewel de betrouwbaarheid de laatste jaren enorm is toegenomen, blijven schijven het vitale onderdeel van een server dat waarschijnlijk als eerste kapot gaat. Als dat gebeurt kan het catastrofale gevolgen hebben: het vervangen van de schijf en het terugplaatsen van de data kan dagen kosten. spiegelen disken spiegelen Vinum spiegelen RAID-1 De traditionele manier om dit te voorkomen is spiegelen (mirroring): het hebben van een kopie van de data op een andere fysieke schijf. Sinds de uitvinding van RAID niveau's staat dit bekend als RAID-1. Een schrijfactie naar de virtuele schijf gebeurt op beide fysieke schijven. Een leesactie hoeft slechts vanaf één te gebeuren. Op deze manier kan de virtuele schijf dus blijven werken als één van de twee fysieke schijven kapot is. RAID-1 heeft twee problemen: Prijs. Er is twee keer zoveel schijfruimte nodig als bij een niet-redundante schijf. Prestatie. Een schrijfacie moet op twee schijven gebeuren en kost dus twee keer zoveel bandbreedte. Een leesactie hoeft maar op één schijf te gebeuren en heeft hier dus geen last van. RAID-5 Een andere manier is pariteit, uitgevoerd in RAID niveau's 2, 3, 4 en 5. Van deze vier is RAID-5 het meest interessant. In Vinum is het geïmplementeerd als een variant van een verdeelde organisatie waarbij één blok van elk deel is gereserveerd voor de pariteit van de andere blokken. Voor Vinum is een RAID-5 samenstelling (plex) dan ook gelijk aan een verdeelde samenstelling, met als verschil dat het een pariteitblok bevat in ieder deel. Zoals voorgeschreven door RAID-5 wisselt de locatie van dit pariteitblok van het ene deel naar het andere. De nummers in de datablokken geven de relatieve bloknummers aan.
- RAID-5 georganiseerd + RAID-5 Georganiseerd
Vergeleken met spiegelen heeft RAID-5 het voordeel dat er beduidend minder opslagcapaciteit nodig is. Lezen gebeurt op dezelfde manier als bij een verdeelde organisatie, maar schrijven kost beduidend meer tijd, ongeveer 25% van de leesprestaties meer. Als één schijf uitvalt, kan de reeks doorwerken in een verslechterde staat (degraded mode): data van een functionerende schijf kan zonder problemen gelezen worden, maar data van de defecte schijf moet eerst worden samengesteld uit de pariteit van de overeenkomende blokken van de resterende schijven.
Vinum Objecten Om deze problemen op te lossen, hanteert vinum een hiërarchie met vier niveau's van objecten: Het meest zichtbare object is de virtuele schijf. Dit object wordt volume genoemd. Op een paar kleine details na, hebben volumes dezelfde eigenschappen als een &unix; schijf. Het belangrijkste verschil is dat er geen beperking aan de grootte van de schijf is. Volumes zijn opgebouwd uit samenstellingen, die elk de totale opslagcapaciteit van het volume hebben. Dit niveau in de hiërarchie biedt daarom redundantie. Een samenstelling is goed voor te stellen als een individuele schijf in een RAID-1 systeem. Iedere schijf bevat dezelfde data. Omdat Vinum bestaat binnen het &unix; opslagsysteem, moet het mogelijk zijn om &unix; partities te gebruiken als bouwstenen voor samenstellingen die uit meerdere schijven bestaan. Maar het blijkt dat dit te inflexibel is: &unix; schijven hebben een beperkt aantal partities. In plaats daarvan verdeelt Vinum een &unix; partitie (de schijf) in aaneengesloten stukken die subschijven worden genoemd. Deze subschijven worden vervolgens als bouwstenen voor de samenstelling gebruikt. Subschijven bestaan op Vinum drives, op dit moment &unix; partities. Een Vinum drive kan een oneindig aantal subdisks bevatten. Met uitzondering van een klein stukje aan het begin van de schijf, dat wordt gebruikt om informatie over de configuratie en de toestand op te slaan, is de gehele schijf beschikbaar voor de opslag van data. In de volgende paragrafen wordt beschreven hoe deze objecten de functionaliteit van Vinum leveren. Volumegrootte Overwegingen Een samenstelling kan meerdere subschijven bevatten die uitgespreid zijn over alle disks in de Vinum configuratie. Dat houdt in dat de grootte van een individuele schijf geen limiet is voor de samenstelling en dus niet voor het volume. Redundante Dataopslag Vinum implementeert RAID-0 door meerdere samenstellingen aan een volume te koppelen. Elke samenstelling representeert hierbij de data in het volume. Een volume kan tussen de één en acht samenstellingen bevatten. Hoewel een samenstelling de totala data van een volume voorstelt, is het mogelijk dat delen van deze voorstelling missen, door ontwerp (door geen subdisk voor delen van de samenstelling te definiëren) of per ongeluk (door een defecte schijf). Zo lang tenminste één samenstelling de data voor het gehele volume kan leveren, is het volume volledig bruikbaar. Prestaties Vinum implementeert aaneenschakelen en spiegelen op het niveau van de samenstelling: Een aaneengeschakelde samenstelling gebruikt de adresruimte van elke subdisk achter elkaar. Een verdeelde samenstelling spreidt de data over iedere subdisk. De subdisks moeten daarvoor allemaal dezelfde grootte hebben en er moeten tenminste twee subdisks zijn om onderscheid te kunnen maken met een aaneengeschakelde samenstelling. Welke Samenstelling? De versie van Vinum die met &os; &rel.current; wordt meegeleverd, kent twee soorten samenstellingen: Aaneengeschakelde samenstellingen zijn het meest flexibel: ze kunnen een oneindig aantal subdisks bevatten die verschillend van lengte mogen zijn. De samenstelling kan uitgebreid worden door subdisks toe te voegen. Ze kosten minder CPU tijd dan verdeelde samenstellingen, hoewel het verschil van de CPU belasting niet meetbaar is. Aan de andere kant, ze zijn het meest kwetsbaar voor hot-spots, waar één disk heel intensief gebruikt wordt en anderen ongebruikt blijven. Het grootste voordeel van verdeelde samenstellingen (RAID-0) is dat ze geen hot-spots hebben. Door het kiezen van een optimale deelgrootte (veelal 256 kB) kan de belasting op de fysieke schijven gelijk getrokken worden. De nadelen van deze aanpak zijn (minescuul) complexere code en beperkingen aan de subdisks: ze moeten allemaal van gelijke grootte zijn en het uitbreiden van een samenstelling met extra subdisks is zo gecompliceerd, dat de huidige versie van Vinum dit niet ondersteunt. Vinum voegt een extra, triviale, beperking toe: een verdeelde samenstelling moet tenminste twee subdisks hebben, omdat die anders niet onderscheiden kan worden van een aaneengeschakelde samenstelling. In worden de voor- en nadelen van elke samenstelling samengevat. Vinum Samenstellingen Samenstellingtype Min. aantal subdisks Subdisks toevoegen Gelijke grootte Toepassing aaneengeschakeld 1 ja nee Veel dataopslag met maximale flexibiliteit en gemiddelde performance. verdeeld 2 nee ja Hoge prestaties, ook bij veel gelijktijdige toegang.
Voorbeelden Vinum houdt een configuratie database bij waarin beschreven staat welke objecten bekend zijn in het systeem. Bij het instellen vult de gebruiker deze database uit één of meer configuratiebestanden &man.vinum.8;. Vinum bewaart een kopie van de database op iedere slice (die Vinum device noemt) die door Vinum wordt beheerd. Deze database wordt na iedere statuswijziging bijgewerkt, zodat een na een herstart acuraat de toestand van ieder Vinum object wordt weergegeven. Het Configuratiebestand Het configuratiebestand beschijft de individuele vinum objecten. De definitie van een eenvoudig volume kan er zo uitzien: drive a device /dev/da3h volume myvol plex org concat sd length 512m drive a Dit bestand beschrijft vier Vinum objecten: De drive regel beschrijft een partitie (drive) en de relatieve positie ten opzichte van de onderliggende hardware. Het heeft de symbolische naam a. Deze scheiding van de symbolische naam van de schijf maakt het mogelijk om disks te verplaatsen van de ene locatie naar de andere, zonder verwarring te veroorzaken. De volume regel beschrijft een volume. Het enige benodigde attribuut is de naam: myvol. De plex regel beschrijft een samenstelling. Het enige benodigde attribuut is de organisatie, in dit geval concat. Er is geen naam nodig: het systeem genereert automatisch een naam door .px aan de volumenaam toe te voegen, waarbij x het nummer van de samenstelling in het volume is. De naam van deze samenstelling wordt dus myvol.p0. De sd regel beschrijft een subdisk. De minimale specificaties zijn de naam van een schijf waar de subdisk kan worden opgeslagen en de lengte van de subdisk. Net als bij een samenstelling is er geen naam nodig: het systeem genereert automatisch een naam door .sx aan de samenstellingnaam toe te voegen, waarbij x het nummer van de subdisk is. De naam van deze subdisk is dus myvol.p0.s0. Na het verwerken van deze definitie ziet de uitvoer van &man.vinum.8; er als volgt uit: &prompt.root; vinum -> create config1 Configuration summary Drives: 1 (4 configured) Volumes: 1 (4 configured) Plexes: 1 (8 configured) Subdisks: 1 (16 configured) D a State: up Device /dev/da3h Avail: 2061/2573 MB (80%) V myvol State: up Plexes: 1 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB Deze uitvoer geeft de korte uitvoer van &man.vinum.8; weer. Het is grafisch weergegeven in .
Een Eenvoudig Vinum Volume
Deze en de volgende figuren stellen een volume voor dat samenstellingen bevat die weer de subdisks bevatten. In dit triviale voorbeeld bevat het volume een samenstelling en deze samenstelling bevat een subdisk. Dit speciale volume heeft geen voordeel boven een gewone schijf paritie. Het bevat één samenstelling, dus het is niet redundant. De samenstelling bevat één subdisk, dus er is geen verschil in de plaats van de data met een conventionele schijf partitie. In de volgende paragrafen worden meer interesante configuraties getoond.
Verbeterde Betrouwbaarheid: Spiegelen De betrouwbaarheid van een volume wordt vergroot door spiegelen. Bij het opzetten van een gespiegeld volume is het van belang dat subdisks van iedere samenstelling op een andere schijf staan, zodat een defecte schijf niet beide samenstellingen beïnvloedt. De volgende configuratie maakt een gespiegeld volume: drive b device /dev/da4h volume mirror plex org concat sd length 512m drive a plex org concat sd length 512m drive b In dit voorbeeld was het niet nodig om drive a opnieuw te definiëren, omdat Vinum alle objecten bijhoudt in de configuratie database. Na het verwerken van deze definitie, ziet de configuratie er als volgt uit: Drives: 2 (4 configured) Volumes: 2 (4 configured) Plexes: 3 (8 configured) Subdisks: 3 (16 configured) D a State: up Device /dev/da3h Avail: 1549/2573 MB (60%) D b State: up Device /dev/da4h Avail: 2061/2573 MB (80%) V myvol State: up Plexes: 1 Size: 512 MB V mirror State: up Plexes: 2 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB Het is grafisch weergegeven in .
- Een gespiegeld Vinum Volume + Een Gespiegeld Vinum Volume
In dit voorbeeld bevat iedere samenstelling de volledige 512 MB van de opslagcapaciteit. Net als in het vorige voorbeeld bevat iedere samenstelling slechts één subdisk.
Verbeterde Prestatie Het gespiegelde volume in het vorige voorbeeld is beter bestand tegen hardware fouten dan een niet-gespiegeld volume, maar de prestaties zijn lager: iedere schrijfactie naar het volume moet op beide schijven worden uitgevoerd, waardoor een groter deel van de bandbreedte van de schijf nodig is. Als prestaties een belangrijke rol spelen, moet er een andere benadering gekozen worden: in plaats van spiegelen wordt de data verdeeld over zoveel mogelijk schijven. De volgende configuratie laat een volume zien waarbij een samenstelling over vier schijven verdeeld is: drive c device /dev/da5h drive d device /dev/da6h volume stripe plex org striped 512k sd length 128m drive a sd length 128m drive b sd length 128m drive c sd length 128m drive d Zoals eerder al te zien was, is het niet nodig om drives die al bekend zijn bij Vinum opnieuw te definiëren. Na het verwerken van deze definitie, ziet de configuratie er zo uit: Drives: 4 (4 configured) Volumes: 3 (4 configured) Plexes: 4 (8 configured) Subdisks: 7 (16 configured) D a State: up Device /dev/da3h Avail: 1421/2573 MB (55%) D b State: up Device /dev/da4h Avail: 1933/2573 MB (75%) D c State: up Device /dev/da5h Avail: 2445/2573 MB (95%) D d State: up Device /dev/da6h Avail: 2445/2573 MB (95%) V myvol State: up Plexes: 1 Size: 512 MB V mirror State: up Plexes: 2 Size: 512 MB V striped State: up Plexes: 1 Size: 512 MB P myvol.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p0 C State: up Subdisks: 1 Size: 512 MB P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB P striped.p1 State: up Subdisks: 1 Size: 512 MB S myvol.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p0.s0 State: up PO: 0 B Size: 512 MB S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB S striped.p0.s0 State: up PO: 0 B Size: 128 MB S striped.p0.s1 State: up PO: 512 kB Size: 128 MB S striped.p0.s2 State: up PO: 1024 kB Size: 128 MB S striped.p0.s3 State: up PO: 1536 kB Size: 128 MB
- Een verdeeld Vinum Volume + Een Verdeeld Vinum Volume
Dit volume wordt weergegeven in . De grijstinten geven de positie binnen de samenstelling aan: de lichtste strepen komen het eerst, de donkerste het laatst.
Betrouwbaarheid en Prestaties Met voldoende hardware is het mogelijk om een volume te bouwen met zowel verbeterde betrouwbaarheid als verbeterde prestaties ten opzichte van een standaard &unix; partitie. De volgende configuratie is een voorbeeld van zo'n volume: volume raid10 plex org striped 512k sd length 102480k drive a sd length 102480k drive b sd length 102480k drive c sd length 102480k drive d sd length 102480k drive e plex org striped 512k sd length 102480k drive c sd length 102480k drive d sd length 102480k drive e sd length 102480k drive a sd length 102480k drive b De subdisks van de tweede samenstelling zijn twee schijven verschoven ten opzichte van die van de eerste samenstelling. Dit zorgt ervoor dat een schrijfactie niet naar dezelfde disks gaat, zelfs niet als die schrijfactie over twee schijven plaatsvindt. laat deze configuratie zien in grafische vorm.
- Een gespiegeld en verdeeld Vinum Volume + Een Gespiegeld en Verdeeld Vinum Volume
Objectnamen Zoals eerder in dit hoofstuk beschreven staat, kent Vinum standaardnamen toe aan samenstellingen en subdisks. Er mag echter een andere naam aan gegeven worden. Een andere naamgeving wordt niet aangeraden: ervaring met de VERITAS volume manager, die een willekeurige object benaming toestaat, heeft laten zien dat deze flexibiliteit geen beduidend voordeel heeft, terwijl het de kans op verwarring vergroot. Namen mogen bestaan uit alle karakters, behalve de spatie, maar het wordt aanbevolen om alleen letters, cijfers en het liggende streepje te gebruiken. De namen van de volumes, samenstellingen en subdisks kunnen 64 tekens lang zijn en de namen van drives kunnen 32 tekens lang zijn. Vinum objecten worden device nodes toegekend in de /dev/vinum hiërarchie. Met de configuratie uit de vorige paragraaf creë Vinum de volgende nodes: De controle devices /dev/vinum/control en /dev/vinum/controld, die &man.vinum.8; en de Vinum daemon gebruiken. Blok en karakterdevice instellingen voor elk volume. Dit zijn de primaire devices die door Vinum gebruikt worden. De blokdevicenamen zijn de namen van het volume, terwijl de karakterdevicenamen de BSD benaming volgen door er de letter r voor te zetten. De zou de volgende blokdevices bevatten: /dev/vinum/myvol, /dev/vinum/mirror, /dev/vinum/striped, /dev/vinum/raid5 en /dev/vinum/raid10, en de karakterdevices /dev/vinum/rmyvol, /dev/vinum/rmirror, /dev/vinum/rstriped, /dev/vinum/rraid5 en /dev/vinum/rraid10. Hier zit duidelijk een probleem. Er kunnen twee volumes te zijn die r en rr heten, maar er ontstaat een confict als device node /dev/vinum/rr wordt aangemaakt: is het een karakterdevice voor volume r of een blokdevice voor volume rr? Nu heeft Vinum geen oplossing. Het volume dat het eerst gemaakt wordt, krijgt de naam. Een map /dev/vinum/drive met entries voor elke drive. Deze entries zijn eigenlijk symbolic links naar de bijbehorende schijfnodes. Een map /dev/vinum/volume met entries voor elk volume. Het bevat submappen voor elke samenstelling, die weer submappen voor de subdisks bevatten. De mappen /dev/vinum/plex, /dev/vinum/sd en /dev/vinum/rsd, die blokdevicenodes bevatten voor elke samenstelling en blok- en karakterdevicenodes voor elke subdisk daarvan. Dit is een volgend voorbeeld: drive drive1 device /dev/sd1h drive drive2 device /dev/sd2h drive drive3 device /dev/sd3h drive drive4 device /dev/sd4h volume s64 setupstate plex org striped 64k sd length 100m drive drive1 sd length 100m drive drive2 sd length 100m drive drive3 sd length 100m drive drive4 Na verwerking maakt &man.vinum.8; de volgende structuur aan in /dev/vinum: brwx------ 1 root wheel 25, 0x40000001 Apr 13 16:46 Control brwx------ 1 root wheel 25, 0x40000002 Apr 13 16:46 control brwx------ 1 root wheel 25, 0x40000000 Apr 13 16:46 controld drwxr-xr-x 2 root wheel 512 Apr 13 16:46 drive drwxr-xr-x 2 root wheel 512 Apr 13 16:46 plex crwxr-xr-- 1 root wheel 91, 2 Apr 13 16:46 rs64 drwxr-xr-x 2 root wheel 512 Apr 13 16:46 rsd drwxr-xr-x 2 root wheel 512 Apr 13 16:46 rvol brwxr-xr-- 1 root wheel 25, 2 Apr 13 16:46 s64 drwxr-xr-x 2 root wheel 512 Apr 13 16:46 sd drwxr-xr-x 3 root wheel 512 Apr 13 16:46 vol /dev/vinum/drive: total 0 lrwxr-xr-x 1 root wheel 9 Apr 13 16:46 drive1 -> /dev/sd1h lrwxr-xr-x 1 root wheel 9 Apr 13 16:46 drive2 -> /dev/sd2h lrwxr-xr-x 1 root wheel 9 Apr 13 16:46 drive3 -> /dev/sd3h lrwxr-xr-x 1 root wheel 9 Apr 13 16:46 drive4 -> /dev/sd4h /dev/vinum/plex: total 0 brwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0 /dev/vinum/rsd: total 0 crwxr-xr-- 1 root wheel 91, 0x20000002 Apr 13 16:46 s64.p0.s0 crwxr-xr-- 1 root wheel 91, 0x20100002 Apr 13 16:46 s64.p0.s1 crwxr-xr-- 1 root wheel 91, 0x20200002 Apr 13 16:46 s64.p0.s2 crwxr-xr-- 1 root wheel 91, 0x20300002 Apr 13 16:46 s64.p0.s3 /dev/vinum/rvol: total 0 crwxr-xr-- 1 root wheel 91, 2 Apr 13 16:46 s64 /dev/vinum/sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20000002 Apr 13 16:46 s64.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100002 Apr 13 16:46 s64.p0.s1 brwxr-xr-- 1 root wheel 25, 0x20200002 Apr 13 16:46 s64.p0.s2 brwxr-xr-- 1 root wheel 25, 0x20300002 Apr 13 16:46 s64.p0.s3 /dev/vinum/vol: total 1 brwxr-xr-- 1 root wheel 25, 2 Apr 13 16:46 s64 drwxr-xr-x 3 root wheel 512 Apr 13 16:46 s64.plex /dev/vinum/vol/s64.plex: total 1 brwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0 drwxr-xr-x 2 root wheel 512 Apr 13 16:46 s64.p0.sd /dev/vinum/vol/s64.plex/s64.p0.sd: total 0 brwxr-xr-- 1 root wheel 25, 0x20000002 Apr 13 16:46 s64.p0.s0 brwxr-xr-- 1 root wheel 25, 0x20100002 Apr 13 16:46 s64.p0.s1 brwxr-xr-- 1 root wheel 25, 0x20200002 Apr 13 16:46 s64.p0.s2 brwxr-xr-- 1 root wheel 25, 0x20300002 Apr 13 16:46 s64.p0.s3 Hoewel het wordt aangeraden om samenstellingen en subdisks geen naam mee te geven, moeten Vinum drives een naam hebben. Hierdoor kan een drive naar een andere locatie verplaatst worden terwijl hij nog steeds automatisch herkend wordt. Drive namen mogen maximaal 32 tekens lang zijn. Bestandssystemen Maken Volumes lijken voor het systeem identiek aan schijven, met één uitzondering: in tegenstelling tot &unix; schijven partitioneert Vinum het volume niet en het bevat dus geen partitietabel. Daarom was het nodig een paar disk hulpprogramma's te veranderen, met name &man.newfs.8;, dat voorheen probeerde om de laatste letter van een Vinum volumenaam als een partitie te zien. Bijvoorbeeld: een schijf kan een naam hebben als /dev/ad0a of /dev/da2h. Deze namen stellen respectievelijk de eerste partitie (a) op de eerste (0) IDE schijf (ad) en de achtste partitie (h) op de derde (2) SCSI schijf (da) voor. Een Vinum volume kan daarintegen /dev/vinum/concat heten. Een naam die geen enkele relatie met een partitienaam heeft. Normaliter klaagt &man.newfs.8; als het de naam van de schijf niet kan interpreteren. Bijvoorbeeld: &prompt.root; newfs /dev/vinum/concat newfs: /dev/vinum/concat: can't figure out file system partition Het volgende geldt alleen voor versies van &os; 4.X en lager: Om een bestandsysyteem op dit volume te maken moet de van &man.newfs.8; gebruikt worden: &prompt.root; newfs -v /dev/vinum/concat Vinum Configureren De GENERIC kernel bevat geen Vinum. Het is mogelijk een kernel te bouwen waar Vinum in zit, maar dit wordt niet aangeraden. De standaard manier om Vinum te starten is als kernelmodule (kld). Het is zelfs niet nodig om &man.kldload.8; te gebruiken voor Vinum. Als &man.vinum.8; wordt gestart en de module is niet geladen, dan gebeurt dit alsnog automatisch. Opstarten Vinum slaat de configuratie informatie op op de disk slices in ongeveer dezelfde vorm als de configuratiebestanden. Bij het lezen van de configuratie database herkent Vinum een aantal aleutelwoorden die niet zijn toegestaan in configuratiebestanden. Een diskconfiguratie kan bijvoorbeeld de volgende tekst bevatten: volume myvol state up volume bigraid state down plex name myvol.p0 state up org concat vol myvol plex name myvol.p1 state up org concat vol myvol plex name myvol.p2 state init org striped 512b vol myvol plex name bigraid.p0 state initializing org raid5 512b vol bigraid sd name myvol.p0.s0 drive a plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 0b sd name myvol.p0.s1 drive b plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 1048576b sd name myvol.p1.s0 drive c plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 0b sd name myvol.p1.s1 drive d plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 1048576b sd name myvol.p2.s0 drive a plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 0b sd name myvol.p2.s1 drive b plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 524288b sd name myvol.p2.s2 drive c plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1048576b sd name myvol.p2.s3 drive d plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1572864b sd name bigraid.p0.s0 drive a plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 0b sd name bigraid.p0.s1 drive b plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 4194304b sd name bigraid.p0.s2 drive c plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 8388608b sd name bigraid.p0.s3 drive d plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 12582912b sd name bigraid.p0.s4 drive e plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 16777216b Duidelijke verschillen zijn de aanwezigheid van explicite locatie informatie en namen (beide zijn toegestaan, maar worden afgeraden) en informatie over de toestand (die niet beschikbaar is voor de gebruiker). Vinum slaat geen informatie over drives op in de configuratie: het vindt de drives door de geconfigureerde schijven te scannen naar partities met een vinum label. Hierdoor kan Vinum zelfs drives detecteren als ze aan een andere &unix; schijf worden toegekend. Automatisch Opstarten Om Vinum automatisch te laten starten als het systeem geboot wordt, moet de volgende regel in het /etc/rc.conf bestand staan: start_vinum="YES" # set to YES to start vinum Als het /etc/rc.conf bestand niet bestaat, moet het gemaakt worden met de bovengenoemde inhoud. Hierdoor laadt het systeem de Vinum kld tijdens het starten en worden de objecten uit de configuratie ook gestart. Dit gebeurt voordat de bestandssystemen gemount worden. &man.fsck.8; kan dus automatisch draaien en bestandssystemen op Vinum volumes kunnen gemount worden. Als Vinum met vinum start wordt gestart, leest Vinum de configuratie database van één van de Vinum drives. Normaal gesproken bevat iedere drive een identieke kopie van de configuratie database. Het maakt dus niet uit welke drive gelezen wordt. Na een crash moet Vinum echter bepalen welke drive het laatst is bijgewerkt en de configuratie van die drive gebruiken. Als het nodig is wordt de configuratie van de oudere drives daarna bijgewerkt, in volgorde van leeftijd. Het Root Bestandssysteem op Vinum Bij een machine die een volledig gespiegeld bestandssysteem heeft, is het wenselijk ook het root bestandssysteem te spiegelen. Het bouwen van zo'n configuratie is niet zo recht-toe-recht-aan als bij een ander bestandssysteem omdat: Het root bestandssysteem al heel snel beschikbaar moet zijn tijdens het opstartproces, dus de Vinum infrastructuur moet dan al beschikbaar zijn. Het volume met het root bestandssysteem bevat ook de bootstrap en de kernel, die gelezen moeten worden door de eigen systeemprogramma's (bijvoorbeeld de BIOS op PC's), die meestal geconfigureerd kunnen worden om Vinum te gebruiken. In de volgende paragrafen wordt de term root volume gebruikt voor het Vinum volume dat het root bestandssysteem bevat. Het is waarschijnlijk een goed idee om de naam root te gebuiken voor dit volume, maar dit is niet technisch noodzakelijk. Alle commandovoorbeelden in de volgende stukken gaan echter uit van deze naam. Vinum op Tijd Starten voor het root Bestandssysteem Om dit te bereiken, moeten een aantal stappen worden doorlopen: Vinum moet beschikbaar zijn voor de kernel tijdens het opstarten. De methode zoals beschreven in is dus niet geschikt en de start_vinum parameter mag zelfs niet aanwezig zijn als de volgende opzet wordt gebruikt. De eerste optie is Vinum statisch in de kernel te compileren, zodat het altijd beschikbaar is. Maar die is vaak niet wenselijk. Er is nog een mogelijkheid door /boot/loader () de Vinum kernel module te laten laden, voordat de kernel gestart wordt. Dit wordt gedaan door de volgende regel in /boot/loader.conf op te nemen: vinum_load="YES" Vinum moet in een vroeg stadium geïnitialiseerd worden om het volume voor het root bestandssysteem te kunnen leveren. De Vinum kernel module gaat niet uit zichzelf op zoek naar drives die mogelijk een Vinum volume kunnen bevatten totdat de administrator (of een van de opstartscripts) een vinum start commando geeft. - De volgende paragrafen laten de benodigde - stappen zien voor &os; 5.X. De stappen voor + De volgende paragrafen laten de benodigde stappen + zien voor &os; 5.X en hoger. De stappen voor &os; 4.X zijn anders, zoals wordt uitgelegd in . Door de ondestaande regel in /boot/loader.conf te zetten, zoekt Vinum automatisch alle drives af naar Vinum informatie als onderdeel van het starten van de kernel: vinum.autostart="YES" Het is dus niet nodig om de kernel te vertellen waar het root bestandssysteem staat. /boot/loader zoekt de naam voor het root device op in /etc/fstab en geeft deze informatie door aan de kernel. Op het moment dat het root bestandssysteem gemount moet worden, haalt de kernel uit de devicenaam welke driver gebuikt moet worden om dit te vertalen naar het interne device ID (major/minor number). Een Vinum Root Volume Beschikbaar Maken voor Bootstrap Omdat de huidige &os; bootstrap maar 7,5 KB code bevat en al belast is met het lezen van bestanden (zoals /boot/loader) van het UFS bestandssysteem, is het bijna onmogelijk om het ook te leren hoe Vinum informatie gelezen moet worden en deze dan te gebruiken om de elementen van het boot volume samen te stellen. Er zijn daarom een paar trucs nodig om de bootstrap code wijs te maken dat er een standaard "a" partitie aanwezig is met het root bestandssysteem. Om dit mogelijk te maken, moet het root volume aan de volgende eisen voldoen: Het root volume mag niet verdeeld of RAID-5 zijn. Het root volume mag niet meer dan één aaneengeschakelde subdisk per samenstelling bevatten. Het is mogelijk en wenselijk om meer dan één samenstelling te hebben, ieder met een replica van het root bestandssysteem. Het bootstrap proces gebruikt wel maar één van deze replica's om de bootstrap en alle andere bestanden te vinden, tot het moment dat de kernel het root bestandssysteem laadt. Iedere subdisk binnen deze samenstellingen heeft dus zijn eigen "a" partitievoorstelling nodig om dit device bootbaar te maken. Het is niet verplicht dat iedere voorgestelde "a" partitie op dezelfde offset is geplaatst binnen het device, vergeleken met andere devices die samenstellingen van het root volume bevatten. Het is wel een goed idee om op die manier Vinum volumes te maken, zodat de resulterende gespiegelde devices symmetrisch zijn. Dit om verwarring te voorkomen. Om deze "a" partities voor ieder device dat een deel van het root volume bevat te maken, moet het volgende worden gedaan: De locatie (offset vanaf het begin van het device) en de grootte van de subdisk die onderdeel is van het root volume moet als volgt bekeken worden: &prompt.root; vinum l -rv root De Vinum offsets en groottes worden aangegeven in bytes. Ze moeten door 512 worden gedeeld om de bloknummers te krijgen die in disklabel moeten worden gebruikt. Voor elk device dat deelneemt aan het root bestandssysteem moet het onderstaande command uitgevoerd worden: &prompt.root; disklabel -e devname devname moet of de naam van een disk (zoals da0) voor schijven zonder slice-tabel zijn (ook wel: fdisk), of de naam van de slice zijn (zoals ad0s1). Als er al een "a" partitie op het device aanwezig is (waarschijnlijk met een pre-Vinum root bestandssysteem), moet die eerst worden hernoemd, zodat het wel toegankelijk blijft (voor de zekerheid), maar niet langer gebruikt wordt om het systeem van op te starten. Actieve paritities (zoals een root bestandssysteem dat op dit moment gemount is) kan geen andere naam gegeven worden. Dit moet dus gebeuren als het systeem vanaf een Fixit medium opgestart is of in twee stappen, waar (in een gespiegelde situatie) de disk waar niet van geboot is als eerste wordt aangepast. Daarna moet de offset van de Vinum partitie op dit device (als het bestaat) opgeteld worden bij de offset van de root volume subdisk op dit device. De resulterende waarde wordt de "offset" waarde voor de nieuwe "a" partitie. De "size" waarde voor deze partitie kan worden gehaald uit bovenstaande berekening. De "fstype" wordt 4.2BSD. De "fsize", "bsize" en "cpg" waardes moeten zo goed mogelijk worden gekozen om een daadwerkelijk bestandssysteem na te bootsen, hoewel ze vrij onbelangrijk zijn in deze context. Op deze manier wordt een nieuwe "a" partitie gemaakt dat de Vinum partitie op dit device overlapt. Het disklabel staat deze overlap alleen toe als de Vinum partitie gemarkeerd is met het fstype "vinum". Dat is het! Er bestaat nu een nep "a" partitie op ieder device dat een replica van het root volume heeft. Het is aan te bevelen om de resultaten nogmaals te verifieren met iets als: &prompt.root; fsck -n /dev/devnaama Alle bestanden die controle informatie bevatten moeten relatief zijn ten opzichte van het root bestandssysteem in het Vinum volume dat, bij het creëren van een Vinum volume, niet overeen hoeft te komen met het root bestandssysteem dat op dit moment in gebruik is. Dit geldt in het bijzonder voor /etc/fstab en /boot/loader.conf. Bij de volgende herstart zou de bootstrap de juiste controle informatie moeten vinden in het nieuwe, op Vinum gebaseerde, root bestandssysteem en moeten starten. Aan het einde van het kernel initialisatie proces, nadat alle devices aangemeld zijn, geeft het volgende bericht aan dat het opzetten gelukt is: Mounting root from ufs:/dev/vinum/root - Een op Vinum Gebaseerde Root Setup + Een op Vinum Gebaseerde Root Opzet Nadat het Vinum root volume is opgezet, geeft vinum l -rv root een volgend resultaat: ... Subdisk root.p0.s0: Size: 125829120 bytes (120 MB) State: up Plex root.p0 at offset 0 (0 B) Drive disk0 (/dev/da0h) at offset 135680 (132 kB) Subdisk root.p1.s0: Size: 125829120 bytes (120 MB) State: up Plex root.p1 at offset 0 (0 B) Drive disk1 (/dev/da1h) at offset 135680 (132 kB) De interessante waarden zijn 135680 voor de offset (relatief ten opzichte van de partitie /dev/da0h). Dit vertaalt zich naar 265 512-byte disk blocks in disklabel's termen. Zo is de grootte van dit root volume 245760 512-byte blocks. /dev/da1h, dat de tweede replica van dit root volume bevat, is symmetrische opgezet. Disklabel voor deze devices kan er zo uitzien: ... 8 partitions: # size offset fstype [fsize bsize bps/cpg] a: 245760 281 4.2BSD 2048 16384 0 # (Cyl. 0*- 15*) c: 71771688 0 unused 0 0 # (Cyl. 0 - 4467*) h: 71771672 16 vinum # (Cyl. 0*- 4467*) Hieruit blijkt dat de "size" parameter voor de nep "a" partitie overeenkomt met de waarde als hierboven beschreven en dat de "offset" parameter de som is van de offset binnen de Vinum partitie "h" en de offset van deze partitie binnen het device (of de slice). Dit is een normale opzet om problemen te voorkomen zoals in beschreven is. Verder blijkt dat de hele "a" partitie volledig binnen de "h" partitie valt die alle Vinum data voor dit device bevat. In het bovenstaande voorbeeld is de volledige schijf voor Vinum gereserveerd en er is geen restant van de pre-Vinum root partitie, omdat dit een nieuwe schijf is die vanaf het begin af aan bedoeld was als onderdeel van een Vinum configuratie. Problemen Oplossen Als er iets fout gaat moet er een manier zijn om dat te herstellen. De volgende lijst bevat een paar bekende valkuilen en oplossingen. Systeem Bootstrap Laadt, Maar Systeem Start Niet Door Als om wat voor reden dan ook het systeem niet doorgaat met opstarten, kan de bootstrap worden onderbroken door de spatie toets in te drukken tijdens de 10 seconden waarschuwing. Dan kunnen de loader variabelen (zoals vinum.autostart) bekeken worden met behulp van show en aangepast worden met set of unset. Als het enige probleem was dat de Vinum kernel module nog niet in de lijst van modules staat die automatisch geladen wordt, dan moet load vinum voldoende zijn. Als alles in orde is, kan het bootproces doorgestart worden met boot -as. De opties geven de kernel aan om het root bestandssysteem te vragen (), en het boot proces te stoppen in single-user mode (), waarbij het root bestandssysteem als read-only gemount wordt. Op die manier is er geen risico op data inconsistentie tussen de samenstellingen, zelfs niet als er maar één samenstelling van een multi-samenstellingen volume gemount is. Op de prompt, waar om het root bestandssysteem gevraagd wordt, kan ieder device dat een valide root bestandssysteem bevat worden opgegeven. Als /etc/fstab goed is opgezet, is iets als ufs:/dev/vinum/root te zien. Een andere keuze kan ufs:da0d zijn, dat een hypothetische partitie is die het pre-Vinum root bestandssysteem bevat. Als één van de alias "a" partities ingevuld wordt die eigenlijk een referentie naar de subdisk van het Vinum root - device zijn, dan wordt in een gespiegelde setup maar + device zijn, dan wordt in een gespiegelde opzet maar éé kant van het gespiegelde volume gemount. Als dit bestandssysteem later als read-write gemount wordt, moet(en) de andere samenstelling(en) van het root volume verwijderd worden, omdat deze samenstellingen anders inconsistente data bevatten. Alleen Primaire Bootstrap Laadt Als /boot/loader niet start, maar de primaire bootstrap laadt wel (zichtbaar door een enkel minnetje in de linker bovenhoek van het scherm, direct na de start van het boot proces), kan worden geprobeerd het primaire boot proces te onderbreken door op de spatie toets te drukken. Dit zorgt ervoor dat het boot proces stopt bij de tweede fase (zie ook ). Hier kan worden geprobeerd vanaf een andere partitie te starten, bijvoorbeeld van de partitie waar het vorige root bestandssysteem op stond, dat nu van de "a" verplaatst is. - Niets start, Paniek van Bootstrap + Niets Start, Paniek van Bootstrap Dit gebeurt als de bootstrap is vernietigd door de Vinum installatie. Helaas laat Vinum op dit moment slechts 4 KB vrij aan het begin van zijn paritie voordat de Vinum volume identificatie geschreven wordt. De stage 1 en 2 bootstraps en de disklabel informatie hebben ongeveer 8 KB nodig. Dus als de Vinum partitie op offset 0 van de slice van de schijf begint die als bootbaar was bedoeld, zal deze Vinum informatie de bootstrap vernielen. Als bovenstaande situatie is omzeild, bijvoorbeeld door te starten vanaf een Fixit medium, en de bootstrap opnieuw is aangemaakt met disklabel -B zoals beschreven in , overschrijft de nieuwe bootstrap de Vinum identificatie en kan Vinum de Vinum disks niet langer vinden. Hoewel geen Vinum configuratie data of data in de Vinum volumes overschreven wordt en alle data hersteld kan worden door precies dezelfde Vinum configuratie data opnieuw in te vullen, is dit een lastige situatie om te herstellen. Het zou nodig zijn om de complete Vinum parititie tenminste 4 KB te verplaatsen, om te voorkomen dat de Vinum identificatie en de bootstrap met elkaar botsen. Verschillen met &os; 4.X In &os; 4.X missen sommige interne functies die nodig zijn om Vinum automatisch alle disks te laten scannen en de code die het interne ID van de root device achterhaalt is niet slim genoeg om met een naam als /dev/vinum/root om te gaan. Daarom zijn er een paar verschillen ten opzichte van &os; 5.X. Vinum moet expliciet verteld worden welke disks bekeken moeten worden door iets als het volgende in /boot/loader.conf: vinum.drives="/dev/da0 /dev/da1" Het is belangrijk dat alle schijven die Vinum data kunnen bevatten genoemd worden. Het maakt niet uit of er meer schijven genoemd worden en het is ook niet nodig om iedere slice en/of partitie expliciet op te geven, omdat Vinum alle slices en paritities van de genoemde schijven afgaat voor valide Vinum identificatie informatie. Omdat de routines die de naam van het root bestandssysteem verwerken en daar het device ID (major/minor nummers) uit halen alleen maar met de klassieke devicenamen als /dev/ad0s1a overweg kunnen, kunnen ze niets maken van een root volume naam als /dev/vinum/root. Daarom moet Vinum zelf de interne kernel parameter dat het ID van het root volume bevat aanpassen tijdens zijn eigen initialisatie. Dit gaat door de naam van het root volume op te geven in de loader variable vinum.root. Dit ziet er in /boot/loader.conf zo uit: vinum.root="root" Als de kernel initialisatie probeert uit te vinden welk root device gemount moet worden, ziet het dat sommige kernelmodules al parameters gezet hebben. In dat geval en als het device dat het root device claimt hetzelfde major nummer heeft als de driver die gevonden is uit de naam van het root device (Vinum in dit geval), dan gebruikt het het van te voren gedefinieerde device ID, in plaats van het zelf proberen uit te vinden. Zo kan het normale automatische boot process doorgaan met het mounten van het Vinum root volume voor het root bestandssysteem. Maar als boot -a is gegeven om de naam van het root device te vragen, kan het nog steeds niet overweg met een naam die refereert aan een Vinum volume. Als er een devicenaam is gegeven die niet refereert aan een Vinum device, dan zorgt het verschil tussen de major nummers van de van te voren ingestelde root parameter en de driver zoals die uit de gegeven naam wordt afgeleid ervoor dat deze routine zijn eigen afgeleide naam gebruikt. Invoer als ufs:da0d werkt zoals verwacht. Als dit mislukt, is het niet meer mogelijk om nogmaals iets als ufs:vinum/root in te voeren, omdat het niet een tweede keer verwerkt kan worden. De enige uitweg is het systeem opnieuw te starten en opnieuw te beginnen. Op de askroot prompt kan /dev/ altijd achterwege gelaten worden.