diff --git a/nl_NL.ISO8859-1/books/handbook/basics/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/basics/chapter.sgml index 06f9573c02..5cc2daedd5 100644 --- a/nl_NL.ISO8859-1/books/handbook/basics/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/basics/chapter.sgml @@ -1,2884 +1,2882 @@ Chris Shumway Herschreven door Remko Lodder Vertaald door &unix; beginselen Overzicht Het volgende hoofdstuk behandelt de basiscommando's en functionaliteit van het &os; besturingssysteem. Veel van dit materiaal is relevant voor elk &unix; achtig besturingssysteem. Als de lezer reeds bekend is met het materiaal, hoeft dit hoofdstuk niet gelezen te worden. Lezer die nog niet eerder met &os; te maken hebben gehad wordt aangeraden door te lezen. Na het lezen van dit hoofdstuk weet de lezer: Hoe virtuele consoles in &os; gebruikt kunnen worden; Hoe &unix; bestandspermissies werken en hoe bestandsvlaggen in &os; werken; Hoe het standaard &os; bestandssysteem eruit ziet; Hoe een &os; harde schijf is ingedeeld; Hoe bestandssystemen gemount en ge-unmount worden; Wat processen, daemons en signalen zijn; Wat een shell is en hoe de standaard omgevingsvariabelen veranderd kunnen worden; Hoe elementaire tekstverwerkers te gebruiken; Wat apparaten en apparaatmountpunten zijn; Welk binair formaat &os; gebruikt; Hoe handleidingen te gebruiken meer informatie. Virtuele consoles en terminals Virtuele consoles terminals &os; kan op diverse manieren gebruikt worden. Één van deze manieren is het typen van commando's in een tekstterminal. Veel van de flexibiliteit en kracht van een &unix; besturingssysteem is gemakkelijk beschikbaar als je &os; op deze manier gebruikt. Dit onderdeel beschrijft wat terminals en consoles zijn en hoe je deze kan gebruiken in &os;. De console console Als &os; niet is ingesteld om automatisch een grafische omgeving te starten tijdens het opstarten, geeft het systeem een login prompt als het gestart is. Dit gebeurt direct nadat de startscripts klaar zijn. Er wordt iets als het volgende getoond: Additional ABI support:. Local package initialization:. Additional TCP options:. Fri Sep 20 13:01:06 EEST 2002 &os;/i386 (pc3.example.org) (ttyv0) login: De meldingen op het scherm kunnen wellicht iets anders zijn op een systeem, maar het zal iets soortgelijks zijn. De laatste twee regels zijn de regels waar het nu over gaat. De voorlaatste regel toont: &os;/i386 (pc3.example.org) (ttyv0) Deze regel bevat enkele informatie over het systeem dat net gestart is: dit is een &os; console, draaiend op een Intel of soortgelijke processor op de x86 architectuur. Dit betekent i386. Let op: ook al draait &os; niet op een Intel 386 processor, toch is dit een i386. Het is niet het type processor, maar de processor architectuur. De naam van de machine (elke &unix; machine heeft een naam) is pc3.example.org en dit is de console van het systeem, de ttyv0 terminal. De laatste regel is altijd: login: Dit is het deel waar een gebruikersnaam ingevuld moet worden om aan te melden op &os;. Het volgende deel beschrijft hoe dat werkt. Aanmelden op &os; &os; is een multi-user en multi-processing systeem. Dit is de formele beschrijving die meestal gegeven wordt aan een systeem dat gebruikt wordt door meerdere personen die gelijktijdig verschillende programma's draaien op één enkele machine. Elk multi-user systeem heeft een manier nodig om een gebruiker van alle andere gebruikers te kunnen onderscheiden. In &os; (en alle andere &unix; achtige besturingssystemen), wordt dit bereikt door te eisen dat elke gebruiker moet aanmelden op het systeem voordat hij/zij programma's kan draaien. Elke gebruiker heeft een unieke naam (de gebruikersnaam) en een persoonlijke, geheime sleutel (het wachtwoord). &os; vraagt om deze twee gegevens voordat het een gebruiker toegestaat om programma's te draaien. startup scripts Direct nadat &os; is opgestart en de opstartscripts Opstart scripts zijn programma's die automatisch gestart worden tijdens het opstarten. Het hoofddoel van deze programma's is om dingen goed te zetten zodat alle andere programma's ook kunnen draaien, en om services te starten die je geconfigureerd hebt om bruikbare zaken in de achtergrond te doen. afgerond zijn, wordt een prompt getoond dat vraagt om een geldige aanmeldnaam op te geven. login: In dit voorbeeld wordt aangenomen de gebruikersnaam john is. Als na deze prompt john wordt getype en op Enter wordt gedrukt, verschijnt hierna een prompt om het wachtwoord in te voeren: login: john Password: Nu kan john's wachtwoord ingevoerd worden en op Enter gedrukt worden. Het wachtwoord wordt niet getoond! Daarover hoeft geen zorg te bestaan. Het is voldoende om te zeggen dat dit om veiligheidsredenen gedaan wordt. Als het juiste wachtwoord is ingegeven, is er aangemeld bij op &os; en in het systeem klaar om alle beschikbare commando's uit te voeren. Na het aanmelden is de MOTD of het bericht van de dag zichtbaar, gevolgd door een commandoprompt (een #, $ of een % karakter). Dit geeft aan dat er succesvol is aangemeld op &os;. Meerdere consoles &unix; programma's draaien in één console is prima, maar &os; kan veel programma's tegelijk draaien. Om maar één console te hebben waar commando's ingetypt kunnen worden zou zonde zijn van een besturingssysteem als &os; waar meerdere programma's tegelijkertijd op kunnen draaien. Hier kunnen virtuele consoles van pas komen. &os; kan ingesteld worden om verschillende virtuele consoles te tonen. Met toetscombinaties kan van de ene console naar de gewisseld worden. Elke console heeft zijn eigen uitvoerkanaal, en &os; zorgt ervoor dat alle toetsenbordinvoer en monitoruitvoer goed wordt gezet als er van de ene console naar de volgende wordt gewisseld. In &os; kunnen speciale toetscombinaties gebruikt worden om te wisselen naar een ander virtueel console. Een redelijk technische en accurate beschrijving van alle details over de &os; console en toetsenborddrivers staan in de hulppagina's van &man.syscons.4;, &man.atkbd.4;, &man.vidcontrol.1; en &man.kbdcontrol.1;. Hier wordt niet verder op ingegaan, maar de geïnteresseerde lezer kan altijd de hulppagina's raadplegen voor meer details en een grondige uitleg over hoe alles werkt. In &os; kan AltF1, AltF2 tot en met AltF8 gebruikt worden om te wisselen naar een ander virtueel console. Als wordt gewisseld van de ene naar de andere console zorgt &os; dat de uitvoer bewaard blijft. Het resultaat is een illusie van het hebben van meerdere schermen en toetsenboarden die gebruikt kunnen worden om commando's in te voeren om &os; te laten draaien. De programma's die in de ene virtuele console draaien, stoppen niet als de console niet zichtbaar is. Ze blijven doordraaien als naar een andere virtuele console wordt gewisseld. Het bestand <filename>/etc/ttys</filename> De standaardinstelling van &os; start op met acht virtuele consoles. Dit is echter geen vaste waarde en een installatie kan eenvoudig aangepast worden, zodat het systeem gestart wordt met meer of minder virtuele consoles. De hoeveelheid en instellingen van de virtuele consoles worden ingesteld in /etc/ttys. /etc/ttys kan gebruikt worden om virtuele consoles in te stellen. Elke niet-commentaar regel in dit bestand (regels die niet beginnen met een # karakter) bevat instellingen voor een terminal of virtuele console. De standaardversie van dit bestand die meegeleverd wordt met &os; stelt negen virtuele consoles in en activeert er acht. Dit zijn de regels die beginnen met ttyv: # naam getty type status commentaar # ttyv0 "/usr/libexec/getty Pc" cons25 on secure # Virtual terminals ttyv1 "/usr/libexec/getty Pc" cons25 on secure ttyv2 "/usr/libexec/getty Pc" cons25 on secure ttyv3 "/usr/libexec/getty Pc" cons25 on secure ttyv4 "/usr/libexec/getty Pc" cons25 on secure ttyv5 "/usr/libexec/getty Pc" cons25 on secure ttyv6 "/usr/libexec/getty Pc" cons25 on secure ttyv7 "/usr/libexec/getty Pc" cons25 on secure ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure Een uitgebreide beschrijving van elke kolom in dit bestand en alle mogelijke opties voor virtuele consoles staan in de &man.ttys.5; hulppagina gebruiken. Single-user console In staat een gedetailleerde beschrijving van de single-user modus. Het is belanrijk te melden dat er in single-user modus maar één console is. Er zijn geen virtuele consoles beschikbaar. De instellingen van de single-user modus console staan ook in /etc/ttys . De regel begint met console: # name getty type status commentaar # # Als een console gemarkeerd is als "insecure", zal het init script om het root-wachtwoord # vragen wanneer het in single-user mode komt. console none unknown off secure Zoals het commentaar boven de console regel aangeeft, kan in deze regel het woord secure gewijzigd worden in insecure. In dat geval vraagt &os; bij het opstarten in single-user modus nog steeds om een root-wachtwoord. Pas op als dit wordt veranderd in insecure. Als het wachtwoord van de gebruiker root zoek is, wordt het opstarten in single-user modus lastig. Het is nog steeds mogelijk, maar het kan vrij moeilijk zijn voor iemand die &os; niet zo goed kent met betrekking tot het opstarten en de programma's die daarbij gebruikt worden. Rechten UNIX &os;, direct afgeleid van BSD &unix;, is gebaseerd op verschillende belangrijke &unix; concepten. Het meest bekende is dat &os; een multi-user systeem is. Het systeem kan meerdere gebruikers behandelen die tegelijkertijd totaal verschillende dingen doen. Het systeem is verantwoordelijk voor het netjes delen en beheren voor aanvragen voor hardware, randapparatuur, geheugen en cpu tijd tussen elke gebruiker. Omdat het systeem in staat is om meerdere gebruikers te ondersteunen, heeft alles wat door het systeem beheerd wordt een set van rechten die aangeeft wie mag lezen, schrijven en de bron mag uitvoeren. Deze rechten zijn opgeslagen in drie octetten, die weer in drie stukjes onderverdeeld zijn: één voor de eigenaar van het bestand, één voor de groep waar het bestand toe behoort en één voor de overigen. De numerieke weergave werkt als volgt: Rechten Bestandsrechten Waarde Recht Maprecht 0 Niet lezen, niet schrijven, niet uitvoeren --- 1 Niet lezen, niet schrijven, uitvoeren --x 2 Niet lezen, schrijven, niet uitvoeren -w- 3 Niet lezen, schrijven, uitvoeren -wx 4 Lezen, niet schrijven, niet uitvoeren r-- 5 Lezen, niet schrijven, uitvoeren r-x 6 Lezen, schrijven, niet uitvoeren rw- 7 Lezen, schrijven, uitvoeren rwx ls mappen De optie kan gebruikt worden met &man.ls.1; om een lange lijst met de inhoud van een map te zien die een kolom heeft met informatie over bestandsrechten voor de eigenaar, groep en de rest. ls -l in een willekeurige map kan het volgende laten zien: &prompt.user; ls -l total 530 -rw-r--r-- 1 root wheel 512 Sep 5 12:31 myfile -rw-r--r-- 1 root wheel 512 Sep 5 12:31 otherfile -rw-r--r-- 1 root wheel 7680 Sep 5 12:31 email.txt ... Zo ziet de eerste kolom van ls -l eruit: -rw-r--r-- Het eerste (meest linkse) karakter geeft aan of dit een reguliere bestand is, een map, een speciaal karakter component(!), een socket of een andere pseudo-file component(!). In dit geval betekent de - dat het een regulier bestand is. De volgende drie karakters, rw- in dit voorbeeld, geven de rechten voor de eigenaar van het bestand. De drie karakters r--erna geven de rechten van voor de groep van het bestand. De overige drie karakters r-- tonen de rechten voor de rest. Een streepje betekent dat de rechten uitgeschakeld zijn. In het geval van dit bestand zijn de rechten zo ingesteld dat de eigenaar kan lezen en schrijven naar het bestand, de groep het bestand kan lezen, en de rest kan het bestand alleen lezen. Volgens de tabel hierboven worden de rechten 644, waar de cijfers de drie stukjes van de rechten aangeven. Dit is allemaal leuk en aardig, maar hoe controleert het systeem dan rechten voor apparaten? &os; behandelt de meeste hardware apparaten als bestanden die door programma's kunnen worden geopend en gelezen, en waar data naar toe kan worden geschreven, net zoals elk ander bestand. Deze speciale apparaat bestanden worden bewaard in de map /dev. Mappen worden ook behandeld als bestanden. Ze hebben lees, schrijf en uitvoerbare rechten. De uitvoerbare vlag voor een map heeft een klein verschil qua betekenis dan die voor gewone bestanden. Als een map als uitvoerbaar gemarkeerd is, betekent het dat erin gekeken mag worden. Het is dus mogelijk om te wisselen naar de map met cd (wissel directory). Dit betekent ook dat in de map bestanden benaderen benaderd kunnen worden waarvan de naam bekend is. Dit is natuurlijk afhankelijk van de rechten op het bestand zelf. In het bijzonder, om een lijst van de map te kunnen maken, moet een gebruiker leesrechten op de map hebben. Om een bestand te verwijderen zijn de naam van het bestanden en schrijf en uitvoerrechten op de map nodig waarin het bestand zich bevindt. Er zijn meer rechtenvlaggen, maar die worden in gebruikt in speciale gevallen, zoals setuid binaries en sticky mappen. Meer informatie over bestandsrechten en die die aangepast kunnen worden staat in &man.chmod.1;. Tom Rhodes Bijgedragen door Symbolische rechten rechten symbolisch Symbolische rechten, soms ook wel symbolische expressies, gebruiken karakters in plaats van octale getallen om rechten aan bestanden en en mappen te geven. Symbolische expressies gebruiken de volgende opbouw (wie) (actie) (permissies), waar de volgende waardes beschikbaar zijn: Optie Letter Vertegenwoordigt (wie) u Gebruiker (wie) g Groepseigenaar (wie) o Overigen (wie) a Iedereen (wereld) (actie) + Rechten toevoegen (actie) - Rechten verwijderen (actie) = Stel deze rechten in (recht) r Lezen (recht) w Schrijven (recht) x Uitvoeren (recht) t Sticky bit (recht) s Verander UID of GID Deze waardes worden gebruikt met &man.chmod.1;, net zoals eerder, alleen nu met letters. Het volgende commando kan gebruikt worden om de overige gebruikers toegang tot BESTAND te ontzeggen: &prompt.user; chmod go= BESTAND Er kan een door komma's gescheiden lijst geleverd worden als meer dan één wijziging aan een bestand moet worden uitgevoerd. Het volgende commando past de rechten voor de groep en de wereld aan door de schrijfrechten te ontnemen om daarna iedereen uitvoerrechten te geven: &prompt.user; chmod go-w,a+x BESTAND Tom Rhodes Geschreven door &os; bestandsvlaggen Naast de bestandsrechten die hiervoor zijn besproken, biedt &os; ondersteuning voor bestandsvlaggen. Deze vlaggen bieden een aanvullend beveiligingsniveau en controle over bestanden, maar niet over mappen. Bestandsvlaggen voegen een extra niveau van controle over bestanden, waardoor verzekerd kan worden dat in sommige gevallen zelfs root een bestand niet kan verwijderen. Bestandsvlaggen worden gewijzigd met het hulpprogramma &man.chflags.1;, dat een eenvoudige interface heeft. Om bijvoorbeeld de systeemvlag niet verwijderdbaar in te stellen op het bestand file1: - &prompt.root; chflags sunlink - file1 + &prompt.root; chflags sunlink file1 Om de vlag niet verwijderbaar weer te verwijderen kan het voorgaande command met no voor worden uitgevoerd: - &prompt.root; chflags nosunlink - file1 + &prompt.root; chflags nosunlink file1 Om de vlaggen op een bestand te bekijken, kan &man.ls.1; met de vlaggen gebruikt worden: &prompt.root; ls -lo file1 De uitvoer hoort er ongeveer als volgt uit te zien: -rw-r--r-- 1 trhodes trhodes sunlnk 0 Mar 1 05:54 file1 Een aantal vlaggen kan alleen ingesteld of verwijderd worden door de gebruiker root. In andere gevallen kan de eigenaar van een bestand vlaggen instellen. Meer informatie voor beheerders staat in &man.chflags.1; en &man.chflags.2;. Mappenstructuur mappenstructuur De &os; mappenstructuur is erg belangrijk om het systeem goed te leren kennen. Het belangrijkste concept om greep op te krijgen is die van de rootmap, /. Deze map is de eerste die gemount wordt tijdens het opstarten en bevat het basissysteem dat nodig is om het besturingssysteem gereed te maken voor multi-user taken. De rootmap bevat ook mountpunten voor elk ander bestandssysteem dat misschien gemountd wordt. Een mountpunt is een map waar extra bestandssystemen aan gemount kunnen worden. Standaard mountpunten bevatten /usr, /var, /tmp, /mnt en /cdrom. Naar deze mappen wordt meestal verwezen in /etc/fstab, een tabel met bestandssystemen en mountpunten ter referentie voor het systeem. De meeste bestandssystemen in /etc/fstab worden automatisch gemount tijdens het opstarten door het script &man.rc.8;, behalve als ze de optie hebben. Details staan beschreven in . Een complete beschrijving over het bestandssysteem staat in &man.hier.7;. Hier wordt volstaan met een overzicht van de voorkomende mappen. Map Omschrijving / Rootmap van het bestandssysteem. /bin/ Gebruikersapplicaties, belangrijk voor zowel single user als multi-user omgevingen. /boot/ Programma's en instellingenbestanden die gebruikt worden tijdens het opstarten van het besturingssysteem. /boot/defaults/ Bestanden met standaardinstellingen voor opstarten;, zie &man.loader.conf.5;. /dev/ Apparaatnodes;, zie &man.intro.4;. /etc/ Bestanden met systeeminstellingen en scripts. /etc/defaults/ Bestanden met standaard systeeminstellingen;, zie &man.rc.8;. /etc/mail/ Instellingenbestanden voor mail transport programma's zoals &man.sendmail.8;. /etc/namedb/ Instellingenbestanden voor named, zie &man.named.8;. /etc/periodic/ Scripts die dagelijks, wekelijks en maandelijks via &man.cron.8; worden uitgevoerd, zie &man.periodic.8;. /etc/ppp/ Instellingenbestanden voor ppp, zie &man.ppp.8;. /mnt/ Lege map, veel gebruikt door systeembeheerders als tijdelijk mountpunt voor opslagruimtes. /proc/ Process bestandssysteem;, zie &man.procfs.5; en &man.mount.procfs.8;. /rescue/ Statisch gelinkte programma's voor noodherstel, zie &man.rescue.8;. /root/ Thuismap van de gebruiker root. /sbin/ Systeemprogramma's en administratieprogramma's belangrijk voor zowel single-user en multi-user omgevingen. /stand/ Programma's die gebruikt worden in een standalone omgeving. /tmp/ Tijdelijke bestanden, meestal een op &man.mfs.8; geheugen gebaseerd bestandssysteem (de inhoud van /tmp wordt meestal NIET bewaard tijdens het rebooten). /usr/ Hier bevindt zich het leeuwendeel van alle hulpprogramma's en gewone programma's. /usr/bin/ Standaard programma's, programmeertools. /usr/include/ Standaard C invoegbestanden. /usr/lib/ Functiebibliotheken. /usr/libdata/ Diverse databestanden voor hulpprogramma's. /usr/libexec/ Systeemdaemons en systeemhulpprogramma's (uitgevoerd door andere programma's). /usr/local/ Lokale programma's, bibliotheken, etc. Wordt ook gebruikt als standaard locatie voor de &os; ports. Binnen /usr/local, wordt de algemene layout bepaald door &man.hier.7;, dat ook voor /usr wordt gebruikt. Uitzonderingen is de map man, die direct onder /usr/local ligt in plaats van onder /usr/local/share, en de documentatie voor ports is te vinden in share/doc/port. /usr/obj/ Architectuur afhankelijke doelstructuur voor resultaten van de bouw van /usr/src. /usr/ports De &os; Portscollectie (optioneel). /usr/sbin/ Systeemdaemons en systeemhulpprogramma's (uitgevoerd door gebruikers). /usr/share/ Architectuur onafhankelijke bestanden. /usr/src/ BSD en/of lokale broncodebestanden. /usr/X11R6/ Uitvoerbare bestanden en bibliotheken, etc, voor de X11R6 distributie (optioneel). /var/ Multifunctionele logboek-, tijdelijke, transparante en spool bestanden. /var/log/ Diverse logboekbestanden van het systeem. /var/mail/ Postbusbestanden van gebruikers. /var/spool/ Diverse printer- en mailsysteemspoolingmappen. /var/tmp/ Tijdelijke bestanden die bewaard worden bij een herstart van het systeem. /var/yp NIS maps. Organisatie van schijven De kleinste vorm van organisatie die &os; gebruikt om bestanden te vinden is de bestandsnaam. Bestandsnamen zijn hoofdlettergevoelig, wat betekent dat readme.txt en README.TXT twee verschillende bestanden zijn. &os; gebruikt de extensie niet (.txt) van een bestand om te bepalen of het bestand een programma, een document of een vorm van data is. Bestanden worden bewaard in mappen. Een map kan leeg zijn of of honderden bestanden bevatten. Een map kan ook andere mappen bevatten, wat het mogelijk maakt om een hiërarchie van mappen te maken. Dit maakt het veel makkelijker om data te organiseren. Bestanden en mappen worden aangegeven door het bestand of de map aan te geven, gevolgd door een voorwaardse slash, /, gevolgd door andere mapnamen die nodig zijn. Als map foo de map bar bevat, die op zijn beurt het bestand readme.txt bevat, dan wordt de volledige naam of pad naar het bestand foo/bar/readme.txt. Mappen en bestanden worden bewaard op een bestandssysteem. Elk bestandssysteem bevat precies één map op het hoogste niveau die de rootmap van het bestandssysteem heet. Deze rootmap kan op zijn beurt andere mappen bevatten. Tot zover is dit waarschijnlijk hetzelfde als voor elk ander besturingssysteem. Er zijn een paar verschillen. &ms-dos; gebruikt bijvoorbeeld een \ om bestanden en mappen te scheiden, terwijl &macos; gebruik maakt van :. &os; gebruikt geen schijfletters, of andere schijfnamennamen in het pad. &os; gebruikt geen c:/foo/bar/readme.txt. Eén bestandssysteem wordt aangewezen als root bestandssysteem, waar naar wordt verwezen met /. Elk ander bestandssysteem wordt daarna gemount onder het root bestandssysteem. Hoeveel schijven er ook aan een &os; systeem hangen, het lijkt als elke map zich op dezelfde schijf bevindt. Stel er zijn drie bestandssystemen met de namen A,B en C. Elk bestandssysteem heeft één root map die twee andere mappen bevat, A1 en A2 (zo ook voor de andere twee: B1, B2, C1 en C2). A wordt het root besturingsysteem. Met ls, dat de inhoud van de map kan tonen, zijn de twee mappen A1 en A2 te zien. De mappenstructuur ziet er als volgend uit: / | +--- A1 | `--- A2 Een bestandssysteem moet gemount worden in een map op een ander bestandssysteem. Als nu bestandssysteem B wordt gemount onder de map A1 vervangt B A1 en zien de mappingen in B er als volgt uit: / | +--- A1 | | | +--- B1 | | | `--- B2 | `--- A2 Elk bestand dat in de mappen B1 en B2 directories aanwezig is, kan benaderd worden met het pad /A1/B1 of /A1/B2. Elk bestand dat in /A1 stond is tijdelijk verborgen en komt tevoorschijn als Bis ge-unmountvan A. Als B gemount is onder A2 ziet de diagram er als volgt uit: / | +--- A1 | `--- A2 | +--- B1 | `--- B2 en de paden zouden dan respectievelijk /A2/B1 en /A2/B2 zijn. Bestandssystemen kunnen op elkaar worden gemount. Doorgaand op het vorige voorbeeld kan het bestandssysteem C gemount worden bovenop de map B1 in het bestandssysteem B. Dit resulteert in: / | +--- A1 | `--- A2 | +--- B1 | | | +--- C1 | | | `--- C2 | `--- B2 Of C kan direct onder het bestandssysteem A gemount worden, onder de map A1: / | +--- A1 | | | +--- C1 | | | `--- C2 | `--- A2 | +--- B1 | `--- B2 Hoewel het niet gelijk is, lijkt het op het gebruik van join in &ms-dos;. Beginnende gebruikers hoeven zich hier gewoonlijk niet mee bezig te houden. Normaal gesproken worden bestandssystemen gemaakt als &os; wordt geïnstalleerd en er wordt besloten waar ze gemount worden. Meestal worden ze ook niet gewijzigd tot de een nieuwe schijf aan een systeem wordt toegevoegd. Het is mogelijk om één groot root bestandssysteem te hebben en geen andere. Deze benadering heeft voordelen en nadelen. Voordelen van meerdere bestandssystemen Verschillende bestandssystemen kunnen verschillende mount opties hebben. Met een goede voorbereiding kan het root bestandssysteem bijvoorbeeld als alleen-lezen gemount worden, waardoor het onmogelijk wordt om per ongeluk kritische bestanden te verwijderen of te bewerken. Het scheiden van andere bestandssystemen die beschrijfbaar zijn door gebruikers, zoals /home van andere bestandssystemen stelt de beheerder in staat om ze nosuid te mounten. Deze optie voorkomt dat suid/guid bits op uitvoerbare bestanden effectief gebruikt kunnen worden, waardoor de beveiliging mogelijk beter wordt. &os; optimaliseert automatisch de layout van bestanden op een bestandssysteem, afhankelijk van hoe het bestandssysteem wordt gebruikt. Een bestandsysteem dat veel bestanden bevat waar regelmatig naar geschreven wordt, wordt anders geoptimaliseerd dan een bestandssysteem dat minder maar grotere bestanden bevat. Door het gebruik van één groot bestandssysteem werkt de optimalisatie niet. &os;'s bestandssystemen zijn erg robuust als er bijvoorbeeld een stroomstoring is, hoewel een stroomstoring op een kritiek moment nog steeds kan leiden tot schade aan de structuur van het bestandssysteem. Door het verdelen van data over meerdere bestandssystemen, is de kans groter dat het systeem nog opstart, wat terugzetten van een backup makkelijker maakt als dat nodig is. Voordeel van één bestandssysteem Bestandssystemen hebben een vaste grootte. Als bij de installatie van &os; een bestandssysteem wordt gemaakt, is het later mogelijk dat de partitie groter gemaakt moet worden. Dit is niet zo makkelijk zonder een backup, het opnieuw maken van het bestandssysteem met gewijzigde grootte en het terugzetten van de gebackupte data. &os; 4.4 en latere versies hebben &man.growfs.8;, waarmee de grootte van het bestandssysteem is aan te passen terwijl het draait. Bestandssystemen worden opgeslagen in partities. Dit betekent niet hetzelfde als de algemene betekenis van de term partitie (bijvoorbeeld, &ms-dos; partitie), vanwege &os;'s &unix; achtergrond. Elke partitie wordt geïdentificeerd door een letter van a tot en met h. Elke partitie kan slechts één bestandssysteem hebben, wat betekent dat bestandssystem vaak omschreven worden aan de hand van hun mountpunt in de bestandssysteem hiërarchie of de letter van de partitie waar ze in opgeslagen zijn. &os; gebruikt ook schijfruimte voor wisselbestanden. Wisselbestanden geven &os; virtueel geheugen. Dit geeft de computer de mogelijkheid om net te doen alsof er veel meer geheugen in de machine aanwezig is dan werkelijk het geval is. Als &os; geen geheugen meer heeft, verplaatst het data die op dat moment niet gebruikt wordt naar de wisselbestanden en plaatst het terug als het wel nodig is (en zet iets anders in ruil daarvoor terug. Aan sommige partities zijn bepaalde conventies gekoppeld. Partitie Conventie a Bevat meestal het root bestandssysteem b Bevat meestal de swapruimte c Heeft meestal dezelfde grootte als de hele harde schijf. Dit geeft hulpprogramma's de mogelijkheid om op een complete schijf te werken (voor bijvoorbeeld een bad block scanner) om te werken op de c partitie. Meest wordt hierop dan ook geen bestandssysteem gecreeërd. d Partitie d had vroeger een speciale betekenis, maar die is verdwenen. Tegenwoordig werken sommige hulpprogramma's raar als ze verteld worden dat ze moeten werken op partitie d, dus sysinstall maakt normaal gesproken partitie d niet. Elke partitie die een bestandssysteem bevat is opgeslagen in wat &os; noemt een slice. Slice is &os;'s term voor wat meeste mensen partities noemen. Dit komt wederom door &os;'s &unix; achtergrond. Slices zijn genummerd van 1 tot en met 4. slices partities gevaarlijk toegewijd Slicenummers volgen de apparaatnamen, voorafgegaan door een s die begint bij 1. Dus da0s1 is de eerste slice op de eerste SCSI drive. Er kunnen maximaal vier fysieke slices op een schijf staan, maar er kunnen logische slices in fysieke slices van het correcte type staan. Deze uitgebreide slices zijn genummerd vanaf 5. Dus ad0s5 is de eerste uitgebreide slice op de eerste IDE schijf. Deze apparaten worden gebruikt door bestandssystemen waarvan verwacht wordt dat ze een slice in beslag nemen. Slices, gevaarlijk toegewijde (dangerously dedicated) fysieke drivers en andere drives bevatten partities, die worden weergegeven door letters vanaf a tot h. Deze letter wordt achter de apparaatnaam geplakt. Dus da0a is de a partitie op de eerste da drive, die gevaarlijk toegewijd is. ad1s3e is de vijfde partitie op de derde slice van de tweede IDE schijf. Elke schijf op het systeem wordt geïdentificeerd. Een schijfnaam start met een code die het type aangeeft en dan een nummer dat aangeeft welke schijf het is. In tegenstelling tot bij slices, start het nummeren van schijven bij 0. Standaardcodes staan beschreven in . Bij een referentie aan een partitie verwacht &os; ook dat aan de slice en schijf refereert die de partitie bevat wordt gerefereerd en als naar een slice wordt verwezen moet ook de schijfnaam genoemd worden. Dit kan door de schijfnaam, s, het slice nummer en de partitieletter aan te geven. Voorbeelden staan in . In staat een conceptmodel van een schijflayout die een en ander verduidelijkt. Voordat &os; geïnstalleerd kan worden moeten eerst de schijfslices gemaakt worden en daarna moeten de partities op de slices voor &os; gemaakt worden. Daarna wordt op elke partitie het bestandssysteem (of wisselbestand) gemaakt en als laatste wordt besloten waar het filesysteem gemount wordt. Schijf apparaatcodes Code Betekenis ad ATAPI (IDE) schijf da SCSI directe toegang schijf acd ATAPI (IDE) CDROM cd SCSI CDROM fd Floppydisk
Voorbeeld schijf-, slice- en partitienamen Name Betekenis ad0s1a De eerste partitie (a) op de eerste slice (s1) op de eerste IDE schijf (ad0). da1s2e De vijfde partitie (e) op de tweede slice (s1) op de tweede SCSI schijf (da1). Conceptmodel van een schijf Het onderstaande diagram geeft aan hoe &os; de eerste IDE schijf in het systeem ziet. Stel dat de schijf 4 GB groot is en dat deze twee 2 GB slices (&ms-dos; partities) bevat. De eerste slice bevat een &ms-dos; schijf, C: en de tweede slice bevat een &os; installatie. Deze &os; installatie heeft drie partities en een partitie met een wisselbestand. De drie partities hebben elk een bestandssysteem. Partitie a wordt gebruikt voor het root bestandssysteem, e voor de map /var en f voor de map /usr. .-----------------. --. | | | | DOS / Windows | | : : > Eerste slice, ad0s1 : : | | | | :=================: ==: --. | | | Partitie a, gemount als / | | | > gerefereerd als ad0s2a | | | | | :-----------------: ==: | | | | Partitie b, gebruikt als swap | | | > gerefereerd als ad0s2b | | | | | :-----------------: ==: | Partitie c, geen | | | Partition e, gebruikt als /var > bestandssysteem, bevat | | > gerefereerd als ad0s2e | alle &os; slices, | | | | ad0s2c :-----------------: ==: | | | | | : : | Partitie f, gebruikt als /usr | : : > gerefereerd als ad0s2f | : : | | | | | | | | --' | `-----------------' --'
Mounten en unmounten van bestandssystemen Het bestandssysteem wordt het best weergegeven als een boom, met de stam als /. /dev, /usr en de andere map in root zijn takken die weer hun eigen takken kunnen hebben, zoals /usr/local, etc. root bestandssysteem Er zijn verschillende redenen om sommige van deze mappen op aparte bestandssystemen te plaatsen. /var bevat de mappen log/, spool/ en verschillende types tijdelijke bestanden en kan volraken. Het laten vollopen van het root bestandssysteem is geen goed idee, dus het splitsen van /var van /is vaak de favoriet. Een andere vaak voorkomende reden om bepaalde mapbomen op aparte bestandssystemen te plaatsen, is om ze op verschillende fysieke schrijven te zetten of gescheiden virtuele schijven zoals gemounte Netwerk bestandssystemen of cd-rom drives. Het bestand <filename>fstab</filename> bestandssystemen gemount met fstab Tijdens het opstartproces, worden bestandssystemen die vermeld staan in /etc/fstab automatisch gemount (tenzij ze vermeld staan met ). /etc/fstab bevat een lijst van regels die aan het volgende formaat voldoen: apparaat /mountpunt fstype opties dumpfreq passno apparaat Een apparaatnaam (die moet bestaan) zoals uitgelegd in . mountpunt Een map (die moet bestaan) waarop het bestandssysteem gemount moet worden. fstype Het bestandssysteem type dat aan &man.mount.8; gegeven wordt. Het standaard &os; bestandssysteem is ufs. opties Dit is of voor lezen en schrijven bestandssytemen, of voor alleen lezen, gevolgd door elke andere optie die mogelijk nodig is. Een standaard optie is voor bestandssystemen die niet automatisch gemount worden tijdens het opstarten. Andere opties staan in &man.mount.8;. dumpfreq Dit wordt gebruikt door &man.dump.8; om te bepalen welke bestandssystemen gedumpt moeten worden. Als het veld niet is ingevuld, wordt aangenomen dat er een nul staat. passno Dit bepaalt in welke volgorde bestandssystemen gecontroleerd moeten worden. Bestandssystemen die overgeslagen moeten worden moeten hun passno waarde op nul hebben staan. Voor het root bestandssysteem (dat voor alle andere gecontroleerd moet worden) moet passno op één staan en passno waarden voor andere bestandssystemen moeten een waarde hebben groter dan één. Als bestandssysteem dezelfde passno waarde hebben probeert &man.fsck.8; deze bestandssystemen tegelijkertijd te controleren. In &man.fstab.5; staat meer informatie over de opmaak van /etc/fstab en de mogelijke opties. Het commando <command>mount</command> bestandssystemen mounten &man.mount.8; wordt gebruikt om bestandsystemen te mounten. De meest eenvoudige vorm is: &prompt.root; mount apparaat mountpunt Alle opties voor het commando staat in &man.mount.8;, maar de meest voorkomende zijn: Mountopties Mount alle bestandssystemen die in /etc/fstab staan, behalve die gemarkeerd staan als noauto, uitgesloten zijn door de optie of die al gemount zijn. Doe alles behalve het echt aanroepen van de mount systeemopdracht. Deze optie is handig in samen met de optie om te bepalen wat &man.mount.8; eigenlijk probeert te doen. Forceert het mounten van een niet schoon bestandssysteem (gevaarlijk) of forceert het innemen van schrijftoegang als de mountstatus van een bestandssysteem wijzigt van lezen en schrijven naar alleen lezen. Mount het bestandssysteem alleen lezen. Dit is identiek aan de optie ( voor &os; versies ouder dan 5.2) voor de optie . fstype Mount het opgegeven bestandssysteem als het opgegeven type bestandssysteem of mount alleen bestandssystemen van het aangegeven type als ook de optie is opgegeven. ufs is het standaard bestandssysteem. Werk mountopties van het bestandssysteem bij. Geef uitgebreide informatie (verbose). Mount het bestandssysteem lezen en schrijven. De optie accepteert een door komma's gescheiden lijst van opties, waaronder de volgende: nodev Intrepeteer geen speciale apparaten op het bestandssysteem. Dit is een nuttige veiligheidsoptie. noexec Sta geen uitvoerbare bestanden toe op dit bestandssysteem. Ook dit is een nuttige veiligheidsoptie. nosuid Intrepeteer geen setuid of setgid opties op het bestandssysteem. Ook dit is een nuttige veiligheidsoptie. Het commando <command>umount</command> bestandssystemen unmounten &man.umount.8; heeft een mountpunt, een apparaatnaam, of als parameter. Alle vormen kunnen de optie hebben om een bestandsysteem te forceren te unmounten en de optie voor uitgebreide informatie. De optie is meestal geen goed idee. Forceren dat een bestandssysteem geunmount wordt kan de computer laten crashen of data op het bestandssysteem beschadigen. De opties en worden gebruikt om alle bestandssystemen te unmounten, mogelijk nader gespecificeerd door de optie met daarachter op welke typen bestandssystemen het betrekking heeft. Voor de optie geldt dat deze niet probeert het root bestandssysteem te unmounten. Processen &os; is een multi-tasking besturingssysteem. Dit betekent dat het lijkt alsof er meer dan één proces tegelijkertijd draait. Elk programma dat draait wordt een proces genoemd. Elk commando dat wordt uitgevoerd start op zijn minst één nieuw proces en er zijn systeemprocessen die continu draaien om het systeem functioneel te houden. Elk proces wordt geïdentificeerd door een nummer dat process ID of PID heet, en net zoals bij bestanden heeft elk proces één eigenaar en groep. De eigenaars- en groepsinformatie wordt gebruikt om te bepalen welke bestanden en apparaten het proces mag openen, waarbij gebruik wordt gemaakt van de bestandsrechten die eerder zijn behandeld. Veel processen hebben ook een ouderproces (parent proces). Het ouderproces is het proces het ze door gestart is. Als commando's in een shell worden ingevoerd, start de shell een proces en elk commando dat draait is ook een proces. De uitzondering hierop is het speciale proces &man.init.8;. init is altijd het eerste proces, dus het PID is altijd 1. init wordt automatisch gestart door de kernel als &os; opstart. Twee commando's die erg handig zijn om te zien welke processen er draaien zijn &man.ps.1; en &man.top.1;. ps wordt gebruikt om een statische lijst op te vragen van de processen die op het moment van uitvoeren draaien en kan hun PID, geheugengebruik, de startende commandoregel, enzovoort, tonen. top geeft alle draaiende processen weer en werkt de status elke paar seconden bij zodat interactief wordt weergegeven wat een computer aan het doen is. Standaard laat ps alleen zien welke commando's draaien waarvan de gebruiker die het uitvoert de eigenaar is: &prompt.user; ps PID TT STAT TIME COMMAND 298 p0 Ss 0:01.10 tcsh 7078 p0 S 2:40.88 xemacs mdoc.xsl (xemacs-21.1.14) 37393 p0 I 0:03.11 xemacs freebsd.dsl (xemacs-21.1.14) 48630 p0 S 2:50.89 /usr/local/lib/netscape-linux/navigator-linux-4.77.bi 48730 p0 IW 0:00.00 (dns helper) (navigator-linux-) 72210 p0 R+ 0:00.00 ps 390 p1 Is 0:01.14 tcsh 7059 p2 Is+ 1:36.18 /usr/local/bin/mutt -y 6688 p3 IWs 0:00.00 tcsh 10735 p4 IWs 0:00.00 tcsh 20256 p5 IWs 0:00.00 tcsh 262 v0 IWs 0:00.00 -tcsh (tcsh) 270 v0 IW+ 0:00.00 /bin/sh /usr/X11R6/bin/startx -- -bpp 16 280 v0 IW+ 0:00.00 xinit /home/nik/.xinitrc -- -bpp 16 284 v0 IW 0:00.00 /bin/sh /home/nik/.xinitrc 285 v0 S 0:38.45 /usr/X11R6/bin/sawfish In het bovenstaande voorbeeld is de uitvoer van &man.ps.1; georganiseerd in een aantal kolommen. PID is het proces ID. PIDs worden toegekend vanaf 1 en lopen op tot 99999. Als ze allemaal zijn gebruikt, worden ze hergebruikt. De TT kolom toont de tty vanwaar het programma draait en wordt nu buiten beschouwing gelaten. STAT toont de huidige staat van het programma en ook deze kolom wordt buiten beschouwing gelaten. TIME is de hoeveelheid tijd die het programma gedraaid heeft op de CPU. Dit is meestal niet de verstreken tijd vanaf het moment dat het programma is gestart. Veel programma's wachten omdat er alleen gebruik wordt gemaakt van de CPU als er iets voor het programma te doen is. Als laatste is COMMAND de commandoregel die gebruikt is om het programma te starten. &man.ps.1; ondersteunt een aantal opties die de informatie wijzigen die wordt weergegeven. Één van de meest nuttige combinaties is auxww. De optie toont informatie over alle draaiende processen, niet alleen die van de gebruiker die is aangemeld. De optie toont de gebruikersnaam van de proceseigenaar, evenals geheugengebruik. De optie toont informatie over daemonprocessen en met de optie laat &man.ps.1; de volledige commandoregel zien, in plaats van een mogelijk afgekorte regel omdat die te lang is om op het scherm te passsen.. De uitvoer van &man.top.1; is hetzelfde: &prompt.user; top last pid: 72257; load averages: 0.13, 0.09, 0.03 up 0+13:38:33 22:39:10 47 processes: 1 running, 46 sleeping CPU states: 12.6% user, 0.0% nice, 7.8% system, 0.0% interrupt, 79.7% idle Mem: 36M Active, 5256K Inact, 13M Wired, 6312K Cache, 15M Buf, 408K Free Swap: 256M Total, 38M Used, 217M Free, 15% Inuse PID USERNAME PRI NICE SIZE RES STATE TIME WCPU CPU COMMAND 72257 nik 28 0 1960K 1044K RUN 0:00 14.86% 1.42% top 7078 nik 2 0 15280K 10960K select 2:54 0.88% 0.88% xemacs-21.1.14 281 nik 2 0 18636K 7112K select 5:36 0.73% 0.73% XF86_SVGA 296 nik 2 0 3240K 1644K select 0:12 0.05% 0.05% xterm 48630 nik 2 0 29816K 9148K select 3:18 0.00% 0.00% navigator-linu 175 root 2 0 924K 252K select 1:41 0.00% 0.00% syslogd 7059 nik 2 0 7260K 4644K poll 1:38 0.00% 0.00% mutt ... De uitvoer is gesplitst in twee secties. De kop (de eerste vijf regels) toont het laatst uitgegeven PID, de gemiddelde systeembelasting (hoe druk is een systeem), de uptime van het systeem (tijd verstreken sinds laatste reboot) en de huidige tijd. De andere cijfers in de kop tonen hoeveel processen er draaien (in dit geval 47) , hoeveel geheugen en swap er gebruikt wordt en hoeveel processortijd het systeem besteed aan verschillende taakgroepen. Daaronder staat een serie van kolommen die soortgelijke informatie bevatten als de uitvoer van &man.ps.1;. Zo zijn het PID, de gebruikersnaam, de hoeveelheid processortijd en het commando dat gebruikt is om het proces te starten te zien. &man.top.1; laat standaard ook zien hoeveel geheugen er gebruikt wordt door een proces. Dit staat in twee kolommen waarbij in de eerste kolom het maximale geheugengebruik wordt getoond en in de tweede kolom het huidige geheugengebruik. Maximale gebruik is de hoeveelheid geheugen die het proces nodig had in de tijd dat het bestaat en het residente gebruik is hoeveel er op het moment van weergeven gebruikt wordt. In dit voorbeeld is zichtbaar dat &netscape; bijna 30 MB RAM nodig had, maar op het moment van uitvoeren 9 MB verbruikt. &man.top.1; werkt het beeld automatisch iedere twee seconden bij. Dat kan gewijzigd worden met de optie . Daemons, signalen en het stoppen van processen Als een gebruiker een editor draait is het makkelijk om de editor te besturen, te vertellen om bestanden te openen, etc. Dit kan omdat de editor de mogelijkheden geeft om dat te doen en omdat de editor gekoppeld is aan een terminal. Sommige programma's zijn niet ontworpen om te draaien met continue gebruikersinvoer, dus als zij de kans krijgen ontkoppelen zij zich van de terminal. Een webserver reageert bijvoorbeeld de hele dag op webaanvragen en heeft eigenlijk geen input van een lokale gebruiker nodig. Programma's die email van locatie naar locatie transporteren zijn een ander voorbeeld. Deze programma's heten daemons. Daemons waren karakters in de Griekste mythologie, goed noch slecht, ze waren dienende geesten die op grote schaal nuttige dingen deden voor de mensheid. Net zoals de huidige webservers en mailservers nuttige dingen doen. Dit is waarom de mascotte voor BSD al lang een vrolijk kijkende daemon met puntoren en een drietand is. Er is een overeenkomst om programma's die meestal draaien als daemon te voorzien van het achtervoegsel d. BIND is de Berkeley Internet Name Daemon (het echte programma heet named), de Apache webserver heet httpd, de printerspooldriver heet lpd, etc. Deze overeenkomst geldt niet altijd. De hoofd maildaemon voor Sendmail heet bijvoorbeeld sendmail en niet maild. Soms is communicatie met een daemon nodig. Deze communicatie heet signaleren (signals). Er kan met een daemon (of met elk ander draaiend proces) gecommunicaeerd worden door er een signaal naartoe te sturen. Er zijn een verschillende signalen. Sommige hebben een specifieke bedoeling, andere worden geïntrepeteerd door de applicatie. In de documentatie van de applicatie staat hoe de applicatie signalen intrepeteert. Er kan alleen een signaal naar een proces gezonden worden waar de uitvoerende gebruiker eigenaar van is. Als met &man.kill.1; of &man.kill.1;een signaal naar een proces van een andere gebruiker wordt gestuurd, wordt de toegang geweigerd. De enige uitzondering hierop is de root gebruiker, die signalen naar processen van alle gebruikers kan sturen. &os; stuurt soms ook signalen naar applicaties. Als een applicatie slecht geschreven is en hij probeert geheugen te benaderen waar hij niet naartoe mag, stuurt &os; het proces een Segmentation Violation signaal (SIGSEGV). Als een applicatie de systeemaanroep &man.alarm.3; heeft gebruikt om na een bepaalde periode een alarm te ontvangen, wordt er een Alarm signaal heen gestuurd (SIGALRM), etc. Twee signalen kunnen gebruikt worden om een proces te stoppen: SIGTERM en SIGKILL. SIGTERM is de nette manier om een proces te killen. Het proces kan het signaal afvangen, begrijpen dat de eigenaar wil dat het wordt afgesloten, wellicht logboekbestanden sluiten die geopend zijn en alle onderhanden activiteiten afhandelen. In een aantal gevallen kan een proces SIGTERM negeren: als het midden in een taak zit die niet beëindigd kan worden. SIGKILL mag niet worden genegeerd door een proces. Dit is het Wat je ook aan het doen bent, stop er nu mee signaal. Na een SIGKILL stopt &os; het proces meteen. Dit is niet geheel waar. Er zijn een aantal dingen die niet onderbroken kunnen worden. Als het proces bijvoorbeeld een bestand probeert uit te lezen dat op een andere computer in het netwerk staat en de andere computer is verdwenen (uitgezet of het netwerk heeft een fout), dan wordt er gezegd dat het proces niet onderbroken kan worden. Uiteindelijk loopt het proces uit de tijd, meestal na twee minuten. Zodra het uit de tijd loopt, wordt het proces alsnog gestopt. Andere veelgebruikte signalen zijn SIGHUP, SIGUSR1 en SIGUSR2. Dit zijn algemeen bruikbare signalen en verschillende applicaties zullen verschillend reageren als ze verstuurd worden. Stel dat het bestand met instellingen voor de webserver is aangepast. Dan moet aan de webserver verteld worden dat die de instellingen opnieuw moet lezen. Hiervoor zou httpd gestopt en gestart kunnen worden, maar dit resulteert in een korte onderbreking van de webserverdienst, wat ongewenst kan zijn. De meeste daemons zijn geschreven om te reageren op het SIGHUP signaal door het opnieuw inlezen van het instellingenbestand. Dus in plaats van het stoppen en herstarten van httpd kan het SIGHUP signaal gezonden worden. Omdat er geen standaard manier is om op deze signalen te reageren, reageren verschillende daemons anders. Het is verstandig eerst de documentatie van de daemon in kwestie te lezen. Zoals onderstaand voorbeeld laat zien, worden signalen door &man.kill.1; verzonden. Het versturen van een signaal naar een proces Dit voorbeeld toont hoe een signaal naar &man.inetd.8; wordt verstuurd. Het bestand met instellingen voor inetd is /etc/inetd.conf en inetd leest dit bestand opnieuw in als er een SIGHUP wordt verstuurd. Eerst moet het proces ID worden opgezocht van het proces waar een signaal naar verzonden moeten worden. Dit kan door &man.ps.1; en &man.grep.1; te gebruiken. &man.grep.1; wordt gebruikt om in de uitvoer te zoeken en te kijken naar de string die de gebruiker opgeeft. Dit commando wordt gedraaid als een normale gebruiker en &man.inetd.8; wordt gedraaid onder de gebruiker root, dus aan &man.ps.1; moet de optie meegegeven worden. &prompt.user; ps -ax | grep inetd 198 ?? IWs 0:00.00 inetd -wW Dus PID van &man.inetd.8; is 198. In sommige gevallen kan grep inetd ook voorkomen in de uitvoer. Dit komt door de manier waarop &man.ps.1; de lijst van draaiende processen moet vinden. Met &man.kill.1; kan het signaal verzonden worden. Omdat &man.inetd.8; wordt gedraaid door root moet &man.su.1; gebruikt worden om root te worden. &prompt.user; su Password: &prompt.root; /bin/kill -s HUP 198 Zoals zovaak met &unix; commando's, geeft &man.kill.1; geen uitvoer als het succesvol uitgevoerd is. Als een signaal wordt verzonden naar een proces waarvan de gebruiker niet zelf de eigenaar is, dan is de melding: kill: PID: Operation not permitted. Als het PID verkeerd wordt ingevuld, wordt het signaal naar het verkeerde proces verzonden, wat slecht kan zijn, of, als de gebruiker geluk heeft, wordt het verzonden naar een PID dat momenteel niet in gebruik is, waarop de foutmelding kill: PID: No such process verschijnt. Waarom <command>/bin/kill</command> gebruiken? Veel shells leveren kill als ingebouwd commando. Dat betekent dat de shell het signaal direct verstuurt in plaats van door het starten van /bin/kill. Dit kan erg nuttig zijn, maar verschillende shells hebben een verschillende opdrachtregel voor het specificeren van de naam van het signaal dat verstuurd moet worden. In plaats van ze allemaal te leren, is het eenvoudiger om gewoon /bin/kill PID te gebruiken. Andere signalen versturen werkt bijna hetzelfde door TERM of KILL op de commandoregel te vervangen door wat nodig is. Het stoppen van willekeurige processen op een systeem is meestal een slecht idee. In het bijzonder bij &man.init.8; met proces ID 1. Het draaien van /bin/kill -s KILL 1 is een snelle manier om een systeem uit te zetten. Argumenten die aan &man.kill.1; worden meegegeven moeten altijd twee keer gecontroleerd worden voordat op Enter gedrukt wordt. Shells shells commandoregel In &os; wordt een groot deel van het alledaagse werk gedaan vanuit een omgeving met een commandoregel die shell heet. De grootste taak van een sheel is om commando's van het invoerkanaal op te vangen en deze uit te voeren. Veel shells hebben ook functies ingebouwd om mee te helpen om alledaagse taken zoals bestandsbeheer, bestandsglobbing, bestanden wijzigen vanaf de commandoregel, commandomacro's schrijven en uitvoeren en omgevingsvariabelen instellen en wijzigen. &os; heeft een aantal shells bijgeleverd zoals sh, de Bourne Shell en tcsh, de verbeterede C-shell. Er zijn veel andere shells beschikbaar in de &os; Portscollectie zoals zsh en bash. Welke shell gebruiken? Dit is een kwestie van smaak. Een C–programmeur voelt zich misschien prettiger bij een C–achtige shell, zoals tcsh. Een voormalig &linux; gebruiker of iemand die niet veel ervaring heeft met een &unix; commandoregel interface wil misschien bash proberen. Elke shell heeft zijn eigen unieke eigenschappen die wel of niet werken voor een bepaalde gebruiker. Een standaard optie in een shell is bestandsnaam completie. Door het intikken van de eerste paar letters van een commando of bestandsnaam, kan de shell opdracht gegeven worden om automatisch de rest het commando of bestandsnaam toe te voegen met de Tab toets op het toetsenbord. Stel dat er twee bestanden zijn met de namen foobar en foo.bar en foo.bar moet verwijderd worden. Dan kan op het toetsenbord rm fo[Tab].[Tab] ingevoerd worden. De shell geeft rm foo[BEEP].bar weer. De [BEEP] geeft aan dat de shell in staat was om de bestandsnaam te completeren omdat er meer dan één soortgelijk bestand was. foobar en foo.bar beginnen met fo, maar het was in staat om het af te maken tot foo. Na het invoeren van een . en daarna Tab, is de shell in staat om de rest van de bestandsnaam aan te vullen. omgevingsvariabelen Een andere optie van de shell is het gebruik van omgevingsvariabelen. Omgevingsvariabelen zijn variabele sleutelparen die opgeslagen zijn in de omgevingsruimte van een shell. Deze ruimte kan uitgelezen worden door elk programma dat door de shell wordt uitgevoerd en bevat dus veel programmainstellingen. Hieronder staat een lijst van standaard omgevingsvariabelen en wat ze beteken: omgevingsvariabelen Variabele Omschrijving USER Gebruikersnaam van de gebruiker die is aangemeld. PATH Een lijst van mappen, gescheiden door een : voor het zoeken naar binaire bestanden. DISPLAY Netwerknaam van het X11 scherm om verbinding mee te maken, indien beschikbaar. SHELL De huidige shell. TERM De naam van de huidige gebruikersterminal. Gebruikt om de mogelijkheden van de terminal te bepalen. TERMCAP Databaseregel met terminal escape codes voor het uitvoeren van diverse terminalfuncties. OSTYPE Type besturingssysteem, bijvoorbeeld &os;. MACHTYPE De CPU architectuur waar het systeem op draait. EDITOR De teksteditor waar de gebruiker de voorkeur aan geeft. PAGER De tekstpager waar de gebruiker de voorkeur aan geeft. MANPATH Lijst van mappen gescheiden door een : voor het zoeken naar handleidingen. Bourne shells Het instellen van omgevingsvariabelen verschilt van shell tot shell. In de C–achtige shells zoals tcsh en csh moet setenv gebruikt worden om omgevingsvariabelen in te stellen. In Bourne-shells zoals sh en bash moet export gebruikt worden om de omgevingsvariabelen in te stellen. Om bijvoorbeeld de omgevingsvariabele EDITOR te wijzigen naar /usr/local/bin/emacs onder csh of tcsh moet het volgende gedaan worden: &prompt.user; setenv EDITOR /usr/local/bin/emacs In Bourne shells is dat: &prompt.user; export EDITOR="/usr/local/bin/emacs" Met de meeste shells kunnen de omgevingsvariabelen ook weergegeven worden door een $ karakter voor de variabelenaam te plaatsen op de commandoregel. echo $TERM zou weergeven wat er in $TERM gezet is, omdat de shell $TERM uitbreid en het resultaat doorgeeft aan echo. Shells kennen veel speciale karakters, die meta-karakters heten, als speciale weergaves van data. De meest voorkomende is het karakter * karakter, dat elk karakter in een bestandsnaam voorstelt. Deze speciale meta-karakters kunnen gebruikt worden om bestandsnaamglobbing te doen. Door bijvoorbeeld echo * in te voeren, is het resultaat bijna hetzelfde als door het uitvoeren van ls, omdat de shell alle bestanden die van toepassing zijn aan echo geeft om ze daarna te tonen. Om te voorkomen dat de shell deze speciale tekens verwerkt, kunnen ze uitgeschakeld worden door er het backslash karakter (\) voor te plaatsen. echo $TERM print de inhoud van TERM naar het scherm. echo \$TERM print $TERM zoals het geschreven is. Shell wijzigen De makkelijkste manier om de shell te wijzigen is door het chsh commando te gebruiken. Door chsh te starten wordt de editor gestart die in de EDITOR omgevingsvariable staat. Als deze niet is ingesteld, wordt vi gestart. In de editor kan de regel waarop Shell: staat gewijzigd worden. Aan chsh kan ook de optie meegegeven worden. Dit stelt de shell in, zonder dat een editor gebruikt hoeft te worden. Als de shell bijvoorbeeld gewijzigd moet worden in bash, kan dat als volgt: &prompt.user; chsh -s /usr/local/bin/bash Dit kan ook door chsh zonder parameters te starten en de regel met daarin de shell te wijzigen. De te gebruiken shell moet geregistreerd zijn in /etc/ssh. Als een shell uit de Portscollectie is geïnstalleerd, is dit meestal automatisch gebeurd. Als de shell met de hand is geïnstalleerd moet het onderstaande gedaan worden. Als bijvoorbeeld bash met de hand geïnstalleerd is in /usr/local/bin, dient het onderstaande te gebeuren: &prompt.root; echo "/usr/local/bin/bash" >> /etc/shells Hierna kan chsh weer gedraaid worden. Teksteditors teksteditors editors Een groot deel van de instellingen in &os; wordt gemaakt door het bewerken van tekstbestanden. Hierdoor is het een goed idee om bekend te zijn met een tekstverwerker. &os; heeft er een paar in het basissysteem en veel anderen zijn beschikbaar via de Portscollectie. ee editors ee De makkelijkste en simpelste editor om te leren is de editor ee, wat easy editor betekent. Om ee te starten, moet op de commandoregel ee bestandsnaam ingevoerd worden, waar bestandsnaam de naam is van het bestand dat bewerkt moet worden. Om bijvoorbeeld /etc/rc.conf te bewerken, wordt ee /etc/rc.conf ingegeven. Eenmaal in ee worden alle manipulatie commando's die de editor heeft weergegeven aan de bovenkant van het scherm. Het karakter dakje ^ staat voor de toets CTRL op het toetsenbord, dus ^e vormt de toetscombinatie Ctrle . Om uit ee te komen wordt op de toets Esc gedrukt en daar kan gekozen worden om de editor te verlaten. De editor vraagt dan of de wijzigingen bewaard moeten worden als het bestand veranderd is. vi editors vi Emacs editors Emacs &os; heeft ook uitgebreidere tekstverwerkers, zoals vi, in het basissysteem en andere editors als Emacs en vim maken onderdeel uit van de &os; Portscollectie (editors/emacs en editors/vim). Deze editors leveren veel meer functionaliteit en kracht maar zijn lastiger om te leren. Als echter veel met tekstverwerking gedaan wordt, is het leren van een krachtige editor als vim of Emacs verstandig omdat deze uiteindelijk veel tijd kan besparen. Apparaten en apparaatnodes Apparaat is een term die meestal wordt gebruikt voor hardwareonderdelen in een systeem, zoals schijven, printers grafische kaarten en toetsenborden. Als &os; opstart laat het vooral zien welke apparaten gedetecteerd worden. Deze opstartmeldingen kunnen nagekeken worden door het bestand /var/run/dmesg.boot te bekijken. acd0 is bijvoorbeeld de eerste IDE cd-rom drive, terwijl kbd0 staat voor het toetsenbord. Veel van deze apparaten moeten in een &unix; besturingssysteem benaderd worden via speciale bestanden die apparaatnodes heten en te vinden zijn in de map /dev. Apparaatnodes maken Als een nieuw apparaat wordt toegevoegd aan een systeem of als ondersteuning voor extra apparaten wordt gecompileerd, dan moeten misschien één of meer apparaatnodes voor het nieuwe apparaat gemaakt worden. Het MAKEDEV script Op systemen zonder DEVFS (dit is het geval voor alle &os; versies vóór 5.0) worden apparaatnodes gemaakt door het script &man.MAKEDEV.8; zoals hieronder wordt aangegeven: &prompt.root; cd /dev &prompt.root; sh MAKEDEV ad1 Dit voorbeeld maakt de juiste apparaatnode voor de tweede IDE drive wanneer die geïnstalleerd is. <literal>DEVFS</literal> (apparaatbestandssysteem - DEVice File System) Het apparaatbestandssysteem of DEVFS, levert toegang tot de apparaatruimte van de kernel in het globale bestandssysteem. In plaats van dat het nodig is om apparaatnodes te maken en te wijzigen, doet DEVFS dit. In &man.devfs.5; staat meer informatie. DEVFS wordt standaard gebruikt in &os; 5.0 en verder. Binaire formaten Om te kunnen begrijpen waarom &os; gebruik maakt van het &man.elf.5; formaat, is het belangrijk op de hoogte zijn van de drie dominante uitvoerbare formaten voor &unix;: &man.a.out.5; Het oudste en klassieke &unix; object formaat. Het gebruikt een korte en compacte kop met een magisch nummer aan het begin dat veel gebruikt wordt om het formaat aan te geven (&man.a.out.5; geeft meer details). Het bevat drie laadbare segmenten: .tekst, .data en .bss, een symbolentabel en een stringtabel. COFF Het SVR3 object formaat. De kop bestaat uit een sectietabel, dus er kunnen meer dan alleen .tekst, .data, en .bss secties zijn. &man.elf.5; De opvolger van COFF, heeft meerdere secties en 32-bit of 64-bit als mogelijke waarden. Één nadeel: ELF was ook ontworpen met de aanname dat er maar één ABI per systeemarchitectuur zou zijn. Deze aanname is eigenlijk redelijk incorrect, zelfs niet in de commerciële SYSV wereld (die op zijn minst drie ABIs heeft: SRV4, Solaris en SCO). &os; probeert om dit probleem heen te werken door een hulpprogramma te leveren voor het brandmerken van een bekend ELF uitvoerbaar bestand met informatie over de ABI waar hij mee kan werken. In &man.brandelf.1; staat meer informatie. &os; komt uit het klassieke kamp en gebruikt het &man.a.out.5; formaat, een technologie die zich bewezen heeft door meerdere generaties van BSD versies heen, tot het begin van de 3.X versies. Alhoewel het al mogelijk was om ELF programma's en kernels te bouwen en te draaien op een &os; systeem , verzette &os; zich eerst tegen de druk om over te schakelen naar ELF als standaard formaat. Waarom? Toen het &linux; kamp hun pijnlijke wissel maakte naar ELF, was dat niet zozeer om van het a.out formaat af te komen, maar meer omdat van het op de inflexibele jump-tabel gebaseerde gedeelde bibliotheekmechanisme af te komen, die het maken van gedeelde bibliotheken erg moeilijk maakte voor bedrijven en ontwikkelaars. Omdat de ELF hulprogramma's een oplossing voor het gedeelde bibliotheek probleem waren en algemeen gezien werden als een stap vooruit, werd de migratie geaccepteerd als noodzakelijk kwaad en werd de wissel uitgevoerd. Het gedeelde bibliotheek mechanisme van &os; is meer gebaseerd op het gedeelde bibliotheek mechanisme van Sun's &sunos; en daardoor erg makkelijk te gebruiken. Waarom zijn er zoveel verschillende formaten? In het duistere donkere verleden was er simpele hardware. Deze simpele hardware ondersteunde een simpel klein systeem. a.out was volledig adequaat voor de taak om binaire bestanden op dat simpele systeem te vertegenwoordigen (een PDP-11). Toen mensen &unix; van deze machine gingen porten, behielden ze het a.out formaat omdat het voldeed voor de vroege ports van &unix; naar architecturen als Motorola 68k, VAXen, enzovoort. Toen besloot een slimme hardware engineer dat als hij de software kon forceren om wat simpele truckjes te doen, hij in staat was om een paar onderdelen van het ontwerp af te schaven, waardoor zijn processorcore sneller kon draaien. Terwijl men probeerde om het met deze nieuwe vorm van hardware te laten werken (vandaag de dag beter bekend als RISC), was a.out te beperkt voor deze hardware. Dus werden er vele formaten ontworpen om betere prestaties te krijgen uit deze hardware dan het simpele formaat a.out kon leveren. Toen werden COFF, ECOFF en een paar andere duistere formaten uitgevonden en werden de limieten verkend, waarna men besloot om zich te richten op ELF. Daarnaast werden programma's groter en bleven schijven (en fysiek geheugen) relatief klein, zodat het concept van een gedeelde bibliotheek werd geboren. Het VM systeem werd ook meer verfijnd. Terwijl al deze verbeteringen bereikt werden door het a.out formaat, werd het nut met elke nieuwe eigenschap verder uitgerekt. Daarnaast wilde men dingen dynamisch laden tijdens het starten of delen weggooien nadat het programma zijn intiële code had gedraaid om te blijven hangen in het hoofdgeheugen en in de wisselbestanden. Talen werden verder verfijnd en men wilde dat code automatisch werd aangeroepen voor main. Er werden veel hacks gedaan in het a.out formaat om alles mogelijk te maken en dit werkte ook enige tijd. Na verloop van tijd was a.out niet meer in staat om alle problemen te adresseren zonder toenemende overhead in code en complexibiliteit. Hoewel ELF veel van deze problemem verhielp, was het moeilijk om te wisselen naar een systeem dat compleet anders werkte. Dus moest ELF wachten totdat het pijnlijker was om a.out te behouden dan het te migreren naar ELF. Met het verstrijken van de tijd, werden de bouwprogramma's die &os; heeft afgeleid van hun bouwprogramma's (vooral de assembler en de loader) ontwikkeld in twee parallel lopende takken. De &os; tree voegde gedeelde bibliotheken toe en heeft wat bugs opgelost. De mensen van GNU die deze programma's hebben geschreven, hebben ze herschreven en simpelere ondersteuning toegevoegd voor het bouwen van cross-compilers, waarbij verschillende formaten zo nodig ingevoegd konden worden, enzovoort. Omdat veel mensen cross-compilers wilden bouwen die gericht waren op &os;, hadden die pech, omdat de oudere broncode van &os; voor as en ld niet opgewassen was tegen deze taak. De nieuwe GNU programmaketen (binutils) ondersteunt cross-compiling, ELF, gedeelde bibliotheken, C++ extensies, enzovoort. Daarnaast leveren veel leverancierds ELF binaire bestanden en is het goed voor &os; om het te draaien. ELF heeft meer expressiemogelijkheden dan a.out en geeft meer uitbreidingsmogelijkheden aan het basissysteem. De ELF hulpprogramma's worden beter onderhouden en geven de mogelijkheid tot ondersteuning voor cross compilatie, wat voor veel mensen belangrijk is. ELF is misschien iets trager dan a.out, maar het meten daarvan kan vrij lastig zijn. Er zijn ook ontelbare verschillen tussen de twee in hoe ze pages opslaan, initiële code verwerken, enzovoort. Geen van allen zijn ze erg belangrijk, maar er zijn verschillen. Na verloop van tijd verdwijnt de ondersteuning voor a.out uit de GENERIC kernel en uiteindelijk ook helemaal uit de kernel als de noodzaak voor a.out gebaseerde programma's voorbij is. Meer informatie Handleidingen handleidingen De meest uitvoerige documentatie van &os; is geschreven in de vorm van handleidingen. Bijna elk programma op het systeem heeft een kleine handleiding die uitlegt wat de basisopties en verschillende argumenten doen. Deze handleidingen bekeken worden met man. Het gebruik van man gaat als volgt: &prompt.user; man commando commando is de naam van het commando waar meer informatie over getoond moet worden. Om bijvoorbeeld meer informatie weer te geven over ls kan het volgende uitgevoerd worden: &prompt.user; man ls De handleidingen zijn opgedeeld in genummerde onderdelen: Gebruikerscommando's. Systeemaanroepen en foutnummernummers. Functies in de C bibliotheken. Apparaatdrivers. Bestandsindelingen. Spelletjes en andere afleidingen. Diverse informatie. Systeemonderhoud en commando's Kernelontwikkelaars. In sommige gevallen kan een bepaald onderwerp vaker voorkomen in een onderdeel van de handleidingen. Er is bijvoorbeeld een gebruikerscommando chmod en een systeemaanroep chmod(). In deze gevallen kan man aangegeven worden welke documentatie weer te geven door het specificeren van het onderdeel: &prompt.user; man 1 chmod Dit geeft de handleiding van het gebruikerscommando chmod weer. Verwijzingen naar een bepaald onderdeel van de handleiding worden traditioneel tussen haakjes geplaatst: &man.chmod.1; verwijst naar het commando chmod en &man.chmod.2; verwijst naar de systeemaanroep. Dit werkt prima als de naam van het commando bekend is en alleen informatie nodig is over het het commando gebruikt kan worden, maar wat als de naam van het commando niet bekend is? Dan kan man gebruikt worden om naar trefwoorden te zoeken in de commandobeschrijvingen door de optie te gebruiken: &prompt.user; man -k mail Met dit commando wordt een overzicht getoond met commando's die het trefwoord mail in hun omschrijving hebben. Dit is gelijk aan het commando apropos. Dus om meer informatie over spannende commando's met een onbekende functie in /usr/bin te krijgen is het volgende commando voldoende: &prompt.user; cd /usr/bin &prompt.user; man -f * Het onderstaande commando resulteert in hetzelfde: &prompt.user; cd /usr/bin &prompt.user; whatis * Gnu infobestanden Free Software Foundation &os; heeft veel applicaties en hulpmiddelen die gemaakt zijn door de Free Software Foundation (FSF). Als extraatje voor de documentatie hebben deze programma's uitgebreidere html bestanden die infobestanden heten, die uitgelezen kunnen worden met info of, als emacs is geïnstalleerd, de infomodus van emacs. &man.info.1; wordt als volgt gebruikt: &prompt.user; info h geeft een korte beschrijving en ? toont een een kort commando–overzicht.
diff --git a/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml index f9b51568fb..a597dc25c3 100644 --- a/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/config/chapter.sgml @@ -1,3291 +1,3332 @@ 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 instellen 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 ingesteld 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 is ingesteld 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 oplossen 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. De volgende regels voor /etc/rc.conf stellen een adapter in voor het bovenstaande scenario: 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 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 (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. + waarden die alleen-lezen zijn toch te wijzigen. Hoewel dit soms + onontkoombaar is, kan het alleen bij een (her)start gedaan + worden. 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 harde schijfproducenten 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 schijfbelasting. 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 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. + + + Virtueel Geheugen + + + <varname>kern.maxvnodes</varname> + + Een vnode is de interne representatie van een bestand of + een map. Het verlagen van het aantal beschikbare vnodes + voor het besturingssysteem leidt dus tot een daling van disk + I/O. Normaliter wordt dit door het besturingssysteem + afgehandeld en hoeft de instelling niet gewijzigd te worden. + Im sommige gevallen kan disk I/O de beperkende factor zijn en + kan het systeem alle beschikbare vnodes in gebruik hebben. + Dan dient deze instelling gewijzigd te worden. De + hoeveelheid inactief en beschikbaar RAM dient meegenomen te + worden in de beslissing. + + Het huidige aantal gebruikte vnodes kan als volgt bekeken + worden: + + &prompt.root; sysctl vfs.numvnodes +vfs.numvnodes: 91349 + + Om het maximale aantal vnodes weer te geven: + + &prompt.root; sysctl kern.maxvnodes +kern.maxvnodes: 100000 + + Als het huidige aantal gebruikte vnodes dicht bij het + maximale aantal ligt, is het verstandig om + kern.maxvnodes op te hogen met 1.000. + Ook vfs.numvnodes dient in de gaten + gehouden te worden. Als de waarde weer tot aan het maximum + stijgt, dan moet kern.maxvnodes verder + opgehoogd worden. Er dient een verschuiving op te treden in + het door &man.top.1; gerapporteerde geheugengebruik. Er + hoort meer geheugen actief te zijn. + + 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 geheugenschijf (&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. APIC 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 problemen ACPI 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/eresources/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/eresources/chapter.sgml index e78586cddc..a3e840dc91 100644 --- a/nl_NL.ISO8859-1/books/handbook/eresources/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/eresources/chapter.sgml @@ -1,1886 +1,1907 @@ Bronnen op Internet Door de snelle ontwikkeling van &os; zijn gedrukte media niet zo praktisch om de laatste ontwikkelingen te volgen. Elektronische bronnen zijn de beste, en vaak de enige, om op de hoogte te blijven van de laatste ontwikkelingen. Omdat &os; draait op de inzet van vrijwilligers, is de gebruikersgemeenschap vaak een soort technische ondersteuningsgroep, die heeft ontdekt dat e–mail en USENET de meeste effectieve manieren zijn om de gebruikersgemeenschap te bereiken. Hieronder staan de meest belangrijke contactmogelijkheden met de &os; gebruikersgemeenschap beschreven. Mochten er andere bronnen zijn die hier niet beschreven zijn, laat die dan weten aan de &a.doc;, zodat ze hier ook beschreven kunnen worden. Mailinglijsten Hoewel veel van de ontwikkelaars van &os; USENET lezen, kan niet altijd gegarandeerd worden dat vragen die in een van de groepen binnen comp.unix.bsd.freebsd.* gesteld worden, op tijd beantwoord worden - als ze al beantwoord worden. Door vragen op de daarvoor bestemde mailinglijsten te stellen, wordt het gewenste &os; publiek bereikt, waardoor een beter, of in ieder geval tijdiger, antwoord is gegarandaard. De doelstellingen van de verschillende lijsten staan onderaan dit document. Lees alsjeblieft de doelstellingen alvorens lid te worden of mail te sturen. De meeste leden ontvangen tegenwoordig vaak honderden &os; gerelateerde berichten per dag, en door de doelstellingen en gebruiksregels op te stellen wordt gestreefd om zo min mogelijk ruis op de lijn te krijgen. Door de voorgaande adviezen te negeren zouden de mailinglijsten op termijn falen als een effectief communicatiemedium over het project. Bij twijfel over naar welke lijst te posten, kan de pagina Hoe de beste resultaten uit de &os;-vragen mailinglijst te halen wellicht helpen. Alvorens naar enige lijst te posten, is het verstandig te leren hoe de mailinglijsten het beste gebruikt kunnen worden. Hoe bijvoorbeeld zich vaak herhalende discussies voorkomen kunnen worden door het document Veel Gestelde Mailinglijstvragen (FAQ) te lezen. Voor alle mailinglijsten worden archieven bijgehouden die doorzocht kunnen worden op de &os; World Wide Web server. De met sleutelwoorden te doorzoeken archieven bieden een voortreffelijke methode om antwoorden te vinden op vaak gestelde vragen en horen geraadpleegd te worden voordat er vragen op een lijst worden gesteld. Lijstsamenvatting Algemene lijsten: De volgende zijn algemene lijsten waarop vrijelijk (en aangemoedigd) geabonneerd kan worden: Lijst Doel &a.cvsall.name; Wijzigen die aan de &os; broncode zijn gemaakt &a.advocacy.name; &os; Evangelisatie &a.announce.name; Belangrijke gebeurtenissen en projectdoelen &a.arch.name; Architectuur en ontwerp discussies &a.bugbusters.name; Discussie over het onderhoud van de &os; probleemrapporten database en aanverwante zaken &a.bugs.name; Bugbeschrijvingen &a.chat.name; Niet-technische onderwerpen met betrekking tot de &os; gemeenschap &a.current.name; Discussie over het gebruik van &os.current; &a.isp.name; Zaken voor Internet Service Providers die &os; gebruiken &a.jobs.name; Werk en mogelijkheden voor het geven van advies met betrekking tot &os; &a.newbies.name; Activiteiten en discussies voor nieuwe gebruikers van &os; &a.policy.name; Beleidsbeslissingen van het &os; Kernteam. Laag volume en alleen-lezen &a.questions.name; Gebruikersvragen en technische ondesteuning &a.security-notifications.name; Beveiligingswaarschuwingen &a.stable.name; Discussies over het gebruik van &os.stable; &a.test.name; Hier kunnen testberichten heengestuurd worden in plaats van naar de eigenlijke lijsten Technische lijsten: De volgende lijsten zijn voor technische discussie. Het is van belang de doelstellingen te lezen alvorens lid te worden of mail te sturen omdat de richlijnen voor het gebruik en de inhoud erg strikt zijn. Lijst Doel &a.acpi.name; Ontwikkeling van ACPI en energiebeheer &a.afs.name; Porten van AFS naar &os; &a.aic7xxx.name; Ontwikkeling van drivers voor de &adaptec; AIC 7xxx &a.alpha.name; Porten van &os; naar de Alpha &a.amd64.name; Porten van &os; naar AMD64 systemen &a.apache.name; Discussie over ports met betrekking tot Apache &a.arm.name; Porten van &os; naar &arm; processors &a.atm.name; Het gebruik van ATM netwerken met &os; &a.audit.name; Audit van broncode project &a.binup.name; Ontwerp en ontwikkeling van het binaire updatesysteem + + &a.bluetooth.name; + + &bluetooth; technologie gebruiken in &os; + + &a.cluster.name; &os; gebruiken in een geclusterde omgeving &a.cvsweb.name; CVSweb onderhoud &a.database.name; Discussie over het gebruik en de ontwikkeling van databases met &os; &a.doc.name; Het maken van &os; gerelateerde documenten &a.emulation.name; Emulatie van andere systemen zoals &linux;, &ms-dos; en &windows; &a.firewire.name; &os; &firewire; (iLink, IEEE 1394) technische discussie &a.fs.name; Bestandssystemen &a.geom.name; GEOM-specifieke discussies en implementaties &a.gnome.name; Porten van GNOME en GNOME applicaties &a.hackers.name; Algemene technische discussies &a.hardware.name; Algemene discussies over hardware voor het draaien van &os; &a.i18n.name; &os; Internationalisatie &a.ia32.name; &os; op het IA-32 (&intel; x86) platform &a.ia64.name; Porten van &os; naar &intel;'s IA64 systemen &a.ipfw.name; Technische discussie over het herontwerp van de IP firewallcode &a.isdn.name; ISDN ontwikkelaars &a.java.name; &java; ontwikkelaars en mensen die &jdk;'s porten naar &os; &a.kde.name; Porten van KDE en KDE applications &a.lfs.name; Porten van LFS naar &os; &a.libh.name; Het tweede generatie installatie en package systeem &a.mips.name; Porten van &os; naar &mips; &a.mobile.name; Discussie over mobiel computeren &a.mozilla.name; Porten van Mozilla naar &os; &a.multimedia.name; Multimedia applicaties &a.newbus.name; Technische discussies over bus-architecturen &a.net.name; Discussies over netwerken en TCP/IP broncode &a.openoffice.name; Porten van OpenOffice.org en &staroffice; naar &os; &a.performance.name; Optimalisatie van prestaties voor installaties met hoge prestaties en/of load &a.perl.name; Onderhoud van een aantal ports met betrekking tot perl &a.pf.name; Discussies en vragen voor het pakketfilter firewall systeem &a.platforms.name; Ports naar niet &intel; architectuur platforms &a.ports.name; Discussie over de Portscollectie &a.ports-bugs.name; Discussie over bugs in ports en PR's &a.ppc.name; Porten van &os; naar de &powerpc; &a.python.name; &os;-specifieke Python zaken &a.qa.name; Discussie over Quality Assurance, meestal in een release traject &a.realtime.name; Ontwikkeling van realtime extensions voor &os; &a.scsi.name; Het SCSI subsysteem &a.security.name; Beveiligingsonderwerpen betreffende &os; &a.small.name; &os; gebruiken in embedded toepassingen &a.smp.name; Discussies over het ontwerp voor [A]Symmetric MultiProcessing &a.sparc.name; Porten van &os; naar op &sparc; gebaseerde systemen &a.standards.name; Volgen van de C99 en de &posix; standaarden door &os; &a.threads.name; Threading in &os; &a.testing.name; &os; prestatie- en stabiliteitstesten &a.tokenring.name; Ondersteuning voor Token Ring in &os; &a.usb.name; Discussie over &os; ondersteuning voor USB &a.vuxml.name; Discussie over VuXML infrastructuur &a.x11.name; Onderhoud en ondersteuning voor X11 op &os; Beperkte lijsten: De volgende lijsten zijn voor meer gespecialiseerd publiek en algemene gebruikers hebben er waarschijnlijk niets aan. Het is verstandig om eerst naam te maken in de technische lijsten alvorens lid te worden van een van de onderstaande beperkte lijsten, zodat de gebruiken op die lijst bekend zijn. Lijst Doel &a.hubs.name; Mensen die mirror sites draaien (infrastructurele ondersteuning) &a.usergroups.name; Gebruikersgroep coördinatie &a.vendors.name; Coördinatie van pre-release met wederverkopers &a.www.name; Beheerders van www.FreeBSD.org Verkorte versie van lijsten (digest): Alle hierboven beschreven lijsten zijn beschikbaar in verkorte vorm. Na het lid worden van een lijst zijn de digest opties te wijzigen bij de accountopties. CVS lijsten: De volgende lijsten zijn voor mensen met interesse in het zien van logboekberichten voor wijzigingen in verschillende onderdelen van de broncodestructuur. Het zijn Alleen-lezen lijsten waar geen e–mail heen gezonden hoort te worden. Lijst Broncodegebied Broncodebeschrijving &a.cvsall.name; /usr/(CVSROOT|doc|ports|projects|src) Alle wijzigingen op welke plaats in de structuur dan ook (som van alle andere CVS commit lijsten) &a.cvs-doc.name; /usr/(doc|www) Alle wijzigingen aan de doc en www structuren &a.cvs-ports.name; /usr/ports Alle wijzigingen aan de ports structuur &a.cvs-projects.name; /usr/projects Alle wijzigingen aan de projects structuur &a.cvs-src.name; /usr/src Alle wijzigingen aan de src structuur Hoe abonneren Om te abonneren op een lijst kan geklikt worden op de naam van de lijst hierboven of kan op &a.mailman.lists.link; geklikt worden op de lijst waarin interesse bestaat. De pagina waarop de lijsten staan beschreven bevat alle informatie die nodig is om te abonneren. Om te posten op een lijst kan simpelweg een e–mail gestuurd worden naar lijstnaam@FreeBSD.org. Daarna wordt die doorgestuurd aan leden van de lijst in de hele wereld. Om het abonnement op een lijst op te zeggen kan op de URL die onderaan iedere e–mail van een lijst staat geklikt worden. Het is ook mogelijk om een e–mail te sturen naar lijstnaam-unsubscribe@FreeBSD.org om een abonnement op te zeggen. Hierbij nogmaals het advies om discussies op de technische mailinglijsten technisch te houden. Als er alleen interesse bestaat in belangrijke mededelingen dan wordt aangeraden te abonnneren op &a.announce;, waarop zelden verkeer voorkomt. Lijstdoelstellingen Alle &os; mailinglijsten hebben eigen regels waaraan voldaan dient te worden bij gebruik. Als daaraan niet wordt voldaan, resulteert dat in maximaal twee (2) schriftelijke waarschuwingen van de &os; Postmaster postmaster@FreeBSD.org, waarna na de derde overtreding de poster verwijderd wordt van alle &os; mailinglijsten en alle toekomstige mail van het adres van de verzender wordt uitgefilterd. Helaas zijn deze regels nodig, omdat het internet van vandaag de dag een onvriendelijke omgeving is en slechts weinigen zich bewust zijn van hoe fragiel sommige mechanismen zijn. Standaardregels: Het onderwerp van iedere mail dient te voldoen aan de basisdoelstellingen van de lijst waarnaar wordt gepost. Als de lijst bijvoorbeeld over technische onderwerpen gaat, dan hoort een post ook over iets technisch te gaan. Ruis en flaming doen alleen af aan de waarde van een mailinglijst voor alle leden en dat wordt niet getolereerd. Voor vrije discussie dient de &a.chat; gebruikt te worden die daar speciaal voor is ingesteld. Bijdragen horen niet naar meer dan twee mailinglijsten verzonden te worden en alleen dan naar twee als het helder en duidelijk is dat daarvoor de noodzaak bestaat. Voor de meeste lijsten bestaat er al veel overlap in de leden en met uitzondering van de meer esoterische lijsten, zoals bijvoorbeeld -stable & -scsi, is er eigenlijk slechts zelden aanleiding om naar meer dan een lijst te posten. Als een bericht zo is verzonden dat er meerdere mailinglijsten op de regel Cc staan, dan hoort de regel Cc weer ingekort te worden in een eventueel antwoord. De verzender is verantwoordelijk voor zijn eigen kruisposten, wie ook een eerdere zender was. Persoonlijke aanvallen en profane taal (in de context van een geschil) zijn niet toegestaan. Dit geldt zowel voor gebruikers als ontwikkelaars. Grove schending van de netiquette, zoals kopiëren uit of het volledig doorsturen van persoonlijke e–mail zonder dat daarvoor toestemming is gegeven, wordt niet op prijs gesteld. Er zijn hoe dan ook zeer weinig gevallen zijn waarin zoiets dergelijks wel binnen de doelstelling van een lijst valt, waardoor dat soort e–mails op grond van de inhoud alleen al vaak reden zijn voor een waarschuwing (of ban). Adverteren voor niet-&os; gerelateerde producten is streng verboden en heeft direct een ban tot gevolg als helder is dat de overtreder adverteert door middel van spam. Individuele lijstdoelstellingen: &a.acpi.name; ACPI en energiebeheerontwikkeling &a.afs.name; Andrew Bestandssysteem (Andrew File System) Deze lijst is voor onderwerpen over het porten en gebruik van AFS van CMU/Transarc &a.announce.name; Belangrijke gebeurtenissen en projectdoelen Dit is de mailinglijst voor hen die alleen interesse hebben in gelegenheidsmededelingen of belangrijke &os; gebeurtenissen. Hieronder vallen aankondigingen over snapshots en andere releases. De lijst omvat ook aankondigingen over nieuwe mogelijkheden binnen &os;. Er kunnen ook oproepen gedaan worden voor vrijwilligers, enzovoort. Deze lijst kent een laag volume en is volledig gemodereerd. &a.arch.name; Discussie van architectuur en ontwerp Deze lijst is bedoeld voor het bespreken van de &os; architectuur. Berichten zijn in het algemeen strikt technisch van aard. Voorbeelden van geschikte onderwerpen zijn: Hoe het buildsysteem bijgewerkt kan worden zodat meerdere aanpaste builds tegelijkertijd kunnen lopen. Wat moet er aan VPS aangepast worden om Heidemann layers te laten werken. Hoe kan de apparataatstuurprogramma interface aangepast worden zodat dezelfde stuurprogramma's netjes op vele bussen en architecturen gebruikt kunnen worden. Hoe een netwerkstuurprogramma geschreven kan worden. &a.audit.name; Broncode audit project Dit is de mailinglijst voor het &os; broncode audit project. Hoewel in eerst instantie bedoeld voor beveiliging gerelateerde wijzigingen, zijn de doelstellingen aangepast naar alle wijzigingen in de code. Op deze lijst komen veel patches voor en hij is waarschijnlijk niet interessant voor de gemiddelde &os; gebruiker. Beveiligingsdiscussies die niet gerelateerd zijn aan een bepaalde broncodewijziging worden gehouden op freebsd-security. Omgekeerd worden alle ontwikkelaars aangemoedigd hun patches op deze lijst ter review aan te bieden, zeker als hun patch een deel van het systeem raakt waar een bug de integriteit van het systeem nadelig kan beïnvloeden. &a.binup.name; &os; Binaire Updates Project Deze lijst bestaat om de mogelijkheid te bieden tot het bespreken van het binaire update systeem of binup. Onderwerpen met betrekking tot ontwerp, implementatie details, patches, bugreports, statusreports, feature requests, commit logs en alle andere dingen die met binup te maken hebben kunnen besproken worden. + + &a.bluetooth.name; + + + &bluetooth; in &os; + + Dit is het forum waar gebruikers van &bluetooth; op + &os; samenkomen. Gespreksstof op het gebied van ontwerp, + implementatiedetails, patches, probleemrapportages, + statusrapportages, verzoeken voor nieuwe mogelijkheden + en al het andere dat met &bluetooth; te maken heeft is + geschikt materiaal. + + + &a.bugbusters.name; Coördinatie afhandeling Problem Reports Het doel van deze lijst is een platform zijn voor de coördinatie en discussie voor de Bugmeister, zijn Bugbusters en anderen die interesse hebben in de PR database. Deze lijst is niet bedoeld voor discussie van specifieke bugs, patches of PR's. &a.bugs.name; Bug reports Dit is de mailinglijst voor het rapporteren van bugs in &os;. Waar mogelijk dienen bugs ingezonden te worden via &man.send-pr.1; of via de WEB interface daarvan. &a.chat.name; Niet-technische onderwerpen met betrekking tot de &os; gemeenschap Deze lijst bevat alle onderwerpen waar op andere lijsten geen ruimte voor is wat betreft niet-technische en sociale informatie. Er wordt gesproken over de moord op Van Gogh, of er in onderkast of kapitalen geschreven dient te worden, wie er te veel koffie drinkt, waar het beste bier vandaan komt, enzovoort. Belangrijke gebeurtenissen (zoals feestjes, bruiloften, geboorten, nieuwe banen, enzovoort) kunnen op de technische lijsten aangekondigd worden, maar antwoorden dienen naar deze -chat lijst te gaan. &a.core.name; &os; Kernteam Dit is een interne mailinglijst die wordt gebruikt door de kernleden. Er kunnen berichten naar gestuurd worden als een belangrijke &os; gerelateerde zaak arbitrage nodig heeft of een onderzoekende blik op hoog niveau nodig is. &a.current.name; Discussie over het gebruikt van &os.current; Dit is de mailinglijst voor gebruikers van &os.current;. Er staan waarschuwingen op over nieuwe mogelijkheden in -CURRENT die impact hebben op gebruikers en instructies over de te nemen stappen om -CURRENT te blijven. Iedereen die CURRENT draait, zou zich moeten abonneren. Dit is een technische mailinglijst waarop strikt technische berichten worden verwacht. &a.cvsweb.name; &os; CVSweb Project Technische discussie over het gebruik, de ontwikkeling en het beheer van &os;-CVSweb. &a.doc.name; Documentatie project Dit is de mailinglijst voor het bespreken van onderwerpen en projecten die te maken hebben met het maken van documentatie voor &os;. De leden van deze mailinglijst worden samen The &os; Documentation Project genoemd. Het is een open lijst waarop zonder problemen een abonnement genomen kan worden en bijdragen zeer op prijs worden gesteld! &a.firewire.name; &firewire; (iLink, IEEE 1394) Dit is de mailinglijst voor het bespreken van het ontwerp en de implementatie van een &firewire; (ook wel IEEE 1394 of iLink) subsysteem voor &os;. Relevante onderwerpen omvatten de standaarden, bus apparaten en hun protocollen, adapter boards/kaarten/chipssets en de architectuur en implementatie van code voor een juiste ondersteuning. &a.fs.name; Bestandssystemen Discussie over &os; bestandssystemen. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.geom.name; GEOM Discussie specifiek over GEOM en gerelateerde implementaties. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.gnome.name; GNOME Discussie over de GNOME bureaubladomgeving voor &os;. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.ipfw.name; IP Firewall Dit is het forum voor technische bespreking van het herontwerp van de IP firewall code in &os;. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.ia64.name; Porten van &os; naar IA64 Dit is een technische mailinglijst voor individuen die actief werken aan het porten van &os; naar het IA-64 platform van &intel;, om problemen op tafel te leggen of alternatieve oplossingen te bespreken. Geïnteresseerden die alleen de technische bespreking willen volgen zijn ook welkom. &a.isdn.name; ISDN Communicatie Dit is de mailinglijst voor discussie over de ontwikkeling van ISDN ondersteuning voor &os;. &a.java.name; &java; Ontwikkeling Dit is de mailinglijst voor het bespreken van de ontwikkeling van significante &java; applicaties voor &os; en het porten en het beheer van &jdk;'s. &a.jobs.name; Banen in de aanbieding en gezocht Dit is een forum voor vacatures en CV's specifiek gerelateerd aan &os;, bijvoorbeeld als er &os; gerelateerd werk wordt gezocht of in de aanbieding is. Dit is geen mailinglijst voor algemene werkonderwerpen omdat daarvoor al elders ruimte staat. Ook deze lijst wordt net als alle andere FreeBSD.org mailinglijsten wereldwijd verspreid. Daarom dient duidelijk vermeld te worden om welke locatie het gaat en onder welke voorwaarden telewerken of bijdragen in huisvesting mogelijk zijn. E–mail dient alleen open formaten te bevatten. Bij voorkeur platte tekst, maar standaard Portable Document Format (PDF), HTML en een aantal andere, zijn acceptabel voor lezers. Gesloten formaten, zoals µsoft; Word (.doc), worden door de mailinglijstserver geweigerd. &a.kde.name; KDE Discussie over KDE op &os; systemen. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.hackers.name; Technische discussies Dit is een forum voor technische discussie met betrekking tot &os;. Dit is de leidende technische mailinglijst die is bestemd voor mensen die actief aan &os; werken om problemen aan het voetlicht te brengen of alternatieve oplossingen te bespreken. Geïnteresseerden die alleen de technische bespreking willen volgen zijn ook welkom. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.hardware.name; Algemene discussie over &os; hardware Algemene discussie over de typen hardware waar &os; op draait en problemen en oplossingen over wat te kopen en wat vooral niet. &a.hubs.name; Mirrorsites Aankondigingen en discussie voor beheerders van &os; mirrorsites. &a.isp.name; Onderwerpen voor Internet Service Providers Deze mailinglijst is voor het bespreken van relevante onderwerpen voor Internet Service Providers (ISP's) die &os; gebruiken. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.newbies.name; Bespreken activiteiten voor nieuwelingen (newbies) Hier worden alle mogelijke activiteiten voor nieuwelingen besproken die niet al ergens anders worden besproken, waaronder: onafhankelijk leren en problemen oplossen, bronnen vinden en gebruiken, hulp zoeken, hoe en welke mailinglijsten te gebruiken, algemene onderwerpen, fouten maken, pochen, ideeën delen, verhalen, morele (maar geen technische) ondersteuning en actief deelnemen in de &os; gemeenschap. Problemen en vragen horen thuis in freebsd-questions en freebsd-newbies gaat om het ontmoeten van anderen die met dezelfde dingen bezig zijn als de andere nieuwelingen. &a.openoffice.name; OpenOffice.org Discussie over het porten en beheren van OpenOffice.org en &staroffice;. &a.performance.name; Discussie over het optimaliseren of versnellen van &os; Deze mailinglijst is een platform voor hackers, beheerders en/of andere belanghebbenden om &os; en prestaties gerelateerde onderwerpen te bespreken. De onderwerpen die besproken kunnen worden omvatten &os; installaties met een hoge load, systemen met prestatieproblemen of systemen die tegen de limieten van &os; aan zitten. Zij die willen meewerken om de prestaties van &os; te verbeteren worden sterk aangemoedigd op deze lijst te abonneren. Deze lijst is bijzonder technisch en bijzonder geschikt voor ervaren &os; gebruikers, hackers en beheerders die &os; snel, robuust en schaalbaar willen houden. Deze lijst is geen vraag-en-antwoord lijst die dient als vervanging voor het lezen van documentatie, maar hier worden bijdragen geleverd of vragen gesteld over nog niet eerder beschreven prestatie gerelateerde onderwerpen. &a.pf.name; Discussie en vragen over het pakketfilter firewall systeem Discussie over het pakketfilter (pf) firewall systeem aangaande &os;. Technische discussie en gebruikersvragen zijn beiden welkom. Deze lijst is ook de plaats om het ALTQ QoS framework te bespreken. &a.platforms.name; Porten van niet-&intel; platforms Cross-platform &os; zaken, algemene discussie en voorstellen voor niet-&intel; &os; ports. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.policy.name; Kernteam beleidsbeslissingen Dit is een laag volume, alleen-lezen mailinglijst voor beleidsbeslissingen van het &os; Kernteam. &a.ports.name; Discussie over ports Discussie over de Portscollectie (/usr/ports) van &os;, de ports infrastructuur en algemene coördinatie aangaande ports. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.ports-bugs.name; Discussie over ports bugs Discussie over problem reports voor de &os; Portscollectie (/usr/ports), voorgestelde ports of aanpassingen aan ports. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.python.name; Python op &os; Dit is een lijst voor discussie gerelateerd aan het verbeteren van ondersteuning voor Python op &os;. Dit is een technische mailinglijst. Hij is voor mensen die aan het porten van Python, aanverwante modules en Zope dingen naar &os; werken. &a.questions.name; Gebruikersvragen Dit is de mailinglijst voor vragen over &os;. Er horen geen how to vragen op de technische mailinglijsten thuis, tenzij een vraag erg technisch van aard is. &a.scsi.name; SCSI subsysteem Dit is de mailinglijst voor mensen die aan het SCSI subsysteem voor &os; werken. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.security.name; Beveiligingsonderwerpen &os; computerbeveiligingsonderwerpen (DES, Kerberos, bekende beveiligingsgaten, oplossingen, enzovoort). Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. Dit is zeker geen vraag-en-antwoord lijst, maar bijdragen voor de FAQ (zowel vraag als antwoord) zijn welkom. &a.security-notifications.name; Beveiligingswaarschuwingen Waarschuwingen voor &os; beveiligingsproblemen en oplossingen. Dit is geen discussielijst. De discussielijst is &a.security.name;. &a.small.name; &os; gebruiken in embedded toepassingen Op deze lijst worden onderwerpen gerelateerd aan ongebruikelijk kleine en enbedded &os; installaties besproken. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.stable.name; Discussie over het gebruik van &os.stable; Dit is de mailinglijst voor gebruikers van &os.stable;. Er worden ook waarschuwingen op gepost over nieuwe opties in -STABLE die invloed op de systemen van gebruikers kunnen hebben en instructies over de te nemen stappen om -STABLE te blijven. Iedereen die STABLE draait hoort zich op deze lijst te abonneren. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.standards.name; Conformeren C99 & POSIX Dit is een forum voor technische bespreking gerelateerd aan het conformeren van &os; aan de C99 en de POSIX standaarden. &a.usb.name; Discussie over &os; ondersteuning voor USB Dit is de mailinglijst voor technische bespreking van onderwerpen gerelateerd aan &os; ondersteuning voor USB. &a.usergroups.name; Gebruikersgroep Coördinatie Lijst Dit is de mailinglijst voor coördinatoren voor alle lokale gebruikersgroepen, zodat ze met elkaar en een lid van het Kernteam zaken kunnen bespreken. Deze lijst hoort beperkt te blijven tot een overzicht van overleggen en de coördinatie van projecten waarbij meerdere gebruikersgroepen betrokken zijn. &a.vendors.name; Verkopers Coördinatie en discussie tussen het &os; project en verkopers van software en hardware voor &os;. Filters op de mailinglijsten De &os; mailinglijsten worden op verschillende manieren gefilterd om het doorsturen van spam, virussen en andere ongewenste e–mail te beperken. De hieronder beschreven filteracties bevatten niet alle genomen acties voor de beveiliging van de mailinglijsten. Er is een beperkt aantal typen bijlagen toegestaan op de mailinglijsten. Alle bijlagen met een MIME content type dat niet in de onderstaande lijst staat worden verwijderd voordat de mail wordt doorgestuurd naar de mailinglijsten. application/octet-stream application/pdf application/pgp-signature application/x-pkcs7-signature message/rfc822 multipart/alternative multipart/related multipart/signed text/html text/plain text/x-diff text/x-patch Sommige mailinglijsten staan wellicht bijlagen toe met andere MIME content typen, maar de bovenstaande lijst zal gelden voor de meeste mailinglijsten. Als een e–mail zowel een HTML als een platte tekst versie bevat, dan wordt de HTML versie verwijderd. Als een mail alleen een HTML versie bevat, dan wordt die omgezet naar platte tekst. Usenet nieuwsgroepen Naast de twee specifieke &os; nieuwsgroepen zijn er nog veel andere waarin &os; wordt besproken of die anderszins relevant zijn voor &os; gebruikers. Er zijn sleutelwoord doorzoekbare archieven voor een aantal van die nieuwsgroepen, met dank aan Warren Toomey wkt@cs.adfa.edu.au. Specifieke BSD nieuwsgroepen comp.unix.bsd.freebsd.announce comp.unix.bsd.freebsd.misc de.comp.os.unix.bsd (Duits) fr.comp.os.bsd (Frans) it.comp.os.freebsd (Italiaans) Overige interessante &unix; nieuwsgroepen comp.unix comp.unix.questions comp.unix.admin comp.unix.programmer comp.unix.shell comp.unix.user-friendly comp.security.unix comp.sources.unix comp.unix.advocacy comp.unix.misc comp.bugs.4bsd comp.bugs.4bsd.ucb-fixes comp.unix.bsd X Window systeem comp.windows.x.i386unix comp.windows.x comp.windows.x.apps comp.windows.x.announce comp.windows.x.intrinsics comp.windows.x.motif comp.windows.x.pex comp.emulators.ms-windows.wine World wide web servers Onderstaande lijst met World Wide Web Servers wordt automatisch samengesteld om zo actueel mogelijk te zijn en is daarom niet vertaald. &chap.eresources.www.inc; E–mail adressen De onderstaande gebruikersgroepen bieden &os; gerelateerde e–mail adressen aan voor hun leden. De aangegeven beheerders behouden zich het recht voor om een account te verwijderen als die op enigerlei wijze wordt misbruikt. Domein Faciliteiten Gebruikersgroep Beheerder ukug.uk.FreeBSD.org Alleen forwarden freebsd-users@uk.FreeBSD.org Lee Johnston lee@uk.FreeBSD.org Shell accounts De onderstaande gebruikersgroepen bieden shell accounts aan voor mensen die het &os; project actief ondersteunen. De aangegeven beheerders behouden zich het recht voor om een account te verwijderen als die op enigerlei wijze wordt misbruikt. Host Toegang Faciliteiten Beheerder dogma.freebsd-uk.eu.org Telnet/FTP/SSH E–mail, webhosting, anonieme FTP Lee Johnston lee@uk.FreeBSD.org diff --git a/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.sgml index f26d64cbcc..395a4110bd 100644 --- a/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/firewalls/chapter.sgml @@ -1,3487 +1,3489 @@ Joseph J. Barbish Bijgedragen door Brad Davis Omgezet naar SGML en bijgewerkt door Siebrand Mazeland Vertaald door Firewalls firewall beveiliging firewalls Inleiding Firewalls bieden de mogelijkheid om inkomend en uitgaand verkeer op een systeem te filteren. Een firewall gebruikt daarvoor een of meer groepen regels (rules) om netwerkpakketten te inspecteren als ze binnenkomen of weggaan door netwerkverbindingen en staat dat verkeer dan toe of blokkeert het. De regels van een firewall kunnen één of meerdere eigenschappen van pakketten onderzoeken waaronder, maar niet uitsluitend, het protocol, het bron- of bestemmingsadres en de bron- en bestemmingspoort. Firewalls kunnen de veiligheid van een host of netwerk enorm vergroten. Ze kunnen één of meer van de volgende dingen doen: Applicaties, diensten en machines op een intern netwerk te beschermen tegen ongewild verkeer van het internet. Toegang tot internet voor interne hosts te limiteren of uitschakelen. Ondersteuning bieden voor netwerkadres vertaling (network address translation of NAT), waarmee er vanaf een intern netwerk met private IP adressen een internetverbinding gedeeld kan worden met één IP adres of met een groep van publieke adressen die automatisch wordt toegewezen. Na het lezen van dit hoofdstuk weet de lezer: Hoe pakketfilteringsregels op de juiste wijze samengesteld kunnen worden; De verschillen tussen de firewalls die bij &os; worden geleverd; Hoe de OpenBSD firewall PF te gebruiken en in te stellen; Hoe IPFILTER te gebruiken en in te stellen; Hoe IPFW te gebruiken en in te stellen. Er wordt aangenomen dat de lezer van dit hoofdstuk: Basisbegrip heeft van &os; en internetconcepten. Firewallconcepten firewall sets regels Er zijn twee basismogelijkheden om sets met regels te maken voor firewalls: inclusief of exclusief. Een exclusieve firewall staat al het verkeer door behalve het verkeer dat past bij de set met regels. Een inclusieve firewall doet het tegenovergestelde. Die staat alleen verkeer toe dat past bij de regels en blokkeert al het overige verkeer. Inclusieve firewalls zijn in het algemeen veiliger dan exclusieve firewalls omdat ze het risico op het toestaan van ongewild verkeer door een firewall aanzienlijk reduceren. De beveiliging kan nog verder vergroot worden met een stateful firewall. Een stateful firewall houdt bij welke connecties er door de firewall tot stand zijn gekomen en laat alleen verkeer door dat bij een bestaande connectie hoort of onderdeeel is van een connectie in opbouw. Het nadeel van een stateful firewall is dat die kwetsbaar kan zijn voor Ontzegging van Dienst (DoS) aanvallen als er een groot aantal nieuwe verbindingen binnen korte tijd wordt opgezet. Met de meeste firewalls is het mogelijk een combinatie te maken van stateful en niet stateful gedrag om een optimale firewall voor een site te maken. Firewallsoftware &os; heeft drie soorten firewallsoftware in de - basisinstallatie. Dat zijn IPFILTER (ook bekend als IPF), - IPFIREWALL (ook bekend als IPFW) en PF (de pakketfilter van - OpenBSD). IPFIREWALL heeft ingebouwde mogelijkheden om - bandbreedte te regelen met de DUMMYNET traffic - shaper. IPFILTER heeft geen traffic shaper om - bandbreedte te regelen, maar dit kan wel gedaan worden met de - port ALTQ. DUMMYNET en ALTQ worden meestal - gebruikt door ISPs en bedrijven. IPF, IPFW en PF gebruiken - regels om de toegang van pakketten tot een systeem te regelen, - hoewel ze dat op andere manieren doen en de syntaxis voor regels - anders is. - - De voorbeeldregels voor IPFW (in - /etc/rc.firewall) die meekomen met de - basisinstallatie zijn verouderd en gecompliceerd en ze maken - geen gebruik van stateful regels op de interface die in - verbinding staat met internet. Daar wordt alleen gebruik - gemaakt van staatloze regels die alleen poorten voor diensten - open of dicht kunnen zetten. De stateful regels die in dit - onderdeel staan zijn de opvolger van dat wat in - /etc/rc.firewall met het basissysteem - meekomt. - - Stateful regels hebben technisch geavanceerde - inspectiemogelijkheden om bescherming te bieden tegen de - overvloed aan methoden die door aanvallers gebruikt - worden. - - Zowel IPF, IPFW als PF kunnen nog steeds de staatloze - regels gebruikt blijven worden. Die verouderde regels worden - in dit onderdeel niet behandeld. Hier worden alleen de nieuwe, - moderne stateful regels en de volgorde waarin die van - toepassing zijn behandeld. - - We raden aan de mogelijkheden van beide firewalls te - bestuderen om te bepalen welke firewall in een situatie het - beste past. + basisinstallatie. Dat zijn: IPFILTER (ook bekend als IPF), + IPFIREWALL (ook bekend als IPFW) en de pakketfilter van + OpenBSD (ook bekend als PF). &os; heeft ook twee ingebouwde + pakketten voor het regelen van verkeer (in de basis het + beheersen van bandbreedtegebruik): &man.altq.4; en + &man.dummynet.4;. Dummynet is traditioneel sterk verbonden met + IPFW en ALTQ met + IPF/PF. IPF, IPFW en PF + gebruiken allemaal regels om de toegang van pakketten tot een + systeem te regelen, hoewel ze dat op andere manieren doen en de + syntaxis voor regels anders is. + + De reden dat er meerdere firewallpakketten in &os; zitten is + dat verschillende mensen verschillende eisen en voorkeuren + hebben. Geen enkel firewallpakket is het beste. De schrijver van dit artikel geeft de voorkeur aan IPFILTER omdat daarmee stateful regels minder complex zijn toe te passen in een omgeving waar NAT wordt gebruikt en IPF heeft een ingebouwde ftp proxy waardoor de regels voor het - veilig gebruiken van FTP eenvoudiger worden. Daarnaast past - het beter bij het kennisniveau van een onervaren - firewallgebruiker. + veilig gebruiken van FTP eenvoudiger worden. Omdat alle firewalls gebaseerd zijn op het inspecteren van - aangegeven controlevelden in pakketten, moet iemand die + aangegeven controlevelden in pakketten, moet iemand die sets van firewallregels opstelt begrijpen hoe TCP/IP werkt, welke waarde de controlevelden kunnen hebben en hoe die waarden gebruikt worden in normaal verkeer. Op de volgende webpagina wordt een prima uitleg gegeven: . De OpenBSD Packet Filter (PF) en <acronym>ALTQ</acronym> firewall PF Vanaf juli 2003 is de OpenBSD firewalltoepassing PF geporteerd naar &os; wn bwschikbaar gekomen in de &os; Portscollectie. In november 2004 was &os; 5.3 de eerste release die PF bevatte is integraal onderdeel van het basissysteem. PF is een complete en volledige firewall die optioneel ALTQ bevat (Alternate Queuing). ALTQ biedt Quality of Service (QoS) bandbreedtebeheersing waardoor een bepaalde bandbreedte gegarandeerd kan worden aan verschillende diensten op basis van filterregels. Het OpenBSD project zorgt voor een erg goed gebruikershandboek voor PF (PF User's Guide) dat niet in dit onderdeel wordt opgenomen omdat dat niet nodig is. Hieronder wordt de beschikbaarheid van PF voor de verschillende &os; releases en versies weergegeven: &os; Versie PF Beschikbaarheid Pre-4.X versie PF is niet beschikbaar voor uitgaven van &os; ouder dan de tak 4.X. Alle versies van de tak 4.X PF is beschikbaar als onderdeel van KAME. 5.X uitgaven voor 5.3-RELEASE De port security/pf kan gebruikt worden om PF te installeren op deze versie van &os;. Deze uitgaven waren gericht op ontwikkelaars en mensen die een voorproefje wilden hebben van vroege versies van 5.X. Het wordt sterk aangeraden om te upgraden naar 5.3-RELEASE of een nieuwere versie van &os;. 5.3-RELEASE en latere versies PF onderdeel van het basissysteem. Gebruik de port security/pf op deze versies van &os; niet. Dat werkt niet en dus dient de &man.pf.4;-ondersteuning uit het basissysteem gebruikt te worden. Meer informatie staat op de PF voor &os; website: . Het OpenBSD PF gebruikershandboek staat hier: . PF in &os; 5.X staat op het niveau van OpenBSD versie 3.5. De port uit de &os; Portscollectie is op het niveau van OpenBSD versie 3.4. Houd dit in gedachten bij het doornemen van het gebruikershandboek. PF inschakelen PF zit in de basisinstallatie van &os; voor versies vanaf 5.3 als aparte run time laadbare module. Een systeem laadt de PF laadbare module dynamisch in de kernel als pf_enable="YES" in rc.conf staat. In de laadbare module is loggen via &man.pflog.4; ingeschakeld. + + + De module verwacht dat options INET en + device bpf beschikbaar zijn. Tenzij + NOINET6 was ingesteld (bijvoorbeeld in + &man.make.conf.5;) tijdens het bouwen, is ook + options INET6 nodig. + Kernelopties kernelopties device pf kernelopties device pflog kernelopties device pfsync Het is niet verplicht om PF in te schakelen door het mee te compileren in de &os; kernel. Dit wordt alleen beschreven als achtergrondinformatie. Door PF in de kernel te compileren wordt de laadbare module niet gebruikt. Voorbeeld kernelinstellingen voor PF staan beschreven in de /usr/src/sys/conf/NOTES kernel source en worden hier weergegeven: device pf device pflog device pfsync device pf schakelt ondersteuning voor de Packet Filter firewall in. device pflog schakelt het optionele &man.pflog.4; pseudo netwerkapparaat in dat gebruikt kan worden om verkeer te loggen naar een &man.bpf.4; descriptor. De &man.pflogd.8; daemon kan gebruikt worden om de logboekinformatie naar schijf te schrijven. device pfsync schakelt het optionele &man.pfsync.4; pseudo netwerkapparaat in waarmee de state wijzigingen gemonitord kunnen worden. Omdat dit geen onderdeel is van de laadbare module, moet dit in een aangepaste kernel gebouwd worden om het te kunnen gebruiken. Deze instellingen worden pas actief nadat een kernel waarvoor deze instellingen zijn gemaakt is gebouwd en geïnstalleerd. Beschikbare opties voor <filename>rc.conf</filename> De volgende instellingen moeten in /etc/rc.conf staan om PF bij het booten te activeren: pf_enable="YES" # Schakel PF in (laad module als nodig) pf_rules="/etc/pf.conf" # bestand met regels voor pf pf_flags="" # aanvullende vraagen voor opstarten pfctl pflog_enable="YES" # start pflogd(8) pflog_logfile="/var/log/pflog" # waar pflogd het logboekbestand moet opslaan pflog_flags="" # aanvullende vlaggen voor opstarten pflogd Als er een LAN achter de firewall staat en er pakketten doorgestuurd moeten worden naar computers op dat LAN of als NAT actief is, dan moet de volgende optie ook ingesteld worden: gateway_enable="YES" # Schakel in als LAN gateway <acronym>ALTQ</acronym> inschakelen ALTQ is alleen beschikbaar door de opties in de &os; Kernel te compileren. ALTQ wordt niet door alle netwerkkaartstuurprogramma's ondersteund. In &man.altq.4; staat een lijst met ondersteunde stuurprogramma's voor de betreffende versie. Met de volgende opties wordt ALTQ ingeschakeld en additionele functionaliteit toegevoegd: options ALTQ options ALTQ_CBQ # Class Bases Queuing (CBQ) options ALTQ_RED # Random Early Detection (RED) options ALTQ_RIO # RED In/Out options ALTQ_HFSC # Hierarchical Packet Scheduler (HFSC) options ALTQ_PRIQ # Priority Queuing (PRIQ) options ALTQ_NOPCC # Required for SMP build options ALTQ schakelt het ALTQ framework in. options ALTQ_CBQ schakelt Class Based Queuing (CBQ) in. Met CBQ kan de bandbreedte van een verbinding worden opgedeeld in verschillende klasses of wachtrijen om verkeer te prioriteren op basis van filterregels. options ALTQ_RED schakelt Random Early Detection (RED) in. RED wordt gebruikt om netwerkverstopping te voorkomen. RED doet dit door de lengte van de wachtrij te meten en die te vergelijken met de minimale en maximale drempelwaarden voor de wachtrij. Als de wachtrij groter is dan de maximale waarde worden alle nieuwe pakketten genegeerd. Het werkt naar zijn naam, dus RED negeert willekeurig pakketten van verschillende verbindingen. options ALTQ_RIO schakelt Random Early Detection In and Out in. options ALTQ_HFSC schakelt de Hierarchical Fair Service Curve Packet Scheduler in. Meer informatie over HFSC staat op . options ALTQ_PRIQ schakelt Priority Queuing (PRIQ) in. PRIQ laat verkeerd dat in een hogere wachtrij staat altijd eerder door. options ALTQ_NOPCC schakelt SMP ondersteuning voor ALTQ in. Deze optie is verplicht op SMP systemen. De IPFILTER (IPF) firewall firewall IPFILTER + + Aan dit onderdeel wordt nog gewerkt. De inhoud is wellicht + niet altijd volledig en juist. + + Darren Reed is de auteur van IPFILTER, dat niet afhankelijk is van één besturingssysteem. Het is een open source applicatie die is geporteerd naar &os;, NetBSD, OpenBSD, SunOS, HP/UX en Solaris besturingssystemen. IPFILTER wordt actief ondersteund en onderhouden en er worden regelmatig nieuwe versies uigebracht. IPFILTER is gebaseerd op een firewall aan de kernelkant en een NAT mechanisme dat gecontroleerd en gemonitord kan worden door programma's in userland. De firewallregels kunnen ingesteld of verwijderd worden met het hulpprogramma &man.ipf.8;. De NAT regels kunnen ingesteld of verwijderd worden met &man.ipnat.1;. Het programma &man.ipfstat.8; kan actuele statistieken leveren voor de kernelonderdelen van IPFILTER. &man.ipmon.8; kan acties van IPFILTER wegschrijven naar logboekbestanden van het systeem. IPF is oorspronkelijk geschreven met logica die regels verwerkte volgens het principe de laatst passende regel wint en gebruikte toen alleen staatloze regels. In de loop der tijd is IPF verbeterd en zijn de opties quick en keep state toegevoegd waarmee de logica van het verwerken van regels drastisch is gemoderniseerd. In de officiële documentatie van IPF worden de verouderde regels en verwerkingslogica behandeld. De moderne functies worden alleen behandeld als opties, waardoor hun nut dat er een veiliger firewall mee te maken volledig onderbelicht blijft. De instructies in dit hoofdstuk zijn gebaseerd op regels die gebruik maken van de optie quick en de stateful optie keep state. Dit is het raamwerk waarmee een set van inclusieve firewallregels wordt samengesteld. Een inclusieve firewall staat alleen pakketten toe die voldoen aan de regels. Op die manier kan er in de hand gehouden worden welke diensten van binnen de firewall naar buiten mogen en welke diensten op het private netwerk vanaf het internet bereikbaar zijn. Al het andere verkeer wordt vanuit het ontwerp standaard geblokkeerd en gelogd. Inclusieve firewalls zijn veel veiliger dan exclusieve firewalls. Het is ook de enige wijze voor de opzet van een firewall die in dit hoofdstuk wordt behandeld. Voor een gedetailleerde uitleg over de verwerking van de verouderde regels zie en . De IPF FAQ is te vinden op . IPF inschakelen IPFILTER inschakelen IPF zit in de basisinstallatie van &os; als een aparte run time laadbare module. Een systeem laadt de IPF kernel laadbare module dynamisch als ipfilter_enable="YES" in rc.conf staat. Voor de laadbare module zijn de opties logging en default pass all ingeschakeld. IPF hoeft niet in de kernel gecompileerd te worden om het standaardgedrag te wijzigen naar block all. Dat is mogelijk door als laatste regel een regel toe te voegen die al het verkeer blokkeert. Kernelopties kernelopties IPFILTER kernelopties IPFILTER_LOG kernelopties IPFILTER_DEFAULT_BLOCK IPFILTER kernelopties Het is niet verplicht om IPF in te schakelen door de volgende opties in de &os; kernel te compileren. Dit wordt alleen beschreven als achtergrondinformatie. Door IPF in de kernel te compileren wordt de laadbare module niet gebruikt. Voorbeeld kernelinstellingen voor IPF staan beschreven in de /usr/src/sys/i386/conf/LINTin de kernelbroncode (/usr/src/sys/arch/conf/LINT voor &os; 4.X) en worden hier beschreven: options IPFILTER options IPFILTER_LOG options IPFILTER_DEFAULT_BLOCK options IPFILTER schakelt ondersteuning voor de IPFILTER firewall in. options IPFILTER_LOG schakelt de optie in waarmee IPF verkeer kan loggen door het naar het ipl pakketloggende pseudo–apparaat te schrijven voor iedere regel met het sleutelwoord log erin. options IPFILTER_DEFAULT_BLOCK wijzigt het standaardgedrag zodat ieder pakket waarop geen enkele pass regel van toepassing is wordt geblokkeerd. Deze instelling worden pas actief nadat een kernel waarvoor deze instellingen zijn gemaakt is gebouwd en geïnstalleerd. Beschikbare opties voor rc.conf De volgende instellingen moeten in /etc/rc.conf staan om IPF bij het booten te activeren: ipfilter_enable="YES" # Start ipf firewall ipfilter_rules="/etc/ipf.rules" # laad regels uit het doelbestand ipmon_enable="YES" # Start IP monitor log ipmon_flags="-Ds" # D = start als daemon # s = log naar syslog # v = log tcp window, ack, seq # n = vertaal IP & poort naar namen Als er een LAN achter de firewall staat dat gebruik maakt van IP adressen uit de privaat reeks, dan moet de volgende optie ook ingesteld worden om NAT functionaliteit in te schakelen: gateway_enable="YES" # Schakel in als LAN gateway ipnat_enable="YES" # Start ipnat functie ipnat_rules="/etc/ipnat.rules" # bestand met regels voor ipnat IPF ipf &man.ipf.8; wordt gebruikt om het bestand met firewallregels te laden. Gewoonlijk wordt er een bestand aangemaakt waarin de situatieafhankelijke regels staan waarmee in één keer de bestaande regels kunnen worden vervangen: &prompt.root; ipf -Fa -f /etc/ipf.rules : verwijder alle interne tabellen met regels. : laad het aangegeven bestand met regels. Hiermee wordt het mogelijk wijzigingen te maken aan het bestand met eigen regels en met &man.ipf.8; de firewall aan te passen met verse regels zonder het systeem te booten. Deze methode is erg handig om nieuwe regels te testen omdat dit zo vaak als nodig gedaan kan worden. In &man.ipf.8; worden alle opties die beschikbaar zijn toegelicht. &man.ipf.8; verwacht dat het bestand met regels een standaard tekstbestand is. Het accepteert geen bestand met regels dat is opgesteld als een script dat gebruik maakt van substitutie. Er is wel een mogelijkheid om IPF regels op te stellen en gebruik te maken van substitutie. Meer informatie staat in . IPFSTAT ipfstat IPFILTER statistieken &man.ipfstat.8; haalt de totalen van de statistieken op die horen bij de firewall sinds die is gestart en toont deze. Het kan ook zijn dat de tellers in tussentijd op nul zijn gesteld met ipf –Z. In &man.ipfstat.8; worden alle details behandeld. Standaard ziet &man.ipfstat.8; uitvoer er ongeveer als volgt uit: input packets: blocked 99286 passed 1255609 nomatch 14686 counted 0 output packets: blocked 4200 passed 1284345 nomatch 14687 counted 0 input packets logged: blocked 99286 passed 0 output packets logged: blocked 0 passed 0 packets logged: input 0 output 0 log failures: input 3898 output 0 fragment state(in): kept 0 lost 0 fragment state(out): kept 0 lost 0 packet state(in): kept 169364 lost 0 packet state(out): kept 431395 lost 0 ICMP replies: 0 TCP RSTs sent: 0 Result cache hits(in): 1215208 (out): 1098963 IN Pullups succeeded: 2 failed: 0 OUT Pullups succeeded: 0 failed: 0 Fastroute successes: 0 failures: 0 TCP cksum fails(in): 0 (out): 0 Packet log flags set: (0) Als er als optie voor inkomend of voor uitgaand wordt meegegeven, dan wordt de juiste lijst met regels die de kernel op dat moment gebruikt weergegeven. ipfstat –in toont de tabel met regels voor inkomend verkeer met regelnummers ipfstat –on toont de tabel met regels voor uitgaand verkeer met regelnummers De uitvoer ziet er ongeveer als volgt uit: @1 pass out on xl0 from any to any @2 block out on dc0 from any to any @3 pass out quick on dc0 proto tcp/udp from any to any keep state ipfstat –ih toont de tabel met regels voor inkomend verkeer, waarbij voor iedere regel staat hoe vaak die van toepassing was. ipfstat –oh toont de tabel met regels voor uitgaand verkeer, waarbij voor iedere regel staat hoe vaak die van toepassing was. De uitvoer ziet er ongeveer als volgt uit: 2451423 pass out on xl0 from any to any 354727 block out on dc0 from any to any 430918 pass out quick on dc0 proto tcp/udp from any to any keep state Een van de belangrijkste functies van ipfstat is de vlag waarmee de staat-tabel wordt getoond op een wijze die vergelijkbaar is met de wijze waarop &man.top.1; de draaiende &os; procestabel toont. Als een firewall wordt aangevallen dan geeft deze functie de mogelijkheid om de pakketten van de aanvaller te identificeren en nader te onderzoeken. De optionele subvlaggen bieden de mogelijkheid om een bron of bestemmings IP adres, poort of protocol aan te geven dat gemonitord moet worden. Details zijn na te lezen in &man.ipfstat.8;. IPMON ipmon IPFILTER loggen Om &man.ipmon.8; te laten werken zoals bedoeld, moet de kerneloptie IPFILTER_LOG aan staan. Dit commando kan op twee verschillende wijzen gebruikt worden. De standaard is van toepassing als het commando op de commandoregel wordt ingegeven zonder de optie . De daemon wordt gebruikt als continu een systeemlogboek bijgewerkt moet worden zodat het mogelijk is om gebeurtenissen in het verleden te bekijken. Zo zijn &os; en IPFILTER ingesteld om samen te werken. &os; heeft ingebouwde mogelijkheden om automatisch syslogs te roteren. Daarom is het beter om de uitvoer naar &man.syslogd.8; te geschrijven dan naar een gewoon bestand. In rc.conf is te zien dat de instelling ipmon_flags de waarde heeft: ipmon_flags="-Ds" # D = start als daemon # s = log naar syslog # v = log tcp window, ack, seq # n = vertaal IP & poort naar namen De voordelen van loggen zijn duidelijk. Het biedt de mogelijkheid om na het feit informatie na te zien als: welke pakketten heeft de firewall laten vallen, waar kwamen ze vandaan en waar gingen ze heen? Dit zijn allemaal voordelen als het gaat om uitvinden waar een aanvaller vandaan komt en wat hij heeft geprobeerd. Zelfs als loggen is ingeschakeld logt IPF nog niets uit zichzelf. De beheerder van de firewall beslist welke actieve regels iets weg moeten schrijven door het sleutelwoord log aan die regels toe te voegen. Gewoonlijk worden alleen deny regels gelogd. Het is heel normaal om als laatste regel een deny regel aan de set met regels toe te voegen waar het sleutelwoord log in staat. Zo krijgt een beheerder alle pakketten te zien waarop geen enkele regel van toepassing was. Loggen met IPMON Syslogd heeft een eigen methode om logboekgegevens te scheiden. Het maakt gebruik van speciale groepen die facility en level heten. &man.ipmon.8; in mode gebruikt local0 als facilitynaam. Alle door &man.ipmon.8; gelogde gegevens gaan naar local0. De nu volgende levels kunnen gebruikt worden om de gelogde gegevens nog verder uit elkaar te trekken als dat gewenst is. LOG_INFO – pakketten gelogd met het sleutelwoord "log" als actie in plaats van pass of block. LOG_NOTICE – gelogde pakketten die ook zijn doorgelaten LOG_WARNING – gelogde pakketten die ook geblokkeerd zijn LOG_ERR – gelogde pakketten die een verkeerde opbouw hebben, "short" Om IPFILTER alle gelogde gegevens naar /var/log/ipfilter.log te laten schrijven, dient dat bestand te bestaan. Dat kan met het volgende commando: &prompt.root; touch /var/log/ipfilter.log De syslogfunctie wordt beheerd met instellingen in /etc/syslog.conf. syslog.conf biedt aanzienlijke flexibiliteit in hoe syslog omgaat met systeemberichten die door softwaretoepassingen als IPF worden gegeven. Zo kan de volgende instelling toegevoegd worden aan /etc/syslog.conf: local0.* /var/log/ipfilter.log local0.* betekent dat alle logberichten naar de aangegeven plaats geschreven moeten worden. Om de wijzigingen in /etc/syslog.conf actief te maken kan er gereboot worden of is het mogelijk de syslogtaak een schop te geven zodat /etc/syslog.conf opnieuw wordt ingelezen met /etc/rc.d/syslogd reload. Voor &os; 4.X is dit killall -HUP syslogd. Het PID (procesnummer) is te achterhalen door een overzicht van taken te tonen met ps –ax. Het PID is het nummer in de linker kolom voor de regel waarop syslog staat. Vaak wordt vergeten /etc/newsyslog.conf te wijzigen om het nieuw aangemaakte logboekbestand te laten roteren. De opmaak van gelogde berichten Berichten die door ipmon wordt gezonden bestaan uit velden die gescheiden worden door een spatie. Velden die in alle berichten zitten zijn: De datum waarop het pakket is ontvangen. De tijd waarop het pakket is ontvangen weergegeven als HH:MM:SS.F voor uren, minuten, seconden en fracties van een seconde. De fractie kan meerdere cijfers lang zijn. De naam van de interface waarop het pakket is ontvangen, bijvoorbeeld dc0. De groep en regelnummer van de regel, bijvoorbeeld @0:17. Deze kunnen ingezien worden met ipfstat -in. De acties: p voor doorgelaten (passed), b voor geblokkeerd (blocked), S voor een verkeerd pakket (short packet), n voor dat er geen enkele regel van toepassing was, L voor een logboekregel. De volgorde waarin deze acties getoond worden is: S, p, b, n, L. Een hoofdletter P of B betekent dat het pakket gelogd is vanwege een globale instelling, niet vanwege één regel in het bijzonder. De adressen. Dit zijn eigenlijk drie velden: het bronadres en poort gescheiden door een komma het symbool –> en het bestemmingsadres en poort. 209.53.17.22,80 –> 198.73.220.17,1722. Achter PR staat de naam van het protocol of het nummer, bijvoorbeeld PR tcp. Achter len staan de lengte van de pakketkop en de totale lengte van het pakket, bijvoorbeeld len 20 40. Als het pakket een TCP pakket is, dan is er nog een veld dat begint met een verbindingsstreepje met daarachter letters die overeenkomen met vlaggen die ingeschakeld waren. In &man.ipmon.8; is een lijst met letters en bijbehorende vlaggen te vinden. Als het pakket een ICMP pakket is, dan worden aan het einde twee velden toegevoegd. Het eerste is altijd ICMP en het volgende het ICMP bericht en subbericht type, gescheiden door een slash, bijvoorbeeld ICMP 3/3 voor een poort niet bereikbaar bericht. Script met regels met substitutie bouwen Geoefende gebruikers van IPF maken een bestand dat de regels bevat en stellen dat op zo'n manier op dat het uitgevoerd kan worden als een script met substitutie. Het grote voordeel van deze werkwijze is dat er dan alleen de waarde van een variabele gewijzigd hoeft te worden en dat als het script opnieuw wordt uitgevoerd, op alle plaatsen waar de variabele wordt gebruikt, de nieuwe waarde in de regels wordt opgenomen. Omdat het een script is, kan substitutie gebruik worden om vaak voorkomende waarden de definiëren zodat ze in meerdere regels vervangen kunnen worden. Dit wordt geïllustreerd in het onderstaande voorbeeld. De syntaxis die in het script wordt gebruikt is compatibel met de shells sh, csh en tcsh. Velden waarvoor substitutie van toepassing is worden vooraf gegaan door het dollarteken $. Definities worden niet vooraf gegaan door het voorvoegsel $. De waarden van een definitie moet omsloten worden door dubbele aanhalingstekens ("). Een set regels begint wellicht als volgt: ############## Begin IPF regels script ######################### oif="dc0" # naam van de uitgaande interface odns="192.0.2.11" # IP adres van DNS server ISP myip="192.0.2.7" # statische IP adres gekregen van ISP ks="keep state" fks="flags S keep state" # Er kan gekozen worden om dit script te gebruiken om een eigen # /etc/ipf.rules script te maken of dit script kan gebruikt worden # "as is" # # Haal bij één van deze regels het commentaarteken weg # en plaats hem bij de ander. # # 1) Deze kan gebruikt worden om /etc/ipf.rules te maken: #cat > /etc/ipf.rules << EOF # 2) Deze kan gebruikt worden om het script "as is" te starten: # Let op: er moet een lege regel zijn na het EOF teken. /sbin/ipf -Fa -f - << EOF # Verleen toegang tot de DNS van de ISP. pass out quick on $oif proto tcp from any to $odns port = 53 $fks pass out quick on $oif proto udp from any to $odns port = 53 $ks # Sta uitgaand verkeer voor niet beveiligd www verkeer toe pass out quick on $oif proto tcp from $myip to any port = 80 $fks # Sta uitgaand verkeer voor beveiligd www verkeer toe (https over TLS SSL) pass out quick on $oif proto tcp from $myip to any port = 443 $fks EOF ################## Einde IPF regels script ######################## Dat is alles. De regels zijn niet van belang in dit voorbeeld, maar tonen hoe substitutievelden worden gedefinieerd en hoe ze worden gebruikt. Als het bovenstaande voorbeeld de inhoud van /etc/ipf.rules.script was, dan kon het geladen worden door het vanaf de commandoregel aan te roepen: &prompt.root; sh /etc/ipf.rules.script Er is wel een probleem met het gebruik van regels in combinatie met substitutie. IPF snapt het niet en kan deze scripts niet direct lezen. Dit script kan gebruikt worden op één van de volgende twee manieren: Haal het commentaarteken weg bij de regel die begint met cat en zet het commentaarteken bij de regel die begint met /sbin/ipf. Plaats ipfilter_enable="YES" in /etc/rc.conf zoals gewoonlijk en start het script eenmalig na elke wijziging om /etc/ipf.rules te maken of bij te werken. Schakel IPFILTER uit in de systeem opstart scripts door ipfilter_enable="NO" toe te voegen aan /etc/rc.conf (dit is de standaardwaarde). Voeg een script zoals de volgende toe aan de /usr/local/etc/rc.d opstart directory. Het script zou een duidelijke naam moeten hebben zoals ipf.loadrules.sh. De .sh is noodzakelijk. #!/bin/sh sh /etc/ipf.rules.script De permissies op dit script moeten zijn: lezen,schrijven en uitvoeren voor de gebruiker root. &prompt.root; chmod 700 /usr/local/etc/rc.d/ipf.loadrules.sh Als het systeem nu herstart, worden de regels via het script gestart. Sets van IPF regels Een set regels is een groep ipf regels die is gemaakt om pakketten toe te staan of te blokkeren op basis van de eigenschappen van dat pakket. De bi-directionele uitwisseling van pakketten tussen hosts bestaat uit een gesprek dat een sessie heet. De set van firewallregels beoordeelt pakketten twee keer: als het aankomt van de host op het publieke internet en als het de host weer verlaat op de weg terug naar de host op het publieke internet. Iedere TCP/IP dienst als telnet, www, mail, etc, heeft zijn eigen protocol, bron IP adres en bestemmings IP adres of de bron- en bestemmingspoort. Deze attributen vormen de basis voor het opstellen van regels waarmee diensten toegelaten of geblokkeerd kunnen worden. IPFILTER volgorde regelverwerking IPF is oorspronkelijk geschreven met logica die regels verwerkte volgens het principe de laatst passende regel wint en gebruikte toen alleen staatloze regels. In de loop der tijd is IPF verbeterd en zijn de opties quick en keep state toegevoegd waarmee de logica van het verwerken van regels drastisch is gemoderniseerd. De instructies in dit hoofdstuk zijn gebaseerd op regels die gebruik maken van de optie quick en de stateful optie keep state. Dit is het raamwerk waarmee een set van inclusieve firewallregels wordt samengesteld. Een inclusieve firewall staat alleen diensten toe die voldoen aan de regels. Op die manier kan er in de hand gehouden worden welke diensten van binnen de firewall naar buiten mogen en welke diensten op het private netwerk vanaf het internet bereikbaar zijn. Al het andere verkeer wordt vanuit het ontwerp standaard geblokkeerd en gelogd. Inclusieve firewalls zijn veel veiliger dan exclusieve firewalls. Het is ook de enige wijze voor de opzet van een firewall die in dit hoofdstuk wordt behandeld. Werk bij het wijzigen van firewallregels zeer voorzichtig. Met sommige instellingen is een server niet meer bereikbaar. Om het veilig te spelen is het aan te raden de eerste instellingen vanaf het console te maken, in plaats van via ssh. Regelsyntaxis IPFILTER regelsyntaxis De regelsyntaxis die hier wordt besproken is versimpeld door alleen de moderne stateful regels en de eerste van toepassing zijnde regel wint te belichten. De complete regelsyntaxis is na te lezen in &man.ipf.8 Het karakter # wordt gebruikt om het begin van een opmerking te markeren en zowel op een eigen regel als achter een firewallregel staan. Lege regels worden genegeerd. Regels bevatten sleutelwoorden die in een bepaalde volgorde van links naar rechts op een regel horen te staan. Sleutelwoorden worden vet weergegeven. Sommige sleutelwoorden hebben subopties die zelf ook weer sleutelwoorden hebben die ook weer subopties kunnen hebben. Alle opties die hier direct onder staan, worden daaronder uitgebreid weergegeven en verderop in dit hoofdstuk in een aparte paragraaf behandeld. ACTIE IN/UIT OPTIES SELECTIE STATEFUL PROTO BRON_ADR,BEST_ADR OBJECT POORT_NUM TCP_VLAG STATEFUL ACTIE = block | pass IN/UIT = in | out OPTIES = log | quick | on interfacenaam SELECTIE = protowaarde | bron/bestemming IP | poort = nummer | flags flag–value PROTO = tcp/udp | udp | tcp | icmp BRON_ADR,BEST_ADR = all | from object to object OBJECT = IP adres | any POORT_NUM = poortnummer TCP_VLAG = S STATEFUL = keep state ACTIE De actie geeft aan wat er met het pakket gedaan moet worden als het van toepassing is op de rest van de filterregel. Iedere regel moet een actie hebben. De volgende acties zijn mogelijk: block geeft aan dat het pakket moet verdwijnen als de parameters van toepassing zijn het het pakket. pass geeft aan dat het pakket doorgelaten moet worden als de parameters van toepassing zijn op het pakket. IN/UIT Een verplicht onderdeel voor iedere filterregel waarin expliciet wordt aangegeven op welke zijde van de in/uit hij van toepassing is. Het volgende sleutelwoord moet in of out zijn, anders is de regel syntactisch onjuist. in betekent dat de regel van toepassing is op inkomende pakketten. out betekent dat de regel van toepassing is op inkomende pakketten. OPTIES Deze opties moeten in de volgorde waarin ze hier beschreven staan gebruikt worden. log geeft aan dat het pakket naar het ipl logboekbestand geschreven moeten worden (zoals verderop beschreven staat in de paragraaf Loggen) als de regel van toepassing is op het pakket. quick geeft aan dat als een regel van toepassing is, dat de laatste regel moet zijn die wordt gecontroleerd, waardoor er een pad wordt kortgesloten waardoor de volgende regels voor dat pakket niet meer gecontroleerd worden. Deze optie is voor de moderne regels eigenlijk verplicht. on geeft de interface aan die in de parameters meegenomen moet worden. De namen van interfaces kunnen getoond worden met &man.ifconfig.8;. Als deze optie wordt gebruikt, kan een regel alleen van toepassing zijn als het pakket door de aangegeven interface gaat in de richting die is aangegeven (in/out). Ook deze optie is verplicht voor de moderne regels. Als een pakket wordt gelogd, dan wordt de kop van het pakket weggeschreven naar het ipl pakketloggende pseudo–apparaat. Direct na het sleutelwoord log mogen de volgende opties gebruikt worden (in de aangegeven volgorde): body geeft aan dat de eerste 128 bytes van de inhoud van het pakket worden opgeslagen na de kop. first; als het sleutelwoord log samen met keep state wordt gebruikt, wordt het aangeraden om deze optie ook te gebruiken zodat alleen het pakket dat als eerste in de sessie van toepassing was en niet ook alle pakketten die daarna in de sessie volgens keep state van toepassing zijn. SELECTIE De sleutelwoorden in deze paragraaf worden gebruikt om attributen van het pakket dat wordt geïnspecteerd te beschrijven om te bepalen of een regel wel of niet van toepassing is. Er is een sleutelwoord en er zijn subopties waarvan er één of meer gekozen moeten worden. De volgende attributen zijn beschikbaar voor het proces en moeten in de aangegeven volgorde worden gebruikt: PROTO proto is het sleutelwoord dat moet worden aangegeven samen met een van de sleutelwoorden uit de subopties. De waarde geeft een bepaald protocol aan dat van toepassing moet zijn. Ook deze optie is verplicht voor de moderne regels. tcp/udp, tcp, udp, icmp of ieder ander protocol dat in /etc/protocols staat wordt herkend en kan gebruikt worden. Het bijzondere protocol sleutelwoord tcp/udp kan gebruikt worden om zowel voor TCP als UDP pakketten van toepassing te laten zijn. Het is toegevoegd voor het gemak om vrijwel gelijke regels te voorkomen. BRON_ADR/BEST_ADR Het sleutelwoord all is in feite hetzelfde als from any to any zonder overige parameters. from bron to dest; de sleutelwoorden from en to worden gebruikt om te testen op IP adressen. In regels moet zowel een bron als bestemmings IP adres aangegeven worden. any is een bijzonder sleutelwoord dat van toepassing is voor ieder IP adres als in from any to any of from 0.0.0.0/0 to any of from any to 0.0.0.0/0 of from 0.0.0.0 to any of from any to 0.0.0.0. IP adressen mogen ingevoerd worden in de vorm numeriek, door punten gescheiden adres/maskerlengte of als een enkelvoudig IP adres in de vorm numeriek, door punten gescheiden. Het is vaak lastig om te komen tot een reeks adressen in de vorm adres/masker. De volgende webpagina kan daar wellicht bij helpen: . POORT Als in een regel op een poort wordt gecontroleerd, voor bron- of bestemmingspoort of beiden, dan is dat alleen van toepassing op TCP en UDP pakketten. Bij het maken van poortvergelijkingen kunnen zowel de dienstnamen uit /etc/services als een uit een natuurlijk getal bestaand poortnummer ingesteld worden. Als de poort onderdeel is van het from object dan wordt het vergeleken met het poortnummer van de bron en als het onderdeel is van het to object, dan wordt het vergeleken met het poortnummer van de bestemming. Het gebruik van het to object is in de moderne regels verplicht en neemt de vorm aan van from any to any port = 80. Poortvergelijkingen kunnen op verschillende manieren ingesteld worden met een aantal verschillende operators. Er kunnen ook reeksen van poorten ingesteld worden. port = of een van de volgende operators: !=, <, >, <, >=, eq, ne, lt, gt, le, ge. Reeksen van poorten worden met de volgende optie aangegeven: port <> of ><. De volgende twee parameters die betrekking hebben op bron en bestemming, zijn verplicht in de moderne regels. TCP_VLAG Vlaggen zijn alleen beschikbaar voor het filteren van TCP. De letters staan voor de mogelijke vlaggen die bekeken kunnen worden in de kop van een TCP pakket. In de moderne regels wordt de optie flags S gebruikt om het verzoek tot het starten van een TCP sessie. STATEFUL keep state geeft aan dat in een regel met pass voor alle pakketten die van toepassing zijn stateful gefilterd moet worden. Deze optie is voor moderne regels verplicht. Stateful filteren IPFILTER stateful filteren Met stateful filteren wordt verkeer benaderd als een uitwisseling van pakketten tussen twee kanten die een sessie zijn. Als het is ingeschakeld, dan maakt het mechamisme dynamisch interne regels voor pakketten die in de sessie horen te volgen. Het kan bekijken of de karakteristieken van de sessie tussen verzender en ontvanger de juiste procedure volgen. Alle pakketten die niet passen in de sessie, worden automatisch geblokkeerd. keep state staat ook ICMP pakketten toe die gerelateerd zijn aan een TCP of UDP sessie. Dus als er een ICMP type 3 code 4 komt in antwoord op websurfen, dat wordt toegestaan van binnen naar buiten door een keep state regel, dan wordt dat toegelaten. Pakketten waarvan IPF zeker is dat ze onderdeel zijn van de sessie worden toegelaten, zelfs als ze van een ander protocol zijn. Wat er gebeurt: pakketten die naar buiten gaan op de interface die met internet is verbonden worden eerst vergeleken met de dynamische staattabel. Als een pakket voldoet aan de verwachting van het volgende pakket in de sessie, dan mag het de firewall verlaten en wordt de staattabel bijgewerkt. De overige pakketten worden vergeleken met de set van regels voor uitgaand verkeer. Pakketten die binnenkomen op de interface die met internet is verbonden worden eerst vergeleken met de dynamische staattabel. Als een pakket voldoet aan de verwachting van het volgende pakket in de sessie, dan mag het de firewall verlaten en wordt de staattabel bijgewerkt. De overige pakketten worden vergeleken met de set van regels voor uitgaand verkeer. Als de sessie wordt beëindigd wordt hij uit de dynamische staattabel verwijderd. Met stateful filteren is het mogelijk om de focus te leggen op het blokkeren of toestaan van nieuwe sessies. Als een nieuwe sessie tot stand mag komen, dan worden alle volgende pakketten automatisch doorgelaten en al het vervalste verkeer wordt automatisch tegegehouden. Als een nieuwe sessie wordt geweigerd, dan wordt geen enkel pakket doorgelaten. Met stateful filteren zijn er uitgebreide mogelijkheden voor onderzoek om bescherming te bieden tegen de veelheid aan aanvallen die tegenwoorden door aanvallers worden uitgevoerd. Voorbeeld van inclusieve regels De onderstaande regels zijn een voorbeeld van hoe een erg veilige inclusieve firewall opgezet kan worden. Een inclusieve firewall staat alleen diensten toe die passen bij de pass regels en blokkeert al het overige verkeer. Alle firewalls hebben tenminste twee interfaces waarop regels van toepassing zijn om de firewall te laten werken. Alle &unix; systemen en dus ook &os; zijn zo ontworpen dat ze voor interne communicatie de interface lo0 en IP adres 127.0.0.1 gebruiken. De firewall moet dit interne verkeer gewoon doorgang laten vinden. Voor de interface die is verbonden met het publieke internet worden regels gemaakt waarmee sessies naar het internet mogelijk gemaakt worden en toegang wordt gegeven voor pakketten die uit die sessies terug komen. Dit kan de PPP interface tun0 zijn of de netwerkkaart die is verbonden met een xDSL of kabelmodem. In gevallen dat er één of meer netwerkkaarten zijn aangesloten op het LAN achter de firewall, dan moeten er op de firewall regels zijn om het verkeer tussen die interfaces vrije doorgang te geven. De regels worden opgedeeld in drie onderdelen: alle interfaces met vrije doorgang, uitgaand op publieke interfaces en inkomend op publieke interfaces. In iedere sectie moeten zo staan dat de regels die het meest gebruikt worden vóór de regels die minder vaak gebruikt worden staan. De laatste regel van een onderdeel geeft aan dat al het overige verkeer op die interface in die richting geblokkeerd en gelogd moet worden. In het onderdeel Uitgaand staan alleen regels met pass die parameters bevatten om individuele diensten beschikbaar te maken zodat er internet toegang is. Al die regels moeten gebruik maken van quick, on, proto, port en keep state. De regels met proto tcp maken ook gebruik van flag om te bekijken of het een pakket betreft voor het opzetten van een sessie om de stateful functionaliteit aan te sturen. In het onderdeel Inkomend staan alle regels voor het blokkeren van ongewenste pakketten eerst om twee redenen. Als eerste kan het zo zijn dat wat er wordt geblokkeerd later toegestaan zou worden door regels die diensten toestaan. De tweede reden is dat nu ongewenste pakketten die vaak voor komen en die bij voorkeur niet in de logboeken voor komen niet meer van toepassing zijn op de laatste regel van het onderdeel waarin ze zouden worden gelogd. Met de laatste regel van dit onderdeel worden alle overige pakketten geblokkeerd en gelogd en ze kunnen bewijsmateriaal zijn in een zaak tegen iemand die heeft geprobeerd een systeem aan te vallen. Voor al het verkeer dat wordt geweigerd wordt geen antwoord gestuurd. De pakketten verdwijnen gewoon. Zo weet een aanvaller niet of een pakket het doelsysteem wel heeft bereikt. Zo kan een aanvaller geen informatie verzamelen over een systeem: hoe minder informatie er over een systeem - beschikbaar is, hoe veiliger het is. Zo wordt bijvoorbeeld - een inkomend verzoek van een nmap OS - fingerprint gelogd omdat een aanvaller zoiets zou - proberen. + beschikbaar is, hoe meer tijd iemand erin moet steken voordat + er iets slechts gedaan kan worden. Zo wordt bijvoorbeeld + een inkomend verzoek van een nmap OS fingerprint + gelogd omdat een aanvaller zoiets zou proberen. We raden aan om als er logmeldingen komen van een regel met log first het commando ipfstat -hio uit te voeren om te bekijken hoe vaak de regel van toepassing is geweest om te kijken of de firewall overspoeld wordt, m.a.w. aangevallen wordt. Als er pakketten gelogd worden waarvan de beheerder het poortnummer niet herkent, dan is de functie van dat poortnummer na te zoeken in /etc/services of op . Op de volgende link worden poortnummers van Trojans beschreven: . De onderstaande set regels is een complete en erg veilige inclusieve set met regels voor een firewall die de auteur zelf heeft gebruikt op zijn syteem. Deze set met regels is een aanrader en eenvoudig aan te passen door commentaar te maken van een regel voor een dienst die niet gewenst is. Logberichten die niet gewenst zijn, zijn uit te sluiten door ze met een regel te blokkeren in het begin van het onderdeel Inkomend. Voor de onderstaande regels dient de dc0 interfacenaam in iedere regel vervangen te worden door de interfacenaam van de netwerkkaart in het systeem die met het publieke internet is verbonden. Voor gebruikers van PPP zou dat tun0 zijn. Dit zou de inhoud van /etc/ipf.rules kunnen zijn: ################################################################# # Geen beperkingen op de interface aan de LAN kant. # Niet nodig als er geen LAN is. ################################################################ #pass out quick on xl0 all #pass in quick on xl0 all ################################################################# # Geen beperkingen op de loopback interface ################################################################# pass in quick on lo0 all pass out quick on lo0 all ################################################################# # Interface aan het publieke internet (onderdeel Uitgaand). # Inspecteer verzoeken om een sessie te starten van achter de # firewall op het private netwerk of vanaf de server zelf naar # het publieke internet. ################################################################# # Geef toegang tot de DNS server van de ISP. # xxx moet het IP adres van de DNS van de ISP zijn. # Dupliceer deze regels als een ISP meedere DNS servers heeft. # Haal het IP adres evt. uit /etc/resolv.conf. pass out quick on dc0 proto tcp from any to xxx port = 53 flags S keep state pass out quick on dc0 proto udp from any to xxx port = 53 keep state # Geef toegang tot de DHCP server van de ISP voor kabel- en # xDSL-netwerken. Deze regel is niet nodig als gebruik gemaakt worden # van PPP naar het publieke internet. In dat geval kan de hele groep # verwijderd worden. Gebruik de volgende regel en controleer het # logboek voor het IP adres. Wijzig dan het IP adres in de regel # commentaar hieronder en verwijder de eerste regel. pass out log quick on dc0 proto udp from any to any port = 67 keep state #pass out quick on dc0 proto udp from any to z.z.z.z port = 67 keep state # Sta niet beveiligd www verkeer toe. pass out quick on dc0 proto tcp from any to any port = 80 flags S keep state # Sta beveiligd www verkeer over TLS SSL toe. pass out quick on dc0 proto tcp from any to any port = 443 flags S keep state # Sta het verzenden en ontvangen van e-mail toe. pass out quick on dc0 proto tcp from any to any port = 110 flags S keep state pass out quick on dc0 proto tcp from any to any port = 25 flags S keep state # Sta Time toe. pass out quick on dc0 proto tcp from any to any port = 37 flags S keep state # Sta NNTP nieuws toe. pass out quick on dc0 proto tcp from any to any port = 119 flags S keep state # Sta lokale en LAN gebruiker toe niet beveiligde FTP te gebruiken # (zowel passieve als actieve modes). Deze functie maakt gebruik van # de in IPNAT ingebouwde FTP proxy die in het bestand met nat regels # staat om dit in één regel te laten werken. Als er met # pkg_add packages toegevoegd moeten kunnen worden op een systeem, dan # is deze regel nodig. pass out quick on dc0 proto tcp from any to any port = 21 flags S keep state # Sta beveiligde FTP, Telnet en SCP toe. # Deze functie maakt gebruik van SSH (secure shell) pass out quick on dc0 proto tcp from any to any port = 22 flags S keep state # Sta uitgaande niet beveiligde telnet toe. pass out quick on dc0 proto tcp from any to any port = 23 flags S keep state # Sta de &os; CVSUP functie toe. pass out quick on dc0 proto tcp from any to any port = 5999 flags S keep state # Sta ping toe naar het publieke internet. pass out quick on dc0 proto icmp from any to any icmp–type 8 keep state # Sta whois toe vanaf overal naar het publieke internet. pass out quick on dc0 proto tcp from any to any port = 43 flags S keep state # Blokkeer en log het eerste voorkomen van al het andere dat probeert # buiten te komen. Deze regel dwingt de 'block all' logica af. block out log first quick on dc0 all ################################################################# # Interface aan het publieke internet (onderdeel Inkomend). # Inspecteert pakketten die van het publieke internet komen # met als bestemming de host zelf of het private netwerk. ################################################################# # Blokkeer al het verkeer voor niet–routeerbare of gereserveerde # adresreeksen. block in quick on dc0 from 192.168.0.0/16 to any #RFC 1918 privaat IP block in quick on dc0 from 172.16.0.0/12 to any #RFC 1918 privaat IP block in quick on dc0 from 10.0.0.0/8 to any #RFC 1918 privaat IP block in quick on dc0 from 127.0.0.0/8 to any #loopback block in quick on dc0 from 0.0.0.0/8 to any #loopback block in quick on dc0 from 169.254.0.0/16 to any #DHCP auto–config block in quick on dc0 from 192.0.2.0/24 to any #gereserveerd voor documentatie block in quick on dc0 from 204.152.64.0/23 to any #Sun cluster interconnect block in quick on dc0 from 224.0.0.0/3 to any #Klasse D & E multicast ##### Blokkeer wat vervelende dingen ############ # die niet in de logboeken moeten komen. # Blokkeer flagmenten. block in quick on dc0 all with frags # Block korte TCP pakketten. block in quick on dc0 proto tcp all with short # Blokkeer source gerouteerde pakketten. block in quick on dc0 all with opt lsrr block in quick on dc0 all with opt ssrr # Blokkeer pogingen voor nmap OS fingerprint. # Log first occurrence of these so I can get their IP address block in log first quick on dc0 proto tcp from any to any flags FUP # Blokkeer alles met speciale opties. block in quick on dc0 all with ipopts # Blokkeer publieke pings. block in quick on dc0 proto icmp all icmp–type 8 # Blokkeer ident. block in quick on dc0 proto tcp from any to any port = 113 # Blokkeer alle Netbios diensten. 137=naam, 138=datagram, 139=sessie. # Netbios is de &windows; bestandsdeeldienst. # Blokkeer &windows; hosts2 name server verzoeken 81. block in log first quick on dc0 proto tcp/udp from any to any port = 137 block in log first quick on dc0 proto tcp/udp from any to any port = 138 block in log first quick on dc0 proto tcp/udp from any to any port = 139 block in log first quick on dc0 proto tcp/udp from any to any port = 81 # Sta inkomend verkeer toe van de DHCP server van de ISP. Deze regel # moet het IP adres van de DHCP server van de ISP bevatten omdat die # de enige toegestane bron van dit type pakketten moet zijn. Alleen # van belang voor kabel en xDSL instellingen. Deze regel is niet nodig # voor PPP verbindingen naar het publieke internet. Dit is hetzelfde # IP adres dat in het Uitgaande onderdeel is opgezocht. pass in quick on dc0 proto udp from z.z.z.z to any port = 68 keep state # Sta inkomend webverkeer toe omdat er een Apache server draait. pass in quick on dc0 proto tcp from any to any port = 80 flags S keep state # Sta niet beveiligde telnet sessie toe vanaf het publieke internet. # Dit heeft het label niet veilig omdat gebruikersnaam en # wachtwoord als platte tekst over internet gaan. Als er geen telnet # server draait, hoeft deze regel niet actief te zijn. #pass in quick on dc0 proto tcp from any to any port = 23 flags S keep state # Sta beveiligde FTP, telnet en SCP toe vanaf internet. # Deze functie gebruik SSH(secure shell). pass in quick on dc0 proto tcp from any to any port = 22 flags S keep state # Blokkeer en log het eerste voorkomen van al het andere dat probeert # binnen te komen. Het loggen van alleen het eerste voorkomen stopt # een ontzegging van dienst aanval die gericht is op het laten # vollopen van de partitie waarop de logboeken staan. Deze regel dwingt # de 'block all' logica af. block in log first quick on dc0 all ################### Einde van de regels ################################### <acronym>NAT</acronym> NAT IP masquerading NAT network address translation NAT netwerkadres vertaling NAT NAT staat voor Network Address Translation (netwerkadres vertaling). In &linux; heet dit IP Masquerading. Een van de vele mogelijkheden die IPF NAT kan bieden is het delen van één IP adres op het publieke internet met een LAN achter een firewall. De vraag zou kunnen rijzen waarom iemand dat zou willen. ISP's wijzen normaliter namelijk dynamisch een IP adres toe aan hun niet-commerciële gebruikers. Dynamisch betekent hier dat het IP adres iedere dat er wordt ingebeld of dat de kabel- of xDSL-modem uit- en aangeschakeld wordt anders kan zijn. Dit IP adres is het adres waarmee een netwerkapparaat bekend is op het publieke internet. Stel dat er vijf PC's in een huis staan en iedere computer in dat huis heeft toegang tot internet nodig. Dan zouden er bij een ISP vijf individuele accounts moeten zijn en vijf telefoonlijnen om dat te realiseren. Met NAT is er maar één account bij een ISP nodig en moeten er vier PC's met kabels op een switch aangesloten waarop ook een &os; systeem is aangesloten dat als gateway gaat opereren. NAT zal automatisch de private LAN IP adressen van alle PC's vertalen naar een enkel publiek IP adres als de pakketten de firewall naar het internet verlaten. NAT wordt vaak gebruikt zonder toestemming of wetenschap van een ISP en in de meeste gevallen is het, als het wordt ontdekt, grond voor een ISP om de account op te zeggen. Commerciële gebruikers betalen veel meer voor hun internet verbindingen en krijgen vaak een reeks statische IP adressen die nooit verandert. Een ISP verwacht en staat toe dat commerciële gebruikers NAT inzetten voor connectiviteit voor hun interne netwerk. Er is een speciale reeks van IP adressen gereserveerd voor NAT op LANs. Volgens RFC 1918 kunnen de volgende reeksen IP adressen gebruikt worden op private netwerken die nooit direct op het publieke internet gerouteerd worden. Eerste IP Laatste IP 10.0.0.0 10.255.255.255 172.16.0.0 172.31.255.255 192.168.0.0 192.168.255.255 IP<acronym>NAT</acronym> NAT en IPFILTER ipnat NAT regels worden geladen met ipnat. De NAT regels worden vaak opgeslagen in /etc/ipnat.rules . Meer details staan in &man.ipnat.1;. Bij het maken van wijzigingen aan de NAT regels nadat NAT gestart is, wordt aangeraden de wijziging aan het bestand met regels te maken en daarna met ipnat alle actieve NAT regels te wissen. Daarna kunnen de regels uit het bestand weer als volgt geladen worden: &prompt.root; ipnat -CF -f /etc/ipnat.rules Gebruiksgegevens over NAT kunnen getoond worden met: &prompt.root; ipnat -s De huidige inhoud van de NAT tabellen kan getoond worden met: &prompt.root; ipnat -l Met het volgende commando kan de uitgebreide rapportage worden ingeschakeld en dan wordt informatie over het verwerken van verkeer en de actieve regels getoond: &prompt.root; ipnat –v IP<acronym>NAT</acronym> regels NAT regels zijn erg flexibel en er kunnen veel dingen mee gedaan worden om behoeften van bedrijven en thuisgebruikers in te vullen. De syntaxis van de regels die hier wordt toegelicht is vereenvoudigd om te passen bij een niet-commerciële omgeving. De complete syntaxis is na te lezen in &man.ipnat.5;. De syntaxis voor een NAT regel ziet er ongeveer als volgt uit: map IF LAN_IP_REEKS –> PUBLIEK_ADRES De regel begint met het sleutelwoord map. IF dient vervangen te worden door de aanduiding van de externe interface. LAN_IP_REEKS is de reeks die clients op een LAN gebruiken, meestal iets van 192.168.1.0/24. PUBLIEK_ADRES kan het publieke IP adres zijn of een speciaal sleutelwoord 0.32, wat betekent dat het IP adres van IF gebruikt moet worden. Hoe <acronym>NAT</acronym> werkt Een pakket komt vanaf het LAN aan bij de firewall en heeft een publieke bestemming. Het wordt verwerkt door de filterregels voor inkomend verkeer en daarna krijgt NAT de kans zijn regels op het pakket toe te passen. De regels worden van boven naar beneden toegepast en de eerste regel die van toepassing is wint. NAT controleert voor alle regels het pakket op interfacenaam en bron IP adres. Als de interfacenaam van een pakket past bij een NAT regel dan wordt het bron IP adres van dat pakket gecontroleerd, dat is dus een IP adres op het private LAN, om te bekijken of het valt in de reeks die is opgegeven aan de linkerkant van een NAT regel. Als ook dat klopt, dan wordt het bron IP adres van het pakket vervangen (rewritten) door een publiek IP adres dat verkregen kan zijn met het sleutelwoord 0.32. NAT werkt dan zijn interne NAT tabel bij, zodat als er een pakket uit die sessie terugkomt van het publieke internet, dat pakket weer gepast kan worden bij het originele private IP adres en door de firewallregels gefilterd kan worden om daarna, als dat mag, naar een client gestuurd te worden. IP<acronym>NAT</acronym> inschakelen Voor IPNAT zijn de onderstaande instellingen in /etc/rc.conf beschikbaar. Om verkeer tussen interfaces te kunnen routeren: gateway_enable="YES" Om IPNAT automatisch te starten: ipnat_enable="YES" Om aan te geven waar de IPNAT regels staan: ipnat_rules="/etc/ipnat.rules" <acronym>NAT</acronym> voor een groot LAN Voor netwerken met grote aantallen PC's of netwerken met meerdere LAN's kan het een probleem worden om al die private IP adressen met één enkel publiek IP adres te vervangen, omdat vaak dezelfde poortnummers gebruikt worden. Er zijn twee manieren om dit probleem op te lossen. Aangeven welke poorten te gebruiken Een normale regel voor NAT ziet er als volgt uit: map dc0 192.168.1.0/24 –> 0.32 Met de bovenstaande regel blijft de bronpoort ongewijzigd als het pakket door IPNAT gaat. Door gebruik te maken van het sleutelwoord portmap kan IPNAT ingesteld worden om alleen bronpoorten in de aangegeven reeks te gebruiken. Zo stelt de onderstaande regel in dat IPNAT de bronpoort aanpast naar een poortnummer dat in de aangegeven reeks valt: map dc0 192.168.1.0/24 –> 0.32 portmap tcp/udp 20000:60000 Het kan nog eenvoudiger door gebruik te maken van het sleutelwoord auto zodat IPNAT zelf bepaalt welke poorten gebruikt kunnen worden: map dc0 192.168.1.0/24 –> 0.32 portmap tcp/udp auto Meerdere publieke adressen gebruiken In grote netwerken komt er een moment waarop er gewoon te veel adressen zijn om te bedienen met één IP adres. De volgende regel vertaalt alle verbindingen naar 204.134.75.1: map dc0 192.168.1.0/24 –> 204.134.75.1 Dit kan gewijzigd worden naar een reeks addressen met de volgende regel: map dc0 192.168.1.0/24 –> 204.134.75.1–10 Er kan ook een subnet aangegeven worden met een CIDR notatie als in het volgende voorbeeld: map dc0 192.168.1.0/24 –> 204.134.75.0/24 Poorten omleiden Het is erg gebruikelijk om een webserver, mailserver, database server en DNS server op verschillende computers op een LAN te draaien. Het uitgaande verkeer van die servers kan dan met NAT afgehandeld worden, maar er moet ook ingesteld worden dat inkomend verkeer bij de juiste computer terecht komt. IPNAT gebruikt daarvoor de opties in NAT waarmee verkeer omgeleid kan worden. Als bijvoorbeeld een webserver op 10.0.10.25 draait en het publieke IP adres zou 20.20.20.5 zijn, dan zou dit mogelijk zijn met één van de volgende twee regels: map dc0 20.20.20.5/32 port 80 –> 10.0.10.25 port 80 map dc0 0/32 port 80 –> 10.0.10.25 port 80 Voor een DNS server op een LAN die ook vanuit internet bereikbaar met zijn en die draait op 10.0.10.33 zou de regel er als volgt uit zien: map dc0 20.20.20.5/32 port 53 –> 10.0.10.33 port 53 udp FTP en <acronym>NAT</acronym> FTP is dinosaurus uit het tijdperk van voor internet was zoals het nu is, toen onderzoeksinstellingen met elkaar verbonden waren via huurlijnen en FTP de aangewezen methode was om bestanden met elkaar uit te wisselen. Maar bij het gebruik van FTP worden gebruikersnaam en wachtwoord als platte tekst verzonden en het protocol is nooit aangepast. FTP is er in twee smaken: actief en passief. Het verschil zit 'm in hoe het datakanaal wordt opgezet. De passieve variant is veiliger voor een gebruiker omdat bij deze variant beide communicatiekanalen door de client zelf worden opgezet. Op de volgende link zijn details over FTP na te lezen: . IP<acronym>NAT</acronym> regels IPNAT heeft een een speciale FTP proxy ingebouwd die kan worden ingeschakeld met een NAT map regel. Die kan al het uitgaande verkeer monitoren wat betreft opstartverzoeken voor sessies voor actieve en passieve FTP en dynamisch tijdelijke filterregels maken die alleen het poortnummer dat echt in gebruik is voor het datakanaal doorlaten. Hiermee wordt een veiligheidsrisico dat normaal gepaard gaat met FTP, namelijk het toestaan van grote reeksen hoge poortnummers, weggenomen. De volgende regel handelt al het FTP verkeer van het LAN af: map dc0 10.0.10.0/29 –> 0/32 proxy port 21 ftp/tcp De regel hieronder handelt het FTP verkeer van de gateway zelf af: map dc0 0.0.0.0/0 –> 0/32 proxy port 21 ftp/tcp Deze laatste regel handelt al het niet–FTP verkeer voor het LAN af: map dc0 10.0.10.0/29 –> 0/32 De FTP map regel hoort voor de normale regels te staan. Alle pakketten worden als eerste vergeleken met de eerste regel en zo verder. Eerst wordt gekeken over de interfacenaam overeenkomt, daarna het bron IP adres van het LAN en dan of het een FTP pakket is. Als dat allemaal klopt, dan maakt de speciale FTP proxy een tijdelijke filterregel die de pakketten uit de FTP sessie naar binnen en buiten doorlaat en ook NAT toepast op de FTP pakketten. Alle pakketten van het LAN die niet van het protocoltype FTP zijn en dus niet bij de eerste regel passen, worden tegen de derde regel gehouden die van toepassing is vanwege de interface en bron IP adres, zodat er dan NAT op toegepast wordt. IP<acronym>NAT</acronym> FTP filterregels Als de NAT FTP proxy wordt gebruikt is er maar één filterregel voor FTP nodig. Zonder de FTP proxy zouden er drie regels nodig zijn: # Sta LAN client toe te FTP-en naar internet # Actieve en passieve modes pass out quick on rl0 proto tcp from any to any port = 21 flags S keep state # Sta opzetten van het datakanaal voor passieve mode toe voor hoge poorten pass out quick on rl0 proto tcp from any to any port > 1024 flags S keep state # Laat het datakanaal van de FTP server binnen voor actieve mode pass in quick on rl0 proto tcp from any to any port = 20 flags S keep state FTP <acronym>NAT</acronym> proxy bug Vanaf &os; 4.9, waar IPFILTER versie 3.4.31 bij zit, werkt de FTP proxy volgens de documentatie tot de sessie wordt afgesloten. Als dit wordt gedaan dan worden pakketten die terug komen van de FTP server geblokkeerd en gelogd als inkomend op poort 21. De NAT FTP proxy lijkt zijn tijdelijke regels te vroeg te verwijderen, nog voordat het antwoord van de FTP server dat de verbinding gesloten kan worden is ontvangen. Er is een PR gepost op de ipf mailinglijst. Hoewel dit niet opgelost kan worden, is het mogelijk een regel in te stellen waarmee de ongewilde logboekregels niet ontstaan. Als alternatief is het mogelijk ze gewoon te negeren. De meeste mensen maken niet zoveel gebruik van uitgaande FTP. block in quick on rl0 proto tcp from any to any port = 21 IPFW firewall IPFW + + Aan dit onderdeel wordt nog gewerkt. De inhoud is wellicht + niet altijd volledig en juist. + + IPFIREWALL (IPFW) is een firewall die binnen &os; wordt ontwikkeld en onderhouden door vrijwilligers, leden van de staf. Het maakt gebruik van verouderde staatloze regels en een verouderde techniek om te realiseren wat eenvoudige stateful logica zou kunnen heten. + De set voorbeeldregels van IPFW (die in + /etc/rc.firewall staat) uit de standaard + &os; installatie is redelijk eenvoudig en niet voorbereid om + zonder wijzigingen gebruikt te worden. Het voorbeeld maakt geen + gebruik van stateful filteren, wat een voordeel is in de meeste + situaties. Daarom worden deze regels niet als basis gebruikt in + dit onderdeel. + De staatloze syntaxis van IPFW is krachtig door de technisch geavanceerde mogelijkheden van de regelsyntaxis die de kennis van de gemiddelde gebruiker van firewalls ver overstijgt. IPFW is gericht op de professionele gebruiker of de gevorderde thuisgebruiker die hoge eisen stelt aan de wijze waarop er met pakketten wordt omgegaan. Voordat de kracht van de IPFW regels echt ingezet kan worden, moet de gebruiker veel weten over de verschillende protocollen en de wijze waarop pakketten in elkaar zitten. Het tot op dat niveau behandelen van stof valt buiten de doelstellingen van dit boek. IPFW bestaat uit zeven componenten: de verwerkingseenheid voor de firewallregels, verantwoording, loggen, regels met divert (omleiden) waarmee NAT gebruikt kan worden en de speciale gevorderde mogelijkheden voor bandbreedte management DUMMYNET, de bridge mogelijkheden en de ipstealth mogelijkheden. IPFW inschakelen IPFW inschakelen IPFW zit bij de basisinstallatie van &os; als een losse in run-time laadbare module. Het systeem laadt de kernel module dynamisch als in rc.conf firewall_enable="YES" staat. IPFW hoeft niet in de &os; kernel gecompileerd te worden, tenzij het nodig is dat NAT beschikbaar is. Na het rebooten van een systeem met firewall_enable="YES" in rc.conf is het volgende bericht op het scherm te zien tijdens het booten: ipfw2 initialized, divert disabled, rule-based forwarding disabled, default to deny, logging disabled In de laadbare module zit de mogelijkheid om te loggen gecompileerd. In /etc/sysctl.conf kan een instelling gemaakt worden waardoor loggen na volgende herstarts wordt ingeschakeld: net.inet.ip.fw.verbose_limit=5 Kernelopties kernelopties IPFIREWALL kernelopties IPFIREWALL_VERBOSE kernelopties IPFIREWALL_VERBOSE_LIMIT IPFW kernelopties Het is niet verplicht om IPFW in te schakelen door het mee te compileren in de &os; kernel, tenzij de NAT functionaliteit beschikbaar moet zijn. Dit wordt alleen beschreven als achtergrondinformatie. Door IPFW in de kernel te compileren wordt de laadbare module niet gebruikt. options IPFIREWALL Met IPFIREWALL wordt IPFW ingeschakeld als deel van de kernel. options IPFIREWALL_VERBOSE Met IPFIREWALL_VERBOSE wordt het loggen van pakketten die worden verwerkt met IPFW mogelijk als het sleutelwoord in een regel staat. options IPFIREWALL_VERBOSE_LIMIT=5 Limiteert het aantal pakketten dat per regel wordt gelogd via &man.syslogd.8;. Deze optie kan gebruikt worden in vijandige omgevingen waar de activiteit van een firewall gelogd moet worden. Hierdoor kan een mogelijke ontzegging van dienst aanval door syslog flooding voorkomen worden. kernelopties IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_DEFAULT_TO_ACCEPT Met IPFIREWALL_DEFAULT_TO_ACCEPT wordt standaard alles door de firewall doorgelaten. Dit wordt aangeraden als iemand voor het eerst een firewall opzet. options IPV6FIREWALL options IPV6FIREWALL_VERBOSE options IPV6FIREWALL_VERBOSE_LIMIT options IPV6FIREWALL_DEFAULT_TO_ACCEPT Voor de bovenstaande opties geldt dat ze hetzelfde doen als de opties voor IPv4, alleen doen ze dat voor IPv6. Als IPv6 niet wordt gebruikt, dan wordt aangeraden de optie IPV6FIREWALL te gebruiken zonder regels, zodat al het IPv6 verkeer wordt geblokkeerd. kernelopties IPDIVERT options IPDIVERT Met IPDIVERT wordt de NAT functionaliteit ingeschakeld. Als IPFIREWALL_DEFAULT_TO_ACCEPT niet wordt gebruikt of de regels van de firewall staan geen verkeer toe, dan worden alle pakketten van en naar de machine waar dit voor geldt geblokkeerd. <filename>/etc/rc.conf</filename> opties Als IPFW niet in de kernel is gecompileerd, dan moet het geladen worden met de volgende instellingen in /etc/rc.conf: firewall_enable="YES" Om de firewallregels uit een bestand te laden kan de volgende instelling gebruikt worden: firewall_script="/etc/ipfw.rules" Om loggen in te schakelen: firewall_logging="YES" Het enige dat de variabele firewall_logging doet is de sysctlt variabele net.inet.ip.fw.verbose op de waarde 1 zetten (zie ). Er is geen variabele in rc.conf om logboeklimieten in te stellen, maar dat kan ingesteld worden via een sysctl variabele, handmatig of via het bestand /etc/sysctl.conf: net.inet.ip.fw.verbose_limit=5 Het commando <command>IPFW</command> ipfw ipfw wordt gebruikt om met de hand regels toe te voegen of te verwijderen als IPFW actief is. Het probleem met deze methode is dat, als het systeem down wordt gebracht, alle regels die gewijzigd of verwijderd zijn verloren gaan. Door alle regels in een bestand op te nemen dat bij het booten wordt geladen of door het bestand waarin de wijzigingen zijn gemaakt als een machine draait te laden bestaat die probleem niet. Met ipfw kunnen de actieve regels van de firewall op het scherm getoond worden. De verantwoordingsmogelijkeden van &man.ipfw.8; maken dynamisch tellers aan voor iedere regel en houden die bij voor alle pakketten die van toepassing zijn op die regel. Dit biedt ook een mogelijkheid om een regel te testen. Om alle regels in volgorde te tonen: &prompt.root; ipfw list Om alle regels te tonen met de tijd waarop deze voor het laatst van toepassing was: &prompt.root; ipfw –t list Het volgende commando kan gebruikt worden om de verantwoordingsinformatie, pakettellers en de regel zelf te tonen. De eerste kolom is het regelnummer met daarachter het aantal keren dat de regel van toepassing was voor inkomend verkeer, gevolgd door het aantal keren dat de regel van toepassing was voor uitgaand verkeer. Als laatste wordt de regel zelf getoond: &prompt.root; ipfw –a list Ook kunnen onder de statische regels de dynamische regels getoond worden: &prompt.root; ipfw –d list En de dynamische regels die verlopen zijn: &prompt.root; ipfw –d –e list De tellers op nul gesteld worden: &prompt.root; ipfw zero Alleen de tellers voor regel NUM op nul stellen: &prompt.root; ipfw zero NUM Sets van IPFW regels Een set regels is een groep &man.ipfw.8; regels die is gemaakt om pakketten toe te staan of te blokkeren op basis van de eigenschappen van dat pakket. De bi-directionele uitwisseling van pakketten tussen hosts bestaat uit een gesprek dat een sessie heet. De set van firewallregels beoordeelt pakketten twee keer: als het aankomt van de host op het publieke internet en als het de host weer verlaat op de weg terug naar de host op het publieke internet. Iedere TCP/IP dienst als telnet, www, mail, etc, heeft zijn eigen protocol, bron IP adres en bestemmings IP adres of de bron- en bestemmingspoort. Deze attributen vormen de basis voor het opstellen van regels waarmee diensten toegelaten of geblokkeerd kunnen worden. IPFW volgorde regelverwerking Als een pakket de firewall binnenkomt wordt het vergeleken met de eerste regel in de set regels en zo gaat dat voor iedere regel vanaf boven tot beneden. Als een regel van toepassing is op een pakket, dan wordt het actieveld van de regel uitgevoerd. Dit wordt de de eerst passende regel wint zoekmethode genoemd. Als een pakket bij geen enkele regel past, dan wordt de standaardregel 65535 toegepast, die alle pakketten weigert zonder een antwoord terug te sturen naar de verzender. Het zoeken gaat door na regels met count, skipto en tee. De instructies in dit onderdeel zijn gebaseerd op regels die gebruik maken van de stateful opties keep state, limit, in/out en via. Dit is het raamwerk waarmee een set van inclusieve firewallregels wordt samengesteld. Een inclusieve firewall staat alleen diensten toe die voldoen aan de regels. Op die manier kan er in de hand gehouden worden welke diensten van binnen de firewall naar buiten mogen en welke diensten op het private netwerk vanaf het internet bereikbaar zijn. Al het andere verkeer wordt vanuit het ontwerp standaard geblokkeerd en gelogd. Inclusieve firewalls zijn veel veiliger dan exclusieve firewalls. Het is ook de enige wijze voor de opzet van een firewall die in dit hoofdstuk wordt behandeld. Er wordt aangeraden voorzichtig te zijn als er vanaf het netwerk aan de firewallregels wordt gewerkt omdat het gevaar bestaat buitengesloten te worden. Regelsyntaxis IPFW regelsyntaxis De regelsyntaxis zoals hier toegelicht is vereenvoudigd door alleen te tonen wat nodig is om een standaard inclusieve set met firewallregels te maken. De complete beschijving van alle mogelijkheden staat in &man.ipfw.8;. Regels bevatten sleutelwoorden die in een bepaalde volgorde van links naar rechts op een regel horen te staan. Sleutelwoorden worden vet weergegeven. Sommige sleutelwoorden hebben subopties die zelf ook weer sleutelwoorden hebben die ook weer subopties kunnen hebben. Het karakter # wordt gebruikt om het begin van een opmerking te markeren en kan zowel op een eigen regel als achter een firewallregel staan. Lege regels worden genegeerd. CMD REGEL_NUMMER ACTIE LOGGEN SELECTIE STATEFUL CMD Iedere regel moet beginnen met add om hem toe te voegen aan de tabel met regels. REGEL_NUMMER Iedere regel moet een regelnummer hebben. ACTIE Bij een regel kunnen één of meer acties horen die worden uitgevoerd als een regel geldt voor een pakket. allow | accept | pass | permit Deze opties betekenen allemaal hetzelfde: als de regel geldt voor een pakket, laat dat pakket dan door en stop met het zoeken naar geldende regels. check–state Vergelijkt het pakket met de tabel met dynamische regels. Als het erin staat, dan wordt de actie van de dynamisch door deze regel gemaakte regel uitgevoerd. Anders wordt er verder gezocht door de regels. Een regel met check–state heeft geen selectiecriteria. Als er geen regel met check–state in de set met regels staat, dan wordt de tabel met dynamische regels bij het eerste voorkomen van keep–state of limit gecontroleerd. deny | drop Deze opties betekenen hetzelfde: als de regel geldt voor een pakket, blokkeer dat pakket dan en stop met het zoeken naar geldende regels. Loggen log of logamount Als een regel met het sleutelwoord log van toepassing is op een pakket, dan wordt er een bericht naar &man.syslogd.8; geschreven met de facilitynaam SECURITY. Er wordt alleen een bericht geschreven als het aantal voor die regel gelogde pakketten niet groter is dan de instelling logamount. Als logamount niet is ingesteld, dan wordt de limiet uit de &man.sysctl.8; variabele net.inet.ip.fw.verbose_limit gehaald. In beide gevallen bestaat er in het geval de waarde nul is geen limiet. Als de limiet is bereikt, dan kan het loggen weer ingeschakeld worden door de teller voor het loggen weer op nul te stlelen voor die regel met ipfw zero. Er wordt gelogd als een pakket zeker past bij een regel, maar voordat de actie (bijvoorbeeld accept of deny) op een pakket wordt toegepast. Uiteindelijk bepaalt de gebruiker zelf voor welke regels loggen wordt ingeschakeld. Selectie De sleutelwoorden in deze paragraaf beschrijven de attributen van een pakket die bekeken worden bij het bepalen of een regel wel of niet op een pakket van toepassing is. De attributen waarop gecontroleerd kan worden moeten in de beschreven volgorde gebruikt worden. udp | tcp | icmp Naast de hierboven aangegeven protocollen kunnen alle in /etc/protocols beschreven protocollen gebruikt worden. De waarde die wordt opgegeven is het protocol dat van toepassing moet zijn. Dit attribuut is verpicht. from bron to best De sleutelwoorden from en to worden gebruikt om te bekijken of een regel van toepassing is op IP adressen. Een regel moet zowel bron- als bestemmingsadressen bevatten. any is een bijzonder sleutelwoord dat van toepassing is op alle IP adressen. me is een bijzonder sleutelwoord dat van toepassing is op alle IP adressen die ingesteld zijn op interfaces van een &os; systeem. Zo kan dit onderdeel dus bijvoorbeeld de volgende vormen aannemen: from me to any, from any to me, from 0.0.0.0/0 to any, from any to 0.0.0.0/0, from 0.0.0.0 to any, from any to 0.0.0.0, from me to 0.0.0.0. IP adressen mogen ingevoerd worden in de vorm numeriek, door punten gescheiden adres/maskerlengte of als een enkelvoudig IP adres in de vorm numeriek, door punten gescheiden. De volgende link kan hulp verschaffen bij het schrijven van IP adressen in de vorm adres/maskerlengte: Dit attribuut is verpicht. poortnummer Wordt gebruikt voor protocollen die poortnummers ondersteunen (als TCP en UDP). Het gebruik van een poortnummer is verplicht. Er mogen ook dienstnamen uit /etc/services gebruikt worden in plaats van nummers. in | out Is op respectievelijk inkomende of uitgaande pakketten van toepassing. De sleutelwoorden in of out zijn verplicht in een regel. via IF Deze parameter geeft aan op welke interface de regel van toepassing is, waarbij IF de exacte naam van de bedoelde interface is. setup Dit is een verplicht sleutelwoord waarmee wordt aangegeven dat er gezocht wordt naar een pakket met het verzoek tot het opstarten van een TCP sessie. keep–state Dit is een verplicht sleutelwoord. Als er een pakket op een regel met keep–state van toepassing is, dan wordt er door de firewall een dynamische regel gemaakt die bi–directioneel verkeer zal toestaan tussen bron en bestemming en de bijbehorende poorten voor hetzelfde protocol. limit {bron–adr | bron–poort | best–adr | best–poort} De firewall staat maar N verbindingen toe met dezelfde groep parameters uit een regel. Er kunnen één of meer van de parameters bron- of bestemmingsadres en bron- en bestemmingspoort gebruikt worden. limit en keep–state kunnen niet in dezelfde regel gebruikt worden. limit geeft dezelfde mogelijkheden als keep–state en voegt daar zijn eigen mogelijkheden aan toe. Regeloptie stateful IPFW stateful filteren Bij stateful filteren wordt verkeer bekeken als bi–directioneel verkeer dat samen een sessie vormt. Het heeft de mogelijkheid om te bepalen of de sessie tussen de zender en de ontvanger op de juiste wijze voortgaat. Alle pakketten die niet precies in de verwachting van een sessie passen worden automatisch als fout geblokkeerd. check–state wordt gebruikt om aan te geven waar IPFW regels tegen de mogelijkheden voor dynamische regels gehouden moeten worden. Als er een passende regel bij een pakket wordt gevonden, dan kan dat pakket de firewall verlaten en wordt een nieuwe regel gemaakt voor het volgende pakket dat wordt verwacht in de sessie. Als er geen regel van toepassing is op het pakket, dan wordt de volgende regel in de groep regels getest. De mogelijkheden voor dynamische regels zijn kwetsbaar voor een aanval die SYN–flood heet, waarmee wordt geprobeerd een zeer groot aantal regels aan te laten maken. Om deze aanval tegen te gaan, is er vanaf &os; versie 4.5 de optie limit beschikbaar. Met deze optie kan het maximaal aantal simultane sessies geregeld worden op basis van bron en bestemmingsvelden. Als het aantal sessies gelijk aan het maximale aantal sessies is, wordt een pakket voor een nieuwe sessie geweigerd. Firewallberichten loggen IPFW loggen De voordelen van loggen zijn duidelijk. Het biedt de mogelijkheid om na het feit informatie na te zien als: welke pakketten heeft de firewall laten vallen, waar kwamen ze vandaan en waar gingen ze heen. Dit zijn allemaal voordelen als het gaat om uitvinden waar een aanvaller vandaan komt en wat hij heeft geprobeerd. Zelfs als logging is ingeschakeld logt IPFW nog niets uit zichzelf. De beheerder van de firewall beslist welke actieve regels iets weg moeten schrijven door het sleutelwoord log aan die regels toe te voegen. Gewoonlijk worden alleen deny regels gelogd. Dit geldt bijvoorbeeld voor de deny regel voor inkomende ICMP pings. Het is gebruikelijk om de standaard ipfw regel te dupliceren, daar log in op te nemen, en deze als laatste in de set met regels te plaatsen. Zo zijn alle pakketten te zien die niet voldeden aan ook maar één regel. Loggen heeft ook mogelijke nadelen. Het is mogelijk om te veel te loggen en dan om te komen in logboekgegevens die uiteindelijk een schijf kunnen vullen. Een DoS aanval om een schijf met logs te vullen is een van de oudst bekende typen DoS aanvallen. Logberichten van de firewall worden niet alleen naar &man.syslogd.8; geschreven, maar ook op het root console getoond waar ze snel erg vervelend kunnen worden. De kerneloptie IPFIREWALL_VERBOSE_LIMIT=5 beperkt het aantal opeenvolgende berichten dat naar &man.syslogd.8; wordt geschreven voor één specifieke regel. Als deze optie is ingeschakeld, worden in dit geval maximaal vijf berichten voor dezelfde regel gemeld. Als er meer berichten op dezelfde regel zouden zijn, zou dat als volgt aan &man.syslogd.8; gemeld worden: last message repeated 45 times Standaard worden alle gelogde pakketten weggeschreven naar /var/log/security, wat is ingesteld in /etc/syslog.conf. Regelscript bouwen De meeste ervaren gebruikers van IPFW maken een bestand waarin de regels staan en stellen dat zo op dat het als script uitgevoerd kan worden. Het grootste voordeel van deze methode is dat de firewallregels allemaal vervangen kunnen worden zonder dat het systeem geboot moet worden. Deze methode is ook erg geschikt voor het testen van regels omdat de procedure zo vaak als nodig uitgevoerd kan worden. Omdat het een script is, kan er gebruik gemaakt worden van substitutie zodat veel gebruikte waarden verduidelijkt kunnen worden. In het volgende voorbeeld wordt hier gebruik van gemaakt. De syntaxis die in het script wordt gebruikt is compatibel met de shells sh, csh en tcsh. Velden waarvoor substitutie van toepassing is worden vooraf gegaan door het dollarteken $. Definities worden niet vooraf gegaan door het voorvoegsel $. De waarden van een definitie moet omsloten worden door "dubbele aanhalingstekens". Een bestand met regels kan als volgt beginnen: ############### begin voorbeeldscript ipfw regels ############## # ipfw –q –f flush # Verwijder alle bestaande regels. # Stel standaarden in. oif="tun0" # uitgaande interface. odns="192.0.2.11" # IP adres DNS server ISP. cmd="ipfw –q add " # Voorvoegsel voor regel. ks="keep–state" # Te lui om iedere keer in te typen. $cmd 00500 check–state $cmd 00502 deny all from any to any frag $cmd 00501 deny tcp from any to any established $cmd 00600 allow tcp from any to any 80 out via $oif setup $ks $cmd 00610 allow tcp from any to $odns 53 out via $oif setup $ks $cmd 00611 allow udp from any to $odns 53 out via $oif $ks ################### einde voorbeeldscript ipfw regels ########### Dat is alles. De feitelijke functie van de regels is in dit voorbeeld van ondergeschikt belang. Dit was slechts een voorbeeld om het gebruik van substitutie te illustreren. Als het bovenstaande voorbeeld het de inhoud van /etc/ipfw.rules was, dan kon het herladen worden met het volgende commando: &prompt.root; sh /etc/ipfw.rules /etc/ipfw.rules zou overal kunnen staan met iedere gewenste naam. Wat in het bovenstaande voorbeeld met een bestand is gerealiseerd, kan ook met de hand: &prompt.root; ipfw –q –f flush &prompt.root; ipfw –q add 00500 check–state &prompt.root; ipfw –q add 00502 deny all from any to any frag &prompt.root; ipfw –q add 00501 deny tcp from any to any established &prompt.root; ipfw –q add 00600 allow tcp from any to any 80 out via tun0 setup keep–state &prompt.root; ipfw –q add 00610 allow tcp from any to 192.0.2.11 53 out via tun0 setup keep–state &prompt.root; ipfw –q add 00611 allow udp from any to 192.0.2.11 53 out via tun0 keep–state Set met stateful regels De volgende set met regels, waarin geen gebruik gemaakt wordt van NAT, is een voorbeeld van hoe een erg veilige inclusieve firewall kan worden opgezet. Een inclusieve firewall laat alleen diensten toe waarvoor pass regels van toepassing zijn en blokkeert al het andere verkeer. Alle firewalls hebben tenminste twee interfaces waarvoor regels moeten zijn die de firewall in staat stellen zijn werk te doen. Alle &unix; systemen en dus ook &os; zijn zo ontworpen dat ze voor interne communicatie de interface lo0 en IP adres 127.0.0.1 gebruiken. De firewall moet dit interne verkeer gewoon doorgang laten vinden. Voor de interface die is verbonden met het publieke internet worden regels gemaakt waarmee sessies naar het internet mogelijk gemaakt worden en toegang wordt gegeven voor pakketten die uit die sessies terug komen. Dit kan de PPP interface tun0 zijn of de netwerkkaart die is verbonden met een xDSL of kabelmodem. In gevallen dat er meer dan één netwerkkaart is aangesloten op het private netwerk achter de firewall, moeten er op de firewall regels zijn om het verkeer tussen die interfaces vrije doorgang te geven. De regels worden opgedeeld in drie onderdelen: alle interfaces met vrije doorgang, uitgaand op publieke interfaces en inkomend op publieke interfaces. De volgorde van de regels in iedere sectie voor publieke interfaces moet zo zijn dat de regels die het meest gebruikt worden vóór de regels staan die minder vaak gebruikt worden. De laatste regel van een onderdeel geeft aan dat al het overige verkeer op die interface in die richting geblokkeerd en gelogd moet worden. In het onderdeel Uitgaand staan alleen regels met allow die parameters bevatten om individuele diensten beschikbaar te maken zodat er internet toegang is. Al die regels moeten gebruik maken van proto, port, in/out, via en keep-state. De regels met proto tcp maken ook gebruik van setup om te bekijken of het een pakket betreft voor het opzetten van een sessie om de stateful functionaliteit aan te sturen. In het onderdeel Inkomend staan alle regels voor het blokkeren van ongewenste pakketten eerst om twee redenen. Als eerste kan het zo zijn dat wat er wordt geblokkeerd later toegestaan zou worden door regels die diensten toestaan. De tweede reden is dat nu ongewenste pakketten die vaak voorkomen en die bij voorkeur niet in de logboeken voorkomen niet meer van toepassing zijn op de laatste regel van het onderdeel waarin ze zouden worden gelogd. Met de laatste regel van dit onderdeel worden alle overige pakketten geblokkeerd en gelogd en ze kunnen bewijsmateriaal zijn in een zaak tegen iemand die heeft geprobeerd een systeem aan te vallen. Voor al het verkeer dat wordt geweigerd wordt geen antwoord gestuurd. Die pakketten verdwijnen gewoon. Zo weet een aanvaller niet of een pakket het doelsysteem wel heeft bereikt. Zo kan een aanvaller geen informatie verzamelen over een systeem: hoe minder informatie er over een systeem beschikbaar is, hoe veiliger het is. Als er pakketten gelogd worden waarvan de beheerder het poortnummer niet herkent, dan is de functie van dat poortnummer na te zoeken in /etc/services of op . Op de volgende link worden poortnummers van Trojans beschreven: . Voorbeeld van een set inclusieve regels Het volgende voorbeeld is een complete inclusieve set regels die geen gebruik maakt van NAT. Deze set met regels is een aanrader en eenvoudig aan te passen door commentaar te maken van een regel voor een dienst die niet gewenst is. Logberichten die niet gewenst zijn, zijn uit te sluiten door ze met een regel te blokkeren in het begin van het onderdeel Inkomend. Voor de onderstaande regels dient de dc0 interfacenaam in iedere regel vervangen te worden door de interfacenaam van de netwerkkaart in het systeem die met het publieke internet is verbonden. Voor gebruikers van PPP zou dat tun0 zijn. Er zit een structuur in de regels: Alle regels die controleren op het verzoek voor het opzetten van een sessie gebruiken keep–state. Alle diensten die vanaf internet bereikbaar zijn gebruiken limit om flooding te voorkomen. Alle regels gebruiken in of out om de richting aan te geven. Alle regels gebruiken via interfacenaam om aan te geven op welke interface de regel van toepassing is. De volgende regels zouden in /etc/ipfw.rules kunnen staan: ################ Begin bestand met IPFW regels ############################### # Verwijder eerst de bestaande regels. ipfw –q –f flush # Stel commando voorvoegsel in. cmd="ipfw –q add" pif="dc0" # Interfacenaam van NIC die verbinding # met het publieke internet heeft. ################################################################# # Geen beperkingen op de interface aan de LAN kant. Alleen nodig # als er een LAN is. Wijzig xl0 naar de gebruikte interfacenaam. ################################################################# #$cmd 00005 allow all from any to any via xl0 ################################################################# # Geen beperkingen op de loopback interface. ################################################################# $cmd 00010 allow all from any to any via lo0 ################################################################# # Sta het pakket toe als het aan de tabel met dynamische regels # was toegevoegd met een 'allow keep–state' commando. ################################################################# $cmd 00015 check–state ################################################################# # Interface aan het publieke internet (onderdeel Uitgaand). # Inspecteer verzoeken om een sessie te starten van achter de # firewall op het private netwerk of vanaf de server zelf naar # het publieke internet. ################################################################# # Geef toegang tot de DNS server van de ISP. # x.x.x.x moet het IP adres van de DNS van de ISP zijn. # Dupliceer deze regels als een ISP meedere DNS servers heeft. # Haal het IP adres evt. uit /etc/resolv.conf $cmd 00110 allow tcp from any to x.x.x.x 53 out via $pif setup keep–state $cmd 00111 allow udp from any to x.x.x.x 53 out via $pif keep–state # Geef toegang tot de DHCP server van de ISP voor kabel- en # xDSL-netwerken. Deze regel is niet nodig als gebruik gemaakt worden # van PPP naar het publieke internet. In dat geval kan de hele groep # verwijderd worden. Gebruik de volgende regel en controleer het # logboek voor het IP adres. Wijzig dan het IP adres in de regel # commentaar hieronder en verwijder de eerste regel. $cmd 00120 allow log udp from any to any 67 out via $pif keep–state #$cmd 00120 allow udp from any to x.x.x.x 67 out via $pif keep–state # Sta niet beveiligd www verkeer toe. $cmd 00200 allow tcp from any to any 80 out via $pif setup keep–state # Sta beveiligd www verkeer over TLS SSL toe. $cmd 00220 allow tcp from any to any 443 out via $pif setup keep–state # Sta het verzenden en ontvangen van e-mail toe. $cmd 00230 allow tcp from any to any 25 out via $pif setup keep–state $cmd 00231 allow tcp from any to any 110 out via $pif setup keep–state # Sta de FreeBSD CVSUP functie toe voor uid root. $cmd 00240 allow tcp from me to any out via $pif setup keep–state uid root # Sta ping toe. $cmd 00250 allow icmp from any to any out via $pif keep–state # Sta Time toe naar buiten. $cmd 00260 allow tcp from any to any 37 out via $pif setup keep–state # Sta NNTP nieuws toe naar buiten. $cmd 00270 allow tcp from any to any 119 out via $pif setup keep–state # Sta beveiligde FTP, Telnet en SCP toe naar buiten. # Deze functie maakt gebruik van SSH (secure shell). $cmd 00280 allow tcp from any to any 22 out via $pif setup keep–state # Sta whois toe naar buiten. $cmd 00290 allow tcp from any to any 43 out via $pif setup keep–state # Blokkeer en log al het andere dat probeert buiten te komen. # Deze regel dwingt de 'block all' logica af. $cmd 00299 deny log all from any to any out via $pif ################################################################# # Interface aan het publieke internet (onderdeel Inkomend). # Inspecteert pakketten die van het publieke internet komen # met als bestemming de host zelf of het private netwerk. ################################################################# # Blokkeer al het verkeer voor niet-routeerbare of gereserveerde # adresreeksen. $cmd 00300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 privaat IP $cmd 00301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 privaat IP $cmd 00302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 privaat IP $cmd 00303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 00304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 00305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto–config $cmd 00306 deny all from 192.0.2.0/24 to any in via $pif #gereserveerd voor documentatie $cmd 00307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster interconnect $cmd 00308 deny all from 224.0.0.0/3 to any in via $pif #Klasse D & E multicast # Blokkeer publieke pings. $cmd 00310 deny icmp from any to any in via $pif # Blokkeer ident. $cmd 00315 deny tcp from any to any 113 in via $pif # Blokkeer alle Netbios diensten. 137=naam, 138=datagram, 139=sessie. # Netbios is de Windows® bestandsdeeldienst. # Blokkeer Windows hosts2 name server verzoeken 81. $cmd 00320 deny tcp from any to any 137 in via $pif $cmd 00321 deny tcp from any to any 138 in via $pif $cmd 00322 deny tcp from any to any 139 in via $pif $cmd 00323 deny tcp from any to any 81 in via $pif # Blokkeer gefragmenteerde pakketten. $cmd 00330 deny all from any to any frag in via $pif # Blokkeer ACK pakketten die niet in de table met dynamische regels # staan. $cmd 00332 deny tcp from any to any established in via $pif # Geef toegang tot de DHCP server van de ISP voor kabel- en # xDSL-netwerken. Deze regel is niet nodig als gebruik gemaakt worden # van PPP naar het publieke internet. In dat geval kan de hele groep # verwijderd worden. Hier wordt hetzelfde IP adres gebruikt als in de # sectie voor Uitgaand verkeer. #$cmd 00360 allow udp from any to x.x.x.x 67 in via $pif keep–state # Sta inkomend webverkeer toe omdat er een Apache server draait. $cmd 00400 allow tcp from any to me 80 in via $pif setup limit src–addr 2 # Sta beveiligde FTP, telnet en SCP toe vanaf internet. $cmd 00410 allow tcp from any to me 22 in via $pif setup limit src–addr 2 # Sta niet beveiligde telnet sessie toe vanaf het publieke internet. # Dit heeft het label ``niet veilig'' omdat gebruikersnaam en # wachtwoord als platte tekst over internet gaan. Als er geen telnet # server draait, hoeft deze regel niet actief te zijn. $cmd 00420 allow tcp from any to me 23 in via $pif setup limit src–addr 2 # Weiger en log alle niet toegestane inkomende verbindingen van buiten. $cmd 00499 deny log all from any to any in via $pif # Al het andere verkeer wordt standaard geblokkeerd. Weiger en log alle # pakketten die tot hier zijn gekomen om te bekijken welke het waren. $cmd 00999 deny log all from any to any ################ Einde bestand met IPFW regels ######################## Voorbeeld <acronym>NAT</acronym> en stateful regels NAT en IPFW Om NAT met IPFW te gebruiken moeten een aantal instellingen gemaakt worden. In het instellingenbestand voor de kernel moet option divert toegevoegd worden aan de andere IPFIREWALL opties. Naast de normale IPFW opties in /etc/rc.conf zijn de volgende nodig: natd_enable="YES" # Schakel NATD in natd_interface="rl0" # interfacenaam voor de publieke internet NIC natd_flags="–dynamic –m" # –m = behoud poortnummers als mogelijk Stateful regels samen met de divert natd regel gebruiken maakt het schrijven van regels veel gecompliceerder. De plaats van de regels met check–state en divert natd zijn van kritiek belang. De logica bestaat niet langer uit het eenvoudigweg van boven naar beneden doorwerken van de regels. Er wordt dan ook een nieuw type actie gebruik: skipto. Bij het gebruik van skipto is het verplicht iedere regel te nummeren zodat duidelijk is waar een skipto precies heen springt. Hieronder staat een groep regels zonder commentaar waarin een manier om pakketten door de groep regels te leiden wordt aangegeven. De verwerking begint met de eerste regel en er wordt steeds een volgende regel gecontroleerd tot het einde wordt bereikt of totdat een regel op het gecontroleerde pakket van toepassing is, op dat pakket wordt toegepast en de verwerking van regels daardoor stopt. In het voorbeeld zijn de regels 100, 101, 450, 500, and 510 van belang. Die regels regelen de vertaling van inkomende en uitgaande pakketten zodat er in de tabel met de dynamische keep–state regels altijd het private IP adres staat. Daarnaast is het van belang op te merken dat er in alle allow en deny regels de richting van het pakket wordt gecontroleerd (inkomend of uitgaand) en over welke interface het pakket gaat. Merk ook op dat alle uitgaande verzoeken voor het starten van een sessie met een skipto naar regel 500 gaan voor NAT. Stel dat een gebruiker zijn webbrowser gebruikt om een webpagina op te halen. Webpagina's gebruiken poort 80 voor communicatie. Er komt een pakket de firewall binnen dat niet past bij regel 100 omdat het naar buiten gaat en niet naar binnen. Het komt voorbij regel 101 omdat dit het eerste pakket is en er dus nog niets voor in de dynamische keep-state tabel staat. Als het pakket bij 125 aankomt blijkt het te passen bij die regel. Het gaat naar buiten door de interface aan het publieke internet. Het pakket heeft dan nog steeds het bron IP adres van het private LAN. Als blijkt dat deze regel geldt, dan gebeuren er twee dingen: door keep–state wordt er een regel in de dynamische keep–state tabel gezet en wordt de aangegeven actie uitgevoerd. De actie is onderdeel van de informatie uit de dynamische tabel. In dit geval is het skipto 500. In regel 500 wordt NAT op het IP adres van het pakket toegepast en dan kan het weg. Het volgende is van groot belang. Dit pakket komt aan op zijn bestemming en als er een antwoord terug komt, dan begint de verwerking van dat pakket weer van voor af aan. Nu voldoet het aan regel 100 en dus wordt het bestemmingsadres vertaald naar het bijbehorende IP adres op het LAN. Daarna past het bij de check–state regel en wordt een vermelding in de tabel gevonden wat betekent dat er een bestaande sessie is en wordt het doorgelaten naar het LAN. Het gaat dan naar de PC op het LAN die als eerste een pakket heeft verzonden en die verstuurt een nieuw pakket met de vraag om een volgend segment met data naar de server. Nu blijkt bij controle van de check–state regel dat die op het pakket van toepassing moet zijn en er staat een vermelding in de tabel voor uitgaand verkeer. Daarom wordt de bijbehorende actie skipto 500 uitgevoerd. Het pakket springt naar regel 500, er wordt NAT op toegepast en het kan zijn weg vervolgen. Wat betreft binnenkomende pakketten wordt alles dat onderdeel is van een bestaande sessie automatisch afgehandeld door de check–state regel en de juist geplaatste divert natd regels. Nu hoeven alleen de foute pakketten nog geweigerd te worden en moet ondersteuning voor inkomende diensten ingesteld worden. In dit geval draait er een Apache server op de gateway machine die vanaf internet bereikbaar moet zijn. Het nieuwe inkomende pakket past bij regel 100 en het IP adres wordt aangepast aan het interne IP adres van de gateway machine. Dat pakket wordt dan gecontroleerd op alle ongewenste eigenschappen en komt uiteindelijk aan bij regel 425 die van toepassing blijkt te zijn. In dat geval kunnen er twee dingen gebeuren: de pakketregel wordt in de dynamische keep–state tabel gezet, maar nu wordt het aantal nieuwe sessies dat van het bron IP adres komt gelimiteerd tot twee. Dit is een bescherming tegen DoS aanvallen op de dienst die op dat poortnummer wordt aangeboden. De actie is allow, dus het pakket wordt tot het LAN toegelaten. Voor het antwoord herkent de check–state regel dat het pakket bij een bestaande sessie hoort, stuurt het naar regel 500 voor NAT en stuurt het via de uitgaande interface weg. Voorbeeld Set Regels #1: #!/bin/sh cmd="ipfw –q add" skip="skipto 500" pif=rl0 ks="keep–state" good_tcpo="22,25,37,43,53,80,443,110,119" ipfw –q –f flush $cmd 002 allow all from any to any via xl0 # exclude LAN traffic $cmd 003 allow all from any to any via lo0 # exclude loopback traffic $cmd 100 divert natd ip from any to any in via $pif $cmd 101 check–state # Toegestaan uitgaand verkeer. $cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks $cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks $cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks $cmd 130 $skip icmp from any to any out via $pif $ks $cmd 135 $skip udp from any to any 123 out via $pif $ks # Blokkeer al het verkeer voor niet-routeerbare of gereserveerde # adresreeksen. $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 privaat IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 privaat IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 privaat IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto–config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #gereserveerd voor documentatie $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Klasse D & E multicast # Toegestaan inkomend verkeer. $cmd 400 allow udp from xx.70.207.54 to any 68 in $ks $cmd 420 allow tcp from any to me 80 in via $pif setup limit src–addr 1 $cmd 450 deny log ip from any to any # Dit is de 'skipto' locatie voor de uitgaande stateful regels. $cmd 500 divert natd ip from any to any out via $pif $cmd 510 allow ip from any to any ######################## Einde regels ################## Het volgende voorbeeld doet vrijwel hetzelfde als het bovenstaande, maar volgt een zelfdocumenterende stijl voor het opstellen van regels en commentaar waardoor minder ervaren gebruikers beter kunnen begrijpen wat de regels doen. Voorbeeld Set Regels #2: #!/bin/sh ################ Begin bestand met IPFW regels ############################### # Verwijder eerst de bestaande regels. ipfw –q –f flush # Stel commando voorvoegsel in. cmd="ipfw –q add" skip="skipto 800" pif="rl0" # Interfacenaam van NIC die verbinding # met het publieke internet heeft. ################################################################# # Geen beperkingen op de interface aan de LAN kant. # Wijzig xl0 naar de gebruikte interfacenaam. ################################################################# $cmd 005 allow all from any to any via xl0 ################################################################# # Geen beperkingen op de loopback interface. ################################################################# $cmd 010 allow all from any to any via lo0 ################################################################# # Controleer of pakket inkomend is. NAT in dat geval. ################################################################# $cmd 014 divert natd ip from any to any in via $pif ################################################################# # Sta het pakket toe als het aan de tabel met dynamische regels # was toegevoegd met een 'allow keep–state' commando. ################################################################# $cmd 015 check–state ################################################################# # Interface aan het publieke internet (onderdeel Uitgaand). # Inspecteer verzoeken om een sessie te starten van achter de # firewall op het private netwerk of vanaf de server zelf naar # het publieke internet. ################################################################# # Geef toegang tot de DNS server van de ISP. # x.x.x.x moet het IP adres van de DNS van de ISP zijn. # Dupliceer deze regels als een ISP meedere DNS servers heeft. # Haal het IP adres evt. uit /etc/resolv.conf $cmd 020 $skip tcp from any to x.x.x.x 53 out via $pif setup keep–state # Geef toegang tot de DHCP server van de ISP voor kabel en xDSL. $cmd 030 $skip udp from any to x.x.x.x 67 out via $pif keep–state # Sta niet beveiligd www verkeer toe. $cmd 040 $skip tcp from any to any 80 out via $pif setup keep–state # Sta beveiligd www verkeer over TLS SSL toe. $cmd 050 $skip tcp from any to any 443 out via $pif setup keep–state # Sta het verzenden en ontvangen van e-mail toe. $cmd 060 $skip tcp from any to any 25 out via $pif setup keep–state $cmd 061 $skip tcp from any to any 110 out via $pif setup keep–state # Sta de FreeBSD CVSUP functie toe voor uid root. $cmd 070 $skip tcp from me to any out via $pif setup keep–state uid root # Sta ping toe naar het publieke internet. $cmd 080 $skip icmp from any to any out via $pif keep–state # Sta Time toe. $cmd 090 $skip tcp from any to any 37 out via $pif setup keep–state # Sta NNTP nieuws toe. $cmd 100 $skip tcp from any to any 119 out via $pif setup keep–state # Sta beveiligde FTP, Telnet en SCP toe. # Deze functie maakt gebruik van SSH (secure shell). $cmd 110 $skip tcp from any to any 22 out via $pif setup keep–state # Sta whois toe. $cmd 120 $skip tcp from any to any 43 out via $pif setup keep–state # Sta NPT tijdserver toe. $cmd 130 $skip udp from any to any 123 out via $pif keep–state ################################################################# # Interface aan het publieke internet (onderdeel Inkomend). # Inspecteert pakketten die van het publieke internet komen # met als bestemming de host zelf of het private netwerk. ################################################################# # Blokkeer al het verkeer voor niet-routeerbare of gereserveerde # adresreeksen. $cmd 300 deny all from 192.168.0.0/16 to any in via $pif #RFC 1918 privaat IP $cmd 301 deny all from 172.16.0.0/12 to any in via $pif #RFC 1918 privaat IP $cmd 302 deny all from 10.0.0.0/8 to any in via $pif #RFC 1918 privaat IP $cmd 303 deny all from 127.0.0.0/8 to any in via $pif #loopback $cmd 304 deny all from 0.0.0.0/8 to any in via $pif #loopback $cmd 305 deny all from 169.254.0.0/16 to any in via $pif #DHCP auto–config $cmd 306 deny all from 192.0.2.0/24 to any in via $pif #gereserveerd voor documentatie $cmd 307 deny all from 204.152.64.0/23 to any in via $pif #Sun cluster $cmd 308 deny all from 224.0.0.0/3 to any in via $pif #Klasse D & E multicast # Blokkeer ident. $cmd 315 deny tcp from any to any 113 in via $pif # Blokkeer alle Netbios diensten. 137=naam, 138=datagram, 139=sessie. # Netbios is de Windows® bestandsdeeldienst. # Blokkeer Windows hosts2 name server verzoeken 81. $cmd 320 deny tcp from any to any 137 in via $pif $cmd 321 deny tcp from any to any 138 in via $pif $cmd 322 deny tcp from any to any 139 in via $pif $cmd 323 deny tcp from any to any 81 in via $pif # Blokkeer gefragmenteerde pakketten. $cmd 330 deny all from any to any frag in via $pif # Blokkeer ACK pakketten die niet in de table met dynamische regels # staan. $cmd 332 deny tcp from any to any established in via $pif # Geef toegang tot de DHCP server van de ISP voor kabel- en # xDSL-netwerken. Deze regel is niet nodig als gebruik gemaakt worden # van PPP naar het publieke internet. In dat geval kan de hele groep # verwijderd worden. Hier wordt hetzelfde IP adres gebruikt als in de # sectie voor Uitgaand verkeer. $cmd 360 allow udp from x.x.x.x to any 68 in via $pif keep–state # Sta inkomend webverkeer toe omdat er een Apache server draait. $cmd 370 allow tcp from any to me 80 in via $pif setup limit src–addr 2 # Sta beveiligde FTP, telnet en SCP toe vanaf internet. $cmd 380 allow tcp from any to me 22 in via $pif setup limit src–addr 2 # Sta niet beveiligde telnet sessie toe vanaf het publieke internet. # Dit heeft het label ``niet veilig'' omdat gebruikersnaam en # wachtwoord als platte tekst over internet gaan. Als er geen telnet # server draait, hoeft deze regel niet actief te zijn. #$cmd 390 allow tcp from any to me 23 in via $pif setup limit src–addr 2 # Weiger en log alle niet toegestane inkomende verbindingen vanaf het # publieke internet. $cmd 400 deny log all from any to any in via $pif # Weiger en log alle niet toegestane uitgaande verbindingen naar # internet. $cmd 450 deny log all from any to any out via $pif # Dit is de 'skipto' locatie voor de uitgaande stateful regels $cmd 800 divert natd ip from any to any out via $pif $cmd 801 allow ip from any to any # Al het andere verkeer wordt standaard geblokkeerd. Weiger en log alle # pakketten die tot hier zijn gekomen om te bekijken welke het waren. $cmd 999 deny log all from any to any ################ Einde bestand met IPFW regels ######################## diff --git a/nl_NL.ISO8859-1/books/handbook/kernelconfig/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/kernelconfig/chapter.sgml index 9717ac960a..a85820381f 100644 --- a/nl_NL.ISO8859-1/books/handbook/kernelconfig/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/kernelconfig/chapter.sgml @@ -1,1918 +1,1922 @@ Jim Mock Bijgewerkt en opnieuw gestructureerd door Jake Hamby Oorspronkelijk bijgedragen door René Ladan Vertaald door De &os;-kernel instellen Samenvatting kernel een eigen kernel bouwen De kernel is de kern van het &os;-besturingssysteem en is verantwoordelijk voor het geheugenbeheer, het opleggen van beveiligingsregels, het aansturen van het netwerk, de toegang tot schijven en nog veel meer. Hoewel steeds meer in &os; dynamisch instelbaar wordt, is het af en toe nodig om de kernel opnieuw in te stellen en te compileren. Na het lezen van dit hoofdstuk weet de lezer: Waarom het nodig is om een eigen kernel te bouwen; Hoe een nieuw kernelinstellingenbestand te schrijven of een bestaand kernelinstellingenbestand aan te passen; Hoe het kernelinstellingenbestand te gebruiken om een nieuwe kernel aan te maken en te bouwen; Hoe een nieuwe kernel te installeren; Hoe de ingangen in /dev die nodig kunnen zijn aan te maken; Hoe problemen op te lossen als er iets verkeerd gaat. Alle opdrachten die in dit hoofdstuk als voorbeeld zijn gegeven moeten als root uitgevoerd worden om te slagen. Redenen om een eigen kernel te bouwen Traditioneel heeft &os; zoals dat heet een monolitische kernel gehad. Dit betekent dat de kernel één groot programma was, een vaste lijst van apparaten ondersteunde en als het gewenst was om het gedrag van de kernel te veranderen, moest er een nieuwe kernel gecompileerd worden en moest daarna de computer opnieuw gestart worden met de nieuwe kernel. Vandaag de dag beweegt &os; zich snel naar een model waar veel van de functionaliteit van de kernel in modules zit die dynamisch in en uit de kernel kunnen worden geladen, naargelang dat noodzakelijk is. Dit stelt de kernel in staat om zich aan nieuwe hardware aan te passen die plotseling beschikbaar komt (zoals PCMCIA-kaarten in een laptop) of om nieuwe functionaliteit in zich op te nemen die niet noodzakelijk was toen de kernel oorspronkelijk werd gecompileerd. Dit staat bekend als een modulaire kernel. Desondanks is het nog steeds nodig om enkele dingen van de kernel statisch in te stellen. In sommige gevallen komt dit doordat de functionaliteit zo diep geworteld zit in de kernel dat het niet dynamisch laadbaar gemaakt kan worden. In andere gevallen kan het simpelweg komen doordat nog niemand de tijd heeft genomen om een dynamisch laadbare kernelmodule voor die functionaliteit te schrijven. Het bouwen van een eigen kernel is een van de meest belangrijke beproevingen die bijna elke BSD-gebruiker moet doorstaan. Hoewel dit proces veel tijd in beslag neemt, levert het veel voordelen op voor een &os; systeem. In tegenstelling tot de GENERIC-kernel, die vele typen hardware moet ondersteunen, ondersteunt een eigen kernel alleen de hardware van de computer waar hij voor gemaakt is. Dit biedt een aantal voordelen, zoals: Een snellere opstarttijd. Aangezien de kernel alleen de hardware zoekt die zich in het systeem bevindt, kan de tijd die het systeem nodig heeft om op te starten aanzienlijk korter worden; Minder geheugengebruik. Een eigen kernel gebruikt vaak minder geheugen dan de GENERIC-kernel, wat van belang is aangezien de kernel zich altijd in het echte geheugen moet bevinden. Om deze reden is een eigen kernel geknipt voor een systeem met een kleine hoeveelheid RAM; Aanvullende hardware-ondersteuning. Een eigen kernel kan ingebouwde ondersteuning bieden voor apparaten die zich niet in de GENERIC-kernel bevinden, zoals geluidskaarten. Bouwen en installeren van een eigen kernel kernel bouwen / installeren Eerst wordt er een overzicht gegeven van de mappen waarin de kernel gebouwd wordt. Alle genoemde mappen staan onder de map /usr/src/sys, die ook toegankelijk is via de padnaam /sys. Er zijn hier een aantal mappen aanwezig die de verschillende delen van de kernel representeren, maar de meest belangrijke hiervan zijn arch/conf, waarin de eigen kernelinstellingen bewerkt worden en compile, waarin de eigen kernel gebouwd wordt. arch representeert hier één van i386, alpha, amd64, ia64, powerpc, sparc64 of pc98 (een alternatieve ontwikkelingstak van PC-hardware die populair is in Japan). Alles binnen de map van een bepaalde architectuur is er alleen voor die architectuur. De rest van de code is machine-onafhankelijk en hetzelfde op alle platformen waarnaar &os; eventueel geport kan worden. De indeling van de mapstructuur is logisch: alle ondersteunde apparaten, bestandssystemen en opties staan in een eigen submap. Versies van &os; beneden 5.X ondersteunen alleen de i386-, alpha- en pc98-architecturen. Dit hoofdstuk veronderstelt dat de i386-architectuur in de voorbeelden gebruikt wordt. Als dit voor de lezer anders is, moeten de juiste aanpassingen aan de padnamen worden gemaakt voor de architectuur van zijn systeem. Als de map /usr/src/sys niet aanwezig is op een systeem, dan is de kernelbroncode niet geïnstalleerd. De eenvoudigste manier om dit te doen is door sysinstall ( /stand/sysinstall voor versies van &os; ouder dan 5.2) te draaien als root en Configure, Distributions, src, sys te kiezen. Als sysinstall ongewenst is en er toegang is tot een officiële &os; cd-rom, is de broncode ook vanaf de opdrachtregel te installeren: &prompt.root; mount /cdrom &prompt.root; mkdir -p /usr/src/sys &prompt.root; ln -s /usr/src/sys /sys &prompt.root; cat /cdrom/src/sys.[a-d]* | tar -xzvf - Daarna kan vanuit de map arch/conf het instellingenbestand GENERIC naar de naam voor de eigen kernel gekopieerd worden: &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; cp GENERIC MIJNKERNEL Traditioneel bestaat deze naam geheel uit hoofdletters en als er meerdere &os;-machines worden beheerd met verschillende hardware is het een goed idee om het te vernoemen naar de hostnaam van de machine. Omwille van dit voorbeeld wordt het MIJNKERNEL genoemd. Het kernelinstellingenbestand direct onder /usr/src opslaan kan een slecht idee zijn. In geval van problemen kan het verleidelijk zijn om /usr/src te verwijderen en opnieuw te beginnen. Nadat dit gedaan is kost het vaak maar enkele seconden om te realiseren dat het instellingenbestand voor de eigen kernel verwijderd is. Ook moet GENERIC niet gewijzigd worden, omdat het tijdens de volgende keer dat de broncodestructuur bijgewerkt wordt, overschreven kan worden waarbij de wijzigingen in de kernelinstellingen verloren gaan. Het kan gewenst zijn om het kernelinstellingenbestand ergens anders op te slaan en een symbolische link naar het bestand in de map i386 aan te maken: &prompt.root; cd /usr/src/sys/i386/conf &prompt.root; mkdir /root/kernels &prompt.root; cp GENERIC /root/kernels/MIJNKERNEL &prompt.root; ln -s /root/kernels/MIJNKERNEL Nu moet MIJNKERNEL met de favoriete tekstverwerker bewerkt worden. Voor beginners is waarschijnlijk alleen de tekstverwerker vi beschikbaar, die te ingewikkeld is om hier te beschrijven, maar goed is beschreven in vele boeken in de bibliografie. &os; biedt ook de eenvoudigere tekstverwerker ee, die voor een beginner de keuze bij uitstek is. De commentaarregels in het begin kunnen gewijzigd worden om de persoonlijke instellingen of de veranderingen die gemaakt zijn ten opzichte van GENERIC weer te geven. &sunos; Voor degenen die een kernel op &sunos; of een andere BSD hebben gebouwd zal veel van dit bestand bekend voorkomen. Echter, voor degenen die van een ander besturingssysteem zoals DOS komen, kan het instellingenbestand GENERIC overdonderend overkomen, dus moeten de beschrijvingen in de sectie Het Instellingenbestand zorgvuldig opgevolgd worden. Als de broncodestructuur gesynchroniseerd is met de nieuwste broncode van het &os;-project, moet altijd /usr/src/UPDATING gelezen worden voordat enige updatestappen worden genomen. Dit bestand beschrijft alle belangrijke zaken en gebieden binnen de broncodestructuur die speciale aandacht nodig hebben. /usr/src/UPDATING komt altijd overeen met de lokale versie van de &os;-broncode en is daarom meer bijgewerkt met nieuwe informatie dan dit handboek. Nu moet de broncode voor de kernel gecompileerd worden. Hiervoor zijn twee procedures beschikbaar en degene die gebruikt wordt hangt af van de reden waarom de kernel opnieuw gebouwd wordt en de gebruikte versie van &os;. Als alleen de kernelbroncode is geïnstalleerd, moet procedure 1 gevolgd worden. Als een versie van &os; lager dan 4.0 wordt gedraaid, en er niet wordt geupdate naar &os; 4.0 of hoger door middel van de make buildworld–procedure, moet procedure 1 gebruikt worden. Als er een nieuwe kernel gebouwd wordt zonder dat de broncode geupdate wordt (misschien om een nieuwe optie, zoals IPFIREWALL, toe te voegen), kunnen beide procedures gebruikt worden. Als de kernel opnieuw wordt gebouwd als onderdeel van een make buildworld-proces, moet procedure 2 gebruikt worden. cvsup CTM CVS anoniem Als de broncodestructuur niet op enige wijze bijgewerkt is sinds de laatste keer dat er met succes een buildworld-installworld cyclus werd uitgevoerd, CVSup noch CTM werden gedraaid en anoncvs werd niet gebruikt, dan is het veilig om config, make depend, make, make install te gebruiken. Procedure 1: een kernel op <quote>traditionele wijze</quote> bouwen Draai &man.config.8; om de kernelbroncode aan te maken: &prompt.root; /usr/sbin/config MIJNKERNEL Ga naar de bouwmap. &man.config.8; geeft de naam van deze map nadat het gedraaid is zoals boven is aangegeven: &prompt.root; cd ../compile/MIJNKERNEL Voor &os; versies lager dan 5.0 moet het volgende gebruikt worden: &prompt.root; cd ../../compile/MIJNKERNEL Compileer de kernel: &prompt.root; make depend &prompt.root; make Installeer de nieuwe kernel: &prompt.root; make install Procedure 2: een kernel op de <quote>nieuwe wijze</quote> bouwen Ga naar de map /usr/src: &prompt.root; cd /usr/src Compileer de kernel: &prompt.root; make buildkernel KERNCONF=MIJNKERNEL Installeer de nieuwe kernel: &prompt.user; make installkernel KERNCONF=MIJNKERNEL In &os; 4.2 en eerder moet KERNCONF= door KERNEL= vervangen worden. Een 4.2-STABLE die voor 2 februari 2001 is opgehaald herkent KERNCONF= niet. /boot/kernel.old De nieuwe kernel wordt naar de map /boot/kernel gekopieerd als /boot/kernel/kernel en de oude kernel wordt verplaatst naar /boot/kernel.old/kernel. Nu moet het systeem afgesloten worden en opnieuw worden opgestart om gebruik te maken van de nieuwe kernel. Er zijn wat instructies voor problemen oplossen aan het einde van dit hoofdstuk, die erg nuttig kunnen zijn als er iets misgaat. Vergeet niet om het gedeelte te lezen waarin staat uitgelegd hoe te herstellen als de nieuwe kernel niet opstart. In &os; 4.X en eerder worden kernels in /kernel en modules in /modules geïnstalleerd en worden oude kernels gebackupt in /kernel.old. Andere bestanden die te maken hebben met het opstartproces, zoals de boot &man.loader.8; en instellingen worden opgeslagen in /boot. Modules van derde partijen of eigen modules kunnen in /modules opgeslagen worden, alhoewel gebruikers erop bedacht moeten zijn dat het erg belangrijk is dat de modules synchroon worden gehouden met de gecompileerde kernel. Modules die niet bedoeld zijn om met de gecompileerde kernel te draaien kunnen voor instabiliteit of onjuistheden zorgen. Als er nieuwe apparaten (zoals geluidskaarten) zijn toegevoegd en &os; 4.X of eerder wordt gedraaid, kan het zijn dat er enkele apparaatnodes aan de map /dev moeten worden toegevoegd, voordat ze gebruikt kunnen worden. Er staat meer informatie in het Apparaatnodes maken later in dit hoofdstuk. Joel Dahl Bijgewerkt voor &os; 5.X door Het instellingenbestand kernel NOTES kernel LINT NOTES LINT kernel instellingenbestand Het algemene formaat van een instellingenbestand is vrij eenvoudig. Elke regel bevat een sleutelwoord en één of meer argumenten. Omwille van de eenvoud bevatten de meeste regels maar één argument. Alles wat na een # komt, wordt als commentaar beschouwd en genegeerd. De volgende gedeelten beschrijven elk sleutelwoord, in het algemeen in dezelfde volgorde als GENERIC, alhoewel sommige samenhangende sleutelwoorden gegroepeerd zijn in een enkel gedeelte (zoals Netwerken) zelfs al staan ze verspreid in het bestand GENERIC. Een uitputtende lijst van architectuurafhankelijke opties en apparaten staat in het bestand NOTES, dat in dezelfde map staat als GENERIC. Architectuuronafhankelijke opties staan in /usr/src/sys/conf/NOTES. NOTES bestaat niet in &os; 4.X. In plaats daarvan bevat het bestand LINT een uitgebreide uitleg over opties en apparaten in GENERIC. LINT had twee doelen in 4.X: een naslagwerk leveren om kernelopties te kiezen voor het bouwen van een eigen kernel en een kernelinstelling leveren met zoveel mogelijk instelbare opties ingesteld op niet-standaardwaarden. De redenering hierachter was dat zo'n instelling veel hielp (en nog steeds helpt) met het testen van nieuwe code en veranderingen aan bestaande code die conflicten met andere delen van de kernel kunnen veroorzaken. Er zijn in 5.X echter een hoop veranderingen gemaakt aan het raamwerk van kernelinstellingen. Een voorbeeld hiervan is dat de instelopties van de stuurprogramma's zijn verplaatst naar een bestand hints zodat ze tijdens het opstarten dynamisch veranderd en geladen kunnen worden, en LINT kon deze aanwijzingen niet meer bevatten. Om deze en andere redenen is LINT hernoemd tot NOTES en heeft het hoofdzakelijk z'n eerste bestaansreden gehouden: de beschikbare opties documenteren voor gebruikersgemak. In &os; 5.X en latere versies is het nog steeds mogelijk om een bouwbaar bestand LINT aan te maken door middel van: &prompt.root; cd /usr/src/sys/i386/conf && make LINT kernel instellingenbestand Het volgende is een voorbeeld van het kernelinstellingenbestand GENERIC met aanvullend commentaar omwille van de helderheid. Dit voorbeeld is redelijk gelijk aan de versie in /usr/src/sys/i386/conf/GENERIC. # # GENERIC -- Standaard kernelinstellingenbestand voor &os;/i386 # # Meer informatie over dit bestand staat in het onderdeel Het Instellen # van de FreeBSD-kernel in het handboek: # # http://www.FreeBSD.org/doc/nl_NL.ISO8859-1/books/handbook/kernelconfig-config.html # # Het handboek is ook lokaal beschikbaar in /usr/share/doc/handbook # als de doc distributie is geïnstalleerd. Op de &os; World Wide Web # server (http://www.FreeBSD.org/) staat altijd de meest recente # informatie. # # Een uitputtende lijst met opties en meer gedetailleerde beschrijving # van de apparaatregels staat ook in de bestanden ../../conf/NOTES en # NOTES. # Bij twijfel over het doel en de noodzaak van een regel dient eerst in # NOTES gekeken te worden. # # $FreeBSD: /repoman/r/ncvs/src/sys/i386/conf/GENERIC,v 1.413 2004/08/11 01:34:18 rwatson Exp $ De volgende sleutelwoorden zijn noodzakelijk in elke kernel die gebouwd wordt: kernelopties machine machine i386 Dit is de architectuur van de machine. Het moet één van alpha, amd64, i386, ia64, pc98, powerpc of sparc64 zijn. kernelopties cpu cpu I486_CPU cpu I586_CPU cpu I686_CPU Bovenstaande optie geeft het type CPU aan dat in een systeem zit. De CPU-regel kan meerdere keren voorkomen (als bijvoorbeeld onbekend is of I586_CPU of I686_CPU gebruikt moet worden), maar voor een eigen kernel is het beter om alleen de aanwezige CPU aan te geven. Als er twijfel bestaat over het type CPU, kan het bestand /var/run/dmesg.boot worden bekeken voor de opstartberichten. kernelopties cputype De broncode van &os; bevat nog steeds ondersteuning voor I386_CPU, maar staat standaard uit in zowel -STABLE als -CURRENT. Dit betekent dat er nu de volgende mogelijkheden zijn om &os; op een CPU van de 386-klasse te installeren: Installeer een oudere versie van &os; en herbouw vanuit de broncode zoals beschreven staat in . Bouw userland en de kernel op een nieuwere machine en verricht de installatie op de 386 door gebruik te maken van de voorgecompileerde bestanden in /usr/obj (in staan details). Maak een eigen versie van &os; die ondersteuning voor I386_CPU bevat in de kernels van de installatie-cd-rom. De eerste van deze opties is waarschijnlijk de gemakkelijkste, maar deze heeft veel schijfruimte nodig wat een probleem kan zijn voor 386-klasse machines. kernelopties ident ident GENERIC Dit is de identificatie van de kernel. Dit moet veranderd worden in de naam van de kernel, dus MIJNKERNEL als de instructies van de voorgaande voorbeelden gevolgd zijn. De waarde in de string ident wordt afgebeeld wanneer de kernel opstart, dus is het handig om de nieuwe kernel een andere naam te geven als deze apart moet worden gehouden van de gebruikelijke kernel (als er bijvoorbeeld een experimentele kernel gebouwd wordt). kernelopties maxusers maxusers n De optie maxusers stelt de grootte van een aantal belangrijke systeemtabellen in. Dit aantal moet ruwweg gelijk zijn aan het aantal gebruikers dat verwacht wordt gelijktijdig van de machine gebruik te maken. Met ingang van &os; 4.5 stelt het systeem deze waarde zelf in als deze uitdrukkelijk op 0 is gezet. Het auto-tuning-algoritme stelt maxusers in afhankelijk van de hoeveelheid geheugen in het systeem, met een minimum van 32 en een maximum van 384. In &os; 5.X en hoger heeft maxusers een standaardwaarde van 0 als deze niet gespecificeerd is. Als er een versie van &os; lager dan 4.5 wordt gebruikt of het gewenst is om de waarde zelf te beheren, wordt aangeraden om maxusers minstens op 4 te zetten, met name als het X Window systeem in gebruik is of als er software gecompileerd wordt. De reden hiervoor is dat de belangrijkste tabel die door maxusers ingesteld wordt, het maximum aantal processen is, dat ingesteld wordt op 20 + 16 * maxusers, dus als maxusers op 1 ingesteld wordt, zijn er maar 36 gelijktijdige processen mogelijk, inclusief de ongeveer achttien processen die door het systeem tijdens het opstarten start en de ongeveer vijftien processen die waarschijnlijk aangemaakt worden door het opstarten van het X Window systeem. Zelfs een eenvoudige taak als het afbeelden van een hulppagina start negen processen op om de pagina te filteren, te decomprimeren en af te beelden. Als maxusers op 64 ingesteld wordt, zijn er 1044 gelijktijdige processen mogelijk, wat genoeg moet zijn voor bijna alle soorten gebruik. Als echter de gevreesde fout proc table full verschijnt als er geprobeerd wordt om een programma op te starten of als er een server gedraaid wordt met een groot aantal gelijktijdige gebruikers, zoals ftp.FreeBSD.org, kan het getal altijd verhoogd worden en kan de kernel opnieuw gebouwd worden. maxusers stelt geen grens aan het aantal gebruikers dat op de machine kan aanmelden. Het stelt gewoon verschillende tabelgroottes in op redelijke waardes, uitgaande van het maximum aantal gebruikers dat waarschijnlijk de machine gebruikt en van het aantal processen dat elk van deze gebruikers zal draaien. Een sleutelwoord dat wel het aantal gelijktijdige aanmeldingen op afstand en X-terminalvensters begrenst is pseudo-device pty 16. In &os; 5.X kan dit getal genegeerd worden omdat daar het stuurprogramma &man.pty.4; auto-cloning is. Er kan eenvoudig gebruik worden gemaakt van de regel device pty in het instellingenbestand. # Floating point ondersteuning - niet uitschakelen. device npx npx is de interface naar de wiskundige floating point-eenheid in &os;, die ofwel de hardware coprocessor is ofwel de softwarematige wiskundige emulator. Dit is niet optioneel. # Pseudo devices device loop # Netwerk loopback Dit is het generieke loopbackapparaat voor TCP/IP. Als telnet of FTP op localhost (ook bekend als 127.0.0.1) gebruikt wordt, loopt dat via dit apparaat. Dit is verplicht. Op &os; 4.X moet de volgende regel gebruikt worden: # Gebruiken in &os; 4.X pseudo-device loop Alles wat nu volgt is min of meer optioneel. Meer informatie over elke optie staat in de notities eronder of ernaast. #Om statisch te compileren in device wiring in plaats van /boot/device.hints. #hints "GENERIC.hints" # Standaardlocatie voor devices. In &os; 5.X en nieuwer wordt &man.device.hints.5; gebruikt om opties van de programma's die de apparaten aansturen in te stellen. De standaardplaats die &man.loader.8; controleert tijdens het opstarten is /boot/device.hints. Met de optie hints is het mogelijk om deze aanwijzingen statisch in de kernel te compileren, waardoor er geen noodzaak is om een bestand device.hints in /boot aan te maken. #makeoptions DEBUG=-g # Bouw kernel met gdb(1) debug symbolen. Om ruimte te sparen in de installatieplaats voegt het normale bouwproces van &os; geen debug-informatie toe tijdens het bouwen van de kernel en stript de meeste symbolen nadat de resulterende kernel is gelinkt. Voor het testen van kernels van de tak -CURRENT of van zelfgemaakte veranderingen in de &os;-kernel kan het gewenst zijn om deze regel uit te commentariëren. Dit zet het gebruik van de optie aan die debug-informatie aanzet als de broncode wordt doorgegeven aan &man.gcc.1;. Hetzelfde kan bereikt worden met de optie van &man.config.8; als de traditionele manier wordt gebruikt om een kernel te bouwen. Meer informatie staat in . options SCHED_4BSD # 4BSD taakplanner De traditionele taakplanner voor &os;. Afhankelijk van de systeembelasting kan de prestatie worden verhoogd door de nieuwe scheduler ULE voor &os; te gebruiken, die speciaal voor SMP ontworpen is, maar ook goed werkt op UP-systemen. Vervang desgewenst, om deze uit te proberen, SCHED_4BSD door SCHED_ULE in het instellingenbestand. options INET # internetwerken Netwerkondersteuning. Laat dit aanstaan, zelfs als een verbinding met een netwerk niet gepland is. De meeste programma's hebben tenminste een loopbacknetwerk nodig (dat wil zeggen het maken van netwerkverbindingen binnen de PC), dus dit is eigenlijk verplicht. options INET6 # IPv6 communicatieprotocollen Dit zet de IPv6-communicatieprotocollen aan. options FFS # Berkeley Fast Bestandssysteem Dit is het basisbestandssysteem voor de harde schijf. Laat dit erin staan als er vanaf de harde schijf wordt opgestart. + options SOFTUPDATES # Schakel FFS Softupdates ondersteuning in + + Deze optie zet softupdates in de kernel aan en helpt om de + schijftoegang voor schrijven te verhogen. Zelfs als deze + functionaliteit door de kernel geleverd wordt, moet die voor + specifieke schijven worden aangezet. Bekijk de uitvoer van + &man.mount.8; om te zien of softupdates aanstaat voor de + systeemschijven. Als de optie soft-updates + niet zichtbaar is, dient deze geactiveerd te worden met behulp + van &man.tunefs.8; voor bestaande bestandssystemen of + &man.newfs.8; voor nieuwe bestandssystemen. + options UFS_ACL # Ondersteuning voor toeganscontrolelijsten Met deze optie, die alleen in &os; 5.X aanwezig is, wordt de ondersteuning voor toegangscontrolelijsten aangezet. Hiervoor zijn uitgebreide attributen en UFS2 nodig. Een en ander wordt in detail beschreven in . ACL's staan standaard aan en moeten niet uitgezet worden in de kernel als ze al eerder op een bestandssysteem zijn gebruikt, omdat dit de toegangscontrolelijsten verwijdert en hierdoor de manier waarop bestanden beschermd worden op onvoorspelbare wijze verandert. options UFS_DIRHASH # Verbeter prestaties in grote mappen Deze optie bevat functionaliteit om schijfoperaties op grote mappen te versnellen, ten koste van extra geheugen. Deze staat normaalgesproken, zoals voor een grote server of interactief werkstation, aan en wordt uitgezet als &os; op een kleiner systeem wordt gebruikt waar geheugen het belangrijkste en schijfsnelheid minder belangrijk is, zoals voor een firewall. - options SOFTUPDATES # Schakel FFS Softupdates ondersteuning in - - Deze optie zet softupdates in de kernel aan en helpt om de - schijftoegang voor schrijven te verhogen. Zelfs als deze - functionaliteit door de kernel geleverd wordt, moet die voor - specifieke schijven worden aangezet. Bekijk de uitvoer van - &man.mount.8; om te zien of softupdates aanstaat voor de - systeemschijven. Als de optie soft-updates - niet zichtbaar is, dient deze geactiveerd te worden met behulp - van &man.tunefs.8; voor bestaande bestandssystemen of - &man.newfs.8; voor nieuwe bestandssystemen. - - options MD_ROOT # MD is een potentieel rootapparaat Deze optie zet ondersteuning aan voor een virtuële schijf die in het geheugen wordt geïmplementeerd en als rootapparaat wordt gebruikt. kernelopties NFS kernelopties NFS_ROOT options NFSCLIENT # Netwerk Bestandssysteem Client options NFSSERVER # Netwerk Bestandssysteem Server options NFS_ROOT # NFS bruikbaar als /, NFSCLIENT nodig Het netwerkbestandssysteem. Dit kan weggelaten worden tenzij er gepland is om partities te mounten van een &unix; bestandsserver over TCP/IP. kernelopties MSDOSFS options MSDOSFS # MSDOS Bestandssysteem Het &ms-dos; bestandssysteem. Dit kan veilig weggelaten worden, tenzij er gepland is om een DOS-geformatteerde partitie van de harde schijf tijdens het opstarten te mounten. Het wordt automatisch geladen als er voor de eerste keer een DOS-partitie wordt gemount, zoals boven beschreven. Bovendien geeft de uitstekende software emulators/mtools toegang tot DOS-floppies zonder dat ze gemount en gedismount moeten worden en heeft het MSDOSFS helemaal niet nodig. options CD9660 # ISO 9660 Bestandssysteem Het ISO 9960-bestandssysteem voor cd-roms. Commentarieer dit uit als er geen cd-rom drive aanwezig is of als er slechts af en toe data-cd-roms gemount worden (aangezien het dynamisch geladen wordt als er voor de eerste keer een data-cd-rom gemount wordt). Audio-CD's hebben dit bestandssysteem niet nodig. options PROCFS # Procesbestandssysteem Het procesbestandssysteem. Dit is een als-of bestandssysteem, gemount in /proc, dat programma's als &man.ps.1; in staat stelt om meer informatie over de draaiende processen te geven. In &os; 5.X en hoger is het onder de meeste omstandigheden niet nodig om PROCFS te gebruiken, omdat de meeste debug- en monitorgereedschappen zijn aangepast om zonder PROCFS te draaien. In tegenstelling tot &os; 4.X mounten nieuwe installaties op &os; 5.X standaard het procesbestandssysteem niet. Bovendien moeten 6.X-CURRENT kernels die gebruik maken van PROCFS, nu ook ondersteuning bevatten voor PSEUDOFS: options PSEUDOFS # Pseudo-bestandssysteem framework PSEUDOFS is niet beschikbaar in &os; 4.X. options GEOM_GPT # GUID Partitietabellen. Met deze optie kan een groot aantal partities op een enkele schijf aanwezig zijn. options COMPAT_43 # Compatibel met BSD 4.3 [ERIN HOUDEN!] Compatibiliteit met 4.3BSD. Laat dit aanstaan. Sommige programma's gedragen zich vreemd als dit uitgecommentarieerd wordt. options COMPAT_FREEBSD4 # Compatibel met &os; 4 Deze optie is nodig op &os; 5.X &i386; en Alpha systemen om ondersteuning te bieden aan applicaties die gecompileerd zijn op oudere versies van &os; en gebruik maken van oudere systeemaanroep-interfaces. Het is aanbevolen dat deze optie gebruikt wordt op alle &i386; en Alpha systemen die mogelijk oudere applicaties draaien. Voor platformen die pas in 5.X ondersteuning verwierven, zoals ia64 en &sparc64;, is deze optie niet nodig. options SCSI_DELAY=15000 # Vertraging (in ms) voordat SCSI wordt afgezocht. Dit zorgt ervoor dat de kernel vijftien seconden wacht voordat die elk SCSI-apparaat in het systeem afzoekt. Als er alleen IDE harde schijven zijn, kan deze optie genegeerd worden, anders is het misschien wenselijk om deze waarde te verlagen tot vijf seconden, om het opstarten te versnellen. Uiteraard moet deze waarde weer verhoogd worden als &os; problemen heeft om de SCSI-apparaten te herkennen. options KTRACE # ktrace(1) ondersteuning Dit schakelt kernelondersteuning voor het volgen processen in, wat handig is tijdens debuggen. options SYSVSHM # SYSV-stijl gedeeld geheugen Deze optie biedt System V gedeeld geheugen. Meestal wordt dit wegens de XSHM-uitbreiding in X gebruikt, waar door vele grafische programma's automatisch gebruik van wordt gemaakt voor extra snelheid. Als X gebruik wordt, is het raadzaam om dit op te nemen. options SYSVMSG # SYSV-stijl berichtwachtrijen Dit biedt ondersteuning voor System V berichten. Ook deze optie voegt slechts een paar honderd bytes aan de kernel toe. options SYSVSEM # SYSV-stijl semaforen Dit biedt ondersteuning voor System V semaforen. Het wordt minder vaak gebruikt, maar voegt slechts een paar honderd bytes aan de kernel toe. De optie van het commando &man.ipcs.1; geeft een lijst van alle processen die een van deze System V faciliteiten gebruikt. options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensies Dit biedt real-time-uitbreidingen die in de 1993 &posix; zijn toegevoegd. Bepaalde applicaties in de Portscollectie gebruiken deze (zoals &staroffice;). options KBD_INSTALL_CDEV # installeer een CDEV-ingang in /dev Deze optie is gerelateerd aan het toetsenbord. Het installeert een CDEV-ingang in /dev. options AHC_REG_PRETTY_PRINT # Toon register bitveld in debuguitvoer. # Voegt ~128k toe aan driver. options AHD_REG_PRETTY_PRINT # Toon register bitveld in debuguitvoer. # Voegt ~215k toe aan driver. Dit helpt bij het debuggen door makkelijker te lezen registerdefinities af te beelden. options ADAPTIVE_GIANT # Giant mutex is adaptief. Giant is de naam van een wederzijds uitsluitingsmechanisme (een sleep mutex) dat een grote verzameling kernelbronnen beschermt. Vandaag de dag is dit een onaccaptabele prestatie-bottleneck die actief door sloten wordt vervangen die individuele bronnen beschermen. De optie ADAPTIVE_GIANT zorgt ervoor dat Giant in de verzamelingen van mutexen wordt opgenomen waar actief wordt opgespind. Dit betekent dat wanneer een thread de Giant-mutex wil nemen, maar die reeds door een thread op een andere CPU genomen is, de eerste thread blijft draaien en wacht tot er een slot vrijkomt. Normaalgesproken zou de thread weer gaan slapen en wachten op de volgende kans om te draaien. Laat dit er in geval van twijfel instaan. kernelopties SMP device apic # I/O APIC Het apic-apparaat zet de ondersteuning voor I/O-APIC voor het afleveren van interrupts aan. Het apic-apparaat kan zowel in UP- als in SMP-kernels gebruikt worden, maar is noodzakelijk voor SMP-kernels. Voeg options SMP toe om ondersteuning voor meerdere processoren op te nemen. device isa Alle computers die door &os; ondersteund worden hebben één van deze apparaten. Verwijder dit niet, zelfs niet als er geen ISA-sloten aanwezig zijn. &os; biedt momenteel slechts gedeeltelijke ondersteuning aan IBM PS/2 (Micro Channel Architecture)-systemen. Meer informatie over de ondersteuning voor MCA staat in /usr/src/sys/i386/conf/notes. device eisa Neem dit op voor een EISA-moederbord. Dit zet ondersteuning voor zelfdetectie en -instelling aan voor alle apparaten op de EISA-bus. device pci Neem dit op voor een PCI-moederbord. Dit zet ondersteuning voor zelfdetectie van PCI-kaarten en gatewaying van PCI-naar-ISA-bus aan. - device agp - - Neem dit op als er een AGP-kaart in het systeem aanwezig is. - Dit zet ondersteuning voor AGP aan, en ondersteuning voor AGP - GART voor borden die deze mogelijkheden hebben. - # Floppy drives device fdc Dit is de controller voor de floppydrive. # ATA- en ATAPI-apparaten device ata Dit stuurprogramma biedt ondersteuning aan alle ATA- en ATAPI-apparaten. Er is slechts één device ata-regel nodig om de kernel alle PCI ATA/ATAPI-apparaten te laten ontdekken op moderne machines. device atadisk # ATA schijven Dit is samen met device ata nodig voor ATA schijven. device ataraid # ATA RAID schijven Dit is samen met device ata nodig voor ATA RAID-schijven. device atapicd # ATAPI cd-rom drives Dit is samen met device ata nodig voor ATAPI cd-rom drives. device atapifd # ATAPI floppy drives Dit is samen met device ata nodig voor ATAPI floppydrives. device atapist # ATAPI tape drives Dit is samen met device ata nodig voor ATAPI tapedrives. options ATA_STATIC_ID # Statische apparaatnummering Dit zorgt ervoor dat de controller statisch nummert. Zonder deze optie worden nummers dynamisch toegewezen. # SCSI Controllers device ahb # EISA AHA1742 familie device ahc # AHA2940 en onboard AIC7xxx apparaten device ahd # AHA39320/29320 en onboard AIC79xx apparaten device amd # AMD 53C974 (Teckram DC-390(T)) device isp # Qlogic familie device mpt # LSI-Logic MPT-Fusion #device ncr # NCR/Symbios Logic device sym # NCR/Symbios Logic (nieuwere chipsets) device trm # Tekram DC395U/UW/F DC315U adapters device adv # Advansys SCSI adapters device adw # Advansys wide SCSI adapters device aha # Adaptec 154x SCSI adapters device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60. device bt # Buslogic/Mylex MultiMaster SCSI adapters device ncv # NCR 53C500 device nsp # Workbit Ninja SCSI-3 device stg # TMC 18C30/18C50 SCSI controllers. Commentarieer de regels uit voor apparaten die niet in het systeem aanwezig zijn. Als het een systeem met alleen IDE apparaten betreft, kunnen ze allemaal weggelaten worden. # SCSI randapparaten device scbus # SCSI bus (nodig voor SCSI) device ch # SCSI media changers device da # Direct Access (schijven) device sa # Sequential Access (tape, enzovoort) device cd # CD device pass # Passthrough apparaat (directe SCSI-toegang) device ses # SCSI Omgevingsdiensten (en SAF-TE) SCSI-aanhangels. Ook hier geldt dat apparaten die niet aanwezig zijn uitgecommentarieerd kunnen worden, of als alleen IDE-hardware aanwezig aanwezig is, ze allemaal weggelaten kunnen worden. Het USB-stuurprogramma &man.umass.4; en enkele andere stuurprogramma's gebruiken het SCSI-subsysteem, alhoewel ze geen echte SCSI-apparaten zijn. Daarom mag SCSI-ondersteuning niet verwijderd worden als dit soort stuurprogramma's in de kernelinstellingen worden opgenomen. # RAID controllers met interfaces naar het SCSI subsysteem device amr # AMI MegaRAID +device arcmsr # Areca SATA II RAID device asr # DPT SmartRAID V, VI en Adaptec SCSI RAID device ciss # Compaq Smart RAID 5* device dpt # DPT Smartcache III, IV - Zie NOTES voor opties device hptmv # Highpoint RocketRAID 182x device iir # Intel Integrated RAID device ips # IBM (Adaptec) ServeRAID device mly # Mylex AcceleRAID/eXtremeRAID device twa # 3ware 9000 series PATA/SATA RAID # RAID controllers device aac # Adaptec FSA RAID device aacp # SCSI passthrough voor aac (CAM nodig) device ida # Compaq Smart RAID device mlx # Mylex DAC960 famile device pst # Promise Supertrak SX6000 device twe # 3ware ATA RAID Ondersteunde RAID-controllers. Als een van deze niet aanwezig is, kan deze uitgecommentarieerd of verwijderd worden. # atkbdc0 bestuurt het toetsenbord en de PS/2 muis device atkbdc # AT toetsenbordcontroller De toetsenbordcontroller (atkbdc) biedt I/O-diensten aan voor het AT-toetsenbord en het PS/2-type van aanwijsapparaten. Deze controller is noodzakelijk voor het toetsenbordstuurprogramma (atkbd) en het PS/2-aanwijsapparaatstuurprogramma (psm). device atkbd # AT toetsenbord Het stuurprogramma atkbd biedt samen met de controller atkbdc toegang tot het AT84-toetsenbord of het uitgebreide AT-toetsenbord dat verbonden is met de controller voor het AT-toetsenbord. device psm # PS/2 muis Dit apparaat kan gebruikt worden als de muis in de PS/2-muispoort wordt geplugd. device vga # VGA videokaart stuurprogramma Het stuurprogramma voor de videokaart. # splash screen/screensaver device splash # Splash screen en screensaver ondersteuning Een splash-scherm tijdens het opstarten! Screensavers hebben deze optie ook nodig (voor &os; 4.X dient pseudo-device splash gebruikt te worden. # syscons is het standaard consolestuurprogramma, lijkt op een SCO console device sc sc is het standaard consolestuurprogramma en lijkt op een SCO-console. Aangezien de meeste programma's die met een volledig scherm werken de console via een terminaldatabase zoals termcap benaderen, moet het niet uitmaken of dit of vt, het VT220-compatibele consolestuurprogramma, gebruikt wordt. Wanneer er aangemeld wordt, dient de variabele TERM op scoansi gezet worden indien programma's die met een volledig scherm werken problemen hebben om met dit console te draaien. # Schakel dit in voor het pcvt (VT220 compatibele) consolestuurprogramma #device vt #options XSERVER # ondersteuning voor X server op een vt console #options FAT_CURSOR # begin met een blokcursor Dit is een VT220-compatibel consolestuurprogramma, achterwaarts compatibel met de VT100/102. Het werkt goed op enkele laptops die hardware-incompatibiliteiten hebben met sc. Ook dient de variabele TERM op vt100 of vt220 gezet te worden bij het aanmelden. Dit stuurprogramma kan ook nuttig zijn wanneer er verbinding wordt gemaakt met een groot aantal verschillende machines in een netwerk, waarbij de ingangen termcap of terminfo voor het apparaat sc vaak niet beschikbaar zijn. vt100 is op bijna elk platform beschikbaar. + device agp + + Neem dit op als er een AGP-kaart in het systeem aanwezig is. + Dit zet ondersteuning voor AGP aan, en ondersteuning voor AGP + GART voor borden die deze mogelijkheden hebben. + APM # Ondersteuning voor energiebeheer (zie NOTES voor meer opties) #device apm Ondersteuning voor geavanceerd energiebeheer (Advanced Power Management). Dit is nuttig voor laptops, alhoewel dit in &os; 5.X en hoger standaard uitgeschakeld is in GENERIC. # Schakel suspend/resume ondersteuning voor de i8254 in. device pmtimer Het stuurprogramma voor het timerapparaat voor energiebeheergebeurtenissen, zoals APM en ACPI. # PCCARD (PCMCIA) ondersteuning. # PCMCIA en cardbus bridge ondersteuning. device cbb # cardbus (yenta) bridge device pccard # PC Card (16-bit) bus device cardbus # CardBus (32-bit) bus Ondersteuning voor PCMCIA. Dit is wenselijk voor laptopgebruikers. # Serial (COM) poorten device sio # 8250, 16[45]50-gebaseerde seriële poorten Dit zijn de seriële poorten waarnaar in de wereld van &ms-dos;/&windows; verwezen wordt als COM-poorten. Als er een intern modem op COM4 en een seriële poort op COM2 aanwezig is, moet het IRQ van het modem in 2 worden veranderd (om duistere technische redenen geldt dat IRQ2 = IRQ9) om er vanuit &os; toegang toe te krijgen. Als er een multipoort seriële kaart aanwezig is, staat in &man.sio.4; meer informatie over de juiste waarden die aan /boot/device.hints toegevoegd moeten worden. Sommige videokaarten (vaak gebaseerd op S3 chips) gebruiken IO-adressen van de vorm 0x*2e8, en omdat vele goedkope serieële kaarten de 16-bits IO-adresruimte niet volledig decoderen, botsen ze met deze kaarten waardoor de COM4-poort praktisch onbruikbaar is. Elke serieële poort moet een uniek IRQ hebben (tenzij er gebruik wordt gemaakt van een van de multipoortkaarten waarbij gedeelde interrupts ondersteund worden), dus kunnen de standaard IRQ's voor COM3 en COM4 niet gebruikt worden. # Parallelle poort device ppc Dit is de interface voor de parallelle poort op de ISA-bus. device ppbus # Parallelle poortbus (verplicht) Biedt ondersteuning voor de parallelle poortbus. device lpt # Printer Ondersteuning voor parallelle poort-printers. Alle van de bovenstaande drie zijn noodzakelijk om ondersteuning voor parallelle printers aan te zetten. device plip # TCP/IP over parallel Dit is het stuurprogramma voor de parallelle netwerkinterface. device ppi # Parallelle poort interface apparaat De algemene I/O (geek-poort) + IEEE1284 I/O. #device vpo # scbus en da verplicht zipdrive Dit is voor een Iomega Zipdrive. Hiervoor is ondersteuning voor scbus en da nodig. De beste prestaties worden gehaald met poorten in EPP 1.9-modus. #device puc Dit dient uitgecommentarieerd te worden indien er een domme seriële of parallelle PCI-kaart aanwezig is die ondersteund wordt door het &man.puc.4; verbindingsstuurprogramma. # PCI Ethernet NIC's. device de # DEC/Intel DC21x4x (Tulip) device em # Intel PRO/1000 adapter Gigabit Ethernet Card device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (Typhoon) device vx # 3Com 3c590, 3c595 (Vortex) Verscheidene PCI-netwerkkaartstuurprogramma's. Degenen die niet in het systeem aanwezig zijn kunnen uitgecommentarieerd of verwijderd worden. # PCI Ethernet NIC's die de MII bus controller code gebruiken. # NB: 'device miibus' moet behouden blijven om deze NIC's te kunnen gebruiken! device miibus # MII bus ondersteuning Ondersteuning voor MII-bus is noodzakelijk voor sommige PCI 10/100 Ethernet-NICs, namelijk voor diegenen die MII-geldige transceivers gebruiken of interfaces voor transceiverbesturing implementeren die als een MII werken. Door device miibus aan de kernelinstellingen toe te voegen wordt de ondersteuning voor de generieke miibus-API en voor alle PHY-stuurprogramma's opgenomen, waaronder een generieke voor PHYs die niet specifiek door een individueel stuurprogramma worden behandeld. - device dc # DEC/Intel 21143 en verschillende gelijkwerkenden -device miibus # MII bus ondersteuning -device bfe # Broadcom BCM440x 10/100 Ethernet + device bfe # Broadcom BCM440x 10/100 Ethernet device bge # Broadcom BCM570xx Gigabit Ethernet device dc # DEC/Intel 21143 en verschillende gelijkwerkenden device fxp # Intel EtherExpress PRO/100B (82557, 82558) +device lge # Level 1 LXT1001 gigabit ethernet +device nge # NatSemi DP83820 gigabit ethernet device pcn # AMD Am79C97x PCI 10/100 (voorrang boven 'lnc') device re # RealTek 8139C+/8169/8169S/8110S device rl # RealTek 8129/8139 device sf # Adaptec AIC-6915 (Starfire) device sis # Silicon Integrated Systems SiS 900/SiS 7016 device sk # SysKonnect SK-984x & SK-982x gigabit Ethernet device ste # Sundance ST201 (D-Link DFE-550TX) device ti # Alteon Networks Tigon I/II gigabit Ethernet device tl # Texas Instruments ThunderLAN device tx # SMC EtherPower II (83c170 EPIC) +device ge # VIA VT612x gigabit ethernet device vr # VIA Rhine, Rhine II device wb # Winbond W89C840F device xl # 3Com 3c90x (Boomerang, Cyclone) Stuurprogramma's die gebruik maken van de MII bus-controllercode. # ISA Ethernet NIC's. Inclusief pccard NIC's. device cs # Crystal Semiconductor CS89x0 NIC # 'device ed' heeft 'device miibus' nodig device ed # NE[12]000, SMC Ultra, 3c503, DS8390 kaarten device ex # Intel EtherExpress Pro/10 en Pro/10+ device ep # Etherlink III-gebaseerde kaarten device fe # Fujitsu MB8696x-gebaseerde kaarten device ie # EtherExpress 8/16, 3C507, StarLAN 10, etc. device lnc # NE2100, NE32-VL Lance Ethernet kaarten device sn # SMC's 9000 serie Ethernet chips device xe # Xircom pccard Ethernet # ISA apparaten die de oude ISA shims gebruiken #device le ISA Ethernetstuurprogramma's. In /usr/src/sys/i386/conf/NOTES staan details over welke kaarten door welk stuurprogramma ondersteund worden. # Draadloze NIC kaarten device wlan # 802.11 ondersteuning device an # Aironet 4500/4800 802.11 draadloze NIC's. device awi # BayStack 660 en anderen device wi # WaveLAN/Intersil/Symbol 802.11 draadloze NIC's. #device wl # Oudere niet-802.11 Wavelan draadloze NIC. Ondersteuning voor verscheidene draadloze kaarten. device mem # Geheugen- en kernelgeheugenapparaten De geheugenapparaten van het systeem. device io # I/O apparaat Deze optie stelt een proces in staat om I/O-privileges te verkrijgen. Dit is nuttig als er gebruikerprogramma's worden geschreven die direct met hardware werken. Dit is nodig om het X Window systeem te draaien. device random # Entropy apparaat Cryptografisch veilige willekeurige getallengenerator. device ether # Ethernet ondersteuning ether is allen noodzakelijk als er een Ethernetkaart aanwezig is. Het bevat code voor het generieke Ethernet protocol. Op &os; 4.X dient pseudo-device ether gebruikt te worden. device sl # Kernel SLIP sl dient voor SLIP-ondersteuning. Dit is bijna geheel overgenomen door PPP, wat eenvoudiger is op te zetten, beter geschikt is voor modem-naar-modem-verbindingen en krachtiger is. Met &os; 4.X dient pseudo-device sl gebruikt te worden. device ppp # Kernel PPP Dit dient voor PPP-ondersteuning van inbelverbindingen door de kernel. Er is ook een versie van PPP als gebruikersapplicatie geïmplementeerd die tun gebruikt en meer flexibiliteit en mogelijkheden biedt zoals demand-bellen. Met &os; 4.X dient pseudo-device ppp gebruikt te worden. device tun # Packet tunnel. Dit wordt gebruikt door de gebruikers-PPP-software. In PPP staat meer informatie. Met &os; 4.X dient pseudo-device tun gebruikt te worden. device pty # Pseudo-ttys (telnet, etc.) Dit is een pseudo-terminal of gesimuleerde aanmeldpoort. Die wordt gebruikt door binnenkomende sessies van telnet en rlogin, door xterm en voor sommige andere applicaties zoals Emacs. Met &os; 4.X dient pseudo-device ptynummer gebruikt te worden. Het nummer na pty geeft het aantal pty's aan dat aangemaakt dient te worden. Als er meer dan het standaard aantal van zestien gelijktijdige xterm schermen en/of remote aanmeldingen nodig zijn, dient dit nummer overeenkomstig verhoogd te worden, tot maximaal 256. device md # Geheugenschijven Pseudo-apparaten die een schijf in het geheugen implementeren. Met &os; 4.X dient pseudo-device md gebruikt te worden. device gif # IPv6 en IPv4 tunnelen Dit implementeert IPv6-over-IPv4-tunneling, IPv4-over-IPv6-tunneling, IPv4-over-IPv4-tunneling en IPv6-over-IPv6-tunneling. Met ingang van &os; 4.4 is het apparaat gif zelfklonend en dient de regel pseudo-device gif gebruikt te worden. Eerdere versies van &os; 4.X vereisen een getal, bijvoorbeeld pseudo-device gif 4. device faith # IPv6-naar-IPv4-relay (vertaling) Dit pseudo-apparaat onderschept pakketten die ernaar verzonden worden en leidt ze om naar het IPv4/IPv6-vertaaldaemon. Met &os; 4.X dient pseudo-device faith 1 gebruikt te worden. # Het `bpf' apparaat schakelt de Berkeley Pakketfilter in. # Wees bewust van de administratieve consequenties die dit heeft! +# 'bpf' is nodig bij gebruik van DHCP. device bpf # Berkeley pakketfilter Dit is het Berkeley Pakketfilter. Dit pseudo-apparaat staat netwerkinterfaces toe om in luistermodus gezet te worden, zodat elk pakket op een uitzendnetwerk (bijvoorbeeld een Ethernet) onderschept wordt. Deze pakketten kunnen naar schijf onderschept en/of onderzocht worden met het programma &man.tcpdump.1;. Met &os; 4.X dient pseudo-device bpf gebruikt te worden. Het apparaat &man.bpf.4; wordt ook gebruikt door &man.dhclient.8; om het IP-adres van de standaardrouter (gateway) te verkrijgen, enzovoorts. Als DHCP gebruikt wordt, dient dit ingeschakeld te blijven. # USB support device uhci # UHCI PCI->USB interface device ohci # OHCI PCI->USB interface +#device ehci # EHCI PCI->USB interface (USB 2.0) device usb # USB Bus (verplicht) #device udbp # USB Double Bulk Pipe apparaten device ugen # Generic device uhid # Human Interface Devices device ukbd # Toetsenbord device ulpt # Printer device umass # Schijnven/Massaopslag - scbus en da nodig device ums # Muis device urio # Diamond Rio 500 MP3 speler device uscanner # Scanners # USB Ethernet, requires mii device aue # ADMtek USB Ethernet device axe # ASIX Electronics USB Ethernet +device cdce # Generic USB over Ethernet device cue # CATC USB Ethernet device kue # Kawasaki LSI USB Ethernet device rue # RealTek RTL8150 USB Ethernet Ondersteuning voor verscheidene USB-apparaten. # FireWire ondersteuning device firewire # FireWire bus code device sbp # SCSI over FireWire (scbus en da nodig) device fwe # Ethernet over FireWire (niet-standaard!) Ondersteuning voor verscheidene Firewire-apparaten. Meer informatie en aanvullende apparaten die door &os; ondersteund worden staan in /usr/src/sys/i386/conf/NOTES. Instellingen bij veel geheugen (<acronym>PAE</acronym>) Physical Address Extensions (PAE) veel geheugen Sommige machines (PAE) hebben meer geheugen nodig dan limiet van 4 gigabyte op User+Kernel Virtual Adress (KVA) ruimte. Vanwege deze limiet voegde Intel ondersteuning toe voor toegang tot 36-bits fysieke adresruimte in de &pentium; Pro en nieuwere lijn van CPU's. De Physical Address Extension (PAE) mogelijkheden van de &intel; &pentium; Pro en nieuwere CPU's staan geheugenhoeveelheden toe tot 64 gigabyte. &os; biedt ondersteuning voor deze mogelijkheid via de kernelinsteloptie , die beschikbaar is in de 4.X-serie van &os; met ingang van 4.9-RELEASE en in de 5.X-serie van &os; met ingang van 5.1-RELEASE. Vanwege de beperkingen van de geheugenarchitectuur van Intel wordt er geen onderscheid gemaakt tussen geheugen boven of beneden 4 gigabytes. Geheugen dat boven de 4 gigabytes is toegewezen wordt gewoon bij het beschikbare gevoegd. Om ondersteuning voor PAE in de kernel aan te zetten, dient de volgende regel aan het kernelinstellingenbestand te worden toegevoegd: options PAE De ondersteuning voor PAE in &os; is alleen beschikbaar voor &intel; IA-32-processoren. Ook dient opgemerkt te worden dat ondersteuning voor PAE nog niet wijdverbreid getest is en als betakwaliteit beschouwd dient te worden vergeleken met andere stabiele kenmerken van &os;. Ondersteuning voor PAE in &os; heeft enige beperkingen: Een proces kan niet meer dan 4 gigabyte VM-ruimte krijgen; KLD-modules kunnen niet in een kernel worden geladen die PAE aan heeft staan, vanwege de verschillen in het bouwraamwerk van een module en de kernel; Apparaatstuurprogramma's die geen gebruik maken van de &man.bus.dma.9;-interface zullen gegevenscorruptie veroorzaken in een kernel die PAE aan heeft staan en hun gebruik wordt afgeraden. Om deze reden wordt er een kernelinstellingenbestand voor PAE geleverd met &os; 5.X, die alle stuurprogramma's uitsluit waarvan bekend is dat ze niet werken in een kernel die PAE aan heeft staan; Sommige systeeminstellingen bepalen het geheugenbronverbruik aan de hand van de hoeveelheid beschikbaar fysiek geheugen. Zulke instellingen kunnen onnodig veel toewijzen vanwege de grote hoeveelheid geheugen in een PAE systeem. Een voorbeeld hiervan is de sysctl , die het maximum aantal vnodes dat in de kernel aanwezig mag zijn beheert. Het is aan te raden om deze en andere van dit soort instellingen aan te passen aan een redelijke waarde; Het kan nodig zijn om de virtuele kerneladresruimte (KVA) te vergroten of om het aantal kernelbronnen dat veel gebruikt wordt (zie boven) te verminderen om zo uitputting van KVA te voorkomen. De kerneloptie kan gebruikt worden om de KVA-ruimte te vergroten. Om prestatie- en stabiliteitsredenen is het aan te raden om &man.tuning.7; te raadplegen. &man.pae.4; bevat bijgewerkte informatie over de ondersteuning voor PAE in &os;. Apparaatnodes maken apparaatnodes MAKEDEV Als &os; 5.0 of hoger gedraaid wordt, kan deze sectie veilig worden overgeslagen. Deze versies gebruiken &man.devfs.5; om transparant apparaatnodes voor de gebruiker toe te wijzen. Bijna elk apparaat in de kernel heeft een overeenkomstige node-ingang in de map /dev. Deze nodes zien eruit als reguliere bestanden, maar zijn eigenlijk speciale ingangen in de kernel die door programma's gebruikt worden om toegang tot het apparaat te verkrijgen. Het shellscript /dev/MAKEDEV, dat wordt uitgevoerd als het besturingssysteem voor het eerst wordt geïnstalleerd, maakt bijna alle ondersteunde apparaatnodes aan. Het maakt echter niet alle nodes aan, dus als ondersteuning voor een apparaat wordt toegevoegd, loont het om te controleren of de geschikte ingangen in de map aanwezig zijn en deze toe te voegen als ze ontbreken. Hier volgt een eenvoudig voorbeeld: Stel dat ondersteuning voor de IDE cd-rom aan de kernel wordt toegevoegd: device ad0 Dit betekent dat de map /dev moet worden onderzocht op ingangen die met acd0 beginnen, mogelijk gevolgd door een letter zoals c of voorafgegaan door de letter r, wat duidt op een raw apparaat. Die bestanden zijn daar niet, dus moet in de map /dev het volgende ingegeven worden: MAKEDEV &prompt.root; sh MAKEDEV acd0 Als dit script geëindigd is, zijn de ingangen acd0c en racd0c in de map /dev aanwezig, wat duidt op een juiste uitvoer. Voor geluidskaarten maakt het volgende commando de juiste ingangen aan: &prompt.root; sh MAKEDEV snd0 Als apparaatnodes voor apparaten als geluidskaarten worden aangemaakt en andere mensen toegang tot de machine hebben, kan het wenselijk zijn om de apparaten tegen toegang van buitenaf te beschermen door deze aan /etc/fbtab toe te voegen. In &man.fbtab.5; staat meer informatie. Deze eenvoudige procedure dient gevolgd te worden voor elk ander apparaat dat niet in GENERIC staat en geen ingangen heeft in /dev. Alle SCSI-controllers gebruiken dezelfde verzameling ingangen in /dev, dus is het niet nodig om deze aan te maken. Ook hebben netwerkkaarten en SLIP/PPP pseudo-apparaten geen ingang in /dev, dus is het niet nodig om hierover bezorgd te zijn. Problemen oplossen Er zijn vijf categoriën problemen die op kunnen treden tijdens het bouwen van een eigen kernel: config faalt Als het commando &man.config.8; faalt bij het verwerken van de kernelbeschrijving, is er waarschijnlijk ergens een eenvoudige fout gemaakt. Gelukkig geeft &man.config.8; het nummer van de regel weer waarmee het problemen had, dus kan snel de regel gevonden worden waarin de fout zit. In het onderstaande voorbeeld dient gecontroleerd te worden of het sleutelwoord juist is ingevoerd door het met de kernel GENERIC of een andere referentie te vergelijken: config: line 17: syntax error make faalt Als make faalt, duidt dit meestal op een fout in de kernelbeschrijving die niet erg genoeg is om door &man.config.8; opgemerkt te worden. De instellingen dienen nogmaals nagekeken te worden. Als het probleem nog steeds niet is op te lossen, stuur dan een mail naar de &a.questions; met de kernelinstellingen. Dat leidt meestal snel tot een diagnose. Het installeren van de nieuwe kernel mislukt Als het compileren van de kernel goed ging, maar het installeren mislukte (make install of make installkernel faalde), dient als eerste gecontroleerd te worden of het systeem op beveiligingsniveau (securelevel) 1 of hoger draait (zie &man.init.8;). De kernelinstallatie probeert namelijk om de vlag immutable van de oude kernel te verwijderen en de vlag immutable op de nieuwe kernel te zetten. Aangezien beveiligingsniveau 1 of hoger verhindert om de vlag immutable te verwijderen van enig bestand op het systeem, dient de kernelinstallatie op beveiligingsniveau 0 of lager uitgevoerd te worden. Bovenstaande geldt alleen voor &os; 4.X en eerdere versies. &os; 5.X en hogere versies zetten de vlag immutable niet op de kernel en een mislukte poging om de kernel de kernel te installeren duidt meestal op een fundamenteler probleem. De kernel start niet op Als de nieuwe kernel niet opstart of de apparaten niet herkent is kalmte geboden. &os; heeft een uitstekend mechanisme om van niet-compatibele kernels te herstellen. De gewenste kernel om mee op te starten kan vanuit de &os; boot loader gekozen worden. Als het systeem terugtelt vanaf 10, kan deze vanuit het opstartmenu gekozen worden. Sla een willekeurige toets, behalve de Enter toets, aan, voer unload in en daarna boot /boot/kernel.old/kernel of de bestandsnaam van enige andere kernel die correct opstart. Als de kernelinstellingen gewijzigd worden, is het altijd aan te raden om een kernel bij de hand te houden waarvan bekend is dat die juist werkt. Nadat er met een goede kernel is opgestart, kan het instellingenbestand gecontroleerd worden en geprobeerd worden om de kernel nogmaals te bouwen. Een behulpzame bron is het bestand /var/log/messages, dat onder andere alle kernelberichten van alle keren dat er succesvol is opgestart vastlegt. Ook geeft &man.dmesg.8; alle kernelberichten weer van de huidige opstartprocedure. Als er problemen zijn met het bouwen van een kernel, dient een GENERIC, of een andere kernel waarvan bekend is dat die werkt, bewaard te worden onder een andere naam die niet verwijderd wordt als de volgende kernel gebouwd wordt. Er kan niet op kernel.old vertrouwd worden omdat bij de installatie van een nieuwe kernel kernel.old overschreven wordt met de laatst geïnstaleerde kernel, die niet hoeft te werken. Ook dient de werkende kernel zo snel mogelijk naar de juiste plaats /boot/kernel verplaatst te worden, omdat anders commando's als &man.ps.1; eventueel onjuist werken. Hiervoor dient simpelweg de map met de goede kernel hernoemd te worden: &prompt.root; mv /boot/kernel /boot/kernel.slecht &prompt.root; mv /boot/kernel.goed /boot/kernel Voor versies van &os; eerder dan 5.X luidt het juiste commando om het kernelbestand dat make installeert te ontgrendelen (om een andere kernel definitief terug te zetten): &prompt.root; chflags noschg /kernel Als dit niet mogelijk is, wordt er waarschijnlijk op een beveiligingsniveau groter dan nul gedraaid. Wijzig kern_securelevel in /etc/rc.conf naar –1 en start het systeem opnieuw. Deze instelling kan op het vorige niveau worden teruggezet als de nieuwe kernel naar behoren werkt. Als het wenselijk is om de nieuwe kernel vast te zetten op zijn plaats, of enig ander bestand, zodat het niet verplaatst of verknoeid kan worden: &prompt.root; chflags schg /kernel De kernel werkt, maar &man.ps.1; werkt niet meer Als er een andere versie van de kernel is geïnstalleerd dan degene waarmee de systeemgereedschappen gebouwd zijn, bijvoorbeeld een kernel voor 5.X op een 4.X-systeem, werken vele systeemstatuscommando's als &man.ps.1; en &man.vmstat.8; niet langer. De wereld moet opnieuw gecompileerd en geïnstalleerd worden en met dezelfde broncodestructuur als de kernel zijn gebouwd. Dit is een van de redenen waarom het normaliter geen goed idee is om een afwijkende versie van de kernel ten opzichte van de rest van de wereld te gebruiken. diff --git a/nl_NL.ISO8859-1/books/handbook/mirrors/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/mirrors/chapter.sgml index 7ac4efe070..f7e635e2b7 100644 --- a/nl_NL.ISO8859-1/books/handbook/mirrors/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/mirrors/chapter.sgml @@ -1,3110 +1,3129 @@ &os; verkrijgen Cd-rom en DVD uitgevers Winkelproducten in doos &os; is beschikbaar in een doos (&os; cd-roms, additionele software en gedrukte documentatie) bij verschillende verkopers:
CompUSA WWW:
Frys Electronics WWW:
Cd-roms en DVD's &os; cd-roms 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:
+ +
+ Linux CD Mall + Private Bag MBE N348 + Auckland 1030 + Nieuw Zeeland + Telefoon: +64 21 866529 + WWW: +
+
+
The Linux Emporium Hilliard House, Lester Way Wallingford OX10 9TA Verenigd Koninkrijk Telefoon: +44 1491 837010 Fax: +44 1491 837016 WWW:
+ +
+ Linux+ DVD Magazine + Lewartowskiego 6 + Warsaw + 00-190 + Polen + Telefoon: +48 22 860 18 18 + E–mail: editors@lpmagazine.org + 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; cd-rom 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 +SSH2 HostKey: 1024 52:02:38:1a:2f:a8:71:d3:f5:83:93:8d:aa:00:6f:65 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 + SSH HostKey: 1024 4b:83:b6:c5:70:75:6c:5b:18:8e:3a:7a:88:a0:43:bb root@ender.liquidneon.com +SSH2 HostKey: 1024 80:a7:87:fa:61:d9:25:5c:33:d5:48:51:aa:8f:b6:12 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-rom 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-rom 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 dagelijks 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 met bijwerken 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 bijwerken 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_4 + + + De releasetak voor &os;-5.4, alleen gebruikt voor + beveiligingswaarschuwingen en andere kritische + aanpassingen. + + + 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_5_4_0_RELEASE + + + &os; 5.4 + + + 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/multimedia/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/multimedia/chapter.sgml index f09f19541f..7d651880b5 100644 --- a/nl_NL.ISO8859-1/books/handbook/multimedia/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/multimedia/chapter.sgml @@ -1,2047 +1,2047 @@ Ross Lippert Aangepast door Siebrand Mazeland Vertaald door Multimedia Overzicht &os; ondersteunt een breed bereik aan geluidskaarten, waardoor het mogelijk is van geluid van hoge kwaliteit op een computer te genieten. Hieronder vallen mogelijkheden om geluid op te nemen en af te spelen in de MPEG Audio Layer 3 (MP3), WAV en Ogg Vorbis formaten en vele andere formaten. De &os; Portscollectie bevat ook programma's waarmee opgenomen audio bewerkt kan worden, waarmee geluidseffecten toegevoegd kunnen worden en aangesloten MIDI apparaten bestuurd kunnen worden. Met wat wil om te experimenteren kunnen met &os; videobestanden en DVD's afgespeeld worden. Er zijn minder programma's om video te encoderen, te converteren en af te spelen dan er zijn voor audio. Op het moment van schrijven is er bijvoorbeeld geen programma in de &os; Portscollectie beschikbaar waarmee video goed gehercodeerd kan worden. Deze functie zou gebruikt kunnen worden om tussen formaten te converteren, zoals mogelijk is met audio/sox. De software in dit landschap is echter sterk aan verandering onderhevig. In dit hoofdstuk worden de stappen beschreven die uitgevoerd moeten worden om een geluidskaart in te stellen. Bij de installatie en instelling van X11 () is al beschreven hoe videokaarten ingesteld kunnen worden, hoewel er nog wel een aantal mogelijkheden zijn om het afspelen te verbeteren. Na het lezen van dit hoofdstuk weet de lezer: Hoe een systeem zo in te stellen dat een geluidskaart wordt herkend; Hoe getest kan worden of een kaart werkt door gebruik te maken van voorbeeldapplicaties; Hoe problemen op te lossen met betrekking tot geluidsinstellingen; Hoe MP3's en andere audio af te spelen en te maken; Hoe video wordt ondersteund door de X server; Welke video speler/encoderports goede resultaten geven; Hoe DVD's, .mpg en .avi bestanden af te spelen; Hoe CD en DVD informatie naar bestanden geript kan worden; Hoe een TV-kaart in te stellen; Hoe een scanner in te stellen. Er wordt aangenomen dat de lezer van dit hoofdstuk: Weet hoe een nieuwe kernel in te stellen en te installeren (). Het proberen te mounten van audio CD's met &man.mount.8; resulteert in ieder geval in een foutmelding en op zijn ergst in een kernel panic. Dat type media heeft een formaat dat afwijkt van het gebruikelijke ISO-bestandssysteem. Moses Moore Geschreven door Marc Fonvieille Aangepast voor &os; 5.X door Geluidskaart installeren Systeem instellen PCI ISA geluidskaarten Alvorens te beginnen is het van belang te weten welk model een geluidskaart is, welke chip erop wordt gebruikt en of het een PCI of ISA kaart is. &os; ondersteunt vele PCI en ISA kaarten. De ondersteunde audioapparaten staan in een lijst in de Hardware Notes. In dit document staat ook beschreven welk stuurprogramma welke kaart(en) ondersteunt. kernel instellen Om een geluidsapparaat te gebruiken dient het juiste apparaatstuurprogramma geladen te worden. Dit kan op twee manieren. De meest eenvoudige manier is simpelweg een kernelmodule te laden voor de gewenste geluidskaart met &man.kldload.8;. Dit kan vanaf de commandoregel: &prompt.root; kldload snd_emu10k1 Of door als volgt de juiste regel toe te voegen aan /boot/loader.conf: snd_emu10k1_load="YES" De bovenstaande voorbeelden zijn voor een Creative &soundblaster; Live! geluidskaart. De overige beschikbare laadbare geluidsmodules staan beschreven in /boot/defaults/loader.conf. Als niet compleet duidelijk is welk stuurprogramma gebruikt dient te worden, dan kan het met de module snd_driver geprobeerd worden: &prompt.root; kldload snd_driver Dit is een metastuurprogramma, dat in één keer de meest voorkomende apparaatstuurprogramma's laadt. Hiermee kan het zoeken naar het juiste stuurprogramma versneld worden. Het is ook mogelijk om alle geluidsstuurprogramma's te laden via de optie /boot/loader.conf. Om onder &os; 4.X alle geluidsstuurprogramma's te laden, dient de module snd geladen te worden in plaats van snd_driver. Een tweede mogelijkheid is ondersteuning voor een geluidskaart statisch in de kernel te compileren. In de onderstaande paragrafen staat meer informatie over hoe op die manier ondersteuning voor hardware toegevoegd kan worden. Meer informatie over het hercompileren van een kernel staat in . Aangepaste kernel maken met geluidsondersteuning Eerst moet het generieke audiostuurprogramma &man.sound.4; aan de kernel toegevoegd worden. Daarvoor dient het volgende te worden opgenomen in het bestand met kernelinstellingen: device sound Voor &os; 4.X kan het volgende gebruikt worden: device pcm Daarna kan ondersteuning voor de specifieke geluidskaart toegevoegd worden. Daarvoor moet bekend zijn welk stuurprogramma de kaart ondersteunt. Dit kan opgezocht worden in de lijst met ondersteunde audioapparaten in de Hardware Notes, waar de correcte stuurprogramma's voor geluidskaarten beschreven staan. Zo wordt een Creative &soundblaster; Live! geluidskaart bijvoorbeeld ondersteund door het stuurprogramma &man.snd.emu10k1.4;. Ondersteuning voor deze kaart kan als volgt worden toegevoegd: device "snd_emu10k1" In de hulppagina voor een stuurprogramma staat welke syntaxis gebruikt kan worden. Informatie over de syntaxis van geluidsstuurprogramma's in de kernelinstellingen staat ook in /usr/src/sys/conf/NOTES (/usr/src/sys/i386/conf/LINT voor &os; 4.X). Voor niet-PnP ISA-kaarten kan het nodig zijn dat de kernel informatie gegeven moet worden over de instellingen van een geluidskaart (IRQ, I/O poort, enzovoort). Dit kan via het bestand /boot/device.hints. Bij het starten van een systeem leest de &man.loader.8; dat bestand uit en geeft de instellingen door aan de kernel. Zo gebruikt een oude Creative &soundblaster; 16 ISA niet-PnP-kaart het stuurprogramma &man.snd.sbc.4; en dient de volgende regel toegevoegd te worden aan het bestand met kernelinstellingen: device snd_sbc Daarnaast moet het volgende worden toegevoegd aan /boot/device.hints: hint.sbc.0.at="isa" hint.sbc.0.port="0x220" hint.sbc.0.irq="5" hint.sbc.0.drq="1" hint.sbc.0.flags="0x15" In dit geval gebruikt de kaart I/O poort 0x220 en IRQ 5. De gebruikte syntaxis voor /boot/device.hints staat beschreven in de hulppagina voor het geluidsstuurprogramma. In &os; 4.X worden deze instellingen direct in het bestand met kernelinstellingen gezet. In het geval van de bovenstaande ISA-kaart gaat dat al volgt: device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15 De bovenstaande instellingen zijn de standaard instellingen. In sommige gevallen moeten IRQ of andere instellingen gewijzigd worden om een apparaat juist te laten werken. In &man.snd.sbc.4; staat meer informatie. Onder &os; 4.X hebben sommige systemen met audioapparaten op het moederbord de volgende optie in het bestand met kernelinstellingen nodig: options PNPBIOS Geluidskaart testen Na het herstarten met de aangepaste kernel of na het laden van de benodigde module, hoort de geluidskaart ongeveer als volgt te verschijnen in de systeemberichtbuffer (&man.dmesg.8;): pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0 pcm0: [GIANT-LOCKED] pcm0: <Cirrus Logic CS4205 AC97 Codec> De status van de geluidskaart kan gecontroleerd worden via het bestand /dev/sndstat: &prompt.root; cat /dev/sndstat FreeBSD Audio Driver (newpcm) Installed devices: pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384 kld snd_ich (1p/2r/0v channels duplex default) De uitvoer kan per systeem wat verschillen. Als er geen apparaten pcm verschijnen, dienen eerdere stappen bekeken te worden. Bekijk nogmaals de instellingen van de kernel en bevestig dat het juiste apparaat is gekozen. Veel voorkomende problemen staan beschreven in . Als het goed is werkt de geluidskaart nu. Als de cd-rom of DVD-ROM drive juist is aangesloten op de geluidskaart, dan kan er een CD in de drive gestoken worden en kan deze met &man.cdcontrol.1; afgespeeld worden: &prompt.user; cdcontrol -f /dev/acd0 play 1 Applicaties als audio/workman kunnen een vriendelijker interface bieden. Wellicht is het handig om een applicatie als audio/mpg123 te installeren om naar MP3 audiobestanden te luisteren. Een snelle manier om de kaart te testen is het als volgt sturen van data naar /dev/dsp: &prompt.user; cat filename > /dev/dsp filename kan ieder bestand zijn. Deze commandoregel hoort wat ruis tot gevolg te hebben, waardoor wordt bevestigd dat de geluidskaart echt werkt. &os; 4.X gebruikers moeten de geluidskaart apparaatnodes maken voordat hij gebruikt kan worden. Als de kaart voorkomt in de berichtbuffer als pcm0, dan dient het volgende als root uitgevoerd te worden: &prompt.root; cd /dev &prompt.root; sh MAKEDEV snd0 Als de kaart herkend is als pcm1, kunnen dezelfde stappen als hierboven gevolgd worden, waarbij snd0 wordt vervangen door snd1. MAKEDEV maakt een groep apparaatnodes aan die gebruikt worden voor de applicaties die met geluid te maken hebben. Niveau's voor de geluidskaartmixer kunnen aangepast worden met het commando &man.mixer.8;. Er staan meer details in &man.mixer.8;. Bekende problemen apparaatnodes I/O poort IRQ DSP Fout Oplossing unsupported subdevice XX Eén of meer van de apparaatnodes zijn niet correct gemaakt. De bovenstaande stappen dienen opnieuw uitgevoerd te worden. sb_dspwr(XX) timed out De I/O poort is niet correct ingesteld. bad irq XX Het IRQ is niet correct ingesteld. Zorg dat het ingestelde IRQ en het IRQ voor het geluid hetzelfde zijn. xxx: gus pcm not attached, out of memory Er is niet genoeg geheugen beschikbaar om het apparaat te gebruiken. xxx: can't open /dev/dsp! Controleer fstat | grep dsp of een ander programma het apparaat geopend heeft. Bekende probleemgevallen zijn esound en KDE's geluidsondersteuning. Munish Chopra Geschreven door Meerdere geluidsbronnen gebruiken Het is vaak wenselijk om meerdere geluidsbronnen tegelijkertijd af te kunnen spelen, zoals wanneer esound of artsd het delen van een geluidsapparaat met een andere applicatie niet ondersteunen. Met &os; kan dit met Virtuele Geluidskanalen, die ingesteld kunnen worden met de &man.sysctl.8; faciliteit. Met virtuele kanalen kunnen de afspeelkanalen van een geluidskaart gemultiplext worden door het geluid in de kernel te mixen. Het aantal virtuele kanalen kan met twee sysctl knoppen als root als volgt ingesteld worden: &prompt.root; sysctl hw.snd.pcm0.vchans=4 &prompt.root; sysctl hw.snd.maxautovchans=4 In het bovenstaande voorbeeld worden vier virtuele kanelen gealloceerd, wat in het dagelijks gebruik voldoende is. In hw.snd.pcm0.vchans staat het aantal vitruele kanalen dat pcm0 heeft en is instelbaar als een apparaat is aangesloten. In hw.snd.maxautovchans staat het aantal virtuele kanalen dat aan een nieuw audio-apparaat wordt gegeven als het wordt aangesloten met &man.kldload.8;. Omdat de module pcm onafhankelijk van de hardware stuurprogramma's geladen kan worden, kan in hw.snd.maxautovchans opgeslagen worden hoeveel virtuele kanalen apparaten die later worden aangesloten krijgen. Als er geen gebruik wordt gemaakt van &man.devfs.5;, dan moeten applicaties wijzen naar /dev/dsp0.x, waar x tussen 0 en 3 ligt als hw.snd.pcm.0.vchans is ingesteld op 4, zoals in het bovenstaande voorbeeld. Op een systeem waar &man.devfs.5; wordt gebruikt, wordt het voorgaande voor een gebruiker automatisch transparant gealloceerd. Josef El-Rayes Geschreven door Standaardwaarden voor mixerkanalen instellen De standaard waarden voor de mixerkanelen zijn ingesteld in de broncode van het stuurprogramma &man.pcm.4;. Er zijn vele applicaties en daemons waarmee waarden voor de mixer ingesteld en onthouden kunnen worden en iedere keer bij het starten weer kunnen worden ingesteld. Maar dit is geen nette oplossing, omdat het netter is de standaardwaarden in te stellen op het niveau van het stuurprogramma. Die kunnen ingesteld worden door de gewenste waarden in te stellen in /boot/device.hints. Bijvoorbeeld: hint.pcm.0.vol="100" Met de bovenstaande instelling wordt het volume van een kanaal standaard op 100 ingesteld bij het laden van de module &man.pcm.4;. - Dit wordt alleen ondersteund in &os; 5.3 en - hoger. + Dit wordt alleen ondersteund in &os; 5.3-RELEASE en + later. Chern Lee Geschreven door MP3 audio Met MP3 (MPEG Layer 3 Audio) kan geluid bijna in CD-kwaliteit weergegeven worden en dus is er een goede reden om dit vooral niet na te laten op een &os; werkstation. MP3 spelers Verreweg de meest populaire X11 MP3 speler is XMMS (X Multimedia Systeem). In XMMS kunnen Winamp skins gebruikt worden, omdat de GUI vrijwel gelijk is aan die van Nullsoft's Winamp. XMMS heeft ook een eigen plug-in ondersteuning. XMMS kan geïnstalleerd worden via de multimedia/xmms port of package. De interface van XMMS is intuïtief met een playlist, grafische equalizer en meer. Gebruikers die bekend zijn met Winamp vinden XMMS vast eenvoudig te gebruiken. De port audio/mpg123 is een alternatieve MP3 speler die gebruik maakt van de commandoregel. mpg123 werkt door het geluidsapparaat en het MP3 bestand aan te geven op de commandoregel, zoals hieronder wordt aangegeven: &prompt.root; mpg123 -a /dev/dsp1.0 Foobar-GreatestHits.mp3 High Performance MPEG 1.0/2.0/2.5 Audio Player for Layer 1, 2 and 3. Version 0.59r (1999/Jun/15). Written and copyrights by Michael Hipp. Uses code from various people. See 'README' for more! THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK! Playing MPEG stream from Foobar-GreatestHits.mp3 ... MPEG 1.0 layer III, 128 kbit/s, 44100 Hz joint-stereo /dev/dsp1.0 dient gewijzigd te worden in het dsp apparaat van het systeem waarop de MP3 afgespeeld moet worden. CD audio tracks rippen Voordat een CD of een CD track naar MP3 ge-encodeerd kan worden moet de audiodata naar de harde schijf geript worden. Dit gaat door de ruwe CDDA (CD Digital Audio) data naar WAV-bestanden de kopiëren. Het hulpprogramma cdda2wav, dat onderdeel is van de suite sysutils/cdrtools, kan gebruikt worden om audio-informatie en de daarbij behorende informatie van CD's te rippen. Als de audio CD in de drive zit, kan het volgende commando als root uitgevoerd worden om een hele CD naar individuele (per track) WAV-bestanden te rippen: &prompt.root; cdda2wav -D 0,1,0 -B cdda2wav ondersteunt ATAPI (IDE) cd-rom drives. Om van een IDE drive te rippen, dient de apparaatnaam aangegeven te worden in plaats van de SCSI eenheidsnummers. Om bijvoorbeeld track 7 van een IDE drive te rippen: &prompt.root; cdda2wav -D /dev/acd0a -t 7 De optie geeft het SCSI apparaat 0,1,0 aan, dat overeenkomt met de uitvoer van cdrecord -scanbus. Om individuele tracks te rippen kan gebruik gemaakt worden van de optie : &prompt.root; cdda2wav -D 0,1,0 -t 7 In het bovenstaande voorbeeld wordt track 7 van de audio CD geript. Om een reeks tracks te rippen, bijvoorbeeld van 1 tot 7, kan een reeks opgegeven worden: &prompt.root; cdda2wav -D 0,1,0 -t 1+7 Ook het hulpprogramma &man.dd.1; kan gebruikt worden om audio tracks van ATAPI drives af te halen. Deze mogelijkheid wordt beschreven in . MP3's encoderen Tegenwoodig is de MP3 encoder lame. Lame staat in audio/lame in de portsstructuur. Met de geripte WAV-bestanden converteert het volgende commando audio01.wav naar audio01.mp3: &prompt.root; lame -h -b 192 \ --tt "Foo Titel" \ --ta "FooBar Artiest" \ --tl "FooBar Album" \ --ty "2005" \ --tc "Geript en encoded door Foo" \ --tg "Genre" \ audio01.wav audio01.mp3 192 kbits lijkt de standaard bitrate voor MP3 te zijn. Het is ook mogelijk 128 of 160 of andere bitrates te gebruiken. Hoe hoger de bitrate, hoe meer schijfruimte de uiteindelijke MP3-bestanden gebruiken, maar ook de kwaliteit wordt dan hoger. Met de optie wordt de modus hogere kwaliteit, maar iets langzamer ingeschakeld. Met de opties vanaf worden de ID3 tags ingegeven, die meestal informatie over een nummer bevatten en onderdeel uitmaken van het MP3-bestand. In de hulppagina voor lame staan nog meer opties die gebruikt kunnen worden bij het encoderen beschreven. MP3's decoderen Om een CD te kunnen branden van MP3's, moeten ze omgezet worden naar een niet gecomprimeerd WAV-formaat. Zowel XMMS als mpg123 ondersteunen de uitvoer van MP3 naar een niet gecomprimeerd bestandsformaat. Naar schijf schrijven met XMMS: Start XMMS; Klik rechts op het venster om het XMMS menu te zien; Selecteer Preference onder Options; Wijzig de Output Plugin naar Disk Writer Plugin; Klik Configure; Voer een map in (of kies browse) waar de ongecomprimeerde bestanden heengeschreven moeten worden; Laad de MP3-bestanden zoals gewoonlijk in XMMS, met het volume op 100% en de EQ instellingen uitgeschakeld; Klik Play. XMMS lijkt nu de MP3 af te spelen, maar er is geen muziek te horen. Nu wordt feitelijk de MP3 afgespeeld naar een bestand; Zorg ervoor dat de standaard Output Plugin wordt teruggezet naar hoe de instellingen waren om weer naar MP3's te kunnen luisteren. Schrijven naar stdout vanuit mpg123: Voer mpg123 -s audio01.mp3 > audio01.pcm uit. XMMS schijft een bestand in het WAV-formaat, terwijl mpg123 de MP3 converteert naar ruwe PCM audio data. Beide formaten kunnen gebruikt worden met cdrecord om audio CD's te maken. Met &man.burncd.8; moeten ruwe PCM-bestanden gebruikt worden. Als er WAV-bestanden worden gebruikt, is er een tik-geluid te horen bij het begin van iedere track. Dit is het geluid van de kop van ieder WAV-bestand. Met het hulpprogramma SoX kan de kop van WAV-bestanden verwijderd worden. Dit programma kan geïnstalleerd worden met de port of package audio/sox &prompt.user; sox -t wav -r 44100 -s -w -c 2 track.wav track.raw In staat meer informatie over het gebruiken van een CD-brander in &os;. Ross Lippert Geschreven door Video afspelen Video afspelen is een relatief nieuwe en zich snel ontwikkelende richting voor applicaties. In tegenstelling tot voor audio werkt alles hier niet zo soepel. Voor er wordt begonnen is het van belang te weten welk model videokaart zich in een systeem bevindt en welke chip die gebruikt. Hoewel &xorg; en &xfree86; vele videokaarten ondersteunen, zijn er veel minder geschikt om goed video mee af te spelen. Er kan een lijst met ondersteunde extensies getoond worden voor X server met de gebruikte videokaart door het commando &man.xdpyinfo.1; uit te voeren terwijl X11 draait. Het is verstandig een kort MPEG-bestand beschikbaar te hebben dat gebruikt kan worden als testbestand voor het evalueren van de spelers en hun opties. Omdat sommige DVD-spelers standaard zoeken naar DVD media in /dev/dvd of deze apparaatnaam standaard in de broncode hebben staan, is het wellicht verstandig om een symbolische link te maken naar de juist apparaten: &prompt.root; ln -sf /dev/acd0c /dev/dvd &prompt.root; ln -sf /dev/racd0c /dev/rdvd In &os; 5.X, dat &man.devfs.5; gebruikt, worden net iets andere links aangeraden: &prompt.root; ln -sf /dev/acd0 /dev/dvd &prompt.root; ln -sf /dev/acd0 /dev/rdvd Vanwege de werking van &man.devfs.5;, blijven handmatig aangemaakte links niet bestaan als een systeem wordt herstart. Om automatisch symbolische links aan te laten maken als een systeem start, kunnen de volgende regels toegevoegd worden aan /etc/devfs.conf: link acd0 dvd link acd0 rdvd Daarnaast zijn voor het decoderen van DVD, waarvoor bijzondere DVD-ROM functies aangeroepen worden, schrijfrechten op de DVD-apparaten nodig. kernelopties CPU_ENABLE_SSE kernelopties USER_LDT Een aantal van de hier besproken ports hebben specifieke kernelopties nodig om correct gebouwd te worden. Voordat ze gebouwd worden, dienen deze opties aan het bestand met kernelinstellingen toegevoegd te worden, dient de kernel opnieuw gebouwd te worden en het systeem opnieuw gestart te worden: option CPU_ENABLE_SSE option USER_LDT option USER_LDT bestaat niet in &os; 5.X. Om de gedeeld geheugen interface van X11 te verbeteren, wordt aangeraden dat een aantal variablelen van &man.sysctl.8; worden verhoogd: kern.ipc.shmmax=67108864 kern.ipc.shmall=32768 Videomogelijkheden vaststellen XVideo SDL DGA Er zijn een aantal methoden om video weer te geven onder X11. Welke echt werkt, is voornamelijk afhankelijk van de gebruikte hardware. Iedere hieronder beschreven methode geeft andere resultaten op andere hardware. De laatste tijd krijgt het renderen van video in X11 veel aandacht en bij iedere versie van &xorg; of &xfree86; kan er een aanzienlijke verbetering zijn. Een lijst van veel gebruikte video-interfaces: X11: normale X11 uitvoer met gebruikmaking van gedeeld geheugen; XVideo: een uitbreiding op de X11 interface die video in een door X11 getekend object ondersteunt; SDL: de Simple Directmedia Layer; DGA: de Direct Graphics Access; SVGAlib: low level console grafische laag. XVideo &xorg; en &xfree86; 4.X kennen een uitbreiding XVideo, ook bekend als Xvideo, Xv of xv, waarmee video direct weergegeven kan worden in getekende objecten door een speciale versneller. Deze uitbreiding geeft een goede afspeelkwaliteit, zelfs op machines met mindere specificaties. Of de uitbreiding actief is, kan gecontroleerd worden met het commando xvinfo: &prompt.user; xvinfo XVideo wordt ondersteund als de uitvoer er ongeveer als volgt uitziet: X-Video Extension version 2.2 screen #0 Adaptor #0: "Savage Streams Engine" number of ports: 1 port base: 43 operations supported: PutImage supported visuals: depth 16, visualID 0x22 depth 16, visualID 0x23 number of attributes: 5 "XV_COLORKEY" (range 0 to 16777215) client settable attribute client gettable attribute (current value is 2110) "XV_BRIGHTNESS" (range -128 to 127) client settable attribute client gettable attribute (current value is 0) "XV_CONTRAST" (range 0 to 255) client settable attribute client gettable attribute (current value is 128) "XV_SATURATION" (range 0 to 255) client settable attribute client gettable attribute (current value is 128) "XV_HUE" (range -180 to 180) client settable attribute client gettable attribute (current value is 0) maximum XvImage size: 1024 x 1024 Number of image formats: 7 id: 0x32595559 (YUY2) guid: 59555932-0000-0010-8000-00aa00389b71 bits per pixel: 16 number of planes: 1 type: YUV (packed) id: 0x32315659 (YV12) guid: 59563132-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) id: 0x30323449 (I420) guid: 49343230-0000-0010-8000-00aa00389b71 bits per pixel: 12 number of planes: 3 type: YUV (planar) id: 0x36315652 (RV16) guid: 52563135-0000-0000-0000-000000000000 bits per pixel: 16 number of planes: 1 type: RGB (packed) depth: 0 red, green, blue masks: 0x1f, 0x3e0, 0x7c00 id: 0x35315652 (RV15) guid: 52563136-0000-0000-0000-000000000000 bits per pixel: 16 number of planes: 1 type: RGB (packed) depth: 0 red, green, blue masks: 0x1f, 0x7e0, 0xf800 id: 0x31313259 (Y211) guid: 59323131-0000-0010-8000-00aa00389b71 bits per pixel: 6 number of planes: 3 type: YUV (packed) id: 0x0 guid: 00000000-0000-0000-0000-000000000000 bits per pixel: 0 number of planes: 0 type: RGB (packed) depth: 1 red, green, blue masks: 0x0, 0x0, 0x0 Sommige van de weergegeven formaten (YUV2, YUV12, enzovoort) zijn niet in iedere implementaties van XVideo beschikbaar en hun afwezigheid kan sommige spelers hinderen. Als het resultaat er als hieronder uitziet, is er geen ondersteuning voor XVideo aanwezig op de videokaart in een systeem: X-Video Extension version 2.2 screen #0 no adaptors present Als XVideo voor een kaart niet wordt ondersteund, dan betekent dat alleen dat het lastiger wordt om op een beeldscherm aan de vereisten voor het renderen van video te voldoen. Afhankelijk van de videokaart en de processor kan het toch nog mogelijk zijn om acceptabele prestaties neer te zetten. In staan verwijzingen naar leesvoer over mogelijkheden voor het verbeteren van prestaties. Eenvoudige Directmedia Laag De Eenvoudige Directmedia Laag (Simple Directmedia Layer), SDL, was bedoeld als een porting-laag tussen µsoft.windows;, BeOS en &unix;, waardoor cross-platform toepassingen konden worden ontwikkeld die efficiënt gebruik maken van geluid en beelden. De SDL laag biedt een abstractie op laag niveau naar de hardware die soms efficiënter kan zijn dan de X11 interface. De SDL staat in devel/sdl12. Directe Grafische Toegang Directe Grafische Toegang (Direct Graphics Access) is een X11 uitbreiding die een programma in staat stelt voorbij te gaan aan de X server en de framebuffer direct kan wijzigen. Omdat hij afhankelijk is van geheugenmapping op een laag niveau om dit delen uit te voeren, moeten programma's die er gebruik van maken als root draaien. De DGA uitbreiding kan getest en gebenchmarkt worden met &man.dga.1;. Als dga draait, verandert het de kleuren op een scherm als er een toets wordt ingedrukt. Om te stoppen kan de toets q gebruikt worden. Ports en packages met video videopoorten videopackages In dit onderdeel wordt de software die vanuit de &os; Portscollectie beschikbaar is voor het afspelen van video beschreven. Het afspelen van video is een tak van softwareontwikkeling die erg in beweging is en de mogelijkheden van de verschillende applicaties verschillen zeer waarschijnlijk van wat hier is beschreven. Als eerste is het belangrijk om te weten dat veel applicaties die met video te maken hebben en op &os; draaien ontwikkeld zijn als &linux; applicaties. Veel van die applicaties zijn op het moment van schrijven van beta-kwaliteit. Problemen die te verwachten zijn bij het gebruik van de beschreven videopakketten op &os; zijn: Een applicatie kan geen bestanden afspelen die zijn gemaakt met een andere applicatie; Een applicatie kan geen bestanden afspelen die met de applicatie zelf zijn gemaakt; Dezelfde applicatie, op twee verschillende machines gebouwd, speelt hetzelfde bestand op twee machines anders af; Een ogenschijlijk triviale filter, zoals het herschalen van beeldgrootte, kan resulteren in vreselijk vervelende artefacten door fouten in de routine voor het herschalen; Een applicatie dumpt zijn core regelmatig; Documentatie wordt niet geïnstalleerd bij de port en staat op het web of in de map work van de port. Veel van deze applicaties kunnen ook Linux-ismes vertonen. Zo kunnen er bijvoorbeeld problemen ontstaan door de wijze waarop standaard bibliotheken zijn geïmplementeerd in de &linux; distributies of een aantal van de mogelijkheden van de &linux;-kernel, waarvan door de makers van de applicatie wordt aangenomen dat ze aanwezig zijn. Dit soort problemen zijn niet altijd zichtbaar en er wordt ook omheen gewerkt door de beheerders van ports, wat tot de volgende mogelijke problemen kan leiden: Het gebruik van /proc/cpuinfo om processorkarakteristieken uit te lezen; Het verkeerd gebruiken van threads, waardoor een programma hangt als het klaar is, in plaats van dat het echt eindigt; Software die nog niet in de &os; Portscollectie zit en vaak gebruikt wordt samen met een applicatie die daar wel onderdeel van uitmaakt. Tot nu toe is gebleken dat de ontwikkelaars van applicaties wel coöperatief waren met de beheerders van ports om zo het aantal work-arounds dat nodig was voor het porten tot een minimum te beperken. MPlayer MPlayer is een zich snel ontwikkelende videospeler. De doelen van het MPlayer-team zijn snelheid en flexibiliteit onder &linux; en andere Unices. Het project is gestart toen de oprichter van het team genoeg had van de slechte afspeelprestaties van de destijds beschikbare spelers. Er zijn mensen die zeggen dat het grafische ontwerp is opgeofferd voor het stroomlijnen van het ontwerp, maar het blijkt dat, als een gebruiker gewend is aan de commandoregelopties en de toetsencommando's, de applicatie erg goed werkt. MPlayer bouwen MPlayer maken MPlayer staat in multimedia/mplayer. MPlayer voert een aantal hardwarecontroles uit tijdens het bouwen, wat resulteert in een binair bestand dat niet van het ene naar het andere systeem verplaatst kan worden. Daarom is het van belang dat het uit de ports wordt gebouwd en niet als binair package wordt geïnstalleerd. Daarnaast staan er ook nog opties die vanaf de make commandoregel meegegeven kunnen worden beschreven in de Makefile en aan het begin van de build: &prompt.root; cd /usr/ports/multimedia/mplayer &prompt.root; make N - O - T - E Take a careful look into the Makefile in order to learn how to tune mplayer towards you personal preferences! For example, make WITH_GTK1 builds MPlayer with GTK1-GUI support. If you want to use the GUI, you can either install /usr/ports/multimedia/mplayer-skins or download official skin collections from http://www.mplayerhq.hu/homepage/dload.html De standaard portopties zijn voor de meeste gebruikers voldoende. Maar als bijvoorbeeld de XviD codec nodig is, dan moet de optie WITH_XVID op de commandoregel meegegeven worden. Het standaard DVD-apparaat kan ook gedefinieerd worden met de optie WITH_DVD_DEVICE, waarbij standaard /dev/acd0 wordt gebruikt. Op het moment van schrijven wordt de MPlayer port gebouwd met de HTML documentatie en twee uitvoerbare bestanden, mplayer en mencoder, wat een hulpmiddel is voor het opnieuw encoderen van video. De HTML documentatie voor MPlayer is erg informatief. Als de lezer vindt dat er informatie over videohardware en interfaces in dit hoofdstuk mist, dan is de documentatie van MPlayer een zeer grondige aanvulling. Het is de moeite waard de tijd te nemen om de documentatie van MPlayer te lezen, als meer informatie over de ondersteuning van video in &unix; welkom is. MPlayer gebruiken MPlayer gebruiken Iedere gebruiker van MPlayer dient een submap .mplayer in zijn thuismap te hebben. Die kan als volgt gemaakt worden: &prompt.user; cd /usr/ports/multimedia/mplayer &prompt.user; make install-user De commando-opties voor mplayer staan in de hulppagina. Nog meer details staan in de HTML documentatie. In dit onderdeel worden slechts een aantal gebruiksmogelijkheden beschreven. Om een bestand als testfile.avi af te spelen met een van de beschikbare video-interfaces, kan de optie gebruikt worden: &prompt.user; mplayer -vo xv testfile.avi &prompt.user; mplayer -vo sdl testfile.avi &prompt.user; mplayer -vo x11 testfile.avi &prompt.root; mplayer -vo dga testfile.avi &prompt.root; mplayer -vo 'sdl:dga' testfile.avi Het is de moeite waard alle bovenstaande opties uit te proberen omdat hun relatieve prestatie afhangt van vele factoren die aanzienlijk verschillen tussen hardware. Om een DVD af te spelen dient testfile.avi vervangen te worden door waar N het titelnummer is dat afgespeeld moeten worden en APPARAAT de apparaatnode is voor de DVD-ROM. Om bijvoorbeeld titel 3 van /dev/dvd af te spelen: &prompt.root; mplayer -vo xv dvd://3 -dvd-device /dev/dvd Het standaard DVD-apparaat kan ingesteld worden bij het bouwen van de MPlayer port met de optie WITH_DVD_DEVICE. Standaard is dit apparaat /dev/acd0. Meer details staan in de Makefile van de port. Om te stoppen, pauzeren, verder te spoelen, enzovoort, kunnen de toetsendefinities gebruikt worden, die in te zien zijn door mplayer -h uit te voeren of de hulppagina te lezen. Overige belangrijke opties voor het afspelen zijn: , waarmee het volledige scherm wordt gebruikt, en , die prestatieverhogend werkt. Om ervoor te zorgen dat de commandoregels niet te lang worden, kan het bestand .mplayer/config met voorkeursinstellingen gemaakt worden: vo=xv fs=yes zoom=yes Tenslotte kan mplayer gebruikt worden om een DVD naar een bestand van het type .vob te rippen. Om de tweede titel van een DVD de dumpen kan het volgende commando gebruikt worden: &prompt.root; mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd Het uitvoerbestand out.vob, is van het type MPEG en kan bewerkt worden met andere in dit onderdeel besproken programma's. <command>mencoder</command> mencoder Voordat mencoder wordt gebruikt, is het verstandig de opties uit de HTML-documentatie te bekijken. Er is een hulppagina, maar die is niet echt bruikbaar zonder de HTML-documentatie. Er zijn ontelbare mogelijkheden om de kwaliteit te verhogen, de bitrate te verlagen en formaten te wijzigen en een aantal van die truuks maken het verschil tussen goede en slechte prestaties. Hieronder staan een aantal voorbeelden beschreven. Eenvoudigweg kopiëren: &prompt.user; mencoder input.avi -oac copy -ovc copy -o output.avi Verkeerde combinaties van commandoregelopties kunnen resulteren in uitvoerbestanden die zelfs niet af te spelen zijn door mplayer. Daarom wordt aangeraden om het bij de optie in mplayer te houden als het alleen maar nodig is een bestand te rippen. Om input.avi te converteren naar de MPEG4-codec met MPEG3-audio encoding (audio/lame is verplicht): &prompt.user; mencoder input.avi -oac mp3lame -lameopts br=192 \ -ovc lavc -lavcopts vcodec=mpeg4:vhq -o output.avi Hiermee wordt uitvoer gemaakt die af te spelen is met mplayer en xine. input.avi kan worden vervangen door en als root gedraaid worden om een DVD titel direct te hercoderen. Omdat het waarschijnlijk is dat de eerste experimenten niet direct tevredenstellend zijn, wordt aangeraden een titel eerst naar een bestand te dumpen en dat als werkbestand te gebruiken. <application>xine</application> videospeler De xine videospeler is een project met een brede scope, dat niet alleen tracht een allesomvattende video-oplossing te bieden, maar ook probeert een herbruikbare basisbibliotheek en een modulair uitvoerbaar bestand te maken dat uitgebreid kan worden met plug-ins. Het kan als package en port geïnstalleerd worden uit multimedia/xine. De xine speler heeft nog wat ruwe randjes, maar is zeker goed van start gegaan. In de praktijk heeft xine een snelle CPU met een snelle videokaart of ondersteuning voor de XVideo extensie nodig. De GUI is bruikbaar, maar wat onhandig. Op het moment van schrijven wordt er geen invoermodule bij xine geleverd waarmee CSS gecodeerde DVD's afgespeeld kunnen worden. Er zijn er die door andere partijen zijn gebouwd die dat type modules wel hebben, maar die zijn niet beschikbaar in de &os; Portscollectie. Vergeleken met MPlayer, doet xine meer voor de gebruiker, maar tegelijkertijd neemt het wat van de fijnafstellingsmogelijkheden weg. De xine videospeler werkt het beste op XVideo interfaces. Standaard start de xine speler op in een grafische gebruikersinterface. Via het menu kan een specifiek bestand geopend worden: &prompt.user; xine Het is ook mogelijk om zonder de GUI direct een bestand af te laten spelen: &prompt.user; xine -g -p mymovie.avi <application>transcode</application> hulpprogramma's De software transcode is geen speler, maar een verzameling hulpprogramma's voor het hercoderen van .avi en .mpg bestanden. Met transcode wordt het mogelijk om videobestanden samen te voegen, kapotte bestanden te repareren en commandoregelprogramma's te gebruiken met stdin/stdout stream interfaces. Net als MPlayer is transcode bijzonder experimentele software die vanuit de port multimedia/transcode gebouwd moet worden. Er zijn veel opties voor make beschikbaar en daaruit worden de volgende aangeraden: &prompt.root; make WITH_LIBMPEG2=yes Als ook multimedia/avifile wordt geïnstalleerd, dan dient WITH_AVIFILE aan de make commandoregel te worden toegevoegd: &prompt.root; make WITH_AVIFILE=yes WITH_LIBMPEG2=yes Hieronder staan twee voorbeelden beschreven waarin transcode wordt gebruikt voor het converteren van video met als resultaat anders geschaalde uitvoer. Het eerste encodeert de uitvoer naar een openDIVX AVI-bestand, het tweede encodeert het naar het meer portabele formaat MPEG. &prompt.user; transcode -i input.vob -x vob -V -Z 320x240 \ -y opendivx -N 0x55 -o output.avi &prompt.user; transcode -i input.vob -x vob -V -Z 320x240 \ -y mpeg -N 0x55 -o output.tmp &prompt.user; tcmplex -o output.mpg -i output.tmp.m1v -p output.tmp.mpa -m 1 Er is een hulppagina voor transcode, maar er is weinig documentatie voor de verschillende tc* programma's (zoals tcmplex) die ook zijn geïnstalleerd. Voor ieder commando is wel de commandoregeloptie beschikbaar, waarmee een korte beschrijving voor het gebruik van het programma wordt getoond. Als de twee vergeleken worden, draait transcode aanzienlijk langzamer dan mencoder, maar is de kans wel groter dat er een bestand uit komt dat op de meeste spelers afgespeeld kan worden. MPEG-bestanden die met transcode zijn gemaakt, zijn bijvoorbeeld al afgespeeld op &windows.media; Player en Apple's &quicktime;. Verder lezen De beschikbare videosoftware pakketten voor &os; zijn fors in ontwikkeling. Het is goed mogelijk dat in de nabije toekomst de meeste problemen die hier aan de kaak zijn gesteld, zijn opgelost. Intussen kunnen zij die het hoogst haalbare uit de A/V mogelijkheden voor &os; willen halen, dat het beste doen door wat beschikbaar is bij elkaar te scharrelen uit de beschikbare FAQ's and tutorials en meerdere programma's gebruiken. Het doel van deze paragraaf is de lezer wat richting te geven op dat vlak. De MPlayer documentatie is technisch erg informatief. Deze documenten kunnen het beste bekeken worden door iemand die veel kennis wil opdoen over video in &unix;. Op de MPlayer mailinglijst wordt het niet op prijsgesteld als iemand de documentatie niet heeft gelezen, dus het is verstandig RTFM in gedachten te houden alvorens bug reports naar ze te mailen. De xine HOWTO bevat een hoofdstuk over het verbeteren van prestaties, dat op alle spelers van toepassing is. Tenslotte zijn er nog een aantal veelbelovende applicaties die het proberen waard zijn: Avifile bestaat ook als port: multimedia/avifile; Ogle is er ook als port: multimedia/ogle; Xtheater; multimedia/dvdauthor, een open source pakket voor authoring van DVD content. Josef El-Rayes Oorspronkelijk geschreven door Marc Fonvieille Verbeterd en aangepast door TV-kaarten installeren TV-kaarten Inleiding Met TV-kaarten is het mogelijk om naar (kabel)uitzendingen te kijken op een computer. Op de meeste kaarten kan composiet video aangeleverd worden via een RCA of S-video input en sommige kaarten hebben ook een FM tuner. &os; biedt ondersteuning voor PCI-gebaseerde TV-kaarten met een Brooktree Bt848/849/878/879 of een Conexant CN-878/Fusion 878a Video Capture Chip met het stuurprogramma &man.bktr.4;. Het is van belang dat er op de kaart ook een ondersteunde tuner zit. Hiervoor kan &man.bktr.4; geraadpleegd worden, waarin een lijst met ondersteunde tuners staat. Stuurprogramma toevoegen Voordat de kaart gebruikt kan worden, dient het stuurprogramma &man.bktr.4; geladen te worden. Dit kan door de volgende regel aan /boot/loader.conf toe te voegen: bktr_load="YES" Daarnaast is het ook mogelijk om statisch ondersteuning voor de TV-kaart in de kernel te compileren. Dan dient de volgende regel toegevoegd te worden aan de kernelinstellingen: device bktr device iicbus device iicbb device smbus De extra stuurprogramma's zijn nodig omdat de kaartcomponenten verbonden zijn via een I2C bus. Met deze instellingen kan een nieuwe kernel gebouwd en geïnstalleerd worden. Als een systeem eenmaal ondersteuning biedt, hoort de TV-kaart ongeveer als volgt bij een herstart getoond te worden: bktr0: <BrookTree 848A> mem 0xd7000000-0xd7000fff irq 10 at device 10.0 on pci0 iicbb0: <I2C bit-banging driver> on bti2c0 iicbus0: <Philips I2C bus> on iicbb0 master-only iicbus1: <Philips I2C bus> on iicbb0 master-only smbus0: <System Management Bus> on bti2c0 bktr0: Pinnacle/Miro TV, Philips SECAM tuner. Deze berichten kunnen afwijken, afhankelijk van de gebruikte hardware. Het is van belang te controleren of de tuner juist herkend wordt; er kunnen nog een aantal instellingen gemaakt worden voor parameters met &man.sysctl.8; MIB's en in het kernelinstellingenbestand. Om bijvoorbeeld het gebruik van een Philips SECAM tuner te forceren, kan de volgende regel aan het bestand met kernelinstellingen worden toegevoegd: options OVERRIDE_TUNER=6 Dit kan ook via een instelling van &man.sysctl.8;: &prompt.root; sysctl hw.bt848.tuner=6 In &man.bktr.4; en /usr/src/sys/conf/NOTES staan meer details over de beschikbare opties (onder &os; 4.X dient voor /usr/src/sys/conf/NOTES het bestand /usr/src/sys/i386/conf/LINT gelezen te worden). Handige programma's Om een TV-kaart te gebruiken, dient een van de volgende applicaties geïnstalleerd te worden: multimedia/fxtv biedt TV-in-een-window en beeld/audio/videocapture mogelijkheden; multimedia/xawtv is ook een TV applicatie met dezelfde mogelijkheden als fxtv; misc/alevt decodeert Videotext/Teletext en kan deze weergeven; audio/xmradio, een applicatie om de FM tuner die bij sommige TV-kaarten zit te gebruiken; audio/wmtune, een handige bureaubladapplicatie voor radiotuners. Er zijn nog meer applicaties beschikbaar in de Portscollectie. Problemen oplossen Bij problemen met een TV-kaart dient eerst gecontroleerd te worden of de videocapture chip en de tuner echt ondersteund worden door het stuurprogramma &man.bktr.4; en of de juiste instellingen worden gebruikt. Voor meer ondersteuning en vragen over een specifieke TV-kaart is het aan te raden de archieven van de &a.multimedia.name; mailinglijst te raadplegen of er contact mee op te nemen. Marc Fonvieille Geschreven door Scanners scanners Inleiding In &os; is het, net als in andere moderne besturingssystemen, mogelijk om scanners te gebruiken. Gestandaardiseerde toegang tot scanners is mogelijk met de SANE (Scanner Access Now Easy) API uit de &os; Portscollectie. SANE gebruikt ook een aantal &os; apparaatstuurprogramma's om toegang te krijgen tot de hardware van de scanner. &os; ondesteunt SCSI en USB scanners. Het is van belang te controleren of een scanner door SANE wordt ondersteund voordat er instellingen worden gemaakt. SANE heeft een lijst met ondersteunde apparaten waarin gekeken kan worden of een scanner wordt ondersteund en wat de status voor ondersteuning is. In &man.uscanner.4; staat een lijst met ondersteunde USB-scanners. Kernel instellen Zoals hierboven al is aangegeven, worden zowel SCSI als USB-scanners ondersteund. Afhankelijk van de gebruikte scannerinterface zijn verschillende apparaatstuurprogramma's nodig. USB interface In de GENERIC kernel zitten standaard de apparaatstuurprogramma's die nodig zijn voor ondersteuning van USB-scanners. In het geval wordt besloten tot het maken van een aangepaste kernel, dan dienen de volgende regels in het kernelinstellingenbestand te worden opgenomen: device usb device uhci device ohci device uscanner Afhankelijk van de USB-chipset op een moederbord, is alleen device uhci of device ohci nodig, maar het opnemen van beiden in het bestand met kernelinstellingen is niet schadelijk. Als het niet wenselijk is een nieuwe kernel te bouwen en er wordt geen GENERIC kernel gebruikt, dan kan de apparaatstuurprogrammamodule &man.uscanner.4; direct geladen worden met &man.kldload.8;: &prompt.root; kldload uscanner Om de module bij iedere systeemstart te laden kan de volgende regel aan /boot/loader.conf worden toegevoegd: uscanner_load="YES" Na een herstart met een juiste ingestelde kernel of na het laden van de benodigde module, kan de USB-scanner aangesloten worden. De scanner hoort ongeveer als volgt gemeld te worden in de systeemberichtbuffer (&man.dmesg.8;): uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2 Het bovenstaande geeft aan dat de scanner de apparaatnode /dev/uscanner0 gebruikt. Om onder &os; 4.X bepaalde USB-apparaten te zien, moet daar de USB daemon (&man.usbd.8;) draaien. Om die in te schakelen, dient usbd_enable="YES" toegevoegd te worden aan /etc/rc.conf en dient een systeem herstart te worden. SCSI interface Als een scanner een SCSI interface heeft, is het belangrijk te weten welk SCSI controllerbord gebruikt gaat worden. Afhankelijk van de gebruikte SCSI chipset, dient het bestand met kernelinstellingen aangepast te worden. De GENERIC kernel ondersteunt de meest voorkomende SCSI controllers. In het bestand NOTES (LINT onder &os; 4.X) is de juiste instelling te vinden die toegevoegd moet worden aan het bestand met kernelinstellingen. Naast het toevoegen van het juiste SCSI-adapter stuurprogramma, dienen ook de volgende regels opgenomen te worden in het kernelinstellingenbestand: device scbus device pass Als de kernel juist gecompileerd is, horen de apparaten zichtbaar te zijn in de systeemberichtbuffer tijdens het opstarten: pass2 at aic0 bus 0 target 2 lun 0 pass2: <AGFA SNAPSCAN 600 1.10> Fixed Scanner SCSI-2 device pass2: 3.300MB/s transfers Als een scanner niet aan staat tijdens het opstarten, is het nog mogelijk handmatig detectie te forceren door de SCSI-bus te laten scannen met &man.camcontrol.8;: &prompt.root; camcontrol rescan all Re-scan of bus 0 was successful Re-scan of bus 1 was successful Re-scan of bus 2 was successful Re-scan of bus 3 was successful In het bovenstaande geval zal de scanner ongeveer als volgt verschijnen in de lijst met SCSI-apparaten: &prompt.root; camcontrol devlist <IBM DDRS-34560 S97B> at scbus0 target 5 lun 0 (pass0,da0) <IBM DDRS-34560 S97B> at scbus0 target 6 lun 0 (pass1,da1) <AGFA SNAPSCAN 600 1.10> at scbus1 target 2 lun 0 (pass3) <PHILIPS CDD3610 CD-R/RW 1.00> at scbus2 target 0 lun 0 (pass2,cd0) Meer details over SCSI-apparaten staan in &man.scsi.4; en &man.camcontrol.8;. SANE instellen Het SANE systeem is opgesplitst in twee delen: de backends (graphics/sane-backends) en de frontends (graphics/sane-frontends). Het deel met de backends zorgt voor de toegang tot de scanner zelf. In de lijst met door SANE ondersteunde apparaten staat welk backend welke scanner(s) ondersteunt. Het is echt nodig het juiste backend vast te stellen, omdat het anders bijzonder lastig wordt een scanner aan de praat te krijgen. Het deel met frontends levert een grafische scaninterface (xscanimage). Als eerste dient de port of het package graphics/sane-backends geïnstalleerd te worden. Daarna kan met het commando sane-find-scanner gecontroleerd worden welke scanner er door het SANE systeem is gedetecteerd: &prompt.root; sane-find-scanner -q found SCSI scanner "AGFA SNAPSCAN 600 1.10" at /dev/pass3 In de uitvoer is te lezen welk type interface en welke apparaatnode worden gebruikt om de scanner met een systeem te verbinden. Het merk en het model worden wellicht niet getoond, maar dat is ook niet echt van belang. Sommige USB-scanners verlangen dat er firmware wordt geladen. Dit wordt uitgelegd in de hulppagina van het backend. Het is ook van belang &man.sane-find-scanner.1; en &man.sane.7; te lezen. Hierna kan gecontroleerd worden of de scanner ook te zien is voor een scanner-frontend. Er zit bij de SANE backends een standaard hulpprogramma &man.scanimage.1;. Met dit commando kunnen de apparaten zichtbaar gemaakt worden en kan vanaf de commandoregel gescand worden. Met de optie kunnen de scannerapparaten getoond worden: &prompt.root; scanimage -L device `snapscan:/dev/pass3' is a AGFA SNAPSCAN 600 flatbed scanner De afwezigheid van uitvoer of een bericht dat aangeeft dat er geen scanners zijn aangetroffen, betekent dat &man.scanimage.1; niet in staat is een scanner te identificeren. Als dit gebeurt, dient het instellingenbestand voor het backend aangepast te worden en dient daar de juiste instelling gemaakt te worden. De map /usr/local/etc/sane.d/ bevat alle bestanden met instellingen voor de backends. Het is bekend dat dit identificatieprobleem optreedt bij bepaalde USB-scanners. De USB-scanner die in wordt gebruikt, toont bijvoorbeeld de volgende informatie met sane-find-scanner: &prompt.root; sane-find-scanner -q found USB scanner (UNKNOWN vendor and product) at device /dev/uscanner0 De bovenstaande uitvoer geeft aan dat de scanner juist is gedetecteerd, dat hij de USB interface gebruikt en is aangesloten op de apparaatnode /dev/uscanner0. Nu kan gecontroleerd worden of de scanner juist wordt geïdentificeerd: &prompt.root; scanimage -L No scanners were identified. If you were expecting something different, check that the scanner is plugged in, turned on and detected by the sane-find-scanner tool (if appropriate). Please read the documentation which came with this software (README, FAQ, manpages). Omdat in het bovenstaande voorbeeld de scanner niet wordt geïdentificeerd, dient het bestand /usr/local/etc/sane.d/epson.conf gewijzigd te worden. De gebruikte scanner is een &epson.perfection; 1650, dus in dit geval dient voor de scanner het backend epson gebruikt te worden. Het is van belang om het commentaar in de instellingenbestanden van de backends te lezen. Het aanpassen van regels is eenvoudig: plaats een commentaarkarakter voor alle regels voor andere interfaces dan die nodig zijn weg (in dit geval worden alle regels die beginnen met het woord scsi uitgeschakeld, omdat er een USB interface wordt gebruiken), en dan kan onderaan het bestand een regel met de gebruikte interface en apparaatnode geplaatst worden: usb /dev/uscanner0 Het is aan te raden de opmerkingen te lezen in het bestand met instellingen voor het backend en ook de hulppagina, omdat daarin meer details en de correcte syntaxis te vinden zijn. Nu kan gecontroleerd worden of de scanner wèl juist wordt geïdentificeerd: &prompt.root; scanimage -L device `epson:/dev/uscanner0' is a Epson GT-8200 flatbed scanner In het bovenstaande voorbeeld wordt duidelijk dat de USB-scanner is geïdentificeerd. Het is niet belangrijk dat het merk en model niet overeenkomen. Het belangrijkste is het veld `epson:/dev/uscanner0', dat de juiste benamingen voor het backend en de apparaatnode aangeeft. Als scanimage -L in staat is een scanner goed te zien, dan zijn de instellingen compleet. Er kan nu met het apparaat gescand worden. Hoewel &man.scanimage.1; in staat is om vanaf de commandoregel te scannen, is het aan te raden beelden te scannen vanuit de grafische gebruikersinterface. SANE heeft een eenvoudige, maar efficiënte grafische interface: xscanimage (graphics/sane-frontends). Xsane (graphics/xsane) is een ander populair grafisch scanfrontend, dat geavanceerde mogelijkheden biedt, zoals meerdere scanmodi (fotokopie, fax, enzovoort), kleurcorrectie, batchscannen, enzovoort. Beide applicaties zijn als plug-in voor GIMP te gebruiken. Scannergebruik voor andere gebruikers toestaan Alle voorgaande taken zijn uitgevoerd met root rechten, maar het is wellicht ook nodig dat andere gebruikers de scanner kunnen gebruiken. Dan heeft een gebruiker lees- en schrijfrechten nodig op de apparaatnode voor een scanner. Een USB-scanner gebruikt bijvoorbeeld apparaatnode /dev/uscanner0, waarvan de groep operator eigenaar is. Door gebruiker joe lid te maken van de groep operator, kan die gebruiker de scanner gebruiken: &prompt.root; pw groupmod operator -m joe In &man.pw.8; staan meer details. Op de apparaatnode /dev/uscanner0 moeten ook de juiste rechten staan. Standaard kan de groep operator alleen lezen op de apparaatnode. Dit is te wijzigen door de volgende regel aan /etc/devfs.rules toe te voegen: [system=5] add path uscanner0 mode 660 Daarna kan de volgende regel aan /etc/rc.conf toegevoegd worden en dient een machine herstart te worden: devfs_system_ruleset="system" Meer informatie over de bovenstaande instellingen staan in &man.devfs.8; manual page. Onder &os; 4.X heeft de groep operator standaard lees- en schrijfrechten op /dev/uscanner0. Natuurlijk dient ook beveiliging een factor te zijn in de afweging of een gebruiker lid gemaakt moet worden van een bepaalde groep, zeker als dat om de groep operator gaat. 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 2bca9a606f..4b90c68720 100644 --- a/nl_NL.ISO8859-1/books/handbook/network-servers/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/network-servers/chapter.sgml @@ -1,5553 +1,5618 @@ 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 schijfruimte 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, cd-rom 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 cd-rom 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 gebruikers 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. Versies van &os; 5.3 en later bevatten BIND9 en aanwijzingen voor het instellen daarvan zijn later in dit hoofdstuk te vinden. Gebruikers van &os; 5.2 en eerdere versies kunnen BIND9 installeren vanuit de port net/bind9. 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. 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"; }; 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> <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. + + + + Tom + Rhodes + Geschreven door + + + + 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. + In de afgelopen jaren hebben steeds meer bedrijven zich + op Internet gericht om hun omzet te verhogen en hun + zichtbaarheid te vergroten. Hiermee is ook de behoefte aan + interactieve webcontent toegenomen. Hoewel sommige bedrijven + zoals µsoft; oplossingen hebben geïntroduceerd + voor hun eigen (proprietary) producten, heeft ook de open + source gemeenschap een antwoord op de vraag gegeven. Een van + die antwoorden, breed ingezet, heet + PHP. + + PHP, ook bekend als + Hypertext Preprocessor, is een algemene + scripttaal die bijzonder geschikt is voor webontwikkeling. + Het is mogelijk de taal in te bedden in + HTML en de syntaxis is afgeleid van C, + &java; en Perl met de bedoeling webontwikkelaars in staat te + stellen en dynamisch samengestelde pagina's te + schrijven. + + Om aan de Apache webserver + ondersteuning voor PHP5 toe te voegen kan + eerst de port www/mod_php5 toegevoegd + worden. + + Hiermee worden de modules die nodig zijn voor de + ondersteuning van dynamische webapplicaties + geïnstalleerd en ingesteld. De volgende regels dienen + in /usr/local/etc/apache/httpd.conf te + staan: + + LoadModule php5_module libexec/apache/libphp5.so +AddModule mod_php5.c + <IfModule mod_php5.c> + DirectoryIndex index.php index.html + </IfModule> + + <IfModule mod_php5.c> + AddType application/x-httpd-php .php + AddType application/x-httpd-php-source .phps + </IfModule> + + Na afronding dient eenvoudigweg apache herstart te worden + met apachectl: + + &prompt.root; apachectl graceful + + De ondersteuning voor PHP in &os; is + extreem modulair. Als ondersteuning voor een bepaalde + extensie gewenst is, hoeft een beheerder alleen maar de + bewust port te installeren en + Apache te herstarten zoals + hierboven is aangegeven. + + Om bijvoorbeeld ondersteuning voor de + MySQL databaseserver aan + PHP5 toe te voegen + kan gewoonweg de port databases/php5-mysql + geïnstalleerd worden en het volgende commando gegeven + worden: + + &prompt.root; apachectl graceful + + Hiermee wordt de MySQL + ondersteuning in + Apache ingeschakeld. 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 a9d373f83b..c638d41bf0 100644 --- a/nl_NL.ISO8859-1/books/handbook/pgpkeys/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/pgpkeys/chapter.sgml @@ -1,940 +1,961 @@ 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.barner; &pgpkey.barner; &a.dougb; &pgpkey.dougb; &a.tobez; &pgpkey.tobez; &a.damien; &pgpkey.damien; &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.jcamou; &pgpkey.jcamou; &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.lawrance; + &pgpkey.lawrance; + + &a.leeym; &pgpkey.leeym; + + &a.sam; + &pgpkey.sam; + + + + &a.jylefort; + &pgpkey.jylefort; + + &a.netchild; &pgpkey.netchild; &a.lesi; &pgpkey.lesi; &a.glewis; &pgpkey.glewis; &a.delphij; &pgpkey.delphij; &a.avatar; &pgpkey.avatar; &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.flz; &pgpkey.flz; &a.viny; &pgpkey.viny; + + &a.ume; + &pgpkey.ume; + + &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 e0178b9e8f..dbf964cd33 100644 --- a/nl_NL.ISO8859-1/books/handbook/security/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/security/chapter.sgml @@ -1,5559 +1,5558 @@ 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 het hulpprogramma Portaudit gebruikt kan worden om softwarepakketten uit de Portscollectie te auditen; Hoe om te gaan met publicaties van &os; beveiligingswaarschuwingen; Iets van Procesaccounting en hoe dat is in te schakelen in &os;. 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 apparaten 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 apparaten 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 apparaat. 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 apparaat mee te compileren. sysctl Maar zelfs als het bpf apparaat is uitgeschakeld, dan zijn er nog /dev/mem en /dev/kmem. De inbreker kan namelijk nog schrijven naar ruwe schrijfapparaten. 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 apparaat of een ander snuffelapparaat 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 apparaten 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, enzovoort 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 schijfruimte 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 apparaten 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 (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> .k5login .k5users Voor gebruikers binnen een wereld wijst hun Kerberos principal (bv. tillman@EXAMPLE.ORG) gewoonlijk naar 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. Certificaten 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 &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 apparaten 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 apparaat 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 apparaat 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. <application>sshd</application> 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 Geschreven door Portaudit Monitoren van beveiligingsproblemen met andere software In de afgelopen jaren zijn er in de beveiligingswereld veel vorderingen gemaakt op het gebied van inzicht in kwetsbaarheden. Als er software naast het besturingssysteem wordt geïnstalleerd en ingesteld neemt op vrijwel ieder besturingssysteem het risico op inbraak toe. Inzicht in kwetsbaarheid is een vitale factor in beveiliging en hoewel &os; waarschuwingen publiceert voor het basissysteem, gaat het publiceren van waarschuwingen voor alle overige software de scope van het &os; Project te buiten. Er is een manier om inzicht te krijgen in de kwetsbaarheden voor additionele software en als beheerder gewaarschuwd te worden. Voor dit doel bestaat het &os; hulpprogramma Portaudit. De port security/portaudit zoekt naar bekende beveiligingsproblemen in een database die wordt bijgewerkt en onderhouden door het &os; Security Team en portontwikkelaars. Voordat Portaudit gebruikt kan worden dient het geïnstalleerd te worden uit de Portscollectie: &prompt.root; cd /usr/ports/security/portaudit && make install clean Tijdens het installatieproces worden de instellingenbestanden voor &man.periodic.8; bijgewerkt, waardoor Portaudit uitvoer in de dagelijkse - security runs meekomt. Er is geen verdere instelling - nodig. + security runs meekomt. Het is van belang dat de e-mails die + aan de e-mailaccount van root worden + gezonden en uit de dagelijkse beveiligingsronde komen ook echt + worden gelezen. Er zijn geen verdere instellingen nodig. - Ma de installatie dient de beheerder de database bij te + Na de installatie dient de beheerder de database bij te werken die lokaal staat in /var/db/portaudit: &prompt.root; portaudit -F De database wordt automatisch bijgewerkt tijdens de &man.periodic.8; run; dus het voorgaande commando is volledig optioneel. Het is alleen nodig om de volgende voorbeelden na te kunnen doen. De software de uit de Portscollection is geïnstalleerd kan door een beheerder geaudit worden met: &prompt.root; portaudit -a Hieronder staat een voorbeeld van de uitvoer: Affected package: cups-base-1.1.22.0_1 Type of problem: cups-base -- HPGL buffer overflow vulnerability. Reference: <http://www.FreeBSD.org/ports/portaudit/40a3bca2-6809-11d9-a9e7-0001020eed82.html> 1 problem(s) in your installed packages found. You are advised to update or deinstall the affected package(s) immediately. Door met een webbrowser naar de aangegeven URL te gaan kan een beheerder meer informatie over de bewust kwetsbaarheid krijgen, waaronder de versies die het betreft, volgens de &os; Port versie en andere websites waarop beveiligingswaarschuwingen te lezen zijn. In het kort is Portaudit een krachtig hulpprogramma dat bijzonder handig is als het wordt gekoppeld aan het gebruik van de port Portupgrade. 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. Tom Rhodes Geschreven door Procesaccounting Procesaccounting Procesaccounting is een beveiligingsmethode die een beheerder in staat stelt om in de gaten te houden welke systeembronnen worden gebruikt, hoe ze over gebruikers verdeeld zijn, systeemmonitoring biedt en op minimalistische wijze het gebruik van commando's door gebruikers volgt. Deze methode heeft voordelen en nadelen. Eén van de positieve punten is dat een inbraak gevolgd kan worden tot het moment waarop die zich voordeed. Nadelen zijn de grootte van de logboeken die door procesaccounting worden gegenereerd en de schijfruimte die dat kost. In dit onderdeel wordt een beheerder de basis van procesaccounting getoond. Procesaccounting inschakelen en gebruiken Voordat procesaccounting gebruikt kan worden dient het door een beheerder worden ingeschakeld met de volgende commando's: &prompt.root; touch /var/account/acct - &prompt.root; accton /var/account/acct - &prompt.root; echo 'accounting_enable="YES"' >> /etc/rc.conf Eenmaal ingeschakeld begint accounting met het bijhouden van CPU statistieken, commands, enzovoort. Alle accounting logboeken worden in een niet leesbaar formaat bijgehouden en zijn uit te lezen met &man.sa.8;. Bij het uitvoeren zonder opties, toont sa informatie gerelateerd aan het aantal calls per gebruiker, de totale tijd in minuten die is verstreken, de totale CPU en gebruikerstijd in minuten, gemiddeld aantal I/O operaties, enzovoort. Informatie over uitgevoerde commando's kan bekeken worden met &man.lastcomm.1;. Zo kan met lastcomm bijvoorbeeld weergegeven worden welke commando's door gebruikers op een specifieke &man.ttys.5; zijn uitgevoerd: - &prompt.root; lastcomm ls - trhodes ttyp1 + &prompt.root; lastcomm ls trhodes ttyp1 Het bovenstaande commando toont ieder bekend gebruikt van ls door de gebruiker trhodes op terminal ttyp1. Veel andere handige opties staan beschreven in &man.lastcomm.1;, &man.acct.5; en &man.sa.8;.
diff --git a/nl_NL.ISO8859-1/books/handbook/x11/chapter.sgml b/nl_NL.ISO8859-1/books/handbook/x11/chapter.sgml index b4f755c119..078acce13c 100644 --- a/nl_NL.ISO8859-1/books/handbook/x11/chapter.sgml +++ b/nl_NL.ISO8859-1/books/handbook/x11/chapter.sgml @@ -1,1931 +1,1931 @@ Ken Tom Geupdate voor X.Org's X11 server door Marc Fonvieille Erik Radder Vertaald door Het X Window systeem Overzicht &os; gebruikt X11 om gebruikers een krachtige grafische gebruikersschil te bieden. X11 is een open-source implementatie van het X Window System dat zowel &xorg; als &xfree86; bevat. &os; versies tot en - met &os; 4.10-RELEASE en &os; 5.2.1-RELEASE hebben + met &os; 4.11-RELEASE en &os; 5.2.1-RELEASE hebben &xfree86; als standaard, de X11 server die is uitgebracht door The &xfree86; Project, Inc. Vanaf &os; 5.3-RELEASE is de officiële standaardversie van X11 gewijzigd naar &xorg;, de X11 server die is ontwikkeld door de X.Org Foundation. In dit hoofdstuk wordt de installatie en instelling van X11 behandeld met de nadruk op &xorg;. Meer informatie over de videohardware die X11 ondersteunt kan gevonden worden op &xorg; of &xfree86; websites. Na het lezen van dit hoofdstuk weet de lezer: Wat de componenten van het X Window systeem zijn en hoe zij samenwerken. Hoe X11 geïnstalleerd en ingesteld kan worden. Hoe verschillende window managers geïnstalleerd en gebruikt kunnen worden. Hoe &truetype; lettertypen in X11 te gebruiken. Hoe het systeem ingesteld moet worden voor grafisch aanmelden (XDM). Aangeraden voorkennis: Hoe extra software van derden te installeren (). In dit hoofdstuk wordt het installeren en instellen van de &xorg; en &xfree86; X11 servers behandeld. De bestanden met instellingen, commando's en syntaxis is overwegend hetzelfde. Waar dat anders is wordt het aangegeven. X begrijpen X voor de eerste keer gebruiken kan een hele schok zijn voor mensen die gewend zijn aan andere grafische omgevingen, zoals µsoft.windows; of &macos;. Het is niet noodzakelijk om alle details te kennen over de X componenten en hoe zij samenwerken, maar enige basiskennis draagt wel bij aan krachtiger gebruik kunnen maken van X. Waarom X? X is niet het eerste windows systeem dat geschreven is voor &unix;, maar wel het meest populaire. Het oorspronkelijke X ontwikkelteam werkte eerst aan een ander window systeem. De naam van dat systeem was W (van Window). X was gewoon de volgende letter in het alfabet. X kan gewoon X, X Window systeem, X11 of nog anders genoemd worden. X11 X Windows noemen kan door sommigen als een belediging opgevat worden. &man.X.7; kan hierover wat licht laten schijnen. Het X client/server model X is vanaf het begin aan ontworpen om netwerk-centraal te zijn en gebruikt een client-server model. In het X model, draait de X server op de computer waar het toetsenbord, beeldscherm en muis aan vast zit. De server is verantwoordelijk voor het regelen van beeldinformatie, verwerken van invoer van toetsenbord en muis, enzovoort. Iedere X applicatie (zoals XTerm, of &netscape;) is een client. Een client stuurt berichten naar de server zoals teken een venster op deze coördinaten en de server stuurt berichten terug zoals de gebruiker heeft op de OK knop gedrukt. Thuis of in kleine bedrijven draaien zowel de X server als de X clients op dezelfde machine. Het is heel goed mogelijk dat de X server op een minder krachtige desktop computer draait en de X applicaties (de clients) op een, zeg maar, dure krachtige machine van het bedrijf. Hier vindt de communicatie tussen de X client en server plaats over het netwerk. Dit verwart sommige mensen, omdat de X terminologie geheel omgekeerd is aan wat ze verwachten. Dat is namelijk dat de X server de grote krachtige machine aan het eind van de gang is en de X client de machine op hun bureau is. De X server is de machine met het beeldscherm en het toetsenbord en de X clients zijn de programma's die de vensters tonen. Het protocol vereist niet dat de clients en servers hetzelfde besturingssysteem moeten draaien of hetzelfde soort computer moeten zijn. Het is heel goed mogelijk om X server op een µsoft.windows; of Apple's &macos; te draaien en er zijn verschillende gratis en commerciële applicaties die dat doen. &xorg;, zit vanaf &os; 5.3-RELEASE als standaard X server bij &os; en is gratis onder een gelijksoortig licentie als de &os; licentie. Er zijn ook commerciële X servers voor &os; verkrijgbaar. De window manager De filosofie van het X ontwerp lijkt veel op die van &unix;: gereedschappen, geen beleid. Dit houdt in dat X niet bepaalt hoe een taak volbracht moet worden. In plaats daarvan worden gereedschappen geleverd aan de gebruiker die verantwoordelijk is voor het juiste gebruik hiervan. Deze filosofie verbreedt zich door X niet te laten bepalen hoe vensters er moeten uitzien op het scherm, hoe ze verplaatst moeten worden met de muis, welke toetsaanslagen gebruikt moeten worden om te schakelen tussen vensters (bijvoorbeeld AltTab in het geval van µsoft.windows;), hoe de titelbalken eruit moeten zien, of ze wel of niet sluitknoppen moeten hebben, enzovoort. In plaats daarvan delegeert X deze verantwoordelijkheid aan een applicatie die Window Manager heet. Er zijn tientallen window managers voor X: AfterStep, Blackbox, ctwm, Enlightenment, fvwm, Sawfish, twm, Window Maker en vele anderen. Elk van deze window managers heeft een eigen voorkomen en werking. Er zijn window managers met virtual desktops of met eigen toetscombinaties om de desktop te beheren; of hebben een Start knop of iets gelijksoortigs. Sommige gebruiken thema's die uiterlijk en beleving compleet veranderen door een nieuw thema te kiezen. Window managers zijn te vinden in de categorie x11-wm van de Portscollectie. De KDE en GNOME desktop omgevingen hebben hun eigen window managers die in het bureaublad zijn geïntegreerd. Iedere windows manager heeft zijn eigen manier van instellen. Sommige werken met handgetypte bestanden, anderen beschikken over grafische gereedschappen voor de meeste instellingen. Er is er minstens één (Sawfish) waarvan het instellingenbestand is geschreven in een dialect van de taal Lisp. Focusbeleid De window manager is ook verantwoordelijk voor het focusbeleid van de muis. Ieder window geörienteerd systeem heeft een manier nodig om te bepalen welk venster actief is, toetsaanslagen ontvangt en daarbij zichtbaar aangeeft welk venster actief is. Een bekend focus beleid heet click-to-focus. Dit model wordt gebruikt door µsoft.windows;, waarbij een venster actief wordt door er met de muis op te klikken. X ondersteunt geen specifiek focusbeleid. In plaats daarvan bepaalt de window manager op welk venster, op welk moment, de focus ligt. Een aantal window managers ondersteunen verschillende focusmethoden. Ze ondersteunen allemaal click to focus en de meerderheid ondersteunt ook nog andere. De meest populaire zijn: focus-volgt-muis (focus-follows-mouse) Het venster dat onder de muis zit is het venster waarop de focus ligt. Dit hoeft niet het venster te zijn dat bovenop alle andere vensters ligt. De focus verandert door te wijzen naar een ander venster. Het is niet nodig om er ook nog eens op te klikken. slordige-focus (sloppy-focus) Dit beleid is een kleine uitbreiding op focus-follows-mouse. Indien bij focus-follows-mouse de muis over het root venster (of de achtergrond) gaat, ligt op geen enkel venster de focus en gaan alle toetsaanslagen verloren. Bij sloppy-focus, verandert de focus alleen als de muis in een nieuw venster komt en niet als het huidige venster wordt verlaten. klik-voor-focus (click-to-focus) Het actieve venster wordt geselecteerd door erop te klikken. Het venster wordt dan opgetild en verschijnt dan voor alle andere vensters. Alle toetsaanslagen worden nu naar dit venster gestuurd, zelfs als de cursor naar een ander scherm wordt verplaatst. Veel window managers ondersteunen andere soorten of variaties op de bovenstaande typen muisbeleid. Hierover staat meestal meer in de documentatie van de betreffende window manager. Widgets De X aanpak door gereedschappen te leveren en niets af te dwingen breidt zich uit naar de widgets die in elk applicatievenster te zien zijn. Widget is een term voor alle dingen van de gebruikersinterface waarop geklikt kan worden of een andere actie mee uitgevoerd kan worden: knoppen, vinkvakjes, iconen, lijsten en ga zo maar door. µsoft.windows; noemt ze controls. µsoft.windows; en Apple's &macos; hebben beide een erg strikt widgetbeleid. Van de applicatieontwikkelaars wordt verwacht dat hun applicaties eenduidig zijn wat betreft uiterlijk en beleving. Bij X is ervoor gekozen geen grafische stijl of widgets te verplichten. X applicaties hebben dus niet allemaal hetzelfde uiterlijk. Er zijn populaire widgetsets en variaties, inclusief de originele Athena widgetset van MIT, &motif; (waarvan de widgetset van µsoft.windows; is afgeleid: schuine randen en drie gradaties grijs), OpenLook en anderen. De meeste nieuwe X applicaties gebruiken een modern uitziende widgetset: Qt, gebruikt door KDE, of GTK+ van het GNOME project. Vanuit dit oogpunt lijkt het enigzins op de &unix; desktop, wat het makkelijker maakt voor de beginnende gebruiker. X11 installeren Zowel &xorg; als &xfree86; kan op &os; geïnstalleerd worden. Vanaf &os; 5.3-RELEASE is &xorg; de standaard X11 implementatie voor &os;. &xorg; is de X11 server van de open source implementatie die is uitgebracht door de X.Org Foundation. &xorg; is gebaseerd op de code van &xfree86 4.4RC2 en X11R6.6. De X.Org Foundation heeft X11R6.7 uitgebracht in april - 2004 en X11R6.8.1 in september 2004. De laatstgenoemde versie + 2004 en X11R6.8.2 in februari 2005. De laatstgenoemde versie is beschikbaar via de &os; Portscollectie. Om &xorg; vanuit de Portscollectie te bouwen en te installeren: &prompt.root; cd /usr/ports/x11/xorg &prompt.root; make install clean Om &xorg; compleet te bouwen is tenminste 4 GB vrije schijfruimte nodig. Om &xfree86; vanuit de Portscollectie te bouwen en te installeren: &prompt.root; cd /usr/ports/x11/XFree86-4 &prompt.root; make install clean X11 kan ook als package geïnstalleerd worden doordat er binaire packages beschikbaar zijn voor &man.pkg.add.1;. Als hiervoor de optie remote fetching van &man.pkg.add.1; wordt gebruikt, dan moet het versienummer verwijderd worden. &man.pkg.add.1; haalt automatisch de laatste versie van het programma op. Om het package voor &xorg; op te halen en te installeren: &prompt.root; pkg_add -r xorg Het &xfree86; 4.X package kan geïnstalleerd worden met: &prompt.root; pkg_add -r XFree86 Het voorbeeld hierboven installeert de complete X11 distributie inclusief de servers, clients, lettertypen enz. Er zijn ook afzondelijke packages en ports beschikbaar voor verschillende delen van X11. De rest van dit hoofdstuk licht toe hoe X11 wordt ingesteld en hoe een productieve desktopomgeving gebouwd kan worden. Van <application>&xfree86;</application> naar <application>&xorg;</application> Zoals voor iedere port, moet /usr/ports/UPDATING bekeken worden voor de wijzigingen. In dit bestand staan instructies die nodig zijn om een systeem te migreren van &xfree86; naar &xorg;. CVSup kan gebruikt worden om de ports tree bij te werken voordat er wordt begonnen met een migratie. Naast deze maatregel moet ook sysutils/portupgrade geïnstalleerd worden voor de migratie van een X11 systeem. In /etc/make.conf kan de variabele X_WINDOW_SYSTEM=xorg ingesteld worden. Hierdoor is het zeker dat een systeem weet welke X11 er wordt gebruikt. De oude variabele XFREE86_VERSION is komen te vervallen en vervangen door de variabele X_WINDOW_SYSTEM. Dan kunnen de volgende commando's uitgevoerd worden: &prompt.root; pkg_delete -f /var/db/pkg/imake-4* /var/db/pkg/XFree86-* &prompt.root; cd /usr/ports/x11/xorg &prompt.root; make install clean &prompt.root; pkgdb -F &man.pkgdb.1; is onderdeel van de portupgrade software en kan packages inclusief afhankelijkheden bijwerken. Om &xorg; compleet te bouwen is tenminste 4 GB vrije schijfruimte nodig. Christopher Shumway Geschreven door X11 instellen &xfree86; 4.X &xfree86; &xorg; X11 Voorbereiding Voordat er wordt begonnen met het instellen van X11 is de volgende informatie van de te installeren machine nodig: Monitor specificaties Chipset van de videokaart Geheugen van de videokaart horizontale scansnelheid verticale scansnelheid De specificaties van de monitor worden door X11 gebruikt om de resolutie en ververssnelheid te bepalen. Deze specificaties kunnen normaal gesproken verkregen worden uit de bij de monitor geleverde documentatie of van de website van de leverancier. Er zijn twee nummerreeksen nodig: de horizontale scansnelheid (scan rate) en de vertikale syncronisatiesnelheid (vertical synchronization). De chipset van de videokaart bepaalt welk stuurprogramma X11 gebruikt om de grafische hardware aan te spreken. Bij de meeste chipsets kan dit automatisch bepaald worden, maar het is altijd handig om dit te weten voor het geval de automatische detectie niet correct werkt. Het geheugen op de videokaart bepaalt de resolutie en kleurdiepte waarmee het systeem kan werken. Dit is belangrijk omdat de gebruiker zo de grenzen van zijn systeem kent. X11 instellen Het instellen van X11 bestaat uit meerdere stappen. De eerste stap is het bouwen van een instellingenbestand. Dit kan met: &prompt.root; Xorg -configure In het geval van &xfree86; is dat: &prompt.root; XFree86 -configure Dit genereert een kaal X11 instellingbestand in de map /root met de naam xorg.conf.new. Feitelijk wordt bepaald waar de map staat door hoe er superuser rechten zijn verkregen. $HOME is anders bij gebruik van &man.su.1; of bij direct aanmelden. Het X11 programma probeert dan de grafische hardware te detecteren en schrijft een instellingenbestand dat de juiste stuurprogramma's laadt voor de gevonden hardware van het systeem. De volgende stap is het testen van de bestaande instellingen om te controleren of &xorg; met de grafische kaart van het doelsysteem kan werken. Dit kan met: &prompt.root; Xorg -config xorg.conf.new Voor &xfree86; gebruikers: &prompt.root; XFree86 -xf86config XF86Config.new Als er een zwart/grijs rooster en een X muis cursor verschijnen was de instelling successvol. Om de test te stoppen dient gelijktijdig op CtrlAlt Backspace gedrukt te worden. Als de muis niet werkt, dan moet deze eerst ingesteld worden. Zie in het &os; installatie hoofdstuk. X11 optimaliseren Nu moet xorg.conf.new (of XF86Config.new als &xfree86; wordt gebruikt) worden aangepast aan de smaak van de gebruiker. Hiervoor moet het bestand in een teksteditor zoals &man.emacs.1; of &man.ee.1; worden geladen. Eerst moeten de frequenties van de monitor toegevoegd worden. Die zijn meestal weergegeven als horizontale en vertikale synchronisatiesnelheid. Deze waarden worden toegevoegd aan xorg.conf.new in het onderdeel "Monitor": Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection In het instellingenbestand kunnen de sleutelwoorden HorizSync en VertRefresh missen. Als ze er niet staan, moeten ze toegevoegd worden met de juiste horizontale synchronisatiesnelheid achter het HorizSync sleutelwoord en de vertikale synchronisatiesnelheid achter het VertRefresh sleutelwoord. In het bovenstaande voorbeeld werden de gegevens van de monitor ingevoerd. X kan DPMS (Energy Star) eigenschappen gebruiken bij monitoren die dit ondersteunen. &man.xset.1; regelt de time-outs en kan de statussen standby, suspend of uit forceren. Om DPMS eigenschappen voor een monitor te activeren, moet de volgende regel toegevoegd worden aan de monitor sectie: Option "DPMS" xorg.conf XF86Config Als het instellingenbestand xorg.conf.new (of XF86Config.new) toch open staat in de editor dan kan ook meteen de gewenste standaardresolutie en kleurdiepte gekozen worden. Dit staat in het onderdeel "Screen": Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1024x768" EndSubSection EndSection Het sleutelwoord DefaultDepth beschrijft de kleurdiepte die standaard wordt gebruikt. Met de commandoregeloptie van &man.Xorg.1; (of &man.XFree86.1;) kan dit overschreven worden. Het sleutelwoord Modes beschrijft de resolutie waarmee gewerkt wordt bij de opgegeven kleurdiepte. Alleen VESA standaarden die door de grafische kaart van het systeem worden gedefinieerd worden ondersteund. In het voorbeeld hierboven is de standaardkleurdiepte 24 bits per pixel. Bij deze kleurdiepte is de toegestane resolutie 1024 bij 768 pixels. Bij het oplossen van problemen zijn de logboekbestanden van X11 vaak een goede hulp. Ze bevatten informatie voor ieder apparaat waar de X11 server verbinding mee maakt. Namen van &xorg; logboekbestanden hebben de vorm /var/log/Xorg.0.log (namen van &xfree86; logboekbestanden hebben de vorm XFree86.0.log). De precieze naam van een logboekbestand van variëren van Xorg.0.log tot Xorg.8.log enzovoort. Als alles is ingesteld, moet het instellingenbestand op een plaats gezet worden waar &man.Xorg.1; (of &man.XFree86.1;) het kan vinden. Dit is meestal /etc/X11/xorg.conf of /usr/X11R6/etc/X11/xorg.conf (voor &xfree86; heet het /etc/X11/XF86Config of /usr/X11R6/etc/X11/XF86Config): &prompt.root; cp xorg.conf.new /etc/X11/xorg.conf Voor &xfree86;: &prompt.root; cp XF86Config.new /etc/X11/XF86Config Het instellen van X11 is nu gereed. Om &xfree86; 4.X te kunnen starten met &man.startx.1; dient de x11/wrapper port geïnstalleert te worden. &xorg; heeft wrappercode en heeft geen extra wrapper nodig. De X11 server kan ook gestart worden met &man.xdm.1;. Er zit ook een grafisch instellingenprogramma bij de X11 distributie: &man.xorgcfg.1; (man.xf86cfg.1; voor &xfree86;). Hiermee kunnen de instellingen en stuurprogramma's interactief gekozen worden. Dit kan ook op het console gebruikt worden: xorgcfg -textmode. Meer details zijn te vinden in &man.xorgcfg.1; en &man.xf86cfg.1;. Er is ook nog het hulpprogramma &man.xorgconfig.1; (&man.xf86config.1; voor &xfree86;). Dit programma is op het console te gebruiken en is veel minder gebruikersvriendelijk, maar het zou wel kunnen werken in gevallen waarin andere hulpprogramma's dat niet doen. Bijzondere instellingen Instellen met de &intel; i810 graphische chipset Intel i810 grafische chipset Instellen met &intel; i810 integrated chipsets vereist de agpgart AGP programmeringsinterface voor X11 om de kaart aan te sturen. Het &man.agp.4; stuurprogramma zit in de GENERIC kernel sinds 4.8-RELEASE en 5.0-RELEASE. Bij eerdere versies dient het volgende toegevoegd te worden aan het bestand met kernelinstellingen: device agp Hierna dient een nieuwe kernel gebouwd te worden. In plaats hiervan, kan de kernelmodule agp.ko automatisch geladen worden met &man.loader.8; tijdens het opstarten. Hiervoor moet het volgende in /boot/loader.conf staan: agp_load="YES" Als gebruik wordt gemaakt van &os; 4.X of recenter, dan moet een apparaatnode gemaakt worden voor de programmainterface. Om deze AGP apparaatnode te maken, dient &man.MAKEDEV.8; gestart te worden in de map /dev: &prompt.root; cd /dev &prompt.root; sh MAKEDEV agpgart &os; 5.X of later gebruikt &man.devfs.5; om apparaatnodes transparant te verwerken, dan is de stap met &man.MAKEDEV.8; niet meer nodig. Hierdoor wordt het instellen van de hardware net als ieder andere grafische kaart. Bij systemen die zonder &man.agp.4; stuurprogramma gecompileerd zijn slaagt het laden van module met &man.kldload.8; niet. Het stuurprogramma moet in de kernel geladen zijn tijdens het opstarten door te compileren of door /boot/loader.conf te gebruiken. Als &xfree86; 4.1.0 (of later) gebruikt wordt en er verschijnen berichten over unresolved symbols zoals fbPictureInit, dan kan het toevoegen van de regel aan het &xfree86; instellingenbestand na Driver "i810" de oplossing zijn: Option "NoDDC" Murray Stokely Bijgedragen door Lettertypen gebruiken in X11 Type1 lettertypen De standaard lettertypen van X11 zijn allerminst ideaal voor het typische bureaubladprogramma. Grote presentatielettertypen zien er hoekig en onprofessioneel uit en kleine lettertypen in &netscape; zijn bijna onleesbaar. Er zijn diverse gratis, kwalitatief goede Type1 (&postscript;) lettertypen die meteen gebruikt kunnen worden met X11. De URW lettertypecollectie (x11-fonts/urwfonts) heeft bijvoorbeeld hoge kwaliteit versies van standaard Type1 lettertypen (Times Roman, Helvetica, Palatino en anderen). De Freefonts collectie (x11-fonts/freefonts) heeft nog meer lettertypen, maar de meesten ervan zijn bedoeld om in grafische software als Gimp gebruikt te worden en zijn niet compleet genoeg om als schermlettertypen te gebruiken. Daarbij kan X11 zonder veel moeite ingesteld worden worden om &truetype; lettertypen te gebruiken. Meer informatie staat in &man.X.7; of de paragraaf over &truetype; Lettertypen. Om de bovenstaande Type1 lettertypecollectie van de Portscollectie te installeren: &prompt.root; cd /usr/ports/x11-fonts/urwfonts &prompt.root; make install clean Dat geldt ook voor de freefont en andere collecties. Om de X server te vertellen dat deze lettertypen bestaan, dient de volgende regel toegevoegd te worden in XF86Config (in /etc/ voor &xfree86; versie 3 of in /etc/X11/ voor versie 4): FontPath "/usr/X11R6/lib/X11/fonts/URW/" Ook kan op de commando regel in de X sessie het volgende gestart worden: &prompt.user; xset fp+ /usr/X11R6/lib/X11/fonts/URW &prompt.user; xset fp rehash Dit werkt wel, maar zodra de X sessie wordt afgesloten is het weer verdwenen tenzij het is toegevoegd aan het opstartbestand (~/.xinitrc voor een normale startx sessie of ~/.xsession als er wordt aangemeld met een grafische aanmeldmanager als XDM). Een derde manier is het gebruik van het nieuwe bestand /usr/X11R6/etc/fonts/local.conf: zie hiervoor de paragraaf over over Anti-aliasing. &truetype; lettertypen TrueType lettertypen lettertypen TrueType &xfree86; 4.X en &xorg; hebben ingebouwde ondersteuning voor het renderen van &truetype; lettertypen. Er zijn twee verschillende modules die deze functionaliteit activeren. In dit voorbeeld wordt de freetype module gebruikt omdat deze beter werkt met de andere lettertypen die back-ends renderen. Om de freetype module te activeren dient de volgende regel toegevoegd te worden aan het onderdeel "Module" van /etc/X11/xorg.conf of /etc/X11/XF86Config. Load "freetype" Voor &xfree86; 3.3.X is een aparte &truetype; lettertypeserver nodig. Meestal wordt Xfstt gebruikt. Om Xfstt te installeren hoeft alleen de port x11-servers/Xfstt geïnstalleerd te worden. Hierna dient een map voor de &truetype; lettertypen gemaakt te worden (bijvoorbeeld /usr/X11R6/lib/X11/fonts/TrueType) en alle &truetype; lettertypen moeten naar deze map gekopieerd worden. &truetype; lettertypen kunnen niet direct van een &macintosh; gehaald worden. Ze moeten in een &unix;/&ms-dos;/&windows; formaat zijn voor X11. Zodra de bestanden naar deze map zijn gekopieerd, kan ttmkfdir gestart worden om een fonts.dir bestand te maken zodat de X lettertyperenderer weet waar deze nieuwe bestanden zijn geïnstalleerd. ttmkfdir zit in de &os; Portscollectie als x11-fonts/ttmkfdir. &prompt.root; cd /usr/X11R6/lib/X11/fonts/TrueType &prompt.root; ttmkfdir > fonts.dir Nu moet de &truetype; map toe aan het lettertypepad toegevoegd worden. Dit gebeurt op dezelde wijze als boven is beschreven voor Type1 lettertypen: &prompt.user; xset fp+ /usr/X11R6/lib/X11/fonts/TrueType &prompt.user; xset fp rehash of door een FontPath regel toe te voegen aan xorg.conf (of XF86Config). Dat is alles. Nu herkennen &netscape;, Gimp, &staroffice; en alle andere X applicaties de geïnstalleerde &truetype; lettertypen. Extreem kleine lettertypen (zoals hoge resolutie tekst op een webpagina) en extreme grote lettertypen (in &staroffice;) zien er nu veel beter uit. Joe Marcus Clarke Bijgewerkt door Anti-alias lettertypen anti-alias lettertypen lettertypen anti-alias Anti-aliasing wordt door X11 sinds ondersteund sinds &xfree86; versie 4.0.2. Maar instellingen voor lettertypen waren bewerkelijk voordat &xfree86; 4.3.0 geïntroduceerd werd. Vanaf &xfree86; 4.3.0 zijn alle lettertypen die X11 in de mappen /usr/X11R6/lib/X11/fonts/ en ~/.fonts/ aantreft automatisch beschikbaar voor anti-aliasing in applicaties die Xft ondersteunen. Niet alle applicaties ondersteunen Xft. Voorbeelden van applicaties met Xft ondersteuning zijn Qt 2.3 en hoger (de hulpprogramma's voor het KDE bureaublad), GTK+ 2.0 en hoger (de hulpprogramma's voor het GNOME bureaublad) en Mozilla 1.2 en hoger. Om te kunnen regelen welke lettertypen gebruik maken van anti-alias of om de eigenschappen van anti-aliasing in te stellen kan /usr/X11R6/etc/fonts/local.conf gemaakt of gewijzigd worden. In dit bestand kunnen speciale eigenschappen van het Xft lettertypesysteem aangepast worden. Deze paragraaf beschijft wat eenvoudige mogelijkheden. Meer details staan in &man.fonts-conf.5;. XML Dit bestand moet in het XML formaat opgemaakt worden. Hoofdletters en kleine letters worden onderscheiden en alle tags moeten netjes worden afgesloten. Het bestand begint met de gewone XML header gevolgd door een DOCTYPE definitie en daarna de <fontconfig> tag: <?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> Zoals al eerder is vermeld zijn alle lettertypen in /usr/X11R6/lib/X11/fonts/ en in ~/.fonts/ al geschikt gemaakt voor Xft applicaties. Als naast deze twee mappen nog een andere lettertypen moeten kunnen bevatten, dan dient een soortgelijke regel als de onderstaande aan /usr/X11R6/etc/fonts/local.conf toegevoegd te worden: <dir>/path/to/my/fonts</dir> Na het toevoegen van nieuwe lettertypen en zeker nieuwe lettertypemappen dienen de lettertypecaches opnieuw opgebouwd worden met: &prompt.root; fc-cache -f Anti-aliasing maakt randen een beetje wazig wat kleine teksten beter leesbaar maakt en voorkomt trapvorming van grote letters. Maar het kan oogkramp veroorzaken als het op normale tekst wordt toegepast. Om lettertypen kleiner dan 14 punten uit te sluiten van anti-aliasing moeten de volgende regels toegevoegd worden: <match target="font"> <test name="size" compare="less"> <double>14</double> </test> <edit name="antialias" mode="assign"> <bool>false</bool> </edit> </match> <match target="font"> <test name="pixelsize" compare="less" qual="any"> <double>14</double> </test> <edit mode="assign" name="antialias"> <bool>false</bool> </edit> </match> lettertypen spacing Spatiëring voor sommige enkel gespatieerde lettertypen kan ook ongepast zijn bij anti-aliasing. Dit lijkt vooral een probleem te zijn bij KDE. Een mogelijke oplossing hiervoor is het vergroten van de spatiëring van die lettertypen naar 100: <match target="pattern" name="family"> <test qual="any" name="family"> <string>fixed</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> <match target="pattern" name="family"> <test qual="any" name="family"> <string>console</string> </test> <edit name="family" mode="assign"> <string>mono</string> </edit> </match> Het bovenstaande hernoemt de standaardnamen van lettertypen naar "mono"). Voeg daarna het volgende toe: <match target="pattern" name="family"> <test qual="any" name="family"> <string>mono</string> </test> <edit name="spacing" mode="assign"> <int>100</int> </edit> </match> Bepaalde lettertypen, zoals Helvetica, kunnen problemen hebben met anti-aliasing. Dit uit zich meestal in een lettertype dat vertikaal door midden lijkt gesneden. Op zijn ergst kan het applicaties zoals Mozilla laten crashen. Om dit te voorkomen kan overwogen worden om ook de volgende regels toe te voegen aan local.conf: <match target="pattern" name="family"> <test qual="any" name="family"> <string>Helvetica</string> </test> <edit name="family" mode="assign"> <string>sans-serif</string> </edit> </match> Als de wijzigingen in local.conf zijn gemaakt dient niet vergeten te worden het bestand te eindigen met de tag </fontconfig> tag. Als dit niet gedaan wordt, dan worden de wijzigingen niet gezien. De standaard lettertypeset die geleverd wordt bij X11 is niet erg geschikt als het aankomt op anti-aliasing. Een veel betere set standaardlettertypen is de x11-fonts/bitstream-vera port. Deze port maakt /usr/X11R6/etc/fonts/local.conf aan als het nog niet bestaat. Als het al wel bestaat maakt de port /usr/X11R6/etc/fonts/local.conf-vera aan. De inhoud van dit bestand dient in /usr/X11R6/etc/fonts/local.conf geplaatst te worden en dan vervangen de Bitstream lettertypen automatisch de standaard X11 Serif, Sans Serif en Monospaced lettertypen. Als laatste kunnen gebruikers hun eigen instellingen aan een persoonlijk .fonts.conf bestand toevoegen. Om dit te doen moet iedere gebruiker het bestand ~/.fonts.conf maken. Ook dit bestand moet in het XML formaat zijn. LCD screen lettertypen LCD screen Nog een laatste punt: bij een LCD scherm kan sub-pixel sampling prettig zijn. Eigenlijk zorgt dit er voor dat de (horizontaal gesplitste) rode, groene en blauwe componenten gewijzigd worden om de horizontale resolutie te verbeteren. Het resultaat is geweldig. Voeg hiervoor de volgende regels ergens aan local.conf toe: <match target="font"> <test qual="all" name="rgba"> <const>unknown</const> </test> <edit name="rgba" mode="assign"> <const>rgb</const> </edit> </match> Afhankelijk van het soort beeldscherm kan rgb veranderd moeten worden in bgr, vrgb of vbgr. Experimenteren levert de beste instelling op. Mozilla anti-aliasing lettertypen uitschakelen Anti-aliasing moet werken zodra de X server opnieuw gestart is. Programma's dienen echter wel te weten hoe ze er mee moeten werken. Op dit moment geldt dat voor de Qt toolkit en de hele KDE omgeving kan met anti-alias omgaan (zie over KDE). GTK+ en GNOME anti-aliasing gebruiken via de Font capplet (zie ). Mozilla 1.2 en hoger gebruiken automatisch anti-aliasing. Om dit uit te zetten moet Mozilla opnieuw gebouwd worden met de optie -DWITHOUT_XFT. Seth Kingsley Bijgedragen door De X beeldschermmanager Overzicht X beeldschermmanager De X beeldschermmanager (XDM) is een optioneel onderdeel van het X Window systeem dat gebruikt wordt voor beheer van aanmeldsessies. Dit is vaak erg handig bij bijvoorbeeld X Terminals, desktops en grote netwerk beeldschermservers. Omdat het X Window systeem netwerk- en protocolonafhankelijk is, zijn er veel mogelijkheden om X clients en servers op verschillende machines in een netwerk te verbinden. XDM levert een grafische interface waarmee er gekozen kan worden welke beeldschermserver gebruikt moet worden en handelt authorisatie informatie (gebruikersnaam en wachtwoord) af. XDM levert de gebruiker dezelfde funtionaliteit levert als &man.getty.8; (zie ). Dus het regelt de systeemaanmeldingen voor de schermen waaraan verbonden moet worden en start dan een sessie manager namens de gebruiker (meestal een X window manager). XDM wacht dan tot het programma stopt en geeft aan dat de gebruiker klaar is en afgemeld kan worden. Hierna kan XDM het aanmeldscherm weer tonen zodat de volgende gebruiker kan aanmelden. XDM gebruiken De XDM daemon staat in /usr/X11R6/bin/xdm. Dit programma kan als root altijd gestart worden en regelt dan het X weergavegedeelte van de lokale machine. Als XDM iedere keer bij het opstarten moet starten is het handig om een regel toe te voegen aan /etc/ttys. Meer informatie over het gebruik van dit bestand staat in . In de standaardversie van /etc/ttys staat een regel om de applicatie deamon XDM op een virtuele terminal te draaien: ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure Standaard staat deze regel uit. Om hem aan te zetten moet veld 5 van off naar on gewijzigd worden en moet met &man.init.8; herstart worden met gebruikmaking van de aanwijzingen in . Het eerste veld, de naam van de terminal die het programma aanstuurt, is ttyv8. Dit houdt in dat XDM op de negende virtuele terminal begint te draaien. XDM instellen De map met instellingen voor XDM is /usr/X11R6/lib/X11/xdm. In deze map staan diverse bestanden die gebruikt kunnen worden om het gedrag en uiterlijk van XDM te veranderen. Meestal zijn dit de volgende bestanden: Bestand Omschrijving Xaccess Regels voor client authorisatie. Xresources Standaard waarden voor X bronnen. Xservers Lijst met op afstand en lokaal te beheren schermen. Xsession Standaard sessie script voor logins. Xsetup_* Script die applicaties start voordat de login interface start. xdm-config Algehele instellingen voor alle schermen op deze machine. xdm-errors Errors die gegenereerd zijn door het server programma. xdm-pid Het proces ID van de draaiende XDM. Tevens staan in deze map een aantal scripts en programma's om het bureaublad in te stellen als XDM draait. Het doel van elk van deze bestanden wordt kort omschreven. De juiste syntaxis en het gebruik van deze bestanden staat in &man.xdm.1;. De standaardinstelling regelt een eenvoudig rechthoekig aanmeldvenster met bovenin de hostnaam van de machine in een groot lettertype met een Login: en Password: prompt eronder. Dit is een goed beginpunt om het uiterlijk en werking van het XDM venster te veranderen. Xaccess Om een verbinding te maken met XDM gestuurde schermen wordt het protocol X Display Manager Connection Protocol (XDMCP) gebruikt. Het bestand is een set regels die XDMCP verbindingen met andere machines bestuurt. Standaard mag iedere client een verbinding maken. Zolang xdm-config niet is aangepast om verbindingen te accepteren is dat geen probleem. Xresources Dit is een bestand met standaarden voor de schermkiezer en de aanmeldschermen. Hier kan het uiterlijk van het aanmeldprogramma gewijzigd worden. De indeling is hetzelfde als bij het app-defaults bestand en is beschreven in de X11 documentatie. Xservers Dit is een lijst met netwerkschermen waaruit gekozen kan worden. Xsession Dit is het standaard sessiescript voor XDM dat start nadat de gebruiker is aangemeld. Normaal heeft iedere gebruiker een eigen sessiescript in ~/.xsession dat dit script overheerst. Xsetup_* Deze starten automatisch voordat de kiezers of aanmeldschermen getoond worden. Er is een script voor ieder gebruikt scherm met de naam Xsetup_ gevolgd door het lokale schermnummer (bijvoorbeeld Xsetup_0). Normaal draaien deze scripts éé of twee programma's in de achtergrond zoals xconsole. xdm-config Dit bevat de instellingen die toegepast worden op ieder scherm die deze installatie aanstuurt. De indeling is hetzelfde als van app-defaults. xdm-errors Hierin staan de meldingen die de X servers geven als XDM ze probeert te starten. Als een scherm dat gestart is door XDM om onduidelijke reden hangt, is dit een goede plaats om te zoeken naar foutmeldingen. Deze meldingen worden ook per sessie naar het ~/.xsession-errors van de gebruiker gestuurd. Een netwerk beeldschermserver gebruiken Om gebruikers een verbinding te laten maken met een X server moeten de toegangsregels gewijzigd worden en de connectielistener moet aangezet worden. Deze hebben standaard wat terughoudende waarden. Om XDM te laten luisteren naar verbindingen moet als eerste een regel uitgecommentarieerd worden in xdm-config: ! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with XDM DisplayManager.requestPort: 0 Hierna moet XDM herstart worden. Afwijkend in dit bestand is dat commentaar in app-defaults bestanden begint met het karakter ! en niet met het karakter #. Het kan wenselijk zijn om de toegangcontrole aan te scherpen. Hiervoor staan voorbeeldregels in Xaccess en &man.xdm.1;. Alternatieven voor XDM Er bestaan diverse alternatieven voor XDM programma. kdm (wordt geleverd bij KDE) wordt later in dit hoofstuk behandeld. De kdm beeldschermmanager biedt vele grafische verbeteringen en cosmetische franje en de mogelijkheid om de gebruiker de kans te geven een window manager te laten kiezen bij het aanmelden. Valentino Vaschetto Bijgedragen door Bureaubladomgevingen Deze sectie beschrijft de verschillende bureaubladomgevingen voor X op &os;. Een bureaubladomgeving kan van alles inhouden: van een simpele window manager tot een complete suite van bureaubladapplicaties zoals KDE of GNOME. GNOME Over GNOME GNOME GNOME is een gebruikersvriendelijke bureaubladomgeving die de gebruiker de mogelijkheid geeft om gemakkelijk de computer te gebruiken en in te stellen. GNOME heeft een paneel (voor het starten en tonen van statusinformatie van applicaties), een bureaublad (waar data en applicaties geplaatst kunnen worden), een set standaard bureaubladapplicaties en een regels die het makkelijker maakt voor applicaties om eenduidig met elkaar samen te werken. Gebruikers van andere besturingssystemen of omgevingen voelen zich meestal meteen thuis bij het gebruik van de krachtige grafisch gestuurde omgeving die GNOME biedt. Meer informatie over GNOME op &os; staat op de &os; GNOME Project website. GNOME installeren De makkelijkste manier om GNOME te installeren is door middel van het Desktop Configuration menu tijdens de &os; installatie zoals beschreven in . Het kan ook makkelijk geïnstalleerd worden van een package of uit de Portscollectie: Om het GNOME package te installeren: &prompt.root; pkg_add -r gnome2 Om GNOME vanuit de Portscollectie te installeren: &prompt.root; cd /usr/ports/x11/gnome2 &prompt.root; make install clean Zodra GNOME geïnstalleerd is, moet de X server verteld worden dat in plaats van de standaard window manager GNOME gebruikt moet worden. Als er al een .xinitrc is, dan hoeft alleen de regel die de huidige windows manager start veranderd te worden in een regel die /usr/X11R6/bin/gnome-session start. Als er niets speciaals met dit instellingenbestand is gedaan: &prompt.user; echo "/usr/X11R6/bin/gnome-session" > ~/.xinitrc Nu kan met startx de GNOME bureaubladomgeving gestart worden. Als een beeldschermmanager als XDM gebruikt wordt werkt het bovenstaande niet. In plaats daarvan moet een uitvoerbaar .xsession gemaakt worden met hetzelfde commando erin. Hiervoor moet het bestand aangepast worden door het bestaande window manager commando te vervangen door /usr/X11R6/bin/gnome-session: &prompt.user; echo "#!/bin/sh" > ~/.xsession &prompt.user; echo "/usr/X11R6/bin/gnome-session" >> ~/.xsession &prompt.user; chmod +x ~/.xsession Het is ook mogelijk de beeldschermanager zo in te stellen dat de window manager gekozen kan worden tijdens het aanmelden. In de paragraaf Meer KDE Details wordt uitgelegd hoe dit gedaan moet worden voor de kdm beeldschermmanager van KDE. Anti-alias lettertypen in GNOME GNOME anti-alias lettertypen X11 ondersteunt anti-aliasing via de RENDER uitbreiding. GTK+ 2.0 en hoger (de toolkit die gebruikt wordt bij GNOME) kunnen dit gebruiken. Het instellen van anti-aliasing is beschreven in . Dus met up-to-date software is anti-aliasing in de GNOME bureaublagomgeving mogelijk. In ApplicationsDesktop PreferencesFont kan gekozen wordne voor Best shapes, Best contrast of Subpixel smoothing (LCDs). Bij een GTK+ applicatie die geen onderdeel is van het GNOME bureaublad moet de omgevingsvariabele GDK_USE_XFT op 1 gezet worden voordat het programma wordt gestart. KDE KDE Over KDE KDE is een bureaubladomgeving die eigentijds is en makkelijk in gebruik. KDE biedt de gebruiker: Een schitterende eigentijdse desktop; Een desktop die volledig netwerktransparant is; Een geïntegreerd hulpsysteem dat eenvoudig bruikbare informatie geeft over het gebruik van het KDE bureaublad en de applicaties; Alle KDE applicaties werken op dezelfde manier en zien er hetzelfde uit; Gestandaardiseerde menu's en werkbalken, keybindings, kleurschema's, enzovoort; Internationalisatie: KDE is beschikbaar in meer dan 40 talen; Gecentraliseerde vraag en antwoord gestuurde bureaubladinstelling; Een grote hoeveelheid bruikbare KDE applicaties; KDE heeft een office applicatie suite die gebaseerd is op KDE's KParts technologie en bestaat uit een spread-sheet, een presentatieprogramma, een organizer, een nieuwsclient en meer. KDE heeft ook de webbrowser Konqueror die niet onder doet voor de andere bestaande webbrowsers op &unix; systemen. Meer informatie over KDE staat op de KDE website. Voor &os; specifieke informatie en bronnen over KDE is er de &os;-KDE team website. KDE installeren Net als bij GNOME of iedere andere bureaubladomgeving is de makkelijkste manier om KDE te installeren door middel van het Desktop Configuration menu in het &os; installatie proces. Dat wordt beschreven in . Ook nu geldt weer dat de software eenvoudig geïnstalleerd met een package of uit de Portscollectie: Om KDE van een package te installeren: &prompt.root; pkg_add -r kde &man.pkg.add.1; haalt automatisch de laatste versie van de applicatie op. Om KDE vanuit de Portscollectie te bouwen en te installeren: &prompt.root; cd /usr/ports/x11/kde3 &prompt.root; make install clean Nadat KDE geïnstalleerd is, moet de X server verteld worden dat déze applicatie gestart moet worden in plaats van de standaard window manager. Hiervoor kan .xinitrc aangepast worden: &prompt.user; echo "exec startkde" > ~/.xinitrc Als het X Window System wordt gestart met startx is KDE het bureaublad. Als er een beeldschermmanager als XDM gebruikt wordt, is de instelling anders. Dan moet .xsession gewijzigd worden. Instructies voor kdm worden later in dit hoofdstuk beschreven. Meer KDE details Nadat KDE geïnstalleerd is op een systeem, kunnen de meeste dingen uitgezocht worden via de hulppagina's of door de verschillende menu's aan te wijzen en erop te klikken. &windows; en &mac; gebruikers voelen zich meestal helemaal thuis. Het beste naslagwerk voor KDE is de on-line documentatie. KDE heeft zijn eigen web browser, Konqueror, tientallen handige applicatie's en uitgebreide documentatie. De volgende paragrafen beschrijven de technische zaken die moeilijk proefondervindelijk te achterhalen zijn. De KDE beeldschermmanager KDE beeldschermmanager Een beheerder van een multi-user systeem die een grafisch aanmeldscherm willen hebben voor zijn gebruikers kan hiervoor XDM gebruiken, zoals eerder beschreven. KDE biedt kdm als alternatief. Dat is ontworpen met een beter uiterlijk en heeft meer aanmeldopties. Gebruikers kunnen via een menu kiezen welke bureaubladomgeving (KDE, GNOME of een andere) zij na het aanmelden willen gebruiken. Om te beginnen dient het KDE beheerpaneel kcontrol door root uitgevoerd te worden. Er wordt in het algemeen vanuit gegaan dat het niet veilig is om als root de X omgeving te gebruiken. In plaats daarvan wordt de window manager als normale gebruiker gestart en in een terminalvenster (zoals xterm of KDE's konsole) wordt root met su aangemeld. De gebruiker moet hiervoor wel in de groep wheel in /etc/group staan). In het terminalvenster kan dan kcontrol ingegeven worden. Eerst dient geklikt te worden op het linker icoon System, daarna op Login manager. Rechts staan nu verschillende opties om in te stellen die de KDE handleiding uitgebreid behandelt. Klik op sessions aan de rechterzijde. Klik New type om de verschillende window managers en bureaubladomgevingen toe te voegen. Dit zijn alleen de labels, hierop staat dan KDE en GNOME in plaats van startkde of gnome-session. Er dient ook nog een label failsafe gemaakt te worden. Er wordt aangeraden ook met de andere menu's te spelen. Die zijn hoofdzakeklijk voor cosmetische zaken en spreken voor zich. Als de instellingen gemaakt zijn kan onderaan op Apply geklikt worden en kan het beheerprogramma verlaten worden. Om te zorgen kdm begrijpt wat de labels (KDE en GNOME etc) betekenen, dienen de bestanden die XDM gebruikt gewijzigd te worden. In KDE 2.2 is dit veranderd: kdm gebruikt nu zijn eigen instellingenbestanden. In de KDE 2.2 documentatie staan meer details. Als root, in een terminal venster, dient /usr/X11R6/lib/X11/xdm/Xsession gewijzigd te worden. In het midden van het bestand is een onderdeel dat er als volgt uitziet: case $# in 1) case $1 in failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac Er moeten een aantal regels toegevoegd worden aan dit onderdeel. Aangenomen dat de gebruikte labels KDE en GNOME waren, dient dat het volgende de worden: case $# in 1) case $1 in kde) exec /usr/local/bin/startkde ;; GNOME) exec /usr/X11R6/bin/gnome-session ;; failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac Om bij het aanmelden de KDE bureaubladachtergrond hetzelfde te laten zijn als na het aanmelden, dient de volgende regel toegevoegd worden aan /usr/X11R6/lib/X11/xdm/Xsetup_0: - /usr/local/bin/kdmdesktop + /usr/local/bin/krootimage Nu moet kdm voorkomen in /etc/ttys en starten bij de volgende herstart. Om dit te doen kunnen de instructies uit XDM gebruikt worden en kan /usr/X11R6/bin/xdm vervangen worden in /usr/local/bin/kdm. Anti-alias lettertypen KDE anti-alias lettertypen X11 ondersteunt anti-aliasing door de toevoeging de RENDER toevoeging en vanaf Qt versie 2.3 ondersteunt Qt (de toolkit die bij KDE zit) deze toevoeging. Het instellen hiervan is beschreven in over anti-aliasing X11 lettertypen. Dus met up-to-date software is anti-aliasing mogelijk op een KDE bureaublad. In het KDE menu moet in PreferencesLook and FeelFonts het vinkvakje Gebruik Anti-aliasing voor Lettertypen en Iconen aangevinkt worden. Voor Qt applicaties die geen onderdeel zijn van KDE moet de omgevingsvariabele QT_XFT op true gezet worden voordat het programma wordt gestart. XFce Over XFce XFce is een bureaubladomgeving die gebaseerd is op de GTK+ toolkit die gebruikt wordt bij GNOME, maar is eenvoudiger en bedoeld voor gebruikers die een simpel en efficient bureaublad willen dat toch eenvoudig en makkelijk in te stellen is. Het ziet er bijna hetzelfde uit als CDE dat bij commerciële &unix; systemen zit. Een aantal XFce functies zijn: Een eenvoudige, makkelijk te bedienen desktop; Geheel in te stellen met de muis, met klikken en slepen, enzovoort; Hoofdpaneel hetzelfde als CDE met menu's, applets en applicaties Geïntegreerde window manager, bestandsmanager, geluidsmanager, GNOME compliance module en andere zaken; Thema's (sinds het gebruik van GTK+); Snel, licht en efficient: ideaal voor de oudere of langzamere machines of machines met beperkte hoeveelheid geheugen; Meer informatie over XFce staat op de XFce website. Installeren van XFce XFce is met een package te installeren: &prompt.root; pkg_add -r xfce4 Of vanuit de Portscollectie: &prompt.root; cd /usr/ports/x11-wm/xfce4 &prompt.root; make install clean Nu moet de X server weten dat XFce gestart moet worden als X de volgende keer start: &prompt.user; echo "/usr/X11R6/bin/startxfce4" > ~/.xinitrc De volgende keer dat X start is XFce het bureaublad. Wederom: als een beeldschermmanager als XDM gebruikt wordt, moet .xsession gemaakt worden zoals beschreven in de paragraaf over GNOME. Nu moet echter het command /usr/X11R6/bin/startxfce4 gebruikt. Het is ook mogelijk de beeldschermmanager in te stellen om bureaublad te kiezen bij het aanmelden, zoals is uitgelegd in de paragraaf over kdm. diff --git a/nl_NL.ISO8859-1/share/sgml/mailing-lists.ent b/nl_NL.ISO8859-1/share/sgml/mailing-lists.ent index cbdcf4f66a..0d39ab7afd 100644 --- a/nl_NL.ISO8859-1/share/sgml/mailing-lists.ent +++ b/nl_NL.ISO8859-1/share/sgml/mailing-lists.ent @@ -1,400 +1,404 @@ FreeBSD lijstserver"> &a.mailman.listinfo;"> FreeBSD ACPI mailinglijst"> freebsd-acpi"> FreeBSD steun mailinglijst"> freebsd-advocacy"> FreeBSD AFS porting mailinglijst"> freebsd-afs"> FreeBSD Adaptec AIC7xxx discussies mailinglijst"> freebsd-aic7xxx"> FreeBSD Alpha porting mailinglijst"> freebsd-alpha"> FreeBSD porten naar AMD64 systemen"> freebsd-amd64"> FreeBSD aankondigingen mailinglijst"> freebsd-announce"> FreeBSD Apache mailinglijst"> freebsd-apache"> FreeBSD architectuur en ontwerp mailinglijst"> freebsd-arch"> FreeBSD ARM porting mailinglijst"> freebsd-arm"> FreeBSD ATM netwerken mailinglijst"> freebsd-atm"> FreeBSD broncode audit mailinglijst"> freebsd-audit"> FreeBSD binair updatesysteem systeem mailinglijst"> freebsd-binup"> + +FreeBSD bluetooth mailinglijst"> +freebsd-bluetooth"> + FreeBSD bugbusters mailinglijst"> freebsd-bugbusters"> FreeBSD problem reports mailinglijst"> freebsd-bugs"> FreeBSD babbel mailinglijst"> freebsd-chat"> FreeBSD clustering mailinglijst"> freebsd-cluster"> &os.current; mailinglijst"> freebsd-current"> CTM aankondigingen"> ctm-announce"> CTM distributie van CVS bestanden"> ctm-cvs-cur"> CTM 4-STABLE src tak distributie mailinglijst"> ctm-src-4"> CTM -CURRENT src tak distributie mailinglijst"> ctm-src-cur"> CTM gebruikersdiscussie mailinglijst"> ctm-users"> FreeBSD CVS commitberichten mailinglijst"> cvs-all"> FreeBSD CVS doc commitlijst"> cvs-doc"> FreeBSD CVS ports commitlijst"> cvs-ports"> FreeBSD CVS projecten commitlijst"> cvs-projects"> FreeBSD CVS src commitlijst"> cvs-src"> FreeBSD CVSweb beheer mailinglijst"> freebsd-cvsweb"> FreeBSD gebaseerde Databases mailinglijst"> freebsd-database"> FreeBSD documentatieproject mailinglijst"> freebsd-doc"> FreeBSD-emulatie mailinglijst"> freebsd-emulatie"> FreeBSD FireWire (IEEE 1394) discussion mailinglijst"> freebsd-firewire"> FreeBSD bestandssysteem project mailinglijst"> freebsd-fs"> FreeBSD GEOM mailinglijst"> freebsd-geom"> FreeBSD GNOME and GNOME applications mailinglijst"> freebsd-gnome"> FreeBSD technische discussie mailinglijst"> freebsd-hackers"> FreeBSD hardware and apparatuur mailinglijst"> freebsd-hardware"> FreeBSD mirror sites mailinglijsts"> freebsd-hubs"> FreeBSD internationalisatie mailinglijst"> freebsd-i18n"> FreeBSD i386-specifieke onderwerpen mailinglijst"> freebsd-i386"> FreeBSD IA32 porting mailinglijst"> freebsd-ia32"> FreeBSD IA64 porting mailinglijst"> freebsd-ia64"> FreeBSD IPFW code mailinglijst"> freebsd-ipfw"> FreeBSD ISDN mailinglijst"> freebsd-isdn"> FreeBSD Internet service provider mailinglijst"> freebsd-isp"> FreeBSD Java Language mailinglijst"> freebsd-java"> FreeBSD gerelateerd werk mailinglijst"> freebsd-jobs"> FreeBSD KDE/Qt en KDE applicaties mailinglijst"> freebsd-kde"> FreeBSD LFS porting mailinglijst"> freebsd-lfs"> FreeBSD libh installatie and packagingsysteem mailinglijst"> freebsd-libh"> FreeBSD MIPS porting mailinglijst"> freebsd-mips"> FreeBSD mirrorsite beheerders"> mirror-announce"> FreeBSD laptop computer mailinglijst"> freebsd-mobile"> FreeBSD port van de Mozilla browser mailinglijst"> freebsd-mozilla"> FreeBSD multimedia mailinglijst"> freebsd-multimedia"> FreeBSD netwerken mailinglijst"> freebsd-net"> FreeBSD nieuwe gebruikers mailinglijst"> freebsd-newbies"> FreeBSD new-bus mailinglijst"> freebsd-new-bus"> FreeBSD OpenOffice mailinglijst"> freebsd-openoffice"> FreeBSD prestaties mailinglijst"> freebsd-performance"> FreeBSD perl mailinglijst"> freebsd-perl"> FreeBSD pakketfilter mailinglijst"> freebsd-pf"> FreeBSD niet-Intel platformen porting mailinglijst"> freebsd-platforms"> FreeBSD core team beleidsbeslissingen mailinglijst"> freebsd-policy"> FreeBSD ports mailinglijst"> freebsd-ports"> FreeBSD ports bugs mailinglijst"> freebsd-ports-bugs"> FreeBSD PowerPC porting mailinglijst"> freebsd-ppc"> FreeBSD Python mailinglijst"> freebsd-python"> FreeBSD Quality Assurance mailinglijst"> freebsd-qa"> FreeBSD algemene vragen mailinglijst"> freebsd-questions"> FreeBSD realtime extensions mailinglijst"> freebsd-realtime"> FreeBSD SCSI subsysteem mailinglijst"> freebsd-scsi"> FreeBSD beveiliging mailinglijst"> freebsd-security"> FreeBSD beveiligingswaarschuwingen mailinglijst"> freebsd-security-notifications"> FreeBSD-small mailinglijst"> freebsd-small"> FreeBSD symmetric multiprocessing mailinglijst"> freebsd-smp"> FreeBSD SPARC porting mailinglijst"> freebsd-sparc64"> &os.stable; mailinglijst"> freebsd-stable"> FreeBSD C99 en POSIX compliance mailinglijst"> freebsd-standards"> FreeBSD test mailinglijst"> freebsd-test"> FreeBSD prestaties en stabiliteit test mailinglijst"> freebsd-testing"> FreeBSD threads mailinglijst"> freebsd-threads"> FreeBSD tokenring mailinglijst"> freebsd-tokenring"> FreeBSD USB mailinglijst"> freebsd-usb"> FreeBSD gebruikersgroep coördinatie mailinglijst"> freebsd-user-groups"> FreeBSD wederverkopers pre-release coördinatie mailinglijst"> freebsd-vendors"> Discussis over de VuXML infrastructuur"> freebsd-vuxml"> FreeBSD Webmaster mailinglijst"> freebsd-www"> FreeBSD X11 mailinglijst"> freebsd-x11"> majordomo@FreeBSD.org">