diff --git a/nl_NL.ISO8859-1/books/handbook/advanced-networking/chapter.xml b/nl_NL.ISO8859-1/books/handbook/advanced-networking/chapter.xml index ec361dce9b..4960156fb7 100644 --- a/nl_NL.ISO8859-1/books/handbook/advanced-networking/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/advanced-networking/chapter.xml @@ -1,6535 +1,6492 @@ René Ladan Vertaald door Geavanceerde netwerken Samenvatting Dit hoofdstuk zal een aantal onderwerpen over geavanceerde netwerken behandelen. Na het lezen van dit hoofdstuk is bekend: De beginselen van gateways en routes. Hoe &ieee; 802.11- en &bluetooth;-apparaten te installeren. Hoe &os; als een bridge te laten werken. Hoe een schijfloze machine vanaf het netwerk op te starten. Hoe opstarten met netwerk-PXE en een NFS-root-bestandssysteem te installeren. Hoe Network Address Translation te installeren. Hoe IPv6 op een &os;-machine te installeren. Hoe ATM in te stellen. Hoe de mogelijkheden van CARP, het Common Address Redundancy Protocol, aan te zetten en te benutten. Voordat dit hoofdstuk gelezen wordt, dient de lezer: De beginselen van de scripts in /etc/rc te begrijpen. Bekend te zijn met basisnetwerktermen. Te weten hoe een nieuwe &os;-kernel in te stellen en te installeren (). Te weten hoe aanvullende software van derde partijen te installeren (). Coranth Gryphon Bijgedragen door Gateways en routes routing gateway subnet Indien een machine een andere machine over een netwerk wil vinden, dient er een mechanisme te zijn dat beschrijft hoe van de ene naar de andere machine te gaan. Dit wordt routen genoemd. Een route is een gedefinieerd adressenpaar: een bestemming en een gateway. Het paar geeft aan dat door deze gateway gecommuniceerd moet worden om bij deze bestemming aan te komen. Er zijn drie soorten bestemmingen: individuele host, subnetten en standaard. De standaardroute wordt gebruikt indien geen van de andere routes van toepassing zijn. Verderop wordt verder op standaardroutes ingegaan. Er zijn ook drie soorten gateways: individuele hosts, interfaces (ook wel verbindingen genoemd), en Ethernet-hardware-adressen (MAC-adressen). Een voorbeeld Om de verschillende aspecten van routen te illustreren, wordt het volgende voorbeeld van netstat gebruikt: &prompt.user; netstat -r Routing tables Destination Gateway Flags Refs Use Netif Expire default outside-gw UGSc 37 418 ppp0 localhost localhost UH 0 181 lo0 test0 0:e0:b5:36:cf:4f UHLW 5 63288 ed0 77 10.20.30.255 link#1 UHLW 1 2421 example.com link#1 UC 0 0 host1 0:e0:a8:37:8:1e UHLW 3 4601 lo0 host2 0:e0:a8:37:8:1e UHLW 0 5 lo0 => host2.example.com link#1 UC 0 0 224 link#1 UC 0 0 standaardroute De eerste twee regels geven de standaardroute (die behandeld wordt in de volgende sectie) en de localhost-route aan. teruglusapparaat De interface (kolom Netif) dat deze routeertabel aangeeft om voor localhost te gebruiken is lo0, ook bekend als het teruglusapparaat. Dit geeft aan dat alle verkeer voor deze bestemming intern gehouden moet worden, in plaats van het over het LAN te sturen, aangezien het alleen aankomt op de plaats waar het verzonden werd. Ethernet MAC-adres Het volgende dat opvalt zijn de adressen die beginnen met 0:e0:. Dit zijn Ethernet-hardware adressen, ook bekend als MAC-adressen. &os; zal automatisch elke host (test0 in het voorbeeld) op het lokale Ethernet identificeren en een route voor die host toevoegen, direct van deze host over de Ethernet-interface, ed0. Er is ook een timeout (kolom Expire) met deze routesoort geassocieerd, die gebruikt wordt indien er binnen een bepaalde tijd geen bericht komt van de host. Indien dit gebeurt, wordt de route naar deze host automatisch verwijderd. Deze hosts worden geïdentificeerd door middel van een mechanisme dat bekend staat als RIP (Routing Information Protocol), dat routes naar lokale hosts bepaald door middel van een kortste-pad algoritme. subnet &os; zal ook subnetroutes voor het lokale subnet toevoegen (10.20.30.255 is het broadcast-adres voor het subnet 10.20.30, en example.com is de domeinnaam die bij dat subnet hoort). De aanduiding link#1 verwijst naar de eerste Ethernetkaart in de machine. Merk op dat voor hen geen aanvullende interface is gespecificeerd. Voor beide groepen (lokale netwerkhosts en lokale subnetten) worden de routes automatisch ingesteld door een daemon genaamd routed. Indien dit niet draait, zullen alleen routes die statisch gedefinieerd (i.e., expliciet vermeld zijn) bestaan. De regel met host1 verwijst naar deze host, het kent deze door het Ethernetadres. Aangezien het de zendende host is, weet &os; dat het de teruglus-interface (lo0) moet gebruiken, in plaats van het over de Ethernet-interface te verzenden. De twee regels met host2 geven een voorbeeld van wat er gebeurt als een alias met &man.ifconfig.8; gebruikt wordt (in de sectie over Ethernet staan redenen waarom dit gedaan wordt). Het symbool => na de interface lo0 zegt dat niet alleen de teruglus gebruikt wordt (aangezien dit adres ook verwijst naar de lokale host), maar specifiek dat dit een alias is. Zulke routes verschijnen alleen op de hosts die de alias ondersteunen; alle andere hosts op het lokale netwerk vermelden simpelweg een regel met link#1 voor zulke routes. De laatste regel (bestemming subnet 224) heeft te maken met multicasten, wat in een andere sectie besproken wordt. Als laatste staan in de kolom Flags verschillende attributen. Hieronder staat een korte tabel met enkele van deze vlaggen en hun betekenis: U Up: De route is actief. H Host: De bestemming van de route is een enkele host. G Gateway: Stuur alles voor deze bestemming door naar dit verre systeem, dat zoekt daar uit waar het verder naar te sturen. S Statisch: Deze route was handmatig ingesteld, dus niet automatisch door het systeem aangemaakt. C Kloon: Maakt op basis van deze route een nieuwe route aan voor machines waarmee verbinding wordt gemaakt. Dit soort routes wordt gewoonlijk in lokale netwerken gebruikt. W WasGekloond: Geeft aan dat een route automatisch was ingesteld gebaseerd op een LAN (kloon)-route. L Verbinding: De route maakt gebruik van verwijzingen naar Ethernet-hardware. Standaardroutes standaardroute Wanneer het lokale systeem een verbinding met een verre host moet maken, controleert het de routeertabel op reeds bekende paden. Indien de verre host binnen een subnet valt waarvan bekend is hoe het bereikt kan worden (gekloonde routes), controleert het systeem of het met de daarbij behorende interface verbinding kan maken. Indien alle bekende paden falen, heeft het systeem één laatste mogelijkheid: de standaardroute. Deze route is een speciaal soort gateway-route (gewoonlijk de enig aanwezige in het systeem) en is altijd gemarkeerd met een c in het vlaggenveld. Voor hosts op een LAN staat deze gateway ingesteld op de machine die een directe verbinding met de buitenwereld heeft (via een PPP-verbinding, DSL, kabelmodem, T1, of een ander netwerkinterface). Indien de standaardroute wordt ingesteld voor een machine die zelf als gateway naar de buitenwereld werkt, zal de standaardroute de gateway-machine van de internetprovider zijn. Hieronder volgt een voorbeeld van standaardroutes. Dit is een veelgebruikte opstelling: [Lokaal2] <--ether--> [Lokaal1] <--PPP--> [IP-Serv] <--ether--> [T1-GW] De hosts Lokaal1 en Lokaal2 staan op deze site. Lokaal1 is verbonden met een internetprovider via een inbel-PPP-verbinding. Deze PPP-server is door een LAN verbonden met een andere gateway-computer door een externe interface naar de Internet-feed van de internetprovider. De standaardroutes voor de machines zijn: Host Standaard gateway Interface Lokaal2 Lokaal1 Ethernet Lokaal1 T1-GW PPP Een veelvoorkomende vraag is Waarom (of hoe) moet worden ingesteld dat T1-GW de standaard gateway is voor Lokaal1, in plaats van de server van de internetprovider waarmee het verbonden is?. Onthoud dat, aangezien de PPP-interface een adres gebruikt op het lokale netwerk van de internetprovider voor deze kant van de verbinding, routes voor alle andere machines op het lokale netwerk van de internetprovider automatisch aangemaakt worden. Daarom is het al bekend hoe de machine T1-GW bereikt kan worden, dus is de tussenstap dat het verkeer eerst naar de server van de internetprovider gestuurd wordt niet nodig. Het is gebruikelijk om het adres X.X.X.1 te gebruiken als het gateway-adres voor het lokale netwerk. Dus (gebruikmakend van hetzelfde voorbeeld), indien de lokale klasse-C adresruimte 10.20.30 was en de internetprovider 10.9.9 gebruikte, zouden de standaardroutes als volgt zijn: Host Standaardroute Lokaal2 (10.20.30.2) Lokaal1 (10.20.30.1) Lokaal1 (10.20.30.1, 10.9.9.30) T1-GW (10.9.9.1) De standaardroute kan eenvoudig in /etc/rc.conf gedefinieerd worden. In dit voorbeeld werd de volgende regel aan /etc/rc.conf van Lokaal2 toegevoegd: defaultrouter="10.20.30.1" Het is ook mogelijk dit met het commando &man.route.8; direct vanaf de opdrachtregel te doen: &prompt.root; route add default 10.20.30.1 Voor meer informatie over het handmatig manipuleren van netwerkrouteertabellen kan de hulppagina &man.route.8; geraadpleegd worden. Dual Homed machines dual homed hosts Er is nog één andere soort opstelling die behandeld dient te worden, en dat is een host die in twee verschillende netwerken zit. Technisch gezien telt elke machine die als gateway dienst doet (in bovenstaand voorbeeld door een PPP-verbinding te gebruiken) als een dual-homed host. Maar de term wordt echt alleen gebruikt om naar een machine te verwijzen die in twee LAN's zit. In het ene geval heeft de machine twee Ethernetkaarten, waarbij elke kaart een adres op de gescheiden subnetten heeft. Een alternatief is dat de machine slechts één Ethernetkaart heeft en gebruikt maakt van &man.ifconfig.8; aliasing. Het eerste wordt gebruikt indien er twee fysiek gescheiden Ethernet-netwerken in gebruik zijn, het laatste indien er één fysiek netwerksegment is, maar er twee logisch gescheiden subnetten zijn. In beide gevallen worden er routeertabellen aangemaakt zodat elk subnet weet dat deze machine de gedefinieerde gateway (ingaande route) naar het andere subnet is. Deze opstelling, waarbij de machine dienst doet als router tussen de twee subnetten, wordt vaak gebruikt voor het implementeren van pakketfilters of firewall-beveiliging in één of beide richtingen. Om deze machine daadwerkelijk pakketten te laten forwarden tussen de twee interfaces, moet aan &os; verteld worden dat het deze mogelijkheid aan moet zetten. In de volgende sectie staan meer details over hoe dit te doen. Een router bouwen router Een netwerkrouter is simpelweg een systeem dat pakketten van de ene naar de andere interface doorstuurt. Internetstandaarden en goede ontwerppraktijken verhinderen het &os; Project dit standaard in &os; aan te zetten. Deze mogelijkheid kan worden aangezet door de volgende variabele in &man.rc.conf.5; op YES in te stellen: gateway_enable="YES" # Op YES instellen indien deze host een gateway is Deze optie stelt de &man.sysctl.8; variabele net.inet.ip.forwarding in op 1. Indien het nodig is om het routen tijdelijk te stoppen, kan deze variabele tijdelijk op 0 worden teruggezet. BGP RIP OSPF De nieuwe router heeft routes nodig om te weten waar het het verkeer naar toe moet sturen. Voor een eenvoudig netwerk kunnen statische routes gebruikt worden. &os; wordt met het standaard BSD routeer-daemon &man.routed.8; geleverd, dat RIP (zowel versie 1 en versie 2) en IRDP spreekt. Ondersteuning voor BGP v4, OSPF v2, en andere slimme routeerprotocollen is beschikbaar via het pakket net/zebra. Ook zijn commerciële producten als &gated; beschikbaar voor complexere netwerkrouteer-oplossingen. Al Hoang Bijgedragen door Statische routes opzetten Handmatige configuratie Er wordt van het volgende netwerk uitgegaan: INTERNET | (10.0.0.1/24) Standaardrouter naar Internet | |Interface xl0 |10.0.0.10/24 +------+ | | RouterA | | (FreeBSD gateway) +------+ | Interface xl1 | 192.168.1.1/24 | +--------------------------------+ Intern Net 1 | 192.168.1.2/24 | +------+ | | RouterB | | +------+ | 192.168.2.1/24 | Intern Net 2 In dit scenario is RouterA een &os;-machine die dienst doet als router naar de rest van het Internet. Het heeft een standaardroute ingesteld op 10.0.0.1, dat het in staat stelt om verbindingen met de buitenwereld te maken. Er wordt aangenomen dat RouterB reeds juist is ingesteld en dat het weet hoe het waar naar toe moet gaan. (In dit plaatje is dit simpel. Voeg een standaardroute op RouterB toe door 192.168.1.1 als gateway te gebruiken.) De routeertabel voor RouterA zou er ongeveer als volgt uitzien: &prompt.user; netstat -nr Routing tables Internet: Destination Gateway Flags Refs Use Netif Expire default 10.0.0.1 UGS 0 49378 xl0 127.0.0.1 127.0.0.1 UH 0 6 lo0 10.0.0.0/24 link#1 UC 0 0 xl0 192.168.1.0/24 link#2 UC 0 0 xl1 Met de huidige routeertabel is RouterA niet in staat om Intern Net 2 te bereiken. Het heeft geen route voor 192.168.2.0/24. Een manier om dit te verhelpen is om de route handmatig toe te voegen. Het volgende commando voegt het netwerk Intern Net 2 toe aan de routeertabel van RouterA door 192.168.1.2 als de volgende hop te gebruiken: &prompt.root; route add -net 192.168.2.0/24 192.168.1.2 Nu kan RouterA elke host op het netwerk 192.168.2.0/24 bereiken. Persistente configuratie Bovenstaand voorbeeld is perfect voor het instellen van een statische route op een draaiend systeem. Een probleem is dat de routeerinformatie verdwijnt indien de &os;-machine opnieuw wordt opgestart. Aanvullende statische routes kunnen in /etc/rc.conf opgenomen worden: # Voeg Intern Net 2 als een statische route toe static_routes="internnet2" route_internnet2="-net 192.168.2.0/24 192.168.1.2" De instellingsvariabele static_routes is een lijst van strings gescheiden door een spatie. Elke string verwijst naar een routenaam. Bovenstaand voorbeeld heeft slechts één string in static_routes. Dit is de string internnet2. Vervolgens wordt een instellingsvariabele route_internnet2 toegevoegd waarin alle instellingsparameters staan die aan het commando &man.route.8; moeten worden doorgegeven. Voor bovenstaand voorbeeld zou het volgende commando zijn gebruikt: &prompt.root; route add -net 192.168.2.0/24 192.168.1.2 Dus is "-net 192.168.2.0/24 192.168.1.2" nodig. Zoals hierboven is vermeld is het mogelijk om meerdere strings in static_routes te hebben. Dit maakt het mogelijk om meerdere statische routes aan te maken. De volgende regels geven een voorbeeld van het toevoegen van statische routes voor de netwerken 192.168.0.0/24 en 192.168.1.0/24 op een denkbeeldige router: static_routes="net1 net2" route_net1="-net 192.168.0.0/24 192.168.0.1" route_net2="-net 192.168.1.0/24 192.168.1.1" Routes propageren routes propageren Er is al gesproken over hoe routes naar de buitenwereld te definiëren, maar niet over hoe de buitenwereld ons kan vinden. Het is al bekend dat routeertabellen aangemaakt kunnen worden zodat al het verkeer voor een bepaalde adresruimte (in ons voorbeeld een klasse-C subnet) naar een bepaalde host op dat netwerk gezonden kan worden, dat de ingaande pakketten doorgeeft. Wanneer een adresruimte aan een site wordt toegewezen, stelt de serviceprovider al hun routeertabellen zodanig in dat al het verkeer voor het bijhorende subnet naar de PPP-verbinding van de site gezonden wordt. Maar hoe weten sites door het land heen hoe naar de internetprovider van deze site te versturen? Er bestaat een systeem (dat veel lijkt op de gedistribueerde DNS-informatie) dat alle toegewezen adresruimtes bijhoudt, en hun verbindingspunt met de Internet Backbone definieert. De Backbone zijn de grote kabels die Internetverkeer door het land en over de wereld sturen. Elke backbone-machine heeft een kopie van een master-verzameling van tabellen, die verkeer voor een bepaald netwerk naar een bepaalde backbone-carrier sturen, en van daaruit naar een keten van serviceproviders totdat het netwerk van de site bereikt is. Het is de taak van de serviceprovider om bij de backbone-sites aan te geven dat zij het verbindingspunt (en dus het ingaande pad) zijn voor de site. Dit staat bekend als routepropagatie. Problemen oplossen traceroute Soms is er een probleem met routepropagatie en kunnen sommige sites geen verbinding maken. Misschien is het nuttigste commando om proberen uit te zoeken waar het routen misgaat &man.traceroute.8;. Het is ook nuttig als er geen verbinding mogelijk lijkt met een verre machine (dus als &man.ping.8; faalt). Het commando &man.traceroute.8; wordt gedraaid met de naam van de verre host waarmee geprobeerd wordt te verbinden. Het laat de gateway-hosts zien langs het gepoogde pad, dat uiteindelijk de doelhost bereikt, of wegens een gebrek aan verbinding afgebroken wordt. Raadpleeg voor meer informatie de hulppagina voor &man.traceroute.8;. Multicast routen multicast routen kernelopties MROUTING &os; ondersteunt zowel multicast-applicaties als multicast routen van huis uit. Voor multicast-applicaties is geen speciale configuratie van &os; nodig; applicaties draaien over het algemeen als geleverd. Voor multicast routen dient ondersteuning in de kernel gecompileerd te worden: options MROUTING Ook dient de multicast-routeer-daemon &man.mrouted.8; ingesteld worden zodat het tunnels en DVMRP via /etc/mrouted.conf aanmaakt. Kijk voor meer details over multicast-instellingen in de hulppagina voor &man.mrouted.8;. De &man.mrouted.8; multicast-routeer-daemon implementeert het multicast-routeer-protocol DVRMP welke in veel multicast-installaties grotendeels is vervangen door &man.pim.4;. &man.mrouted.8; en de gerelateerde &man.map-mbone.8; en &man.mrinfo.8; gereedschappen zijn beschikbaar in de &os; Ports Collectie als net/mrouted. Loader Marc Fonvieille Murray Stokely Draadloze netwerken draadloze netwerken 802.11 draadloze netwerken De beginselen van draadloos netwerken De meeste draadloze netwerken zijn op de &ieee; 802.11 standaarden gebaseerd. Een eenvoudig draadloos netwerk bestaat uit meerdere stations die met radio's communiceren die in de 2,4GHz of de 5GHz band uitzenden (alhoewel dit regionaal varieert en het ook verandert om communicatie in de 2,3GHz en de 4,9GHz banden mogelijk te maken). 802.11-netwerken zijn op twee manieren georganiseerd: in infrastructuurmodus treedt één station als meester op, alle andere stations associëren met dit station; dit netwerk staat bekend als een BSS en het meesterstation heet een toegangspunt (AP). In een BSS gaat alle communicatie via het AP; zelfs als een station met een ander draadloos station wil communiceren gaan de boodschappen door het AP. In de tweede netwerkvorm is er geen meester en communiceren de stations direct. Deze netwerkvorm is een IBSS en staat gewoonlijk bekend als een ad-hoc netwerk. 802.11 netwerken begonnen in de 2,4GHz band waarbij gebruik werd gemaakt van protocollen die door de &ieee; 802.11 en 802.11b standaarden worden gedefinieerd. Deze specificaties omvatten de werkfrequenties, karakteristieken van de MAC-lagen waaronder frame- en zendsnelheden (communicatie kan met verschillende snelheden plaatsvinden). Later definieerde de 802.11a-standaard het werken in de 5GHz band, inclusief andere mechanismen voor signalering en hogere zendsnelheden. Nog later werd de 802.11g-standaard gedefinieerd om gebruik te kunnen maken van de signalerings- en zendmechanismen van 802.11a in de 2,4GHz band zodanig dat het met terugwerkende kracht werkt op 802.11b-netwerken. Afgezien van de onderliggende zendtechnieken beschikken 802.11-netwerken over een verscheidenheid aan beveiligingstechnieken. De originele 802.11-specificaties definieerden een eenvoudig beveiligingsprotocol genaamd WEP. Dit protocol maakt gebruik van een vaste, van te voren gedeelde sleutel en het cryptografische algoritme RC4 om de gegevens die over het netwerk verstuurd worden te coderen. Alle stations dienen dezelfde sleutel te gebruiken om te kunnen communiceren. Het is bewezen dat dit mechanisme eenvoudig te kraken is en wordt nu, afgezien om voorbijgaande gebruikers te ontmoedigen het netwerk te gebruiken, nog zelden gebruikt. De huidige beveiligingsmethoden worden gegeven door de &ieee; 802.11i specificatie dat nieuwe cryptografische algoritmen en een aanvullend protocol om stations aan een toegangspunt te authenticeren en om sleutels voor gegevenscommunicatie uit te wisselen definieert. Verder worden cryptografische sleutels periodiek ververst en zijn er mechanismen om indringpogingen te detecteren (en om indringpogingen tegen te gaan). Een andere specificatie van een veelgebruikt beveiligingsprotocol in draadloze netwerken is WPA. Dit was een voorloper op 802.11i en gedefinieerd door een industriegroep als een tussenmaatregel terwijl er gewacht werd op de ratificatie van 802.11i. WPA specificeert een deel van de eisen van 802.11i en is ontworpen voor implementatie op verouderde hardware. In het bijzonder vereist WPA alleen de TKIP-sleutel die van de originele WEP-sleutel is afgeleid. 802.11i staat het gebruik van TKIP toe maar vereist ook ondersteuning voor een sterkere sleutel, AES-CCM, om gegevens te versleutelen. (De AES-sleutel was niet nodig in WPA omdat het rekenkundig te kostbaar werd geacht voor implementatie op verouderde hardware.) Afgezien van de bovenstaande protocolstandaarden is de andere belangrijke standaard waarvan bewustzijn belangrijk is 802.11e. Deze standaard definieert het opstellen van multimediatoepassingen zoals gestroomde video en voice over IP (VoIP) binnen een 802.11-netwerk. Net als 802.11i heeft ook 802.11e een voorgaande specificatie genaamd WME (later hernoemd tot WMM) die door een industriegroep is gedefinieerd als een deelverzameling van 802.11e die nu kan worden gebruikt om multimediatoepassingen mogelijk te maken terwijl er gewacht wordt op de uiteindelijke ratificatie van 802.11e. Het belangrijkste om over 802.11e en WME/WMM te weten is dat ze gepriotiseerd verkeersgebruik van een draadloos netwerk mogelijk maken door middel van Quality of Service (QoS) protocollen en protocollen voor verbeterde mediatoegang. Een juiste implementatie van deze protocollen maken snelle gegevensbursts en gepriotiseerde verkeersstromen mogelijk. &os; ondersteunt netwerken die met 802.11a, 802.11b, en 802.11g werken. Ook worden de veiligheidsprotocollen WPA en 802.11i ondersteund (samen met 11a, 11b, of 11g) en QoS en de verkeerspriorisatieprotocollen die nodig zijn voor de protocollen WME/WMM worden voor een beperkte verzameling draadloze apparatuur ondersteund. Basisinstallatie Kernelinstellingen Om van een draadloos netwerk gebruik te maken is het nodig om een draadloze netwerkkaart te hebben en om de kernel met de juiste ondersteuning voor draadloze netwerken in te stellen. Het laatste is verdeeld in meerdere modulen zodat alleen de software ingesteld hoeft te worden die daadwerkelijk gebruikt zal worden. Ten eerste is een draadloos netwerkapparaat nodig. De meestgebruikte apparaten zijn degenen die onderdelen van Atheros gebruiken. Deze apparaten worden ondersteund door het stuurprogramma &man.ath.4; en voor hen dient de volgende regel aan /boot/loader.conf toegevoegd te worden: if_ath_load="YES" Het stuurprogramma voor Atheros is opgedeeld in drie verschillende delen: het eigenlijke stuurprogramma (&man.ath.4;), de ondersteuningslaag voor de hardware die chip-specifieke functies afhandelt (&man.ath.hal.4;), en een algoritme om de snelheid om frames te verzenden te kiezen uit een reeks mogelijke waarden (hier ath_rate_sample). Indien deze ondersteuning als kernelmodules wordt geladen, zullen de afhankelijkheden automatisch afgehandeld worden. Voor andere apparaten dan die van Atheros dient de module voor dat stuurprogramma geladen te worden; bijvoorbeeld: if_wi_load="YES" voor apparaten die op onderdelen van Intersil Prism zijn gebaseerd (stuurprogramma &man.wi.4;). In de rest van dit document zal een &man.ath.4; apparaat gebruikt worden, de naam van het apparaat in de voorbeelden dient aangepast te worden aan de lokale installatie. Een lijst van beschikbare draadloze stuurprogramma's en ondersteunde adapters staat in de &os; Hardware Notes. Kopieën hiervan voor verschillende uitgaven en architecturen zijn beschikbaar op de Uitgave Informatie pagina van de &os; website. Indien er geen origineel stuurprogramma voor het draadloze apparaat bestaat, is het mogelijk om te proberen om direct het stuurprogramma van &windows; proberen te gebruiken met behulp van de stuurprogramma-wrapper NDIS. - Nadat het apparaatstuurprogramma is ingesteld onder &os; 7.X - is het ook nodig om de ondersteuning voor 802.11-netwerken waarvan het - stuurprogramma gebruik maakt in te stellen. Voor het - stuurprogramma &man.ath.4; zijn dit minimaal de modules - &man.wlan.4;, wlan_scan_ap en - wlan_scan_sta; de module &man.wlan.4; wordt - automatisch geladen met het stuurprogramma voor draadloze - apparaten, de overige modules dienen tijdens het opstarten - geladen te worden in /boot/loader.conf: - - wlan_scan_ap_load="YES" -wlan_scan_sta_load="YES" - - Sinds &os; 8.0 zijn deze modules deel van het - basisstuurprogramma &man.wlan.4; dat dynamisch met het stuurprogramma - voor de adapter wordt geladen. - Daarvoor zijn ook de modules nodig die cryptografische ondersteuning implementeren voor de te gebruiken veiligheidsprotocollen. Het is de bedoeling dat ze dynamisch door de module &man.wlan.4; worden geladen maar momenteel dienen ze handmatig ingesteld te worden. De volgende modules zijn beschikbaar: &man.wlan.wep.4;, &man.wlan.ccmp.4;, en &man.wlan.tkip.4;. Zowel de stuurprogramma's &man.wlan.ccmp.4; en &man.wlan.tkip.4; zijn alleen nodig indien het veiligheidsprotocol WPA en/of 802.11i gebruikt wordt. Indien het netwerk encryptieloos dient te zijn, is de ondersteuning van &man.wlan.wep.4; niet nodig. Om deze modules tijdens het opstarten te laden, dienen de volgende regels aan /boot/loader.conf toegevoegd te worden: wlan_wep_load="YES" wlan_ccmp_load="YES" wlan_tkip_load="YES" Nadat deze informatie aan het instellingenbestand om het systeem op te starten (i.e., /boot/loader.conf) is toegevoegd, is het noodzakelijk om de &os;-computer opnieuw op te starten. Indien het ongewenst is om de computer nu opnieuw op te starten, kunnen de modules ook handmatig worden geladen door &man.kldload.8; te gebruiken. Indien het gebruik van modules ongewenst is, kunnen deze stuurprogramma's in de kernel worden gecompileerd door de volgende regels aan het kernelinstellingenbestand toe te voegen: device wlan # 802.11 ondersteuning device wlan_wep # 802.11 WEP-ondersteuning device wlan_ccmp # 802.11 CCMP-ondersteuning device wlan_tkip # 802.11 TKIP-ondersteuning device wlan_amrr # AMRR controle-algoritme voor zendsnelheid device ath # Atheros PCI/Cardbus netwerkkaarten device ath_hal # Ondersteuning voor PCI/cardbus chips options AH_SUPPORT_AR5146 # zet AR5146 tx/rx descriptors aan device ath_rate_sample # SampleRate verzendsnelheid-controle voor ath - Beide van de volgende regels zijn nodig voor - &os; 7.X, voor andere versies van &os; zijn ze niet - nodig: - - device wlan_scan_ap # 802.11 AP mode scanning -device wlan_scan_sta # 802.11 STA mode scanning - Met deze informatie in het kernelinstellingenbestand kan de kernel opnieuw gecompileerd en de &os;-computer opnieuw opgestart worden. Wanneer het systeem draait, is het mogelijk om enige informatie over de draadloze apparaten in de opstartboodschappen te vinden, zoals: ath0: <Atheros 5212> mem 0x88000000-0x8800ffff irq 11 at device 0.0 on cardbus1 ath0: [ITHREAD] ath0: AR2413 mac 7.9 RF2413 phy 4.5 Infrastructuurmodus De infrastructuur- of BSS-modus is de modus die normaliter gebruikt wordt. In deze modus zijn een aantal draadloze toegangspunten verbonden met een bedraad netwerk. Elk draadloos netwerk heeft een eigen naam, deze naam wordt de SSID van het netwerk genoemd. Draadloze cliënten verbinden zich met de draadloze toegangspunten. &os; cliënten Hoe toegangspunten te vinden Voor het scannen van netwerken wordt het commando ifconfig gebruikt. Het kan even duren voordat dit verzoek is afgehandeld aangezien het systeem op elke beschikbare draadloze frequentie naar toegangspunten moet zoeken. Alleen de super-gebruiker kan zo'n scan opzetten: &prompt.root; ifconfig wlan0 create wlandev ath0 &prompt.root; ifconfig wlan0 up scan SSID/MESH ID BSSID CHAN RATE S:N INT CAPS dlinkap 00:13:46:49:41:76 11 54M -90:96 100 EPS WPA WME freebsdap 00:11:95:c3:0d:ac 1 54M -83:96 100 EPS WPA De interface dient als up te worden gemarkeerd voordat het scannen begint. Voor verdere scans is het niet nodig om de interface als up te markeren. - - In &os; 7.X wordt de apparaat-adapter, bijvoorbeeld - ath0, - direct gebruikt in plaats van het apparaat - wlan. Hierom is het nodig om beide - vorige regels te vervangen door: - - &prompt.root; ifconfig ath0 up scan - - In de rest van dit document dienen gebruikers van - &os; 7.X de opdracht- en instellingregels volgens dat schema - aan te passen. - - De uitvoer van een scanverzoek vermeld elk gevonden BSS/IBSS-netwerk. Naast de naam van het netwerk, SSID, staat het BSSID, wat het MAC-adres van het toegangspunt is. Het veld CAPS identificeert het type van elk netwerk en de mogelijkheden van de stations die daar werkzaam zijn: Station Capability Codes Capability Code Betekenis E Uitgebreide dienstenverzameling (ESS). Geeft aan dat het station deel uitmaakt van een infrastructuurnetwerk (in tegenstelling tot een IBSS-/ ad-hoc-netwerk). I IBSS-/ad-hoc-netwerk. Geeft aan dat het station deel uitmaakt van een ad-hoc-netwerk (in tegenstelling tot een ESS-netwerk). P Privacy. Vertrouwelijkheid is vereist voor alle gegevensframes die binnen het BSS worden uitgewisseld. Dit betekent dat dit BSS eist dat het station cryptografische middelen als WEP, TKIP of AES-CCMP dient te gebruiken om de gegevensframes die met anderen worden uitgewisseld te versleutelen en te ontsleutelen. S Korte preambule. Geeft aan dat het netwerk korte preambules gebruikt (gedefinieerd in 802.11b Hoge Snelheid/DSSS PHY, korte preambule gebruikt een 56-bits synchronisatieveld in tegenstelling tot een 128-bits dat bij lange preambules wordt gebruikt). s Korte slottijd. Geeft aan dat het 802.11g-netwerk een korte slottijd gebruikt omdat er geen verouderde (802.11b) stations aanwezig zijn.
Het is ook mogelijk om de huidige lijst van bekende netwerken weer te geven met: &prompt.root; ifconfig scan0 list scan Deze informatie kan automatisch bijgewerkt worden door de adapter of handmatig met een verzoek. Oude gegevens worden automatisch uit de cache verwijderd, dus kan deze lijst na verloop van tijd korter worden tenzij er meer scanverzoeken gedaan worden.
Basisinstellingen Deze sectie geeft een eenvoudig voorbeeld hoe de draadloze netwerkadapter in &os; zonder encryptie aan de praat te krijgen. Nadat deze concepten bekend zijn, wordt het sterk aangeraden om WPA te gebruiken om de draadloze netwerken op te zetten. Er zijn drie basisstappen om een draadloos netwerk in te stellen: een toegangspunt kiezen, het station authenticeren, en een IP-adres instellen. De volgende secties behandelen elk een stap. Een toegangspunt kiezen In de meeste gevallen is het voldoende om het systeem een toegangspunt gebaseerd op de ingebouwde heuristieken te laten kiezen. Dit is het standaardgedrag wanneer een interface als up wordt gemarkeerd of als een interface wordt ingesteld door het te noemen in /etc/rc.conf, bijvoorbeeld: wlans_ath0="wlan0" ifconfig_wlan0="DHCP" - - Zoals eerder vermeld, is voor &os; 7.X alleen een - regel nodig voor de apparaat-adapter: - - ifconfig_ath0="DHCP" - - Indien er meerdere toegangspunten zijn en het gewenst is om een specifieke te kiezen, kan dit met het SSID: wlans_ath0="wlan0" ifconfig_wlan0="ssid uw_ssid_hier DHCP" In een omgeving waar meerdere toegangspunten hetzelfde SSID hebben (vaak gedaan om roamen eenvoudiger te maken) kan het nodig zijn om met één specifiek apparaat te associëren. In dit geval kan ook het BSSID van het toegangspunt gespecificeerd worden (het SSID kan ook weggelaten worden): wlans_ath0="wlan0" ifconfig_wlan0="ssid uw_ssid_hier bssid xx:xx:xx:xx:xx:xx DHCP Er zijn andere manieren om de keuze van een toegangspunt te beperken zoals het beperken van het aantal frequenties waarop het systeem scant. Dit kan handig zijn bij multi-band-netwerkkaarten aangezien het scannen van alle mogelijke kanalen tijdrovend kan zijn. Om de werking tot een specifieke band te beperken kan de parameter gebruikt worden; bijvoorbeeld: wlans_ath0="wlan0" ifconfig_wlan0="mode 11g ssid uw_ssid_hier DHCP" zal de kaart forceren om te werken in 802.11g welke alleen voor 2,4GHz frequenties is gedefinieerd dus de 5GHz kanalen blijven buiten beschouwing. Andere manieren om dit te doen zijn de parameter , om bewerkingen op één specifieke frequentie vast te zetten, en de parameter , om een lijst van te scannen kanalen te specificeren. Meer informatie over deze parameters kan in de hulppagina &man.ifconfig.8; gevonden worden. Authenticatie Nadat er een toegangspunt is gekozen moet het station zich authenticeren voordat het gegevens kan versturen. Authenticatie kan op verschillende manieren gebeuren. Het meest gebruikte schema wordt open authenticatie genoemd en staat doe dat elk station aan het netwerk deelneemt en communiceert. Deze manier van authenticatie dient gebruikt te worden voor testdoeleinden tijdens het voor de eerste keer opzetten van een draadloos netwerk. Andere schema's vereisen dat cryptografische overeenkomsten voltooid worden voordat gegevensverkeer kan stromen; ofwel door vooraf gedeelde sleutels of geheimen te gebruiken, of door complexere schema's te gebruiken welke achterliggende diensten zoals RADIUS betrekken. De meeste gebruikers zullen open authenticatie gebruiken welke de standaardinstelling is. De dan meest voorkomende opstelling is WPA-PSK, ook bekend als WPA Personal, welke hieronder beschreven is. Indien er een &apple; &airport; Extreme basisstation als toegangspunt wordt gebruikt kan het nodig zijn om gedeelde-sleutel-authenticatie samen met een WEP-sleutel in te stellen. Dit kan gedaan worden in het bestand /etc/rc.conf of door het programma &man.wpa.supplicant.8; te gebruiken. Indien er een enkel &airport; basisstation wordt gebruikt kan de toegang met zoiets als het volgende worden ingesteld: wlans_ath0="wlan0" ifconfig_wlan0="authmode shared wepmode on weptxkey 1 wepkey 01234567 DHCP" Over het algemeen dient authenticatie via gedeelde sleutels worden voorkomen omdat het materiaal van de WEP-sleutel op een zeer afgedwongen manier gebruikt wordt wat het zelfs gemakkelijker maakt om de sleutel te kraken. Indien WEP gebruikt moet worden (bijvoorbeeld voor compatibiliteit met verouderde apparaten) is het beter om WEP met open authenticatie te gebruiken. Meer informatie met betrekking tot WEP kan gevonden worden in . Een IP-adres verkrijgen met DHCP Nadat het toegangspunt is gekozen en de parameters voor de authenticatie zijn ingesteld, dient er een IP-adres ter communicatie verkregen worden. In de meeste gevallen wordt het draadloze IP-adres verkregen via DHCP. Om dat te bereiken, dient /etc/rc.conf bewerkt te worden en DHCP aan de instellingen voor het apparaat toegevoegd te worden zoals in de verschillende bovenstaande voorbeelden is laten zien: wlans_ath0="wlan0" ifconfig_wlan0="DHCP" Op dit moment kan de draadloze interface geactiveerd worden: &prompt.root; service netif start Wanneer de interface draait, kan ifconfig gebruikt worden om de status van de interface ath0 te zien: &prompt.root; ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.1.00 netmask 0xffffff00 broadcast 192.168.1.255 media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g status: associated ssid dlinkap channel 11 (2462 Mhz 11g) bssid 00:13:46:49:41:76 country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7 scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS wme burst Het status: associated betekent dat er verbinding is met een draadloos netwerk (in dit geval met het netwerk dlinkap). Het gedeelte bssid 00:13:46:49:41:76 is het MAC-adres van het toegangspunt; de gedeelte met authmode vertelt dat de communicatie niet versleuteld is. Statisch IP-adres In het geval dat het niet mogelijk is om een IP-adres van een DHCP-server te krijgen, kan er een vast IP-adres worden ingesteld. Vervang het sleutelwoord DHCP van hierboven met de adresinformatie. Zorg ervoor dat de andere parameters voor het selecteren van een toegangspunt behouden blijven: wlans_ath0="wlan0" ifconfig_wlan0="inet 192.168.1.100 netmask 255.255.255.0 ssid uw_ssid_hier" WPA WPA (Wi-Fi Protected Access) is een beveiligingsprotocol dat samen met 802.11-netwerken wordt gebruikt om het gebrek aan degelijke authenticatie en de zwakte van WEP te benadrukken. WPA verbetert het 802.1X-authenticatieprotocol en gebruikt een sleutel gekozen uit meerdere in plaats van WEP voor gegevensintegriteit. De enige sleutel welke WPA vereist is TKIP (Temporary Key Integrity Protocol). TKIP is een sleutel dat de basis-RC4-sleutel welke door WEP wordt gebruikt uitbreidt door integriteitscontroles, knoeidetectie, en maatregelen om op elke gedetecteerde inbraak te reageren toe te voegen. TKIP is ontworpen om op verouderde hardware met enkel wijzigingen in software te draaien; het representeert een compromis dat de veiligheid verbetert maar nog steeds niet geheel immuun is tegen aanvallen. WPA specificeert ook de sleutel AES-CCMP als een alternatief voor TKIP welke te verkiezen is indien mogelijk; voor deze specificatie wordt gewoonlijk de term WPA2 (of RSN) gebruikt. WPA definieert protocollen voor authenticatie en versleuteling. Authenticatie gebeurt het meeste door één van deze twee technieken te gebruiken: door 802.1X en een achterliggende authenticatiedienst zoals RADIUS, of door een minimale overeenkomst tussen het station en het toegangspunt door een van te voren gedeeld geheim te gebruiken. Het eerste wordt vaak WPA Enterprise genoemd en het laatste staat bekend als WPA Personal. Aangezien de meeste mensen geen achterliggende RADIUS-server voor hun draadloos netwerk zullen opzetten, is WPA-PSK veruit de meest gebruikte configuratie voor WPA. Het beheer van de draadloze verbinding en de authenticatie (sleutelonderhandeling of authenticatie met een server) gebeurt met het gereedschap &man.wpa.supplicant.8;. Dit programma vereist dat er een instellingenbestand, /etc/wpa_supplicant.conf, draait. Meer informatie over dit bestand kan in de hulppagina &man.wpa.supplicant.conf.5; worden gevonden. WPA-PSK WPA-PSK, ook bekend als WPA-Personal, is gebaseerd op een vooraf gedeelde sleutel (PSK) gegenereerd vanuit een gegeven wachtwoord die gebruikt zal worden als de hoofdsleutel in het draadloze netwerk. Dit betekent dat alle draadloze gebruikers dezelfde sleutel zullen delen. WPA-PSK is bedoeld voor kleine netwerken waar het gebruik van een authenticatieserver niet mogelijk of gewenst is. Gebruik altijd sterke wachtwoorden welke voldoende lang zijn en opgebouwd zijn uit een grote tekenverzameling zodat ze niet gemakkelijk worden geraden of aangevallen. De eerste stap is het instellen van het bestand /etc/wpa_supplicant.conf met het SSID en de vooraf gedeelde sleutel van het netwerk: network={ ssid="freebsdap" psk="freebsdmall" } Daarna zal in /etc/rc.conf worden aangegeven dat de draadloze configuratie met WPA zal gebeuren en dat het IP-adres met DHCP zal worden verkregen: wlans_ath0="wlan0" ifconfig_wlan0="WPA DHCP" Hierna kan de interface geactiveerd worden: - &prompt.root; service netif start + &prompt.root; service netif start Starting wpa_supplicant. DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 5 DHCPDISCOVER on wlan0 to 255.255.255.255 port 67 interval 6 DHCPOFFER from 192.168.0.1 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.1 bound to 192.168.0.254 -- renewal in 300 seconds. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g status: associated ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS wme burst roaming MANUAL Ook kan gepoogd worden dit handmatig in te stellen door hetzelfde /etc/wpa_supplicant.conf als hierboven te gebruiken, en dit te draaien: &prompt.root; wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf Trying to associate with 00:11:95:c3:0d:ac (SSID='freebsdap' freq=2412 MHz) Associated with 00:11:95:c3:0d:ac WPA: Key negotiation completed with 00:11:95:c3:0d:ac [PTK=CCMP GTK=CCMP] CTRL-EVENT-CONNECTED - Connection to 00:11:95:c3:0d:ac completed (auth) [id=0 idstr=] De volgende stap is het lanceren van het commando dhclient om een IP-adres van de DHCP-server te krijgen: &prompt.root; dhclient wlan0 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.1 bound to 192.168.0.254 -- renewal in 300 seconds. &prompt.root; ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g status: associated ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac country US ecm authmode WPA2/802.11i privacy ON defxkey UNDEF AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS wme burst roaming MANUAL /etc/rc.conf heeft een regel ifconfig_wlan0 met de tekst DHCP (zoals ifconfig_wlan0="DHCP"), dhclient zal automatisch gestart worden nadat wpa_supplicant geassocieerd is met het toegangspunt. Als DHCP niet mogelijk of gewenst is, kan een statisch IP-adres worden ingesteld nadat wpa_supplicant het station heeft geauthenticeerd: &prompt.root; ifconfig wlan0 inet 192.168.0.100 netmask 255.255.255.0 &prompt.root; ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet OFDM/36Mbps mode 11g status: associated ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS wme burst roaming MANUAL Indien DHCP niet wordt gebruikt, dienen ook de standaard gateway en de naamserver handmatig ingesteld te worden: &prompt.root; route add default uw_standaard_router &prompt.root; echo "nameserver uw_DNS_server" >> /etc/resolv.conf WPA met EAP-TLS De tweede manier om WPA te gebruiken is met een achterliggende 802.1X-authenticatieserver. In dit geval wordt het WPA-Enterprise genoemd om het verschil met het minder veilige WPA-Personal met de vooraf gedeelde sleutel aan te duiden. Authenticatie is in WPA-Enterprise gebaseerd op EAP (Extensible Authentication Protocol). EAP wordt niet met een encryptiemethode geleverd. In plaats daarvan was het besloten om EAP in een versleutelde tunnel te omsluiten. Er bestaan vele EAP-authenticatiemethodes, de meest voorkomende zijn EAP-TLS, EAP-TTLS, en EAP-PEAP. EAP-TLS (EAP met Transport Layer Security) is een zeer goed ondersteund authenticatieprotocol in de draadloze wereld aangezien het de eerste EAP-methode was die gecertificeerd werd door de Wi-Fi alliantie. EAP-TLS vereist dat er drie certificaten draaien: het CA-certificaat (geïnstalleerd op alle machines), het servercertificaat voor de authenticatieserver, en een cliëntcertificaat voor elke draadloze cliënt. Bij deze EAP-methode authenticeren zowel de authenticatieserver als de draadloze cliënt elkaar door hun respectievelijke certificaten te laten zien, en ze controleren dat deze certificaten zijn getekend door de certificatenauthoriteit (CA) van de organisatie. Zoals voorheen gebeurt het instellen via /etc/wpa_supplicant.conf: network={ ssid="freebsdap" proto=RSN key_mgmt=WPA-EAP eap=TLS identity="loader" ca_cert="/etc/certs/cacert.pem" client_cert="/etc/certs/clientcert.pem" private_key="/etc/certs/clientkey.pem" private_key_passwd="freebsdmallclient" } Dit veld geeft de naam van het netwerk (SSID) aan. Hier wordt het RSN (&ieee; 802.11i) protocol gebruikt, ofwel WPA2. De regel key_mgmt verwijst naar het gebruikte sleutelbeheerprotocol. In dit geval is het WPA dat EAP-authenticatie gebruikt: WPA-EAP. In dit veld wordt de EAP-methode voor de verbinding genoemd. Het veld identity bevat de identiteitsstring voor EAP. Het veld ca_cert geeft de padnaam van het CA-certificaatbestand aan. Dit bestand is nodig om het servercertificaat te controleren. De regel client_cert geeft de padnaam van het cliëntcertificaatbestand aan. Dit certificaat is uniek voor elke draadloze cliënt van het netwerk. Het veld private_key is de padnaam naar het bestand dat de privésleutel van het cliëntcertificaat bevat. Het veld private_key_passwd bevat het wachtwoord voor de privésleutel. Voeg vervolgens de volgende regels toe aan /etc/rc.conf: wlans_ath0="wlan0" ifconfig_wlan0="WPA DHCP" De volgende stap is het activeren van de interface: &prompt.root; service netif start Starting wpa_supplicant. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 DHCPACK from 192.168.0.20 bound to 192.168.0.254 -- renewal in 300 seconds. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet DS/11Mbps mode 11g status: associated ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac country US ecm authmode WPA/802.11i privacy ON deftxkey UNDEF AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS wme burst roaming MANUAL Zoals eerder is laten zien, is het ook mogelijk om de interface handmatig te activeren met zowel de commando's wpa_supplicant en ifconfig. WPA met EAP-TTLS Bij EAP-TLS hebben zowel de authenticatieserver als de cliënt een certificaat nodig, met EAP-TTLS (EAP-Tunneled Transport Layer Security) is een cliëntcertificaat optioneel. Deze methode komt in de buurt van wat sommige beveiligde websites doen, waar de webserver een veilige SSL-tunnel kan aanmaken zelfs als de bezoekers geen certificaten aan de cliëntkant hebben. EAP-TTLS zal de versleutelde TLS-tunnel gebruiken voor het veilig transporteren van de authenticatiegegevens. De instellingen worden gedaan via het bestand /etc/wpa_supplicant.conf: network={ ssid="freebsdap" proto=RSN key_mgmt=WPA-EAP eap=TTLS identity="test" password="test" ca_cert="/etc/certs/cacert.pem" phase2="auth=MD5" } Dit veld noemt de EAP-methode voor de verbinding. Het veld identity bevat de identiteitsstring voor EAP-authenticatie binnen de versleutelde TLS-tunnel. Het veld password bevat het wachtwoord voor de EAP-authenticatie. Het veld ca_cert wijst naar de padnaam van het CA-certificaatbestand. Dit bestand is nodig om het servercertificaat te controleren. Dit veld noemt de gebruikte authenticatiemethode in de versleutelde TLS-tunnel. In dit geval is EAP met MD5-Challenge gebruikt. De binnenste authenticatie-fase wordt vaak phase2 genoemd. Ook dienen de volgende regels toegevoegd te worden aan /etc/rc.conf: wlans_ath0="wlan0" ifconfig_ath0="WPA DHCP" De volgende stap is het activeren van de interface: &prompt.root; service netif start Starting wpa_supplicant. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21 DHCPACK from 192.168.0.20 bound to 192.168.0.254 -- renewal in 300 seconds. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet autoselect DS/11Mbps mode 11g status: associated ssid freebsdap channel 1 (2412 Mhz) bssid 00:11:95:c3:0d:ac country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS wme burst roaming MANUAL WPA met EAP-PEAP PEAPv0/EAP-MSCHAPv2 is de meest gebruikelijke PEAP-methode. In de rest van dit document wordt de term PEAP gebruikt om naar die methode te verwijzen. PEAP (Beveiligd EAP) is ontworpen als een alternatief voor EAP-TTLS, en is de meest gebruikte EAP-standaard na EAP-TLS. Met andere woorden, als u een netwerk met verschillende besturingssystemen heeft, zou PEAP de meest ondersteunde standaard moeten zijn na EAP-TLS. PEAP is soortgelijk aan EAP-TTLS: het gebruikt een server-side certificaat om de cliënten te authenticeren door een beveiligde TLS-tunnel tussen de cliënt en de authenticatieserver aan te maken, welke de uitwisseling van de authenticatie-informatie beschermt. Vanuit een beveiligingsoogpunt gezien is het verschil tussen EAP-TTLS en PEAP dat PEAP-authenticatie de gebruikersnaam onversleuteld uitzendt, alleen het wachtwoord wordt in de beveiligde TLS-tunnel verzonden. EAP-TTLS gebruikt de TLS-tunnel voor zowel de gebruikersnaam als het wachtwoord. Het bestand /etc/wpa_supplicant.conf dient gewijzigd te worden om de EAP-PEAP-gerelateerde instellingen toe te voegen: network={ ssid="freebsdap" proto=RSN key_mgmt=WPA-EAP eap=PEAP identity="test" password="test" ca_cert="/etc/certs/cacert.pem" phase1="peaplabel=0" phase2="auth=MSCHAPV2" } Dit veld noemt de EAP-methode voor de verbinding. Het veld identity bevat de identiteitsstring voor EAP-authenticatie binnen de versleutelde TLS-tunnel. Het veld password bevat het wachtwoord voor de EAP-authenticatie. Het veld ca_cert wijst naar de padnaam van het CA-certificaatbestand. Dit bestand is nodig om het servercertificaat te controleren. Dit veld bevat de parameters voor de eerste fase van authenticatie (de TLS-tunnel). Afhankelijk van de gebruikte authenticatieserver moet er een specifiek label voor authenticatie worden opgegeven. In de meeste gevallen zal het label client EAP encryption zijn welke ingesteld is door peaplabel=0 te gebruiken. Meer informatie kan in de hulppagina &man.wpa.supplicant.conf.5; gevonden worden. Dit veld noemt het authenticatieprotocol dat in de versleutelde TLS-tunnel gebruikt wordt. In het geval van PEAP is dit auth=MSCHAPV2. Het volgende dient te worden toegevoegd aan /etc/rc.conf: wlans_ath0="wlan0" ifconfig_wlan0="WPA DHCP" Hierna kan de interface worden geactiveerd: &prompt.root; service netif start Starting wpa_supplicant. DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 7 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 15 DHCPREQUEST on wlan0 to 255.255.255.255 port 67 interval 21 DHCPACK from 192.168.0.20 bound to 192.168.0.254 -- renewal in 300 seconds. wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.0.254 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet autoselect DS/11Mbps mode 11g status: associated ssid freebsdap channel 1 (2412 Mhz) bssid 00:11:95:c3:0d:ac country US ecm authmode WPA2/802.11i privacy ON deftxkey UNDEF AES-CCM 3:128-bit txpower 21.5 bmiss 7 scanvalid 450 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS wme burst roaming MANUAL WEP WEP (Wired Equivalent Privacy) maakt deel uit van de oorspronkelijke 802.11 standaard. Er is geen authenticatiemechanisme, slechts een zwakke vorm van toegangscontrole, en het is gemakkelijk te kraken. WEP kan worden opgezet met ifconfig: &prompt.root; ifconfig wlan0 create wlandev ath0 &prompt.root; ifconfig wlan0 inet 192.168.1.100 netmask 255.255.255.0 \ ssid mijn_net wepmode on weptxkey 3 wepkey 3:0x3456789012 De weptxkey geeft aan welke WEP-sleutel zal worden gebruikt tijdens het verzenden. Hier wordt de derde sleutel gebruikt. Dit dient overeen te komen met de instelling in het toegangspunt. Probeer, indien onbekend is welke sleutel door het toegangspunt wordt gebruikt, 1 (i.e., de eerste sleutel) voor deze waarde te gebruiken. De wepkey selecteert één van de WEP-sleutels in. Het dient in het formaat index:sleutel te zijn. Sleutel 1 wordt als standaard gebruikt; de index hoeft alleen ingesteld te worden als we een andere dan de eerste sleutel gebruiken. De 0x3456789012 dient vervangen te worden door de sleutel die ingesteld is voor gebruik met het toegangspunt. Het wordt aangeraden om de hulppagina &man.ifconfig.8; te lezen voor verdere informatie. De faciliteit wpa_supplicant kan ook gebruikt worden om de draadloze interface in te stellen voor WEP. Het bovenstaande voorbeeld kan worden ingesteld door de volgende regels toe te voegen aan /etc/wpa_supplicant.conf: network={ ssid="mijn_net" key_mgmt=NONE wep_key3=3456789012 wep_tx_keyidx=3 } Daarna: &prompt.root; wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf Trying to associate with 00:13:46:49:41:76 (SSID='dlinkap' freq=2437 MHz) Associated with 00:13:46:49:41:76
Ad-hoc-modus IBSS-modus, ook ad-hoc-modus genoemd, is ontworpen voor point-to-point-verbindingen. Om bijvoorbeeld een ad-hoc-netwerk tussen de machine A en de machine B op te zetten, is het slechts nodig om twee IP-adressen en een SSID te kiezen. Op machine A: &prompt.root; ifconfig wlan0 create wlandev ath0 wlanmode adhoc &prompt.root; ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:11:95:c3:0d:ac inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc> status: running ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60 protmode CTS wme burst De parameter adhoc geeft aan dat de interface in de IBSS-modus draait. Op B zal het mogelijk moeten zijn om A te detecteren: &prompt.root; ifconfig wlan0 create wlandev ath0 wlanmode adhoc &prompt.root; ifconfig wlan0 up scan SSID/MESH ID BSSID CHAN RATE S:N INT CAPS reebsdap 02:11:95:c3:0d:ac 2 54M -64:-96 100 IS WME De I in de uitvoer bevestigt dat machine A in ad-hoc-modus verkeert. Het is slechts nodig om B met een ander IP-adres in te stellen: &prompt.root; ifconfig wlan0 inet 192.168.0.2 netmask 255.255.255.0 ssid freebsdap &prompt.root; ifconfig wlan0 ssid freebsdap mediaopt adhoc inet 192.168.0.2 netmask 255.255.255.0 &prompt.root; ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <adhoc> status: running ssid freebsdap channel 2 (2417 Mhz 11g) bssid 02:11:95:c3:0d:ac country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60 protmode CTS wme burst Zowel A als B zijn nu klaar om informatie uit te wisselen. &os; Host Toegangspunten &os; kan als toegangspunt (AP) functioneren wat de noodzaak om een hardwarematig AP te kopen of een ad-hoc-netwerk te draaien wegneemt. Dit kan bijzonder nuttig zijn indien de &os;-machine als gateway naar een ander netwerk (bijvoorbeeld het Internet) functioneert. Basisinstellingen Voordat de &os;-machine als een AP wordt ingesteld, dient de kernel te worden ingesteld met de juiste ondersteuning voor draadloos netwerken voor de draadloze kaart. Ook dient er ondersteuning voor de te gebruiken beveiligingsprotocollen te worden toegevoegd. Meer details staan in . Momenteel staan de NDIS-stuurprogrammawrapper en de stuurprogramma's van &windows; het werken als AP niet toe. Alleen originele draadloze &os;-stuurprogramma's ondersteunen AP-modus. Wanneer de ondersteuning voor draadloos netwerken is geladen, kan gecontroleerd worden of het draadloze apparaat de hostgebaseerde toegangspuntmodus ondersteunt (ook bekend als hostap-modus): &prompt.root; ifconfig wlan0 create wlandev ath0 &prompt.root; ifconfig wlan0 list caps drivercaps=6f85edc1<STA,FF,TURBOP,IBSS,HOSTAP,AHDEMO,TXPMGT,SHSLOT,SHPREAMBLE,MONITOR,MBSS,WPA1,WPA2,BURST,WME,WDS,BGSCAN,TXFRAG> cryptocaps=1f<WEP,TKIP,AES,AES_CCM,TKIPMIC> Deze uitvoer geeft de mogelijkheden van de kaart weer, het woord HOSTAP bevestigt dat deze draadloze kaart als toegangspunt kan functioneren. Ook worden verschillende ondersteunde versleutelmethoden genoemd: WEP, TKIP, AES, enzovoorts. Deze informatie is belangrijk om te weten welke beveiligingsprotocollen gebruikt kunnen worden op het toegangspunt. Het draadloze apparaat kan enkel in hostap-modus worden gezet tijdens het creeëren van het netwerk pseudo-device dus een vooraf aangemaakt apparaat moet eerst verwijderd worden: &prompt.root; ifconfig wlan0 destroy waarna deze opnieuw aangemaakt kan worden met de juiste parameters: &prompt.root; ifconfig wlan0 create wlandev ath0 wlanmode hostap &prompt.root; ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1 Gebruik nogmaals ifconfig om de status van de interface wlan0 te zien: &prompt.root; ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:11:95:c3:0d:ac inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 status: running ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac country US ecm authmode OPEN privacy OFF txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs De parameter hostap geeft aan dat de interface in hostgebaseerde toegangspuntmodus draait. Het instellen van de interface kan automatisch tijdens het opstarten gedaan worden door de volgende regels aan /etc/rc.conf toe te voegen: wlans_ath0="wlan0" create_args_wlan0="wlanmode hostap" ifconfig_wlan0="inet 192.168.0.1 netmask 255.255.255.0 ssid freebsdap mode 11g channel 1" Hostgebaseerde toegangspunt zonder authenticatie of versleuteling Hoewel het niet aangeraden wordt om een AP zonder enige vorm van authenticatie of encryptie te draaien, is dit een eenvoudige manier om te controleren of het AP werkt. Deze configuratie is ook belangrijk voor het debuggen van problemen met cliënten. Nadat het AP is ingesteld als eerder is laten zien, is het mogelijk om van een andere draadloze machine een scan te beginnen om het AP te vinden: &prompt.root; ifconfig wlan0 create wlandev ath0 &prompt.root; ifconfig wlan0 up scan SSID/MESH ID BSSID CHAN RATE S:N INT CAPS freebsdap 00:11:95:c3:0d:ac 1 54M -66:-96 100 ES WME De cliëntmachine heeft het AP gevonden en kan ermee geassocieerd worden: &prompt.root; ifconfig ath0 ssid freebsdap inet 192.168.0.2 netmask 255.255.255.0 ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:11:95:d5:43:62 inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet OFDM/54Mbps mode 11g status: associated ssid freebsdap channel 1 (2412 Mhz 11g) bssid 00:11:95:c3:0d:ac country US ecm authmode OPEN privacy OFF txpower 21.5 bmiss 7 scanvalid 60 bgscan bgscanintvl 300 bgscanidle 250 roam:rssi 7 roam:rate 5 protmode CTS wme burst WPA hostgebaseerde toegangspunt Deze sectie zal zich richten op opzetten van een &os; toegangspunt dat het beveiligingsprotocol WPA gebruikt. Meer details over WPA en het instellen van op WPA gebaseerde draadloze cliënten kan gevonden worden in . De daemon hostapd wordt gebruikt om cliëntauthenticatie en sleutelbeheer op het toegangspunt met WPA af te handelen. In het volgende zullen alle instellingsbewerkingen worden uitgevoerd op de &os;-machine die als AP dienst doet. Wanneer het AP correct werkt, zou hostapd automatisch tijdens het opstarten aangezet moeten worden met de volgende regel in /etc/rc.conf: hostapd_enable="YES" Zorg ervoor dat voordat geprobeerd wordt om hostapd in te stellen, de basisinstellingen die in zijn geïntroduceerd zijn uitgevoerd. WPA-PSK WPA-PSK is bedoeld voor kleine netwerken waar het gebruik van een achterliggende authenticatieserver niet mogelijk of gewenst is. Het instellen wordt gedaan in het bestand /etc/hostapd.conf: interface=wlan0 debug=1 ctrl_interface=/var/run/hostapd ctrl_interface_group=wheel ssid=freebsdap wpa=1 wpa_passphrase=freebsdmall wpa_key_mgmt=WPA-PSK wpa_pairwise=CCMP TKIP Dit veld geeft aan welke draadloze interface voor het toegangspunt wordt gebruikt. Dit veld stelt het verbositeitsniveau in dat tijdens het draaien van hostapd wordt gebruikt. Een waarde van 1 vertegenwoordigt het minimale niveau. Het veld ctrl_interface geeft de padnaam van de door hostapd gebruikte map om de domeinsocketbestanden voor communicatie met externe programma's zoals &man.hostapd.cli.8; in op te slaan. Hier wordt de standaardwaarde gebruikt. De regel ctrl_interface_group stelt de groep in (hier is het de groep wheel) die toegang heeft tot de controle interfacebestanden. Het veld wpa maakt WPA mogelijk en specificeert welk WPA-authenticatieprotocol nodig zal zijn. De waarde 1 stelt het AP in op WPA-PSK. Het veld wpa_passphrase bevat het ASCII-wachtwoord voor de WPA-authenticatie. Gebruik altijd sterke wachtwoorden welke voldoende lang zijn en opgebouwd zijn uit een grote tekenverzameling zodat ze niet gemakkelijk worden geraden of aangevallen. De regel wpa_key_mgmt verwijst naar het gebruikte sleutelbeheerprotocol. In dit geval is dat WPA-PSK. Het veld wpa_pairwise geeft aan welke versleutelingsalgoritmes door het toegangspunt worden geaccepteerd. Hier worden zowel de versleuteling TKIP (WPA) en CCMP (WPA2) geaccepteerd. De versleuteling CCMP is een alternatief voor TKIP en wordt sterk aangeraden indien mogelijk; TKIP dient alleen gebruikt te worden voor stations die geen CCMP aankunnen. De volgende stap is het starten van hostapd: &prompt.root; service hostapd forcestart &prompt.root; ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2290 inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255dddd inet6 fe80::211:95ff:fec3:dac%ath0 prefixlen 64 scopeid 0x4 ether 00:11:95:c3:0d:ac media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap> status: associated ssid freebsdap channel 1 bssid 00:11:95:c3:0d:ac authmode WPA2/802.11i privacy MIXED deftxkey 2 TKIP 2:128-bit txpowmax 36 protmode CTS dtimperiod 1 bintval 100 Het toegangspunt draait nu, de cliënten kunnen er nu mee worden geassocieerd, zie voor meer details. Het is mogelijk om de stations die met het AP geassocieerd zijn te zien door het commando ifconfig wlan0 list te gebruiken. WEP hostgebaseerd toegangspunt Het wordt niet aangeraden om WEP te gebruiken om een toegangspunt op te zetten aangezien er geen authenticatiemechanisme is en het gemakkelijk is te kraken. Sommige verouderde draadloze kaarten ondersteunen alleen WEP als een beveiligingsprotocol, met deze kaarten is het alleen mogelijk om een AP zonder authenticatie of encryptie of een AP dat het WEP-protocol gebruikt op te zetten. Het draadloze apparaat kan nu in hostap-modus worden gezet en ingesteld worden met het juiste SSID en IP-adres: &prompt.root; ifconfig wlan0 create wlandev ath0 wlanmode hostap &prompt.root; ifconfig wlan0 inet 192.168.0.1 netmask 255.255.255.0 \ ssid freebsdap wepmode on weptxkey 3 wepkey 3:0x3456789012 mode 11g Het weptxkey geeft aan welke WEP-sleutel tijdens het zenden zal worden gebruikt. Hier wordt de derde sleutel gebruikt (merk op dat de nummering van de sleutels bij 1 begint). Deze parameter moet gespecificeerd worden om de gegevens daadwerkelijk te versleutelen. Het wepkey geeft aan dat de geselecteerde WEP-sleutel wordt ingesteld. Het dient in het formaat index:key te zijn, indien de index niet is gegeven, wordt sleutel 1 gebruikt. Dus indien een andere sleutel dan de eerste wordt gebruikt dient de index te worden ingesteld. Weer wordt ifconfig gebruikt om de status van de interface wlan0 te zien: &prompt.root; ifconfig wlan0 wlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 00:11:95:c3:0d:ac inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap> status: running ssid freebsdap channel 4 (2427 Mhz 11g) bssid 00:11:95:c3:0d:ac country US ecm authmode OPEN privacy ON deftxkey 3 wepkey 3:40-bit txpower 21.5 scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs Vanaf een andere draadloze machine is het mogelijk om een scan te beginnen om het AP te vinden: &prompt.root; ifconfig wlan0 create wlandev ath0 &prompt.root; ifconfig wlan0 up scan SSID BSSID CHAN RATE S:N INT CAPS freebsdap 00:11:95:c3:0d:ac 1 54M 22:1 100 EPS De cliëntmachine heeft het toegangspunt gevonden en kan ermee geassocieerd worden door de juiste parameters (sleutel, enz.) te gebruiken, zie voor meer details. Zowel de bekabelde als de draadloze verbinding gebruiken Een bekabelde verbinding biedt betere prestaties en betrouwbaarheid, terwijl een draadloze verbinding meer flexibiliteit en mobiliteit biedt; laptop-gebruikers zullen dit willen combineren en naadloos tussen de twee overschakelen. In &os; is het mogelijk om twee of meer netwerkinterfaces te combineren in een failover-opstelling, dit houdt in dat de meest geprefereerde en best beschikbare verbinding van een groep van netwerkinterfaces wordt gebruikt, en het besturingssysteem automatisch te laten overschakelen wanneer de status van de verbinding verandert. Link-aggregatie en failover worden behandeld in , een voorbeeld voor het gebruik van zowel een bekabelde als een draadloze verbinding wordt gegeven in . Problemen verhelpen Indien er problemen met het draadloos netwerk zijn, zijn er een aantal stappen die genomen kunnen worden om het probleem te helpen verhelpen. Indien het toegangspunt niet vermeld wordt tijdens het scannen, controleer dan of het draadloze apparaat niet is ingesteld op een beperkt aantal kanalen. Indien het niet mogelijk is om met een toegangspunt te associëren, controleer dan of de instellingen van het station overeenkomen met die van het toegangspunt. Dit omvat het authenticatieschema en de beveiligingsprotocollen. Versimpel de configuratie zoveel mogelijk. Indien een beveiligingsprotocol als WPA of WEP wordt gebruikt, stel het toegangspunt dan in voor open authenticatie en geen beveiliging en kijk of er verkeer door kan. Wanneer er met het toegangspunt geassocieerd kan worden, stel dan een diagnose over alle beveiligingsinstellingen met eenvoudige gereedschappen zoals &man.ping.8;. wpa_supplicant biedt veel ondersteuning voor debuggen; probeer het handmatig te draaien met de optie en controleer de systeemlogs. Er zijn ook veel debug-gereedschappen op lagere niveaus. Het is mogelijk om debugberichten in de laag die het 802.11 protocol ondersteunt aan te zetten door het programma wlandebug te gebruiken dat gevonden wordt - in /usr/src/tools/tools/net80211. + in /usr/src/tools/tools/net80211. Bijvoorbeeld: &prompt.root; wlandebug -i ath0 +scan+auth+debug+assoc net.wlan.0.debug: 0 => 0xc80000<assoc,auth,scan> kan worden gebruikt om consoleberichten aan te zetten die te maken hebben met het scannen van toegangspunten en het uitvoeren van 802.11 handshakes die nodig zijn om communicatie te regelen. Er worden ook veel nuttige statistieken door de 802.11 laag bijgehouden; het gereedschap wlanstats geeft deze informatie weer. Deze statistieken zouden alle fouten die door de 802.11 laag zijn geïdentificeerd moeten identificeren. Let erop dat sommige fouten worden geïdentificeerd in de apparaatstuurprogramma's die onder de 802.11 laag liggen zodat ze niet verschijnen. Voor het diagnosticeren van apparaatspecifieke problemen dient de documentatie van het stuurprogramma geraadpleegd te worden. Indien de bovenstaande informatie niet helpt om het probleem te verhelderen, stuur dan een probleemrapport op inclusief de uitvoer van de bovenstaande gereedschappen.
Pav Lucistnik Geschreven door
pav@FreeBSD.org
Bluetooth Bluetooth Introductie Bluetooth is een draadloze technologie om persoonlijke netwerken aan te maken die in de vrije 2,4GHz-band werken binnen een straal van 10 meter. Deze netwerken worden gewoonlijk ad-hoc gevormd en bestaan uit draagbare apparaten zoals mobiele telefoons, handhelds en laptops. In tegenstelling tot die andere populaire draadloze techniek, Wi-Fi, biedt Bluetooth een hoger niveau van serviceprofielen, zoals FTP-achtige bestandsservers, pushing van bestanden, stemtransport, emulatie van seriële lijnen, en meer. De Bluetooth stack is in &os; geïmplementeerd door gebruik te maken van het Netgraph-raamwerk (zie &man.netgraph.4;). Veel van de Bluetooth USB-dongles worden ondersteund door het stuurprogramma &man.ng.ubt.4;. Apparaten gebaseerd op de Broadcom BCM2033 chip worden ondersteund door de stuurprogramma's &man.ubtbcmfw.4; en &man.ng.ubt.4;. De 3Com Bluetooth PC Card 3CRWB60-A wordt ondersteund door het stuurprogramma &man.ng.bt3c.4;. Seriële en op UART gebaseerde Bluetooth-apparaten worden ondersteund via &man.sio.4;, &man.ng.h4.4;, en &man.hcseriald.8;. Deze sectie beschrijft het gebruik van de USB Bluetooth-dongle. Het apparaat inprikken Standaard zijn stuurprogramma's voor Bluetooth-apparaten beschikbaar als kernelmodules. Voordat een apparaat wordt aangekoppeld, dient het stuurprogramma in de kernel geladen te worden: &prompt.root; kldload ng_ubt Indien het Bluetooth-apparaat tijdens het opstarten van het systeem in het systeem aanwezig is, kan de module vanuit /boot/loader.conf geladen worden: ng_ubt_load="YES" Prik de USB-dongle in. Uitvoer vergelijkbaar aan de onderstaande zal op de console (of in syslog) verschijnen: ubt0: vendor 0x0a12 product 0x0001, rev 1.10/5.25, addr 2 ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2 ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3, wMaxPacketSize=49, nframes=6, buffer size=294 &man.service.8; wordt gebruikt om de Bluetooth-stack te starten en te stoppen. Het is een goed idee om de stack te stoppen voordat het apparaat wordt losgekoppeld, maar het is (gewoonlijk) niet fataal. Tijdens het starten van de stack verschijnt er uitvoer vergelijkbaar met de onderstaande: &prompt.root; service bluetooth start ubt0 BD_ADDR: 00:02:72:00:d4:1a Features: 0xff 0xff 0xf 00 00 00 00 00 <3-Slot> <5-Slot> <Encryption> <Slot offset> <Timing accuracy> <Switch> <Hold mode> <Sniff mode> <Park mode> <RSSI> <Channel quality> <SCO link> <HV2 packets> <HV3 packets> <u-law log> <A-law log> <CVSD> <Paging scheme> <Power control> <Transparent SCO data> Max. ACL packet size: 192 bytes Number of ACL packets: 8 Max. SCO packet size: 64 bytes Number of SCO packets: 8 Host Controller Interface (HCI) HCI Het Host Controller Interface (HCI) biedt een opdrachtinterface naar de controller van de basisband en de verbindingsbeheerder, en toegang tot hardwarestatus en controleregisters. Deze interface biedt een uniforme manier om de mogelijkheden van de basisband van Bluetooth te benaderen. De HCI-laag op de gastheer wisselt gegevens en opdrachten uit met de HCI-firmware in de Bluetooth-hardware. Het stuurprogramma voor de Host Controller Transport Layer (i.e., de fysieke bus) biedt aan beide HCI-lagen de mogelijkheid om informatie met elkaar uit te wisselen. Voor een enkel Bluetooth-apparaat wordt een enkele Netgraph knoop van het type hci aangemaakt. De HCI-knoop is normaliter verbonden met de knoop van het Bluetooth-apparaatstuurprogramma (naar beneden toe) en de L2CAP-knoop (naar boven toe). Alle HCI-bewerkingen dienen te worden uitgevoerd op de HCI-knoop en niet op de knoop van het apparaatstuurprogramma. De standaardnaam voor de HCI-knoop is devicehci. Kijk voor meer details in de hulppagina &man.ng.hci.4;. Eén van de meest voorkomende taken is het ontdekken van Bluetooth-apparaten binnen radiobereik. Deze bewerking wordt ondervragen genoemd. Ondervragen en andere HCI-gerelateerde bewerkingen worden uitgevoerd met het programma &man.hccontrol.8;. Het onderstaande voorbeeld laat zien hoe kan worden uitgezocht welke Bluetooth-apparaten zich binnen het bereik bevinden. De lijst met apparaten zou binnen enkele seconden moeten binnenkomen. Bedenk dat een apparaat op afstand alleen antwoord op de ondervraging zal geven indien het in ontdekbare modus staat. &prompt.user; hccontrol -n ubt0hci inquiry Inquiry result, num_responses=1 Inquiry result #0 BD_ADDR: 00:80:37:29:19:a4 Page Scan Rep. Mode: 0x1 Page Scan Period Mode: 00 Page Scan Mode: 00 Class: 52:02:04 Clock offset: 0x78ef Inquiry complete. Status: No error [00] BD_ADDR is een uniek adres van een Bluetooth-apparaat, vergelijkbaar met een MAC-adres van een netwerkkaart. Dit adres is nodig voor verdere communicatie met een apparaat. Het is mogelijk om een menselijk leesbare naam aan een BD_ADDR toe te kennen. Het bestand /etc/bluetooth/hosts bevat informatie over de bekende Bluetooth-gastheren. Het volgende voorbeeld laat zien hoe de menselijk leesbare naam dat aan het apparaat op afstand was toegekend te verkrijgen is: &prompt.user; hccontrol -n ubt0hci remote_name_request 00:80:37:29:19:a4 BD_ADDR: 00:80:37:29:19:a4 Name: Pav's T39 Tijdens het uitvoeren van een ondervraging op een Bluetooth-apparaat op afstand zal het de computer als uw.gastheer.naam (ubt0) vinden. De naam die aan het lokale apparaat is toegekend, kan altijd gewijzigd worden. Het Bluetooth-systeem biedt een punt-naar-punt-verbinding (slechts twee Bluetooth-eenheden betrokken), of een punt-naar-veelpunt-verbinding. Bij een punt-naar-veelpunt-verbinding wordt de verbinding met meerdere Bluetooth-apparaten gedeeld. Het volgende voorbeeld laat zien hoe de lijst met actieve basisbandverbindingen voor het lokale apparaat te verkrijgen is: &prompt.user; hccontrol -n ubt0hci read_connection_list Remote BD_ADDR Handle Type Mode Role Encrypt Pending Queue State 00:80:37:29:19:a4 41 ACL 0 MAST NONE 0 0 OPEN Een verbindingshandvat is nuttig indien het beëindigen van de basisbandverbinding noodzakelijk is. Normaalgesproken is het niet nodig om dit handmatig te doen. De stack zal automatisch niet-actieve basisbandverbindingen beëindigen. &prompt.root; hccontrol -n ubt0hci disconnect 41 Connection handle: 41 Reason: Connection terminated by local host [0x16] Raadpleeg hccontrol help voor een volledige lijst van beschikbare HCI-opdrachten. Voor de meeste HCI-opdrachten zijn geen beheerdersrechten nodig. Logical Link Control and Adaptation Protocol (L2CAP) L2CAP Het Logical Link Control and Adaptation Protocol (L2CAP) biedt verbindingsgeoriënteerde en verbindingsloze gegevensdiensten met mogelijkheden om protocollen te multiplexen en mogelijkheden voor segmentatie/herassemblage voor protocollen in hogere lagen. L2CAP staat toe dat protocollen en toepassingen in hogere lagen L2CAP-gegevenspakketten met een maximale lengte van 64 kB te verzenden en ontvangen. L2CAP is op het concept van kanalen gebaseerd. Een kanaal is een logische verbinding bovenop een basisbandverbinding. Elk kanaal is op een veel-op-één manier aan een enkel protocol gebonden. Aan hetzelfde protocol kunnen meerdere kanalen worden gebonden, maar één kanaal kan niet aan meerdere protocollen worden gebonden. Elk L2CAP-pakket dat op een kanaal wordt ontvangen, wordt naar het juiste hogere protocol doorgestuurd. Meerdere kanalen kunnen dezelfde basisbandverbinding delen. Voor elk Bluetooth-apparaat wordt een enkele Netgraph-knoop van het soort l2cap aangemaakt. De L2CAP-knoop is normaalgesproken verbonden met de Bluetooth HCI-knoop (naar beneden toe) en de knopen van de stopcontacten voor Bluetooth (naar boven toe). De standaardnaam voor de L2CAP-knoop is devicel2cap. Zie voor meer details de hulppagina &man.ng.l2cap.4;. Een nuttig commando is &man.l2ping.8;, dat gebruikt kan worden om andere apparaten te pingen. Sommige Bluetooth-implementaties geven niet alle verzonden gegevens terug, dus is 0 bytes normaal in het volgende voorbeeld. &prompt.root; l2ping -a 00:80:37:29:19:a4 0 bytes from 0:80:37:29:19:a4 seq_no=0 time=48.633 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=1 time=37.551 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=2 time=28.324 ms result=0 0 bytes from 0:80:37:29:19:a4 seq_no=3 time=46.150 ms result=0 Met het programma &man.l2control.8; kunnen verschillende bewerkingen op L2CAP-knopen worden uitgevoerd. Dit voorbeeld laat zien hoe de lijst met logische verbindingen (kanalen) en de lijst met basisbandverbindingen voor het lokale apparaat verkregen kunnen worden: &prompt.user; l2control -a 00:02:72:00:d4:1a read_channel_list L2CAP channels: Remote BD_ADDR SCID/ DCID PSM IMTU/ OMTU State 00:07:e0:00:0b:ca 66/ 64 3 132/ 672 OPEN &prompt.user; l2control -a 00:02:72:00:d4:1a read_connection_list L2CAP connections: Remote BD_ADDR Handle Flags Pending State 00:07:e0:00:0b:ca 41 O 0 OPEN Een ander diagnostisch programma is &man.btsockstat.1;. Het heeft ongeveer hetzelfde doel als &man.netstat.1;, maar dan voor Bluetooth-netwerkgerelateerde gegevensstructuren. Het onderstaande voorbeeld laat dezelfde logische verbinding zien als die van &man.l2control.8; hierboven. &prompt.user; btsockstat Active L2CAP sockets PCB Recv-Q Send-Q Local address/PSM Foreign address CID State c2afe900 0 0 00:02:72:00:d4:1a/3 00:07:e0:00:0b:ca 66 OPEN Active RFCOMM sessions L2PCB PCB Flag MTU Out-Q DLCs State c2afe900 c2b53380 1 127 0 Yes OPEN Active RFCOMM sockets PCB Recv-Q Send-Q Local address Foreign address Chan DLCI State c2e8bc80 0 250 00:02:72:00:d4:1a 00:07:e0:00:0b:ca 3 6 OPEN Het RFCOMM-protocol RFCOMM Het RFCOMM-protocol biedt emulatie van seriële poorten over het L2CAP-protocol. Het protocol is gebaseerd op de ETSI-standaard TS 07.10. RFCOMM is een eenvoudig transportprotocol, met aanvullende voorzieningen om de 9 circuits van RS-232- (EIATIA-232-E-) seriële poorten te emuleren. Het RFCOMM-protocol ondersteunt tot 60 gelijktijdige verbindingen (RFCOMM-kanalen) tussen twee Bluetooth-apparaten. Het is de bedoeling van RFCOMM dat in een volledig communicatiepad twee toepassingen op verschillende apparaten draaien (de eindpunten van de communicatie) met daartussen een communicatiesegment. RFCOMM is bedoeld om de toepassingen te beheren die gebruik maken van de seriële poorten van de apparaten waarop ze zijn geïnstalleerd. Het communicatiesegment is een directe Bluetooth-verbinding van het ene apparaat naar het andere. RFCOMM houdt zich alleen bezig met de verbinding tussen twee apparaten bij directe verbindingen, of tussen het apparaat en een modem in het geval van een netwerk. RFCOMM kan andere opstellingen ondersteunen, zoals modules die via draadloze Bluetooth-technologie communiceren aan de ene kant, en een draadinterface aanbieden aan de andere kant. In &os; is het RFCOMM-protocol in de laag van de Bluetooth-stopcontacten geïmplementeerd. Het paren van apparaten paren Standaard is Bluetooth-communicatie niet geauthenticeerd en kan elk apparaat met elk ander apparaat praten. Een Bluetooth-apparaat (bijvoorbeeld een mobiele telefoon) kan ervoor kiezen dat voor bepaalde diensten authenticatie nodig is (bijvoorbeeld voor de inbeldienst). Bluetooth-authenticatie geschied normaalgesproken met PIN-codes. Een PIN-code is een ACII-reeks van maximaal 16 tekens lang. De gebruiker dient dezelfde PIN-code op beide apparaten in te voeren. Nadat de gebruiker de PIN-code heeft ingevoerd, zullen beide apparaten een verbindingssleutel aanmaken. Hierna kan de verbindingssleutel òfwel in de apparaten zelf, òfwel in een permanente opslag worden opgeslagen. De volgende keer zullen beide apparaten de van tevoren aangemaakte verbindingssleutel gebruiken. Bovenstaande procedure wordt paren genoemd. Merk op dat indien een apparaat de verbindingssleutel verliest, het paren moet worden herhaald. De daemon &man.hcsecd.8; is verantwoordelijk voor het behandelen van alle verzoeken voor Bluetooth-authenticatie. Het standaard instellingenbestand is /etc/bluetooth/hcsecd.conf. Een voorbeeldsectie voor een mobiele telefoon waarvan de PIN-code willekeurig op 1234 is hieronder beschreven: device { bgaddr 00:80:37:29:19:a4; name "Pav's T39"; key nokey; pin "1234"; } Er is geen limiet voor PIN-codes (behalve de lengte). Voor sommige apparaten (bijvoorbeeld Bluetooth-headsets) kan de PIN-code vast zijn ingebouwd. De schakelaar dwingt de daemon &man.hcsecd.8; om op de voorgrond te blijven, zodat het gemakkelijk is om te zien wat er gebeurt. Stel het andere apparaat in om paarverzoeken te ontvangen en initialiseer de Bluetooth-verbinding naar het andere apparaat. Het apparaat moet zeggen dat het paarverzoek geaccepteerd is en om de PIN-code vragen. Geef dezelfde PIN-code op als in hcsecd.conf. Nu zijn de PC en het andere apparaat gepaard. Als alternatief kan paren op het andere apparaat worden geïnitialiseerd. De volgende regel kan aan het bestand /etc/rc.conf worden toegevoegd om hcsecd automatisch met het systeem op te starten: hcsecd_enable="YES" Het volgende is een voorbeeld van de uitvoer van de daemon hcsecd: hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't exist hcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4 hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code exists hcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4 Service Discovery Protocol (SDP) SDP Het Service Discovery Protocol (SDP) biedt voor cliënttoepassingen de mogelijkheid om diensten te ontdekken die door servertoepassingen worden aangeboden alsook de kenmerken van deze diensten. De kenmerken van een dienst omvatten de soort of klasse van de aangeboden dienst en de informatie over het mechanisme of protocol dat nodig is om de dienst te gebruiken. SDP omvat communicatie tussen een SDP-server en een SDP-cliënt. De server houdt een lijst van dienstenregistraties bij die de eigenschappen van de diensten beschrijven die met de server geassocieerd zijn. Elke dienstregistratie bevat informatie over een enkele dienst. Een cliënt kan informatie over een dienstregistratie opvragen die door de SDP-server wordt bijgehouden door een SDP-verzoek in te dienen. Indien de cliënt, of een toepassing die met de cliënt geassocieerd is, besluit om de dienst te gebruiken, moet het een aparte verbinding naar de aanbieder van de dienst openen om de dienst te gebruiken. SDP biedt een mechanisme om diensten en hun attributen te ontdekken, maar het biedt geen mechanisme om die diensten te gebruiken. Normaalgesproken zoekt een SDP-cliënt naar diensten naar aanleiding van enkele gewenste eigenschappen van die diensten. Soms is het echter wenselijk om te ontdekken welke soorten diensten door de dienstregistraties van een SDP-server worden beschreven zonder enige voorkennis van deze diensten. Dit kijken naar alle aangeboden diensten wordt browsen genoemd. De Bluetooth SDP-server &man.sdpd.8; en de opdrachtregelcliënt &man.sdpcontrol.8; zitten in de standaard &os;-installatie. Het volgende voorbeeld laat zien hoe een SDP-browse query uit te voeren. &prompt.user; sdpcontrol -a 00:01:03:fc:6e:ec browse Record Handle: 00000000 Service Class ID List: Service Discovery Server (0x1000) Protocol Descriptor List: L2CAP (0x0100) Protocol specific parameter #1: u/int/uuid16 1 Protocol specific parameter #2: u/int/uuid16 1 Record Handle: 0x00000001 Service Class ID List: Browse Group Descriptor (0x1001) Record Handle: 0x00000002 Service Class ID List: LAN Access Using PPP (0x1102) Protocol Descriptor List: L2CAP (0x0100) RFCOMM (0x0003) Protocol specific parameter #1: u/int8/bool 1 Bluetooth Profile Descriptor List: LAN Access Using PPP (0x1102) ver. 1.0 ... enzovoorts. Merk op dat elke dienst een lijst met attributen heeft (bijvoorbeeld een RFCOMM-kanaal). Afhankelijk van de dienst kan het nodig zijn om een aantekening van sommige attributen te maken. Sommige Bluetooth-implementaties ondersteunen dienst-browsen niet en zullen een lege lijst teruggeven. In dit geval is het mogelijk om naar de specifieke dienst te zoeken. Het onderstaande voorbeeld laat zien hoe naar de dienst OBEX Object Push (OPUSH) gezocht kan worden: &prompt.user; sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH Het aanbieden van diensten op &os; aan Bluetooth-cliënten wordt gedaan met de server &man.sdpd.8;. De volgende regel kan aan het bestand /etc/rc.conf worden toegevoegd: sdpd_enable="YES" Het daemon sdpd kan worden gestart met: &prompt.root; service sdpd start De plaatselijke servertoepassing die Bluetooth-diensten wil aanbieden aan verre cliënten zal de dienst registreren bij de plaatselijke SDP-daemon. Een voorbeeld van zo'n toepassing is &man.rfcomm.pppd.8;. Nadat het gestart is zal het de Bluetooth LAN-dienst bij de plaatselijke SDP-daemon registreren. De lijst met diensten die bij de plaatselijke SDP-server zijn geregistreerd kan worden opgevraagd door te SDP-browsen via het plaatselijke controlekanaal: &prompt.root; sdpcontrol -l browse Dial-Up Networking (DUN) en netwerktoegang met PPP (LAN) profielen Het inbelnetwerk (DUN) profiel wordt het meeste gebruikt met modems en mobiele telefoons. De volgende scenario's worden in dit profiel behandeld: het gebruik van een mobiele telefoon of modem door een computer als een draadloze modem voor het verbinden met een inbelserver voor Internet-toegang, of voor andere inbeldiensten; het gebruik van een mobiele telefoon of modem door een computer om gegevensoproepen te ontvangen. Het profiel voor netwerktoegang met PPP (LAN) kan in de volgende situaties gebruikt worden: LAN-toegang voor een enkel Bluetooth-apparaat; LAN-toegang voor meerdere Bluetooth-apparaten; PC naar PC (door PPP-netwerken over een seriële kabel te emuleren). Op &os; zijn beide profielen geïmplementeerd met &man.ppp.8; en &man.rfcomm.pppd.8; - een wrapper die een RFCOMM Bluetooth-verbinding omzet in iets waar PPP mee overweg kan. Voordat een profiel gebruikt kan worden, dient een nieuw PPP-label in het bestand /etc/ppp/ppp.conf te worden aangemaakt. Raadpleeg de hulppagina &man.rfcomm.pppd.8; voor voorbeelden. In het volgende voorbeeld zal &man.rfcomm.pppd.8; gebruikt worden om RFCOMM-verbinding met een ver apparaat met BD_ADDR 00:80:37:29:19:a4 op een DUN RFCOMM-kanaal te maken. Het eigenlijke RFCOMM-kanaalnummer wordt via SDP van het verre apparaat verkregen. Het is mogelijk om het RFCOMM-kanaal handmatig op te geven, en in dat geval zal &man.rfcomm.pppd.8; het SDP-verzoek niet uitvoeren. Gebruik &man.sdpcontrol.8; om het RFCOMM-kanaal op het verre apparaat te achterhalen. &prompt.root; rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup Om netwerktoegang met PPP (LAN) aan te bieden moet de server &man.sdpd.8; draaien. Er dient een nieuwe regel voor LAN-cliënten in het bestand /etc/ppp/ppp.conf aangemaakt te worden. Raadpleeg de hulppagina &man.rfcomm.pppd.8; voor voorbeelden. Tenslotte dient de RFCOMM PPP-server op een geldig RFCOMM-kanaal gestart te worden. De RFCOMM PPP-server zal automatisch de Bluetooth LAN-dienst bij de plaatselijke SDP-daemon registreren. Het volgende voorbeeld laat zien hoe een RFCOMM PPP-server te starten: &prompt.root; rfcomm_pppd -s -C 7 -l rfcomm-server Het OBEX Object Push (OPUSH) profiel OBEX OBEX is een veelgebruikt protocol voor eenvoudige bestandsoverdrachten tussen mobiele apparaten. Het primaire gebruik is infraroodcommunicatie, waar het wordt gebruikt voor generieke bestandsoverdrachten tussen notebooks of PDA's, en om visitekaarten en kalenderregels tussen mobiele telefoons en andere apparaten met PIM-toepassingen over te dragen. De OBEX-server en clieënt zijn geïmplenteerd als een pakket van derde partij, obexapp, dat beschikbaar is als de port comms/obexapp. De OBEX-cliënt wordt gebruikt om objecten naar en/of van de OBEX-server te duwen/trekken. Een object kan bijvoorbeeld een visitekaart of een afspraak zijn. De OBEX-cliënt kan het RFCOMM-kanaalnummer van het verre apparaat via SDP opvragen. Dit kan gedaan worden door de dienstnaam in plaats van het RFCOMM-kanaalnummer op te geven. De ondersteunde dienstnamen zijn: IrMC, FTRN, en OPUSH. Het is mogelijk om het RFCOMM-kanaal als een nummer op te geven. Het onderstaande is een voorbeeld van een OBEX-sessie, waar een apparaatinformatie-object van de mobiele telefoon wordt getrokken, en een nieuw object (een visitekaart) in de gids van de telefoon wordt geduwd: &prompt.user; obexapp -a 00:80:37:29:19:a4 -C IrMC obex> get telecom/devinfo.txt devinfo-t39.txt Success, response: OK, Success (0x20) obex> put new.vcf Success, response: OK, Success (0x20) obex> di Success, response: OK, Success (0x20) Om de dienst OBEX Object Push aan te bieden, moet de server &man.sdpd.8; draaien. Er moet een hoofdmap worden aangemaakt waarin alle binnenkomende objecten worden opgeslagen. Het - standaardpad naar de hoofdmap is - /var/spool/obex. Tenslotte moet de + standaardpad naar de hoofdmap is /var/spool/obex. Tenslotte moet de OBEX-server op een geldig RFCOMM-kanaal worden gestart. De OBEX-server zal automatisch de dienst OBEX Object Push bij de plaatselijke SDP-daemon registeren. Het onderstaande voorbeeld laat zien hoe de OBEX-server gestart wordt: &prompt.root; obexapp -s -C 10 Serial Port Profile (SPP) Het Seriële Poort Profiel (SPP) zorgt ervoor dat Bluetooth-apparaten RS232 (of gelijkwaardige) seriële kabels kunnen emuleren. Het scenario dat dit profiel behandelt zorgt ervoor dat oude toepassingen Bluetooth kunnen gebruiken als vervanging van kabels, door gebruik te maken van een virtuele seriële poort. Het programma &man.rfcomm.sppd.1; implementeert het Seriële Poort profiel. Een pseudo-tty wordt gebruikt als abstractie voor een virtuele seriële poort. Onderstaand voorbeeld laat zien hoe met een Seriële Poortdienst voor verre apparaten te verbinden. Merk op dat het niet nodig is om een RFCOMM-kanaal te kiezen - &man.rfcomm.sppd.1; kan het via SDP van het verre apparaat verkrijgen. Dit kan worden overruled door een RFCOMM-kanaal op de opdrachtregel te specificeren. &prompt.root; rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6 rfcomm_sppd[94692]: Starting on /dev/ttyp6... Als er een verbinding is, kan de pseudo-tty als seriële poort worden gebruikt: &prompt.root; cu -l ttyp6 Problemen oplossen Een apparaat op afstand kan geen verbinding maken Sommige oudere Bluetooth-apparaten ondersteunen het wisselen van rol niet. Standaard probeert &os;, wanneer het een nieuwe verbinding accepteert, een rolwisseling uit te voeren en meester te worden. Apparaten die dit niet ondersteunen zullen niet kunnen verbinden. Merk op dat van rol wordt gewisseld wanneer een nieuwe verbinding wordt gemaakt, dus het is niet mogelijk om het verre apparaat te vragen of het rolwisseling ondersteunt. Er is een HCI-optie om rolwisselen aan de plaatselijke kant uit te zetten: &prompt.root; hccontrol -n ubt0hci write_node_role_switch 0 Er gaat iets mis, kan ik precies zien wat er gebeurt? Ja, dit is mogelijk. Gebruik het pakket hcidump, dat beschikbaar is als de port comms/hcidump. Het gereedschap hcidump is vergelijkbaar met &man.tcpdump.1;. Het kan gebruikt worden om de inhoud van Bluetooth-pakketten op de terminal te laten zien en om de Bluetooth-pakketten naar een bestand te schrijven.
Andrew Thompson Geschreven door Bridging Introductie IP-subnet bridge Soms is het handig om één fysiek netwerk (zoals een Ethernet-segment) in twee gescheiden netwerksegmenten te verdelen zonder de noodzaak om een IP-subnet aan te maken en een router te gebruiken om de segmenten met elkaar te verbinden. Een apparaat dat twee netwerken op deze manier met elkaar verbindt wordt een bridge (brug) genoemd. Een &os;-systeem met twee netwerkkaarten kan als bridge dienen. De bridge werkt door de adressen van de MAC-laag (Ethernetadressen) van de apparaten op elke netwerkinterface te leren. Het stuurt alleen verkeer tussen twee netwerken door indien de bron en het doel zich op verschillende netwerken bevinden. In vele opzichten is een bridge als een Ethernet-switch met erg weinig poorten. Situaties waarin bridging juist is Er zijn vandaag de dag veel situaties waarin een bridge gebruikt wordt. Netwerken verbinden Het basisgebruik van een bridge is het met elkaar verbinden van twee of meer netwerksegmenten. Er zijn vele redenen om een hostgebaseerde bridge te gebruiken in plaats van simpele netwerkapparaten zoals kabelbeperkingen, firewalling of het verbinden van pseudonetwerken zoals een interface van een virtuële machine. Een bridge kan ook een draadloze interface die in hostap-modus draait met een bedraad netwerk verbinden en als een toegangspunt dienen. Filtering/Bandbreedtebeheersende firewall firewall NAT Een gebruikelijke situatie dient zich voor wanneer de functionaliteit van een firewall nodig is zonder routing of network address translation (NAT). Een voorbeeld is een klein bedrijf dat via DSL of ISDN met hun internetprovider verbonden is. Dit bedrijf heeft 13 wereldwijd bereikbare IP-adressen van de internetprovider en 10 PC's op hun netwerk. In deze situatie is een firewall die op een router gebaseerd is lastig wegens subnet-problemen. router DSL ISDN Een firewall die op een bridge gebaseerd is kan ingesteld en net na de DSL- of ISDN-router geplaatst worden zonder dat er problemen met IP-nummers optreden. Netwerktap Een bridge kan twee netwerksegmenten verbinden en kan gebruikt worden om alle Ethernetframes die tussen dezen voorbijkomen te inspecteren. Dit kan òfwel vanuit het gebruik van &man.bpf.4;/&man.tcpdump.1; op de bridge-interface òfwel door een kopie van alle frames naar een extra interface (overspanpoort) te versturen. Laag 2 VPN Twee Ethernetnetwerken kunnen over een IP-verbinding verbonden worden door de netwerken naar een EtherIP-tunnel te bridgen of met een oplossing gebaseerd po &man.tap.4; zoals OpenVPN. Laag 2 Redundancy Een netwerk kan met meerdere verbindingen verbonden worden en het Spanning Tree Protocol gebruiken om overbodige paden te blokkeren. Een Ethernetnetwerk kan alleen juist functioneren indien er slechts één actief pad bestaat tussen twee apparaten, Spanning Tree zal lussen detecteren en de overbodige verbindingen in een geblokkeerde toestand zetten. Indien een van de actieve verbindingen faalt zal het protocol een andere boom berekenen en een van de geblokkeerde paden weer activeren om de verbindingen naar alle punten in het netwerk te herstellen. De kernel instellen Deze sectie behandelt de bridges geïmplementeerd met &man.if.bridge.4;, een stuurprogramma dat bridges met netgraph implementeert is ook beschikbaar, zie voor meer informatie de hulppagina &man.ng.bridge.4;. Het bridge-stuurprogramma is een kernelmodule en zal automatisch door &man.ifconfig.8; worden geladen wanneer er een bridge-interface wordt aangemaakt. Het is mogelijk om de bridge in de kernel te compileren door device if_bridge aan het kernelinstellingenbestand toe te voegen. Pakketfiltering kan met elk firewall-pakket worden gebruikt dat via het raamwerk &man.pfil.9; aankoppelt. De firewall kan als een module worden geladen of in de kernel worden gecompileerd. De bridge kan als met &man.altq.4; of &man.dummynet.4; als een verkeersregelaar worden gebruikt. De bridge inschakelen De bridge wordt aangemaakt door interfaces te klonen. Om een bridge aan te maken wordt &man.ifconfig.8; gebruikt, indien het bridge-stuurprogramma niet in de kernel aanwezig is zal het automatisch worden geladen. &prompt.root; ifconfig bridge create &prompt.root; ifconfig bridge0 bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 96:3d:4b:f1:79:7a id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0 Een bridge-interface is aangemaakt en er is automatisch een random gegenereerd Ethernetadres aan toegekend. De parameters maxaddr en timeout bepalen hoeveel MAC-adressen de bridge in de doorstuurtabel houdt en hoeveel seconden voordat elke regel wordt verwijderd nadat het voor het laatst gezien is. De andere parameters bepalen hoe Spanning Tree werkt. Voeg de netwerkinterfaces die lid zijn aan de bridge toe. Om de bridge pakketten te laten doorsturen dienen alle lidinterfaces en de bridge actief te zijn: &prompt.root; ifconfig bridge0 addm fxp0 addm fxp1 up &prompt.root; ifconfig fxp0 up &prompt.root; ifconfig fxp1 up De bridge stuurt nu Ethernet-frames door tussen fxp0 en fxp1. De overeenkomstige configuratie in /etc/rc.conf zodat de bridge tijdens het opstarten wordt aangemaakt is: cloned_interfaces="bridge0" ifconfig_bridge0="addm fxp0 addm fxp1 up" ifconfig_fxp0="up" ifconfig_fxp1="up" Indien de bridge-gastheer een IP-adres nodig heeft dan is de juiste plaats om dit in te stellen op de bridge-interface zelf in plaats van op een van de lidinterfaces. Dit kan statisch of via DHCP worden ingesteld: &prompt.root; ifconfig bridge0 inet 192.168.0.1/24 Het is ook mogelijk om een IPv6-adres aan een bridge-interface toe te kennen. Firewalls gebruiken firewall Wanneer pakketten worden gefilterd, zullen gebridgede pakketten het filter inbound op de vertrekkende interface passeren, op de bridge-interface en outbound op de bestemde interface. Elke stap kan uitgezet worden. Wanneer de richting van het pakketverkeer belangrijk is, kan de firewall het beste op de lidinterfaces draaien en niet op de bridge zelf. De bridge heeft verschillende aanpasbare instellingen voor het doorlaten van non-IP- en ARP-pakketten, en een laag 2 firewall met IPFW. Zie &man.if.bridge.4; voor meer informatie. Opspannende boom Het bridge-stuurprogramma implementeert het Rapid Spanning Tree Protocol (RSTP of 802.1w) met terugwaartse compatibiliteit met het verouderde Spanning Tree Protocol (STP). Spanning Tree wordt gebruikt om lussen in een netwerktopologie te detecteren en verwijderen. RSTP biedt snellere convergentie naar een opspannende boom dan het verouderde STP, het protocol wisselt informatie met naburige switches uit om snel naar forwarding over te gaan zonder lussen te creëren. &os; ondersteunt RSTP en STP als opties, waarbij RSTP de standaard is. Spanning Tree kan op lidinterfaces worden geactiveerd met het commando stp. Voor een bridge met fxp0 en fxp1 alle huidige interfaces, wordt STP met het volgende geactiveerd: &prompt.root; ifconfig bridge0 stp fxp0 stp fxp1 bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether d6:cf:d5:a0:94:6d id 00:01:02:4b:d4:50 priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:01:02:4b:d4:50 priority 32768 ifcost 0 port 0 member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 3 priority 128 path cost 200000 proto rstp role designated state forwarding member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 4 priority 128 path cost 200000 proto rstp role designated state forwarding De bridge heeft spanning tree ID 00:01:02:4b:d4:50 en prioriteit 32768. Aangezien het root id hetzelfde is geeft dit aan dat dit de hoofdbridge voor de boom is. Een andere bridge in het netwerk heeft spanning tree ook geactiveerd: bridge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 ether 96:3d:4b:f1:79:7a id 00:13:d4:9a:06:7a priority 32768 hellotime 2 fwddelay 15 maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200 root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4 member: fxp0 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 4 priority 128 path cost 200000 proto rstp role root state forwarding member: fxp1 flags=1c7<LEARNING,DISCOVER,STP,AUTOEDGE,PTP,AUTOPTP> port 5 priority 128 path cost 200000 proto rstp role designated state forwarding De reegl root id 00:01:02:4b:d4:50 priority 32768 ifcost 400000 port 4 geeft aan dat de hoofdbridge 00:01:02:4b:d4:50 is zoals boven en dat de padkosten 400000 zijn vanaf deze bridge, het pad naar de hoofdbridge gaat via port 4 welke fxp0 is. Geavanceerd bridgen Verkeersstromen reconstrueren De bridge ondersteunt monitormodus, waarin de pakketten worden verwijderd nadat ze door &man.bpf.4; zijn verwerkt, en ze niet verder verwerkt of doorgestuurd worden. Dit kan worden gebruikt om de invoer van twee of meer interfaces naar een enkele &man.bpf.4;-stroom te multiplexen. Dit is nuttig voor het reconstrueren van het verkeer voor netwerktaps welke de RX/TX-signalen over twee verschillende interfaces uitzenden. Om de invoer van vier netwerkinterfaces als één stroom te lezen: &prompt.root; ifconfig bridge0 addm fxp0 addmfxp1 addm fxp2 addm fxp3 monitor up &prompt.root; tcpdump -i bridge0 SPAN poorten Van elk Ethernet-frame dat door de bridge wordt ontvangen wordt er een kopie naar de aangewezen SPAN-poort verstuurd. Het aantal geconfigureerde SPAN-poorten op een bridge is onbeperkt, indien een interface aangewezen is als SPAN-poort kan het niet ook als gewone bridgepoort gebruikt worden. Dit is het nuttigste voor het passief afluisteren van een gebridged netwerk op een andere host die met een van de SPAN-poorten van de bridge verbonden is. Om een kopie van alle frames naar de interface fxp4 te versturen: &prompt.root; ifconfig bridge0 span fxp4 Privé-interfaces Een privé-interface stuurt geen verkeer door naar poorten die niet ook een privé-interface zijn. Het verkeer wordt onvoorwaardelijk geblokkeerd, dus worden er geen Ethernetframes doorgestuurd, inclusief ARP. Indien verkeer selectief dient te worden geblokkeerd dient er in plaats hiervan een firewall gebruikt te worden. Klevende interfaces Indien een lidinterface van een bridge als klevend is gemarkeerd worden dynamisch geleerde adresregels als statisch behandelt wanneer ze in de doorstuurcache komen. Klevende interfaces vallen nooit uit de cache en worden nooit vervangen, zelfs niet als het adres op een andere interface wordt gezien. Dit biedt het voordeel van statische adresregels zonder dat de doorstuurtabel van te voren gevuld hoeft te worden, cliënten die geleerd zijn op een bepaald segment van de bridge kunnen niet roamen naar een ander segment. Een ander voorbeeld voor het gebruik van klevende adressen zou het combineren van de bridge met VLANs zijn om een router te creëren waar klantnetwerken geïsoleerd zijn zonder dat IP-adresruimte verspild wordt. Neem aan dat KlantA op vlan100 zit en KlantB op vlan101. De bridge heeft het adres 192.168.0.1 en is tevens een internet-router. &prompt.root; ifconfig bridge0 addm vlan100 sticky vlan100 addm vlan101 sticky vlan101 &prompt.root; ifconfig bridge0 inet 192.168.0.1/24 Beide cliënten zien 192.168.0.1 als hun standaard gateway en aangezien de bridge-cache kleverig is kunnen ze niet het MAC-adres van de andere klant spoofen om hun verkeer op te vangen. Alle communicatie tussen de VLANs kan geblokkeerd worden door het gebruik van privé-interfaces (of een firewall): &prompt.root; ifconfig bridge0 private vlan100 private vlan101 De klanten zijn compleet geïsoleerd van elkaar, het volledige /24 adresruimte kan zonder subnetten toegewezen worden. Adresbeperkingen Het aantal unieke bron-MAC-adressen achter een interface kan beperkt zijn. Wanneer de limiet bereikt is worden pakketten met een onbekend bronadres gedropt totdat een bestaande ingang in de host-cache vervalt of wordt verwijderd. Het volgende voorbeeld stelt het maximum aantal Ethernetapparaten voor KlantA op vlan100 in op 10. &prompt.root; ifconfig bridge0 ifmaxaddr vlan100 10 SNMP-monitoring De bridge-interface en STP-parameters kunnen gemonitord worden via het SNMP-daemon dat met het basis &os;-systeem wordt meegeleverd. De geëxporteerde bridge-MIBs houden zich aan de standaarden van de IETF zodat elke SNMP-cliënt of monitorpakket kan worden gebruikt om de gegevens te verzamelen. Op de bridge-machine dient de regel begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so" van /etc/snmp.config geactiveerd te worden en het daemon bsnmpd gestart te worden. Andere instellingen zoals gemeenschapsnamen en toegangslijsten dienen eventueel aangepast te worden. Zie &man.bsnmpd.1; en &man.snmp.bridge.3; voor meer informatie. Het volgende voorbeeld gebruikt de software Net-SNMP (net-mgmt/net-snmp om een bridge te ondervragen, de port net-mgmt/bsnmptools kan ook worden gebruikt. Voeg de volgende regels toe aan $HOME/.snmp/snmp.conf op de SNMP-cliënt-host om de MIB-definities van de bridge in Net-SNMP te importeren: mibdirs +/usr/share/snmp/mibs mibs +BRIDGE-MIB:RSTP-MIB:BEGEMOT-MIB:BEGEMOT-BRIDGE-MIB Om een enkele bridge via de IETF BRIDGE-MIB (RFC4188) te monitoren: &prompt.user; snmpwalk -v 2c -c public bridge1.example.com mib-2.dot1dBridge BRIDGE-MIB::dot1dBaseBridgeAddress.0 = STRING: 66:fb:9b:6e:5c:44 BRIDGE-MIB::dot1dBaseNumPorts.0 = INTEGER: 1 ports BRIDGE-MIB::dot1dStpTimeSinceTopologyChange.0 = Timeticks: (189959) 0:31:39.59 centi-seconds BRIDGE-MIB::dot1dStpTopChanges.0 = Counter32: 2 BRIDGE-MIB::dot1dStpDesignatedRoot.0 = Hex-STRING: 80 00 00 01 02 4B D4 50 ... BRIDGE-MIB::dot1dStpPortState.3 = INTEGER: forwarding(5) BRIDGE-MIB::dot1dStpPortEnable.3 = INTEGER: enabled(1) BRIDGE-MIB::dot1dStpPortPathCost.3 = INTEGER: 200000 BRIDGE-MIB::dot1dStpPortDesignatedRoot.3 = Hex-STRING: 80 00 00 01 02 4B D4 50 BRIDGE-MIB::dot1dStpPortDesignatedCost.3 = INTEGER: 0 BRIDGE-MIB::dot1dStpPortDesignatedBridge.3 = Hex-STRING: 80 00 00 01 02 4B D4 50 BRIDGE-MIB::dot1dStpPortDesignatedPort.3 = Hex-STRING: 03 80 BRIDGE-MIB::dot1dStpPortForwardTransitions.3 = Counter32: 1 RSTP-MIB::dot1dStpVersion.0 = INTEGER: rstp(2) De waarde dot1dStpTopChanges.0 is twee wat betekent dat de topologie van de STP-bridge twee maal veranderd is, een topologieverandering houdt in dat één of meerdere links in het netwerk zijn veranderd of hebben gefaald en dat er een nieuwe boom is berekend. De waarde dot1dStpTimeSinceTopologyChange.0 laat zien wanneer dit gebeurde. Om meerdere bridge-interfaces te monitoren kan men het privé BEGEMOT-BRIDGE-MIB gebruiken: &prompt.user; snmpwalk -v 2c -c public bridge1.example.com enterprises.fokus.begemot.begemotBridge BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge0" = STRING: bridge0 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseName."bridge2" = STRING: bridge2 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge0" = STRING: e:ce:3b:5a:9e:13 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseAddress."bridge2" = STRING: 12:5e:4d:74:d:fc BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge0" = INTEGER: 1 BEGEMOT-BRIDGE-MIB::begemotBridgeBaseNumPorts."bridge2" = INTEGER: 1 ... BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge0" = Timeticks: (116927) 0:19:29.27 centi-seconds BEGEMOT-BRIDGE-MIB::begemotBridgeStpTimeSinceTopologyChange."bridge2" = Timeticks: (82773) 0:13:47.73 centi-seconds BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge0" = Counter32: 1 BEGEMOT-BRIDGE-MIB::begemotBridgeStpTopChanges."bridge2" = Counter32: 1 BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge0" = Hex-STRING: 80 00 00 40 95 30 5E 31 BEGEMOT-BRIDGE-MIB::begemotBridgeStpDesignatedRoot."bridge2" = Hex-STRING: 80 00 00 50 8B B8 C6 A9 Om de bridge-interface die via de subboom mib-2.dot1dBridge wordt gemonitord te veranderen: &prompt.user; snmpset -v 2c -c private bridge1.example.com BEGEMOT-BRIDGE-MIB::begemotBridgeDefaultBridgeIf.0 s bridge2 Andrew Thompson Geschreven door Verbindingsaggregatie en failover lagg failover fec lacp loadbalance roundrobin Introductie De interface &man.lagg.4; maakt het mogelijk om meerdere netwerkinterfaces te aggregeren in één virtueel interface voor het bieden van fout-tolerante en zeer snelle verbindingen. Werkmodi Failover Zendt en ontvangt verkeer alleen door de meesterpoort. Wanneer de meesterpoort niet beschikbaar is, wordt de volgende actieve poort gebruikt. De eerste toegevoegde interface is de meesterpoort; alle interfaces die hierna zijn toegevoegd worden gebruikt als failover-apparaten. Als failover naar een niet-meesterpoort plaatsvindt, dan wordt de originele poort de meester wanneer deze weer beschikbaar wordt. &cisco; Fast ðerchannel; &cisco; Fast ðerchannel; (FEC), is een statische installatie en onderhandelt niet over aggregatie met de peer noch wisselt het frames uit om de verbinding te monitoren. Indien de switch LACP ondersteunt dient dat gebruikt te worden. FEC balanceert uitgaand verkeer over de actieve poorten gebaseerd op gehashde informatie over protocolheaders en accepteert inkomend verkeer van elke actieve poort. De hash bevat het Ethernet bron- en doeladres, en indien beschikbaar, de VLAN-tag, en de IPv4/IPv6 bron- en doeladressen. LACP Het &ieee; 802.3ad Link Aggregation Control Protocol (LACP) en het Marker Protocol. LACP onderhandelt met de peer over een verzameling aggregeerbare verbindingen in één of meerdere Link Aggregated Groups (LAG). Elke LAG is opgebouwd uit poorten die dezelfde snelheid hebben, ingesteld op full-duplex werking. Het verkeer zal over de poorten in de LAG gebalanceerd worden met de hoogste totaalsnelheid, in de meeste gevallen zal er slechts één LAG zijn die alle poorten bevat. Wanneer er fysieke verbindingen veranderen, zal Link Aggregation snel naar een nieuwe opstelling convergeren. LACP balanceert uitgaand verkeer over de actieve poorten gebaseerd op gehashde informatie over protocolheaders en accepteert inkomend verkeer van elke actieve poort. De hash bevat het Ethernet bron- en doeladres, en indien beschikbaar, de VLAN-tag, en de IPv4/IPv6 bron- en doeladressen. Loadbalance Dit is een alias van de FEC modus. Round-Robin Distribueert uitgaand verkeer door middel van een round-robin scheduler over alle actieve poorten en accepteert inkomend verkeer van elke actieve poort. Deze modus schendt Ethernet frame-ordering en dient met zorg gebruikt te worden. Voorbeelden LACP-aggregatie met een &cisco; switch Dit voorbeeld verbindt twee interfaces op een &os;-machine met de switch als een enkele loadgebalanceerde en fout-tolerante verbinding. Er kunnen meer interfaces worden toegevoegd om de doorvoer en fouttolerantie te verhogen. Aangezien frame-ordering verplicht is op Ethernetverbindingen stroomt al het verkeer tussen twee stations altijd over dezelfde fysieke verbinding zodat de maximum snelheid beperkt wordt tot die van één interface. Het verzendalgoritme probeert zoveel mogelijk informatie te gebruiken voor het onderscheiden van verschillende verkeersstromen en deze over de beschikbare interfaces te balanceren. Voeg op de &cisco; switch de interfaces FastEthernet0/1 en FastEthernet0/2 aan de kanaalgroep 1 toe: interface FastEthernet0/1 channel-group 1 mode active channel-protocol lacp ! interface FastEthernet0/2 channel-group 1 mode active channel-protocol lacp Maak de &man.lagg.4;-interface aan met fxp0 en fxp1 en activeer de interface met IP-adres 10.0.0.3/24: &prompt.root; ifconfig fxp0 up &prompt.root; ifconfig fxp1 up &prompt.root; ifconfig lagg0 create &prompt.root; ifconfig lagg0 up laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24 Bekijk de interfacestatus van ifconfig: &prompt.root; ifconfig lagg0 Poorten die als ACTIVE zijn gemarkeerd zijn lid van de actieve aggregatiegroep waarover onderhandeld is met de verre switch en waarover verkeer zal worden verzonden en ontvangen. Gebruik de uitgebreide uitvoer van &man.ifconfig.8; om de LAG-identifiers te bekijken. lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:05:5d:71:8d:b8 media: Ethernet autoselect status: active laggproto lacp laggport: fxp1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> laggport: fxp0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> Gebruik, om de toestand van de poorten op de switch te bekijken, show lacp neighbor. switch# show lacp neighbor Flags: S - Device is requesting Slow LACPDUs F - Device is requesting Fast LACPDUs A - Device is in Active mode P - Device is in Passive mode Channel group 1 neighbors Partner's information: LACP port Oper Port Port Port Flags Priority Dev ID Age Key Number State Fa0/1 SA 32768 0005.5d71.8db8 29s 0x146 0x3 0x3D Fa0/2 SA 32768 0005.5d71.8db8 29s 0x146 0x4 0x3D Gebruik voor meer detail het commando show lacp neighbor detail. Voeg de volgende regels aan /etc/rc.conf toe om deze informatie na het opnieuw starten te behouden: ifconfig_fxp0="up" ifconfig_fxp1="up" cloned_interfaces="lagg0" ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp1 10.0.0.3/24" Failover-modus Failover-modus kan worden gebruikt om op een secondaire interface over te schakelen wanneer de verbinding op de meesterinterface verloren is. Activeer de onderliggende fysieke interface. Creëer de interface lagg0, met fxp0 als de meesterinterface en fxp1 als de secondaire interface en ken er IP-adres 10.0.0.15/24 aan toe: &prompt.root; ifconfig fxp0 up &prompt.root; ifconfig fxp1 up &prompt.root; ifconfig lagg0 create &prompt.root; ifconfig lagg0 up laggproto failover laggport fxp0 laggport fxp1 10.0.0.15/24 De interface zal er ongeveer als volgt uitzien, de grote verschillen zullen het MAC-adres en de apparaatnamen zijn: &prompt.root; ifconfig lagg0 lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:05:5d:71:8d:b8 inet 10.0.0.15 netmask 0xffffff00 broadcast 10.0.0.255 media: Ethernet autoselect status: active laggproto failover laggport: fxp1 flags=0<> laggport: fxp0 flags=5<MASTER,ACTIVE> Het verkeer zal worden verzonden en ontvangen op fxp0. Indien de verbinding op fxp0 verloren is, zal fxp1 de actieve verbinding worden. Indien de verbinding op de meesterinterface hersteld is, zal het weer de actieve verbinding worden. Voeg de volgende regels aan /etc/rc.conf toe om deze informatie na het opnieuw starten te behouden: ifconfig_fxp0="up" ifconfig_fxp1="up" cloned_interfaces="lagg0" ifconfig_lagg0="laggproto lacp laggport fxp0 laggport fxp1 10.0.0.15/24" Failover-modus tussen bekabelde en draadloze interfaces Voor laptop-gebruikers is het normaliter wenselijk om het draadloze interface als secundair interface te gebruiken indien het bekabelde interface niet beschikbaar is. Met &man.lagg.4; is het mogelijk om één IP-adres te gebruiken en het bekabelde interface voor zowel prestatie als veiligheid te prefereren terwijl de mogelijkheid behouden blijft om de draadloze verbinding te gebruiken. In deze opstelling dient het MAC-adres van het onderliggende draadloze interface overschreven te worden om met dat van &man.lagg.4; overeen te komen, welke afkomstig is van het primaire interface dat wordt gebruikt, het bekabelde interface. In deze opstelling wordt het bekabelde interface, bge0 als meester gebruikt, en het draadloze interface, wlan0, als het failover-interface. wlan0 was aangemaakt vanuit iwn0 voor welke het MAC-adres van de bekabelde verbinding zal worden gebruikt. De eerste stap is om het MAC-adres van het bekabelde interface te verkrijgen: &prompt.root; ifconfig bge0 bge0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4> ether 00:21:70:da:ae:37 inet6 fe80::221:70ff:feda:ae37%bge0 prefixlen 64 scopeid 0x2 nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> media: Ethernet autoselect (1000baseT <full-duplex>) status: active bge0 kan vervangen worden door het eigenlijke interface, er zal een andere regel met ether verschijnen, dit is het MAC-adres van het bekabelde interface. Om het onderliggende draadloze interface, iwn0 te wijzigen: &prompt.root; ifconfig iwn0 ether 00:21:70:da:ae:37 Activeer het draadloze interface maar geef er nog geen IP-adres aan: &prompt.root; ifconfig wlan0 create wlandev iwn0 ssid mijn_router up Activeer de interface bge0. Maak het &man.lagg.4;-interface aan met bge0 als meester, en met failover naar wlan0 indien nodig: &prompt.root; ifconfig bge0 up &prompt.root; ifconfig lagg0 create &prompt.root; ifconfig lagg0 up laggproto failover laggport bge0 laggport wlan0 Het interface zal er ongeveer als volgt uitzien, de grootste verschillen zullen het MAC-adres en de apparaatnamen zijn: &prompt.root; ifconfig lagg0 lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:21:70:da:ae:37 media: Ethernet autoselect status: active laggproto failover laggport: wlan0 flags=0<> laggport: bge0 flags=5<MASTER,ACTIVE> Start vervolgens de DHCP-cliënt om een IP-adres te verkrijgen: &prompt.root; dhclient lagg0 Om deze configuratie bij het opstarten te behouden, kan het volgende aan /etc/rc.conf worden toegevoegd: ifconfig_bge0="up" ifconfig_iwn0="ether 00:21:70:da:ae:37" wlans_iwn0="wlan0" ifconfig_wlan0="WPA" cloned_interfaces="lagg0" ifconfig_lagg0="laggproto failover laggport bge0 laggport wlan0 DHCP" Jean-François Dockès Bijgewerkt door Alex Dupre Gereorganiseerd en uitgebreid door Schijfloos werken schijfloos werkstation schijfloos werken Een &os;-machine kan over het netwerk opstarten en zonder een plaatselijke schijf werken, door gebruik te maken van bestandssystemen die van een NFS-server aangekoppeld worden. Er zijn geen systeemwijzigingen nodig anders dan de standaard instellingenbestanden. Dit soort systemen is relatief eenvoudig op te zetten omdat alle noodzakelijke elementen al aanwezig zijn: Er zijn minstens twee manieren om de kernel over het netwerk te laden: PXE: De &intel; Preboot eXecution Environment is een vorm een smart boot ROM dat in sommige netwerkkaarten en moederborden is ingebouwd. Bekijk de hulppagina &man.pxeboot.8; voor meer informatie. De poort Etherboot (net/etherboot) maakt code aan dat naar een ROM geschreven kan worden en dat kernels over het netwerk opstart. De code kan òfwel naar een opstart-PROM op een netwerkkaart geflashed worden, òfwel van een floppy (of harde) schijf geladen worden, òfwel van een draaiend &ms-dos; systeem geladen worden. Vele netwerkkaarten worden ondersteund. Een voorbeeldscript (/usr/share/examples/diskless/clone_root) vergemakkelijkt het aanmaken en beheren van het root bestandssysteem van het werkstation op de server. Het kan nodig zijn dat het script wat aangepast moet worden, maar het zorgt voor een snelle start. - Er bestaan standaardbestanden voor het opstarten van het - systeem in /etc om een systeemstart + Er bestaan standaardbestanden voor het opstarten van het systeem + in /etc om een systeemstart zonder schijf te detecteren en te ondersteunen. Het gebruik van een wisselbestand, indien nodig, kan worden gedaan naar òfwel een NFS bestand òfwel naar een plaatselijke schijf. Er zijn vele manieren om een schijfloos werkstation op te zetten. Hierbij zijn veel elementen betrokken, en vele kunnen aan de eigen smaak worden aangepast. Het volgende beschrijft variaties met betrekking tot het installeren van een compleet systeem, waarbij de nadruk ligt op de eenvoud en de compatibiliteit met de standaard opstartscripts van &os;. Het beschreven systeem heeft de volgende eigenschappen: - De schijfloze werkstations gebruiken een gedeeld - bestandssysteem voor /, dat alleen - gelezen kan worden, en een gedeeld bestandssysteem voor - /usr, dat eveneens alleen gelezen kan + De schijfloze werkstations gebruiken een gedeeld bestandssysteem + voor /, dat alleen + gelezen kan worden, en een gedeeld bestandssysteem voor /usr, dat eveneens alleen gelezen kan worden. Het root-bestandssysteem is een kopie van een standaard root-bestandssysteem voor &os; (typisch van een server), waarbij enkele instellingenbestanden zijn overschreven door versies die specifiek zijn voor een schijfloos systeem of, mogelijk, door het werkstation horen waar ze bij horen. De delen van het root-bestandssysteem die beschrijfbaar moeten zijn, zijn overdekt met &man.md.4; bestandssystemen. Alle veranderingen gaan verloren indien het systeem opnieuw wordt opgestart. De kernel is overgedragen en òfwel met Etherboot òfwel met PXE geladen, aangezien sommige situaties het gebruik van één van de methodes kan eisen. Het systeem zoals hierboven beschreven is onveilig. Het dient in een beschermd gebied van een netwerk te functioneren, en niet vertrouwd te worden door andere hosts. Alle informatie in deze sectie is getest met &os; 5.2.1-RELEASE. Achtergrondinformatie Het installeren van schijfloze werkstations is zowel vrij rechttoe-rechtaan als foutgevoelig. Deze fouten zijn soms moeilijk vast te stellen wegens een aantal redenen. Bijvoorbeeld: Opties die tijdens het compileren zijn opgegeven kunnen verschillend gedrag tonen tijdens het draaien. Foutmeldingen zijn vaak cryptisch of geheel afwezig. Op dit gebied is het bezit van wat achtergrondkennis over de gebruikte mechanismen zeer nuttig om mogelijke problemen op te lossen. Voor een succesvol opstarten dienen verschillende handelingen uitgevoerd te worden: De machine moet een aantal initiële parameters zoals het IP-adres, de bestandsnaam van de executable, de naam van de server, en het root-pad verkrijgen. Dit wordt gedaan door gebruik te maken van de DHCP of BOOTP protocollen. DHCP is een compatible uitbreiding van BOOTP, het gebruikt dezelfde poorten en het pakketformaat heeft dezelfde basis. Het is mogelijk om een systeem in te stellen zodat het alleen BOOTP gebruikt. Het serverprogramma &man.bootpd.8; wordt met het basissysteem van &os; meegeleverd. DHCP biedt echter een aantal voordelen boven BOOTP (fijnere instellingenbestanden, mogelijkheid om PXE te gebruiken, en vele anderen die niet direct verband houden met schijfloos werken), er zal hoofdzakelijk een opstelling met DHCP worden beschreven, met analoge voorbeelden voor &man.bootpd.8; indien mogelijk. De voorbeeldopstelling zal het softwarepakket van ISC DHCP gebruiken (versie 3.0.1.r12 was geïnstalleerd op de testserver). De machine moet één of meerdere programma's naar het plaatselijke geheugen versturen. Eén van TFTP of NFS wordt gebruikt. De keuze tussen TFTP en NFS is op verschillende plaatsen een optie tijdens het compileren. Een veelgemaakte fout is het opgeven van bestandsnamen voor het verkeerde protocol: TFTP verstuurd typisch alle bestanden vanuit één map op de server, en verwacht dat alle bestandsnamen relatief aan deze map zijn; NFS verwacht absolute bestandspaden. De mogelijke tussentijdse opstartprogramma's en de kernel dienen geïnitialiseerd en uitgevoerd te worden. Er zijn enkele belangrijke variaties op dit gebied: PXE zal &man.pxeboot.8; laden, wat een aangepaste versie is van de lader voor stage drie van &os;. &man.loader.8; zal de meeste parameters verkrijgen die noodzakelijk zijn om het systeem op te starten, en zal ze in de kernelomgeving laten staan voordat het de controle overdraagt. Het is in dit geval mogelijk om een GENERIC kernel te gebruiken. Etherboot zal met minder voorbereiding direct de kernel laden. Hiervoor is het noodzakelijk om een kernel met specifieke opties te bouwen. PXE en Etherboot werken beide even goed; echter, omdat kernels normaalgesproken meer werk overlaten aan &man.loader.8;, is PXE de te verkiezen methode. Indien het BIOS en de netwerkkaarten PXE ondersteunen, dient dat waarschijnlijk gebruikt te worden. Tenslotte: de machine heeft toegang tot de bestandssystemen nodig. NFS wordt in alle gevallen gebruikt. Zie ook de hulppagina &man.diskless.8;. Installatie-instructies Instellen met behulp van <application>ISC DHCP</application> DHCP schijfloos werken De ISC DHCP server kan zowel verzoeken voor BOOTP als DHCP beantwoorden. ISC DHCP 4.2 maakt geen deel uit van het basissysteem. Eerst dient de poort net/isc-dhcp42-server of het corresponderende pakket geïnstalleerd te worden. Wanneer ISC DHCP is geïnstalleerd, heeft het een instellingenbestand nodig om te draaien (normaliter /usr/local/etc/dhcpd.conf genoemd). Hieronder volgt een voorbeeld met commentaar, waarbij host margaux gebruik maakt van Etherboot en corbieres gebruik maakt van PXE: default-lease-time 600; max-lease-time 7200; authoritative; option domain-name "example.com"; option domain-name-servers 192.168.4.1; option routers 192.168.4.1; subnet 192.168.4.0 netmask 255.255.255.0 { use-host-decl-names on; option subnet-mask 255.255.255.0; option broadcast-address 192.168.4.255; host margaux { hardware ethernet 01:23:45:67:89:ab; fixed-address margaux.example.com; next-server 192.168.4.4; filename "/data/misc/kernel.diskless"; option root-path "192.168.4.4:/data/misc/diskless"; } host corbieres { hardware ethernet 00:02:b3:27:62:df; fixed-address corbieres.example.com; next-server 192.168.4.4; filename "pxeboot"; option root-path "192.168.4.4:/data/misc/diskless"; } } Deze optie vertelt dhcpd om de waarde die in de verklaringen voor host staan te versturen als de hostnaam voor de schijfloze host. Een andere mogelijkheid is om option host-name margaux binnen de verklaringen voor host op te nemen. De aanwijzing next-server bepaalt de TFTP of NFS server die gebruikt moet worden voor het laden van het lader- of kernelbestand (standaard wordt dezelfde host als voor de DHCP-server gebruikt). De aanwijzing filename bepaalt het bestand dat Etherboot of PXE gebruikt voor de volgende uitvoerstap. Het dient gespecificeerd te worden volgens de gebruikte verzendmethode. Voor Etherboot kan tijdens het compileren worden opgegeven of het NFS of TFTP moet gebruiken. De &os;-poort stelt standaard NFS in. PXE gebruikt TFTP, vandaar dat hier een relatieve bestandsnaam wordt gebruikt (dit kan afhangen van de instellingen van de TFTP-server, maar het is de gewoonte). Verder geldt dat PXE pxeboot en niet de kernel laadt. Er zijn andere interessante mogelijkheden, zoals het laden van pxeboot vanuit de map /boot van een &os; CD-ROM (aangezien &man.pxeboot.8; de GENERIC kernel kan laden, bestaat de mogelijkheid om PXE te gebruiken om van een CDROM op afstand op te starten. De optie root-path definieert het pad naar het root-bestandssysteem, in de gebruikelijke notatie van NFS. Indien PXE gebruikt wordt, is het mogelijk om het IP-adres van de host weg te laten zolang de kerneloptie BOOTP niet geactiveerd is. De NFS-server is dan dezelfde als die van TFTP. Configuratie door gebruik van BOOTP BOOTP schijfloos werken Hieronder staan de equivalente instellingen voor bootpd (gereduceerd tot één cliënt). Dit staat in /etc/bootptab. Merk op dat Etherboot gecompileerd dient te worden met de afwijkende optie NO_DHCP_SUPPORT om BOOTP te gebruiken, en dat PXE DHCP nodig heeft. Het enige duidelijke voordeel van bootpd is dat het in het basissysteem zit. .def100:\ :hn:ht=1:sa=192.168.4.4:vm=rfc1048:\ :sm=255.255.255.0:\ :ds=192.168.4.1:\ :gw=192.168.4.1:\ :hd="/tftpboot":\ :bf="/kernel.diskless":\ :rp="192.168.4.4:/data/misc/diskless": margaux:ha=0123456789ab:tc=.def100 Een opstartprogramma voorbereiden met <application>Etherboot</application> Etherboot De website van Etherboot bevat uitgebreide documentatie die over het algemeen is bedoeld voor Linux-systemen, maar die desalniettemin bruikbare informatie bevat. Het volgende geeft een samenvatting over hoe Etherboot op een &os;-systeem te gebruiken. Ten eerste dient het pakket of de poort net/etherboot geïnstalleerd te worden. De instellingen van Etherboot (i.e., om TFTP in plaats van NFS te gebruiken) kunnen gewijzigd worden door het bestand Config in de bronmap van Etherboot te bewerken. Hieronder zal een opstartdiskette gebruikt worden. Raadpleeg voor andere methoden (PROM, of een &ms-dos;-programma) de documentatie van Etherboot. Om een opstartdiskette te maken, dient er een diskette in het diskettestation van de machine aanwezig te zijn waarop - Etherboot is geïnstalleerd, - daarna dient er naar de map src in de + Etherboot is geïnstalleerd, daarna dient + er naar de map src in de mapboom van Etherboot gegaan te worden, en het volgende ingetypt te worden: &prompt.root; gmake bin32/apparaatsoort.fd0 apparaatsoort hangt af van het soort Ethernetkaart dat in het schijfloze werkstation aanwezig is. Raadpleeg het bestand NIC in dezelfde map om het juiste apparaatsoort te bepalen. Opstarten met <acronym>PXE</acronym> Standaard laadt de lader &man.pxeboot.8; de kernel via NFS. Het kan zodanig gecompileerd worden dat het TFTP gebruikt door de optie LOADER_TFTP_SUPPORT in /etc/make.conf te specificeren. Raadpleeg het commentaar in /usr/share/examples/etc/make.conf voor instructies. Er zijn nog twee andere opties voor make.conf die nuttig kunnen zijn bij het opzetten van een schijfloze machine die als seriële console gebruikt wordt: BOOT_PXELDR_PROBE_KEYBOARD, en BOOT_PXELDR_ALWAYS_SERIAL. Om PXE bij het opstarten van de machine te gebruiken, is het gewoonlijk nodig om de optie Boot from network in het BIOS te selecteren, of om een functietoets tijdens de initialisatie van de PC in te typen. De <acronym>TFTP</acronym> en <acronym>NFS</acronym> servers instellen TFTP schijfloos werken NFS schijfloos werken Indien PXE of Etherboot gebruikt wordt, welke is ingesteld om TFTP te gebruiken, is het nodig om tftpd op de bestandsserver aan te zetten: - Maak een map aan van waaruit - tftpd de bestanden serveert, - bijvoorbeeld /tftpboot. + Maak een map aan van waaruit tftpd + de bestanden serveert, bijvoorbeeld /tftpboot. Voeg deze regel toe aan /etc/inetd.conf: tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /tftpboot Het schijnt dat sommige versies van PXE de TCP-versie van TFTP vereisen. In dit geval dient een tweede regel toegevoegd te worden, waarbij dgram udp door stream tcp vervangen wordt. inetd dient de instellingenbestanden opnieuw te lezen. De regel dient in het bestand /etc/rc.conf aanwezig te zijn voor de juiste werking van deze opdracht: &prompt.root; service inetd restart - De map tftpboot kan overal op de - server geplaatst worden. De plaats dient zowel in + De map tftpboot kan overal + op de server geplaatst worden. De plaats dient zowel in inetd.conf als in dhcpd.conf ingesteld te worden. In alle gevallen dient er ook voor gezorgd te worden dat NFS aanstaat en dat het juiste bestandssysteem op de NFS-server geëxporteerd wordt. Voeg het volgende toe aan /etc/rc.conf: nfs_server_enable="YES" Exporteer het bestandssysteem waar de schijfloze root-map zich bevindt door het volgende aan /etc/exports toe te voegen (pas het aankoppelpunt van het volume aan en vervang margaux corbieres door de namen van de schijfloze werkstations): /data/misc -alldirs -ro margaux corbieres mountd dient het instellingenbestand opnieuw te lezen. Indien het nodig was om NFS in /etc/rc.conf tijdens de eerste stap aan te zetten, is het waarschijnlijk gewenst om in plaats hiervan opnieuw op te starten. &prompt.root; service mountd restart Een schijfloze kernel bouwen schijfloos werken kernelinstellingen Indien Etherboot gebruikt wordt, is het nodig om een kernelinstellingenbestand voor de schijfloze cliënt met de volgende opties (naast de gebruikelijke) aan te maken: options BOOTP # Gebruik BOOTP om het IP-adres en de hostnaam te verkrijgen options BOOTP_NFSROOT # NFS-mount het root-bestandssysteem door gebruik te maken van de informatie van BOOTP Het kan ook gewenst zijn om BOOTP_NFSV3, BOOT_COMPAT, en BOOTP_WIRED_TO te gebruiken (raadpleeg hiervoor NOTES). De namen van deze opties zijn historisch en enigszins misleidend aangezien ze eigenlijk onverschillig gebruik van DHCP en BOOTP in de kernel mogelijk maken (het is ook mogelijk om strikt gebruik van BOOTP of DHCP te forceren). De kernel dient gebouwd te worden (zie ) en gekopieerd te worden naar de plaats die in dhcpd.conf is aangegeven. Indien PXE gebruikt wordt, is het bouwen van een kernel met bovenstaande opties niet strikt noodzakelijk (maar wel aangeraden). Door deze opties aan te zetten zullen er meer verzoeken voor DHCP tijdens het opstarten van de kernel verstuurd worden, met in sommige speciale gevallen een klein risico op inconsistentie tussen de nieuwe waarden en degenen die door &man.pxeboot.8; zijn ontvangen. Het voordeel van het gebruik van deze opties is dat de hostnaam als een bijverschijnsel wordt ingesteld. In de andere gevallen dient de hostnaam op een andere manier ingesteld te worden, bijvoorbeeld in een cliënt-specifiek bestand rc.conf. Om laadbaar te zijn met Etherboot, dienen de apparaataanwijzingen in de kernel gecompileerd te worden. Normaalgesproken wordt hiervoor de volgende optie in het instellingenbestand gebruikt (zie het instellingencommentaarbestand NOTES): hints "GENERIC.hints" Het root-bestandssysteem voorbereiden root-bestandssysteem schijfloos werken Er dient een root-bestandssysteem voor de schijfloze werkstations op de plaats die als root-path in dhcpd.conf staat aangegeven aangemaakt te worden. <command>make world</command> gebruiken om het root-bestandssysteem te bevolken Deze methode is snel en installeert een compleet maagdelijk systeem (niet alleen het root-bestandssysteem) in DESTDIR. Hiervoor dient slechts het volgende script uitgevoerd te worden: #!/bin/sh export DESTDIR=/data/misc/diskless mkdir -p ${DESTDIR} cd /usr/src; make buildworld && make buildkernel make installworld && make installkernel cd /usr/src/etc; make distribution Nadat dit gedaan is, kunnen /etc/rc.conf en /etc/fstab die in DESTDIR geplaatst zijn naar behoefte worden aangepast. Swapruimte instellen Indien nodig kan een wisselbestand dat zich op de server bevindt via NFS worden benaderd. Swapruimte via <acronym>NFS</acronym> De kernel biedt geen ondersteuning om swapruimte via NFS tijdens het opstarten aan te zetten. De swapruimte moet door de opstartscripts worden aangezet, door een beschrijfbaar bestandssysteem aan te koppelen en een wisselbestand aan te maken en aan te zetten. De volgende opdracht maakt een wisselbestand van de juiste grootte aan: &prompt.root; dd if=/dev/zero of=/pad/naar/wisselbestand bs=1k count=1 oseek=100000 Om het aan te zetten dient de volgende regel aan /etc/rc.conf te worden toegevoegd: swapfile=/pad/naar/wisselbestand Diverse problemen Draaien met een alleen-lezen - <filename>/usr</filename> + /usr schijfloos werken /usr alleen-lezen Indien het schijfloze werkstation is ingesteld om X te draaien, is het nodig om het instellingenbestand van XDM te wijzigen, dat standaard - het foutenlogboek in /usr + het foutenlogboek in /usr plaatst. Gebruik maken van een niet-&os;-server Indien de server voor het root-bestandssysteem geen &os; draait, is het nodig om het root-bestandssysteem op een &os;-machine aan te maken, en het daarna naar de bestemming te kopiëren, door gebruik te maken van tar of cpio. In deze situatie zijn er af en toe problemen met de - speciale bestanden in /dev, vanwege - verschillen in de groottes van grote/kleine integers. Een + speciale bestanden in /dev, + vanwege verschillen in de groottes van grote/kleine integers. Een oplossing voor dit probleem is om een map van de niet-&os;-server te exporteren, deze map op een &os;-machine aan te koppelen, en &man.devfs.5; te gebruiken om de apparaatknooppunten transparant voor de gebruiker toe te wijzen. Craig Rodrigues
rodrigc@FreeBSD.org
Geschreven door
Met PXE en een NFS-root-bestandssysteem opstarten Het Preboot eXecution Environment (PXE) van &intel; maakt het mogelijk om het besturingssysteem over het netwerk op te starten. Ondersteuning voor PXE wordt normaliter aangeboden in het BIOS van moderne moederborden, waar het kan worden aangezet in de instellingen van het BIOS wat opstarten over het netwerk mogelijk maakt. Een volledig werkende PXE-opstelling vereist ook correct geconfigureerde DHCP- en TFTP-servers. Wanneer de gastheercomputer opstart, krijgt het informatie over DHCP over waar de intiële bootloader staat via TFTP. Nadat de gastheercomputer deze informatie heeft ontvangen, downloadt het de bootloader via TFTP en voert het vervolgens de bootloader uit. Dit is gedocumenteerd in sectie 2.2.1 van de Preboot Execution Environment (PXE) Specification. In &os; is de bootloader die tijdens het PXE-proces wordt opgehaald /boot/pxeboot. Terwijl /boot/pxeboot wordt uitgevoerd, wordt de kernel van &os; geladen en wordt er verder gegaan met de rest van de opstartprocedure van &os;. Kijk voor meer informatie over het opstartproces van &os; in . De <command>chroot</command>-omgeving voor het NFS-root-bestandssysteem instellen Kies een map uit voor een installatie van &os; die over NFS - aangekoppeld kan worden. Bijvoorbeeld een map als - /b/tftpboot/FreeBSD/install. + aangekoppeld kan worden. Bijvoorbeeld een map als /b/tftpboot/FreeBSD/install. &prompt.root; export NFSROOTDIR=/b/tftpboot/FreeBSD/install &prompt.root; mkdir -p ${NFSROOTDIR} Stel de NFS-server in door de instructies in op te volgen. Exporteer de map via NFS door het volgende aan /etc/exports toe te voegen: /b -ro -alldirs Herstart de NFS-server: &prompt.root; service nfsd restart Stel &man.inetd.8; in door de stappen zoals in beschreven op te volgen. Voeg de volgende regel toe aan /etc/inetd.conf: tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /b/tftpboot Herstart inetd: &prompt.root; service inetd restart Herbouw de kernel en userland van &os;: &prompt.root; cd /usr/src &prompt.root; make buildworld &prompt.root; make buildkernel Installeer &os; in de map die over NFS is aangekoppeld: &prompt.root; make installworld DESTDIR=${NFSROOTDIR} &prompt.root; make installkernel DESTDIR=${NFSROOTDIR} &prompt.root; make distribution DESTDIR=${NFSROOTDIR} Test dat de TFTP-server werkt en dat het de bootloader dat via PXE verkregen zal worden kan downloaden: &prompt.root; tftp localhost tftp> get FreeBSD/install/boot/pxeboot Received 264951 bytes in 0.1 seconds Voeg een regel aan ${NFSROOTDIR}/etc/fstab toe om het root-bestandssysteem over NFS aan te koppelen: # Device Mountpoint FSType Options Dump Pass mijnhost.example.com:/b/tftpboot/FreeBSD/install / nfs ro 0 0 Vervang mijnhost.example.com door de hostnaam of het IP-adres van uw NFS-server. In dit voorbeeld wordt het root-bestandssysteem als alleen-lezen aangekoppeld om te voorkomen dat NFS-cliënten per ongeluk de inhoud van het root-bestandssysteem wissen. Stel het root-wachtwoord in voor de &man.chroot.8;-omgeving. &prompt.root; chroot ${NFSROOTDIR} &prompt.root; passwd Dit stelt het root-wachtwoord in voor cliëntmachines die over PXE opstarten. Maak root-logins over SSH mogelijk voor cliëntmachines die met PXE opstarten door ${NFSROOTDIR}/etc/ssh/sshd_config te bewerken en de optie PermitRootLogin aan te zetten. Dit is gedocumenteerd in &man.sshd.config.5;. Pas andere wijzigingen toe aan de &man.chroot.8;-omgeving in ${NFSROOTDIR}. Deze wijzigingen zouden het toevoegen van pakketten met &man.pkg.add.1;, het bewerken van het wachtwoordbestand met &man.vipw.8; of het bewerken van &man.amd.conf.5;-projecties voor automatisch aankoppelen kunnen zijn. Bijvoorbeeld: &prompt.root; chroot ${NFSROOTDIR} &prompt.root; pkg_add -r bash Geheugenbestandssystemen die gebruikt worden door <filename>/etc/rc.initdiskless</filename> configureren Als u vanaf een NFS-rootvolume opstart, detecteert /etc/rc dat u over NFS opstartte en draait het het script /etc/rc.initdiskless. Lees het commentaar in dit script om te begrijpen wat er gebeurt. Het is nodig om - /etc en /var geheugen-backed + /etc en /var geheugen-backed te maken omdat deze mappen schrijfbaar moeten zijn, maar de NFS-rootmap is alleen-lezen. &prompt.root; chroot ${NFSROOTDIR} &prompt.root; mkdir -p conf/base &prompt.root; tar -c -v -f conf/base/etc.cpio.gz --format cpio --gzip etc &prompt.root; tar -c -v -f conf/base/var.cpio.gz --format cpio --gzip var Wanneer het systeem opstart, zullen er geheugen-bestandssystemen - voor /etc en /var worden - aangemaakt en aangekoppeld, en zal de inhoud van de - cpio.gz-bestanden er naartoe worden - gekopieerd. + voor /etc en /var worden aangemaakt en aangekoppeld, + en zal de inhoud van de cpio.gz-bestanden er + naartoe worden gekopieerd. Een DHCP-server prepareren PXE heeft een geprepareerde TFTP-server en DHCP-server nodig. De DHCP-server hoeft niet per së dezelfde machine te zijn als de TFTP-server, maar het dient bereikbaar te zijn in uw netwerk. Installeer de DHCP-server door de instructies op te volgen zoals beschreven in . Zorg ervoor dat /etc/rc.conf en /usr/local/etc/dhcpd.conf correct zijn geconfigureerd. Stel in /usr/local/etc/dhcpd.conf next-server, filename en option root-path in om het IP-adres van uw TFTP-server, het pad naar /boot/pxeboot en het pad naar het NFS-root-bestandssysteem op te geven. Hier is een voorbeeld van de instellingen voor dhcpd.conf: subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.2 192.168.0.3 ; option subnet-mask 255.255.255.0 ; option routers 192.168.0.1 ; option broadcast-address 192.168.0.255 ; option domain-name-server 192.168.35.35, 192.168.35.36 ; option domain-name "example.com"; # IP-adres van TFTP server next-server 192.168.0.1 ; # pad van bootloader verkregen via TFTP filename "FreeBSD/install/boot/pxeboot" ; # pxeboot bootloader zal proberen om deze map te NFS-mounten voor root-FS option root-path "192.168.0.1:/b/tftpboot/FreeBSD/install/" ; } De PXE-cliënt configureren en verbindingsproblemen opsporen Ga naar het BIOS-configuratiemenu wanneer de cliëntmachine opstart. Stel het BIOS zo in dat het van het netwerk opstart. Indien alle vorige configuratiestappen correct zijn, zou alles "gewoon" moeten werken. Gebruik de poort net/wireshark om netwerkverkeer met betrekking tot het PXE-opstartproces te debuggen, wat geïllustreerd is in onderstaand diagram. In is een voorbeeldconfiguratie gegeven waarbij de DHCP-, TFTP- en NFS-servers op dezelfde machine staan. Deze servers kunnen echter op verschillende machines staan.
PXE-opstartproces met NFS-root-mount Cliënt zendt DHCPDISCOVER uit. DHCP-server antwoordt met IP-adres, next-server, filename en root-path. Cliënt verstuurt TFTP-verzoek naar next-server om filename op te vragen. TFTP-server antwoordt en verstuurt filename naar cliënt. Cliënt voert filename uit welke &man.pxeboot.8; is. &man.pxeboot.8; laadt de kernel. Wanneer de kernel draait, wordt het root-bestandssysteem gespecificeerd door root-path over NFS aangekoppeld.
Controleer dat het bestand pxeboot via TFTP kan worden verkregen. Kijk op uw TFTP-server in /var/log/xferlog om er zeker van de zijn dat het bestand pxeboot van de juiste locatie is opgehaald. Om de configuratie met bovenstaande dhcpd.conf te testen: &prompt.root; tftp 192.168.0.1 tftp> get FreeBSD/install/boot/pxeboot Received 264951 bytes in 0.1 seconds Lees &man.tftpd.8; en &man.tftp.1;. De BUGS secties in deze pagina's documenteren enkele beperkingen van TFTP. Controleer dat het root-bestandssysteem via NFS kan worden aangekoppeld. Om de configuratie met bovenstaande dhcpd.conf te testen: &prompt.root; mount -t nfs 192.168.0.1:/b/tftpboot/FreeBSD/install /mnt Lees de code in src/sys/boot/i386/libi386/pxe.c om te begrijpen hoe de pxeboot-lader variabelen als boot.nfsroot.server en boot.nfsroot.path instelt. Deze variabelen worden vervolgens gebruikt in de root-aankoppelcode voor diskvrij NFS in src/sys/nfsclient/nfs_diskless.c. Lees &man.pxeboot.8; en &man.loader.8;.
ISDN ISDN Een goede bron voor informatie over de technologie van en hardware over ISDN is Dan Kegel's ISDN Page. Hieronder staat een snelle eenvoudige handleiding voor ISDN: Indien u in Europa leeft is het raadzaam om de sectie over ISDN-kaarten te bestuderen. Indien het plan is om ISDN hoofdzakelijk te gebruiken om via een niet-toegewijde inbellijn een verbinding met het Internet te maken, zijn Terminal Adapters wellicht een optie. Dit biedt de meeste flexibiliteit, en de minste problemen bij het wisselen van providers. Indien twee LANs met elkaar verbonden worden, of indien er een toegewijde ISDN-verbinding wordt gebruikt om met het Internet te verbinden, is het gebruik van een zelfstandige router/bridge te overwegen. Financiële kosten zijn een belangrijke factor in de uiteindelijke oplossing. De volgende opties zijn gesorteerd in volgorde van oplopende kosten. Hellmuth Michaelis Bijgedragen door ISDN-kaarten ISDN kaarten De ISDN-implementatie in &os; biedt alleen ondersteuning voor de DSS1/Q.931 (of Euro-ISDN) standaard indien passieve kaarten gebruikt worden. Sommige actieve kaarten worden ondersteund indien de firmware ook ondersteuning voor andere signaleringsprotocollen biedt; dit omvat ook de eerst ondersteunde Primary Rate (PRI) ISDN-kaart. De isdn4bsd-software biedt de mogelijkheid om met andere ISDN-routers te verbinden door òfwel IP over rauwe HDLC òfwel synchrone PPP te gebruiken: òfwel via kernel-PPP met isppp, een aangepast stuurprogramma voor &man.sppp.4;, òfwel via het gebruikersprogramma &man.ppp.8;. Door het gebruikersprogramma &man.ppp.8; te gebruiken, is het combineren van twee of meer ISDN B-kanalen mogelijk. Ook zijn een toepassing die de telefoon beantwoordt en vele gereedschappen zoals een 300 Baud-modem in software beschikbaar. Een groeiend aantal ISDN-kaarten voor de PC wordt door &os; ondersteund en volgens de rapportages wordt het succesvol in heel Europa en in vele andere delen van de wereld gebruikt. De ondersteunde passieve ISDN-kaarten zijn meestal uitgerust met de Infineon (voormalig Siemens) ISAC/HSCX/IPAC ISDN-chipsets, maar ook worden ISDN-kaarten ondersteund met chips van Cologne Chip (alleen ISA-bus), PCI-kaarten met Winbond W6692-chips, enkele kaarten met combinaties van Tiger300/320/ISAC chipsets en enkele kaarten die gebaseerd zijn op fabrikantspecifieke chipsets zoals de AVM Fritz!Card PCI V.1.0 en de AVM Fritz!Card PnP. Momenteel zijn de actieve ISDN-kaarten die ondersteund worden de AVM B1 (ISA en PCI) BRI-kaarten en de AVM T1 PCI PRI-kaarten. Kijk voor documentatie over isdn4bsd op de homepage van isdn4bsd, welke ook verwijzingen naar tips, errata, en veel meer documentatie zoals het isdn4bsd handboek bevat. Indien er interesse is om ondersteuning voor een ander ISDN-protocol, een momenteel niet-ondersteunde ISDN-kaart voor de PC, of een andere verbetering voor isdn4bsd toe te voegen, dient er contact opgenomen te worden met &a.hm;. Voor vragen over het installeren, instellen, en problemen met isdn4bsd oplossen is er een mailinglijst, &a.isdn.name;, beschikbaar. ISDN Terminal Adapters Terminal adapters (TA) zijn voor ISDN wat modems voor gewone telefoonlijnen zijn. modem De meeste TA's gebruiken de standaard opdrachtenverzameling van de Hayes-modem, en kunnen direct als vervanging van een modem gebruikt worden. Een TA zal als een gewoon modem werken behalve dat de verbindings- en doorvoersnelheden veel hoger zullen zijn dan van het oude modem. Het is noodzakelijk om PPP precies hetzelfde als voor het modem in te stellen. Zorg ervoor dat de seriële snelheid zo hoog mogelijk wordt ingesteld. PPP Het grootste voordeel van met een TA met een internetprovider te verbinden is de mogelijkheid tot dynamisch PPP. Aangezien IP-adresruimte steeds schaarser wordt, zijn de meeste providers niet meer bereid om een statisch IP te geven. De meeste zelfstandige routers zijn niet in staat tot dynamische IP-toewijzing. TA's zijn geheel afhankelijk van het PPP-daemon dat gedraaid wordt voor hun mogelijkheden en stabiliteit van de verbinding. Dit maakt het mogelijk om gemakkelijk om op een &os;-machine van een modem naar ISDN over te gaan, indien PPP reeds is ingesteld. Echter, dezelfde problemen die er waren met het PPP-programma zullen blijven voorkomen. Indien maximale stabiliteit gewenst is, dient de kernel PPP-, niet de gebruikers-PPP-optie gebruikt te worden. Van de volgende TA's is bekend dat ze met &os; werken: Motorola BitSurfer en BitSurfer Pro Adtran De meeste andere TA's zullen waarschijnlijk ook werken, TA-verkopers proberen er zeker van te zijn dat hun product het meeste van de AT-opdrachtverzameling van het standaardmodem accepteert. Het echte probleem met externe TA's is dat, net zoals bij modems, een goede seriële kaart in de computer nodig is. Voor een goed begrip van seriële apparaten dient de tutorial &os; Serial Hardware en de verschillen tussen asynchrone en synchrone seriële poorten gelezen te worden. Een TA die op een standaard seriële poort (asynchroon) van een PC draait beperkt de snelheid tot 115.2 Kbps, zelfs als er een 128 Kbps-verbinding beschikbaar is. Om de volledige 128 Kbps waartoe ISDN in staat is te gebruiken, dient de TA op een synchrone seriële kaart overgeplaatst te worden. Het kopen van een interne TA voorkomt het probleem van synchroon/asynchroon niet. Interne TA's hebben simpelweg een seriële poortchip van een standaard PC ingebouwd. Dit ontlast de gebruiker alleen van het kopen van nog een seriële kabel en het vinden van nog een leeg elektronisch uitbreidingsslot. Een synchrone kaart met een TA is minstens zo snel als een zelfstandige router, en wanneer het door een eenvoudige 386 met &os; erop wordt aangestuurd, waarschijnlijk flexibeler. De keuze tussen synchrone kaart/TA en zelfstandige router is grotendeels religieus. Hierover zijn wat discussies in de mailinglijsten gevoerd. Het wordt aangeraden om de archieven te doorzoeken voor de volledige discussie. Zelfstandige ISDN bridges/routers ISDN zelfstandige bridges/routers ISDN-bridges of -routers zijn in het geheel niet specifiek voor &os; of enig ander besturingssysteem. Raadpleeg voor een volledigere beschrijving van de technologie van routing en bridging een referentieboek over netwerken. In deze sectie zullen de termen router en bridge door elkaar worden gebruikt. Aangezien de prijzen van eenvoudige ISDN-routers/-bridges zakken, zal dit waarschijnlijk een steeds populairdere keuze worden. Een ISDN-router is en kleine doos die direct in het plaatselijke Ethernetnetwerk geprikt wordt, en zijn eigen verbinding met de andere bridge/router beheert. Het heeft ingebouwde software om via PPP en andere populaire protocollen te communiceren. Een router staat veel snellere doorvoer dan een standaard-TA toe, aangezien het een volledig synchrone ISDN-verbinding zal gebruiken. Het grootste probleem met ISDN-routers en -bridges is dat samenwerking tussen fabrikanten nog steeds een probleem kan zijn. Indien er plannen zijn om met een internetprovider te verbinden, is het raadzaam de wensen met hen te bespreken. Indien er gepland is om twee LAN-segmenten met elkaar te verbinden, zoals het thuis-LAN en het kantoor-LAN, is dit de eenvoudigste en onderhoudarmste oplossing. Aangezien de apparatuur voor beide kanten van de verbinding wordt gekocht is het zeker dat de verbinding zal werken. De volgende installatie kan worden gebruikt om bijvoorbeeld een thuiscomputer of een netwerk van een afdelingskantoor met een netwerk van het hoofdkantoor te verbinden: Netwerk van afdelingskantoor of thuis 10 base 2 Het netwerk gebruikt een topologie gebaseerd op een bus met een 10 base 2 Ethernet (thinnet). Verbind indien nodig de router met de netwerkkabel met een AUI/10BT transceiver. ---Sun werkstation | ---FreeBSD computer | ---Windows 95 | Zelfstandige router | ISDN BRI lijn 10 Base 2 Ethernet Wanneer het thuis-/afdelingskantoornetwerk uit slechts één computer bestaat kan een twisted-pair crossover-kabel gebruikt worden om direct met de zelfstandige router te verbinden. Hoofdkantoor- of ander LAN 10 base T Het netwerk gebruikt een stertopologie met 10 base T Ethernet (Twisted Pair). -------Novell Server | H | | ---Sun | | | U ---FreeBSD | | | ---Windows 95 | B | |___---Zelfstandige router | ISDN BRI lijn ISDN Netwerkdiagram Een groot voordeel van de meeste routers/bridges is dat ze gelijktijdig 2 gescheiden onafhankelijke PPP-verbindingen met 2 gescheiden sites toestaan. Dit wordt door de meeste TA's niet ondersteund, behalve voor specifieke (gewoonlijk dure) modellen die twee seriële poorten hebben. Dit dient niet met kanaalbinding, MPP, etcetera verward te worden. Dit kan een erg handige eigenschap zijn indien, bijvoorbeeld, er een toegewijde ISDN-verbinding op kantoor is en het gewenst is om deze af te tappen, maar een andere ISDN-lijn op het werk ongewenst is. Een router op kantoor kan een toegewijde B-kanaal verbinding (64 Kbps) met het Internet beheren en het andere B-kanaal voor een gescheiden gegevensverbinding gebruiken. Het tweede B-kanaal kan voor inbellen, uitbellen, of dynamisch binden (MPP, etcetera) gebruikt worden met het eerste B-kanaal voor meer bandbreedte. IPX/SPX Een Ethernet-bridge staat ook toe om meer dan alleen IP-verkeer te verzenden. Het is ook mogelijk om IPX/SPX of enig ander protocol te gebruiken. Chern Lee Bijgedragen door Network Address Translation Overzicht natd Het Network Address Translation daemon van &os;, in het algemeen bekend als &man.natd.8;, is een daemon dat rauwe binnenkomende IP-pakketten accepteert, de bron naar die van de plaatselijke machine verandert en de pakketten terug in de uitgaande IP-pakketstroom injecteert. &man.natd.8; doet dit door het IP-adres en de poort van de bron zo te veranderen dat wanneer de gegevens weer ontvangen worden, het in staat is om de originele plaats van de gegevens te achterhalen en ze door te sturen naar de originele aanvrager. Internetverbinding delen NAT NAT wordt het meest gebruikt wat in het algemeen bekend is als het delen van een Internetverbinding. Installatie Wegens de krimpende IP-ruimte in IPv4, en het groeiend aantal gebruikers van consumentenlijnen op hoge snelheid zoals kabel of DSL, hebben steeds meer mensen een oplossing als het delen van een Internetverbinding nodig. Vanwege de mogelijkheid om meerdere computers online te verbinden door één verbinding en IP-adres is &man.natd.8; een redelijke keuze. In de meeste gevallen heeft een gebruiker een machine verbonden met een kabel- of DSL-lijn met één IP-adres en is het gewenst om deze ene verbonden computer te gebruiken om Internettoegang aan meerdere computers over een LAN te geven. Hiervoor dient de &os;-machine op het Internet dienst doen als gateway. Deze gateway-machine heeft twee NICs nodig — één voor de verbinding met de Internetrouter, de andere voor de verbinding met het LAN. Alle machines op het LAN zijn verbonden door een hub of switch. Er zijn vele manieren om een LAN via een &os;-gateway met het Internet te verbinden. Dit voorbeeld behandelt slechts een gateway met tenminste twee NICs. _______ __________ ________ | | | | | | | Hub |-----| Client B |-----| Router |----- Internet |_______| |__________| |________| | ____|_____ | | | Client A | |__________| Netwerkschema Dit soort installaties wordt in het algemeen gebruikt om een Internetverbinding te delen. Eén van de LAN-machines is verbonden met het Internet. De rest van de machines hebben internettoegang via die gateway-machine. Bootloader-configuratie bootloader configuratie De mogelijkheden van de kernel voor network address translation met &man.natd.8; staan niet aan in GENERIC, maar ze kunnen worden voorgeladen tijdens het opstarten door enkele opties aan /boot/loader.conf toe te voegen: ipfw_load="YES" ipdivert_load="YES" Ook moet de tunable net.inet.ip.fw.default_to_accept op 1 worden gezet: net.inet.ip.fw.default_to_accept="1" Het is een goed idee om deze optie aan te zetten tijdens de eerste pogingen om een firewall en NAT gateway te installeren. Op deze manier zal het standaardbeleid van &man.ipfw.8; allow ip from any to any zijn in plaats van het minder vrije deny ip from any to any, en zal het iets moeilijker zijn om buitengesloten te worden net na het opnieuw opstarten van het systeem. Kernelconfiguratie kernel instellingen Wanneer modules geen optie zijn of wanneer het gewenst is om alle benodigde mogelijkheden in de draaiende kernel te bouwen, dienen de volgende opties in het kernelinstellingenbestand aanwezig te zijn: options IPFIREWALL options IPDIVERT De volgende opties kunnen ook van pas komen: options IPFIREWALL_DEFAULT_TO_ACCEPT options IPFIREWALL_VERBOSE Systeeminstellingen voor het opstarten Om de firewall en NAT tijdens het opstarten aan te zetten, moet het volgende in /etc/rc.conf staan: gateway_enable="YES" firewall_enable="YES" firewall_type="OPEN" natd_enable="YES" natd_interface="fxp0" natd_flags="" Stelt de machine in om dienst te doen als gateway. Het draaien van sysctl net.inet.ip.forwarding=1 heeft hetzelfde effect. Activeert de firewall-regels in /etc/rc.firewall tijdens het opstarten. Dit specificeert een vooraf gedefinieerde verzameling van firewall-regels die alles binnenlaat. Raadpleeg /etc/rc.firewall voor aanvullende types. Geeft aan welke interface te gebruiken om pakketten naar door te sturen (de interface die met het Internet verbonden is). Alle aanvullende instelopties die tijdens het opstarten aan &man.natd.8; worden doorgegeven. Het gedefinieerd hebben van de bovenstaande opties in /etc/rc.conf zal natd -interface fxp0 draaien tijdens het opstarten. Dit kan ook handmatig worden gedraaid. Het is ook mogelijk om een instellingenbestand voor &man.natd.8; te gebruiken als er teveel opties zijn om door te geven. In dit geval dient het instellingenbestand te worden gedefinieerd door de volgende regel aan /etc/rc.conf toe te voegen: natd_flags="-f /etc/natd.conf" Het bestand /etc/natd.conf zal een lijst met instelopties bevatten, één per regel. Het geval in de volgende sectie bijvoorbeeld zal het volgende bestand gebruiken: redirect_port tcp 192.168.0.2:6667 6667 redirect_port tcpc 192.168.0.3:80 80 Raadpleeg voor meer informatie over het instellingenbestand het gedeelte over de optie van de hulppagina &man.natd.8;. Elke machine en interface achter het LAN dient een IP-adres in de privé-netwerkruimte toegewezen te krijgen zoals gedefinieerd in RFC 1918 en een standaard gateway van het interne IP-adres van de natd-machine hebben. Bijvoorbeeld, cliënt A en B achter het LAN hebben IP-adressen 192.168.0.2 en 192.168.0.3, terwijl de LAN-interface van de natd-machine IP-adres 192.168.0.1 heeft. De standaard gateway van cliënt A en B dient ingesteld te worden op die van de natd-machine, 192.168.0.1. Voor de externe, of Internet-interface van de natd-machine zijn geen speciale wijzigingen nodig om &man.natd.8; te laten werken. Poorten omleiden Het nadeel van &man.natd.8; is dat de LAN-cliënten niet vanaf het Internet toegankelijk zijn. Cliënten op het LAN kunnen uitgaande verbinden naar de wereld maken maar kunnen geen inkomende verbindingen ontvangen. Dit vormt een probleem wanneer geprobeerd wordt om Internetdiensten op een van de LAN-cliëntmachines te draaien. Een eenvoudige om dit te omzeilen is om bepaalde Internetpoorten op de natd-machine om te leiden naar een LAN-cliënt. Bijvoorbeeld, er draait een IRC-server op cliënt A, en er draait een webserver op cliënt B. Om dit goed te laten werken, dienen verbindingen die worden ontvangen op poorten 6667 (IRC) en 80 (web) te worden omgeleid naar de respectievelijke machines. De optie dient aan &man.natd.8; met de juiste opties te worden doorgegeven. De syntaxis is als volgt: -redirect_port proto doelIP:doelPOORT[-doelPOORT] [aliasIP:]aliasPOORT[-aliasPOORT] [verIP[:verrePOORT[-verrePOORT]]] In het bovenstaand voorbeeld dienen de argumenten te zijn: -redirect_port tcp 192.168.0.2:6667 6667 -redirectport tcp 192.168.0.3:80 80 Dit zal de juiste tcp-poorten naar de LAN-cliënt-machines omleiden. Het argument kan worden gebruikt om poortbereiken over individuele poorten aan te geven. Bijvoorbeeld, tcp 192.168.0.2:2000-3000 2000-3000 zal alle verbindingen die op poorten 2000 tot 3000 worden ontvangen omleiden naar poorten 2000 tot 3000 op cliënt A. Deze opties kunnen worden gebruikt wanneer &man.natd.8; direct wordt gedraaid, wanneer ze zijn geplaatst in de optie natd_flags="" van /etc/rc.conf, of wanneer ze via een instellingenbestand worden doorgegeven. Raadpleeg voor meer instelopties &man.natd.8;. Adressen omleiden adressen omleiden Adressen omleiden is handig wanneer er verschillende IP-adressen beschikbaar zijn, maar ze op één machine moeten zitten. Hiermee kan &man.natd.8; aan elke LAN-cliënt een eigen extern IP-adres toewijzen. Vervolgens overschrijft &man.natd.8; de uitgaande pakketten van de LAN-cliënten met het juiste IP-adres en leidt het al het binnenkomende verkeer op dat ene IP-adres terug naar de specifieke LAN-cliënt. Dit staat ook bekend als statisch NAT. Bijvoorbeeld, de IP-adressen 128.1.1.1, 128.1.1.2, en 1281.2..3 behoren toe aan de natd gateway-machine. 128.1.1.1 kan gebruikt worden als het externe IP-adres van de natd gateway-machine, terwijl 128.1.1.2 en 128.1.1.3 terug worden gestuurd naar de LAN-cliënten A en B. De syntaxis van is als volgt: -redirect_address lokaalIP publiekIP lokaalIP Het interne IP-adres van de LAN-cliënt. publiekIP Het externe IP-adres overeenkomend met de LAN-cliënt. In het voorbeeld zou dit argument zijn: -redirect_address 192.168.0.2 128.1.1.2 -redirect_address 192.168.0.3 128.1.1.3 Net zoals worden ook deze argumenten geplaatst in de optie natd_flags="" van /etc/rc.conf, of doorgegeven via een instellingenbestand. Met adresomleiding is het omleiden van poorten niet nodig aangezien alle gegevens die op een bepaald IP-adres worden ontvangen worden omgeleidt. Het externe IP-adres op de natd machine dient actief en naar een externe interface gealiased te zijn. In &man.rc.conf.5; staat hoe dit te doen. Aaron Kaplan Origineel geschreven door Tom Rhodes Geherstructureerd en toegevoegd door Brad Davis Uitgebreid door IPv6 IPv6 (ook bekend als IPng IP next generation) is de nieuwe versie van het welbekende IP-protocol (ook bekend als IPv4). Net zoals de andere huidige *BSD-systemen, bevat &os; de referentie-implementatie van KAME IPv6. Het &os;-systeem wordt dus geleverd met alles wat nodig is om met IPv6 te experimenteren. Deze sectie richt zich op het ingesteld en draaiend krijgen van IPv6. In de vroege jaren 1990 werden mensen zich bewust van de snel krimpende adresruimte van IPv4. De uitbreidingssnelheid van het Internet baarde twee grote zorgen: Geen adresruimte meer. Tegenwoordig is dit niet zo'n probleem meer aangezien RFC1918 voor privé-adresruimte (10.0.0.0/8, 172.16.0.0/12, en 192.168.0.0/16) en Network Address Translation (NAT) worden gebruikt. De regels in de routeertabellen werden te groot. Dit is tegenwoordig nog steeds een probleem. IPv6 behandelt deze en vele andere zaken: 128-bits adresruimte. Met andere woorden, er zijn theoretisch 340.282.366.920.938.463.463.374.607.431.768.211.456 adressen beschikbaar. Dit betekent dat er ongeveer 6,67 * 10^27 IPv6-adressen per vierkante meter op onze planeet beschikbaar zijn. Routers zullen alleen netwerkaggregatie-adressen in hun routeertabellen opslaan en dus de gemiddelde ruimte van een routeertabel verkleinen tot 8192 regels. IPv6 heeft ook vele andere nuttige eigenschappen zoals: Automatische adresconfiguratie (RFC2462) Anycast-adressen (ééen-van-velen) Verplichte multicast-adressen IPsec (IP security) Versimpelde structuur van de headers Mobiele IP Overgangsmechanismen voor IPv6 naar IPv4 Bekijk voor meer informatie: IPv6-overzicht op playground.sun.com KAME.net Achtergrond over IPv6 adressen Er zijn verschillende soorten IPv6-adressen: unicast, anycast, en multicast. Unicast-adressen zijn de bekende adressen. Een pakket dat naar een unicast-adres wordt verzonden arriveert precies op de interface dat bij dat adres hoort. Anycast-adressen zijn syntactisch niet van unicast-adressen te onderscheiden maar ze adresseren een groep interfaces. Een pakket dat bestemd is voor een anycast-adres zal bij de dichtstbijzijnde interface arriveren (in router-metrieken). Anycast-adressen mogen alleen door routers worden gebruikt. Multicast-adressen identificeren een groep interfaces. Een pakket dat bestemd is voor en multicast-adres zal bij alle interfaces die bij de multicast-groep horen arriveren. Het broadcast-adres van IPv4 (gewoonlijk xxx.xxx.xxx.255) wordt in IPv6 met multicast-adressen uitgedrukt. Gereserveerde IPv6-adressen IPv6-adres Prefixlengte (bits) Beschrijving Opmerkingen :: 128 bits niet gespecificeerd cf. 0.0.0.0 in IPv4 ::1 128 bits teruglusadres cf. 127.0.0.1 in IPv4 ::00:xx:xx:xx:xx 96 bits ingebouwd IPv4 De laagste 32 bits zijn het IPv4-adres. Ook IPv4 compatibel IPv6-adres genoemd. ::ff:xx:xx:xx:xx 96 bits IPv4-afgebeeld IPv6-adres De laagste 32 bits zijn het IPv4-adres. Voor hosts die geen IPv6 ondersteunen. fe80:: - feb:: 10 bits link-lokaal cf. teruglusadres in IPv4 fec0:: - fef:: 10 bits site-lokaal   ff:: 8 bits multicast   001 (base 2) 3 bits globale unicast Alle globale unicast-adressen worden vanuit deze pool toegewezen. De eerste 3 bits zijn 001.
IPv6-adressen lezen De canonieke vorm wordt weergegeven als: x:x:x:x:x:x:x:x, waarbij elke x een 16-bits hexadecimale waarde is. Bijvoorbeeld FEBC:A574:382B:23C1:AA49:4592:4EFE:9982 Vaak bevat een adres lange deelstrings van allen nullen, daarom kan per adres één zo'n deelstring worden afgekort als ::. Ook kunnen maximaal drie voorlopende 0's per hexadecimaal viertal worden weggelaten. Bijvoorbeeld, fe80::1 komt overeen met de canonieke vorm fe80:0000:0000:0000:0000:0000:0000:0001. Een derde vorm is het schrijven van de laatste 32 bits in de bekende (decimale) IPv4-stijl met punten . als scheidingstekens. Bijvoorbeeld, 2002::10.0.0.1 komt overeen met de (hexadecimale) canonieke representatie 2002:0000:0000:0000:0000:0000:0a00:0001 wat weer hetzelfde is als 2002::a00:1. Op dit punt dient de lezer het volgende te begrijpen: &prompt.root; ifconfig rl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500 inet 10.0.0.10 netmask 0xffffff00 broadcast 10.0.0.255 inet6 fe80::200:21ff:fe03:8e1%rl0 prefixlen 64 scopeid 0x1 ether 00:00:21:03:08:e1 media: Ethernet autoselect (100baseTX ) status: active fe80::200:21ff:fe03:8e1%rl0 is een automatisch ingesteld link-lokaal adres. Het is als deel van de automatische instelling vanuit het MAC-adres aangemaakt. Kijk voor verdere informatie over de structuur van IPv6-adressen op RFC3513. Verbinding krijgen Er zijn momenteel vier manieren om met andere IPv6-hosts en -netwerken te verbinden: Neem contact op met de Internetprovider om te zien of ze al IPv6 aanbieden. SixXS biedt wereldwijd tunnels met eindpunten aan. Tunnelen via 6-naar-4 (RFC3068) Gebruik de poort net/freenet6 indien er een inbelverbinding wordt gebruikt. DNS in de IPv6-wereld Er waren twee soorten DNS-records voor IPv6. De IETF heeft A6-records overbodig verklaard. AAAA-records zijn nu de standaard. AAAA-records gebruiken gaat rechttoe-rechtaan. Wijs de hostnaam toe aan het nieuwe IPv6-adres dat net ontvangen is door het volgende aan de DNS-bestand voor primaire zones toe te voegen: MIJNHOSTNAAM AAAA MIJNIPv6ADRES Vraag het aan de DNS-provider indien de DNS-zones niet zelf worden geserveerd. De huidige versies van bind (versie 8.3 en 9) en dns/djbdns (met de IPv6-patch) ondersteunen AAAA-records. De benodigde wijzigingen doorvoeren in <filename>/etc/rc.conf</filename> IPv6-cliëntinstellingen Deze instellingen helpen bij het configureren van een machine in het LAN die als cliënt in plaats van router dienst zal doen. Om &man.rtsol.8; automatisch de interface tijdens het opstarten te laten configureren op &os; 9.X en nieuwer dient het volgende aan rc.conf toegevoegd te worden: ipv6_prefer="YES" Voeg voor &os; 8.X en ouder het volgende toe: ipv6_enable="YES" Voeg het volgende toe om statisch een IP-adres zoals 2001:471:1f11:251:290:27ff:fee0:2093 aan de interface fxp0 toe te voegen voor &os; 9.X: ifconfig_fxp0_ipv6="2001:471:1f11:251:290:27ff:fee0:2093 prefixlen 64" Zorg ervoor dat prefixlen 64 wordt vervangen door de juiste waarde voor het subnet van de computer. Voeg voor &os; 8.X het volgende toe: ipv6_ifconfig_fxp0="2001:471:1f11:251:290:27ff:fee0:2093" Voeg het volgende aan /etc/rc.conf toe om een standaardrouter 2001:471:1f11:251::1 toe te wijzen: ipv6_defaultrouter="2001:471:1f11:251::1" IPv6 router/gateway instellingen Deze paragraaf helpt bij het opvolgen van de aanwijzingen die de tunnelprovider heeft gegeven en ze om te zetten in instellingen die blijven na een herstart. Om de tunnel tijdens het opstarten te herstellen kan het volgende in /etc/rc.conf gebruikt worden: Noem de generieke tunnelinterfaces die zullen worden ingesteld, bijvoorbeeld gif0: gif_interfaces="gif0" Om de interface met een lokaal eindpunt MIJN_IPv4_ADRES in te stellen naar een ver eindpunt VER_IPv4_ADRES: gifconfig_gif0="MIJN_IPv4_ADRES VER_IPv4_ADRES" Voeg het volgende toe om het IPv6-adres dat is toegewezen als het eindpunt van de IPv6-tunnel te gebruiken voor &os; 9.X en nieuwer: ifconfig_gif0_ipv6="inet6 MIJN_TOEGEWEZEN_IPv6_TUNNEL_EINDPUNT_ADRES" Voeg voor &os; 8.X en eerder het volgende toe: ipv6_ifconfig_gif0="MIJN_TOEGEWEZEN_IPv6_TUNNEL_EINDPUNT_ADRES" Nu hoeft alleen de standaardroute voor IPv6 ingesteld te worden. Dit is de andere kant van de IPv6-tunnel: ipv6_defaultrouter="MIJN_IPv6_VER_TUNNEL_EINDPUNT_ADRES" IPv6-tunnelinstellingen Indien de server gebruikt wordt om IPv6 tussen de rest van het netwerk en de wereld te routen, is ook de volgende instelling in /etc/rc.conf nodig: ipv6_gateway_enable="YES" Routeradvertentie en automatische hostconfiguratie Deze sectie helpt bij het instellen van &man.rtadvd.8; om de standaard IPv6-route te adverteren. Het volgende is nodig in /etc/rc.conf om &man.rtadvd.8; aan te zetten: rtadvd_enable="YES" Het is belangrijk om de interface te specificeren waarop het IPv6-routerverzoek plaatsvindt. Om bijvoorbeeld &man.rtadvd.8; te vertellen om fxp0 te gebruiken: rtadvd_interfaces="fxp0" Nu dient het instellingenbestand /etc/rtadvd.conf aangemaakt te worden. Hier is een voorbeeld: fxp0:\ :addrs#1:addr="2001:471:1f11:246::":prefixlen#64:tc=ether: Vervang fxp0 door de interface die gebruikt gaat worden. Vervang vervolgens 2001:471:1f11:246:: met de prefix van uw toewijzing. Indien een /64 subnet is toegewezen, hoeft er verder niets veranderd te worden. In andere gevallen dient de juiste waarde voor prefixlen# gebruikt te worden.
Harti Brandt Bijgedragen door Asynchronous Transfer Mode (ATM) Klassiek IP configureren over ATM (PVCs) Klassiek IP over ATM (CLIP) is de eenvoudigste methode om Asynchronous Transfer Mode (ATM) met IP te gebruiken. Het kan met geswitchte verbindingen (SVCs) en met permanente verbindingen (PVCs) gebruikt worden. Deze sectie beschrijft hoe een netwerk gebaseerd op PVCs op te zetten. Volledig geschakelde configuraties De eerste methode om een CLIP met PVCs op te zetten is om elke machine met elke andere machine in het netwerk te verbinden via een toegewijde PVC. Hoewel dit eenvoudig te configureren is, wordt het onpraktisch voor een groter aantal machines. Dit netwerk gaat ervan uit dat er vier machines in het netwerk zijn, allen verbonden met het ATM netwerk met een ATM adapterkaart. De eerste stap is het plannen van de IP-adressen en de ATM verbindingen tussen de machines. Het volgende wordt gebruikt: Host IP-adres hostA 192.168.173.1 hostB 192.168.173.2 hostC 192.168.173.3 hostD 192.168.173.4 Om een volledig geschakeld net te bouwen is er een ATM-verbinding nodig tussen elk paar machines: Machines VPI.VCI koppel hostA - hostB 0.100 hostA - hostC 0.101 hostA - hostD 0.102 hostB - hostC 0.103 hostB - hostD 0.104 hostC - hostD 0.105 De VPI- en VCI-waarde kunnen aan beide kanten van de verbinding verschillen, maar voor de eenvoud wordt aangenomen dat ze hetzelfde zijn. Vervolgens dienen de ATM-interfaces op elke host geconfigureerd te worden: hostA&prompt.root; ifconfig hatm0 192.168.173.1 up hostB&prompt.root; ifconfig hatm0 192.168.173.2 up hostC&prompt.root; ifconfig hatm0 192.168.173.3 up hostD&prompt.root; ifconfig hatm0 192.168.173.4 up aannemende dat de ATM-interface op alle hosts hatm0 is. Nu dienen de PVCs op hostA geconfigureerd te worden (er wordt aangenomen dat ze reeds op de ATM-switches zijn geconfigureerd, raadpleeg de handleiding van de switch hoe dit te doen). hostA&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 100 llc/snap ubr hostA&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 101 llc/snap ubr hostA&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 102 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 100 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 103 llc/snap ubr hostB&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 104 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 101 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 103 llc/snap ubr hostC&prompt.root; atmconfig natm add 192.168.173.4 hatm0 0 105 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.1 hatm0 0 102 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.2 hatm0 0 104 llc/snap ubr hostD&prompt.root; atmconfig natm add 192.168.173.3 hatm0 0 105 llc/snap ubr Uiteraard kunnen ook andere verkeerscontracten dan UBR worden gebruikt indien de ATM-adapter die ondersteunt. In dit geval wordt de naam van het verkeerscontract gevolgd door de parameters van het verkeer. Hulp voor het gereedschap &man.atmconfig.8; kan verkregen worden met: &prompt.root; atmconfig help natm add of in de hulppagina &man.atmconfig.8;. Dezelfde configuratie kan ook bereikt worden via /etc/rc.conf. Voor hostA wordt dit: network_interfaces="lo0 hatm0" ifconfig_hatm0="inet 192.168.173.1 up" natm_static_routes="hostB hostC hostD" route_hostB="192.168.173.2 hatm0 0 100 llc/snap ubr" route_hostC="192.168.173.3 hatm0 0 101 llc/snap ubr" route_hostD="192.168.173.4 hatm0 0 102 llc/snap ubr" De huidige toestand van alle CLIP routes kan worden verkregen met: hostA&prompt.root; atmconfig natm show Tom Rhodes Bijgedragen door Common Address Redundancy Protocol (CARP) CARP Common Address Redundancy Protocol Het Common Address Redundancy Protocol, of CARP, staat toe dat meerdere hosts hetzelfde IP-adres gebruiken. In sommige opstellingen wordt dit gebruikt voor beschikbaarheid of loadbalancing. Hosts kunnen ook gescheiden IP-adressen gebruiken, zoals in het voorbeeld dat hier is gegeven. Om ondersteuning voor CARP aan te zetten, dient de &os;-kernel herbouwd zoals beschreven in met de volgende optie: device carp Als alternatief kan de if_carp.ko module geladen worden tijdens het opstarten. Voeg de volgende regel toe aan /boot/loader.conf: if_carp_load="YES" De functionaliteit van CARP zou nu beschikbaar moeten zijn en kan met verschillende sysctl-OIDs worden bijgesteld: OID Beschrijving net.inet.carp.allow Accepteer inkomende CARP pakketten. Staat standaard aan. net.inet.carp.preempt Deze optie zet alle CARP interfaces down op de host wanneer er een down gaat. Staat standaard uit. net.inet.carp.log De waarde 0 zet alle logging uit. De waarde 1 zet het loggen van slechte CARP-pakketten aan. Waardes hoger dan 1 zet het loggen van toestandsveranderingen van de CARP interfaces aan. De standaardwaarde is 1. net.inet.carp.arpbalance Balanceer lokaal netwerkverkeer met ARP. Staat standaard uit. net.inet.carp.suppress_preempt Een alleen-lezen OID die de toestand van preëmptie-onderdrukking weergeeft. Preëmptie kan worden onderdrukt wanneer de verbinding op een interface afwezig is. De waarde 0 betekent dat preëmptie niet onderdrukt is. Elk probleem verhoogt deze OID. De CARP-apparaten zelf kunnen met het commando ifconfig worden aangemaakt: &prompt.root; ifconfig carp0 create In een echte omgeving hebben deze interfaces unieke identificatienummers, bekend als een VHID, nodig. Dit VHID of Virtual Host Identification zal worden gebruikt om de hosts op het netwerk te onderscheiden. CARP gebruiken voor serverbeschikbaarheid Eén gebruik van CARP, zoals boven aangegeven, is serverbeschikbaarheid. Dit voorbeeld geeft failover-ondersteuning voor drie hosts, met allemaal een uniek IP-adres en dezelfde webinhoud. Deze machines zullen samen met een Round Robin DNS configuratie dienst doen. De failover-machine zal twee aanvullende CARP-interfaces hebben, één voor elk van de IP's van de contentservers. Wanneer er een storing optreedt, zou de failover-server het IP-adres van de falende machine moeten oppikken. Dit betekent dat de storing geheel onmerkbaar zou moeten zijn voor de gebruiker. De failover-server heeft dezelfde inhoud en diensten nodig als de andere contentservers waarvoor het moet invallen. De twee machines dienen identiek geconfigureerd te worden op de gegeven hostnamen en VHIDs na. Dit voorbeeld noemt deze machines respectievelijk hosta.example.org en hostb.example.org. Ten eerste dienen de benodigde regels voor een CARP-configuratie aan rc.conf te worden toegevoegd. Voor hosta.example.org dient het bestand rc.conf de volgende regels te bevatten: hostname="hosta.example.org" ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0" cloned_interfaces="carp0" ifconfig_carp0="vhid 1 pass testpass 192.168.1.50/24" Op hostb.example.org dienen de volgende regels in rc.conf te staan: hostname="hostb.example.org" ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0" cloned_interfaces="carp0" ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24" Het is erg belangrijk dat de wachtwoorden die met de optie aan ifconfig gegeven zijn, identiek zijn. De carp apparaten zullen alleen luisteren naar en advertenties accepteren van machines met het juiste wachtwoord. Het VHID dient ook verschillend te zijn voor elke machine. De derde machine, provider.example.org, dient voorbereidt te worden op het afhandelen van failover van beide hosts. Deze machine heeft twee carp apparaten nodig, één om elke host af te handelen. De juiste instelregels voor rc.conf zullen ongeveer gelijk zijn aan de volgende: hostname="provider.example.org" ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0" cloned_interfaces="carp0 carp1" ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24" ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24" Met twee carp apparaten is provider.example.org in staat om het IP-adres van de andere machine op te pikken wanneer de ene niet meer antwoordt. De standaard &os;-kernel kan preëmptie geactiveerd hebben. In dat geval hoeft provider.example.org het IP-adres niet terug te geven aan de originele contentserver. In dit geval kan het nodig zijn dat een beheerder handmatig het IP terug aan de meester moet geven. Het volgende commando dient op provider.example.org gegeven te worden: &prompt.root; ifconfig carp0 down && ifconfig carp0 up Dit dient gedaan te worden op de carp interface die met de juiste host overeenkomt. Op dit moment dient CARP volledig actief en beschikbaar voor testen te zijn. Voor het testen dienen òfwel het netwerken herstart te worden, òf de machines dienen opnieuw opgestart te worden. Meer informatie is altijd beschikbaar in de hulppagina &man.carp.4;
diff --git a/nl_NL.ISO8859-1/books/handbook/audit/chapter.xml b/nl_NL.ISO8859-1/books/handbook/audit/chapter.xml index 882b711720..b3904836ac 100644 --- a/nl_NL.ISO8859-1/books/handbook/audit/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/audit/chapter.xml @@ -1,790 +1,790 @@ Tom Rhodes Geschreven door Robert Watson Remko Lodder Vertaald door Security Event Auditing Overzicht AUDIT Security Event Auditing MAC Het besturingssysteem &os; heeft ondersteuning voor diepgaande beveiligingsauditing van evenementen. Evenement auditing maakt het mogelijk dat er diepgaande en configureerbare logging van een variateit aan beveiligings-gerelateerde systeem evenementen, waaronder logins, configuratie wijzigingen, bestands- en netwerk toegang. Deze log regels kunnen erg belangrijk zijn voor live systeem monitoring, intrusion detection en postmortem analyse. &os; implementeert &sun;'s gepubliceerde BSM API en bestandsformaat en is uitwisselbaar met zowel &sun;'s &solaris; als &apple;'s &macos; X audit implementaties. Dit hoofdstuk richt zich op de installatie en configuratie van evenement auditing. Het legt audit policies uit en geeft voorbeelden van audit configuraties. Na het lezen van dit hoofdstuk weet de lezer: Wat evenement auditing is en hoe het werkt. Hoe evenement auditing geconfigureerd kan worden voor &os; voor gebruikers en processen. Hoe de audittrail bekeken kan worden door gebruik te maken van de audit reduction en onderzoek programma's. Voordat verder gegaan wordt moet het volgende bekend zijn: &unix; en &os; basishandelingen begrijpen (). Bekend zijn met de basishandelingen van kernel configuratie/compilatie (). Bekend zijn met beveiliging en hoe dat relateert aan &os; (). De audit-faciliteiten hebben enkele bekende beperkingen waaronder dat niet alle beveiligings-relevante systeemevenementen geaudit kunnen worden en dat sommige login-mechanismes, zoals X11-gebaseerde display managers en programma's van erde partijen geen (goede) ondersteuning bieden voor het auditen van login-sessies van gebruikers. De beveiligings evenement auditing faciliteit is in staat om erg gedetailleerde logs van systeem activiteiten op een druk systeem te genereren, trail bestands data kan erg groot worden wanneer er erg precieze details worden gevraagd, wat enkele gigabytes per week kan behalen in sommige configuraties. - Beheerders moeten rekening houden met voldoende schijfruimte - voor grote audit configuraties. Bijvoorbeeld het kan gewenst - zijn om eigen bestandsysteem aan /var/audit + Beheerders moeten rekening houden met voldoende schijfruimte voor + grote audit configuraties. Bijvoorbeeld het kan gewenst zijn om eigen + bestandsysteem aan /var/audit toe te wijzen zo dat andere bestandssystemen geen hinder ondervinden als het audit bestandssysteem onverhoopt vol raakt. Sleutelwoorden in dit hoofdstuk Voordat dit hoofdstuk gelezen kan worden, moeten er een aantal audit gerelateerde termen uitgelegd worden: evenement: Een auditbaar evenement is elk evenement dat gelogged kan worden door het audit subsysteem. Voorbeelden van beveiligings gerelateerde evenementen zijn het creëeren van een bestand, het opzetten van een netwerk verbinding, of van een gebruiker die aanlogt. Evenementen zijn ofwel attributable wat betekend dat ze getraceerd kunnen worden naar een geauthoriseerde gebruiker, of non-attributable voor situaties waarin dat niet mogelijk is. Voorbeelden van non-attributable evenementen zijn elk evenement dat gebeurd voordat authorisatie plaatsvind in het login proces, zoals bij foutieve inlog pogingen. class: Evenement klassen zijn benoemde sets van gerelateerde evenementen en worden gebruikt in selectie expressies. Veel gebruikte klassen van evenementen zijn bestands creatie (fc), exec (ex) en login_logout (lo). record: Een record is een audit log regel die het beveiligings evenement beschrijft. Records bevatten een record evenement type, informatie over het onderwerp (de gebruiker) welke de actie uitvoerd, de datum en de tijd, informatie over de objecten of argumenten, en een conditie die aangeeft of de actie geslaagd of mislukt is. trail: Een audit trail, of log bestand bestaat uit een serie van audit records welke beveiligings evenementen beschrijft. Meestal lopen deze trails in chronologische orde, gebaseerd op de tijd dat het evenement optrad. Alleen geauthoriseerde processen mogen records toevoegen aan de audit trail. selection expression: Een selectie expressie is een string welke een lijst bevat van prefixes en audit evenement klasse namen die overeenkomen met evenementen. preselection: Het proces waarbij het systeem bepaald welke evenementen interessant zijn voor de beheerder, zodat wordt voorkomen dat er audit records worden gegenereerd voor evenementen die niet interessant zijn. De preselection configuratie gebruikt een serie van selectie expressies om te identificeren welke klassen van evenementen van toepassing zijn op gebruikers en globale instellingen voor zowel geauthoriseerde als ongeauthoriseerde processen. reduction: Het proces waarbij records van bestaande audit trails worden geselecteerd voor bewaring, uitprinten of analyse. Ook is dit het proces waarbij ongewenste audit records worden verwijderd uit het audit trail. Door gebruik te maken van reduction kunnen beheerders policies implementeren die het bewaren van audit data verzorgen. Bijvoorbeeld gedetailleerde audit trails kunnen één maand bewaard worden maar erna worden trails gereduceerd zodat alleen login informatie bewaard worden voor archiverings redenen. Installeren van audit ondersteuning. Ondersteuning in de gebruikersomgeving voor evenement auditing wordt geïnstalleerd als onderdeel van het basis &os; besturingssysteem. Kernel-ondersteuning voor evenement-auditing wordt standaard meegenomen tijdens compilatie, maar moet expliciet in de kernel gecompileerd worden door de volgende regel toe te voegen aan het configuratiebestand van de kernel: options AUDIT Bouw en herinstalleer de kernel volgens het normale proces zoals beschreven in . Zodra een audit ondersteunende kernel is gebouwd en geïnstalleerd en deze is opgestart kan de audit daemon aangezet worden door de volgende regel aan &man.rc.conf.5; toe te voegen: auditd_enable="YES" Audit ondersteuning moet daarna aangezet worden door een herstart van het systeem of door het handmatig starten van de audit daemon: service auditd start Audit Configuratie Alle configuratie bestanden voor beveiligings audit kunnen worden gevonden in /etc/security. De volgende bestanden moeten aanwezig zijn voor de audit daemon wordt gestart: audit_class - Bevat de definities van de audit klasses. audit_control - Controleert aspecten van het audit subsysteem, zoals de standaard audit klassen, minimale hoeveelheid diskruimte die moet overblijven op de audit log schijf, de maximale audit trail grootte, etc. audit_event - Tekst namen en beschrijvingen van systeem audit evenementen, evenals een lijst van klassen waarin elk evenement zich bevind. audit_user - Gebruiker specifieke audit benodigdheden welke gecombineerd worden met de globale standaarden tijdens het inloggen. audit_warn - Een bewerkbaar shell script gebruikt door de auditd applicatie welke waarschuwings berichten genereert in bijzondere situaties zoals wanneer de ruimte voor audit records te laagis of wanneer het audit trail bestand is geroteerd. Audit configuratie bestanden moeten voorzichtig worden bewerkt en onderhouden, omdat fouten in de configuratie kunnen resulteren in het verkeerd loggen van evenementen. Evenement selectie expressies Selectie expressies worden gebruikt op een aantal plaatsen in de audit configuratie om te bepalen welke evenementen er geaudit moeten worden. Expressies bevatten een lijst van evenement klassen welke gelijk zijn aan een prefix welke aangeeft of gelijke records geaccepteerd moeten worden of genegeerd en optioneel om aan te geven of de regel is bedoeld om succesvolle of mislukte operaties te matchen. Selectie expressies worden geevalueerd van links naar rechts en twee expressies worden gecombineerd door de één aan de ander toe te voegen. De volgende lijst bevat de standaard audit evenement klassen welke aanwezig zijn in het audit_class bestand: all - all - Matched alle evenement klasses. ad - administrative - Administratieve acties welke uitgevoerd worden op het gehele systeem. ap - application - Applicatie gedefinieerde acties. cl - file close - Audit aanroepen naar de close systeem aanroep. ex - exec - Audit programma uitvoer. Het auditen van command line argumenten en omgevings variabelen wordt gecontroleerd via &man.audit.control.5; door gebruik te maken van de argv en envv parameters in de policy setting. fa - file attribute access - Audit de toevoeging van object attributen zoals &man.stat.1;, &man.pathconf.2; en gelijkwaardige evenementen. fc - file create - Audit evenementen waar een bestand wordt gecreëerd als resultaat. fd - file delete - Audit evenementen waarbij bestanden verwijderd worden. fm - file attribute modify - Audit evenementen waarbij bestandsattribuut wijzigingen plaatsvinden zoals bij &man.chown.8;, &man.chflags.1;, &man.flock.2;, etc. fr - file read - Audit evenementen waarbij data wordt gelezen, bestanden worden geopend voor lezen etc. fw - file write - Audit evenementen waarbij data wordt geschreven, bestanden worden geschreven of gewijzigd, etc. io - ioctl - Audit het gebruik van de &man.ioctl.2; systeem aanroep. ip - ipc - Audit verschillende vormen van Inter-Process Communication, zoals POSIX pipes en System V IPC operaties. lo - login_logout - Audit &man.login.1; en &man.logout.1; evenementen die plaatsvinden op het systeem. na - non attributable - Audit non-attributable evenementen. no - invalid class - Matched geen enkel audit evenement. nt - network - Audit evenementen die gerelateerd zijn aan netwerk acties zoals &man.connect.2; en &man.accept.2;. ot - other - Audit diverse evenementen. pc - process - Audit process operaties zoals &man.exec.3; en &man.exit.3; Deze audit evenement klassen kunnen veranderd worden door het wijzigingen van de audit_class en audit_event configuratie bestanden. Elke audit klasse in de lijst wordt gecombineerd met een voorzetsel welke aangeeft of er succesvolle of mislukte operaties hebben plaatsgevonden en of de regel wordt toegevoegd of verwijderd van het matchen van de klasse en het type. (none) Audit zowel succesvolle als mislukte informatie van het evenement. + Audit succesvolle evenementen in deze klasse. - Audit mislukte evenementen in deze klasse. ^ Audit geen enkele succesvolle of mislukte evenementen in deze klasse. ^+ Audit geen succesvolle evenementen in deze klasse. ^- Audit geen mislukte evenementen in deze klasse. De volgende voorbeeld selectie strings selecteren zowel succesvolle als mislukte login/logout evenementen, maar alleen succesvolle uitvoer evenementen: lo,+ex Configuratie bestanden In de meeste gevallen moet een beheerder twee bestanden wijzigingen wanneer het audit systeem wordt geconfigureerd: audit_control en audit_user. Het eerste controleert systeem brede audit eigenschappen en policies, het tweede kan gebruikt worden om diepgaande auditing per gebruiker uit te voeren. Het <filename>audit_control</filename> bestand Het audit_control bestand specificeert een aantal standaarden van het audit subsysteem. Als de inhoud bekeken wordt van dit bestand is het volgende te zien: dir:/var/audit flags:lo minfree:20 naflags:lo policy:cnt filesz:0 De optie wordt gebruikt om één of meerdere directories te specificeren die gebruikt worden voor de opslag van audit logs. Als er meer dan één directory wordt gespecificeerd, worden ze op volgorde gebruikt naarmate ze gevuld worden. Het is standaard dat audit geconfigureerd wordt dat audit logs worden bewaard op een eigen bestandssysteem, om te voorkomen dat het audit subsysteem en andere subsystemen met elkaar botsen als het bestandssysteem volraakt. Het veld stelt de systeem brede standaard preselection maskers voor attributable evenementen in. In het voorbeeld boven worden succesvolle en mislukte login en logout evenementen geaudit voor alle gebruikers. De optie definieerd het minimale percentage aan vrije ruimte voor dit bestandssysteem waar de audit trails worden opgeslagen. Wanneer deze limiet wordt overschreven wordt er een waarschuwing gegenereerd. In het bovenstaande voorbeeld wordt de minimale vrije ruimte ingesteld op 20 procent. De optie specificeerd audit klasses welke geaudit moeten worden voor non-attributed evenementen zoals het login proces en voor systeem daemons. De optie specificeert een komma gescheiden lijst van policy vlaggen welke diverse aspecten van het audit proces beheren. De standaard cnt vlag geeft aan dat het systeem moet blijven draaien ook al treden er audit fouten op (deze vlag wordt sterk aangeraden). Een andere veel gebruikte vlag is argv, wat het mogelijk maakt om command line argumenten aan de &man.execve.2; systeem aanroep te auditen als onderdeel van het uitvoeren van commando's. De optie specificeert de maximale grootte in bytes hoeveel een audit trail bestand mag groeien voordat het automatisch getermineerd en geroteerd wordt. De standaard, 0, schakelt automatische log rotatie uit. Als de gevraagde bestands grootte niet nul is en onder de minimale 512k zit, wordt de optie genegeerd en wordt er een log bericht gegenereerd. Het <filename>audit_user</filename> bestand Het audit_user bestand staat de beheerder toe om verdere audit benodigdheden te specificeren voor gebruikers. Elke regel configureert auditing voor een gebruiker via twee velden, het eerste is het alwaysaudit veld, welke een set van evenementen specificeert welke altijd moet worden geaudit voor de gebruiker, en de tweede is het neveraudit veld, welke een set van evenementen specificeerd die nooit geaudit moeten worden voor de gebruiker. Het volgende voorbeeld audit_user bestand audit login/logout evenementen en succesvolle commando uitvoer voor de root gebruiker, en audit bestands creatie en succesvolle commando uitvoer voor de www gebruiker. Als dit gebruikt wordt in combinatie met het voorbeeld audit_control bestand hierboven, is de root regel dubbelop en zullen login/logout evenementen ook worden geaudit voor de www gebruiker. root:lo,+ex:no www:fc,+ex:no Het audit subsysteem beheren. Audit trails inzien Audit trails worden opgeslagen in het BSM binaire formaat, dus ondersteunende programma's moeten worden gebruikt om de informatie te wijzigen of converteren naar tekst. Het &man.praudit.1; commando converteert trail bestanden naar een simpel tekst formaat; het &man.auditreduce.1; commando kan gebruikt worden om de audit trail te reduceren voor analyse, archivering of voor het uitprinten van de data. auditreduce ondersteund een variateit aan selectie parameters, zoals evenement type, evenement klasse, gebruiker, datum of tijd van het evenement en het bestandspad of object dat gebruikt wordt. Bijvoorbeeld, het praudit programma zal een dump maken van de volledige inhoud van een gespecificeerd audit log bestand in normale tekst: &prompt.root; praudit /var/audit/AUDITFILE Waar AUDITFILE het audit bestand is dat ingelezen moet worden. Audit trails bestaan uit een serie van audit records die gevormd worden door tokens, welke praudit sequentieel print één per regel. Elke token is van een specifiek type, zoals een header welke de audit record header bevat, of path welke het bestandspad bevat van een lookup. Het volgende is een voorbeeld van een execve evenement: header,133,10,execve(2),0,Mon Sep 25 15:58:03 2006, + 384 msec exec arg,finger,doug path,/usr/bin/finger attribute,555,root,wheel,90,24918,104944 subject,robert,root,wheel,root,wheel,38439,38032,42086,128.232.9.100 return,success,0 trailer,133 Deze audit representeert een succesvolle execve aanroep, waarbij het commando finger doug is aangeroepen. Het argument token bevat beide commando's gerepresenteerd door de shell aan de kernel. Het path token bevat het pad naar het uitvoerbare bestand zoals opgezocht door de kernel. Het attribute token beschrijft de binary en om precies te zijn bevat het de bestands mode welke gebruikt kan worden om te zien of het bestand setuid was. Het subject token beschrijft het onderwerp proces en bevat sequentieel het audit gebruikers ID, effectieve gebruikers ID en groep ID, echte gebruikers ID, groep ID, proces ID, sessie ID, port ID en login adres. Let op dat het audit gebruikers ID en het echte gebruikers ID van elkaar verschillen omdat de gebruiker robert veranderd is naar de root gebruiker voordat het commando werd uitgevoerd, maar welke geaudit wordt als de originele geauthoriseerde gebruiker. Als laatste wordt de return token gebruikt om aan te geven dat er een succesvolle uitvoer is geweest en trailer geeft het einde aan van het record. praudit ook een XML output formaat, welke geselecteerd kan worden door gebruik te maken van het argument. Het reduceren van audit trails Omdat audit logs erg groot kunnen worden, zal de beheerder waarschijnlijk een subset van records willen selecteren om te gebruiken, zoals records die gekoppeld zijn aan een specifieke gebruiker: &prompt.root; auditreduce -u trhodes /var/audit/AUDITFILE | praudit Dit selecteert alle audit records die geproduceert zijn voor de gebruiker trhodes die opgeslagen is in het AUDITFILE bestand. Delegeren van audit onderzoek rechten Leden van de audit groep krijgen permissie om de audit trails te lezen in - /var/audit; standaard is deze groep leeg en - kan alleen de root gebruiker deze + /var/audit; standaard is deze + groep leeg en kan alleen de root gebruiker deze audit trails lezen. Gebruikers kunnen toegevoegd worden aan de audit groep zodat onderzoek rechten kunnen worden gedelegeerd aan de geruiker. Omdat de mogelijkheid van het inzien van audit log inhoud significante inzicht kan geven in het gedrag van gebruikers en processen, wordt het aangeraden dat de delagatie van onderzoek rechten eerst goed overdacht wordt. Live monitoren door gebruik van audit pipes Audit pipes zijn gecloonde pseudo-devices in het device bestands systeem, welke applicaties toestaat om een tap te plaatsen in de live audit record stream. Dit is primair interessant voor schrijvers van intrusion detection en systeem monitoring applicaties. Echter, voor een beheerder is het audit pipe device een makkelijke manier om live monitoring toe te staan zonder dat er problemen kunnen ontstaan met het eigenaarschap van het audit trail bestand, of dat een log rotatie de evenementen stroom in de weg zit. Om de live audit evenementen stroom te kunnen inzien is het volgende commando benodigd: &prompt.root; praudit /dev/auditpipe Standaard zijn de audit pipe device nodes alleen toegankelijk voor de root gebruiker. Om deze toegankelijk te maken voor leden van de audit groep, moet een devfs regel toegevoegd worden aan het devfs.rules bestand: add path 'auditpipe*' mode 0440 group audit Zie &man.devfs.rules.5; voor meer informatie over het configureren van het devfs bestands systeem. Het is makkelijk om audit evenement terugkoppeling cyclussen te creëeren, waarbij het tonen van elk audit evenement resulteert in het genereren van nog meer audit evenementen. Bijvoorbeeld, als alle netwerk I/O wordt geaudit en &man.praudit.1; wordt gestart vanuit een SSH sessie, wordt er een grote continue stroom aan audit evenementen gegenereert doordat elk getoond evenement een nieuw evenement genereert. Het is verstandig om praudit te draaien op een audit pipe device voor sessies zonder diepgaande I/O auditing om te voorkomen dat dit gebeurd. Het roteren van audit trail bestanden Audit trails worden alleen beschreven door de kernel en alleen beheerd worden door de audit daemon, auditd. Beheerders mogen geen gebruik maken van &man.newsyslog.conf.5; of soortgelijke programma's om de audit files te roteren. In plaats daarvan kan het audit management programma gebruikt worden om auditing te stoppen, het audit systeem te herconfigureren en log rotatie uit te voeren. Het volgende commando zorgt ervoor dat de audit daemon een nieuwe audit log maakt, en vervolgens de kernel een signaal stuurt om het nieuwe logbestand te gaan gebruiken. Het oude logbestand wordt getermineerd en hernoemd, waarna het bestand gemanipuleerd kan worden door de beheerder. &prompt.root; audit -n Als de auditd daemon op dit moment niet actief is, zal het commando falen en zal er een error bericht worden geproduceerd. Als de volgende regel wordt toegevoegd aan het /etc/crontab bestand, zal er elke twaalf uur een rotatie plaatsvinden door middel van &man.cron.8;: 0 */12 * * * root /usr/sbin/audit -n Deze wijziging wordt van kracht op het moment dat het nieuwe /etc/crontab bestand wordt opgeslagen. Automatische rotatie van het audit trail bestand gebaseerd op de bestand grootte is mogelijk via de optie in &man.audit.control.5; en wordt beschreven in de configuratie bestanden sectie van dit hoofdstuk. Audit trails comprimeren Omdat audit trail bestanden erg groot kunnen worden, is het meestal gewenst om de trails te comprimeren of op een andere manier te archiveren zodra ze afgesloten zijn door de audit daemon. Het audit_warn script kan gebruikt worden om bewerkte operaties te doen voor een variateit aan audit gerelateerde evenementen inclusief een nette terminatie van audit trails wanneer deze geroteerd worden. Bijvoorbeeld het volgende kan worden toegevoegd aan het audit_warn script, dat de audit trails comprimeert zodra ze afgesloten worden: # # Compress audit trail files on close. # if [ "$1" = closefile ]; then gzip -9 $2 fi Andere archiverings activiteiten kunnen zijn het kopieren van trail bestanden naar een gecentraliseerde server, het verwijderen van oude trail bestanden of het reduceren van de audit trail om onnodige records te verwijderen. Het script zal alleen draaien als audit trail bestanden netjes worden afgesloten, wat betekend dat het script niet uitgevoerd wordt op trails die niet netjes afgesloten zijn, waardoor bestanden corrupt kunnen raken. diff --git a/nl_NL.ISO8859-1/books/handbook/book.xml b/nl_NL.ISO8859-1/books/handbook/book.xml index 48e18254d6..8620151c40 100644 --- a/nl_NL.ISO8859-1/books/handbook/book.xml +++ b/nl_NL.ISO8859-1/books/handbook/book.xml @@ -1,359 +1,358 @@ %entities; %chapters; %txtfiles; %pgpkeys; ]> &os; handboek The &os; Dutch Documentation Project Juni 2004 $FreeBSD$ 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 The &os; Dutch Documentation Project &legalnotice; &tm-attrib.freebsd; &tm-attrib.3com; &tm-attrib.3ware; &tm-attrib.arm; &tm-attrib.adaptec; &tm-attrib.adobe; &tm-attrib.apple; - &tm-attrib.corel; &tm-attrib.creative; &tm-attrib.cvsup; &tm-attrib.heidelberger; &tm-attrib.ibm; &tm-attrib.ieee; &tm-attrib.intel; &tm-attrib.intuit; &tm-attrib.linux; &tm-attrib.lsilogic; &tm-attrib.m-systems; &tm-attrib.macromedia; &tm-attrib.microsoft; &tm-attrib.netscape; &tm-attrib.nexthop; &tm-attrib.opengroup; &tm-attrib.oracle; &tm-attrib.powerquest; &tm-attrib.realnetworks; &tm-attrib.redhat; &tm-attrib.sap; &tm-attrib.sun; &tm-attrib.symantec; &tm-attrib.themathworks; &tm-attrib.thomson; &tm-attrib.usrobotics; &tm-attrib.vmware; &tm-attrib.waterloomaple; &tm-attrib.wolframresearch; &tm-attrib.xfree86; &tm-attrib.xiph; &tm-attrib.general; Welkom bij &os;! Dit handboek behandelt de installatie en het dagelijks gebruik van &os; &rel2.current;-RELEASE en &os; &rel.current;-RELEASE. Aan deze handleiding wordt nog gewerkt, en is het resultaat van het werk van veel mensen. Veel hoofdstukken of paragrafen bestaan nog niet en wat bestaat dient soms nog bijgewerkt te worden. Als de lezer mee wil helpen aan dit project kan een mail gestuurd worden naar de &a.doc;. De meest recente versie van dit document is te vinden op de &os; website. Eerdere versies van dit handboek zijn te vinden op . Het kan ook gedownload worden in veel verschillende formaten en compressiewijzen van de &os; FTP server of een van de vele mirrorsites. Een gedrukt exemplaar van het handboek is te koop bij de &os; Mall (Engels). Het handboek kan ook doorzocht worden. &chap.preface; Beginnen Dit deel van het &os; handboek is voor gebruikers en beheerders die net beginnen met &os;. Deze hoofdstukken: Geven een inleiding in &os;; Lichten het installatieproces toe; Bespreken de &unix; basisbegrippen en grondslag; Tonen hoe de vele aanvullende applicaties voor &os; geïnstalleerd kunnen worden; Introduceren X, het venstersysteem van &unix; en gaan uitvoerig in op hoe een bureaubladomgeving wordt ingesteld die een gebruiker helpt productiever te zijn. Er is geprobeerd het aantal vooruitwijzingen tot een minimum te beperken zodat het handboek van begin tot einde gelezen kan worden zonder bladeren. Algemene taken Na de inleiding gaat dit deel van het &os; handboek over een aantal vaak gebruikte mogelijkheden van &os;. De volgende hoofdstukken: Geven een inleiding in populaire en handige desktop toepassingen: browsers, productieviteitsgereedschappen, documentviewers, etc; Geven een inleiding in een aantal multimediatoepassingen die in &os; beschikbaar zijn; Geven uitleg over het proces waarmee een aangepaste kernel voor &os; kan worden gemaakt om extra functionaliteit aan een systeen toe te voegen; Beschrijven gedetailleerd het afdruksysteem, zowel voor met een desktop verbonden als met het netwerk verbinden printers; Beschrijven hoe applicaties voor &linux; op &os; kunnen draaien. In een aantal van de hoofdstukken wordt voorkennis aangeraden. Dit staat vermeld in de inleiding van ieder hoofdstuk. &chap.desktop; &chap.multimedia; &chap.kernelconfig; &chap.printing; &chap.linuxemu; Systeembeheer De verdere hoofdstukken van het &os; handboek beslaan alle aspecten van het &os; systeembeheer. Ieder hoofdstuk begint met een omschrijving van wat de leerstof in een hoofdstuk is en wat de verwachte voorkennis is. De hoofdstukken zijn ook ontworpen om gelezen te worden als de specifieke informatie nodig is. Ze hoeven niet in een bepaalde volgorde gelezen te worden en ze hoeven ook niet gelezen te zijn voordat een gebruiker met &os; aan de slag kan. &chap.config; &chap.boot; &chap.users; &chap.security; &chap.jails; &chap.mac; &chap.audit; &chap.disks; &chap.geom; &chap.filesystems; &chap.vinum; &chap.virtualization; &chap.l10n; &chap.cutting-edge; &chap.dtrace; Netwerkcommunicatie Als het om servers gaat die hoge prestaties moeten leveren, wordt wereldwijd vaak &os; toegepast. De hoofdstukken in dit deel behandelen: Seriëe communicatie; PPP en PPP over Ethernet; E-mail; Netwerkdiensten; Firewalls; Overig gevorderd netwerken. Deze hoofdstukken zijn geschreven om gelezen te worden als de informatie nodig is. Ze hoeven niet allemaal in een bepaalde volgorde gelezen te worden. Ze hoeven ook niet allemaal gelezen te worden om &os; in een netwerkomgeving in te zetten. &chap.serialcomms; &chap.ppp-and-slip; &chap.mail; &chap.network-servers; &chap.firewalls; &chap.advanced-networking; Appendix &chap.mirrors; &chap.bibliography; &chap.eresources; &chap.pgpkeys; &freebsd-glossary; &chap.index; &chap.colophon; diff --git a/nl_NL.ISO8859-1/books/handbook/dtrace/chapter.xml b/nl_NL.ISO8859-1/books/handbook/dtrace/chapter.xml index 8b60b6526a..b480136833 100644 --- a/nl_NL.ISO8859-1/books/handbook/dtrace/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/dtrace/chapter.xml @@ -1,414 +1,414 @@ Tom Rhodes Geschreven door René Ladan Vertaald door &dtrace; Overzicht &dtrace; &dtrace;-ondersteuning &dtrace; &dtrace;, ook bekend als Dynamic Tracing, was ontwikkeld door &sun; als een gereedschap om prestatie-bottlenecks in productie- en preproductiesystemen op te sporen. Het is in geen enkel opzicht een debug-gereedschap, maar een gereedschap voor real-time analyse om prestatie- en andere zaken op te sporen. &dtrace; is een opmerkelijk profileringsgereedschap, met een indrukwekkende verzameling mogelijkheden om systeemzaken te diagnosticeren. Het kan ook worden gebruikt om vooraf geschreven scripts te draaien om zo voordeel te halen uit de mogelijkheden. Gebruikers kunnen zelfs hun eigen middelen schrijven door gebruik te maken van de &dtrace; D Language, wat ze in staat stelt om hun profilering aan te passen aan hun specifieke behoeften. Na het lezen van dit hoofdstuk weet u: Wat &dtrace; is en welke mogelijkheden het biedt. De verschillen tussen de &dtrace;-implementatie van &solaris; en degene die door &os; wordt aangeboden. Hoe &dtrace; op &os; aan te zetten en te gebruiken. Voordat u dit hoofdstuk leest, dient u: De beginselen van &unix; en &os; te begrijpen (). Bekend te zijn met de beginselen van kernelconfiguratie en -compilatie (). Wat bekendheid te hebben met beveiliging en hoe het zich verhoudt tot &os; (). Te begrijpen hoe de broncode van &os; te verkrijgen en te herbouwen (). Deze mogelijkheid wordt als experimenteel beschouwd. Van sommige opties kan er functionaliteit ontbreken, andere delen kunnen in het geheel niet werken. In de loop der tijd zal deze mogelijkheid als productierijp worden beschouwd en zal deze documentatie worden aangepast om die situatie te representeren. Implementatieverschillen Hoewel &dtrace; in &os; erg lijkt op degene die in &solaris; zit, zijn er verschillen die uitgelegd moeten worden voordat er verder wordt gegaan. Het primaire verschil dat gebruikers zullen zien is dat &dtrace; specifiek moet worden aangezet op &os;. Er zijn kernelopties en modulen die aangezet moeten worden om &dtrace; juist te laten werken. Deze zullen later worden uitgelegd. Er is een kerneloptie DDB_CTF die gebruikt wordt om ondersteuning voor het laden van CTF-gegevens van kernelmodulen en de kernel zelf. CTF is het Compact C Type Format van &solaris; welke een beperkte vorm van debuginformatie bevat die vergelijkbaar is met DWARF en de befaamde stabs. Deze CTF-gegevens worden door de bouwmiddelen ctfconvert en ctfmerge aan de binairen toegevoegd. Het hulpmiddel ctfconvert parseert DWARF ELF-debug-secties die door de compiler zijn aangemaakt en ctfmerge voegt CTF ELF-secties van objecten samen in hun executables of gedeelde bibliotheken. Meer informatie over hoe dit voor de bouw van de kernel en &os; aan te zetten komt eraan. Sommige aanbieders voor &os; verschillen van die voor &solaris;. De meest opmerkelijke is de aanbieder dtmalloc, welke het volgen van malloc() op soort in de &os;-kernel toestaat. Alleen root mag &dtrace; op &os; gebruiken. Dit heeft te maken met beveiligingsverschillen, &solaris; heeft enkele beveiligingscontroles op laag niveau die nog niet bestaan in &os;. Hierom is /dev/dtrace/dtrace strikt beperkt tot root. Tenslotte valt de &dtrace;-software onder de CDDL-licentie van &sun;. De Common Development and Distribution License wordt bij &os; geleverd, zie /usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE of bekijk het online op . Deze licentie houdt in dat een &os;-kernel met de &dtrace;-opties nog steeds onder de BSD-licentie valt; de CDDL komt echter op de proppen wanneer de modulen in binaire vorm worden verspreid, of wanneer de binairen zijn geladen. Ondersteuning voor &dtrace; aanzetten Voeg de volgende regels toe aan het kernelinstellingenbestand om ondersteuning voor &dtrace; aan te zetten: options KDTRACE_HOOKS options DDB_CTF Gebruikers van de AMD64-architectuur zullen de volgende regel aan hun kernelinstellingenbestand willen toevoegen: options KDTRACE_FRAME Deze optie biedt ondersteuning voor de mogelijkheid FBT. &dtrace; zal zonder deze optie werken; er zal echter beperkte ondersteuning zijn voor het volgen van functiegrenzen. Alle broncode moet herbouwd en geherinstalleerd worden met de CTF-opties. Om deze taak te volbrengen, wordt de &os;-broncode herbouwd met: &prompt.root; cd /usr/src &prompt.root; make WITH_CTF=1 kernel Het systeem moet opnieuw gestart worden. Nadat opnieuw is opgestart en de nieuwe kernel in het geheugen is geladen, dient ondersteuning voor de Korn-shell te worden toegevoegd. Dit is nodig omdat de verschillende hulpmiddelen van &dtrace;Toolkit in ksh zijn geschreven. Installeer shells/ksh93. Het is ook mogelijk om deze hulpmiddelen in shells/pdksh of shells/mksh te draaien. Als laatste dient de huidige &dtrace;Toolkit verkregen te worden. Indien u &os; 10 draait, vindt u de &dtrace;Toolkit in /usr/share/dtrace. In andere gevallen kunt u de &dtrace;Toolkit installeren via de port sysutils/DTraceToolkit. &dtrace; gebruiken Voordat er gebruik wordt gemaakt van de functionaliteit van &dtrace;, moet het &dtrace;-apparaat bestaan. Geef het volgende commando om het apparaat te laten: &prompt.root; kldload dtraceall Ondersteuning van &dtrace; zou nu beschikbaar moeten zijn. De beheerder kan het volgende commando uitvoeren om alle sondes te bekijken: &prompt.root; dtrace -l | more Alle uitvoer wordt aan het hulpmiddel more doorgegeven omdat het snel de schermbuffer zal laten overstromen. &dtrace; kan nu als werkend worden beschouwd. Het is nu tijd om de gereedschapskist te bekijken. De gereedschapskist is een verzameling van kant-en-klare scripts die met &dtrace; gedraaid kunnen worden om informatie over het systeem te verzamelen. Er zijn scripts om open bestanden, geheugen, CPU-gebruik, en nog veel meer te controleren. Pak de scripts uit met het volgende commando: &prompt.root; gunzip -c DTraceToolkit* | tar xvf - Ga naar die map met cd en zet de uitvoerpermissies voor alle bestanden waarvan de naam uit kleine letters bestaat, op 755. De inhoud van al deze scripts moet veranderd worden. Degenen die naar /usr/bin/ksh verwijzen dienen naar /usr/local/bin/ksh te verwijzen, de anderen die /usr/bin/sh gebruiken dienen gewijzigd te worden om /bin/sh te gebruiken, en tenslotte dienen degenen die /usr/bin/perl gebruiken veranderd te worden om /usr/local/bin/perl te gebruiken. Op dit moment is het voorzichtig om de lezer eraan te herinneren dat de ondersteuning voor &dtrace; in &os; niet compleet en experimenteel is. Veel van deze scripts zullen niet werken omdat ze of te &solaris;-specifiek zijn of omdat ze sondes gebruiken die momenteel niet ondersteund worden. Op het moment van schrijven worden slechts twee scripts van de &dtrace; Toolkit volledig ondersteund in &os;: de scripts hotkernel en procsystime. Dit zijn de twee die we in de volgende gedeelten van deze sectie zullen bekijken. De hotkernel is ontworpen om te identificeren welke functie de meeste kerneltijd gebruikt. Als het normaal gedraaid wordt, zal het uitvoer die op de volgende lijkt produceren: &prompt.root; cd /usr/share/dtrace/toolkit &prompt.root; ./hotkernel Sampling... Hit Ctrl-C to end. De systeembeheerder moet de toetsencombinatie CtrlC gebruiken om het proces te stoppen. Nadat het gestopt is, zal het script een lijst van kernelfuncties en timinginformatie weergeven, waarbij de uitvoer in volgorde van toenemende tijd is gesorteerd: kernel`_thread_lock_flags 2 0.0% 0xc1097063 2 0.0% kernel`sched_userret 2 0.0% kernel`kern_select 2 0.0% kernel`generic_copyin 3 0.0% kernel`_mtx_assert 3 0.0% kernel`vm_fault 3 0.0% kernel`sopoll_generic 3 0.0% kernel`fixup_filename 4 0.0% kernel`_isitmyx 4 0.0% kernel`find_instance 4 0.0% kernel`_mtx_unlock_flags 5 0.0% kernel`syscall 5 0.0% kernel`DELAY 5 0.0% 0xc108a253 6 0.0% kernel`witness_lock 7 0.0% kernel`read_aux_data_no_wait 7 0.0% kernel`Xint0x80_syscall 7 0.0% kernel`witness_checkorder 7 0.0% kernel`sse2_pagezero 8 0.0% kernel`strncmp 9 0.0% kernel`spinlock_exit 10 0.0% kernel`_mtx_lock_flags 11 0.0% kernel`witness_unlock 15 0.0% kernel`sched_idletd 137 0.3% 0xc10981a5 42139 99.3% Het script werkt ook met kernelmodules. Draai het script met de vlag om deze mogelijkheid te gebruiken: &prompt.root; ./hotkernel -m Sampling... Hit Ctrl-C to end. ^C MODULE COUNT PCNT 0xc107882e 1 0.0% 0xc10e6aa4 1 0.0% 0xc1076983 1 0.0% 0xc109708a 1 0.0% 0xc1075a5d 1 0.0% 0xc1077325 1 0.0% 0xc108a245 1 0.0% 0xc107730d 1 0.0% 0xc1097063 2 0.0% 0xc108a253 73 0.0% kernel 874 0.4% 0xc10981a5 213781 99.6% Het script procsystime vangt en beeldt het tijdsgebruik van systeemaanroepen af voor een gegeven PID of procesnaam. In het volgende voorbeeld wordt er een nieuwe instantie van /bin/csh gedraaid. Het procsystime werd uitgevoerd en bleef wachten terwijl er enkele commando's op de andere instantie van csh werden getypt. Dit zijn de resultaten van deze test: &prompt.root; ./procsystime -n csh Tracing... Hit Ctrl-C to end... ^C Elapsed Times for processes csh, SYSCALL TIME (ns) getpid 6131 sigreturn 8121 close 19127 fcntl 19959 dup 26955 setpgid 28070 stat 31899 setitimer 40938 wait4 62717 sigaction 67372 sigprocmask 119091 gettimeofday 183710 write 263242 execve 492547 ioctl 770073 vfork 3258923 sigsuspend 6985124 read 3988049784 Zoals te zien is, lijkt de systeemaanroep read() de meeste tijd in nanoseconden te gebruiken en gebruikte de systeemaanroep getpid() de minste hoeveelheid tijd. De taal D De &dtrace;-gereedschapskist bevat vele scripts in de speciale taal van &dtrace;. Deze taal wordt de taal D genoemd door de documentatie van &sun;, en lijkt sterk op C++. Een diepgaande discussie over de taal valt buiten het bereik van dit document. Het wordt uitgebreid behandeld op . + url="http://wikis.oracle.com/display/DTrace/Documentation">. diff --git a/nl_NL.ISO8859-1/books/handbook/eresources/chapter.xml b/nl_NL.ISO8859-1/books/handbook/eresources/chapter.xml index 8c8bd7b2a3..0f940acc85 100644 --- a/nl_NL.ISO8859-1/books/handbook/eresources/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/eresources/chapter.xml @@ -1,2430 +1,2406 @@ 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 email, webfora, 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 De mailinglijsten zijn de meest directe manier om vragen te stellen aan of een technische discussie te beginnen met een geconcentreerd &os;-publiek. Er is een grote verscheidenheid aan lijsten met betrekking tot verschillende &os;-onderwerpen. Door uw vragen aan de meest geschikte mailinglijst te stellen bent u ongetwijfeld verzekerd van een sneller en accurater antwoord. De doelstellingen van de verschillende lijsten staan onderaan dit document. Lees alstublieft 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. Als u wilt testen of u naar de &os; lijsten email kunt versturen, stuur dan een bericht naar &a.test.name;. Stuur alstublieft geen testberichten naar andere lijsten. 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. Merk op dat dit ook betekent dat berichten die naar de mailinglijsten van &os; worden verzonden tot in de oneindigheid worden gearchiveerd. Overweeg, wanneer het beschermen van privacy belangrijk is, om een tweede emailadres dat weggegooid kan worden te gebruiken en om alleen publieke informatie te posten. Lijstsamenvatting Algemene lijsten: De volgende zijn algemene lijsten waarop vrijelijk (en aangemoedigd) geabonneerd kan worden: Lijst Doel &a.advocacy.name; &os; Evangelisatie &a.announce.name; - Belangrijke gebeurtenissen en projectdoelen + Belangrijke gebeurtenissen en projectdoelen + (gemodereerd) &a.arch.name; Architectuur en ontwerp discussies &a.bugbusters.name; Discussie over het onderhoud van de &os; probleemrapportendatabase en aanverwante zaken &a.bugs.name; Bugbeschrijvingen &a.chat.name; Niet-technische onderwerpen met betrekking tot de &os;-gemeenschap &a.chromium.name; &os; specifieke Chromium problemen &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.questions.name; Gebruikersvragen en technische ondersteuning &a.security-notifications.name; - Beveiligingswaarschuwingen + Beveiligingswaarschuwingen (gemodereerd) &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 stuurprogramma's voor de &adaptec; AIC 7xxx &a.amd64.name; - Porten van &os; naar AMD64-systemen + Porten van &os; naar AMD64-systemen (gemodereerd) &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.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.desktop.name; &os; gebruiken op en verbeteren voor bureaubladen &a.doc.name; Het maken van &os;-gerelateerde documenten &a.drivers.name; Apparaatstuurprogramma's schrijven voor &os; &a.eclipse.name; Gebruikers van Eclipse IDE, hulpprogramma's, cliëntapplicaties en ports &a.eol.name; Ondersteuning voor &os;-gerelateerde software welke niet langer ondersteund worden door het &os;-project. &a.embedded.name; &os; gebruiken in embedded applicaties. &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.gecko.name; Discussies over de Gecko Rendering Engine &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.infiniband.name; Infiniband op &os; &a.ipfw.name; Technische discussie over het herontwerp van de IP-firewallcode &a.isdn.name; ISDN-ontwikkelaars &a.jail.name; Discussies over de &man.jail.8;-faciliteiten. &a.java.name; &java; ontwikkelaars en mensen die &jdk;s porten naar &os; &a.kde.name; Porten van KDE en KDE applicaties &a.lfs.name; Porten van LFS naar &os; &a.mips.name; Porten van &os; naar &mips; &a.mobile.name; Discussie over mobiel computeren &a.mono.name; Mono en C# applicaties op &os; &a.mozilla.name; Porten van Mozilla naar &os; &a.multimedia.name; Multimedia-applicaties &a.newbus.name; Technische discussies over busarchitecturen &a.net.name; Discussies over netwerken en TCP/IP-broncode &a.numerics.name; Discussies over implementaties van hoge kwaliteit van functies in libm &a.office.name; Kantoortoepassingen op &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 firewallsysteem &a.platforms.name; Ports naar niet &intel;-architectuurplatformen &a.ports.name; Discussie over de Portscollectie &a.ports-announce.name; Belangrijk nieuws en belangrijke instructies over de - Portscollectie + Portscollectie (gemodereerd) &a.ports-bugs.name; Discussie over bugs in ports en PR's &a.ppc.name; Porten van &os; naar de &powerpc; &a.proliant.name; Technische discussie over &os; op HP Proliant serverplatforms &a.python.name; &os;-specifieke zaken over Python &a.realtime.name; Ontwikkeling van realtime-uitbreidingen voor &os; &a.rc.name; Discussie over het rc.d-systeem en de ontwikkeling daarvan &a.ruby.name; &os;-specifieke discussies over Ruby &a.scsi.name; Het SCSI-subsysteem &a.security.name; Beveiligingsonderwerpen betreffende &os; &a.small.name; &os; gebruiken in embedded toepassingen, verouderd, gebruik in plaats hiervan &a.embedded.name; &a.snapshots.name; Aankondigingen van ontwikkel-snapshots van &os; &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.sysinstall.name; Ontwikkeling van &man.sysinstall.8; &a.tcltk.name; &os;-specifieke discussies over Tcl/Tk &a.threads.name; Threading in &os; &a.tilera.name; &os; porteren naar de Tilera CPU-familie &a.tokenring.name; Ondersteuning voor Token Ring in &os; &a.toolchain.name; Onderhoud van de ingebouwde toolchain van &os; &a.usb.name; Discussie over &os;-ondersteuning voor USB &a.virtualization.name; Discussies over verscheidene virtualisatietechnieken ondersteund door &os; &a.vuxml.name; Discussie over VuXML-infrastructuur &a.x11.name; Onderhoud en ondersteuning voor X11 op &os; &a.xen.name; Discussies over het overbrengen van &os; naar &xen; — implementatie en gebruik &a.xfce.name; Overbrengen en onderhouden van XFCE voor &os; &a.zope.name; Zope voor &os; — overbrengen en onderhouden 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 mirrorsites draaien (infrastructurele ondersteuning) &a.usergroups.name; Gebruikersgroepcoördinatie - - &a.vendors.name; - - Coördinatie van vooruitgaven met - wederverkopers - - &a.wip-status.name; &os; Werk-In-Uitvoering status &a.wireless.name; Discussies over de ontwikkeling van de 802.11-stack, gereedschappen en stuurprogramma's. - - - &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. SVN-lijsten: De volgende lijsten zijn voor mensen met interesse in het zien van logboekberichten voor wijzigingen in verschillende onderdelen van de broncodeboom. Het zijn Alleen-lezen-lijsten waar geen email heen gezonden hoort te worden. Lijst Broncodegebied Broncodebeschrijving &a.svn-doc-all.name; /usr/doc Alle wijzigingen aan het doc-Subversion-reservoir (behalve user, projects en translations) &a.svn-doc-head.name; /usr/doc Alle wijzigingen aan de tak head van het doc-Subversion-reservoir &a.svn-doc-projects.name; /usr/doc/projects Alle wijzigingen in het projects-gebied van het doc-Subversion-reservoir &a.svn-doc-svnadmin.name; /usr/doc Alle wijzigingen aan de administratieve scripts, haken en andere configuratiegegevens van het doc-Subversion-reservoir &a.svn-ports-all.name; /usr/ports Alle wijzigingen aan het ports-Subversion-reservoir &a.svn-ports-head.name; /usr/ports Alle wijzigingen aan de tak head van het ports-Subversion-reservoir &a.svn-ports-svnadmin.name; /usr/ports Alle wijzigingen aan de administratieve scripts, haken en andere configuratiegegevens van het ports-Subversion-reservoir &a.svn-src-all.name; /usr/src Alle wijzigingen in het src-Subversion-repository (behalve user en projects) &a.svn-src-head.name; /usr/src Alle wijzigingen aan de head-tak van het src-Subversion-repository (de tak &os;-CURRENT) &a.svn-src-projects.name; /usr/projects Alle wijzigingen aan het gebied projects van het src-Subversion-repository &a.svn-src-release.name; /usr/src Alle veranderingen aan het gebied releases van het src-Subversion-repository &a.svn-src-releng.name; /usr/src Alle veranderingen aan de takken releng van het src-Subversion-repository (de beveiligings- / uitgavetakken) &a.svn-src-stable.name; /usr/src Alle veranderingen aan alle stable-takken van het src-Subversion-repository &a.svn-src-stable-6.name; /usr/src Alle veranderingen aan de stable/6-tak van het src-Subversion-repository &a.svn-src-stable-7.name; /usr/src Alle veranderingen aan de stable/7-tak van het src-Subversion-repository &a.svn-src-stable-8.name; /usr/src Alle veranderingen aan de stable/8-tak van het src-Subversion-repository &a.svn-src-stable-9.name; /usr/src Alle veranderingen aan de stable/9-tak van het src-Subversion-repository &a.svn-src-stable-other.name; /usr/src Alle veranderingen aan de oudere stable-takken van het src-Subversion-repository &a.svn-src-svnadmin.name; /usr/src Alle veranderingen aan de administratieve scripts, haken, en andere configuratiegegevens van het src-Subversion-repository &a.svn-src-user.name; /usr/src Alle veranderingen aan het experimentele gebied user van het src-Subversion-repository &a.svn-src-vendor.name; /usr/src Alle wijzigingen aan het verkoperswerkgebied van het src-Subversion-repository 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 een email 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 email van een lijst staat geklikt worden. Het is ook mogelijk om een email 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 email zonder dat daarvoor toestemming is gegeven, wordt niet op prijs gesteld. Er zijn hoe dan ook zeer weinig gevallen waarin zoiets dergelijks wel binnen de doelstelling van een lijst valt, waardoor dat soort emails 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 uitgaven. 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-lagen 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.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 discussies over 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 Webinterface 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.chromium.name; &os; specifieke Chromium problemen Dit is een lijst voor het bespreken van Chromium ondersteuning voor &os;. Dit is een technische lijst om de ontwikkelingen en installatie van Chromium te bespreken. &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.desktop.name; &os; gebruiken op en verbeteren voor bureaubladen Dit is een forum voor het bespreken van &os; op desktops. Het is vooral een plaats voor porters en gebruikers van bureaubladomgevingen om zaken te bespreken en de ondersteuning van &os; op het bureaublad te verbeteren. &a.doc.name; Documentatieproject 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.drivers.name; Apparaatstuurprogramma's schrijven voor &os; Dit is een forum voor technische discussie met betrekking tot apparaatstuurprogramma's op &os;. Het is vooral een plaats voor schrijvers van apparaatstuurprogramma's om vragen te stellen over hoe apparaatstuurprogramma's te schrijven met de API's in de kernel van &os;. &a.eclipse.name; Gebruikers van Eclipse IDE, hulpprogramma's, cliëntapplicaties en ports De doelstelling van deze lijst is wederzijdse ondersteuning bieden voor alles dat te maken heeft met het kiezen, installeren, gebruiken, ontwikkelen, en onderhouden van Eclipse IDE, hulpprogramma's en cliëntapplicaties op het &os;-platform en te ondersteunen bij het porten van Eclipse IDE en plugins naar de &os;-omgeving. Het is ook de bedoeling om het uitwisselen van informatie tussen de Eclipse gemeenschap en de &os;-gemeenschap te bevorderen zodat beiden ervan kunnen profiteren. Hoewel deze lijst voornamelijk is gericht op de behoeften van gebruikers van Eclipse, wordt ook een forum geboden voor hen die &os;-specifieke applicaties willen ontwikkelen met het Eclipse raamwerk. &a.eol.name; Ondersteuning van &os; gerelateerde software welke niet meer ondersteund wordt door het &os;-project. Deze lijst is voor degenen die geïnteresseerd zijn in het leveren of gebruiken van ondersteuning voor &os;-gerelateerde software voor welke het &os;-project geen ondersteuning meer biedt (in de vorm van beveiligingsadviezen en patches). &a.embedded.name; &os; gebruiken in embedded applicaties Deze lijst heeft tot doel om te discussieren over &os; in embedded systemen. Dit is een technische mailinglijst waarbij men alleen technische inhoud verwacht. Voor het belang van deze lijst definiëren we embedded systemen als computersystemen die geen desktop-systemen zijn en meestal slechts één doel hebben ten opzichte van gewone systemen. Voorbeelden bevatten onder andere: diverse soorten telefoonsets, netwerkapparatuur zoals routers, switches en PBX'en, op afstand bestuurbare meetapparatuur, PDA's, Point of Sale systemen etc. &a.emulation.name; Emulatie van andere systemen zoals &linux;, &ms-dos; en &windows; Dit is een forum voor technische discussie met betrekking tot het draaien van programma's op &os; die zijn geschreven voor andere besturingssystemen. &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, busapparaten 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.gecko.name; Gecko Rendering Engine Dit is een forum over Gecko applicaties die &os; gebruiken. De discussie concentreert zich op toepassingen van Gecko Ports, hun installatie, hun ontwikkeling en hun ondersteuning binnen &os;. &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 bureaubladomgeving GNOME voor &os;. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. &a.infiniband.name; Infiniband op &os; Technische mailinglijst over Infiniband, OFED en OpenSM op &os;. &a.ipfw.name; IP Firewall Dit is het forum voor technische bespreking van het herontwerp van de IP-firewallcode 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 platform IA-64 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. Email 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.mono.name; Mono en C# applicaties op &os; Dit is een lijst voor discussies met betrekking tot het Mono-ontwikkelraamwerk op &os;. Dit is een technische mailinglijst. Het is bedoeld voor individuen die actief werken aan het overbrengen van Mono of C# applicaties naar &os;, om problemen naar voren te brengen of alternatieve oplossingen te bespreken. Individuen die geïnteresseerd zijn in het volgen van de technische discussie zijn ook welkom. &a.office.name; Kantoortoepassingen op &os; De discussie richt zich op kantoortoepassingen, hun installatie, hun ontwikkeling en hun ondersteuning binnen &os;. &a.ops-announce.name; Aankondigingen over de projectinfrastructuur Deze mailinglijst is bedoeld voor mensen die geïnteresseerd zijn in veranderingen en zaken die te maken hebben met de infrastructuur van het FreeBSD.org project. - Deze lijst is strict voor aankondigingen: geen antwoorden, - verzoeken, discussies of meningen. + Deze gemodereerde lijst is strict voor aankondigingen: geen + antwoorden, verzoeken, discussies of meningen. &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 prestatiegerelateerde 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 zich 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 prestatiegerelateerde onderwerpen. &a.pf.name; Discussie en vragen over het pakketfilter firewallsysteem Discussie over het pakketfilter (pf) firewallsysteem met betrekking tot &os;. Technische discussie en gebruikersvragen zijn beiden welkom. Deze lijst is ook de plaats om het raamwerk ALTQ QoS te bespreken. &a.pkg.name; Discussies over binair pakketbeheer en pakketgereedschappen Discussies over alle aspecten over het beheren van &os;-systemen door middel van het gebruik van binaire pakketten om software te installeren, inclusief de gereedschappen en formaten van binaire pakketten, hun ontwikkeling en ondersteuning binnen &os;, het beheer van pakketreservoirs en pakketten van derde partijen. Merk op dat discussies over poorten die onjuiste pakketten genereren over het algemeen als problemen met poorten moet worden gezien en dus ongeschikt zijn voor deze lijst. &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.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-announce.name; Belangrijk nieuws en belangrijke instructies over &os; Portscollectie Belangrijk nieuws voor ontwikkelaars, porters en gebruikers van de Portscollectie (/usr/ports), waaronder veranderingen aan de architectuur/infrastructuur, nieuwe mogelijkheden, kritische opwaardeerinstructies, en uitgave-informatie. Dit is een mailinglijst met een laag volume, bedoeld voor aankondigingen. &a.ports-bugs.name; Discussie over ports bugs Discussie over probleemrapportages 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.proliant.name; Technische discussie over &os; op HP Proliant serverplatforms Deze mailinglijst wordt gebruikt voor technische discussie over het gebruik van &os; op HP ProLiant servers, inclusief het bespreken van ProLiant-specifieke stuurprogramma's, beheersoftware, gereedschappen voor instellingen en BIOS-updates. Dit is daaarom ook de uitgesproken plaats voor het bespreken van de modules hpasmd, hpasmcli, en hpacucli. &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 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.ruby.name; &os;-specifieke discussies over Ruby Dit is een lijst voor discussies gerelateerd aan de Ruby-ondersteuning op &os;. Dit is een technische mailinglijst. Het is bedoeld voor individuen die aan Ruby-ports, bibliotheken van derde partijen, en raamwerken werken. Individuen die geïnteresseerd zijn in de technische discussie zijn ook welkom. &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 embedded &os;-installaties besproken. Dit is een technische mailinglijst waarop slechts strikt technische bijdragen worden verwacht. Deze lijst is vervangen door &a.embedded.name; &a.snapshots.name; Aankondigingen van ontwikkel-snapshots van &os; Deze lijst houdt u op de hoogte over de beschikbaarheid van nieuwe ontwikkel-snapshots voor de takken head/ en stable/ van &os;. &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.toolchain.name; Onderhoud van de ingebouwde toolchain van &os; Dit is de mailinglijst bedoeld voor discussies over het onderhoud van de toolchain die met &os; wordt geleverd. Dit zou de toestand van Clang en GCC kunnen omvatten, maar ook software als assemblers, linkers en debuggers. &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;. - - - &a.virtualization.name; Discussies over verscheidene virtualisatietechnieken ondersteund door &os; Een lijst om de verscheidene virtualisatietechnieken die door &os; worden ondersteund te bespreken. Aan de ene kant zal de nadruk liggen op de implementatie van de basale functionaliteit alsook op het toevoegen van nieuwe mogelijkheden. Aan de andere kant zullen gebruikers een forum hebben om om hulp te vragen bij problemen of om hun usecases te bespreken. &a.wip-status.name; &os; Werk-In-Uitvoering status Deze mailinglijst kan gebruikt worden om de schepping en voortgang van uw &os;-gerelateerd werk aan te kondigen. Berichten zullen gemodereerd worden. Het wordt gesuggereerd om het bericht "Aan:" een &os;-mailinglijst dat het onderwerp beter dekt te sturen en deze lijst alleen te "BCC:"-en. Op deze manier kan uw werk-in-uitvoering ook op de onderwerpslijst worden bediscussieerd, aangezien discussies op deze lijst niet zijn toegestaan. Kijk in de archieven voor voorbeelden van geschikte berichten. Een redactioneel overzicht van de berichten aan deze lijst kan om de paar maanden naar de &os;-website gezonden worden als deel van de Status Reports . Meer voorbeelden en oude rapportages zijn daar ook te vinden. &a.wireless.name; Discussies over de 802.11-stack, de ontwikkeling van gereedschappen voor stuurprogramma's De &os;-wireless lijst richt zich op de 802.11-stack (sys/net80211) en de ontwikkeling van stuurprogramma's en gereedschappen. Dit omvat bugs, nieuwe eigenschappen en onderhoud. &a.xen.name; Discussies over het porteren van &os; naar &xen; — implementatie en gebruik Een lijst die zich richt op de &os; &xen; port. De verwachte hoeveelheid verkeer is laag genoeg zodat het voor zowel technische discussies over de implementatie- en ontwerpdetails als voor zaken over administratief gebruik bedoeld is. &a.xfce.name; XFCE Dit is een forum voor discussies gerelateerd aan de XFCE-omgeving voor &os;. Dit is een technische mailinglijst. Het is bedoeld voor degenen die actief werken aan het porten van XFCE naar &os;, om problemen naar voren te brengen of alternatieve oplossingen te bespreken. Personen die geïnteresseerd zijn in het volgen van de technische discussie zijn ook welkom. &a.zope.name; Zope Dit is een forum voor discussies die verwant zijn aan het brengen van de Zope-omgeving naar &os;. Dit is een technische mailinglijst. Het is bedoeld voor individuen die actief werken aan het overbrengen van Zope naar &os;, om problemen aan te dragen of alternatieve oplossingen te bespreken. Individuen die geïnteresseerd zijn in het volgen van de technische discussie zijn ook welkom. Filters op de mailinglijsten De &os;-mailinglijsten worden op verschillende manieren gefilterd om het doorsturen van spam, virussen, en andere ongewenste email 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-inhoudtype 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-inhoudtypen, maar de bovenstaande lijst zal gelden voor de meeste mailinglijsten. Als een email zowel een HTML- als een platte tekstversie 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 vele andere waarin &os; wordt besproken of die anderszins relevant zijn voor gebruikers van &os;. 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.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 webservers Fora, blogs, en sociale netwerken The &os; Forums bieden een webgebaseerd discussieforum voor vragen en technische discussies over &os;. Planet &os; biedt een samengestelde feed van tientallen blogs geschreven door &os;-ontwikkelaars. Vele ontwikkelaars gebruiken dit om korte notities te posten over waaraan ze werken, nieuwe patches, en ander werk in uitvoering. Het BSDConferences YouTube Channel biedt een verzameling van video's van hoge kwaliteit van wereldwijde BSD-conferenties. Dit is een prima manier om presentaties van hoofdontwikkelaars over nieuw werk in &os; te zien. Officiële spiegels &chap.eresources.www.inc; Email-adressen De onderstaande gebruikersgroepen bieden &os;-gerelateerde email-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 ukfreebsd@uk.FreeBSD.org Lee Johnston lee@uk.FreeBSD.org diff --git a/nl_NL.ISO8859-1/books/handbook/jails/chapter.xml b/nl_NL.ISO8859-1/books/handbook/jails/chapter.xml index c929bc31a4..eccecab9e8 100644 --- a/nl_NL.ISO8859-1/books/handbook/jails/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/jails/chapter.xml @@ -1,1070 +1,1071 @@ Matteo Riondato Bijgedragen door Remko Lodder Vertaald door Jails jails Overzicht Dit hoofdstuk levert een uitleg van wat &os; jails zijn en hoe ze gebruikt kunnen worden. Jails, soms ook wel bekend als een verbeterde vervanging van chroot omgevingen, zijn een erg krachtige tool voor systeem beheerders, maar het standaard gedrag kan ook interessant zijn voor gevorderde gebruikers. Jails zijn een krachtig gereedschap, maar zijn geen zilveren kogel qua beveiliging. Hoewel het belangrijk is om op te merken dat het onmogelijk is voor een gevangen proces om zelf te ontsnappen, zijn er verschillende manieren waarop een ongeprivilegieerde gebruiker buiten een jail kan samenwerken met een geprivilegieerde gebruiker binnen de jail en daarmee verhoogde privileges kan krijgen in de gastheeromgeving. De meeste van deze aanvallen kunnen worden voorkomen door ervoor te zorgen dat de jail-root niet beschikbaar is voor ongeprivilegieerde gebruikers binnen de gastheeromgeving. Buiten dat geldt als algemene regel dat onvertrouwde gebruikers met geprivilegieerde toegang tot een jail geen toegang tot de gastheeromgeving moet worden gegeven. Na het lezen van dit hoofdstuk weet de lezer: Wat een jail is, en welk doel het kan dienen in een &os; installatie. Hoe men een jail opbouwt, start en stopt. De basis over jail beheer, zowel van binnen in de jail, als van buitenaf. Andere bronnen met nuttige informatie over jails zijn: De &man.jail.8; handleiding. Hier kan de volledige referentie gevonden worden van het jail commando — de administratieve tool die in &os; gebruikt kan worden om &os; jails mee te beheren, te starten en te stoppen. De mailinglijsten en de archieven hiervan. De archieven van de &a.questions; en andere mailing lijsten die gehost worden door de &a.mailman.lists; bevatten reeds een rijke bron van informatie over jails. Het zou altijd aantrekkelijk moeten zijn om informatie in de archieven te zoeken, of een nieuwe vraag stellen aan de &a.questions.name; mailinglijst. Termen en begrippen van jails Om een beter begrip te geven over de onderdelen van &os; die gerelateerd zijn aan jails, de werking ervan, en hoe ze omgaan met de rest van &os; worden de volgende termen gebruikt in het hoofdstuk: &man.chroot.8; (commando) Hulpmiddel dat de systeemaanroep &man.chroot.2; van &os; gebruikt om de rootmap van een proces en alle afstammelingen te veranderen. &man.chroot.2; (omgeving) Een omgeving van processen die draaien in een chroot. Dit is inclusief bronnen die gebruikt worden, zoals bijvoorbeeld het gedeelte van het bestandssysteem dat zichtbaar is, de gebruiker en groep ID's welke beschikbaar zijn, netwerkkaarten en andere IPC-mechanismes, etcetera. &man.jail.8; (commando) De systeem utility die het mogelijk maakt om processen binnenin een jail te starten. host (systeem, processen, gebruiker, etc.) Het controlerende systeem van een jail omgeving. Het host systeem heeft toegang tot alle beschikbare hardware bronnen en kan processen controleren zowel buiten als binnenin een jail. Één van de belangrijkste verschillen van het host systeem met een jail zijn de limitaties die van toepassing zijn op super-gebruiker processen binnenin een jail, niet geforceerd worden voor processen in het host systeem. hosted (systeem, processen, gebruiker, etc.) Een proces, gebruiker, of andere entiteit wiens toegang tot bronnen is gelimiteerd door een &os; jail. Introductie Omdat systeem beheer een complexe en enorme taak is, zijn er vele sterke tools ontwikkeld om het leven van een systeem beheerder makkelijker te maken. Deze tools leveren meestal verbeteringen op de manier waarop systemen worden geïnstalleerd, geconfigureerd en onderhouden. Een deel van de taken waarvan verwacht wordt dat die uitgevoerd wordt door de systeem beheerder is het goed configureren van de beveiliging van een systeem, zodat het kan blijven doorgaan met het serveren van de taak, zonder dat er beveiligingsproblemen optreden. Één van de tools welke gebruikt kan worden om de beveiliging van een &os; systeem te verbeteren zijn jails. Jails zijn geïntroduceerd in &os; 4.X door &a.phk;, maar zijn grotendeels verbeterd in &os; 5.X om ze nog sterker en krachtiger te maken. De ontwikkeling gaat nog steeds door met verbeteringen voor het gebruik, performance, betrouwbaarheid en beveiliging. Wat is een jail BSD achtige systemen hebben sinds 4.2-BSD ondersteuning voor &man.chroot.2;. De &man.chroot.8; utility kan gebruikt worden om de root directory van een set processen te wijzigen waardoor een veilige omgeving wordt gecreeërd voor de rest van het systeem. Processen die gemaakt worden in een chroot omgeving kunnen bestanden en bronnen daarbuiten niet benaderen. Daardoor zou een compromitering van een dienst die in een chroot omgeving draait niet direct betekenen dat het hele systeem gecompromiteerd is. De &man.chroot.8; utility is goed genoeg voor simpele taken, waarbij flexibiliteit en geavanceerde en complexe opties niet nodig zijn. Sinds het uitvinden van het chroot concept, zijn er vele mogelijkheden gevonden om hieruit te kunnen komen en alhoewel ze verbeterd zijn in moderne versies van &os;, werd het duidelijk dat &man.chroot.2; niet de meest ideale oplossing was voor het beveiligen van diensten. Er moest een nieuw subsysteem ontwikkeld worden. Dit is één van de redenen waarom jails zijn ontwikkeld. Jails zijn een verbeterd concept van de &man.chroot.2; omgeving, in verschillende opzichten. In een traditionele &man.chroot.2; omgeving worden processen alleen gelimiteerd in het deel van het bestandssysteem die ze kunnen benaderen. De rest van de systeem bronnen (zoals de set van systeem gebruikers, de draaiende processen of het netwerk subsysteem) worden gedeeld door het chrooted proces en de processen op het host systeem. Jails breiden dit model uit door het niet alleen virtualizeren van de toegang tot het bestandssysteem maar ook tot de set van gebruikers, het netwerk subsysteem van de &os; kernel en een aantal andere delen. Een meer complete set van gespecificeerde controle mogelijkheden die beschikbaar zijn voor het personaliseren van de toegang tot een jail omgeving wordt beschreven in . Een jail heeft vier kenmerken: Een eigen directory structuur — het startpunt van waaruit een jail benaderd wordt. Zodra men in de jail zit, mogen processen niet buiten deze directory structuur komen. Traditionele problemen die &man.chroot.2;'s ontwerp getart hebben, hebben geen invloed op &os; jails. Een hostname — de hostnaam die gebruikt wordt in de jail. Jails worden met name gebruikt voor het hosten van netwerk diensten, daardoor kan het de systeembeheerder heel erg helpen als er beschrijvende hostnames worden gekozen. Een IP adres — deze wordt gekoppeld aan de jail en kan op geen enkele manier worden gewijzigd tijdens het leven van de jail. Het IP adres van een jail is meestal een alias op een reeds bestaande netwerk interface, maar dit is niet noodzakelijk. Een commando — het padnaam van een uitvoerbaar bestand in de jail. Deze is relatief aan de rootdirectory van de jail omgeving en verschilt per situatie, afhankelijk van het type van de specifieke jail omgeving. Buiten deze kenmerken, kunnen jails hun eigen set aan gebruikers en root gebruiker hebben. Uiteraard zijn de mogelijkheden van de root gebruiker beperkt tot de jail omgeving en, vanuit het host systeem gezien, is de root gebruiker geen super-gebruiker. Daarnaast is het de root gebruiker in een jail omgeving niet toegestaan om kritieke operaties uit te voeren op het systeem buiten de gedefinieerde jail omgeving. Meer informatie over de mogelijkheden en beperkingen van de root gebruiker kan gevonden worden in hieronder. Creeëren en controleren van jails Sommige beheerders kiezen ervoor om jails op te delen in de volgende twee types: complete jails, welke een volledig &os; systeem emuleert en service jails, gericht op één applicatie of dienst, mogelijkerwijs draaiende met privileges. Dit is alleen een conceptuele splitsing, de manier van het opbouwen van een jail wordt hierdoor niet veranderd. De &man.jail.8; handleiding is heel duidelijk over de procedure voor het maken van een jail: &prompt.root; setenv D /here/is/the/jail &prompt.root; mkdir -p $D &prompt.root; cd /usr/src &prompt.root; make buildworld &prompt.root; make installworld DESTDIR=$D &prompt.root; make distribution DESTDIR=$D &prompt.root; mount -t devfs devfs $D/dev Het selecteren van een locatie voor een jail is het beste beginpunt. Hier zal de jail fysiek te vinden zijn binnen het bestandssysteem van het host systeem. Een goede keuze kan /usr/jailjailnaam zijn, waar jailnaam de naam is van de jail. Het /usr bestandssysteem heeft meestal genoeg ruimte voor het jail bestandssysteem, wat voor een complete jail betekend dat het eigenlijk een replica is van elk bestand dat standaard aanwezig is binnen het &os; basissysteem. Als u uw userland al heeft herbouwd met make world of make buildworld, dan kunt u deze stap overslaan en uw bestaande userland in de nieuwe jail installeren. Dit commando zal de gekozen fysieke directory vullen met de benodigde binaire bestanden, bibliotheken, handleidingen, etc. Het distribution doel voor make installeert elk benodigd configuratie bestand. In simpelere termen, het installeert alle installeerbare bestanden in /usr/src/etc naar de /etc directory van de jail omgeving: $D/etc. Het koppelen van het &man.devfs.8; bestandssysteem is niet vereist in een jail. Aan de andere kant, vrijwel elke applicatie heeft toegang nodig tot minstens één apparaat, afhankelijk van het doel van het programma. Het is erg belangrijk om toegang tot apparaten te controleren binnenin een jail, omdat incorrecte instellingen een aanvaller de mogelijkheid kunnen geven om vervelende dingen in de jail te doen. De controle over &man.devfs.8; wordt gedaan door middel van rulesets, welke beschreven worden in de &man.devfs.8; en &man.devfs.conf.5; handleidingen. Zodra een jail is geïnstalleerd, kan het opgestart worden door de &man.jail.8; applicatie. De &man.jail.8; applicatie heeft vier benodigde argumenten welke beschreven worden in . Er kunnen ook andere argumenten gebruikt worden, om bijvoorbeeld de jail te starten met de instellingen van een specifieke gebruiker. Het argument hangt af van het type jail, voor een virtueel systeem is /etc/rc een goede keuze, omdat het de reguliere opstart procedure nabootst van een &os; systeem. Voor een dienst jail is het geheel afhankelijk van de dienst of applicatie die in de jail gaat draaien. Jails worden over het algemeen gestart tegelijkertijd met de rest van het systeem. Het &os; rc mechanisme levert een makkelijke manier om dat te doen: Een lijst van jails die opgestart moeten worden tijdens het opstarten van het systeem, moeten worden toegevoegd aan het &man.rc.conf.5; bestand: jail_enable="YES" # Stel dit in op NO om te voorkomen dat er jails gestart worden jail_list="www" # Door spaties gescheiden lijst van jails De jail namen in jail_list mogen alleen alfanumerieke karakters bevatten. Voor elke jail die gespecificeerd is in jail_list moet een groep van &man.rc.conf.5; instellingen worden toegevoegd: jail_www_rootdir="/usr/jail/www" # de hoofd directory van de jail jail_www_hostname="www.example.org" # de hostnaam van de jail jail_www_ip="192.168.0.10" # het IP adres van de jail jail_www_devfs_enable="YES" # moet devfs wel of niet gekoppeld worden in de jail jail_www_devfs_ruleset="www_ruleset" # welke devfs ruleset gebruikt moet worden voor de jail De standaard opstart variabelen in &man.rc.conf.5; gebruiken het /etc/rc bestand om de jail op te starten, wat er vanuit gaat dat de jail een compleet virtueel systeem is. Voor service jails moet het standaard opstart commando worden gewijzigd door het aanpassen van de jail_jailname_exec_start optie. Voor een complete lijst van beschikbare opties, zie de &man.rc.conf.5; handleiding. &man.service.8; kan worden gebruikt om jails handmatig te starten en te stoppen, mits er een overeenkomstige verzameling regels bestaat in /etc/rc.conf. &prompt.root; service jail start www &prompt.root; service jail stop www Er is op dit moment geen nette methode om een jail te stoppen. Dit komt omdat de benodigde applicaties die een nette afsluiting verzorgen, niet beschikbaar zijn in een jail. De beste manier om een jail af te sluiten is door het volgende commando van binnenin de jail uit te voeren of door middel van het &man.jexec.8; commando: &prompt.root; sh /etc/rc.shutdown Meer informatie hierover kan gevonden worden in de &man.jail.8; handleiding. Optimaliseren en administratie Er zijn meerdere opties beschikbaar die ingesteld kunnen worden voor elke jail, en er zijn meerdere mogelijkheden om een &os; host systeem te combineren met jails om een betere scheiding tussen systeem en applicaties te verkrijgen. Deze sectie leert: Een aantal opties zijn beschikbaar voor het optimaliseren van het gedrag en beveiligings beperkingen die geïmplementeerd worden in een jail. Een aantal high-level applicaties die gebruikt worden voor het beheren van jails, welke beschikbaar zijn via de &os; Ports Collectie en kunnen gebruikt worden om een complete jail-gebaseerde oplossing te creeëren. Systeem applicaties voor het optimaliseren van jails onder &os; Het goed kunnen optimaliseren van een jail configuratie wordt veelal gedaan door het instellen van &man.sysctl.8; variabelen. Er bestaat een speciale subtak van sysctl voor het organiseren van alle relevante opties: de security.jail.* hierarchie binnen de &os; kernel. Hieronder staat een lijst van de belangrijkste jail-gerelateerde sysctl variabelen, met informatie over de standaard waarden. De benaming zou zelf beschrijvend moeten zijn, maar voor meer informatie kunnen de &man.jail.8; en &man.sysctl.8; handleidingen geraadpleegd worden. security.jail.set_hostname_allowed: 1 security.jail.socket_unixiproute_only: 1 security.jail.sysvipc_allowed: 1 security.jail.enforce_statfs: 2 security.jail.allow_raw_sockets: 0 security.jail.chflags_allowed: 0 security.jail.jailed: 0 Deze variabelen kunnen door de systeem beheerder gebruikt worden op het host systeem om limitaties toe te voegen of te verwijderen, welke standaard opgedwongen worden aan de root gebruiker. Let op, een aantal beperkingen kan niet worden aangepast. De root gebruiker mag geen bestandssystemen koppelen of ontkoppelen binnenin een &man.jail.8;. De root gebruiker mag ook geen &man.devfs.8; rulesets laden of ontladen, firewall rules plaatsen of andere taken uitvoeren die vereisen dat de in-kernel data wordt aangepast, zoals het aanpassen van de securelevel variabele in de kernel. Het basis systeem van &os; bevat een basis set van applicaties voor het inzien van de actieve jails, en voor het uitvoeren van administratieve commando's in een jail. De &man.jls.8; en &man.jexec.8; commando's zijn onderdeel van het basis systeem en kunnen gebruikt worden voor het uitvoeren van de volgende simpele taken: Het printen van een lijst van actieve jails met het corresponderende jail ID (JID), IP adres, de hostnaam en het pad. Het koppelen met een actieve jail vanuit het host systeem, en voor het uitvoeren van administratieve taken in de jail zelf. Dit is bijzonder handig wanneer de root gebruiker een jail netjes wilt afsluiten. Het &man.jexec.8; commando kan ook gebruikt worden om een shell te starten in een jail om daarmee administratieve taken uit te voeren; bijvoorbeeld met: &prompt.root; jexec 1 tcsh Administratieve applicaties op hoog niveau in de &os; Ports Collection. Tussen de vele software van derde partijen voor jail beheer, is één van de meest complete en bruikbare paketten: sysutils/jailutils. Dit is een set van kleine applicaties, die bijdragen aan &man.jail.8; beheer. Kijk op de web pagina voor meer informatie. Toepassing van jails Daniel Gerzo Bijgedragen door Dienst jails Deze sectie is gebaseerd op een idee van &a.simon; op , en een geupdate artikel door Ken Tom locals@gmail.com. Deze sectie illusteert hoe een &os; systeem opgezet kan worden met een extra laag beveiliging door gebruik te maken van &man.jail.8;. Er wordt vanuit gegaan dat het betrokken systeem minstens RELENG_6_0 draait en dat de informatie eerder in dit hoofdstuk goed begrepen is. Ontwerp Één van de grootste problemen met jails is het beheer van het upgrade proces. Dit is meestal een probleem omdat elke jail vanaf het begin af aan moet worden opgebouwd wanneer er geupdate wordt. Meestal is dit voor een enkele jail geen probleem, omdat het update proces redelijk simpel is, maar het kan een vervelende tijdrovende klus zijn als er meerdere jails zijn. Deze opstelling vereist uitgebreide kennis en ervaring van &os; en zijn mogelijkheden. Als onderstaande stappen te lastig lijken te zijn, wordt aangeraden om een simpeler - systeem te bekijken zoals + systeem te bekijken zoals sysutils/qjail of sysutils/ezjail, welke een simpele manier geeft voor het beheren van &os; jails en niet zo complex is als deze opstelling. Het idee werd geopperd om zulke problemen zoveel als mogelijk te voorkomen door zoveel als mogelijk te delen tussen de verschillende jails op een zo veilig mogelijke manier — door gebruik te maken van alleen-lezen &man.mount.nullfs.8; koppelingen, zodat het upgraden simpeler wordt en het inzetten van jails voor enkele diensten interessanter wordt. Daarnaast geeft het een simpele manier om nieuwe jails toe te voegen of te verwijderen en om deze te upgraden. Voorbeelden binnen deze context zijn: een HTTP server, een DNS server, een SMTP server enzovoorts. De doelen van de opstelling zoals beschreven in dit hoofdstuk zijn: Het creeëren van een simpele en makkelijk te begrijpen jail structuur. Dit impliceert dat er niet elke keer een volledige installworld gedraaid hoeft te worden voor elke jail. Het makkelijk maken van het aanmaken en verwijderen van jails. Het makkelijk maken van het updaten en upgraden van bestaande jails. Het mogelijk maken van het draaien van een eigen gemaakte &os; tak. Paranoia zijn over beveiliging, zoveel mogelijk beperken, om de kans op inbraak zo klein mogelijk te maken. Het zoveel mogelijk besparen van ruimte en inodes. Zoals reeds besproken is dit ontwerp sterk afhankelijk van het hebben van een master-template, welke alleen-lezen (beter bekend als nullfs) gekoppeld is binnen elke jail, en een beschrijfbaar apparaat per jail. Een apparaat kan hierin zijn een aparte fysieke schijf, een partitie, of een door vnodes ondersteunde &man.md.4; apparaat. In dit voorbeeld wordt gebruik gemaakt van lezen-schrijven nullfs koppelpunten. Het gebruikte bestandssysteem wordt beschreven door de volgende lijst: Elke jail zal gekopeld worden onder de /home/j directory. /home/j/mroot is de template voor elke jail en tevens de alleen-lezen partitie voor elke jail. Voor elke jail zal een lege directory structuur gemaakt worden, welke valt onder de /home/j directory. Elke jail heeft een /s directory, welke gekoppeld zal worden aan het beschrijfbare gedeelte van het systeem. Elke jail zal zijn eigen beschrijfbaar systeem hebben welke gebaseerd is op /home/j/skel. Elke jail ruimte (het beschrijfbare gedeelte van de jail), wordt gecreeërd in de /home/js directory. De voorbeelden gaan er vanuit dat de jails geplaatst worden in /home partitie. Dit kan uiteraard aangepast worden, maar dan moeten de voorbeelden hieronder ook worden aangepast naar de plek die gebruikt zal worden. De template creeëren Deze sectie leert welke stappen er genomen moeten worden om de master-template te maken. Deze zal het alleen-lezen gedeelte vormen van de jails. Het is altijd een goed idee om ervoor te zorgen dat het &os; systeem de laatst beschikbare -RELEASE versie draait. Zie het corresponderende hoofdstuk in het Handboek om te lezen hoe dit gedaan wordt. In het geval dat het de moeite niet is om te updaten, zal een buildworld nodig zijn voordat er verder gegaan kan worden. Daarnaast is het sysutils/cpdup pakket benodigd. Er wordt gebruik gemaakt van de&man.portsnap.8; applicatie om de &os; Ports Collectie te downloaden. Het handbook met het hoofdstuk over Portsnap, is een aanrader voor nieuwe gebruikers. Als eerste moet er een directory structuur gecreeërd worden voor het alleen-lezen bestandssysteem, welke de &os; binaries zal bevatten voor de jails. Daarna wordt het alleen-lezen bestandssysteem geïnstalleerd vanuit de &os; broncode directory in de jail template: &prompt.root; mkdir /home/j /home/j/mroot &prompt.root; cd /usr/src &prompt.root; make installworld DESTDIR=/home/j/mroot Hierna moet de &os; Ports Collectie worden voorbereid, evenals de &os; broncode directory, wat voor mergemaster vereist is: &prompt.root; cd /home/j/mroot &prompt.root; mkdir usr/ports &prompt.root; portsnap -p /home/j/mroot/usr/ports fetch extract &prompt.root; cpdup /usr/src /home/j/mroot/usr/src Nu moet er een skelet gecreeërd worden voor het bechrijfbare gedeelte van het systeem: &prompt.root; mkdir /home/j/skel /home/j/skel/home /home/j/skel/usr-X11R6 /home/j/skel/distfiles &prompt.root; mv etc /home/j/skel &prompt.root; mv usr/local /home/j/skel/usr-local &prompt.root; mv tmp /home/j/skel &prompt.root; mv var /home/j/skel &prompt.root; mv root /home/j/skel De mergemaster applictie moet gebruikt worden om de ontbrekende configuratie bestanden te installeren. Erna moeten alle overtollige directories die gecreeërd zijn door mergemaster verwijderd worden: &prompt.root; mergemaster -t /home/j/skel/var/tmp/temproot -D /home/j/skel -i &prompt.root; cd /home/j/skel &prompt.root; rm -R bin boot lib libexec mnt proc rescue sbin sys usr dev Nu moet er een symbolische link gemaakt worden tussen het beschrijfbare bestandssysteem en het alleen-lezen bestandssysteem, zorg ervoor dat de links gemaakt worden in de juiste /s directory. Als hier echte directories worden gemaakt of de directories worden op de verkeerde plak aangemaakt zal dit resulteren in een mislukte installatie: &prompt.root; cd /home/j/mroot &prompt.root; mkdir s &prompt.root; ln -s s/etc etc &prompt.root; ln -s s/home home &prompt.root; ln -s s/root root &prompt.root; ln -s ../s/usr-local usr/local &prompt.root; ln -s ../s/usr-X11R6 usr/X11R6 &prompt.root; ln -s ../../s/distfiles usr/ports/distfiles &prompt.root; ln -s s/tmp tmp &prompt.root; ln -s s/var var Als laatste stap moet er een generieke /home/j/skel/etc/make.conf gemaakt worden met de volgende inhoud: WRKDIRPREFIX?= /s/portbuild Door het gebruik van WRKDIRPREFIX op deze manier, is het mogelijk om per jail &os; ports te compileren. Onthoud dat de ports directory onderdeel is van het alleen-lezen bestandssysteem. Het eigen pad voor WRKDIRPREFIX maakt het mogelijk dat port builds gedaan worden op het beschrijfbare gedeelte van elke jail. Jails creeëren Nu we een complete &os; template hebben, kunnen we de jails opzetten en configureren in /etc/rc.conf. Dit voorbeeld demonstreert het creeëren van drie jails: NS, MAIL en WWW. Zet het volgende in /etc/fstab zodat de alleen-lezen template voor de jails en de beschrijfbare partititie beschikbaar zijn in de respectievelijke jails: /home/j/mroot /home/j/ns nullfs ro 0 0 /home/j/mroot /home/j/mail nullfs ro 0 0 /home/j/mroot /home/j/www nullfs ro 0 0 /home/js/ns /home/j/ns/s nullfs rw 0 0 /home/js/mail /home/j/mail/s nullfs rw 0 0 /home/js/www /home/j/www/s nullfs rw 0 0 Partities die gemarkeerd zijn met een 0 als passnummer worden niet gecontroleerd door &man.fsck.8; tijdens het opstarten, en partities met een dumpnummer van 0 worden niet geback-upped door &man.dump.8;. Het is niet gewenst dat fsck de nullfs koppelingen controleert of dat dump een back-up maakt van de alleen-lezen nullfs koppelingen van de jails. Daarom worden ze gemarkeerd met 0 0 in de laatste twee kolommen van elke fstab regel hierboven. Configureer de jails in /etc/rc.conf: jail_enable="YES" jail_set_hostname_allow="NO" jail_list="ns mail www" jail_ns_hostname="ns.example.org" jail_ns_ip="192.168.3.17" jail_ns_rootdir="/usr/home/j/ns" jail_ns_devfs_enable="YES" jail_mail_hostname="mail.example.org" jail_mail_ip="192.168.3.18" jail_mail_rootdir="/usr/home/j/mail" jail_mail_devfs_enable="YES" jail_www_hostname="www.example.org" jail_www_ip="62.123.43.14" jail_www_rootdir="/usr/home/j/www" jail_www_devfs_enable="YES" De reden dat de jail_name_rootdir variabele verwijst naar de /usr/home directory in plaats van naar /home komt doordat het fysieke pad van de /home directory op een standaard &os; installatie verwijst naar /usr/home. De jail_name_rootdir variabele mag niet ingesteld worden op een symbolische link, omdat dan de jail weigert te starten. Gebruik het &man.realpath.1; programma om te zien welke waarde ingesteld moet worden voor deze variabele. Zie de &os;-SA-07:11.jail waarschuwing voor meer informatie. Creeër de benodigde koppelpunten voor het alleen-lezen bestandssysteem van elke jail: &prompt.root; mkdir /home/j/ns /home/j/mail /home/j/www Installeer de beschrijfbare template in elke jail. Let op het gebruik van sysutils/cpdup, wat helpt om een goede kopie te maken in elke directory: &prompt.root; mkdir /home/js &prompt.root; cpdup /home/j/skel /home/js/ns &prompt.root; cpdup /home/j/skel /home/js/mail &prompt.root; cpdup /home/j/skel /home/js/www In deze fase zijn de jails gebouwd en voorbereid om op te starten. Koppel eerst de benodigde bestandssystemen voor elke jail, en start ze vervolgens door gebruik te maken van het rc-bestand voor de jail: &prompt.root; mount -a &prompt.root; service jail start De jails zouden nu gestart moeten zijn. Om te zien of ze correct gestart zijn, wordt het &man.jls.8; programma gebruikt. Het resultaat hiervan ziet er ongeveer als volgend uit: &prompt.root; jls JID IP Address Hostname Path 3 192.168.3.17 ns.example.org /home/j/ns 2 192.168.3.18 mail.example.org /home/j/mail 1 62.123.43.14 www.example.org /home/j/www Op dit moment, zou het mogelijk moeten zijn om op elke jail aan te loggen, nieuwe gebruikers toe te voegen en het configureren van daemons. De JID kolom geeft het identificatie nummer voor elke gestarte jail. Gebruik het volgende commando om administratieve commando's uit te voeren in de jail met het JID 3: &prompt.root; jexec 3 tcsh Upgraden Naarmate de tijd verstrijkt komt de noodzaak om het systeem te updaten naar een nieuwere versie van &os;, danwel vanwege een veiligheids waarschuwing danwel vanwege nieuwe mogelijkheden die geïmplementeerd zijn en nuttig zijn voor de jails. Het ontwerp van deze opzet levert een makkelijke manier voor het upgraden van jails. Daarnaast minimaliseert het de down-time, omdat de jails alleen in de allerlaatste minuut uitgeschakeld worden. Het geeft ook de mogelijkheid om terug te keren naar een oudere versie, voor het geval er problemen ontstaan. De eerste stap is het upgraden van het host systeem zelf, waarna een nieuwe alleen-lezen template gemaakt wordt in /home/j/mroot2. &prompt.root; mkdir /home/j/mroot2 &prompt.root; cd /usr/src &prompt.root; make installworld DESTDIR=/home/j/mroot2 &prompt.root; cd /home/j/mroot2 &prompt.root; cpdup /usr/src usr/src &prompt.root; mkdir s Het installworld doel creeërt een aantal onnodige directories, welke verwijderd moeten worden: &prompt.root; chflags -R 0 var &prompt.root; rm -R etc var root usr/local tmp Maak opnieuw de beschrijfbare symbolische linken voor het hoofd bestandssysteem: &prompt.root; ln -s s/etc etc &prompt.root; ln -s s/root root &prompt.root; ln -s s/home home &prompt.root; ln -s ../s/usr-local usr/local &prompt.root; ln -s ../s/usr-X11R6 usr/X11R6 &prompt.root; ln -s s/tmp tmp &prompt.root; ln -s s/var var Dit is het juiste moment om de jails te stoppen: &prompt.root; service jail stop Ontkoppel de originele bestandssystemen: &prompt.root; umount /home/j/ns/s &prompt.root; umount /home/j/ns &prompt.root; umount /home/j/mail/s &prompt.root; umount /home/j/mail &prompt.root; umount /home/j/www/s &prompt.root; umount /home/j/www Het beschrijfbare gedeelte van de jail is gekoppeld aan het alleen-lezen gedeelte (/s) en moet derhalve eerst ontkoppeld worden. Verplaatst het oude alleen-lezen systeem en vervang het door de nieuwe systeem. Het oude systeem dient als reservekopie voor het geval er iets misgaat. De naam moet het zelfde zijn als bij de installatie van het nieuwe systeem. Verplaats de &os; Ports Collectie naar het nieuwe bestandssysteem om ruimte en inodes te besparen: &prompt.root; cd /home/j &prompt.root; mv mroot mroot.20060601 &prompt.root; mv mroot2 mroot &prompt.root; mv mroot.20060601/usr/ports mroot/usr Op dit moment is het alleen-lezen gedeelte klaar, de enig overgebleven taak is nu om alle bestandssystemen opnieuw te koppelen en om de jails weer op te starten: &prompt.root; mount -a &prompt.root; service jail start Gebruik het &man.jls.8; programma om te zien of de jails correct zijn opgestart. Vergeet niet om in elke jail het mergemaster programma te starten. Ook moeten de configuratie bestanden en de rc.d scripts geupdate worden. diff --git a/nl_NL.ISO8859-1/books/handbook/multimedia/chapter.xml b/nl_NL.ISO8859-1/books/handbook/multimedia/chapter.xml index e2eb8a2ec7..710f197f43 100644 --- a/nl_NL.ISO8859-1/books/handbook/multimedia/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/multimedia/chapter.xml @@ -1,2110 +1,2077 @@ Ross Lippert Aangepast door Siebrand Mazeland Vertaald door René Ladan 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 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 goed hercoderingsprogramma in de &os; Portscollectie beschikbaar wat gebruikt kan worden om tussen formaten onderling 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; 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 de inhoud van CD's en DVD's 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 aan te koppelen van audio-CD's met &man.mount.8; resulteert in ieder geval in een foutmelding en in het ergste geval tot een kernel panic. Dat type media heeft een formaat dat afwijkt van het gebruikelijke ISO-bestandssysteem. Moses Moore Geschreven door Marc Fonvieille Aangepast 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 audio-apparaten staan in een lijst in de Hardware Notes. In de Hardware Notes staat ook beschreven welk stuurprogramma uw kaart 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 uit te vinden welk stuurprogramma na het laden van het metastuurprogramma snd_driver wordt geladen kan de inhoud van het bestand /dev/sndstat nagekeken worden met cat /dev/sndstat. 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 stuurprogramma voor het audioraamwerk &man.sound.4; aan de kernel toegevoegd worden. Daarvoor dient het volgende te worden opgenomen in het bestand met kernelinstellingen: device sound 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 audio-apparaten 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. De expliciete syntaxis voor de kernelinstellingen voor elk ondersteund geluidsstuurprogramma staat ook in /usr/src/sys/conf/NOTES. Voor niet-PnP ISA-geluidskaarten kan het nodig zijn dat de kernel informatie gegeven moet worden over de instellingen van de kaart (IRQ, I/O poort, enzovoort), zoals dat geldt voor alle niet-PnP ISA-kaarten. 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; samen met snd_sb16 en dient de volgende regel toegevoegd te worden aan het kernelinstellingenbestand: device snd_sbc device snd_sb16 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 &man.sound.4; en de hulppagina voor het gevraagde stuurprogramma. De bovenstaande instellingen zijn de standaardinstellingen. 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 over deze kaart. 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 genoemd worden, dienen eerdere stappen herzien te worden. Bekijk nogmaals de instellingen van de kernel en bevestig dat het juiste apparaatstuurprogramma was gekozen. Veel voorkomende problemen staan beschreven in . Als het goed is werkt de geluidskaart nu. Als pinnen voor audio-out van de CD-ROM- of DVD-ROM-drive juist zijn aangesloten op de geluidskaart, dan kan er een CD in de drive gestopt 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 gegevens naar /dev/dsp: &prompt.user; cat bestandsnaam > /dev/dsp bestandsnaam kan ieder bestand zijn. Deze commandoregel hoort wat ruis te maken, waardoor wordt bevestigd dat de geluidskaart echt werkt. De appparaat nodes /dev/dsp* worden automatisch aangemaakt wanneer dat nodig is. Als deze niet worden gebruikt, bestaan ze niet en zullen ze niet terugkomen in de terugkoppeling van &man.ls.1;. Niveaus voor de geluidskaartmixer kunnen aangepast worden met het commando &man.mixer.8;. Er staan meer details in &man.mixer.8;. Bekende problemen apparaatknooppunten I/O poort IRQ DSP Fout Oplossing 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. Een ander euvel is dat moderne grafische kaarten voor het gebruik van HDMI en dergelijken vaak zijn uitgerust met hun eigen geluidsstuurprogramma. Dit geluidsapparaat wordt soms opgesomd voor het eigenlijke geluidskaart en daardoor wordt deze niet gebruikt als het standaard afspeelapparaat. Om te zien of dit het geval is, kan dmesg worden gedraaid en gezocht worden naar pcm. De uitvoer ziet er ongeveer als volgt uit: ... hdac0: HDA Driver Revision: 20100226_0142 hdac1: HDA Driver Revision: 20100226_0142 hdac0: HDA Codec #0: NVidia (Unknown) hdac0: HDA Codec #1: NVidia (Unknown) hdac0: HDA Codec #2: NVidia (Unknown) hdac0: HDA Codec #3: NVidia (Unknown) pcm0: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 0 nid 1 on hdac0 pcm1: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 1 nid 1 on hdac0 pcm2: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 2 nid 1 on hdac0 pcm3: <HDA NVidia (Unknown) PCM #0 DisplayPort> at cad 3 nid 1 on hdac0 hdac1: HDA Codec #2: Realtek ALC889 pcm4: <HDA Realtek ALC889 PCM #0 Analog> at cad 2 nid 1 on hdac1 pcm5: <HDA Realtek ALC889 PCM #1 Analog> at cad 2 nid 1 on hdac1 pcm6: <HDA Realtek ALC889 PCM #2 Digital> at cad 2 nid 1 on hdac1 pcm7: <HDA Realtek ALC889 PCM #3 Digital> at cad 2 nid 1 on hdac1 ... Hier is de grafische kaart (NVidia) opgesomd voor de geluidskaart (Realtek ALC889). Om de geluidskaart als standaard afspeelapparaat te gebruiken, dient hw.snd.default_unit veranderd te worden in de eenheid dat voor afspelen gebruikt moet worden: &prompt.root; sysctl hw.snd.default_unit=n Hier is n het nummer van het geluidsapparaat wat gebruikt dient te worden, in dit voorbeeld 4. U kunt deze verandering permanent maken door de volgende regel aan /etc/sysctl.conf toe te voegen: hw.snd.default_unit=4 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 aangezet kunnen worden met de faciliteit &man.sysctl.8;. Met virtuele kanalen kunnen het afspelen van een geluidskaart gemultiplext worden door het geluid in de kernel te mixen. Het aantal virtuele kanalen kan met drie sysctl knoppen als root als volgt ingesteld worden: &prompt.root; sysctl dev.pcm.0.play.vchans=4 &prompt.root; sysctl dev.pcm.0.rec.vchans=4 &prompt.root; sysctl hw.snd.maxautovchans=4 In het bovenstaande voorbeeld worden vier virtuele kanalen toegewezen, wat in het dagelijks gebruik voldoende is. Zowel dev.pcm.0.play.vchans=4 als dev.pcm.0.rec.vchans=4 zijn het aantal virtuele kanalen dat pcm0 heeft voor afspelen en opnemen, en zijn 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. Voor meer informatie wordt naar &man.pcm.4; verwezen. Het aantal virtuele kanalen voor een apparaat kan niet gewijzigd worden als het in gebruik is. Sluit eerst alle programma's die het apparaat gebruiken, zoals muziekspelers of geluidsdaemons. Het juiste pcm apparaat zal automatisch en transparant gealloceerd worden voor programma's die /dev/dsp0 aanroepen. Josef El-Rayes Geschreven door Standaardwaarden voor mixerkanalen instellen De standaardwaarden voor de mixerkanalen 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. Het is mogelijk om de standaardwaarden in te stellen op het niveau van het stuurprogramma — dit wordt bereikt door de gewenste waarden in te stellen in /boot/device.hints, bijvoorbeeld: hint.pcm.0.vol="50" Met de bovenstaande instelling wordt het volume van een kanaal standaard op 50 ingesteld bij het laden van de module &man.pcm.4;. 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 pakket. De interface van XMMS is intuïtief met een afspeellijst, 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. Aangenomen dat uw audio-apparaat /dev/dsp1.0 is en u het MP3-bestand Foobar-GreatestHits.mp3 wilt afspelen, zou u het volgende opgeven: &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 CD audio tracks rippen Voordat een CD of een CD track naar MP3 ge-encodeerd kan worden moeten de audiogegevens naar de harde schijf geript worden. Dit gaat door de ruwe CDDA (CD Digital Audio) gegevens naar WAV-bestanden te 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/acd0 -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 Tegenwoordig 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 naar toe geschreven 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 schrijft 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 tikgeluid 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 pakket 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; vele videokaarten ondersteunt, 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 juiste apparaten: &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. Om de gedeeld-geheugeninterface van X11 te verbeteren, wordt aangeraden dat een aantal variabelen 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; 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; kent 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 pakketten met video videopoorten videopakketten 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 ogenschijnlijk 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 overzetten 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 pakket 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 testbestand.avi af te spelen met een van de beschikbare video-interfaces, kan de optie gebruikt worden: &prompt.user; mplayer -vo xv testbestand.avi &prompt.user; mplayer -vo sdl testbestand.avi &prompt.user; mplayer -vo x11 testbestand.avi &prompt.root; mplayer -vo dga testbestand.avi &prompt.root; mplayer -vo 'sdl:dga' testbestand.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 testbestand.avi vervangen te worden door waar N het titelnummer is dat afgespeeld moeten worden en APPARAAT het apparaatknooppunt 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. Eerst een eenvoudige kopie: &prompt.user; mencoder invoer.avi -oac copy -ovc copy -o uitvoer.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 invoer.avi te converteren naar de MPEG4-codec met MPEG3-audio encodering (audio/lame is verplicht): &prompt.user; mencoder invoer.avi -oac mp3lame -lameopts br=192 \ -ovc lavc -lavcopts vcodec=mpeg4:vhq -o utvoer.avi Hiermee wordt uitvoer gemaakt die af te spelen is met mplayer en xine. invoer.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 pakket 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 videospeler xine 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 mijnfilm.avi <application>transcode</application> hulpprogramma's De software transcode is geen speler, maar een verzameling hulpprogramma's voor het hercoderen van video- en audiobestanden. Met transcode wordt het mogelijk om videobestanden samen te voegen, kapotte bestanden te repareren en commandoregelprogramma's te gebruiken met stdin/stdout stream interfaces. Tijdens het bouwen van de port multimedia/transcode kan een groot aantal opties opgegeven worden en de volgende commandoregel wordt geadviseerd om transcode te bouwen: &prompt.root; make WITH_OPTIMIZED_CFLAGS=yes WITH_LIBA52=yes WITH_LAME=yes WITH_OGG=yes \ WITH_MJPEG=yes -DWITH_XVID=yes De geadviseerde instellingen zijn toereikend voor de meeste gebruikers. Om de mogelijkheden van transcode te illustreren volgt nu een voorbeeld van hoe een DivX-bestand om te zetten in een PAL MPEG-1-bestand (PAL VCD): &prompt.user; transcode -i invoer.avi -V --export_prof vcd-pal -o uitvoer_vcd &prompt.user; mplex -f 1 -o uitvoer_vcd.mpg uitvoer_vcd.m1v uitvoer_vcd.mpa Het resulterende MPEG-bestand, uitvoer_vcd.mpg, is klaar om afgespeeld te worden met MPlayer. Het kan ook op een CD-R gebrand worden om er een Video-CD mee te maken. In dat geval is het nodig om de programma's multimedia/vcdimager en sysutils/cdrdao te installeren. Er is een hulppagina voor transcode, maar kijk ook op transcode wiki voor meer informatie en voorbeelden. 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 prijs gesteld als iemand de documentatie niet heeft gelezen, dus het is verstandig RTFM in gedachten te houden alvorens bug rapportages 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 de hulppagina voor &man.bktr.4; en /usr/src/sys/conf/NOTES staan meer details over de beschikbare opties. 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. MythTV MythTV is een open-source PVR software project. Het staat in de &linux;-wereld bekend als een complexe toepassing met veel afhankelijkheden, en daarom moeilijk om te installeren. De Portscollectie van &os; versimpelt veel van het proces, maar sommige componenten moeten handmatig worden geïnstalleerd. Deze sectie is bedoeld om te helpen en te begeleiden in het installeren van MythTV. Hardware MythTV is ontworpen om V4L te gebruiken om invoerapparatuur voor video zoals encoders en tuners te benaderen. Momenteel werkt MythTV het beste met USB DVB-S/C/T kaarten die ondersteund worden door multimedia/webcamd omdat webcamd een gebruikerstoepassing levert voor V4L. Elke DVB-kaart die ondersteund wordt door webcamd zou met MythTV moeten werken, een lijst van kaarten waarvan hun werking bekend is kan hier gevonden worden. Er zijn ook stuurprogramma's bekend voor Hauppauge-kaarten in de pakketten multimedia/pvr250 en multimedia/pvrxxx, maar deze leveren een niet-standaard interface met hun stuurprogramma dat niet werkt met versies van MythTV nieuwer dan 0.23. HTPC bevat een lijst van alle beschikbare stuurprogramma's voor DVB. Afhankelijkheden Doordat MythTV flexibel en modulair is, staat het de gebruiker toe om de voorkant en de achterkant op verschillende machines te hebben. Voor de voorkant is multimedia/mythtv-frontend nodig, alsook een X-server welke in x11/xorg beschikbaar is. Idealiter beschikt de voorkant-computer ook over een videokaart die XvMC ondersteunt en optioneel over een afstandsbediening die compatibel is met LIRC. Voor de achterkant is multimedia/mythtv nodig, alsook een &mysql; database en optioneel een tuner en opslag voor opnames. Het &mysql; pakket zou automatisch als een afhankelijkheid geïnstalleerd moeten worden tijdens de installatie van multimedia/mythtv. MythTV installeren Gebruik de volgende stappen om MythTV te installeren. Installeer als eerste MythTV van de &os; Portscollectie: &prompt.root; cd /usr/ports/multimedia/mythtv &prompt.root; make install Installeer de database voor MythTV: &prompt.root; mysql -uroot -p < /usr/local/share/mythtv/database/mc.sql Configureer de achterkant: &prompt.root; mythtv-setup Start de achterkant: &prompt.root; echo 'mythbackend_enable="YES"' >> /etc/rc.conf &prompt.root; service mythbackend start Marc Fonvieille Geschreven door Scanners scanners Inleiding In &os; is toegang tot scanners mogelijk met 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; ondersteunt 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. Op systemen - van vóór &os; 8.X staat in de handleidingpagina van - &man.uscanner.4; een lijst met ondersteunde USB-scanners. + wordt ondersteund en wat de status voor ondersteuning is. 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 device ehci - Op systemen van vóór &os; 8.X is de volgende - regel ook nodig: - - device uscanner - - Op deze versies van &os; biedt het apparaat &man.uscanner.4; - ondersteuning voor de USB-scanners. Sinds &os; 8.0 ondersteunt - de bibliotheek &man.libusb.3; dit direct. - Na een herstart met de juiste kernel kan de USB-scanner aangesloten worden. Een regel die de detectie van uw scanner aangeeft zou in de berichtenbuffer van het systeem (&man.dmesg.8;) moeten verschijnen: ugen0.2: <EPSON> at usbus0 - Of op een &os; 7.X systeem: - - uscanner0: EPSON EPSON Scanner, rev 1.10/3.02, addr 2 - - Deze berichten geven aan dat de scanner òfwel - /dev/ugen0.2 òf - /dev/uscanner0 als apparaatknooppunt - gebruikt afhankelijk van de versie van &os; die we draaien. Voor dit - voorbeeld was een &epson.perfection; 1650 USB-scanner + Deze berichten geven aan dat de scanner + /dev/ugen0.2 als apparaatknooppunt gebruikt. + Voor dit voorbeeld was een &epson.perfection; 1650 USB-scanner gebruikt. 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 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 en geïnstalleerd is, horen de apparaten tijdens het opstarten zichtbaar te zijn in de systeemberichtbuffer: 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 de hulppagina's voor &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). De eerste stap is om de port of het pakket graphics/sane-backends te installeren. 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 welk apparaatknooppunt 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 Of, met bijvoorbeeld de USB-scanner die in wordt gebruikt: &prompt.root; scanimage -L device 'epson2:libusb:/dev/usb:/dev/ugen0.2' is a Epson GT-8200 flatbed scanner Deze uitvoer komt van een &os; 8.X systeem, het item 'epson2:libusb:/dev/usb:/dev/ugen0.2' geeft de naam van het backend (epson2) en het apparaatknooppunt (/dev/ugen0.2) dat door onze scanner wordt gebruikt. 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, wordt in &os; 8.X prima gedetecteerd en werkt daar, maar in eerdere versies van &os; (waar &man.uscanner.4; wordt gebruikt) toont het 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 het de USB-interface gebruikt en is aangesloten op het apparaatknooppunt /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/epson2.conf gewijzigd te worden. De gebruikte scanner is een &epson.perfection; 1650, dus in dit geval dient voor de scanner het backend epson2 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 apparaatknooppunt 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 De USB-scanner is geïdentificeerd. Het is niet belangrijk dat het merk en model niet overeenkomen met de scanner. Het belangrijkste is het veld `epson:/dev/uscanner0', dat de juiste benamingen voor het backend en het apparaatknooppunt 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. Andere gebruikers toegang tot de scanner geven 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 apparaatknooppunt voor een scanner. Onze USB-scanner gebruikt bijvoorbeeld apparaatknooppunt /dev/ugen0.2 wat in feite slechts een symbolische koppeling is naar het echte apparaatknooppunt genaamd /dev/usb/0.2.0 (een blik op de inhoud van de map /dev bevestigt dit). Zowel de symbolische koppeling als het apparaatknooppunt zijn van respectievelijk de groepen wheel en operator. Door de gebruiker joe aan deze groepen toe te voegen kan hij de scanner zien, maar vanwege duidelijke veiligheidsredenen dient het toevoegen van een gebruiker aan elke groep met zorg te gebeuren, vooral aan de groep wheel. Een betere oplossing is om een specifieke groep aan te maken voor het gebruik van USB-apparaten en de scanner toegankelijk te maken voor leden van deze groep. We zullen dus bijvoorbeeld een groep genaamd usb gebruiken. De eerste stap is het aanmaken van deze groep met behulp van het commando &man.pw.8;: &prompt.root; pw groupadd usb Hierna moeten we de symbolische koppeling /dev/ugen0.2 aanmaken en het apparaatknooppunt /dev/usb/0.2.0 met de juiste schrijfpermissies toegankelijk maken voor de groep usb (0660 of 0664), omdat standaard alleen de eigenaar van deze bestanden (root) ernaar kan schrijven. Dit alles wordt gedaan door de volgende regels aan /etc/devfs.rules toe te voegen: [system=5] add path ugen0.2 mode 0660 group usb add path usb/0.2.0 mode 0666 group usb - Gebruikers van &os; 7.X hebben waarschijnlijk de volgende - regels met het juiste apparaatknooppunt, - /dev/uscanner0, nodig: - - [system=5] -add path uscanner0 mode 0660 group usb - - 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 - de hulppagina voor &man.devfs.8;. - Nu dienen er alleen nog gebruikers aan de groep usb toegevoegd te worden om toegang tot de scanner toe te staan: &prompt.root; pw groupmod usb -m joe Lees voor meer details de handleidingpagina van &man.pw.8;. diff --git a/nl_NL.ISO8859-1/books/handbook/ppp-and-slip/chapter.xml b/nl_NL.ISO8859-1/books/handbook/ppp-and-slip/chapter.xml index 118a6568c5..a8bb8090b7 100644 --- a/nl_NL.ISO8859-1/books/handbook/ppp-and-slip/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/ppp-and-slip/chapter.xml @@ -1,3469 +1,3446 @@ Jim Mock Geherstructureerd, gereorganiseerd en geupdate door Remko Lodder Vertaald door PPP en SLIP Overzicht PPP SLIP &os; heeft een aantal manieren om de ene computer met de andere te verbinden. Om een netwerk of internet verbinding op te zetten door een inbelmodem, of om anderen toe te staan dit te doen door de machine heen vereist het gebruik van PPP en SLIP. Dit hoofdstuk beschrijft het opzetten van op modems gebaseerde diensten in meer detail. Na het lezen van dit hoofdstuk weet u: Hoe gebruikers PPP opgezet kan worden. Hoe kernel-PPP opgezet kan worden (alleen voor &os; 7.X). Hoe PPPoE opgezet kan worden (PPP over Ethernet). Hoe PPPoA opgezet kan worden (PPP over ATM). Hoe een SLIP-server en cliënt opgezet kan worden en hoe dat geconfigureerd wordt (alleen voor &os; 7.X). PPP gebruiker-PPP PPP kernel-PPP PPP over Ethernet Voordat dit hoofdstuk gelezen wordt, moet u: Bekend zijn met basis netwerk terminologie. De basis en doeleinden van een inbel verbinding en van PPP en/of SLIP. U kunt zich afvragen wat het verschil is tussen gebruiker-PPP en kernel-PPP. Het antwoord is simpel: gebruiker-PPP verwerkt inkomend en uitgaande data in het gebruikersland in plaats van in de kernel. Dit is duur in de zin van het kopiëren van de data tussen de kernel en het gebruikersland, maar levert meer mogelijkheden voor de PPP implementatie. Gebruikers PPP gebruikt het tun apparaat om te communiceren met de buitenwereld. Kernel-PPP maakt gebruik van het ppp apparaat. Voor de rest van dit hoofdstuk, zal gebruiker-PPP gebruikt worden als ppp tenzij er onderscheid gemaakt moet worden met andere PPP software zoals pppd. Tenzij anders vermeld moeten alle uitgelegde commando's in dit hoofdstuk gestart worden als de root gebruiker. Tom Rhodes Bijgewerkt en uitgebreid door Brian Somers Origineel bijgedragen door Nik Clayton Met input van Dirk Frömberg Peter Childs Gebruikmaken van gebruiker-PPP - - Met ingang van &os; 8.0 zijn apparaatknooppunten voor - seriële poorten hernoemd van - /dev/cuadN naar - /dev/cuauN en van - /dev/ttydN naar - /dev/ttyuN. - Gebruikers van &os; 7.X dienen de volgende documentatie met deze - wijzigingen te lezen. - - Gebruiker-PPP Vereisten Dit document gaat er vanuit dat u de volgende punten beschikbaar heeft: ISP PPP Een account bij een Internet Service Provider (ISP) waarmee verbinding gemaakt wordt door middel van PPP. Een modem of een ander apparaat verbonden met uw PC en correct geconfigureerd zodat u verbinding kan maken met uw ISP. De inbelnummers van uw ISP. PAP CHAP UNIX loginnaam wachtwoord Uw loginnaam en wachtwoord (danwel een combinatie van een standaard &unix;-stijl login en wachtwoord of een PAP of CHAP login en wachtwoordcombinatie). naamserver Het IP-adres van één of meerdere naamservers. Normaal gesproken krijgt u twee IP adressen van uw ISP om te gebruiken. Als u er echter geen één gekregen heeft, kunt u het commando enable dns gebruiken in ppp.conf en ppp zal de naamservers voor u configureren. Deze optie is afhankelijk van de PPP implementatie van de ISP, welke DNS onderhandeling moet ondersteunen. De volgende informatie kan aangeleverd worden door uw ISP maar is niet echt noodzakelijk: Het IP-adres van de router van uw ISP. De router is de machine waarmee u verbinding maakt en welke ingesteld wordt als de standaard route. Als u deze informatie niet heeft, kunt u een willekeurig adres verzinnen waarna de PPP server van de ISP het juiste adres vertelt zodra u verbinding maakt. Dit IP-adres wordt door ppp HISADDR genoemd. Het netwerkmasker wat gebruikt moet worden. Als uw ISP deze niet heeft opgegeven, kan 255.255.255.255 gebruikt worden. statisch IP-adres Als uw ISP u een vast IP-adres en hostnaam levert, kunt u deze invoeren. In andere gevallen bepaalt de andere kant welk adres er uitgegeven wordt. Als u niet in bezit bent van de vereiste informatie, moet u contact opnemen met uw ISP. Door de rest van dit hoofdstuk worden in veel van de voorbeelden configuratie bestanden genummerd per regel. Deze nummers dienen alleen als hulp voor de presentatie en discussie en zijn verder niet bedoeld om daadwerkelijk geïmplementeerd te worden. Een juiste inspringing met tabs en spaties zijn daarbij ook belangrijk. Automatische configuratie van <application>PPP</application> PPP configuratie Zowel ppp als pppd (de implementatie van PPP op kernel niveau) gebruiken de configuratie bestanden die zich in de map /etc/ppp bevinden. Voorbeelden configuraties voor gebruiker-PPP kunnen gevonden worden in /usr/share/examples/ppp/. Het configureren van ppp vereist dat u een aantal bestanden bewerkt, afhankelijk van uw eisen. Wat u moet invoeren is deels afhankelijk van wat uw ISP u aanbied met oog op statische IP-adressen (lees u krijgt een statisch adres welke u altijd gebruikt) of dynamisch (lees: uw IP-adres veranderd elke keer als u verbinding maakt met uw ISP). PPP en statische IP-adressen PPP met statische IP-adressen U moet het /etc/ppp/ppp.conf bewerken. Het zou dan als volgend eruit moeten zien: Regels die eindigen met een : starten in de eerste kolom (het begin van de regel) — alle andere regels moeten inspringen zoals getoond door middel van spaties of tabs. 1 default: 2 set log Phase Chat LCP IPCP CCP tun command 3 ident user-ppp VERSION (built COMPILATIONDATE) 4 set device /dev/cuau0 5 set speed 115200 6 set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \ 7 \"\" AT OK-AT-OK ATE1Q0 OK \\dATDT\\T TIMEOUT 40 CONNECT" 8 set timeout 180 9 enable dns 10 11 provider: 12 set phone "(123) 456 7890" 13 set authname foo 14 set authkey bar 15 set login "TIMEOUT 10 \"\" \"\" gin:--gin: \\U word: \\P col: ppp" 16 set timeout 300 17 set ifaddr x.x.x.x y.y.y.y 255.255.255.255 0.0.0.0 18 add default HISADDR Regel 1: Deze regel identificeert de standaard regel. Commando's in deze regel worden automatisch gestart zodra ppp gestart wordt. Regel 2: Zet de log paramaters aan. Zodra de configuratie naar verwachting werkt, moet deze regel aangepast worden naar: set log phase tun om te voorkomen dat er extreem grote log files gemaakt worden. Regel 3: Vertelt PPP hoe het zich moet identificeren aan de router aan de andere kant, als deze problemen heeft met het onderhandelen en het opzetten van de link en het leveren van informatie die de beheerders van de andere kant nuttig kunnen vinden om zulke problemen te onderzoeken. Regel 4: Identificeert het apparaat waarmee het modem verbonden is. COM1 is /dev/cuau0 en COM2 is /dev/cuau1. Regel 5: Stelt de snelheid in waarmee verbinding gemaakt wordt. Als 115200 niet werkt (wat wel zou moeten kunnen met elk nieuw modem), probeert u dan de instelling van 38400. Regels 6 & 7: PPP gebruiker-PPP De inbelregel. Gebruiker-PPP gebruikt een expect-send syntax wat vergelijkbaar is met het &man.chat.8; programma. Bekijk de handleiding voor meer informatie over de mogelijkheden van deze taal. Let op dat dit commando doorgaat op de volgende regel zodat deze leesbaar blijft. Elk commando in ppp.conf kan dit doen als het laatste karakter op een regel, het \ karakter is. Regel 8: Stelt de idle timeout in voor een link. 180 seconden is standaard, dus deze regel is puur cosmetisch. Regel 9: Vertelt PPP om de andere kant te vragen om een bevestiging van de lokale naamserver instellingen. Als u een lokale naamserver draait moet deze regel uitgecommentarieërd of verwijderd worden. Regel 10: Een blanco regel voor de leesbaarheid. Blanco regels worden door PPP genegeerd. Regel 11: Identificeert een sectie voor de provider die provider genoemd wordt. Dit kan gewijzigd worden in de naam van uw provider zodat er later gebruik gemaakt van worden bij de optie om een verbinding op te zetten. Regel 12: Stelt het telefoonnummer in voor deze provider. Meerdere telefoonnummers kunnen gespecificeerd worden door gebruik te maken van de dubbele punt (:) of het pipe karakter (|) als scheidingsteken. Het verschil tussen de twee scheidingstekens wordt beschreven in de &man.ppp.8; handleiding. Om samen te vatten, als u wilt rouleren tussen de nummers gebruikt u dan een dubbelepunt. Als u altijd het eerste nummer als eerste wilt draaien en alleen de andere nummers wilt draaien als het eerste nummer niet werkt, gebruik dan het pipe karakter. Quote altijd de hele set van telefoonnummers zoals getoond. U moet het telefoonnummer citeren met dubbele quotes (") als er enige intentie is in het gebruik van spaties in het telefoonummer. Dit kan een simpele, maar subtiele fout creeëren. Regels 13 & 14: Identificeert de gebruikersnaam en het wachtwoord. Wanneer gebruik gemaakt wordt van een &unix; stijl login worden deze waarden verwezen door het set login commando door gebruik te maken van de \U en \P variabelen. Wanneer er verbinding gemaakt wordt door PPP en CHAP worden deze waardes gebruikt tijdens het authenticeren. Regels 15: PAP CHAP Als u gebruik maakt van PPP en CHAP, zal er geen login op dit moment zijn, en moet deze regel uitgecommentarieërd of verwijderd worden. Zie het PAP en CHAP authenticatie hoofdstuk voor meer details. De login regel is hetzelfde als de chat-achtige syntax van de inbelregel. In dit voorbeeld werkt de reegl voor een dienst wiens login sessie als volgt eruit ziet: J. Random Provider login: foo password: bar protocol: ppp U moet dit script aanpassen om aan uw behoeften te voldoen. Wanneer u dit script voor het eerst schrijft, moet u ervoor zorgen dat u de chat log optie heeft aangezet zodat u kunt bepalen of de communicatie gaat zoals verwacht. Regel 16: timeout Selt de standaard idle timeout in (in seconden) voor de connectie. Hier wordt de connectie automatisch afgesloten na 300 seconden van inactiviteit. Als u nooit een timeout wilt krijgen, kunt u de waarde op nul zetten of gebruik maken van de optie op de commando regel. Regel 17: ISP Stelt het interface adres in. De regel x.x.x.x moet vervangen worden door het IP-adres dat uw provider aan u heeft uitgegeven. De regel y.y.y.y moet vervangen worden door het IP-adres dat uw provider aan u heeft gegeven voor de router (de machine waarmee u verbinding maakt). Als uw ISP u geen router adres heeft gegeven, gebruik dan 10.0.0.2/0. Als u gebruik moet maken van een gegokt, zorg ervoor dat er een regel staat in /etc/ppp/ppp.linkup zoals beschreven in de instructies voor PPP en dynamische IP adressen. Als deze regel weggelaten wordt kan ppp niet in mode starten. Regel 18: Voegt een standaard routering toe naar uw providers router. Het speciale HISADDR woord, wordt vervangen door het router adres zoals gespecificeerd op regel 17. Het is belangrijk dat deze regel na regel 17 komt, anders is HISADDR nog niet geïnitialiseerd. Als u ppp niet in mode wilt draaien, moet deze regel verplaatst worden naar het ppp.linkup bestand. Het is niet nodig om een regel toe te voegen aan ppp.linkup wanneer u een statisch IP-adres krijgt en ppp met de mode gestart is omdat uw routerings tabel al correcte regels heeft voordat u verbinding maakt. U kunt echter een regel aanmaken om programma's te starten nadat de verbinding opgezet is. Dit wordt later uitgelegd met een voorbeeld over sendmail. Voorbeeld van configuratiebestanden kunnen gevonden worden in de map usr/share/examples/ppp. PPP en dynamische IP-adressen PPP met dynamische IP-adressen IPCP Als uw provider geen statisch IP-adres aanlevert kan ppp geconfigureerd worden om het lokale en het remote adres te onderhandelen. Dit wordt gedaan door het gokken van een IP-adres en PPP toestaan dit adres te corrigeren door gebruik te maken van het IP Configuration Protocol (IPCP) nadat er een verbinding opgezet is. De ppp.conf configuratie is verders hetzelfde als voor de PPP en statische IP adressen, met de volgende wijziging: 17 set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.255 0.0.0.0 Nogmaals, het regelnummer hoeft niet te worden toegevoegd, deze dient puur ter referentie. Indentatie van minstens één spatie is vereist. Regel 17: Het nummer achter het / karakter is het aantal netwerk master bits van het adres die ppp eist. Het is mogelijk dat u IP-adressen wilt gebruiken die meer van toepassing zijn op uw situatie, maar bovenstaand voorbeeld zal altijd werken. Het laatste argument (0.0.0.0) vertelt PPP om te onderhandelen met het adres 0.0.0.0 in plaats van met 10.0.0.1 en is benodigd voor sommige ISPs. Gebruik 0.0.0.0 niet als eerste argument voor het commando set ifaddr, omdat dit ervoor zorgt dat PPP geen initiële route kan opzetten in mode. Als u niet draait in mode, moet u een nieuwe regel toevoegen aan /etc/ppp/ppp.linkup. ppp.linkup wordt uitgevoerd nadat een connectie is opgezet. Op dit moment krijgt ppp het interface adres en is het mogelijk om regels toe te voegen aan de route tabel: 1 provider: 2 add default HISADDR Regel 1: Bij het tot stand brengen van een verbinding zal ppp kijken voor een corresponderende regel in ppp.linkup volgens de volgende criteria: Als eerste, probeert het hetzelfde label te vinden zoals gebruikt in ppp.conf. Als dat mislukt, zoek dan een regel waarin het IP-adres van onze router in voorkomt. Deze regel bevat een IP stijl van 4 octetten. Als nu nog steeds geen corresponderende regel gevonden is wordt er gezocht naar de HISADDR regel. Regel 2: Deze regel verteld ppp om een standaard routering toe te voegen die wijst richting HISADDR. HISADDR wordt vervangen door het IP-adres van de router zoals onderhandeld door IPCP. Zie de pmdemand regel in de bestanden /usr/share/examples/ppp/ppp.conf.sample en /usr/share/examples/ppp/ppp.linkup.sample voor een gedetailleerd voorbeeld. Het ontvangen van binnenkomende gesprekken PPP ontvangen van inkomende gesprekken Wanneer ppp geconfigureerd is om inkomende gesprekken te ontvangen op een machine die verbonden is met een LAN, moet u beslissen of er pakketten worden doorgestuurd naar het LAN. Als u dat doet, moet u de andere kant een IP-adres geven uit het subnet van uw LAN, en zult u gebruik moeten maken van het command enable proxy in het /etc/ppp/ppp.conf bestand. U zult ook moeten controleren of het /etc/rc.conf bestand het volgende bevat: gateway_enable="YES" Welke getty? Het configureren van &os; voor inbel diensten levert een goede beschrijving van het inschakelen van inbeldiensten door gebruik te maken van &man.getty.8;. Een alternatief voor getty is mgetty (van de port comms/mgetty+sendfax), een betere versie van getty ontworpen voor onder andere inbellijnen. De voordelen van het gebruik van mgetty is dat het actief communiceert met modems, wat betekent dat als de port uitgeschakeld is in /etc/ttys, het modem de telefoon niet zal beantwoorden. Latere versies van mgetty (vanaf 0.99beta en later) ondersteunen ook het automatisch detecteren van PPP stromen waardoor cliënten zonder extra scripting toegang kunnen krijgen tot uw server. Raadpleeg naar Mgetty en AutoPPP voor meer informatie over mgetty. <application>PPP</application> Permissies Het ppp commando moet normaal gesproken gestart worden door de root gebruiker. Als u echter wilt toestaan dat ppp in server mode gestart wordt door een normale gebruiker door het uitvoeren van ppp, zoals beschreven hieronder, moet deze gebruiker permissie krijgen om ppp te starten. Dit kan gedaam worden door de gebruiker toe te voegen aan de network groep van het /etc/group bestand. U moet de gebruiker ook toegang geven tot één of meerdere secties van het configuratie bestand door gebruik te maken van het allow commando: allow users fred mary Als dit commando wordt gebruikt in de default sectie, geeft ppp alle opgegeevn gebruikers toegang tot alle opties. PPP shells voor dynamische IP-gebruikers PPP shells Creeër een bestand genaamd /etc/ppp/ppp-shell welke de volgende gegevens bevat: #!/bin/sh IDENT=`echo $0 | sed -e 's/^.*-\(.*\)$/\1/'` CALLEDAS="$IDENT" TTY=`tty` if [ x$IDENT = xdialup ]; then IDENT=`basename $TTY` fi echo "PPP voor $CALLEDAS op $TTY" echo "Starten van PPP voor $IDENT" exec /usr/sbin/ppp -direct $IDENT Dit script moet uitvoerbaar zijn. Ook moet er een symbolische link gemaakt worden naar dit script met de naam ppp-dialup door gebruik te maken van de volgende commando's: &prompt.root; ln -s ppp-shell /etc/ppp/ppp-dialup U moet dit script gebruiken als de shell voor al uw inbel gebruikers. Dit is een voorbeeld uit /etc/passwd voor een PPP inbelgebruiker met de gebruikersnaam pchilds (Let op, u mag niet direct het wachtwoord bestand bewerken, gebruik daarom het programma &man.vipw.8;). pchilds:*:1011:300:Peter Childs PPP:/home/ppp:/etc/ppp/ppp-dialup Creeër vervolgens een map /home/ppp die door iedereen gelezen en beschreven kan worden en zet daar de volgende 0 byte grote bestanden in: -r--r--r-- 1 root wheel 0 May 27 02:23 .hushlogin -r--r--r-- 1 root wheel 0 May 27 02:22 .rhosts welke voorkomen dat /etc/motd getoond wordt. PPP shells voor statische IP-gebruikers PPP shells Creeër het ppp-shell bestand zoals hierboven, en voor elk account met een statisch toegewezen IP-adres creeërt u een symbolische link naar ppp-shell. Als u bijvoorbeeld drie inbel gebruikers hebt genaamd fred, sam en mary waar u een /24 CIDR netwerk voor routeert, moet u het volgende typen: &prompt.root; ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-fred &prompt.root; ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-sam &prompt.root; ln -s /etc/ppp/ppp-shell /etc/ppp/ppp-mary Elk van deze inbelgebruikers moet de shell ingesteld hebben op de symbolische link die hierboven is gecreeërd (bijvoorbeeld mary's shell moet zijn /etc/ppp/ppp-mary). Het instellen van <filename>ppp.conf</filename> voor dynamische IP-gebruikers Het /etc/ppp/ppp.conf bestand moet iets zoals hieronder bevatten: default: set debug phase lcp chat set timeout 0 ttyu0: set ifaddr 203.14.100.1 203.14.100.20 255.255.255.255 enable proxy ttyu1: set ifaddr 203.14.100.1 203.14.100.21 255.255.255.255 enable proxy Het inspringen is belangrijk. De default: sectie wordt altijd geladen. Voor elke inbellijn die ingeschakeld is in /etc/ttys moet een soortgelijke regel worden gemaakt als die voor ttyu0: hierboven. Elke regel moet een uniek IP-adres krijgen van uw pool van IP-adressen voor dynamische gebruikers. Het instellen van <filename>ppp.conf</filename> voor statische IP-gebruikers. Samen met de inhoud van het voorbeeld /usr/share/examples/ppp/ppp.conf bestand hierboven moet een sectie aangemaakt worden voor elke van de statisch ingestelde inbelgebruikers. We gaan door met ons fred, sam en mary voorbeeld. fred: set ifaddr 203.14.100.1 203.14.101.1 255.255.255.255 sam: set ifaddr 203.14.100.1 203.14.102.1 255.255.255.255 mary: set ifaddr 203.14.100.1 203.14.103.1 255.255.255.255 Het /etc/ppp/ppp.linkup bestand moet ook informatie over routeringen bevatten voor elke statische IP-gebruiker waar nodig. De regel hieronder voegt een routering toe voor het 203.14.201.0/24 netwerk via de ppp link van de gebruiker. fred: add 203.14.101.0 netmask 255.255.255.0 HISADDR sam: add 203.14.102.0 netmask 255.255.255.0 HISADDR mary: add 203.14.103.0 netmask 255.255.255.0 HISADDR <command>mgetty</command> en AutoPPP mgetty AutoPPP LCP Standaard staat de optie AUTO_PPP in de port comms/mgetty+sendfax welke mgetty in staat stelt om de LCP fase van PPP connecties te detecteren en aan de hand daarvan automatisch een ppp shell te creeëren. Echter, de standaard login procedure vindt in deze mode niet plaats, waardoor het nodig is om de gebruikers te authenticeren door middel van PAP of CHAP. De volgende sectie gaat er vanuit dat u succesvol de port comms/mgetty+sendfax op uw systeem heeft gecompileerd en geïnstalleerd. Zorg ervoor dat uw /usr/local/etc/mgetty+sendfax/login.config bestand de volgende inhoud heeft: /AutoPPP/ - - /etc/ppp/ppp-pap-dialup Dit verteld mgetty om het ppp-pap-dialup script te starten wanneer er een PPP connectie gedetecteerd wordt. Creeër een bestand genaamd /etc/ppp/ppp-pap-dialup met de volgende inhoud (het bestand moet uitvoerbaar zijn): #!/bin/sh exec /usr/sbin/ppp -direct pap$IDENT Voor elke inbelregel die ingeschakeld is in /etc/ttys, creeër een corresponderende regel in /etc/ppp/ppp.conf. Dit gaat goed samen met de definities die hierboven gedaan zijn. pap: enable pap set ifaddr 203.14.100.1 203.14.100.20-203.14.100.40 enable proxy Elke gebruiker die op deze manier inlogt moet een gebruikersnaam en wachtwoord hebben in het /etc/ppp/ppp.secret bestand of de volgende optie moet worden toegevoegd om gebruikers te authenticeren via PAP vanuit het /etc/passwd bestand. enable passwdauth Als u een aantal gebruikers een statisch IP-adres wilt geven, kan dat gespecificeerd worden als het derde argument in /etc/ppp/ppp.secret. Zie /usr/share/examples/ppp/ppp.secret.sample voor een voorbeeld. µsoft; Extensies DNS NetBIOS PPP µsoft; extensies Het is mogelijk om PPP dusdanig te configuren dat deze DNS en NetBIOS naamserver adressen meegeeft. Om deze extensies in te schakelen met PPP versie 1.x kunnen de volgende regels toegevoegd worden aan de relevante sectie in /etc/ppp/ppp.conf: enable msext set ns 203.14.100.1 203.14.100.2 set nbns 203.14.100.5 en voor PPP versie 2 en hoger: accept dns set dns 203.14.100.1 203.14.100.2 set nbns 203.14.100.5 Dit verteld de cliënt het primaire en secundaire naamserver adres, en geeft een NetBIOS naamserver adres. In versie 2 en hoger zal PPP gebruik maken van de instellingen in /etc/resolv.conf als de regel set dns niet wordt gevonden. PAP en CHAP authenticatie PAP CHAP Sommige providers stellen hun systemen dusdanig in dat het authenticatie gedeelte van uw verbinding wordt afgehandeld door het PAP of CHAP authenticatie mechanisme. Als dit het geval is zal uw provider u niet voorzien van een login: prompt wanneer u verbinding maakt maar zal deze meteen gaan communiceren over het PPP protocol. PAP is minder veilig dan CHAP, maar beveiliging is meestal geen probleem omdat wachtwoorden, ook al worden deze in platte tekst verstuurd met PAP, alleen worden verstuurd via een seriële lijn. Hier is maar weinig ruimte voor crackers om stiekem mee te luisteren. Terug verwijzende naar de PPP en statische IP-adressen of PPP en dynamische IP-adressen secties moeten de volgende aanpassingen gedaan worden: 13 set authname Mijngebruikersnaam 14 set authkey Mijnwachtwoord 15 set login Regel 13: Deze regel geeft uw PPP/CHAP gebruikersnaam aan. U moet de juiste waardes invullen voor Mijngebruikersnaam. Regel 14: password Deze regel geeft uw PPP/CHAP wachtwoord aan. U moet de juiste waarde invullen voor Mijnwachtwoord. Misschien wilt u een extra regel toevoegen als: 16 accept PAP of 16 accept CHAP om duidelijk te maken op welke manier u wilt authenticeren, standaard worden zowel PAP als CHAP geaccepteerd. Regel 15: Uw ISP zal normaal gesprokken niet eisen dat u op de server aanlogt als u gebruik maakt van PAP of CHAP. Daarom moet u de set login regel uitschakelen. Het aanpassen van uw <command>ppp</command> configuratie terwijl deze in gebruik is Het is mogelijk om tegen met het ppp programma te communiceren terwijl deze in gebruik is op de achtergrond, maar dat kan alleen als er een geschikte diagnostische poort ingesteld is. Om dit te kunnen doen moet de volgende regel worden toegevoegd aan de configuratie: set server /var/run/ppp-tun%d DiagnosticPassword 0177 Dit vertelt PPP om te luisteren naar het gespecificeerde &unix; domein socket, waarbij de cliënten gevraagd worden om het opgegeven wachtwoord voordat toegang verleend kan worden. Het %d in de naam wordt vervangen door het tun apparaat dat gebruikt wordt voor de verbinding. Zodra een socket ingesteld is kan het &man.pppctl.8; programma gebruikt worden in scripts die het draaiende programma willen bewerken. De vertaalmogelijkheden van PPP voor netwerkadressen gebruiken PPP NAT PPP heeft de mogelijkheid om interne NAT te gebruiken zonder dat de kernel hiervoor iets hoeft te doen. Deze functionaliteit kan worden ingeschakeld door de volgende regel in /etc/ppp/ppp.conf: nat enable yes Ook kan PPP NAT ingeschakeld worden door de optie -nat. Er is ook een /etc/rc.conf optie genaamd ppp_nat welke standaard ingeschakeld is. Als u gebruik wilt maken van deze optie, kunt u de volgende /etc/ppp/ppp.conf opties ook nuttig vinden om binnenkomende connecties door te sturen: nat port tcp 10.0.0.2:ftp ftp nat port tcp 10.0.0.2:http http of als u niets vertrouwd vanaf buitenaf: nat deny_incoming yes Laatste systeemconfiguratie PPP configuratie U heeft nu ppp geconfigurerd, maar er moeten nog een aantal dingen gedaan worden voordat deze klaar is om te kunnen werken. Hiervoor moeten een aantal aanpassingen gedaan worden in het bestand /etc/rc.conf. Van boven naar beneden kijkende zorgen we er als eerste voor dat de hostname= regel ingesteld is met bijvoorbeeld: hostname="foo.example.com" Als uw provider u een statisch adres en een naam heeft gegeven is het waarschijnlijk handig dat u deze naam gebruikt als uw hostnaam. Zoek naar de network_interfaces variabele. Als u uw systeem wilt configuren om in te bellen bij uw provider wanneer nodig, zorg er dan voor dat het tun0 apparaat is toegevoegd aan deze lijst. Haal deze anders weg. network_interfaces="lo0 tun0" ifconfig_tun0= De ifconfig_tun0 variabele moet leeg zijn, en een bestand genaamd /etc/start_if.tun0 moet aangemaakt worden met de volgende inhoud: ppp -auto mysystem Dit script wordt uitgevoerd tijdens de netwerk configuratie, waarbij uw ppp daemon wordt gestart in automatische mode. Als u een LAN heeft waarvoor deze machine een router is wilt u wellicht ook de meegeven. Bekijk de handleiding voor verdere details. Zorg ervoor dat het router programma is ingesteld op NO door middel van de volgende regel in uw /etc/rc.conf bestand: router_enable="NO" routed Het is belangrijk dat de routed daemon niet gestart wordt, omdat routed de neiging heeft om de standaard routeringtabel regels die gemaakt worden door ppp te verwijderen. Het is waarschijnlijk een goed idee om te zorgen dat de sendmail_flags regel de optie niet wordt meegenomen, anders zal sendmail periodiek een zoek actie verrichten op het netwerk, wat ervoor zorgt dat uw machine gaat uitbellen. U kunt het volgende instellen: sendmail_flags="-bd" sendmail Het nadeel hiervan is dat u sendmail moet forceren om de mailqueue periodiek te bekijken zodra de ppp link op is door het typen van: &prompt.root; /usr/sbin/sendmail -q U wilt wellicht gebruik maken van het !bg commando in ppp.linkup om dit automatisch te doen: 1 provider: 2 delete ALL 3 add 0 0 HISADDR 4 !bg sendmail -bd -q30m SMTP Als u dit niet wilt doen, is het mogelijk om een dfiler in te stellen welke SMTP verkeer blokkeert. Raadpleeg naar de voorbeeld bestanden voor verdere details. Alles wat nu nog nodig is, is het herstarten van de machine. Na het herstarten kunt het volgende typen: &prompt.root; ppp en daarna dial provider om de PPP sessie te starten, of u indien u dat wilt kan ppp automatisch sessies opzetten wanneer er uitgaand verkeer is (en wanneer u geen start_if.tun0 script heeft aangemaakt), typt u: &prompt.root; ppp -auto provider Samenvatting Om samen te vatten zijn de volgende stappen benodigd om PPP voor de eerste keer in te stellen: Aan de cliënt zijde: Zorg ervoor dat het tun apparaat is ingeschakeld in uw kernel. Zorg ervoor dat het apparaatbestand tunN beschikbaar is in de map /dev. Creeër een regel in /etc/ppp/ppp.conf. Het pmdemand voorbeeld zou moeten volstaand voor de meeste providers. Als u dynamische IP-adressen heeft, creeër een regel in /etc/ppp/ppp.linkup. Update uw /etc/rc.conf bestand. Creeër een start_if.tun0 script als u op verzoek wilt inbellen. Aan de server zijde: Zorg ervoor dat het tun apparaat is ingeschakeld in uw kernel. Zorg ervoor dat het apparaatbestand tunN beschikbaar is in de map /dev. Creeër een regel in /etc/passwd (door gebruik te maken van het &man.vipw.8; programma). Creeër een profiel in deze gebruikers home directory die ppp -direct direct-server start of iets in die trant. Creeër een regel in /etc/ppp/ppp.conf. Het direct-server voorbeeld zou moeten volstaan. Creeër een regel in /etc/ppp/ppp.linkup. Update uw /etc/rc.conf bestand. Gennady B. Sorokopud Delen origineel bijgedragen door Robert Huff Kernel-PPP gebruiken Het opzetten van kernel-PPP Deze sectie geldt en is alleen geldig voor &os; 7.X. PPP kernel-PPP Voordat u begint met het opzetten van PPP op uw machine, zorg ervoor dat het pppd commando zich bevindt in de map /usr/sbin en dat de map /etc/ppp bestaat. pppd kan in twee verschillende modes werken: Als een cliënt — u wilt uw machine verbinden met de buitenwereld via een seriële PPP-verbinding of een modemlijn. PPP server Als een server — uw machine bevind zich in het netwerk en wordt gebruikt om andere computers te verbinden door middel van PPP. In beide gevallen moet u een bestand met opties instellen (/etc/ppp/options of ~/.ppprc als er meer dan één gebruiker is op uw machine die gebruik maakt van PPP). U heeft ook enige modem/seriële software nodig (comms/kermit wordt aanbevolen), zodat u de andere kant kunt bellen en een verbinding kunt opzetten. Trev Roydhouse Gebaseerd op informatie geleverd door Gebruik maken van <command>pppd</command> als cliënt PPP cliënt Cisco De volgende /etc/ppp/options kan gebruikt worden om met een Cisco terminal server PPP lijn verbinding te maken. crtscts # Schakel hardware flow controle in modem # modem controle lijn noipdefault # De PPP-server aan de andere kant moet uw IP-adres # opgeven, als de machine aan de andere kant uw IP # adres niet meegeeft tijdens de IPCP onderhandeling # moet deze optie worden verwijderd passive # Wacht op LCP pakketten domain ppp.foo.com # Vul uw domein naam hier in :remote_ip # Vul het IP-adres van de PPP # server in deze wordt gebruikt om pakketten te # routeren via de PPP link. Als u de noipdefault optie # niet heeft aangegeven verander dan deze regel in # local_ip:remote_ip defaultroute # Vul dit in als u wilt dat de PPP server de standaard # router wordt Om verbinding te maken: Kermit modem Bel naar de machine aan de andere kant door middel van Kermit (of een ander modem programma), en vul uw gebruikersnaam en wachtwoord in (of wat er ook nodig is om de verbinding op te brengen met de machine aan de andere kant). Stop Kermit (zonder de lijn op te hangen). Type het volgende: &prompt.root; /usr/sbin/pppd /dev/tty01 19200 Wees er zeker van dat de juiste snelheid en het juiste apparaat wordt aangesproken. Uw computer is nu verbonden met PPP. Als de connectie faalt, kan de optie worden meegegeven in het /etc/ppp/options bestand waarna op de console berichten kunnen worden geraadpleegd om het probleem te achterhalen. Het volgende /etc/ppp/pppup script zal alle drie de stappen automatisch doen: #!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi ifconfig ppp0 down ifconfig ppp0 delete kermit -y /etc/ppp/kermit.dial pppd /dev/tty01 19200 Kermit /etc/ppp/kermit.dial is een Kermit script dat belt en alle benodigde authorisaties doet op de machine aan de andere kant (een voorbeeld van zo'n script is bijgevoegd aan het einde van dit document). Gebruik het volgende /etc/ppp/pppdown script om de PPP lijn af te breken: #!/bin/sh pid=`pgrep pppd` if [ X${pid} != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill -TERM ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi /sbin/ifconfig ppp0 down /sbin/ifconfig ppp0 delete kermit -y /etc/ppp/kermit.hup /etc/ppp/ppptest Controleer of pppd nog steeds draait door het uitvoeren van /usr/etc/ppp/ppptest, welke er als volgend uitziet: #!/bin/sh pid=`pgrep pppd` if [ X${pid} != "X" ] ; then echo 'pppd running: PID=' ${pid-NONE} else echo 'No pppd running.' fi set -x netstat -n -I ppp0 ifconfig ppp0 Om het modem op te hangen, voer het /etc/ppp/kermit.hup script uit welke het volgende bevat: set line /dev/tty01 ; vul hier uw modem in set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 echo \13 exit Hier is een alternatieve methode welke gebruik maakt van chat in plaats van kermit: De volgende twee regels zijn voldoende om een pppd verbinding op te zetten. /etc/ppp/options: /dev/cuad1 115200 crtscts # Schakel hardware flow controle in modem # modem controle lijn connect "/usr/bin/chat -f /etc/ppp/login.chat.script" noipdefault # De PPP server aan de andere kant moet uw IP-adres # opgeven, als de machine aan de andere kant uw IP # adres niet meegeeft tijdens de IPCP onderhandeling # moet deze optie worden verwijderd passive # Wacht op LCP pakketten domain your.domain # Vul uw domein naam hier in :remote_ip # Vul het IP-adres van de PPP # server in deze wordt gebruikt om pakketten te # routeren via de PPP link. Als u de noipdefault optie # niet heeft aangegeven verander dan deze regel in # local_ip:remote_ip defaultroute # Vul dit in als u wilt dat de PPP server de standaard # router wordt /etc/ppp/login.chat.script: Het volgende moet op één regel. ABORT BUSY ABORT 'NO CARRIER' "" AT OK ATDTtelefoon.nummer CONNECT "" TIMEOUT 10 ogin:-\\r-ogin: login-id TIMEOUT 5 sword: password Zodra deze zijn geïnstalleerd en correct aangepast is het enige dat gedaan moet worden, het starten van pppd zoals volgt: &prompt.root; pppd Gebruik maken van <command>pppd</command> als server /etc/ppp/options moet ongeveer het volgende bevatten: crtscts # Hardware flow controle netmask 255.255.255.0 # netmask (niet vereist) 192.114.208.20:192.114.208.165 # IP's van lokale en niet lokale hosten # het lokale IP moet anders zijn dan # degeen die is toegewezen aan de # Ethernet (of andere) interface op uw # machine. remote IP is het IP-adres # dat wordt toegewezen aan de machine # aan de andere kant domain ppp.foo.com # uw domein passive # Wacht op LCP modem # modem lijn Het volgende /etc/ppp/pppserv script zal pppd vertellen zich te gedragen als server: #!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi # reset ppp interface ifconfig ppp0 down ifconfig ppp0 delete # enable autoanswer mode kermit -y /etc/ppp/kermit.ans # run ppp pppd /dev/tty01 19200 Gebruik dit /etc/ppp/pppservdown script om de server te stoppen: #!/bin/sh pgrep -l pppd pid=`pgrep pppd` if [ "X${pid}" != "X" ] ; then echo 'killing pppd, PID=' ${pid} kill ${pid} fi pgrep -l kermit pid=`pgrep kermit` if [ "X${pid}" != "X" ] ; then echo 'killing kermit, PID=' ${pid} kill -9 ${pid} fi ifconfig ppp0 down ifconfig ppp0 delete kermit -y /etc/ppp/kermit.noans Het volgende Kermit script (/etc/ppp/kermit.ans) zal het automatisch beantwoorden van uw modem in of uitschakelen. Het moet eruit zien als volgend: set line /dev/tty01 set speed 19200 set file type binary set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none pau 1 out +++ inp 5 OK out ATH0\13 inp 5 OK echo \13 out ATS0=1\13 ; Verander dit in out ATS0=0\13 als u automatisch ; beantwoorden wilt uitschakelen inp 5 OK echo \13 exit Een script genaamd /etc/ppp/kermit.dial wordt gebruikt voor het bellen en authenticeren van de machine aan de andere kant. U moet deze aanpassen aan uw wensen. Vul in dit script uw inlognaam en wachtwoord in, u moet ook het input statement aanpassen afhankelijk hoe uw modem antwoordt en de communicatie van de machine aan de andere kant. ; ; Vul de seriële lijn in welke verbonden is met het modem ; set line /dev/tty01 ; ; Stel het modem snelheid in: ; set speed 19200 set file type binary ; volledige 8 bit bestands xfer set file names literal set win 8 set rec pack 1024 set send pack 1024 set block 3 set term bytesize 8 set command bytesize 8 set flow none set modem hayes set dial hangup off set carrier auto ; Daarna stel SET CARRIER in indien nodig set dial display on ; Stel daarna SET DIAL in indien nodig set input echo on set input timeout proceed set input case ignore def \%x 0 ; login prompt teller goto slhup :slcmd ; stel het modem in op commandomodus echo Stel het modem in op commandomodus. clear ; Verwijder ongelezen karakters uit de input buffer pause 1 output +++ ; hayes escape sequence input 1 OK\13\10 ; wacht op OK if success goto slhup output \13 pause 1 output at\13 input 1 OK\13\10 if fail goto slcmd ; Als het modem niet antwoordt met OK, probeer het opnieuw :slhup ; hang de telefoon op clear ; Verwijder ongelezen karakters uit de input buffer pause 1 echo De telefoon wordt opgehangen. output ath0\13 ; hayes command voo on hook input 2 OK\13\10 if fail goto slcmd ; Als er geen OK antwoord is, stel het modem in op commandomodus :sldial ; Draai het nummer pause 1 echo Bellen. output atdt9,550311\13\10 ; put phone number here assign \%x 0 ; zero the time counter :look clear ; Verwijder ongelezen karakters uit de input buffer increment \%x ; Tel de seconden input 1 {CONNECT } if success goto sllogin reinput 1 {NO CARRIER\13\10} if success goto sldial reinput 1 {NO DIALTONE\13\10} if success goto slnodial reinput 1 {\255} if success goto slhup reinput 1 {\127} if success goto slhup if < \%x 60 goto look else goto slhup :sllogin ; login assign \%x 0 ; Stel de tijd teller in op nul pause 1 echo Zoeken naar de login prompt :slloop increment \%x ; Tel de seconden clear ; Verwijder ongelezen karakters uit de input buffer output \13 ; ; Stel hier de verwachte login prompt in: ; input 1 {Username: } if success goto sluid reinput 1 {\255} if success goto slhup reinput 1 {\127} if success goto slhup if < \%x 10 goto slloop ; Probeer 10 x om een login prompt te krijgen else goto slhup ; Hang op en probeer het nogmaals als er 10 mislukte pogingen zijn :sluid ; ; Vul hier uw gebruikersnaam in: ; output ppp-login\13 input 1 {Password: } ; ; Vul hier uw wachtwoord in: ; output ppp-password\13 input 1 {Entering SLIP mode.} echo quit :slnodial echo \7Er is geen kiestoon, controleer de telefoon lijn!\7 exit 1 ; local variables: ; mode: csh ; comment-start: "; " ; comment-start-skip: "; " ; end: Tom Rhodes Bijgedragen door Het problemen oplossen van <acronym>PPP</acronym>-verbindingen PPP troubleshooten - - Met ingang van &os; 8.0 vervangt het stuurprogramma - &man.uart.4; het stuurprogramma &man.sio.4;. Apparaatknooppunten voor - seriële poorten zijn hernoemd van - /dev/cuadN naar - /dev/cuauN en van - /dev/ttydN naar - /dev/ttyuN. - Gebruikers van &os; 7.X zullen de documentatie met deze - veranderingen moeten lezen. - - Deze sectie behandelt een paar problemen die kunnen optreden wanneer PPP wordt gebruikt over een modemverbinding. Bijvoorbeeld, misschien moet u exact weten wat de prompt is die het systeem waarop u inbelt presenteert. Sommige providers presenteren de ssword prompt terwijl anderen password tonen als het ppp script niet goed geschreven is en de inlogin poging faalt. De meest standaard manier om ppp verbindingen te onderzoeken op problemen is door handmatig een connectie op te zetten. De volgende informatie helpt u om stap voor stap een handmatige connectie op te zetten. Controleer de apparaatknooppunten Als er een eigen kernel gebruikt wordt, vergeet dan niet om de volgende regel in uw kernelinstellingenbestand op te nemen: device uart Het apparaat uart is al in de kernel GENERIC opgenomen, dus zijn er in dit geval geen extra stappen nodig. Controleer de resultaten van het commando dmesg voor het modemapparaat door middel van: &prompt.root; dmesg | grep uart U zou enige informatie moeten ontvangen over de uart apparaten. Deze bevinden zich op de COM-poorten die we nodig hebben. Als uw modem zich gedraagt als een standaard seriële poort zou u deze moeten vinden als zijnde uart1 of COM2. Als dat klopt hoeft u de kernel niet opnieuw te bouwen. Wanneer u de sio-apparaten controleert en het modem is op uart1 te vinden of als COM2 als u zich onder &ms-dos; bevindt, dan is uw modemapparaat /dev/cuau1. Handmatig verbinding maken Verbinding maken met het internet door handmatig controle te hebben over ppp is snel, makkelijk en een geweldige manier om problemen te vinden bij een verbinding of zelfs voor alleen het verkrijgen van inforamtie over hoe uw provider de ppp cliënt verbindingen behandelt. Laten we starten met PPP vanaf de commando regel. Let op dat in al onze voorbeelden we gebruik maken van example als hostnaam van de machine die PPP draait. U start ppp door enkel het commando ppp te typen: &prompt.root; ppp We hebben nu ppp gestart. ppp ON example> set device /dev/cuau1 We stellen ons modem in, in dit geval is dat cuau1. ppp ON example> set speed 115200 We stellen de verbindings snelheid in, in dit geval gebruiken we 115,200 kbps. ppp ON example> enable dns Vertel ppp om onze naam vertaler te configuren, en de juiste naamserver regels toe te voegen aan /etc/resolv.conf. Als ppp onze hostnaam niet kan bepalen, kunnen we deze later instellen. ppp ON example> term Wissel naar terminal mode zodat we handmatig het modem kunnen bedienen. deflink: Entering terminal mode on /dev/cuau1 type '~h' for help at OK atdt123456789 Gebruik at om het modem te initialiseren, en daarna atdt en het nummer voor uw provider om het inbel proces te beginnen. CONNECT Bevestiging van de verbinding, als we tegen problemen aanlopen met de verbinding, welke niet gerelateerd zijn aan de hardware, is dit de plek om te beginnen om de problemen op te lossen. provider login:myusername Hier wordt u gevraagd om een gebruikersnaam. Geef de gebruikersnaam op welke aangeleverd is door de provider. provider pass:mypassword Deze keer worden we gevraagd voor een wachtwoord. Vul uw wachtwoord in welke u is aangeleverd door de provider. Net zoals het aanloggen op &os; zal het wachtwoord niet getoond worden. Shell or PPP:ppp Afhankelijk van uw provider wordt deze prompt wellicht nooit getoond. Hier wordt ons gevraagd of we een shell willen starten op de host van de provider, of dat we ppp willen starten. In dit geval is er gekozen voor ppp omdat we een internet verbinding willen. Ppp ON example> Let op dat in dit voorbeeld de eerste een hoofdletter geworden is. Dit geeft aan dat we succesvol verbonden zijn met de provider. PPp ON example> We hebben ons succesvol geauthenticeerd bij onze provider en we wachten op een IP-adres dat ons wordt toegewezen. PPP ON example> We hebben een IP adres verkregen en hebben succesvol een verbinding opgebouwd. PPP ON example>add default HISADDR Hier wordt een standaard route toegevoegd. Deze moet worden toegevoegd voordat we kunnen communiceren met de buitenwereld aangezien de enige verbinding op dit moment met de andere machine is. Als dit niet lukt omdat er al een route bestaat, kan er een bang karakter (!) geplaatst worden voor de optie. Als alternatief kan dit ook gedaan worden voordat de verbinding opgezet wordt, waarna een nieuwe route onderhandeld wordt. Als alles goed gegaan is, zou er nu een actieve verbinding moeten zijn met het internet, welke in de achtergrond gezet kan worden door CTRLz te gebruiken. Als u ziet dat het commando PPP terugkeert naar ppp is de verbinding afgebroken. Dit is goed om te weten, aangezien dit de status van de verbinding toont. Hoofdletter P's betekenen dat er een verbinding is met de provider, en kleine letters betekend dat de verbinding verloren is gegaan om welke reden dan ook. ppp kent alleen deze twee statussen. Debuggen Als u een directe lijn heeft en geen verbinding kan maken, zet dan hardware flow CTS/RTS uit met de optie. Dit is meestal het geval voor een PPP terminal server waar PPP hangt wanneer deze probeert te schrijven naar uw communicatie link, dus moet deze wachten op een CTS of een Clear To Send signaal welke misschien nooit komt. Als u deze optie gebruikt, moet u ook de optie gebruiken welke benodigd kan zijn om hardware afhankelijkheden te omzeilen door bepaalde karakters over en weer te sturen, meestal XON/XOFF. Zie de &man.ppp.8; handleiding voor meer informatie over deze optie en hoe deze gebruikt kan worden. Als u een ouder modem heeft, kan het voorkomen dat u ook de optie moet gebruiken. De parity is standaard ingesteld op none maar wordt gebruikt voor fout controle (met als gevolg een grote verhoging van de hoeveelheid data) bij oudere modems en sommige providers. Dit is bijvoorbeeld een benodigde optie bij de Compuserve provider. Het kan voorkomen dat PPP niet terugkeert naar de commando mode, wat meestal betekent dat er een onderhandelings fout is waarbij de provider wacht op uw kant om de onderhandeling te kunnen beginnen. Op dit moment kunt u gebruik maken van het ~p commando om ppp te forceren om de configuratie informatie te versturen. Als u nooit een inlogin prompt krijgt is het zeer waarschijnlijk dat u PAP of CHAP authenticatie moet gebruiken in plaats van de &unix; stijl in het voorbeeld hierboven. Om gebruik te maken van PAP of CHAP voegt u het volgende opties toe aan PPP voordat u de terminal mode ingaat: ppp ON example> set authname mijngebruikersnaam Waarbij mijngebruikersnaam moet worden vervangen met de gebruikersnaam die wordt toegewezen door de provider. ppp ON example> set authkey mijnwachtwoord Waarbij mijnwachtwoord moet worden vervangen door het wachtwoord wat u is toegewezen door de provider. Als u een goed werkende verbinding kunt maken maar het onmogelijk lijkt om een domeinnaam te vinden, probeert u dan &man.ping.8; te gebruiken met een IP adres en kijk of er enige informatie terugkomt. Als u 100 procent (100%) packet loss ziet is het zeer waarschijnlijk dat u geen default route heeft gekregen. Controleer nogmaals of de optie ingesteld is tijdens de connectie. Als u verbinding kunt maken met een extern IP adres is het mogelijk dat een naamserver niet is toegevoegd aan het /etc/resolv.conf bestand. Dit bestand moet er uitzien als volgend: domain example.com nameserver x.x.x.x nameserver y.y.y.y Waar x.x.x.x en y.y.y.y moet worden vervangen door het IP adres van uw providers naamservers. Deze informatie kan mogelijk wel of niet geleverd zijn toen u zich inschreef, maar een snel telefoontje naar uw provider zou hierin uitkomst kunnen bieden. U kunt ook &man.syslog.3; gebruiken om een log functie voor PPP aan te maken. Voeg het volgende toe aan /etc/syslog.conf: !ppp *.* /var/log/ppp.log Deze functionaliteit bestaat in de meeste gevallen al. Jim Mock Bijgedragen (vanaf http://node.to/freebsd/how-tos/how-to-freebsd-pppoe.html) door PPP gebruiken over Ethernet (PPPoE) PPP over Ethernet PPPoE PPP, over Ethernet Deze sectie beschrijft hoe PPP over Ethernet opgezet kan worden (PPPoE). Het configureren van de kernel Inmiddels is het niet langer benodigd om de kernel configuratie aan te passen voor PPPoE. Als de benodigde netgraph ondersteuning niet in de kernel aanwezig is zal deze dynamisch geladen worden door ppp. Het instellen van <filename>ppp.conf</filename> Hieronder volgt een voorbeeld van een werkende ppp.conf: default: set log Phase tun command # Er kan meer gedetailleerde logging ingeschakeld worden indien gewenst set ifaddr 10.0.0.1/0 10.0.0.2/0 name_of_service_provider: set device PPPoE:xl1 # Vervang x11 met uw ethernet apparaat set authname UWLOGINNAAM set authkey UWWACHTWOORD set dial set login add default HISADDR Het draaien van <application>ppp</application> Als de root gebruiker kunt u het volgende draaien: &prompt.root; ppp -ddial name_of_service_provider Het pstarten van <application>ppp</application> tijdens het opstarten Voeg het volgende toe aan uw /etc/rc.conf bestand: ppp_enable="YES" ppp_mode="ddial" ppp_nat="YES" # Indien u nat wilt inschakelen voor het lokale netwerk, gebruik anders NO ppp_profile="naam_van_service_provider" Gebruik maken van een PPPoE service label Soms is het nodig om een service tag te gebruiken om verbinding te kunnen maken. Service tags worden gebruikt om onderscheid te maken tussen de verschillende PPPoE servers die verbonden zijn met een netwerk. Uw provider zou u de juiste service tag gegevens verstrekt moeten hebben in de documentatie die opgeleverd is. Als u deze niet kunt vinden in de documentatie moet u deze opvragen bij uw technische support afdeling van uw provider. Als allerlaatste optie kunt u de aangerade methode gebruiken van het Roaring Penguin PPPoE programma welke gevonden kan worden in de Ports Collectie. Houd u echter in uw achterhoofd dat dit uw modem ernstige schade kan toebrengen, dus denkt u er goed over na voordat u het uitprobeert. Installeer simpelweg het programma dat is meegeleverd bij het modem door uw provider. Open hierna het System menu vanuit het programma. De naam van uw profiel moet hier te vinden zijn. Meestal is deze ISP. De naam van het profiel (servicetag) zal worden gebruikt in de PPPoE configuratie regel van ppp.conf in het provider gedeelte van het set device commando (zie de &man.ppp.8; handleiding voor meer informatie hierover). Dit zou er als volgend uit moeten zien: set device PPPoE:xl1:ISP Vergeet u niet om xl1 te vervangen door het juiste apparaat voor uw Ethernet kaart. Vergeet u niet om ISP te vergangen door het profiel wat hierboven ingesteld is. Voor meer informatie zie: Cheaper Broadband with FreeBSD on DSL door Renaud Waldura. PPPoE met een &tm.3com; <trademark class="registered">HomeConnect</trademark> ADSL Modem Dual Link Dit modem volgt RFC 2516 niet (Een methode voor het versturen van PPP over Ethernet (PPPoE) geschreven door by L. Mamakos, K. Lidl, J. Evarts, D. Carrel, D. Simone, and R. Wheeler). Daarentegen is een ander type pakket code gebruikt voor de Ethernet frames. Klaagt u alstublift bij 3Com als u vind dat ze zich aan de PPPoE specificatie moeten houden. Om &os; in staat te stellen om te communiceren met dit apparaat, moet er een sysctl ingesteld worden. Dit kan automatisch tijdens het opstarten gedaan worden door het bewerken van /etc/sysctl.conf: net.graph.nonstandard_pppoe=1 Dit kan ook direct gedaan worden met het commando: &prompt.root; sysctl net.graph.nonstandard_pppoe=1 Helaas is het, doordat dit een systeem brede instelling is, niet mogelijk om tegelijkertijd met een normale PPPoE cliënt of server en een &tm.3com; HomeConnect ADSL-modem te communiceren. Gebruik maken van <application>PPP</application> over ATM (PPPoA) PPP over ATM PPPoA PPP, over ATM Het volgende beschrijft hoe PPP over ATM (PPPoA) opgezet kan worden. PPPoA is een populaire keuze binnen Europese DSL providers. Gebruik maken van PPPoA met de Alcatel &speedtouch; USB PPPoA ondersteuning voor dit apparaat wordt geleverd door middel van een port in &os; omdat de firmware wordt gedistribueerd onder Alcatel's licentie overeenkomst en mag derhalve niet vrijelijk verspreid worden met het basis systeem van &os;. Om de software te installeren, wordt simpelweg de Ports Collectie gebruikt. Installeer de net/pppoa port en volg de instructies die meegeleverd worden. Zoals de meeste USB apparaten moet de Alcatel &speedtouch; USB zijn firmware downloaden van de host computer om correct te kunnen werken. Het is mogelijk om dit proces te automatiseren binnen &os; zodat deze overdracht elke keer gebeurd als het apparaat in een USB poort wordt gestoken. De volgende informatie kan worden toegevoegd aan het /etc/usbd.conf bestand om deze automatische overdracht in te schakelen. Dit bestand moet bewerkt worden door de root gebruiker. device "Alcatel SpeedTouch USB" devname "ugen[0-9]+" vendor 0x06b9 product 0x4061 attach "/usr/local/sbin/modem_run -f /usr/local/libdata/mgmt.o" Om de USB daemon, usbd, te starten moet de volgende regel toegevoegd worden aan /etc/rc.conf: usbd_enable="YES" Het is ook mogelijk om ppp op te zetten om in te bellen tijdens het opstarten. Om dit te doen moet de volgende regel worden toegevoegd aan /etc/rc.conf. Voor deze procedure moet er ook aangelogt zijn als de root gebruiker. ppp_enable="YES" ppp_mode="ddial" ppp_profile="adsl" Om dit correct te laten werken moet het voorbeeld ppp.conf bestand gebruikt worden welke geleverd wordt door de net/pppoa port. Gebruik maken van mpd U kunt mpd gebruiken om met een variateit aan diensten verbinding te maken, in het bijzonder PPTP diensten. U kunt mpd vinden in de Ports Collectie, net/mpd. Veel ADSL-modems vereisen dat er een PPTP tunnel wordt gecreeërd tussen het modem en de computer, een voorbeeld van zo'n modem is de Alcatel &speedtouch; Home. Eerst moet u de port installeren waarna mpd geconfigureerd kan worden om uw eisen en provider instellingen op te geven. De port plaatst een verzameling voorbeeldconfiguratiebestanden welke goed gedocumenteerd zijn in PREFIX/etc/mpd/. Let op dat PREFIX betekend dat dit de directory is waar uw ports in worden geïnstalleerd. Standaard is dit /usr/local/. Een complete handleiding om mpd te configureren is beschikbaar in HTML formaat zodra de port geïnstalleerd is. Deze wordt geplaatst in PREFIX/share/doc/mpd/. Hieronder staat een voorbeeld configuratie om verbinding te maken met een ADSL dienstverlener door het gebruik van mpd. De configuratie is verspreid over twee bestanden, allereerst het mpd.conf bestand: Dit voorbeeld van het bestand mpd.conf werkt alleen met mpd 4.X. default: load adsl adsl: new -i ng0 adsl adsl set bundle authname gebruikersnaam set bundle password wachtwoord set bundle disable multilink set link no pap acfcomp protocomp set link disable chap set link accept chap set link keep-alive 30 10 set ipcp no vjcomp set ipcp ranges 0.0.0.0/0 0.0.0.0/0 set iface route default set iface disable on-demand set iface enable proxy-arp set iface idle 0 open De gebruikersnaam die gebruikt wordt om uzelf te authenticeren aan uw provider. Het wachtwoord wat gebruikt wordt om uzelf te authenticeren aan uw provider. Het mpd.links bestand bevat informatie over de link, of linken waarmee u verbinding wilt maken. Een voorbeeld mpd.links wat bij bovenstaand voorbeeld hoort is hieronder gegeven: adsl: set link type pptp set pptp mode active set pptp enable originate outcall set pptp self 10.0.0.1 set pptp peer 10.0.0.138 Het IP-adres van uw &os; computer waar vanaf mpd gebruikt wordt. Het IP-adres van uw ADSL-modem. Voor de Alcatel &speedtouch; Home is dit adres standaard 10.0.0.138. Het is mogelijk om de verbinding makkelijk te initialiseren door het volgende commando als root uit te voeren: &prompt.root; mpd -b adsl U kunt de status van de verbinding zien met het volgende commando: &prompt.user; ifconfig ng0 ng0: flags=88d1<UP,POINTOPOINT,RUNNING,NOARP,SIMPLEX,MULTICAST> mtu 1500 inet 216.136.204.117 --> 204.152.186.171 netmask 0xffffffff Het gebruik van mpd is de aangeraden manier om met een ADSL dienst te verbinden met &os;. Gebruik maken van pptpclient Het is ook mogelijk om &os; te gebruiken om naar een andere PPPoA dienstenm verbinding te maken door middel van de net/pptpclient port. Om gebruik te maken van net/pptpclient om naar een DSL dienst verbinding te maken, installeert u de port of package en bewerkt u /etc/ppp/ppp.conf U moet dit onder de root gebruiker doen, om beide acties uit te voeren. Een voorbeeld sectie van ppp.conf is hieronder gegeven. Voor meer informatie over ppp.conf consulteert u de &man.ppp.8; handleiding. adsl: set log phase chat lcp ipcp ccp tun command set timeout 0 enable dns set authname gebruikersnaam set authkey wachtwoord set ifaddr 0 0 add default HISADDR De gebruikersnaam van uw account bij uw DSL provider. Het wachtwoord voor uw account. Omdat u het wachtwoord van uw account in het ppp.conf bestand in leesbare vorm moet plaatsen, moet u ervoor zorgen dat niemand anders de inhoud van dit bestand kan lezen. De volgende serie van commando's zorgt ervoor dat het bestand alleen leesbaar is door de root gebruiker. Raadpleeg de handleidingen van &man.chmod.1; en &man.chown.8; voor verdere informatie. &prompt.root; chown root:wheel /etc/ppp/ppp.conf &prompt.root; chmod 600 /etc/ppp/ppp.conf Dit opent een tunnel voor een PPP sessie naar uw DSL router. Ethernet DSL-modems hebben een voor geconfigureerd LAN IP adres waarmee u verbinding maakt. In het geval van de Alcatel &speedtouch; home is 10.0.0.138 het adres. Uw router documentatie vertelt u welk adres uw apparaat gebruikt. Om de tunnel te openen en om een PPP sessie op te zetten, start u het volgende commando: &prompt.root; pptp address adsl Het kan wenselijk zijn om een ampersand (&) toe te voegen aan het einde van het vorige commando, omdat pptp uw prompt niet teruggeeft. Er wordt een tun virtueel tunnel apparaat gecreeërd voor interactie tussen de pptp en ppp processen. Zodra u terugbent op uw prompt, of als pptp bevestigd dat er een verbinding is, kunt u de tunnel als volgend inzien: &prompt.user; ifconfig tun0 tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500 inet 216.136.204.21 --> 204.152.186.171 netmask 0xffffff00 Opened by PID 918 Als het niet mogelijk is om verbinding te maken, controleert u de configuratie van uw router, welke meestal bereikbaar is door middel van telnet of via een web browser. Als u nog steeds geen verbinding kunt maken moet u de resultaten van het pptp onderzoeken en de inhoud van het ppp log bestand, /var/log/ppp.log voor meer hints over wat er mis kan zijn. Satoshi Asami Origineel bijgedragen door Guy Helmer Met input van Piero Serini Gebruik maken van SLIP SLIP Deze sectie geldt en is alleen geldig voor &os; 7.X. Het opzetten van een SLIP-cliënt SLIP cliënt Het volgende is één manier om een &os; machine in te stellen voor gebruik met SLIP op een statisch host netwerk. Voor dynamische hostnaam toewijzing (uw adres veranderd elke keer als u inbelt), heeft u waarschijnlijk een meer complexe opzet nodig. Bepaal eerst aan welke seriële poort uw modem verbonden is. Veel mensen gebruiken hiervoor een symbolische link zoals /dev/modem welke verwijst naar de echte naam van het apparaat /dev/cuadN. Dit geeft de mogelijkheid om naam abstract te houden, voor het geval het modem ooit verplaatst wordt naar een andere poort. Het kan best een vervelende klus zijn wanneer er een aantal bestanden in /etc en .kermrc bestanden verspreid over het gehele systeem gerepareerd moeten worden! /dev/cuad0 is COM1, cuad1 is COM2, etc. Zorg ervoor dat u het volgende in uw kernel configuratie bestand hebt: device sl Deze is standaard opgenomen in de GENERIC kernel, dus dat zou geen problemen moeten opleveren tenzij u deze verwijderd heeft. Dingen die u maar eenmalig hoeft uit te voeren Voeg uw machine, de router en de naamservers toe aan uw /etc/hosts bestand. Ons bestand ziet er als volgend uit: 127.0.0.1 localhost loghost 136.152.64.181 water.CS.Example.EDU water.CS water 136.152.64.1 inr-3.CS.Example.EDU inr-3 slip-gateway 128.32.136.9 ns1.Example.EDU ns1 128.32.136.12 ns2.Example.EDU ns2 Zorg ervoor dat u files voor dns in de hosts: sectie van uw /etc/nsswitch.conf bestand. Zonder deze parameters zouden er interessante dingen kunnen gebeuren. Bewerk het /etc/rc.conf bestand. Stel uw hostnaam in door de regel te bewerken die aangeeft: hostname="myname.my.domain" De volledig gekwalificeerde internet hostnaam moet hier geplaatst worden. standaard routering Stel de standaard router in door het aanpassen van de volgende regel van: defaultrouter="NO" naar: defaultrouter="slip-gateway" Creeër en bestand genaamd /etc/resolv.conf welke het volgende bevat: domain CS.Example.EDU nameserver 128.32.136.9 nameserver 128.32.136.12 naamserver domeinnaam Zoals u kunt zien, stellen deze de naamserver hosten in. Uiteraard is het echte domein en adres afhankelijk van uw omgeving. Stel het wachtwoord in voor de root en de toor gebruikers (en elke andere gebruiker die geen wachtwoord heeft). Herstart de machine en controleeer of deze opkomt met de correcte hostnaam. Het opzetten van een SLIP-verbinding SLIP verbinding maken met Bel in, type slip op de prompt en voer uw machine naam en wachtwoord in. Wat is vereist, is afhankelijk van uw omgeving. Als u gebruik maakt van Kermit kan een script als de volgende gebruikt worden: # kermit setup set modem hayes set line /dev/modem set speed 115200 set parity none set flow rts/cts set terminal bytesize 8 set file type binary # De volgende macro zal inbellen en ons inloggen. define slip dial 643-9600, input 10 =>, if failure stop, - output slip\x0d, input 10 Username:, if failure stop, - output silvia\x0d, input 10 Password:, if failure stop, - output ***\x0d, echo \x0aCONNECTED\x0a Uiteraard moet u uw gebruikersnaam en wachtwoord wijzigen zodat deze overeenkomen met die van u. Nadat dit gedaan is kunt u slip invullen op de Kermit prompt om verbinding te maken. Het achterlaten van uw wachtwoord in leesbare tekst waar dan ook op het bestandssysteem is zeker een slecht idee. Doe dit op eigen risico. Laat Kermit daar (het programma kan tijdelijk uitgeschakeld worden door Ctrl z ) en type vervolgens als root: &prompt.root; slattach -h -c -s 115200 /dev/modem Als u in staat bent om andere hosten met ping te benaderen aan de andere kant van de router, bent u verbonden! Als dit niet werkt kunt u wellicht de gebruiken in plaats van de als argument voor slattach. Hoe de verbinding afgebroken moet worden Doe het volgende:: &prompt.root; kill -INT `cat /var/run/slattach.modem.pid` om slattach te stoppen. Houd in uw achterhoofd dat u dit als root moet doen. Ga hierna terug naar kermit (door het intypen van fg als u deze tijdelijk uitgeschakeld had) en verlaat de applicatie (q). De &man.slattach.8; handleiding zegt dat ifconfig sl0 down uitgevoerd moet worden om de interface uit te schakelen, maar dit lijkt geen verschil op te leveren. (ifconfig sl0 lijkt hetzelfde resultaat te geven.) Soms kan het gebeuren dat het modem weigert om de carrier los te laten. Start in dat geval simpelweg kermit en stop deze wederom. Meestal stopt het met de tweede poging. Problemen oplossen Als dit niet werkt, voelt u zich dan vrij om rond te vragen op de &a.net.name; mailing lijst. De volgende dingen zijn mensen al eens tegen aangelopen: Het niet gebruiken van de of optie voor slattach (Dit zou niet fataal moeten zijn, maar sommige mensen hebben aangegeven dat het de problemen oplostte.) Het intypen van in plaats van (het verschil is wellicht lastig te zien met sommige fonts). Probeer ifconfig sl0 uit te voeren om de interface status te zien. U kunt bijvoorbeeld krijgen: &prompt.root; ifconfig sl0 sl0: flags=10<POINTOPOINT> inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00 Als u no route to host krijgt van het &man.ping.8; commando, is er mogelijk een probleem met uw route tabel. U kunt het netstat -r commando uitvoeren om de huidige routes te zien: &prompt.root; netstat -r Routing tables Destination Gateway Flags Refs Use IfaceMTU Rtt Netmasks: (root node) (root node) Route Tree for Protocol Family inet: (root node) => default inr-3.Example.EDU UG 8 224515 sl0 - - localhost.Exampl localhost.Example. UH 5 42127 lo0 - 0.438 inr-3.Example.ED water.CS.Example.E UH 1 0 sl0 - - water.CS.Example localhost.Example. UGH 34 47641234 lo0 - 0.438 (root node) Het voorgaand voorbeeld komt van een relatief druk systeem. De getallen op uw systeem zullen anders zijn naar gelang de netwerk activiteiten. Het opzetten van een SLIP-server SLIP server Dit document levert suggesties voor het opzetten van een SLIP-server op een &os; systeem, welke meestal betekent het configureren van uw systeem om automatisch verbindingen op te zetten wanneer er wordt ingelogt met remote SLIP cliënten. Eisen vooraf TCP/IP networking Deze sectie is vrij technisch van aard, dus achtergrond informatie is vereist. Er wordt aangenomen dat u bekend bent met het TCP/IP-netwerk protocol, en in dan in het bijzonder met netwerk en node adresseringen, netwerk adres maskers, subnetten, routes en dynamische routering protocollen zoals RIP. Het configureren van een SLIP-dienst op een inbel server vereist kennis van deze concepten en als u daarmee niet bekend bent, leest u dan aub een versie van of Craig Hunt's TCP/IP Network Administration gepubliceerd door O'Reilly & Associates, Inc. (ISBN Number 0-937175-82-X), of Douglas Comer's boeken over het TCP/IP protocol. modem Daarnaast wordt er vanuit gegaan dat u reeds uw modem(s) heeft geconfigureerd en dat u de juiste systeem bestanden heeft aangepast zodat er logins mogelijk zijn door uw modem(s) heen. Als u dat nog niet heeft gedaan, zie dan voor details over het opzetten van inbel diensten. Wellicht wilt u ook de handleiding bekijken voor &man.sio.4; voor meer informatie over de seriële port device driver en de &man.ttys.5;, &man.gettytab.5;, &man.getty.8;, & &man.init.8; handleidingen voor informatie die relevant zijn voor het configureren van het systeem zodat logins mogelijk worden op modems, en wellicht &man.stty.1; voor informatie over het instellen van de seriële poort (zoals clocal voor direct verbonden seriële interfaces). Snel overzicht In een typische configuratie, werkt het gebruik van &os; als een SLIP-server als volgend: een SLIP-gebruiker belt in op uw &os; SLIP-server systeem en logt in met een speciaal SLIP-login ID dat gebruik maakt van /usr/sbin/sliplogin. Het sliplogin programma leest door het /etc/sliphome/slip.hosts bestand om een corresponderende regel te vinden voor de speciale gebruiker en als deze een match vindt verbind het de seriële lijn met een beschikbare SLIP-interface waarna het shellscript /etc/sliphome/slip.login wordt uitgevoerd om de SLIP-interface te configureren. Een voorbeeld van SLIP-server login Bijvoorbeeld, als een SLIP-user-ID Shelmergis, kan Shelmerg's regel in /etc/master.passwd er als volgt uitzien: Shelmerg:password:1964:89::0:0:Guy Helmer - SLIP:/usr/users/Shelmerg:/usr/sbin/sliplogin Wanneer Shelmerg inlogt, zoekt het sliplogin programma in het /etc/sliphome/slip.hosts bestand voor een regel dat een corresponderende user ID heeft, er kan bijvoorbeeld een regel staan in /etc/sliphome/slip.hosts dat eruit ziet als volgend: Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp sliplogin zal de corresponderende regel vinden en de seriële lijn koppelen aan de eerste beschikbare SLIP-interface, waarna /etc/sliphome/slip.login wordt uitgevoerd zoals volgend: /etc/sliphome/slip.login 0 19200 Shelmerg dc-slip sl-helmer 0xfffffc00 autocomp Als alles goed gaat, zal /etc/sliphome/slip.login een ifconfig commando uitvoeren voor de SLIP interface waaraan sliplogin zichzelf koppelt (SLIP-interface 0 zoals in bovenstaand voorbeeld was de eerste parameter in de lijst welke gegeven is aan slip.login) om een lokaal IP-adres in te stellen (dc-slip), een remote IP adres (sl-helmer), een netwerk master voor de SLIP-interface (0xfffffc00), en enkele additionele vlaggen (autocomp). Als er iets misgaat zal sliplogin meestal voldoende goede informatie loggen via de syslogd daemon faciliteiten, welke meestal logt naar /var/log/messages (zie de handleidingen van &man.syslogd.8; en &man.syslog.conf.5; en controleer het /etc/syslog.conf bestand om te zien wat syslogd logt en waar dit naartoe gelogt wordt). Kernel-configuratie kernel configuration SLIP &os;'s standaard kernel (GENERIC) heeft reeds ondersteuning voor SLIP (&man.sl.4;), in het geval van een custom kernel moet de volgende regel worden toegevoegd aan de kernel configuratie: device sl Standaard zal uw &os; machine geen pakketten doorsturen. Als u wilt dat uw &os; SLIP-server zich gedraagt als router zult u het bestand /etc/rc.conf moeten bewerken en de instelling van de gateway_enable variabele moeten aanpassen naar . Dit zorgt ervoor dat de machine na een herstart zich zal blijven gedragen als router. Om de instellingen meteen actief te maken kunt u het volgende commando als root uitvoeren: &prompt.root; service routing start Raadpleeg aub over het configureren van de &os; kernel voor meer hulp over het herconfigureren van uw kernel. Sliplogin-configuratie Zoals eerder vermeld, zijn er drie bestanden in de map /etc/sliphome die onderdeel zijn van de configuratie voor /usr/sbin/sliplogin (zie &man.sliplogin.8; voor de actuele handleiding voor sliplogin): slip.hosts, welke de SLIP-gebruikers definieert en de gekoppelde IP adressen; slip.login, welke meestal de SLIP-interface configureert en (optioneel) slip.logout, welke de effecten van slip.login ongedaan maakt wanneer de seriële verbinding verbroken wordt. <filename>slip.hosts</filename> configuratie /etc/sliphome/slip.hosts bevat regels welke minstens vier onderdelen heeft die gescheiden worden door een spatie: SLIP-gebruikers login ID Lokale adres (lokaal voor de SLIP-server) van de SLIP-link Remote adres van de SLIP-link Netwerk masker De lokale en remote adressen mogen host namen zijn (Welke naar IP-adressen vertaald kunnen worden door /etc/hosts of door de DNS diensten, afhankelijk van uw specificaties in het /etc/nsswitch.conf, het netwerk masker mag een naam zijn dat vertaald kan worden door een zoek opdracht in /etc/networks. Op een voorbeeld systeem ziet het /etc/sliphome/slip.hosts bestand er als volgt uit: # # login local-addr remote-addr mask opt1 opt2 # (normal,compress,noicmp) # Shelmerg dc-slip sl-helmerg 0xfffffc00 autocomp Aan het einde van deze regel staan één of meerdere opties: — geen compressie van de header — comprimeer headers — comprimeer de headers als de remote kant dit accepteert — schakelt ICMP pakketten uit (dus alle ping pakketten worden geweigerd in plaats van dat deze bandbreedte verbruiken) SLIP TCP/IP networking Uw keuze van een lokaal en remote adres voor uw SLIP verbindingen is afhankelijk van of u een speciaal toegewezen TCP/IP-subnet gebruikt, of dat u gebruik gaat maken van proxy ARP op uw SLIP-server (het is geen echte proxy ARP, maar het is de terminologie welke in deze sectie gebruikt wordt om het te beschrijven). Als u niet zeker bent welke methode u moet kiezen, of hoe u IP-adressen moet toewijzen, raadpleegt u dan de TCP/IP boeken die vermeld worden in de SLIP vereisten () en/of vraag uw IP-netwerk manager om hulp. Als u gebruik gaat maken van een separaat subnet voor uw SLIP-cliënten, moet u een subnet alloceren uit de voor u toegewezen IP-ruimte, en elke SLIP-cliënt een IP-adres geven uit dat subnet. Daarna moet u waarschijnlijk een statische route configureren voor uw SLIP-subnet via uw SLIP-server naar de dichtsbijzijnde IP-router. Ethernet In het andere geval moet u gebruik maken van de proxy ARP methode, u moet elke SLIP cliënt een IP-adres geven uit het Ethernet-subnet van uw SLIP-server, daarnaast moet u het /etc/sliphome/slip.login en het /etc/sliphome/slip.logout script aanpassen om gebruik te maken van &man.arp.8; om de proxy ARP regels te beheren in de SLIP servers ARP tabel. <filename>slip.login</filename> configuratie Een typisch /etc/sliphome/slip.login bestand ziet er als volgend uit: #!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generiek loginbestand voor een SLIP-lijn. sliplogin voert deze uit # met de volgende parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 inet $4 $5 netmask $6 Dit slip.login bestand start alleen het ifconfig commando voor de betreffende SLIP-interace met het lokale en remote adres met het netwerkmasker van de SLIP-interface. Als u besloten heeft om gebruik te maken van de proxy ARP methode (in plaats van het gebruiken van een apart subnet voor uw SLIP-cliënten) moet u het /etc/sliphome/slip.login bestand aanpassen zodat deze er ongeveer als volgend uitziet: #!/bin/sh - # # @(#)slip.login 5.1 (Berkeley) 7/1/90 # # generiek loginbestand voor een SLIP-lijn. sliplogin voert deze uit # met de volgende parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 inet $4 $5 netmask $6 # Beantwoord ARP Verzoeken voor de SLIP-cliënt met ons Ethernet # adres /usr/sbin/arp -s $5 00:11:22:33:44:55 pub De extra regel in het slip.login bestand, arp -s $5 00:11:22:33:44:55 pub, creeërt een ARP-regel in de ARP-tabel van de SLIP-server. Deze ARP regel zorgt ervoor dat de SLIP-server antwoord geeft met het Ethernet MAC adres van de SLIP-server wanneer een andere IP-node op het Ethernet vraagt om te communiceren met het IP-adres van de SLIP-cliënt. Ethernet MAC address Wanneer u gebruik maakt van het voorbeeld hierboven, wees u er dan zeker van dat u het Ethernet MAC adres (00:11:22:33:44:55) veranderd in het MAC adres van uw systeem's Ethernet kaart, anders werkt uw proxy ARP zeker niet! U kunt het Ethernet MAC adres van uw SLIP-server achterhalen door het bekijken van het resultaat van netstat -i; de tweede regel met resultaten moet er ongeveer als volgend uitzien: ed0 1500 <Link>0.2.c1.28.5f.4a 191923 0 129457 0 116 Dit geeft aan dat het specifieke Ethernet MAC adres van het systeem is 00:02:c1:28:5f:4a — de punten in het Ethernet MAC adres welke gegeven wordt door netstat -i moet worden veranderd in dubbele punten (:) en voorloop nullen moeten worden toegevoegd aan elk enkel hexadecimaal getal om het adres te converteren naar de vorm die &man.arp.8; wenst; zie de handleiding van &man.arp.8; voor een compleet overzicht van het gebruik hiervan. Wanneer u /etc/sliphome/slip.login en /etc/sliphome/slip.logout, aanmaakt moet het uitvoerbare bitje gezet zijn (bijvoorbeeld chmod 755 /etc/sliphome/slip.login /etc/sliphome/slip.logout) anders is sliplogin niet in staat om deze uit te voeren. <filename>slip.logout</filename> configuratie /etc/sliphome/slip.logout is niet strict noodzakelijk (tenzij u proxy ARP implementeert), maar als beslist om deze aan te maken is dit een voorbeeld basis slip.logout script: #!/bin/sh - # # slip.logout # # uitlogbestand voor een SLIP-regel. sliplogin voert deze uit met de # parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 down Als u gebruik maakt van proxy ARP wilt u waarschijnlijk dat het /etc/sliphome/slip.logout bestand de ARP regel weghaalt voor de SLIP-cliënt: #!/bin/sh - # # @(#)slip.logout # # uitlogbestand voor een SLIP-regel. sliplogin voert deze uit met de # parameters: # 1 2 3 4 5 6 7-n # slipunit ttyspeed loginname local-addr remote-addr mask opt-args # /sbin/ifconfig sl$1 down # Stop met het beantwoorden van ARP verzoeken voor de SLIP-cliënt /usr/sbin/arp -d $5 Het arp -d $5 verwijderd de ARP regel, die proxy ARP heeft toegevoegd toen de SLIP-cliënt inlogde. Het is belangrijk om dit te herhalen: zorg ervoor /etc/sliphome/slip.logout het uitvoerbare bitje heeft gezet nadat deze gecreeërd is (b.v. chmod 755 /etc/sliphome/slip.logout). Routering-overwegingen SLIP routering Als u geen gebruik maakt van de proxy ARP voor het routeren van pakketten tussen uw SLIP-cliënten en de rest van uw netwerk (en wellicht het internet), moeten er misschien een aantal statische routeringen naar de best bereikbare standaard router ingesteld worden om uw SLIP cliënts te routeren via uw SLIP0server. Statische routeringen statische routeringen Het toevoegen van statische routeringen naar de dichts bijzijnde router kan problematisch zijn (of zelfs onmogelijk als u niet de bevoegdheden heft om dit te doen). Als u een netwerk heeft met meerdere routers binnen uw organisatie kan het zijn dat sommige routers, zoals die van Cisco en Proteon , niet alleen geconfigureerd moeten worden met de statische route naar het SLIP-subnet, maar deze moeten dan ook geconfigureerd worden over welke statische routes aan andere routers verteld moeten worden. Enige expertise en fine tunen kan nodig zijn om statische routing te laten werken. diff --git a/nl_NL.ISO8859-1/books/handbook/printing/chapter.xml b/nl_NL.ISO8859-1/books/handbook/printing/chapter.xml index 8fff06eb01..41d3eeac89 100644 --- a/nl_NL.ISO8859-1/books/handbook/printing/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/printing/chapter.xml @@ -1,5405 +1,5383 @@ Sean Kelly Bijdrage van Jim Mock Geherstructureerd en bijgewerkt door Lodewijk Koopman Vertaald door Afdrukken Overzicht wachtrijsysteem LPD afdrukken &os; kan gebruikt worden om op een scala aan printers af te drukken, van de oudste matrixprinter tot de nieuwste laserprinters en alles er tussenin, waardoor op hoge kwaliteit afgedrukt kan worden vanuit de gebruikte programma's. &os; kan ook ingesteld worden als printserver in een netwerk. Dan kan &os; afdrukopdrachten ontvangen van uiteenlopende computers, waaronder &os; computers, &windows; en &macos; hosts. &os; zorgt ervoor dat er één afdrukopdracht per keer wordt afgedrukt, houdt statistieken bij van gebruikers en computers die de meeste afdrukken maken, drukt voorbladen af, zodat duidelijk is van wie de afdruk is en nog veel meer. Na het lezen van dit hoofdstuk weet de lezer: Hoe het &os; afdrukwachtrijsysteem moet worden ingesteld; Hoe afdrukfilters kunnen worden geïnstalleerd, om bepaalde afdrukopdrachten op een andere manier af te handelen, zoals het omzetten van documenten naar formaten die een printer begrijpt; Hoe voorbladen kunnen worden afgedrukt; Hoe er op printers die op andere computers zijn aangesloten kan worden afgedrukt; Hoe er op printers die direct op het netwerk zijn aangesloten kan worden afgedrukt; Hoe afdrukbeperkingen kunnen worden opgelegd, zoals het beperken van de grootte van de afdrukopdracht, en bepaalde gebruikers verbieden af te drukken; Hoe afdrukstatistieken kunnen worden bijgehouden en het printergebruik in de gaten kan worden gehouden; Hoe problemen met afdrukken kunnen worden opgelost. Aangeraden voorkennis: Hoe een nieuwe kernel wordt ingesteld, gebouwd en geïnstalleerd (). Inleiding Om printers onder &os; te kunnen gebruiken moeten ze kunnen werken met het Berkeley lijnafdrukwachtrijsysteem, ook wel bekend als het wachtrijsysteem LPD of simpelweg LPD. Dit is het standaard afdruksysteem onder &os;. Dit hoofdstuk introduceert LPD en begeleidt bij het instellen. Als de gebruiker al bekend is met LPD of een ander afdrukwachtrijsysteem, dan kan verder worden lezen vanaf Standaardinstallatie. LPD regelt alles met betrekking tot de printer van een host. Het is verantwoordelijk voor een aantal zaken: Het regelt de toegang tot aangesloten printers en printers die op andere hosts op het netwerk zijn aangesloten; afdrukopdrachten Het geeft gebruikers de mogelijkheid bestanden aan te bieden die afgedrukt moeten worden; deze aangeboden bestanden worden afdrukopdrachten genoemd; Het voorkomt dat gebruikers tegelijkertijd een printer benaderen door een wachtrij bij te houden voor elke printer; Het kan voorbladen afdrukken (in het Engels ook wel bekend als banner, of burst pagina's) zodat gebruikers hun afdruk tussen andere afdrukken makkelijk terug kunnen vinden; Het handelt de communicatie af voor printers die op een seriële poort zijn aangesloten; Het kan afdrukopdrachten over een netwerk versturen naar een LPD wachtrij op een andere host; Het kan speciale filters aanroepen die afdrukopdrachten converteren voor verschillende printertalen of afdrukmogelijkheden; Het houdt statistieken bij van het printergebruik. Middels een instellingenbestand (/etc/printcap) en door speciale filters beschikbaar te stellen, kan het LPD systeem alle, of enkele van bovenstaande taken uitvoeren op een grote verscheidenheid aan afdrukhardware. Waarom het wachtrijsysteem gebruikt zou moeten worden - Als er maar één gebruiker is op een systeem, - staat terecht ter discussie waarom het wachtrijsysteem nodig is - als toegangscontrole, voorbladen en printerstatistieken niet - nodig zijn. Hoewel directe toegang tot de printer is in te - stellen, is het raadzaam het wachtrijsysteem toch te - gebruiken, omdat: + Het wachtrijsysteem biedt nog steeds voordelen op een systeem met + een enkele gebruiker en dient gebruikt te worden omdat: LPD afdrukopdrachten in de achtergrond afhandelt. Dan is het niet nodig te wachten tot de gegevens naar de printer zijn verzonden; &tex; LPD op eenvoudige wijze een afdrukopdracht door een filter kan afdrukken om kopteksten met datum/tijd toe te voegen of een speciaal bestandsformaat (zoals een &tex; DVI-bestand) om te zetten naar een formaat dat de printer begrijpt. Deze handelingen hoeven dan niet handmatig uitgevoerd te worden; Veel gratis en commerciële software met een afdrukfunctie verwacht dat er een wachtrijsysteem aanwezig is op een systeem om afdrukopdrachten naar te sturen. Door een wachtrijsysteem op te zetten, wordt toekomstig te installeren of reeds geïstalleerde software op eenvoudige wijze ondersteund. Standaardinstallatie - - Vanaf &os; 8.0; zijn de apparaatknooppunten - voor seriële poorten hernoemd van - /dev/ttydN naar - /dev/ttyuN. - &os; 7.X gebruikers moeten de volgende documentatie aanpassen - naar aanleiding van deze wijzigingen. - - Om printers met het LPD wachtrijsysteem te kunnen gebruiken, dienen zowel de printerhardware als de LPD software geïnstalleerd te worden. Dit document beschrijft deze installatie in twee stappen: In het onderdeel Eenvoudige printerinstallatie staat hoe een printer moet worden aangesloten, hoe LPD er mee kan communiceren en hoe tekstbestanden afgedrukt kunnen worden. In Geavanceerde printerinstallatie staat beschreven hoe een scala aan bestandsformaten afgedrukt kan worden, hoe voorbladen kunnen worden afgedrukt en hoe statistieken van de printer kunnen worden bijgehouden. Eenvoudige printerinstallatie Nu wordt toegelicht hoe de printerhardware en de LPD software ingesteld moeten worden om een printer te kunnen gebruiken. Het behandelt de basis: Hardware-instellingen geeft een aantal aanwijzingen voor het aansluiten van een printer op een poort van een computer. Software-instellingen toont hoe het instellingenbestand (/etc/printcap) voor het LPD-systeem moet worden opgezet. Hoe een printer geïnstalleerd moet worden die via een netwerkprotocol gegevens ontvangt, in plaats van een seriële of parallelle poort, staat in Printers met netwerkinterfaces. Hoewel dit onderdeel Eenvoudige printerinstallatie heet, is het redelijk complex. De printer met de computer en het LPD-systeem laten samenwerken is het moeilijkste. De geavanceerde opties, zoals voorbladen en statistieken, zijn relatief makkelijk als de printer eenmaal werkt. Hardware-instellingen Hier worden de verschillende manieren waarop een printer op een computer kan worden aangesloten beschreven. Het bespreekt de soorten poorten en kabels en de kernelinstellingen die nodig kunnen zijn om &os; met een printer te laten communiceren. Als een printer al is aangesloten en succesvol is gebruikt onder een ander besturingssysteem, dan kan waarschijnlijk verder gelezen worden in Software-instellingen. Poorten en kabels De printers die tegenwoordig voor PC's verkocht worden hebben eigenlijk altijd een van de volgende drie poorten: printers serieel Seriële poort, ook bekend als RS-232- of COM-poorten, gebruiken een seriële poort op een computer om gegevens naar een printer te sturen. Seriële poorten zijn heel gebruikelijk in de computerindustrie en kabels zijn eenvoudig verkrijgbaar en makkelijk te maken. Seriële poorten hebben soms speciale kabels nodig en vereisen soms het instellen van ingewikkelde communicatieparameters. De meeste seriële poorten hebben een maximale doorvoersnelheid van 115.200 bps waardoor het afdrukken van grote grafische afdrukopdrachten erg onpraktisch wordt. printers parallel Parallelle poorten gebruiken een parallelle poort op een computer om gegevens naar een printer te sturen. Parallelle poorten zijn gebruikelijk in de PC-markt en zijn sneller dan RS-232 serieel. Kabels zijn goed verkrijgbaar, maar moeilijker handmatig te vervaardigen. Meestal zijn er geen communicatieparameters bij parallelle poorten, wat het instellen erg eenvoudig maakt. centronics parallelle printers Parallelle poorten staan ook wel bekend als Centronics poorten, genoemd naar het soort aansluiting op de printer. printers USB USB poorten, genoemd naar de Universal Serial Bus, kunnen zelfs op nog hogere snelheid werken dan parallelle of RS-232 seriële poorten. De kabels zijn eenvoudig en goedkoop. USB is voor afdrukken superieur aan RS-232 Serieel en Parallel, maar wordt op &unix;-systemen niet altijd goed ondersteund. Een van de manieren om dit te omzeilen is de aanschaf van een printer met zowel een USB als een parallelle poort, zoals veel printers die hebben. Over het algemeen kunnen parallelle poorten meestal in één richting communiceren (van computer naar printer), terwijl seriële en USB poorten in twee richtingen kunnen communiceren. Nieuwere parallelle poorten (EPP en ECP) en printers kunnen onder &os; in beide richtingen communiceren, mits een IEEE-1284 gekeurde kabel wordt gebruikt. &postscript; Tweewegcommunicatie met een printer over een parallelle poort verloopt meestal op een van de volgende twee manieren. De eerste manier is door gebruik te maken van een op maat gemaakt stuurprogramma voor &os; dat de taal spreekt die door de printer wordt gebruikt. Dit geldt meestal voor inkjet printers en er kan dan gebruikt gemaakt worden van rapportagemogelijkheden over bijvoorbeeld inktniveaus en andere statusinformatie. De tweede methode wordt gebruikt als een printer &postscript; ondersteunt. &postscript;-taken zijn eigenlijk programma's die naar de printer worden gestuurd. Het hoeft zelfs niet in een afdruk te resulteren; het resultaat van de opdracht kan direct weer naar de computer worden gestuurd. &postscript; gebruikt ook tweewegcommunicatie om een computer op de hoogte te stellen van opgetreden fouten, zoals fouten in het &postscript;-programma of vastgelopen papier. Gebruikers kunnen dit soort informatie handig vinden. De beste manier om bij een &postscript;-printer effectief bij te houden wat het printergebruik is, vraagt om tweewegcommunicatie: de printer wordt gevraagd om het totaal aantal afgedrukt pagina's, de afdrukopdracht wordt verzonden en vervolgens wordt nogmaals om het totaal aantal afgedrukte pagina's gevraagd. Het verschil van deze getallen geeft het aantal afgedrukte pagina's van de afdrukopdracht van de betreffende gebruiker. Parallelle poorten Om een printer met een parallelle poort aan te sluiten, moet een Centronics kabel de printer met de computer verbinden. De instructies die geleverd zijn bij de printer, de computer of beide, moeten voldoende zijn om dit te verduidelijken. Onthoud op welke parallelle poort de printer is aangesloten. De eerste parallelle poort heet onder &os; ppc0, de tweede ppc1, enzovoort. De benaming voor de printer gaat analoog: /dev/lpt0 voor de printer op de eerste parallelle poort enzovoort. Seriële poorten Gebruik de juiste seriële kabel om een printer met een seriële poort op een computer aan te sluiten. De instructies die geleverd zijn bij de printer, de computer of beide, moeten voldoende zijn om dit te verduidelijken. Als onduidelijk is wat de juiste seriële kabel is, kan een van onderstaande opties geprobeerd worden: Een modemkabel verbindt elke pin van de stekker aan het ene eind direct met de corresponderende pin van de stekker aan het andere eind. Dit type kabel heet ook wel een DTE-naar-DCE-kabel. null-modem kabel Een null-modem kabel verbindt enkele pinnetjes direct, verwisselt andere (bijvoorbeeld van verstuur gegevens naar ontvang gegevens) en sluit sommige draden kort in de stekker. Dit type kabel heet ook wel een DTE-to-DTE-kabel. Een seriële printerkabel, nodig bij sommige ongebruikelijke printers, is als een null-modem kabel, maar stuurt sommige signalen naar hun tegenhangers in plaats van ze intern kort te sluiten. baud rate pariteit flow-control protocol Het is ook nodig de communicatieparameters voor de printer in te stellen, meestal via het bedieningspaneel of middels DIP-schakelaars op de printer. Selecteer de hoogste bps (bits per seconde, soms baud) die zowel door de computer als de printer wordt ondersteund. Kies 7 of 8 data bits. Geen, even of oneven pariteit en 1 of 2 stop bits. Selecteer ook het flow-control protocol: ofwel geen, ofwel XON/XOFF (ook bekend als in-band of software) flow-control. Onthoud deze instellingen voor de hier op volgende software-instellingen. Software-instellingen Nu wordt beschreven welke software-instellingen nodig zijn om onder &os; af te drukken met behulp van het wachtrijsysteem LPD. Een overzicht van de te doorlopen stappen: Maak, indien nodig, de kernel geschikt voor de poort die door de printer wordt gebruikt. In Kernelinstellingen is te lezen hoe dit gedaan kan worden. Stel de communicatievorm voor de parallelle poort in, als gebruik wordt gemaakt van een parallelle printer. In Communicatietype instellen voor een parallelle poort staan de details. Test of het besturingssysteem gegevens naar de printer kan sturen. In Printercommunicatie controleren staat een aantal suggesties. Stel LPD in voor de printer door /etc/printcap aan te passen. Dat wordt later in het hoofdstuk beschreven. Kernelinstellingen Het besturingssysteem is gecompileerd om met een beperkte verzameling apparaten te kunnen werken. De seriële en parallelle poorten zijn onderdeel van deze verzameling. Daarom kan het nodig zijn om ondersteuning voor een extra seriële of parallelle poort toe te voegen als een kernel hier nog niet voor is ingesteld. Om te achterhalen of de huidige kernel een seriële poort ondersteunt: &prompt.root; grep sioN /var/run/dmesg.boot Hier is N het aantal seriële poorten, beginnende bij nul. Als de uitvoer op het volgende lijkt, dan wordt de poort door de kernel ondersteund: sio2 at port 0x3e8-0x3ef irq 5 on isa sio2: type 16550A Om te achterhalen of de kernel een parallelle poort ondersteunt: &prompt.root; grep ppcN /var/run/dmesg.boot Hier is N het aantal parallelle poorten beginnende bij nul. Als de uitvoer er ongeveer als volgt uit ziet, dan wordt de poort door de kernel ondersteund: ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0 ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode ppc0: FIFO with 16/16/8 bytes threshold Het kan nodig zijn een kernel aan te passen om het besturingssysteem in staat te stellen een parallelle of seriële poort die voor een printer wordt gebruikt te herkennen en te gebruiken. In het onderdeel over kernelinstellingen staat meer informatie om ondersteuning voor een seriële poort toe te voegen. Lees de betreffende en de volgende sectie om ondersteuning voor een parallelle poort toe te voegen. Communicatietype instellen voor een parallelle poort Wanneer een parallelle poort wordt gebruikt, kan worden aangegeven of &os; voor de printer interrupt-gestuurde of polled communicatie moet gebruiken. Het generieke printerapparaatstuurprogramma (&man.lpt.4;) onder &os; gebruikt het systeem &man.ppbus.4;. Dit bestuurt de chipset van de poort met het stuurprogramma &man.ppc.4;. De interrupt-gestuurde methode is standaard in de GENERIC kernel. In dit geval gebruikt het besturingssysteem een IRQ om te bepalen of de printer klaar is om gegevens te ontvangen. Bij de polled methode vraagt het besturingssysteem met vaste intervallen aan de printer of deze klaar is om gegevens te ontvangen. Als de printer antwoordt met klaar, stuurt de kernel meer gegevens. De interrupt-gestuurde methode is meestal iets sneller, maar gebruikt een kostbaar IRQ-nummer. Van sommige HP printers wordt beweerd dat ze niet goed werken in interruptmodus, schijnbaar door een (nog niet begrepen) timing-probleem. Deze printers moeten gebruik maken van de polled methode. Gebruik de methode die werkt. Sommige printers werken met beide methodes, maar zijn tergend langzaam in de interrupt modus. Het communicatietype kan op twee manieren worden ingesteld: door de kernel in te stellen of door gebruik te maken van &man.lptcontrol.8;. Het communicatietype instellen door de kernel aan te passen: Pas het kernelinstellingenbestand aan. Zoek naar een ppc0 ingang. Gebruik ppc1 voor het opzetten van een tweede parallelle poort. Gebruik ppc2 voor de derde poort, enzovoort. Als u gebruik wilt maken van de interrupt gestuurde modus, bewerk dan de regel hieronder: hint.ppc.0.irq="N" Het kernelinstellingenbestand moet ook het stuurprogramma &man.ppc.4; bevatten: device ppc Om gebruik te maken van polled modus verwijder dan het volgende regel uit /boot/device.hints: hint.ppc.0.irq="N" In sommige gevallen is het onder &os; niet voldoende om een poort in polled modus te zetten. In veel gevallen komt dat door het stuurprogramma &man.acpi.4;. Dit is in staat om apparaten te testen en aan te sluiten en kan zodoende het communicatietype van de printer wijzigen. Raadpleeg de instellingen voor &man.acpi.4; om dit probleem te verhelpen. Sla het bestand op. Maak en installeer de nieuwe kernel en herstart de computer. In De &os;-kernel instellen staan meer details. Communicatietype instellen met &man.lptcontrol.8;: Typ: &prompt.root; lptcontrol /dev/lptN om lptN op interrupt-gestuurde modus in te stellen. Typ: &prompt.root; lptcontrol /dev/lptN om lptN op polled modus in te stellen. &prompt.root; lptcontrol -p -d /dev/lptN Zet deze commando's in het bestand /etc/rc.local zodat het communicatietype juist wordt ingesteld bij het opstarten. In &man.lptcontrol.8; staat meer informatie. Printercommunicatie controleren Voor het instellen van het wachtrijsysteem, is het verstandig te controleren of het besturingssysteem gegevens naar een printer kan versturen. Het is een stuk makkelijker om problemen met printercommunicatie en het wachtrijsysteem apart op te lossen. De printer wordt getest door er tekst naar toe te sturen. Voor printers die direct tekens kunnen afdrukken is het programma &man.lptest.1; handig: het genereert alle 96 afdrukbare ASCII-tekens op 96 regels. &postscript; Voor &postscript; (of andere op taal gebaseerde) printers, is een meer geavanceerde test nodig. Een eenvoudig &postscript;-programma zoals het volgende volstaat: %!PS 100 100 moveto 300 300 lineto stroke 310 310 moveto /Helvetica findfont 12 scalefont setfont (Werkt dit?) show showpage Bovenstaande &postscript;-code kan in een bestand worden opgeslagen en in de voorbeelden in de volgende paragrafen gebruikt worden. PCL Als in dit document wordt gesproken over een printertaal, wordt uitgegaan van een taal als &postscript; en niet PCL van HP. Hoewel PCL zeer functioneel is, kan het direct platte tekst afdrukken door gebruik te maken van escape-tekens. &postscript; kan niet direct platte tekst afdrukken. Voor dat soort printertalen zijn speciale aanpassingen nodig. Parallelle printer controleren printers parallel In deze sectie wordt beschreven hoe te controleren of &os; kan communiceren met een printer die op een parallelle poort is aangesloten. Voer de volgende stappen uit om een printer op een parallelle poort te testen: &man.su.1; naar root. Stuur gegevens naar de printer. Gebruik &man.lptest.1; als de printer platte tekst af kan drukken: &prompt.root; lptest > /dev/lptN Hier is N het nummer van de parallelle poort, beginnende bij nul. Als de printer &postscript; of een andere printertaal begrijpt, stuur dan een klein programma naar de printer: &prompt.root; cat > /dev/lptN Geef het programma regel voor regel heel nauwkeurig in. Een regel kan niet worden gewijzigd als er op RETURN of ENTER is gedrukt. Geef na het afronden van de invoer voor het programma het einde-van-invoer-teken. Dit is meestal CONTROL+D. Het programma kan ook in een bestand worden opgeslagen: &prompt.root; cat bestand > /dev/lptN Hier is bestand de naam van het bestand waarin het programma is opgeslagen dat naar een printer gestuurd kan worden. Nu moet er iets worden afgedrukt. Tekst die er niet goed uitziet is geen probleem. Dit wordt later gerepareerd. Seriële printer controleren printers serieel In deze sectie wordt beschreven hoe te controleren of &os; kan communiceren met een printer die op een seriële poort is aangesloten. Voer de volgende stappen uit om een printer op de seriële poort te testen: &man.su.1; naar root. Voeg de volgende regel toe aan /etc/remote: printer:dv=/dev/poort:br#bps-snelheid:pa=pariteit bits-per-seconde seriële poort pariteit Hier is poort de apparaatingave voor de seriële poort (ttyu0, ttyu1, enzovoort), bps-snelheid is het aantal bits per seconde waarop de printer communiceert en pariteit is de pariteit die door de printer wordt vereist (even, odd, none of zero). Hier volgt een voorbeeldregel voor een printer verbonden met een seriële lijn op de derde seriële poort op 19200 bps, zonder pariteit: printer:dv=/dev/ttyu2:br#19200:pa=none Maak verbinding met de printer met &man.tip.1;: &prompt.root; tip printer Als dit niet werkt, pas dan /etc/remote opnieuw aan en probeer gebruik te maken van /dev/cuaaN in plaats van /dev/ttyuN. Stuur gegevens naar de printer. Gebruik &man.lptest.1; als de printer platte tekst af kan drukken: &prompt.user; $lptest Als de printer &postscript; of een andere printertaal begrijpt, stuur dan een klein programma naar de printer. Geef het programma regel voor regel heel nauwkeurig in. Backspace of andere speciale toetsen kunnen een speciale betekenis hebben voor de printer. Het kan ook nodig zijn een speciaal einde-van-invoer-teken te geven zodat de printer weet dat het gehele programma ontvangen is. Druk voor &postscript;-printers CONTROL+D. Het programma kan ook in een bestand worden opgeslagen: &prompt.user; >bestand Hier is bestand de naam van het bestand waarin het programma is opgeslagen. Nadat &man.tip.1; het bestand heeft verstuurd kan het juiste einde-van-invoer-teken ingegeven worden. Nu moet er iets worden afgedrukt. Tekst die er niet goed uitziet is geen probleem. Dit wordt later gerepareerd. De wachtrij aanzetten: <filename>/etc/printcap</filename> Op dit punt moet de printer zijn aangesloten, de kernel ingesteld zijn om met de printer te communiceren (indien nodig) en is het mogelijk eenvoudige gegevens naar de printer te sturen. Nu kan LPD ingesteld worden zodat de toegang tot de printer wordt geregeld. LPD wordt ingesteld door het bestand /etc/printcap aan te passen. Het wachtrijsysteem LPD leest dit bestand iedere keer dat het systeem wordt aangeroepen zodat wijzigingen direct van toepassing zijn. printers mogelijkheden De opmaak van het bestand &man.printcap.5; is voor de hand liggend. Met een willekeurige tekstverwerker kunnen wijzigen in /etc/printcap aangebracht worden. De opmaak is identiek aan die van andere bestanden die voor dergelijke instellingen worden gebruik, zoals /usr/share/misc/termcap en /etc/remote. In &man.cgetent.3; staat een uitgebreid overzicht van dit formaat. De vereenvoudigde instellingen bestaan uit de volgende stappen: Kies een naam (en een paar handige aliassen) voor de printer en voeg ze toe aan /etc/printcap. In Printernaamgeving staat meer informatie over het toekennen van een naam aan een printer. voorbladen Het afdrukken van voorbladen (standaard) kan uitgezet worden met de optie sh. In Voorbladen onderdrukken staat meer informatie. Maak een wachtrijmap aan en specificeer de locatie door middel van de optie sd. In Wachtrijmap aanmaken staat meer informatie. Bepaal welke ingave in /dev voor de printer wordt gebruikt en geef dit in /etc/printcap aan door gebruik te maken van de optie lp. In Printerapparaat identificeren staat meer informatie. Als de printer is aangesloten op een seriële poort moeten de communicatieparameters worden ingesteld met de optie ms#. Dit wordt beschreven in Communicatieparameters voor het wachtrijsysteem instellen. Installeer een filter voor platte tekst. In Tekstfilter installeren staan details. Test de instellingen door iets met &man.lpr.1; af te drukken. Details staan in Printer uitproberen en Problemen oplossen. Op taal gebaseerde printers, zoals &postscript;-printers, kunnen niet direct platte tekst afdrukken. De vereenvoudigde instellingen, zoals hierboven beschreven en hieronder verder beschreven, gaan er van uit dat alleen bestanden naar een printer worden gestuurd die de printer begrijpt. Gebruikers verwachten vaak dat ze platte tekst naar printers op een systeem kunnen sturen. Programma's die LPD gebruiken om af te drukken gaan hier ook vaak van uit. Als een dergelijke printer wordt geïnstalleerd en het moet mogelijk zijn zowel afdrukopdrachten in de printertaal als in platte tekst naar een printer te sturen, dan is het zeer aan te raden een extra stap in deze vereenvoudigde opzet in te voegen: installeer een conversieprogramma dat automatisch platte tekst omzet in &postscript; (of een andere printertaal). In Platte tekst op &postscript;-printers afdrukken staat hoe dit in zijn werk gaat. Printernaamgeving De eerste (makkelijke) stap is het kiezen van een naam voor een printer. Het maakt niet uit of een naam functioneel of grappig is, aangezien ook een aantal aliassen aan een printer toegekend kunnen worden. Ten minste één van de printers die in /etc/printcap worden genoemd moet het alias lp hebben. Dit is de standaardnaam voor de printer. Als gebruikers de omgevingsvariabele PRINTER niet ingesteld hebben en ook geen printernaam specificeren als ze LPD gebruiken, dan wordt standaard de printer lp gebruikt. Het is verder gebruikelijk om het laatste alias zo te kiezen dat het een volledige beschrijving van de printer is, inclusief merk en model. Als een naam en een aantal aliassen zijn gekozen, kunnen ze aan /etc/printcap worden toegevoegd. De naam van een printer wordt in de meest linker kolom geplaatst. Scheid ieder alias met een verticale streep en plaats een dubbele punt achter het laatste alias. In het volgende voorbeeld is de beginsituatie een uitgekleed /etc/printcap waarin twee printers worden gedefinieerd (een Diablo 630 lijnprinter en een Panasonic KX-P4455 &postscript;-laserprinter): # # /etc/printcap voor host rose # rattan|line|diablo|lp|Diablo 630 Line Printer: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4: In dit voorbeeld heet de eerste printer rattan en heeft de volgende aliassen: line, diablo, lp en Diablo 630 Line Printer. Omdat deze printer het alias lp heeft, is het de standaard printer. De tweede printer heet bamboo en heeft de aliassen ps, PS, S, panasonic en Panasonic KX-P4455 PostScript v51.4. Voorbladen onderdrukken afdrukken voorbladen Het wachtrijsysteem LPD drukt standaard een voorblad af voor elke afdrukopdracht. Het voorblad bevat de gebruikersnaam van de gebruiker die de afdrukopdracht gaf, de computer waar de opdracht is gegeven en, in mooie grote letters, de naam van de afdrukopdracht. Het nadeel hiervan is dat al deze extra tekst het debuggen van de eenvoudige printerinstallatie bemoeilijkt. Daarom wordt het afdrukken van voorbladen onderdrukt. Om voorbladen te onderdrukken, wordt de optie sh toegevoegd voor de relevante printer in /etc/printcap. Hieronder staat een voorbeeld van /etc/printcap met de optie sh: # # /etc/printcap voor host rose - nergens worden voorbladen afgedrukt # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh: Het juiste formaat is gebruikt: de eerste regel begint in de meest linker kolom, volgende regels springen in. Elke regel eindigt met een backslash, behalve de laatste. Wachtrijmap aanmaken printer wachtrij afdrukopdrachten De volgende stap in deze eenvoudige opzet is het aanmaken van een wachtrijmap. Dit is een map waar afdrukopdrachten geplaatst worden totdat ze worden afgedrukt. Ook wordt er een aantal bestanden geplaatst die nodig zijn voor het functioneren van het wachtrijsysteem. Vanwege het veranderlijke karakter van wachtrijmappen is het gebruikelijk om deze mappen onder /var/spool te plaatsen. Het is niet nodig om een reservekopie van de inhoud van deze mappen te maken. Ze kunnen eenvoudigweg opnieuw worden aangemaakt met &man.mkdir.1;. Het is ook gebruikelijk om de naam van de map overeen te laten komen met die van de printer, zoals onder is weergegeven: &prompt.root; mkdir /var/spool/printernaam Als er veel printers zijn aangesloten op een netwerk, is het beter de wachtrijmappen aan te maken in een enkele map die speciaal wordt gebruikt voor afdrukken met LPD. In dit voorbeeld wordt dat gedaan voor de printers rattan en bamboo: &prompt.root; mkdir /var/spool/lpd &prompt.root; mkdir /var/spool/lpd/rattan &prompt.root; mkdir /var/spool/lpd/bamboo Als de afdrukopdrachten privé moeten blijven, dan is het belangrijk de wachtrijmap niet algemeen toegankelijk te maken. Wachtrijmappen moeten eigendom zijn van gebruiker daemon en groep daemon. Uitsluitend deze gebruiker en groep moeten de map kunnen lezen, schrijven en doorzoeken. We doen dit voor onze voorbeeldprinters: &prompt.root; chown daemon:daemon /var/spool/lpd/rattan &prompt.root; chown daemon:daemon /var/spool/lpd/bamboo &prompt.root; chmod 770 /var/spool/lpd/rattan &prompt.root; chmod 770 /var/spool/lpd/bamboo Tenslotte moet LPD verteld worden dat deze mappen bestaan. Dit kan met het bestand /etc/printcap. De locatie van de wachtrijmap wordt opgegeven met de optie sd: # # /etc/printcap voor host rose - wachtrijmappen toegevoegd # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo: De naam van de printer staat in de eerste kolom, maar alle andere regels die de printer beschrijven worden ingesprongen en elke regel eindigt met een backslash. Als geen wachtrijmap wordt opgegeven met sd, dan wordt standaard /var/spool/lpd gebruikt. Printerapparaat identificeren In de sectie Hardware-instellingen is bepaald welke poort en ingang in de map /dev door &os; worden gebruikt om met een printer te communiceren. Nu moet LPD dit ook weten. Als het wachtrijsysteem een afdrukopdracht krijgt, opent het het relevante apparaat namens het filterprogramma (dat verantwoordelijk is voor het sturen van gegevens naar een printer). Geef de locatie van de ingang in /dev op in /etc/printcap door gebruik te maken van de optie lp. In het huidige voorbeeld wordt aangenomen dat rattan op de eerste parallelle poort is aangesloten en bamboo op de zesde seriële poort. Hier volgen de toevoegingen voor /etc/printcap: # # /etc/printcap voor host rose - bepaald welke apparaten te gebruiken # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyu5: Als voor een printer de optie lp niet wordt gebruikt in /etc/printcap, dan gebruikt LPD standaard /dev/lp. Momenteel bestaat /dev/lp niet in &os;. Als de te installeren printer is aangesloten op een parallelle poort, dan staan verdere instructies in Tekstfilter installeren. In andere gevallen kunnen de instructies in de volgende paragraaf gevold worden. Communicatieparameters voor het wachtrijsysteem instellen printers serieel Voor printers die zijn aangesloten op een seriële poort kan LPD de bps-snelheid, pariteit en andere seriële communicatie parameters instellen voor het filterprogramma dat gegevens naar een printer stuurt. Dit is gunstig omdat: De verschillende communicatieparameters uitgeprobeerd kunnen worden door /etc/printcap aan te passen. Het is niet nodig het filterprogramma opnieuw te compileren; Het wachtrijsysteem kan hetzelfde filter gebruiken voor verschillende printers die mogelijk verschillende seriële communicatie-instellingen hebben. Met de volgende opties in /etc/printcap kunnen seriële communicatieparameters worden ingesteld voor het apparaat waar lp naar verwijst: br#bps-snelheid Stelt de communicatiesnelheid van het apparaat in op bps-snelheid, waarbij bps-snelheid de waarde 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, 57600 of 115200 bits-per-seconde kan aannemen. ms#stty-modus Bepaalt de opties voor het geval het printerapparaat een terminal is. In &man.stty.1; staat uitleg over de beschikbare opties. Als LPD het apparaat opent dat met lp is opgegeven, worden de eigenschappen van het apparaat bepaald door de optie ms#. Met name van belang zijn de modi parenb, parodd, cs5, cs6, cs7, cs8, cstopb, crtscts en ixon. Deze worden uitgelegd in &man.stty.1;. Nu wordt de voorbeeldprinter op de zesde seriële poort aangepast. De bps-snelheid wordt ingesteld op 38400. Als modus wordt gekozen: geen pariteit met -parenb, 8-bit tekens met cs8, geen modemcontrole met clocal en hardware flow-control met crtscts: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts: Tekstfilter installeren afdrukken filters Nu kan LPD verteld worden welke tekstfilters gebruikt moeten worden bij het versturen van afdrukopdrachten. Een tekstfilter is een programma dat LPD aanroept als het een afdrukopdracht krijgt. Wanneer LPD het tekstfilter aanroept, wordt de standaard invoer van het filter gekoppeld aan de afdrukopdracht en de standaard uitvoer aan het printerapparaat dat door de optie lp is opgegeven. Er wordt aangenomen dat het filter van standaard invoer leest, vervolgens de nodige handelingen uitvoert en het resultaat naar de standaard uitvoer schrijft, zodat het afgedrukt wordt. In Filters staat meer informatie over het tekstfilter. Voor deze eenvoudige printerinstallatie kan het tekstfilter een klein shellscript zijn dat /bin/cat aanroept om de afdrukopdracht naar de printer te sturen. &os; wordt geleverd met een ander filter, lpf, dat backspaces en onderlijnde tekst afhandelt voor printers die hier niet mee overweg kunnen. Natuurlijk kan elk filter gebruikt worden dat gewenst is. Het filter lpf wordt uitgebreid beschreven in lpf: een tekstfilter. Nu wordt eerst het shellscript /usr/local/libexec/if-simple gemaakt dat als simpel tekstfilter dient. Plaats de volgende tekst in het bestand met een tekstverwerker naar keuze: #!/bin/sh # # if-simple - Eenvoudig tekstfilter voor lpd # Geïnstalleerd in /usr/local/libexec/if-simple # # Kopieert eenvoudigweg stdin naar stdout. # Filterargumenten worden genegeerd. /bin/cat && exit 0 exit 2 Zorg dat het bestand uitvoerbaar is: &prompt.root; chmod 555 /usr/local/libexec/if-simple Zorg dat LPD het filter gebruikt door dit aan te geven met de optie if in /etc/printcap. Nu volgt hoe dit te doen voor de twee printers uit het voorbeeld: # # /etc/printcap voor host rose - met tekstfilter # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:\ :if=/usr/local/libexec/if-simple: Een kopie van het script if-simple staat in de map /usr/share/examples/printing. <application>LPD</application> aanzetten &man.lpd.8; wordt gestart vanuit /etc/rc door de variabele lpd_enable. Standaard staat deze variabele op NO. Als dit nog niet is gedaan, voeg dan de volgende regel toe aan /etc/rc.conf en herstart de computer: lpd_enable="YES" Of voer het commando &man.lpd.8; uit: &prompt.root; lpd Printer uitproberen Nu volgt het laatste onderdeel van de eenvoudige LPD installatie. Helaas zijn felicitaties nog niet gepast. De printer moet worden getest en eventuele problemen moeten worden opgelost. Om de installatie te testen kan iets afgedrukt worden. Afdrukken gaat met het commando &man.lpr.1;. Dit stuurt een opdracht naar een printer. Het programma &man.lpr.1; is te combineren met het programma &man.lptest.1; uit Printercommunicatie controleren om tekst te genereren. Om de eenvoudige installatie van LPD te testen: &prompt.root; lptest 20 5 | lpr printernaam Hier is printernaam de naam van een printer (of een alias) die in /etc/printcap wordt genoemd. De standaard printer kan worden getest door bij het aanroepen van &man.lpr.1; de optie weg te laten. Nogmaals: test een &postscript;-printer door een &postscript;-programma naar een printer te sturen en maak geen gebruik van &man.lptest.1;. Dit kan door het programma in een bestand op te slaan en de volgende commandoregel uit te voeren: lpr bestand. Voor een &postscript;-printer moet het resultaat van het programma verschijnen. Als gebruik wordt gemaakt van &man.lptest.1; ziet het resultaat er ongeveer zo uit: !"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 $%&'()*+,-./01234567 %&'()*+,-./012345678 Om de printer uitvoeriger te testen kunnen grotere programma's geprobeerd worden (voor taalgebaseerde printers) of kan &man.lptest.1; aangeroepen worden met andere argumenten. Bijvoorbeeld: lptest 80 60, drukt 60 regels af met elk 80 karakters. Als de printer niet werkt, lees dan verder in Problemen oplossen. Geavanceerde printerinstallatie - - Vanaf &os; 8.0; zijn de apparaatknooppunten - voor seriële poorten hernoemd van - /dev/ttydN naar - /dev/ttyuN. - &os; 7.X gebruikers moeten de volgende documentatie aanpassen - naar aanleiding van deze wijzigingen. - - Deze sectie behandelt het gebruik van filters om speciaal opgemaakte tekst en voorbladen af te drukken, via het netwerk af te drukken en printergebruik te beperken en statistieken bij te houden. Filters afdrukken filters Hoewel LPD veel van het afdrukwerk afhandelt (netwerkverkeer, wachtrijafhandeling, toegangscontrole, enzovoort), wordt het echte werk door de filters gedaan. Filters zijn programma's die met een printer communiceren en inspelen op printerspecifieke eigenschappen. In de eenvoudige printeropzet is een filter geïnstalleerd voor platte tekst, een zeer eenvoudig filter dat met de meeste printers zou moeten werken (Tekstfilter installeren). Om echter gebruik te maken van formaatomzetting, printeradministratie, printerspecifieke aanpassingen, enzovoort, is het nodig te weten hoe filters werken. Uiteindelijk is het de verantwoordelijkheid van het filter om deze zaken af te handelen. Het slechte nieuws is dat de beheerder in het merendeel van de gevallen het filter moet aanleveren. Het goede nieuws is dat veel filters algemeen beschikbaar zijn en als ze dat niet zijn, zijn ze vaak makkelijk te schrijven. &os; heeft een ingebouwd filter, /usr/libexec/lpr/lpf, die met veel printers werkt die platte tekst kunnen afdrukken. Het filter regelt backspace en tabs in bestanden en administreert printergebruik, maar dat is zo'n beetje alles wat dit filter doet. Er zijn ook diverse filters en filtercomponenten in de &os; Portscollectie. Hieronder wordt het volgende beschreven: In Hoe filters werken staat een overzicht van de rol die een filter speelt in het afdrukproces. Lees dat onderdeel om een indruk te krijgen wat er onder de motorkap gebeurt als LPD filters gebruikt. Deze kennis helpt mogelijke problemen te voorkomen of op te lossen als meerdere filters worden geïnstalleerd voor printers. LPD gaat er van uit dat elke printer standaard platte tekst af kan drukken. Dit geeft problemen voor &postscript; (of andere op taal gebaseerde) printers die niet in staat zijn direct platte tekst af te drukken. In Platte tekst op &postscript;-printers afdrukken staat wat er kan worden gedaan om dit probleem te verhelpen. Lees verder in dit onderdeel als het om &postscript;-printers gaat. Voor veel programma's is &postscript; een populair uitvoerformaat. Sommige mensen schrijven &postscript; code zelfs direct. &postscript;-printers zijn echter kostbaar. In &postscript; simuleren op niet-&postscript;-printers staat hoe de tekstfilter van een printer aangepast moet worden zodat die &postscript; accepteert en afdrukt op een niet-&postscript;-printer. Dit onderdeel is van toepassing voor niet-&postscript;-printers. In Conversiefilters wordt een methode beschreven om de conversie van bepaalde bestandsformaten te automatiseren, zoals van grafische of tekstopmaakprogramma's, naar formaten die een printer kan begrijpen. Na het lezen van dit onderdeel is een beheerder in staat om een printer zodanig in te stellen dat gebruikers lpr kunnen invoeren om troff-gegevens af te drukken, lpr om &tex; DVI-gegevens af te drukken of lpr om rasterplaatjes af te drukken, enzovoorts. Het wordt aangeraden deze sectie te lezen. In Uitvoerfilters wordt een niet vaak gebruikte functionaliteit van LPD behandeld: uitvoerfilters. Tenzij voorbladen worden afgedrukt (Voorbladen), kan deze sectie waarschijnlijk overgeslagen worden. lpf: een tekstfilter beschrijft lpf, een redelijk complete, eenvoudige tekstfilter voor lijnprinters (en laserprinters die zich als lijnprinters voordoen) dat wordt geleverd bij &os;. Voor een snelle manier om printeradministratie aan de praat te krijgen voor platte tekst of voor printers waar rook uit komt bij het zien van backspace karakters, is het serieus te overwegen gebruik te maken van lpf. Een kopie van de scripts die hieronder worden beschreven, staan in de map /usr/share/examples/printing. Hoe filters werken Zoals eerder genoemd, is een filter een programma dat wordt uitgevoerd door LPD voor het afhandelen van het apparaatafhankelijke deel van de communicatie met een printer. Als LPD een bestand wil afdrukken uit een afdrukopdracht, start het een filterprogramma. Het koppelt de standaard invoer van de filter aan het af te drukken bestand, de standaard uitvoer aan de printer en de standaard foutmelding aan het logboekbestand voor foutmeldingen (zoals opgegeven via de optie lf in /etc/printcap of standaard /dev/console). troff Welk filter LPD start en de argumenten van het filter hangen af van wat er in het bestand /etc/printcap wordt opgegeven en de argumenten die de gebruiker geeft op de commandoregel van &man.lpr.1;. Als een gebruiker bijvoorbeeld lpr ingeeft, start LPD het filter troff, zoals wordt opgegeven via de optie tf voor de betreffende printer. Als een gebruiker platte tekst wilt afdrukken, dan wordt het filter if gestart (dit klopt bijna: zie Uitvoerfilters voor de details). Er zijn drie soorten filters die in /etc/printcap kunnen worden opgegeven: Het tekstfilter, dat in de LPD documentatie verwarrend genoeg input filter wordt genoemd, verwerkt het afdrukken van gewone tekst. Beschouw het als het standaardfilter. LPD verwacht dat elke printer standaard platte tekst kan afdrukken en het is de taak van het tekstfilter om er voor te zorgen dat backspaces, tabs en andere speciale karakters de printer niet in de war sturen. In een omgeving waar moet worden bijgehouden hoeveel er wordt afgedrukt, moet het tekstfilter ook administreren hoeveel pagina's er zijn afgedrukt. Dit gaat meestal door het aantal afgedrukte regels te tellen en dit te vergelijken met het aantal regels per pagina dat door de printer wordt ondersteund. Het tekstfilter wordt aangeroepen met de volgende lijst argumenten: filter-name -c -w width -l length -i indent -n login -h host acct-file met wordt gebruikt als de afdrukopdracht is gegeven met lpr width is de waarde van de optie pw (page width: paginabreedte), zoals opgegeven in /etc/printcap, standaard 132 length is de waarde van de optie pl (page length: paginalengte), standaard 66 indent geeft aan hoeveel wordt ingesprongen door lpr , standaard 0 login de gebruikersnaam van de gebruiker die de afdrukopdracht gaf host de hostnaam waar de afdrukopdracht gegeven is acct-file de naam van het administratiebestand zoals opgegeven via de optie af. afdrukken filters Een conversiefilter converteert een specifiek bestandsformaat naar een formaat dat een printer begrijpt. Bijvoorbeeld: ditroff typesettinggegevens kunnen niet direct worden afgedrukt, maar er bestaat wel een conversiefilter om ditroff-gegevens te converteren naar een formaat dat een printer kan verteren en afdrukken. Dit wordt in Conversiefilters beschreven. Conversiefilters zijn ook nodig om printergebruik te administreren, mocht dat nodig zijn. Conversiefilters worden met de volgende argumenten aangeroepen: filter-name -x pixel-width -y pixel-height -n login -h host acct-file Hier is pixel-width de waarde van de optie px (standaard 0) en pixel-height is de waarde van de optie py (standaard 0). Het uitvoerfilter wordt alleen gebruikt als er geen tekstfilter is of als er voorbladen worden afgedrukt. De ervaring leert dat uitvoerfilters zelden worden gebruikt. In sectie Uitvoerfilters worden ze beschreven. Er zijn slechts twee argumenten die aan een uitvoerfilter worden meegegeven: filter-name -w width -l length Deze zijn identiek aan de argumenten en van het tekstfilter. Filters moeten afsluiten met de volgende waarde: exit 0 Als het filter een bestand succesvol heeft afgedrukt. exit 1 Als het filter niet geslaagd is om een bestand af te drukken, maar wil dat LPD het nogmaals probeert. LPD herstart het filter als die afsluit met deze status. exit 2 Als het filter niet geslaagd is om een bestand af te drukken, maar niet wil dat LPD het nogmaals probeert. LPD verwijdert het bestand uit de wachtrij. Het tekstfilter dat bij &os; wordt geleverd, /usr/libexec/lpr/lpf, benut de argumenten voor paginabreedte en -lengte om te bepalen wanneer een nieuwe pagina moet worden begonnen en om het printergebruik bij te houden. Het gebruikt de argumenten voor login, host en administratiebestand om accountingregels aan te maken. Controleer bij het zoeken naar filters of ze LPD-compatibel zijn. Zo ja, dan ondersteunen ze de argumenten zoals hierboven beschreven. Zorg bij het zelf schrijven van filters voor algemeen gebruik dat ze dezelfde argumenten en exitcodes ondersteunen. Platte tekst op &postscript;-printers afdrukken afdrukopdrachten Als een computer en &postscript; (of andere op taal gebaseerde) printer maar één gebruiker hebben die belooft nooit platte tekst naar de printer te sturen of programma's te gebruiken die dat doen, dan is dit onderdeel overbodig. Als gebruikers zowel &postscript; als platte tekst naar een printer willen sturen, dan is het aan te raden de printerinstellingen hierop aan te passen. Hiervoor moet het tekstfilter bij elke nieuwe opdracht bepalen of het om platte tekst of &postscript; gaat. Alle &postscript;-opdrachten beginnen met %! (raadpleeg de printerhandleiding voor andere printertalen). Als dit de eerste twee karakters zijn van een opdracht is het &postscript; en kan de rest van een opdracht direct doorgestuurd worden. Is dit niet het geval, dan moet de filter de tekst omzetten in &postscript; en het resultaat afdrukken. Hoe gaat dat werken? printers serieel Voor seriële printers kan het meest eenvoudig lprps geïnstalleerd worden. lprps is een &postscript;-afdrukfilter die tweewegcommunicatie met een printer heeft. Het werkt het statusbestand van een printer bij met uitgebreide informatie afkomstig van een printer, zodat gebruikers en beheerders precies kunnen zien wat de status van een printer is (zoals: toner bijna op of papier vastgelopen). Maar belangrijker, het omvat het programma psif dat bepaalt of een binnenkomende opdracht platte tekst is en textps (dat ook geleverd wordt met lprps) om opdrachten om te zetten naar &postscript;. Vervolgens wordt een opdracht met lprps naar een printer gestuurd. lprps is onderdeel van de &os; Portscollectie (zie De Portscollectie). U kunt één van de ports print/lprps-a4 of print-lprps-letter installeren afhankelijk van de gebruikte papiermaat. Nadat lprps is geïnstalleerd moet de installatielocatie ervan aan psif worden doorgeven dat onderdeel is van lprps. Als lprps is geïnstalleerd via de Portscollectie, gebruik dan het volgende voor de seriële &postscript;-printer in /etc/printcap: :if=/usr/local/libexec/psif: Ook moet de optie rw worden opgeven, die LPD vertelt om een printer in lezen/schrijvenmodus te openen. Als een parallelle &postscript;-printer wordt ingesteld (en dus geen tweewegcommunicatie toegepast kan worden met de printer, zoals vereist door lprps), dan kan het volgende shellscript gebruikt worden als tekstfilter: #!/bin/sh # # psif - Druk &postscript; of platte tekst af op een &postscript; # printer. Script versie; NIET de versie die wordt geleverd bij lprps # Geïnstalleerd in /usr/local/libexec/psif # IFS="" read -r first_line first_two_chars=`expr "$first_line" : '\(..\)'` if [ "$first_two_chars" = "%!" ]; then # # &postscript; opdracht, afdrukken. # echo "$first_line" && cat && printf "\004" && exit 0 exit 2 else # # Platte tekst, converteren en dan afdrukken. # ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0 exit 2 fi In bovenstaand script is textps een programma dat geïnstalleerd is om platte tekst om te zetten naar &postscript;. Elk tekst-naar-&postscript; programma volstaat. De &os; Portscollectie (zie De Portscollectie) bevat een uitgebreid tekst-naar-&postscript;-programma, a2ps, dat wellicht handig is om te gebruiken. &postscript; simuleren op niet-&postscript;-printers &postscript; emuleren Ghostscript &postscript; is de facto de standaard voor op hoge kwaliteit typesetten en afdrukken. &postscript; is echter een dure standaard. Gelukkig heeft Aladdin Enterprises een gratis &postscript;-kloon, Ghostscript, die werkt onder &os;. Ghostscript kan de meeste &postscript;-bestanden lezen en de pagina's op verschillende soorten apparaten weergeven, waaronder veel niet-&postscript;-printers. Door Ghostscript te installeren en een printer gebruik te laten maken van een speciaal tekstfilter voor uw printer, kan uw niet-&postscript;-printer zich gedragen als een echte &postscript;-printer. Ghostscript is beschikbaar via de &os; Portscollectie, vele versies zijn beschikbaar, de meest gebruikte versie is print/ghostscript-gpl. Om &postscript; te simuleren moet een tekstfilter detecteren of het een &postscript;-bestand aan het afdrukken is. Zo niet, dan stuurt het filter het bestand direct naar een printer, anders gebruikt het filter Ghostscript om het bestand om te zetten naar een formaat dat door een printer wordt begrepen. Een voorbeeld: het volgende script is een tekstfilter voor Hewlett Packard DeskJet 500 printers. Voor andere printers moet het argument voor het commando gs (Ghostscript) vervangen worden. (Met gs -h wordt een lijst met apparaten getoond worden die de huidige installatie van Ghostscript ondersteunt.) #!/bin/sh # # ifhp - Druk Ghostscript-gesimuleerd &postscript; af op een DeskJet # 500. Geïnstalleerd in /usr/local/libexec/ifhp # # Behandel LF als CR+LF (om een "trapeffect" op HP/PCL # printer te voorkomen): # printf "\033&k2G" || exit 2 # # Lees de eerste twee karakters van het bestand # IFS="" read -r first_line first_two_chars=`expr "$first_line" : '\(..\)'` if [ "$first_two_chars" = "%!" ]; then # # Het is &postscript;. Gebruik Ghostscript om te converteren # en druk het af. # /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \ -sOutputFile=- - && exit 0 else # # Platte tekst of HP/PCL, dus direct afdrukken; druk een # pagina-einde af om de laatste pagina te ejecteren. # echo "$first_line" && cat && printf "\033&l0H" && exit 0 fi exit 2 Tot slot moet LPD op de hoogte gebracht worden van het filter via de optie if: :if=/usr/local/libexec/ifhp: Dat is alles. Nu kan lpr platte.tekst en lpr watdanook.ps ingevoerd worden en beiden worden juist afgedrukt. Conversiefilters Na de eenvoudige installatie, zoals beschreven in Eenvoudige printerinstallatie, te hebben voltooid, is het waarschijnlijk wenselijk om conversiefilters te installeren voor favoriete bestandsformaten (naast platte ASCII-tekst). Waarom conversiefilters installeren? &tex; DVI-bestanden afdrukken Conversiefilters maken het afdrukken van verschillende bestanden eenvoudig. Stel dat veel gebruik gemaakt wordt van het tekstverwerkingsprogramma &tex; en een &postscript; printer. Elke keer als door &tex; een DVI-bestand wordt gegenereerd, kan dat niet direct afgedrukt worden. Het DVI-bestand moet omgezet worden naar &postscript;. De te geven opdrachten zijn de volgende: &prompt.user; dvips zeewieranalyse.dvi &prompt.user; lpr zeewieranalyse.ps Na installatie van een conversiefilter voor DVI-bestanden kan deze handmatige conversie overgeslagen worden door LPD de conversie te laten uitvoeren. Elke keer als een DVI-bestand wordt afgedrukt, hoeft alleen de volgende opdracht gegeven te worden: &prompt.user; lpr zeewieranalyse.dvi LPD voert de DVI-bestandsconversie uit door te geven. In Opties voor opmaak en conversie staat een lijst van conversie-opties. Voor elke conversie-optie moet een conversiefilter geïnstalleerd worden en moet in /etc/printcap de locatie worden opgegeven. Een conversiefilter is als het tekstfilter voor de eenvoudige printerinstallatie (Tekstfilter installeren), behalve dat in plaats van platte tekst af te drukken, het conversiefilter het bestand converteert naar een formaat dat een printer begrijpt. Welke conversiefilters installeren? Installeer de conversiefilters die nodig zijn. Als veel DVI-bestanden worden afgedrukt, dan is het handig een DVI-filter te installeren. Als veel troff wordt afgedrukt, dan is het waarschijnlijk handig een troff-filter te installeren. De volgende tabel geeft een samenvatting van filters waarmee LPD kan werken, hoe ze in /etc/printcap kunnen worden aangeroepen en hoe ze met lpr kunnen worden aangeroepen: Bestandsformaat /etc/printcap optie lpr optie cifplot cf DVI df plot gf ditroff nf FORTRAN-tekst rf troff tf raster vf platte tekst if geen, , of In het voorbeeld waarbij lpr wordt gebruikt, moet voor de printer een optie df gedefinieerd staan in /etc/printcap. FORTRAN Ondanks wat anderen mogelijk beweren, zijn formaten als FORTRAN-tekst en plot waarschijnlijk verouderd. Dit biedt de mogelijkheid een nieuwe betekenis te geven aan deze opties door zelf een filter te installeren. Stel dat direct Printerleaf-bestanden afgedrukt moeten worden (bestanden van het bureaubladpublicatieprogramma Interleaf), maar nooit plotbestanden worden afgedrukt. Dan kan een Printerleaf-conversiefilter geïnstalleerd worden onder de optie gf en gebruikers kunnen geïnstrueerd worden om lpr te gebruiken om Printerleaf-bestanden af te drukken. Conversiefilters installeren Aangezien conversiefilters programma's zijn die niet onder de &os;-basisinstallatie vallen, kunnen ze het best onder /usr/local geplaatst worden. De map /usr/local/libexec is een veelgebruikte locatie, omdat hier programma's te vinden zijn die alleen door LPD gebruikt worden. Gewone gebruikers hoeven ze nooit te gebruiken. Om een conversiefilter te activeren, moet de bestandslocatie onder de juiste optie voor de betreffende printer in /etc/printcap opgegeven worden. In het onderstaande voorbeeld wordt het DVI-conversiefilter toegevoegd onder de sectie van de printer bamboo. Hieronder staat opnieuw het voorbeeldbestand /etc/printcap, nu met de nieuwe optie df voor de printer bamboo: # # /etc/printcap voor host rose - df-filter voor bamboo toegevoegd # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: Het DVI-filter is een shellscript met de naam /usr/local/libexec/psdf. Het script ziet er als volgt uit: #!/bin/sh # # psdf - DVI naar PostScript afdrukfilter # Geïnstalleerd in /usr/local/libexec/psdf # # Aangeroepen door lpd wanneer een gebruiker lpr -d uitvoert # exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@" Dit script roept dvips in filtermodus aan (het argument) op de standaard uitvoer, de af te drukken opdracht. Vervolgens start het &postscript; afdrukfilter lprps (zie Platte tekst op &postscript;-printers afdrukken) met de argumenten die LPD aan het script doorgeeft. lprps gebruikt deze argumenten om de afgedrukte pagina's te administreren. Meer voorbeelden van conversiefilters Er is geen vaste procedure om conversiefilters te installeren, er worden in deze sectie wat werkende voorbeelden gegeven. Gebruik deze als hulp bij het zelf maken van filters. Gebruik ze zonder aanpassingen indien mogelijk. Dit voorbeeldscript is een raster (eigenlijk een GIF-bestand) conversiefilter voor een HP LaserJet III-Si printer: #!/bin/sh # # hpvf - Converteer GIF-bestanden naar HP/PCL, druk vervolgens af # Geïnstalleerd in /usr/local/libexec/hpvf PATH=/usr/X11R6/bin:$PATH; export PATH giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \ && exit 0 \ || exit 2 Het script converteert achtereenvolgens het GIF-bestand naar een PNM-bestand (portable anymap), een PGM-bestand (portable graymap), een PBM-bestand (portable bitmap) en tenslotte naar LaserJet/PCL formaat. Een /etc/printcap bestand dat bovenstaand filter gebruikt ziet er als volgt uit: # # /etc/printcap voor host orchid # teak|hp|laserjet|HP LaserJet 3Si:\ :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif:\ :vf=/usr/local/libexec/hpvf: Het volgende script is een conversiefilter voor troff-gegevens afkomstig van het groff-typesettingsysteem voor de &postscript;-printer bamboo: #!/bin/sh # # pstf - Converteert groff's troffgegevens naar PS, drukt vervolgens af. # Geïnstalleerd in /usr/local/libexec/pstf # exec grops | /usr/local/libexec/lprps "$@" Bovenstaande script maakt eveneens gebruik van lprps om de communicatie met een printer af te handelen. Als een printer op een parallelle poort is aangesloten, ziet het er als volgt uit: #!/bin/sh # # pstf - Converteert groff's troff naar PS, drukt vervolgens af. # Geïnstalleerd in /usr/local/libexec/pstf # exec grops Dat is alles. In /etc/printcap moet het volgende toegevoegd worden om het filter beschikbaar te maken: :tf=/usr/local/libexec/pstf: Hieronder een voorbeeld waarvan FORTRAN-programmeurs waarschijnlijk tranen in hun ogen krijgen: een FORTRAN-tekstfilter voor een willekeurige printer die in staat is platte tekst af te drukken. Het filter wordt actief gemaakt voor teak: #!/bin/sh # # hprf - FORTRAN tekstfilter voor LaserJet 3si: # Geïnstalleerd in /usr/local/libexec/hprf # printf "\033&k2G" && fpr && printf "\033&l0H" && exit 0 exit 2 De onderstaande regel wordt toegevoegd aan /etc/printcap voor de printer teak om het filter beschikbaar te maken: :rf=/usr/local/libexec/hprf: Het laatste voorbeeld is wellicht complexer. Er wordt een DVI-filter toegevoegd voor de eerder genoemde LaserJet printer teak. Eerst het makkelijke gedeelte: in /etc/printcap wordt de locatie van het DVI-filter opgegeven: :df=/usr/local/libexec/hpdf: Nu het moeilijke gedeelte: het schrijven van het filter. Daarvoor is een DVI-naar-LaserJet/PCL conversieprogramma nodig. De &os; Portscollectie (zie Portscollectie) heeft er een: print/dvi2xx. Door deze port te installeren komt het programma dat nodig is beschikbaar, dvilj2p, waarmee DVI geconverteerd kan worden naar LaserJet IIp-, LaserJet III- en LaserJet 2000-formaten. Het hulpprogramma dvilj2p maakt het filter hpdf redelijk complex, omdat dvilj2p niet van de standaard invoer kan lezen. Het wil werken met een bestandsnaam. Nog lastiger is dat de bestandsnaam moet eindigen op .dvi, zodat moeilijk gebruik gemaakt kan worden van /dev/fd/0 als standaard. Dit probleem kan omzeild worden door een (symbolische) koppeling aan te maken van een tijdelijk bestand (eindigend op .dvi) naar /dev/fd/0. Hiermee wordt dvilj2p gedwongen van de standaard invoer te lezen. De enige andere hobbel die genomen moet worden, is dat /tmp niet gebruikt kan worden als tijdelijke koppeling. Symbolische koppelingen zijn eigendom van de gebruiker en groep bin. Het filter wordt uitgevoerd door de gebruiker daemon. De map /tmp heeft het sticky-bit aan staan. Het filter kan de koppeling wel aanmaken, maar het is niet mogelijk de koppeling te verwijderen als de opdracht is uitgevoerd, omdat de koppeling eigendom is van een andere gebruiker. In plaats hiervan maakt het filter een symbolische koppeling aan in de huidige werkmap, de wachtrijmap (zoals opgegeven in de optie sd in /etc/printcap). Dit is een perfecte plaats voor filters om hun werk te doen, zeker gezien er (soms) meer vrije schijfruimte is in de wachtrijmap dan onder /tmp. Dit is het uiteindelijke filter: #!/bin/sh # # hpdf - Druk DVI-gegevens af op een HP/PCL printer # Geïnstalleerd in /usr/local/libexec/hpdf PATH=/usr/local/bin:$PATH; export PATH # # Definieer een functie om tijdelijke bestanden op te ruimen. Deze # staan in de huidige map; de wachtrijmap voor de printer. # cleanup() { rm -f hpdf$$.dvi } # # Definieer een functie om fatale fouten te verwerken: geef de # opgegeven boodschap weer en sluit af met 2. Afsluiten met 2 vertelt # LPD niet nog eens te proberen de afdrukopdracht af te drukken. # fatal() { echo "$@" 1>&2 cleanup exit 2 } # # Als de gebruiker de opdracht annuleert, stuurt LPD een SIGINT, dus # ondervang SIGINT (en enkele andere signalen) om onze rommel op te # ruimen. # trap cleanup 1 2 15 # # Voor de zekerheid bestaande tijdelijke bestanden opruimen # cleanup # # Koppel het DVI-invoerbestand aan de standaard invoer (het af te # drukken bestand). # ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0" # # Maak LF = CR+LF # printf "\033&k2G" || fatal "Cannot initialize printer" # # Converteer en druk af. De retourneerwaarde van dvilj2p lijkt niet # betrouwbaar, dus negeren we het. # dvilj2p -M1 -q -e- dfhp$$.dvi # # Opruimen en afsluiten # cleanup exit 0 Automatische conversie: een alternatief voor conversiefilters Al deze conversiefilters bieden vele mogelijkheden voor afdrukomgevingen, maar dwingen de gebruiker aan te geven (op de &man.lpr.1; commandoregel) welk filter gebruikt moet worden. Als gebruikers niet zo vaardig zijn in het gebruik van computers, wordt het al snel vervelend steeds aan te moeten geven welk filter gebruikt moet worden. Vervelender is echter wanneer een gebruiker een verkeerd filter gebruikt voor een bepaald bestandsformaat. Het resultaat kan zijn dat een printer honderden pagina's papier uitspuugt. In plaats van het installeren van conversiefilters, is het te proberen om het (standaard) tekstfilter het bestandstype van het af te drukken bestand te laten detecteren en dan automatisch het juiste conversiefilter aan te laten roepen. Programma's als file kunnen hierbij handig zijn. Voor sommige bestandsformaten kan het moeilijk zijn de verschillen te ontdekken en voor deze bestanden kan alsnog een conversiefilter beschikbaar worden gesteld. apsfilter afdrukken filters apsfilter De &os; Portscollectie heeft een tekstfilter dat automatisch converteert genaamd apsfilter (print/apsfilter). Het detecteert platte tekst, &postscript; en DVI-bestanden, voert de juiste conversie uit en druk de bestanden af. Uitvoerfilters Het wachtrijsysteem LPD ondersteunt een ander type filter waar nog geen aandacht aan is besteed: een uitvoerfilter. Een uitvoerfilter is bedoeld om alleen platte tekst af te drukken, net als een tekstfilter, maar met veel vereenvoudigingen. Wanneer een uitvoerfilter wordt gebruikt, maar geen tekstfilter, dan: start LPD een uitvoerfilter voor de gehele opdracht, in plaats van voor elk bestand in de opdracht; biedt LPD het uitvoerfilter niet de voorziening van het identificeren van het begin of eind van de bestanden in de afdrukopdracht; stuurt LPD de gebruikersnaam en de hostnaam niet door aan het filter. Het is dus niet bedoeld om een afdrukadministratie bij te houden. In feite zijn er maar twee argumenten: filter-name -wwidth -llength Hierbij is width afkomstig van de optie pw en length afkomstig van de optie pl voor de betreffende printer. De eenvoud van een uitvoerfilter is verleidelijk. Als elk bestand in een afdrukopdracht op een nieuwe pagina moet beginnen, is een uitvoerfilter niet geschikt. In dat geval dient een tekstfilter (ook wel invoerfilter) gebruikt te worden (zie Tekstfilter installeren. Verder is een uitvoerfilter eigenlijk veel ingewikkelder, omdat de te verwerken bytestroom gecontroleerd moet worden op speciale tekens en steeds signalen naar zichzelf moet sturen in opdracht van LPD. Een uitvoerfilter is noodzakelijk als voorbladen gewenst zijn en het nodig is om escape-reeksen of andere initialisatietekens te sturen voor het afdrukken van het voorblad. Maar het is tevens nutteloos als het voorblad voor rekening van de afkomstige gebruiker moet komen, aangezien LPD geen gebruiker of hostinformatie naar het uitvoerfilter stuurt. Op een enkele printer staat LPD het gebruik van zowel een uitvoerfilter als van een tekst of andere filter toe. In deze gevallen start LPD het uitvoerfilter alleen voor het afdrukken van het voorblad (zie Voorbladen). LPD verwacht vervolgens van het uitvoerfilter dat deze zichzelf stopt door twee bytes naar het filter te sturen: ASCII 031 gevolgd door ASCII 001. Als een uitvoerfilter deze twee bytes ziet (031, 001), moet die stoppen door een SIGSTOP naar zichzelf te sturen. Als LPD klaar is met het uitvoeren van alle andere filters, dan herstart deze het uitvoerfilter door er een SIGCONT naar toe te sturen. Als er wel een uitvoerfilter, maar geen tekstfilter is en LPD is niet bezig met het verwerken van een opdracht met platte tekst, dan gebruikt LPD het uitvoerfilter voor het afdrukken van de opdracht. Zoals eerder vermeld, drukt het uitvoerfilter elk bestand van de opdracht achter elkaar af zonder pagina-einden of andere signalen voor paginavoortgang. Dit is waarschijnlijk niet gewenst. In bijna alle gevallen is een tekstfilter nodig. Het programma lpf, dat eerder geïntoduceerd is als tekstfilter, kan ook worden uitgevoerd als uitvoerfilter. Als een ad-hoc uitvoerfilter nodig is, maar het schrijven van de bytedetectie en signaalverzending code niet wenselijk is, dan is lpf het proberen waard. lpf kan ook opgenomen worden in een shellscript om initialisatiecode af te handelen die eventueel nodig is voor een printer. <command>lpf</command>: een tekstfilter Het programma /usr/libexec/lpr/lpf uit de gecompileerde &os;-distributie is een tekstfilter (invoerfilter) die uitvoer kan inspringen (een opdracht gegeven met lpr ), karakters onveranderd kan doorlaten (een opdracht gegeven met lpr ), de printpositie voor backspaces en tabs in de opdracht kan aanpassen en afgedrukte pagina's kan administreren. Het kan ook functioneren als uitvoerfilter. Het filter lpf is geschikt voor vele afdrukomgevingen. Hoewel het zelf niet in staat is initialisatiesequenties naar een printer te sturen, is het vrij eenvoudig om een shellscript te schrijven dat de initialisatie doet en vervolgens lpf aanroept. pagina-administratie administreren printer Als lpf afgedrukte pagina's moet administreren, is het nodig om de juiste waarden in te vullen voor de opties pw en pl in het bestand /etc/printcap. Deze waarden worden gebruikt om te bepalen hoeveel tekst er op een pagina past en hoeveel pagina's er in een afdrukopdracht zijn afgedrukt. Zie Printergebruik administreren voor meer informatie. Voorbladen Als er veel gebruikers zijn die allemaal verschillende printers gebruiken, dan is het te overwegen gebruik te maken van voorbladen als noodzakelijk kwaad. bannerpagina's voorbladen voorbladen Voorbladen, in het Engels ook wel bekend als banner of burst pagina's, identificeren wie een bepaalde opdracht heeft afgedrukt. Ze worden meestal bedrukt met grote, dikgedrukte letters, eventueel met een decoratieve rand, zodat ze in een stapel afdrukken opvallen tussen de afgedrukte documenten. Ze maken het gebruikers mogelijk hun afdrukopdracht snel te vinden. Het nadeel van het gebruik van voorbladen is dat er een extra blad moet worden afgedrukt voor elke opdracht, waarmee hun nut niet langer duurt dan een paar minuten. Uiteindelijk belanden ze in een papierbak of afvalberg. Voorbladen gaan vooraf aan elke opdracht, niet aan elk bestand in een opdracht, waardoor de verspilling beperkt blijft. Het LPD-systeem kan automatisch voorbladen afdrukken als een printer direct platte tekst kan afdrukken. In geval van een &postscript;-printer, is het nodig een extern programma aan te roepen om een voorblad te genereren (zie Voorbladen op &postscript;-printers. Voorbladen afdrukken In de sectie Eenvoudige printerinstallatie is het afdrukken van voorbladen uitgeschakeld door de optie sh (suppress header) in het bestand /etc/printcap op te geven. Om wel voorbladen af te drukken, hoeft alleen de optie sh verwijderd te worden. Dit klinkt wat al te makkelijk, of niet? Dat klopt. Het kan nodig zijn een uitvoerfilter op te geven die initialisatiestrings naar een printer stuurt. Hier is een voorbeeld uitvoerfilter voor HP PCL-compatible printers: #!/bin/sh # # hpof - Uitvoerfilter voor HP PCL-compatible printers # Geïnstalleerd in /usr/local/libexec/hpof printf "\033&k2G" || exit 2 exec /usr/libexec/lpr/lpf Geef de locatie van het uitvoerfilter op met de optie of. Zie Uitvoerfilters voor meer informatie. Hier is een voorbeeldbestand /etc/printcap voor de printer teak die eerder is geïntroduceerd;. Het afdrukken van voorbladen is geactiveerd en bovenstaande uitvoerfilter is toegevoegd: # # /etc/printcap voor host orchid # teak|hp|laserjet|HP LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif:\ :vf=/usr/local/libexec/hpvf:\ :of=/usr/local/libexec/hpof: Als gebruikers nu een opdracht sturen naar teak, wordt er bij elke opdracht een voorblad afgedrukt. Als gebruikers liever willen zoeken naar hun afdrukken, dan kunnen ze de voorbladen onderdrukken door de opdracht te geven met het commando lpr . Zie Voorbladopties voor meer opties voor &man.lpr.1;. LPD drukt een karakter voor pagina-einde af na elk voorblad. Als een printer een ander teken of sequentie gebruikt voor het beëindigen van een pagina, dan kan dit opgeven worden met de optie ff in /etc/printcap. Voorbladen beheren Door het afdrukken van voorbladen aan te zetten, produceert LPD een lang voorblad waarop in grote letters de gebruiker, host en opdracht te lezen zijn. Hier volgt een voorbeeld (kelly heeft de opdracht outline afgedrukt vanaf host rose): k ll ll k l l k l l k k eeee l l y y k k e e l l y y k k eeeeee l l y y kk k e l l y y k k e e l l y yy k k eeee lll lll yyy y y y y yyyy ll t l i t l oooo u u ttttt l ii n nnn eeee o o u u t l i nn n e e o o u u t l i n n eeeeee o o u u t l i n n e o o u uu t t l i n n e e oooo uuu u tt lll iii n n eeee r rrr oooo ssss eeee rr r o o s s e e r o o ss eeeeee r o o ss e r o o s s e e r oooo ssss eeee Job: outline Date: Sun Sep 17 11:04:58 1995 LPD geeft een paginabegin na deze tekst, zodat de opdracht op een nieuwe pagina begint (tenzij de optie sf (suppress form feeds, onderdruk paginabegin) is toegevoegd bij de desbetreffende printer in /etc/printcap). Als dit wenselijk is, kan LPD ook een korte tekst op het voorblad afdrukken; geef hiervoor de optie sb (short banner, kort voorblad) op in het bestand /etc/printcap. Het voorblad ziet er dan als volgt uit: rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995 Standaard drukt LPD het voorblad als eerste af en vervolgens de opdracht. Om dat om te keren, moet de optie hl (header last, voorblad laatst) in /etc/printcap worden opgeven. Voorbladen administreren Het gebruik van LPD's ingebouwde voorbladen dwingt een bepaald paradigma af wat betreft het administreren van printergebruik: voorbladen moeten gratis zijn. Waarom? Omdat het uitvoerfilter het enige externe programma is dat controle heeft als het voorblad afgedrukt wordt dat het gebruik zou kunnen administreren. Het heeft echter geen beschikking over informatie over gebruiker of host of een administratiebestand. Het heeft dus geen idee wie voor het gebruik moet worden belast. Het volstaat ook niet om gewoon het aantal pagina's met één op te hogen door het tekstfilter of een van de conversiefilters (dat wel beschikt over gebruiker- en hostinformatie) te veranderen, omdat gebruikers het afdrukken van een voorblad kunnen onderdrukken met lpr . Ze worden dan aangeslagen voor voorbladen die niet zijn afgedrukt. Milieubewuste gebruikers gebruiken vast lpr , maar dit kan niet worden afgedwongen. Het is ook niet voldoende om elk filter zijn eigen voorblad te laten genereren (om zo het gebruik te kunnen administreren). Als gebruikers het afdrukken van voorbladen willen onderdrukken met lpr , krijgen ze toch een voorblad en worden er ook voor belast, aangezien LPD geen kennis over de optie doorgeeft aan de filters. Wat zijn dan de mogelijkheden? Accepteer het paradigma van LPD en maak voorbladen gratis; Installeer een alternatief voor LPD, zoals LPRng. In Alternatieven voor het standaard wachtrijsysteem staat meer over andere afdruksoftware die in plaats van LPD geïnstalleerd kan worden; Schrijf een slim uitvoerfilter. Gewoonlijk is een uitvoerfilter bedoeld om niet meer te doen dan het initialiseren van een printer of wat eenvoudige karakterconversie. Het is geschikt voor voorbladen en opdrachten met platte tekst (als er een tekstfilter is). Maar als er een tekstfilter is voor opdrachten met platte tekst, dan start LPD het uitvoerfilter alleen voor voorbladen. Het uitvoerfilter kan dan het voorblad dat LPD genereert analyseren om te bepalen welke gebruiker en host belast moeten worden voor het afdrukken van het voorblad. Het enige probleem is dat het uitvoerfilter nog steeds niet weet in welk bestand het gebruik moet worden bijgehouden (de naam van het bestand opgegeven in de af wordt niet meegegeven), maar als een bekend bestand gebruikt wordt, kan dit in het uitvoerfilter worden opgeven. Om het parsen af te handelen kan gebruik gemaakt worden van de optie sh (short header, kort voorblad) in /etc/printcap. Dit kan echter wat omslachtig zijn en gebruikers waarderen zeker de meer gulle systeembeheerder die voorbladen gratis maakt. Voorbladen op &postscript;-printers Zoals hierboven beschreven, kan LPD een voorblad in platte tekst genereren, dat geschikt is voor de meeste printers. Natuurlijk kan &postscript; platte tekst niet direct afdrukken, zodat de voorbladfunctie van LPD nutteloos is. Een voor de hand liggende manier om voorbladen te krijgen, is elk conversiefilter en tekstfilter zijn eigen voorblad te laten genereren. De filters moeten gebruik maken van de argumenten gebruiker en host om een geschikt voorblad te genereren. Het nadeel van deze methode is dat gebruikers altijd een voorblad krijgen, ook wanneer zij een opdracht geven met lpr . Deze methode wordt nader beschreven. Het volgende script heeft drie argumenten (gebruikersnaam, hostnaam en de naam van de opdracht) en maakt een eenvoudig &postscript;-voorblad: #!/bin/sh # # make-ps-header - genereer een PostScript-voorblad op stdout # Geïnstalleerd in /usr/local/libexec/make-ps-header # # # Dit zijn PostScript-eenheden (72 in een inch). Pas dit aan voor A4 # of het gebruikte formaat: # page_width=612 page_height=792 border=72 # # Controleer argumenten # if [ $# -ne 3 ]; then echo "Usage: `basename $0` <user> <host> <job>" 1>&2 exit 1 fi # # Bewaar deze, voornamelijk voor de leesbaarheid in de &postscript;-code. # user=$1 host=$2 job=$3 date=`date` # # Stuur de &postscript;-code naar stdout. # exec cat <<EOF %!PS % % Vermijd conflicten met de opdracht van de gebruiker die volgt. % save % % Maak een dikke, onaangename border in de marge van het papier. % $border $border moveto $page_width $border 2 mul sub 0 rlineto 0 $page_height $border 2 mul sub rlineto currentscreen 3 -1 roll pop 100 3 1 roll setscreen $border 2 mul $page_width sub 0 rlineto closepath 0.8 setgray 10 setlinewidth stroke 0 setgray % % Toon de gebruikersnaam duidelijk, groot en prominent % /Helvetica-Bold findfont 64 scalefont setfont $page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto ($user) show % % Nu volgen de saaie bijzonderheden % /Helvetica findfont 14 scalefont setfont /y 200 def [ (Job:) (Host:) (Date:) ] { 200 y moveto show /y y 18 sub def } forall /Helvetica-Bold findfont 14 scalefont setfont /y 200 def [ ($job) ($host) ($date) ] { 270 y moveto show /y y 18 sub def } forall % % Dat is alles % restore showpage EOF Nu kan zowel het conversiefilter als het tekstfilter dit script aanroepen om eerst een voorblad te genereren en vervolgens de opdracht van de gebruiker af te drukken. Hier volgt het eerder gebruikte DVI-conversieprogramma, aangepast om een voorblad te maken: #!/bin/sh # # psdf - DVI naar PostScript printfilter # Geïnstalleerd in /usr/local/libexec/psdf # # Aangeroepen door lpd, wanneer de gebruiker lpr -d uitvoert # orig_args="$@" fail() { echo "$@" 1>&2 exit 2 } while getopts "x:y:n:h:" option; do case $option in x|y) ;; # Ignore n) login=$OPTARG ;; h) host=$OPTARG ;; *) echo "LPD started `basename $0` wrong." 1>&2 exit 2 ;; esac done [ "$login" ] || fail "No login name" [ "$host" ] || fail "No host name" ( /usr/local/libexec/make-ps-header $login $host "DVI File" /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args Merk op hoe het filter eerst de argumentenlijst moet nagaan om te bepalen wat de gebruikers- en hostnaam zijn. Dit is gelijk voor de andere conversiefilters. Het tekstfilter heeft echter een andere verzameling argumenten (zie Hoe filters werken). Zoals eerder is beschreven, is het in bovenstaande opzet, hoewel deze simpel is, niet mogelijk voorbladen te onderdrukken (de optie in lpr). Als gebruikers een boom willen sparen (of een paar centen bij betaalde voorbladen) dan is dit dus niet mogelijk, aangezien elk filter een voorblad afdrukt voor iedere opdracht. Om gebruikers in staat te stellen per opdracht voorbladen te onderdrukken, moet gebruik gemaakt worden van de truc uit Voorbladen administreren: schrijf een uitvoerfilter dat het door LPD gegenereerde voorblad inleest en een &postscript;-versie genereert. Als de gebruiker de opdracht geeft met lpr , dan genereert LPD geen voorblad en het uitvoerfilter ook niet. Anders leest het uitvoerfilter de tekst van LPD in en stuurt een geschikt voorblad in &postscript; naar de printer. Voor een &postscript;-printer op een seriële lijn kan gebruik gemaakt worden van lprps, dat met een uitvoerfilter wordt geleverd en het bovenstaande kan doen. Voorbladen worden door psof niet geteld. Afdrukken via het netwerk printers netwerk afdrukken via netwerk &os; ondersteunt afdrukken via het netwerk: het sturen van opdrachten naar printers op afstand. Afdrukken via een netwerk betekent over het algemeen twee verschillende dingen: Het benaderen van een printer aangesloten op een andere computer. Een printer met een conventionele seriële of parallelle verbinding wordt op een bepaalde computer geïnstalleerd. Vervolgens wordt LPD zodanig ingesteld dat afdrukken vanaf andere computers in het netwerk mogelijk is. In Printers geïnstalleerd op andere hosts staat hoe dit te doen. Het benaderen van een printer die direct is aangesloten op een netwerk. Een printer heeft een netwerkinterface naast (of in plaats van) een gewone seriële of parallelle poort. Zo een printer kan als volgt werken: Het begrijpt het LPD protocol en kan zelfs opdrachten van andere hosts in de wachtrij plaatsen. In dit geval werkt een printer als een gewone host die LPD heeft draaien. Volg de procedure in Printers geïnstalleerd op andere hosts om een dergelijke printer te installeren Het kan zijn dat een printer een netwerkverbinding ondersteunt. In dit geval kan een printer worden aangesloten op een bepaalde host op het netwerk door deze host verantwoordelijk te maken voor het plaatsen van opdrachten in een wachtrij en het versturen van opdrachten naar de printer. In Printers met netwerkinterfaces staan enkele suggesties om zulke printers te installeren. Printers geïnstalleerd op andere hosts Het wachtrijsysteem LPD heeft een ingebouwde mogelijkheid om opdrachten naar andere hosts te sturen die ook LPD draaien (of een systeem dat compatibel is met LPD). Deze eigenschap maakt het mogelijk om een printer op een host te installeren en deze toegankelijk te maken voor andere hosts. Het werkt ook met printers die over een netwerkinterface beschikken en het LPD-protocol begrijpen. Om dit soort afdrukken op afstand mogelijk te maken, moet een printer eerst op een host geïnstalleerd worden, de printerhost, door de printerinstallatie te volgen als beschreven in Eenvoudige printerinstallatie. Stel desgewenst de printer in voor geavanceerde taken volgens Geavanceerde printerinstallatie. Test de printer en controleer of deze werkt met eventueel speciaal ingestelde opties voor LPD. De lokale host moet geautoriseerd zijn om de LPD-dienst op de verre host te gebruiken (zie Opdrachten van hosts op afstand beperken). printers netwerk afdrukken via netwerk Als een printer een netwerkinterface heeft die compatibel is met LPD, dan is de printerhost in onderstaande beschrijving de printer zelf en de printernaam is de naam die voor de printer is ingesteld. Meer informatie staat in de documentatie bij de printer en/of de printernetwerkinterface. Bij een HP LaserJet voert de printernaam text automatisch de CRLF-conversie uit. Het is dan niet nodig het script hpif te gebruiken. Op hosts die toegang moeten krijgen tot de printer, moet in /etc/printcap een regel worden toegevoegd met het volgende: Geef de regel een willekeurige naam. Om het eenvoudig te houden kunnen wellicht het beste dezelfde namen en aliassen worden gebruikt als op de printerhost; Laat de optie lp expliciet leeg (:lp=:); Maak een wachtrijmap aan en geef de locatie op met de optie sd. LPD slaat hier afdrukopdrachten op alvorens ze naar de printerhost te sturen; Geef de naam van de printerhost op met de optie rm; Geef de naam van de printer op de printerhost op met de optie rp. Dit is het. Conversiefilters, paginadimensies, enzovoort, hoeven niet in /etc/printcap opgegeven te worden. Hier volgt een voorbeeld. De host rose heeft twee printers: bamboo en rattan. Gebruikers op de host orchid krijgen toegang tot deze printers. Hier volgt /etc/printcap voor orchid (uit Voorbladen afdrukken). Er stond in het bestand al een regel voor de printer teak. Voor de twee printers op de host rose zijn twee regels toegevoegd: # # /etc/printcap voor host orchid - printers (op afstand) op rose toegevoegd # # # teak is lokaal; het is direct aangesloten op orchid: # teak|hp|laserjet|HP LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/ifhp:\ :vf=/usr/local/libexec/vfhp:\ :of=/usr/local/libexec/ofhp: # # rattan is aangesloten op rose; stuur opdrachten voor rattan naar rose: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: # # bamboo is ook aangesloten op rose: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo: Op orchid moeten wachtrijmappen worden aangemaakt: &prompt.root; mkdir /var/spool/lpd/rattan /var/spool/lpd/bamboo &prompt.root; chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo &prompt.root; chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo Nu kunnen gebruikers op orchid afdrukken op rattan en bamboo. Een gebruiker op orchid geeft bijvoorbeeld de volgende invoer: &prompt.user; lpr bamboo sushi-review.dvi Dan kopieert LPD op orchid de opdracht naar de wachtrijmap /var/spool/lpd/bamboo en ziet dat het een DVI-opdracht is. Zodra de host rose ruimte heeft in zijn wachtrijmap bamboo, sturen de twee LPD's het bestand naar rose. Het bestand wacht in de wachtrij van rose totdat het succesvol is afgedrukt. Het wordt geconverteerd naar &postscript; (aangezien bamboo een &postscript;-printer is) op rose. Printers met netwerkinterfaces Netwerkkaarten voor printers zijn er in twee versies: een versie die een wachtrij nabootst (de duurdere versies), of versies die alleen de mogelijkheid geven om er informatie naar te sturen alsof het een seriële of parallelle poort is (de goedkopere versies). In Printers geïnstalleerd op andere hosts wordt het voor de duurdere beschreven. Het formaat van /etc/printcap maakt het mogelijk om op te geven welke seriële, of parallelle poort gebruikt moet worden en (in geval van een seriële poort) de baud-snelheid, of er communicatie moet worden toegepast, vertragingen voor tabs, conversies voor nieuwe regelkarakters en meer. Er is geen mogelijkheid om een verbinding met een printer op te geven die op een TCP/IP of andere netwerkpoort luistert. Om informatie naar een netwerkprinter te sturen, is het nodig een programma te ontwikkelen dat door tekst- en conversiefilters kan worden aangeroepen. Hier volgt een voorbeeld: het script netprint stuurt alle informatie van de standaard invoer naar een netwerkprinter. Als eerste argument wordt de hostnaam van de printer opgegeven en als tweede argument het poortnummer waarmee de verbinding moet worden opgezet. Er wordt alleen eenrichtingcommunicatie ondersteund (&os; naar printer). Veel netwerkprinters ondersteunen tweewegcommunicatie. Het kan wenselijk zijn hiervan gebruik te maken (om printerstatus op te vragen, statistieken bij te houden, enzovoort). #!/usr/bin/perl # # netprint - Tekstfilter voor printer aangesloten op het netwerk # Geïnstalleerd in /usr/local/libexec/netprint # $#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>"; $printer_host = $ARGV[0]; $printer_port = $ARGV[1]; require 'sys/socket.ph'; ($ignore, $ignore, $protocol) = getprotobyname('tcp'); ($ignore, $ignore, $ignore, $ignore, $address) = gethostbyname($printer_host); $sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address); socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol) || die "Can't create TCP/IP stream socket: $!"; connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!"; while (<STDIN>) { print PRINTER; } exit 0; Dit script kan vervolgens in verschillende filters gebruikt worden. Stel dat een Diablo 750-N matrixprinter op het netwerk is aangesloten. Op poort 5100 accepteert de printer informatie om af te drukken. De hostnaam van de printer is scrivener. Hier volgt het tekstfilter voor de printer: #!/bin/sh # # diablo-if-net - Tekstfilter voor Diablo printer 'scrivener' luistert # op poort 5100. Geïnstalleerd in /usr/local/libexec/diablo-if-net # exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100 Printergebruik beperken printers toegang beperken Nu volgt informatie over het beperken van printergebruik. Het LPD-systeem maakt het mogelijk te bepalen wie er toegang heeft tot een printer, zowel lokaal als op afstand, of meerdere kopieën afgedrukt mogen worden, hoe lang opdrachten mogen zijn en hoe lang wachtrijen mogen worden. Meerdere kopieën beperken Het LPD systeem maakt het heel makkelijk voor gebruikers om meerdere afdrukken van een bestand te maken. Gebruikers kunnen opdrachten afdrukken met bijvoorbeeld lpr en krijgen dan vijf kopieën van elk bestand in de opdracht. De systeembeheerder kan beslissen of dit wenselijk is. Wanneer meerdere kopieën onwenselijk zijn, kan de optie van &man.lpr.1; worden uitgeschakeld door de optie sc in /etc/printcap op te nemen. Als gebruikers opdrachten versturen met de optie , zien ze het volgende: lpr: multiple copies are not allowed Als het mogelijk is van andere hosts af te drukken (zie Printers geïnstalleerd op andere hosts), moet de optie sc ook in /etc/printcap van de andere hosts aanwezig zijn. Anders kunnen gebruikers nog steeds multi-kopie opdrachten van andere hosts sturen. Hier volgt een voorbeeld. Hieronder staat /etc/printcap voor de host rose. De printer rattan is redelijk krachtig, dus meerdere kopieën zijn toegestaan. De laserprinter bamboo is wat gevoeliger, dus meerdere kopieë zijn uitgeschakeld door de optie sc toe te voegen: # # /etc/printcap voor host rose - beperk meerdere kopieën op bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:\ :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: Nu moet ook de optie sc worden toegevoegd in /etc/printcap van host orchid (tegelijk worden meerdere kopieën voor de printer teak uitgeschakeld): # # /etc/printcap voor host orchid - geen meerdere kopieën voor lokale # printer teak of printer op afstand bamboo teak|hp|laserjet|HP LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\ :if=/usr/local/libexec/ifhp:\ :vf=/usr/local/libexec/vfhp:\ :of=/usr/local/libexec/ofhp: rattan|line|diablo|lp|Diablo 630 Line Printer:\ :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc: Door de optie sc te gebruiken, wordt het gebruik van lpr voorkomen, maar dat weerhoudt gebruikers er nog steeds niet van om &man.lpr.1; meerdere keren te aanroepen of meerdere keren hetzelfde bestand te versturen in een opdracht: &prompt.user; lpr voorverkoop.teken voorverkoop.teken voorverkoop.teken voorverkoop.teken voorverkoop.teken Er zijn vele manieren om dit misbruik te voorkomen (onder andere door het te negeren), welke vrij zijn om te verkennen. Printertoegang beperken Door gebruik te maken van het &unix; groepmechanisme en de optie rg in /etc/printcap kan geregeld worden wie er op welke printer kan afdrukken. De gebruikers die toegang hebben tot een printer moeten in een groep worden geplaatst en deze groep moet in de optie rg worden genoemd. Als gebruikers buiten de groep (inclusief root) naar de beheerde printer proberen te printen, worden ze begroet met het volgende bericht: lpr: Not a member of the restricted group Net als met de optie sc (suppress multiple copies: onderdruk meerdere kopieën) moet rg, indien wenselijk, ook op andere hosts worden opgegeven die ook toegang hebben tot printers (zie Printers geïnstalleerd op andere hosts). In het volgende voorbeeld heeft iedereen toegang tot de printer rattan, maar alleen gebruikers in de groep artists kunnen gebruik maken van bamboo. Hier volgt het bekende /etc/printcap voor de host rose: # # /etc/printcap voor host rose - beperkte toegang voor groep bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\ :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: De andere voorbeeldbestanden /etc/printcap (voor de host orchid) worden niet aangepast. Natuurlijk kan iedereen op orchid afdrukken op bamboo. Het kan zijn dat er sowieso alleen bepaalde gebruikers op orchid zijn toegestaan en dat deze gebruikers toegang mogen hebben tot de printer. Of wellicht niet. Er kan per printer slechts één groep worden opgegeven. Grootte van afdrukopdrachten bepalen afdrukopdrachten Als veel gebruikers toegang hebben tot printers kan het nodig zijn een limiet op te geven voor de grootte van de bestanden die gebruikers naar een printer kunnen sturen. Er is immers slechts beperkte ruimte op het bestandssysteem en er moet ook voldoende ruimte zijn voor opdrachten van andere gebruikers. afdrukopdrachten beheren LPD heeft de mogelijkheid om met de optie mx een limiet op te geven voor het maximum aantal bytes van een bestand in een afdrukopdracht. De eenheden worden opgegeven in BUFSIZ blokken, die 1024 bytes groot zijn. Een nul voor deze optie betekent geen limiet aan de bestandsgrootte. Als de optie wordt weggelaten, wordt een standaardlimiet van 1000 blokken gebruikt. De limiet heeft betrekking op de bestanden in een opdracht, niet op de totale grootte van een opdracht. LPD weigert een bestand dat groter is dan de opgegeven limiet niet. In plaats daarvan plaatst het zo veel mogelijk van het bestand op de wachtrij, om dit vervolgens af te drukken. De rest wordt genegeerd. Of dit gedrag wenselijk is, is onderwerp van debat. Nu worden limieten voor de voorbeeldprinters rattan en bamboo opgegeven. Aangezien de &postscript;-bestanden van die artists nogal groot kunnen worden, krijgen ze een limiet van vijf megabyte opgelegd. Er wordt geen limiet opgelegd voor de platte tekst printer: # # /etc/printcap voor host rose # # # Geen limiet op opdrachtgrootte: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:mx#0:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: # # Limiet van vijf megabyte: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: Ook hier zijn de limieten alleen van toepassing op lokale gebruikers. Als toegang tot deze printers van andere hosts mogelijk is, worden deze gebruikers niet beperkt. Het is daarom nodig de optie mx ook in de /etc/printcap van de betreffende hosts op te geven. In Printers geïnstalleerd op andere hosts staat meer informatie over afdrukken op andere hosts. Er is een andere gespecialiseerde manier om opdrachtgrootte voor printers op afstand te beperken (zie Opdrachten van hosts op afstand beperken. Opdrachten van hosts op afstand beperken Het wachtrijsysteem LPD beschikt over verschillende methoden om afdrukopdrachten van hosts op afstand te beperken: Hostbeperkingen Met de bestanden /etc/hosts.equiv en /etc/hosts.lpd kan worden ingesteld van welke hosts op afstand een lokale LPD-opdracht wordt geaccepteerd. LPD controleert of een inkomend verzoek afkomstig is van een host die wordt genoemd in een van deze bestanden. Zo niet, dan weigert LPD het verzoek. Het formaat van deze bestanden is eenvoudig: één host per regel. /etc/hosts.equiv wordt ook gebruikt door het protocol &man.ruserok.3; en heeft invloed op programma's als &man.rsh.1; en &man.rcp.1;. Voorzichtigheid is dus geboden. Als voorbeeld volgt hier /etc/hosts.lpd voor de host rose: orchid violet madrigal.fishbaum.de Dit betekent dat rose verzoeken accepteert van de hosts orchid, violet en madrigal.fishbaum.de. Voor iedere andere host die verbinding probeert te maken met LPD op rose, wordt de opdracht geweigerd. Omvangbeperkingen De hoeveelheid vrije ruimte die over moet blijven op een bestandssysteem waar een wachtrij zich bevindt kan ook worden ingesteld. Hiervoor moet een bestand met de naam minfree in de wachtrijmap worden aangemaakt. In dit bestand kan een getal worden gezet dat het aantal schijfblokken (512 bytes) aan vrije ruimte aangeeft dat beschikbaar moet blijven wil een opdracht worden geaccepteerd. Hiermee kan worden gegarandeerd dat gebruikers op afstand een bestandssysteem niet vol kunnen schrijven. Ook kan hierdoor een soort voorrang worden gegeven aan lokale gebruikers: zij kunnen nog opdrachten plaatsen als de vrije schijfruimte al lang beneden de opgegeven limiet uit minfree is gekomen. Als voorbeeld wordt een bestand minfree voor de printer bamboo toegevoegd. In /etc/printcap staat de juiste wachtrijmap: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: De wachtrijmap wordt opgegeven met de optie sd. Er wordt een limiet van drie megabyte ingesteld (wat gelijk staat aan 6144 schijfblokken) voor de hoeveelheid vrije schijfruimte die op het bestandssysteem beschikbaar moet zijn voordat LPD een opdracht op afstand accepteert: &prompt.root; echo 6144 > /var/spool/lpd/bamboo/minfree Gebruikersbeperkingen Met de optie rs in /etc/printcap kan worden geregeld welke gebruikers op afstand kunnen afdrukken op lokale printers. Als rs voorkomt voor een lokale printer accepteert LPD opdrachten van hosts op afstand als de gebruiker die de opdracht wil plaatsen ook een account heeft met dezelfde gebruikersnaam op de lokale host. Anders weigert LPD de opdracht. Deze optie is met name nuttig in een omgeving waar (bijvoorbeeld) verschillende afdelingen een netwerk delen en gebruikers de grenzen van de afdeling overschrijden. Door ze een account te geven op een systeem kunnen ze de aangesloten printers gebruiken vanaf het systeem van hun eigen afdeling. Wanneer ze alleen gebruik mogen maken van de printers en niet van overige diensten op de computer, kunnen tokenaccounts worden aangemaakt, zonder thuismap en met een nutteloze shell als /usr/bin/false. Printergebruik administreren administratie printer Het kan nodig zijn om afdrukken te doorbelasten. Inkt en papier kosten geld en er zijn onderhoudskosten. Printers zitten vol met bewegende delen en hebben de neiging kapot te gaan. Nu is er gekeken naar de printers, het gebruikerspatroon en de onderhoudskosten en op basis hiervan is een prijs vastgesteld per pagina (of per centimeter, per meter, of per wat dan ook). Hoe wordt nu een administratie bijgehouden van gemaakte afdrukken? Het slechte nieuws is dat het wachtrijsysteem LPD hierbij niet echt helpt. Het administreren van afdrukken is erg afhankelijk van het type printer, het afdrukformaat en de wensen die een systeembeheerder heeft ten aanzien van het doorbelasten van printergebruik. Om het administreren te implementeren, is het nodig om aanpassingen te maken in de tekstfilter (om platte tekst opdrachten te belasten) en de conversiefilters (om opdrachten in andere bestandsformaten te belasten), om pagina's te tellen, of de printer te vragen hoeveel pagina's er zijn afgedrukt. Het volstaat niet om het eenvoudige uitvoerfilter te gebruiken, aangezien dit niet in staat is het gebruik te administreren. Zie Filters. In het algemeen zijn er twee manieren om gebruik te administreren: Periodiek administreren is de meer gebruikelijke manier, omdat het waarschijnlijk makkelijker is. Als iemand een opdracht afdrukt, schrijft het filter de gebruiker, host en het aantal pagina's in een administratiebestand. Elke maand, semester, jaar, of een andere gewenste periode kunnen de administratiebestanden verzameld worden om het aantal afgedrukte pagina's op te tellen en het gebruik in rekening te brengen. De logboekbestanden kunnen vervolgens geschoond worden, zodat met een schone lei de volgende periode begonnen kan worden. Directe administratie is minder gebruikelijk, waarschijnlijk omdat het moeilijker is. Met deze methode zorgen de filters ervoor dat gebruikers voor hun printergebruik worden afgerekend op het moment dat ze er gebruik van maken. Net als schijfquota is de administratie onmiddellijk. Hiermee wordt voorkomen dat gebruikers kunnen afdrukken wanneer ze over hun limiet zijn gegaan. Ook biedt dit de mogelijkheid voor gebruikers om hun afdrukquotum te controleren, of aan te passen. Deze methode vereist databasecode om gebruikers en hun quota bij te houden. Het wachtrijsysteem LPD ondersteunt beide methoden op eenvoudige wijze. Aangezien de filters (meestal) moeten worden aangeleverd, moet ook de code voor de administratie worden geleverd. Er is echter een voordeel: er is grote flexibiliteit in de administratiemethode. Zo kan bijvoorbeeld gekozen worden tussen periodieke of directe administratie. Er kan gekozen worden welke informatie opgeslagen wordt: gebruikersnamen, hostnamen, type opdracht, aantal afgedrukte pagina's, hoe lang het afdrukken duurde, enzovoort. Dit alles kan worden gedaan door de filters aan te passen. Kort door de bocht printeradministratie &os; wordt met twee programma's geleverd waarmee periodieke administratie direct kan worden opgezet. Het zijn het tekstfilter lpf, beschreven in lpf: een tekstfilter en &man.pac.8;, een programma dat posten uit administratiebestanden verzamelt en optelt. Zoals beschreven in de sectie over filters (Filters), roept LPD de tekst- en conversiefilters aan met de naam van het administratiebestand als argument. De filters kunnen dit argument gebruiken om te bepalen in welk bestand de gegevens voor de administratie moeten worden weggeschreven. De naam van dit bestand is afkomstig van de optie af uit /etc/printcap. Als er geen absoluut pad wordt opgegeven, dan is de locatie relatief aan de wachtrijmap. LPD start lpf met paginabreedte en -lengte argumenten (afkomstig uit de opties pw en pl). Het filter lpf gebruikt deze argumenten om te bepalen hoeveel papier er gebruikt zal worden. Nadat het bestand naar de printer is gestuurd, schrijft het een post in het administratiebestand. De posten zien er als volgt uit: 2.00 rose:andy 3.00 rose:kelly 3.00 orchid:mary 5.00 orchid:mary 2.00 orchid:zhang Aangezien lpf geen ingebouwde logica voor bestandslocking kent, moet voor elke printer een apart administratiebestand gebruikt worden. Twee lpfs kunnen elkaars posten corrumperen als ze tegelijk in hetzelfde bestand schrijven. De optie af=acct in /etc/printcap biedt een makkelijke manier om er zeker van te zijn dat aparte bestanden worden gebruikt. Dan bevindt elk administratiebestand zich in de wachtrijmap van de betreffende printer en krijgt de naam acct krijgen Wanneer het tijd is om met gebruikers af te rekenen voor hun afdrukken, kan het programma &man.pac.8; gedraaid worden. Ga naar de wachtrijmap van de printer waarvoor betaald moet worden en typ pac. Er verschijnt een dollar-centrische samenvatting zoals het volgende: Login pages/feet runs price orchid:kelly 5.00 1 $ 0.10 orchid:mary 31.00 3 $ 0.62 orchid:zhang 9.00 1 $ 0.18 rose:andy 2.00 1 $ 0.04 rose:kelly 177.00 104 $ 3.54 rose:mary 87.00 32 $ 1.74 rose:root 26.00 12 $ 0.52 total 337.00 154 $ 6.74 Dit zijn de argumenten die &man.pac.8; verwacht: De printer waarvoor een samenvatting moet worden gegenereerd. Deze optie werkt alleen als er een absoluut pad is gegeven in de optie af in /etc/printcap. Sorteer de uitvoer op kosten, in plaats van alfabetisch op gebruikersnaam. Negeer de hostnamen in het administratiebestand. Met deze optie is de gebruiker smith op host alpha dezelfde gebruiker als smith op host gamma. Zonder deze optie zijn het verschillende gebruikers. Bereken de prijs met prijs dollar per pagina of per voet, in plaats van de prijs uit de optie pc in /etc/printcap of twee cent (de standaard). De prijs kan worden opgegeven als een decimaal getal. Keer de sorteervolgorde om. Maak een bestand met een samenvatting van de administratie en leeg het administratiebestand. namen Druk de administratiegegevens alleen af voor gebruikersnamen namen. In de standaard samenvatting die &man.pac.8; genereert, is het aantal pagina's te zien dat iedere gebruiker vanaf een bepaalde host heeft afgedrukt. Wanneer de hostnaam niet van belang is (bijvoorbeeld omdat gebruikers iedere host kunnen gebruiken), gebruik dan pac om de volgende samenvatting te genereren: Login pages/feet runs price andy 2.00 1 $ 0.04 kelly 182.00 105 $ 3.64 mary 118.00 35 $ 2.36 root 26.00 12 $ 0.52 zhang 9.00 1 $ 0.18 total 337.00 154 $ 6.74 Om het verschuldigde bedrag te berekenen gebruikt &man.pac.8; de optie pc uit /etc/printcap (standaard aantal van 200 of 2 cent per pagina). Specificeer, in honderden centen, de prijs per pagina of per voet die berekent moet worden. Deze waarde kan worden aangepast door &man.pac.8; aan te roepen met de optie . De eenheden van de optie zijn echter in dollars, niet in honderden centen. Bijvoorbeeld, &prompt.root; pac zorgt ervoor dat elke pagina 1,50 dollar kost. U kunt echt grote winsten maken met deze optie. Tenslotte kan met pac de samenvatting worden opgeslagen in een bestand dat dezelfde naam krijgt als het administratiebestand van de printer, maar dan met _sum toegevoegd aan de naam. Vervolgens wordt het administratiebestand geleegd. Als &man.pac.8; opnieuw wordt aangeroepen, herleest &man.pac.8; het samenvattingsbestand om de startwaarden te bepalen en telt daar de informatie bij op van het standaard administratiebestand. Hoe kan het aantal afgedrukte pagina's worden geteld? Om ook maar de minste nauwkeurigheid bij het administreren te verkrijgen, is het nodig te weten hoeveel papier een afdrukopdracht gebruikt. Dit is het centrale probleem van het bijhouden van printerstatistieken. Voor opdrachten met platte tekst is het probleem niet zo moeilijk op te lossen: het aantal regels in een opdracht wordt geteld en vergeleken met het aantal regels per pagina dat door een printer wordt ondersteund. Hierbij moet niet worden vergeten dat backspaces in het bestand regels overschrijven en dat lange logische regels worden afgedrukt als meerdere fysieke regels. Het tekstfilter lpf (geïntroduceerd in lpf: een tekstfilter) houdt met deze zaken rekening bij het administreren. Als het nodig is een tekstfilter te schrijven dat ook het printergebruik moet bijhouden, dan is het nuttig de broncode van lpf te bestuderen. Hoe worden andere bestandsformaten dan verwerkt? Voor een DVI-naar-LaserJet, of DVI-naar-&postscript; conversie kan het filter de diagnostische uitvoer van dvilj of dvips bekijken om te bepalen hoeveel pagina's er zijn geconverteerd. Voor andere formaten kan hetzelfde worden gedaan met behulp van de betreffende conversieprogramma's. Deze methoden hebben echter als nadeel dat een printer eventueel niet alle pagina's ook daadwerkelijk afdrukt. Zo kan het papier vast komen te zitten, de toner opraken of de printer ontploffen, terwijl de gebruiker toch moet betalen. Dus, wat kan hieraan worden gedaan? Er is slechts één betrouwbare manier om nauwkeurig te administreren. Dat is met behulp van een printer die kan vertellen hoeveel papier er is gebruikt. Deze moet vervolgens worden aangesloten met een seriële lijn, of een netwerkverbinding. Bijna alle &postscript;-printers hebben deze mogelijkheid, andere modellen en merken mogelijk ook (bijvoorbeeld Imagen netwerklaserprinters). De filters dienen voor deze printers aangepast te worden om het papierverbruik na elke opdracht te achterhalen en de administratieve informatie alleen op deze waarde te baseren. Er is geen noodzaak om foutgevoelig regels te tellen of bestanden te analyseren. Natuurlijk kan een beheerder ook vrijgevig zijn en alle afdrukken gratis maken. Printers gebruiken printers gebruik Hieronder wordt beschreven hoe printers die onder &os; geïnstalleerd zijn gebruikt moeten worden. Nu volgt een overzicht van de commando's op gebruikersniveau: &man.lpr.1; Druk opdrachten af &man.lpq.1; Controleer printerwachtrijen &man.lprm.1; Verwijder opdrachten uit de wachtrij van een printer Er is ook een administratief commando, &man.lpc.8;, beschreven in Printers beheren, dat gebruikt wordt om printers en hun wachtrijen in te stellen. Alledrie de commando's &man.lpr.1;, &man.lprm.1; en &man.lpq.1; accepteren een optie om aan te geven op welke printer uit /etc/printcap een opdracht van toepassing is. Dit biedt de mogelijkheid opdrachten te versturen, verwijderen en controleren voor verschillende printers. Als niet wordt gebruikt, werken deze commando's op de printer gedefinieerd in de omgevingsvariabele PRINTER. Tot slot, wanneer de omgevingsvariabele PRINTER niet is gedefinieerd, wordt standaard verwezen naar de printer met de naam lp. Opdrachten afdrukken Om bestanden af te drukken: &prompt.user; lpr bestandsnaam ... afdrukken Dit drukt elk van de opgegeven bestanden af op de standaard printer. Als geen bestanden worden opgegeven, drukt &man.lpr.1; de standaard invoer af. De volgende opdracht drukt bijvoorbeeld een paar belangrijke systeembestanden af: &prompt.user; lpr /etc/host.conf /etc/hosts.equiv Om een specifieke printer te selecteren: &prompt.user; lpr printernaam bestandsnaam ... Dit voorbeeld drukt een lange opgave van de huidige map af op de printer rattan: &prompt.user; ls | lpr rattan Omdat er geen bestanden worden meegegeven aan het commando &man.lpr.1;, drukt lpr de gegevens af die het van de standaard invoer leest: de uitvoer van het commando ls . &man.lpr.1; accepteert ook een breed scala aan opties om de vorm aan te passen, bestandsconversies toe te passen, meerdere kopieën af te drukken, enzovoort. Meer informatie staat in Afdrukopties. Opdrachten controleren afdrukopdrachten Als &man.lpr.1; wordt gebruikt om af te drukken, dan worden de gegevens die afdrukt moet worden in een pakketje samengevoegd dat een afdrukopdracht wordt genoemd en naar het wachtrijsysteem LPD gestuurd. Elke printer heeft een wachtrij met opdrachten van alle gebruikers. Een printer drukt deze opdrachten op volgorde van binnenkomst af. De wachtrij voor de standaardprinter kan worden weergegeven met &man.lpq.1;. Voor een specifieke printer moet de optie meegegeven worden. Het volgende commando toont de wachtrij van printer bamboo: &prompt.user; lpq bamboo Hieronder volgt een voorbeeld van de uitvoer van het commando lpq: bamboo is ready and printing Rank Owner Job Files Total Size active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes 2nd kelly 10 (standard input) 1635 bytes 3rd mary 11 ... 78519 bytes Dit laat drie opdrachten zien in de wachtrij voor bamboo. De eerste opdracht, gegeven door gebruiker kelly, heeft opdrachtnummer 9 gekregen. Elke opdracht voor een printer krijgt een uniek opdrachtnummer. Dit nummer kan in de meeste gevallen genegeerd worden, maar is nodig om een opdracht te annuleren. In Opdrachten verwijderen staan meer details. Opdrachtnummer negen bestaat uit twee bestanden; meerdere bestanden opgegeven naar &man.lpr.1;, worden als één enkele opdracht behandeld. Het is de actieve opdracht (active onder de kolom Rank), wat betekent dat de printer deze opdracht momenteel aan het afdrukken is. De tweede opdracht bestaat uit gegevens doorgegeven aan &man.lpr.1; als standaard invoer. De derde opdracht is afkomstig van gebruiker mary. Het is een veel grotere opdracht. De bestandsnaam van het bestand dat ze probeert af te drukken is te lang voor het overzicht, daarom toont &man.lpq.1; drie puntjes. De allereerste regel uitvoer van &man.lpq.1; is ook handig: die vertelt wat de printer momenteel aan het doen is; dat wil zeggen, wat LPD denkt dat de printer aan het doen is. Het commando &man.lpq.1; ondersteunt ook een optie om een gedetailleerd, lang overzicht te geven. Hieronder volgt voorbeelduitvoer van lpq : waiting for bamboo to become ready (offline ?) kelly: 1st [job 009rose] /etc/host.conf 73 bytes /etc/hosts.equiv 15 bytes kelly: 2nd [job 010rose] (standard input) 1635 bytes mary: 3rd [job 011rose] /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes Opdrachten verwijderen Een gebruiker die van gedachten verandert over een af te drukken opdracht, kan een opdracht uit een wachtrij halen met het commando &man.lprm.1;. Vaak kan met &man.lprm.1; zelfs een actieve opdracht worden verwijderd, maar een deel of alles van de opdracht kan desondanks toch worden afgedrukt. Om een opdracht van de standaardprinter te verwijderen dient eerst met &man.lpq.1; het opdrachtnummer gevonden te worden. Typ vervolgens: &prompt.user; lprm opdrachtnummer Om een opdracht van een specifieke printer te verwijderen, moet de optie worden toegevoegd. Het volgende commando verwijdert opdrachtnummer 10 uit de wachtrij van printer bamboo: &prompt.user; lprm bamboo 10 Het commando &man.lprm.1; heeft een aantal snelkoppelingen: lprm - Verwijder alle opdrachten (voor de standaardprinter) van de huidige gebruiker. lprm gebruiker Verwijder alle opdrachten (voor de standaardprinter) die van gebruiker zijn. De supergebruiker kan opdrachten van andere gebruikers verwijderen. Andere gebruikers kunnen alleen hun eigen opdrachten verwijderen. lprm Zonder een opdrachtnummer, gebruikersnaam of op de opdrachtregel, verwijdert &man.lprm.1; de huidige actieve opdracht van de huidige gebruiker op de standaard printer. Alleen de supergebruiker kan iedere actieve opdracht verwijderen. Gebruik de optie met bovenstaande snelkoppelingen om een specifieke printer in plaats van de standaard printer te selecteren. Het volgende voorbeeld verwijdert alle opdrachten van de huidige gebruiker uit de wachtrij van printer rattan: &prompt.user; lprm rattan - Als in een netwerkomgeving wordt gewerkt, staat &man.lprm.1; alleen toe opdrachten te verwijderen vanaf hosts waarvan de afdrukopdrachten zijn gegeven, ook als dezelfde printer vanaf andere hosts bereikbaar is. Het volgende voorbeeld demonstreert dit: &prompt.user; lpr rattan mijnbestand &prompt.user; rlogin orchid &prompt.user; lpq rattan Rank Owner Job Files Total Size active seeyan 12 ... 49123 bytes 2nd kelly 13 myfile 12 bytes &prompt.user; lprm rattan 13 rose: Permission denied &prompt.user; logout &prompt.user; lprm rattan 13 dfA013rose dequeued cfA013rose dequeued Meer dan platte tekst: afdrukopties Het commando &man.lpr.1; ondersteunt een aantal opties voor de opmaak van platte tekst, het converteren van grafische en andere bestandsformaten, het afdrukken van meerdere kopieën, afwikkeling van een opdracht en meer. In deze sectie worden die opties beschreven. Opties voor opmaak en conversie De volgende opties voor &man.lpr.1; zorgen voor de opmaak van de bestanden in de opdracht. Gebruik deze opties als de opdracht geen platte tekst bevat of als platte tekst opgemaakt dient te worden met behulp van &man.pr.1;. &tex; Het volgende commando drukt bijvoorbeeld een DVI-bestand af (van het &tex; typesettingsysteem) met de naam visrapport.dvi op de printer bamboo: &prompt.user; lpr bamboo -d visrapport.dvi Deze opties zijn van toepassing op alle bestanden in de opdracht. Het is dus niet mogelijk om bijvoorbeeld DVI- en ditroff-bestanden in een opdracht samen te voegen. In plaats hiervan moeten deze bestanden als aparte opdrachten worden gegeven, elk met een andere conversie-optie. Al deze opties, behalve en , vereisen dat er conversiefilters zijn geïnstalleerd voor een printer. De optie vereist bijvoorbeeld het DVI-conversiefilter. In Conversiefilters staan de details beschreven. Afdrukken van cifplot-bestanden. Afdrukken van DVI-bestanden. Afdrukken van FORTRAN tekstbestanden. Afdrukken van plotgegevens. De uitvoer wordt aantal kolommen ingesprongen. Als nummer wordt weggelaten, wordt acht kolommen ingesprongen. Deze optie werkt alleen met bepaalde conversiefilters. Plaats geen spatie tussen de en het nummer. Drukt letterlijke tekstgegevens af, inclusief controlekarakters. Afdrukken van ditroff (apparaatonafhankelijke troff) gegevens. -p Opmaak van platte tekst met &man.pr.1; alvorens af te drukken. Zie &man.pr.1; voor meer informatie. Gebruik titel op de &man.pr.1; koptekst in plaats van de bestandsnaam. Deze optie heeft alleen effect in combinatie met de optie . Afdrukken van troffgegevens. Afdrukken van rastergegevens. In het volgende voorbeeld wordt een mooi opgemaakte versie van de handleiding &man.ls.1; afgedrukt op de standaardprinter: &prompt.user; zcat /usr/share/man/man1/ls.1.gz | troff -man | lpr Het commando &man.zcat.1; pakt de broncode van de &man.ls.1; handleiding uit en geeft het door aan het commando &man.troff.1;, dat de broncode opmaakt, er GNU troff van maakt en dit doorstuurt naar &man.lpr.1;, dat de opdracht naar de LPD wachtrij stuurt. Omdat de optie meegeven wordt aan &man.lpr.1;, converteert het wachtrijsysteem de GNU troff uitvoer naar een formaat dat de standaardprinter begrijpt als de opdracht wordt afgedrukt. Opties voor opdrachtafhandeling De volgende opties voor &man.lpr.1; geven LPD aan de opdracht speciaal te behandelen: -# kopieën Produceer een aantal van kopieën kopieën van elk bestand in de opdracht, in plaats van één kopie. Een beheerder kan deze optie uitschakelen om slijtage van de printer te voorkomen en gebruik van een kopieerapparaat aan te moedigen. Zie Meerdere kopieën beperken. Dit voorbeeld drukt drie kopieën af van parser.c gevolgd door drie kopieën van parser.h op de standaardprinter: &prompt.user; lpr parser.c parser.h -m Stuur een email na voltooiing van de afdrukopdracht. Met deze optie stuurt het LPD-systeem een email als een opdracht is afgehandeld. In dit bericht vertelt het of de opdracht succesvol is uitgevoerd of dat er een fout was met (vaak) de aard van de fout. -s Kopieer de bestanden niet naar de wachtrijmap, maar maak in plaats hiervan een symbolische link. Bij het afdrukken van een grote opdracht is het handig van deze optie gebruik te maken. Het spaart ruimte in de wachtrijmap (het kan zijn dat de opdracht de vrije ruimte verbruikt in het bestandssysteem waarin de wachtrijmap zich bevindt). Het bespaart ook tijd, omdat LPD niet elke byte van de opdracht naar de wachtrijmap hoeft te kopieëren. Er is echter een nadeel: aangezien LPD het originele bestand nodig heeft, is het niet mogelijk dit te wijzigen, of te verwijderen totdat het is afgedrukt. Bij het afdrukken op een printer in een netwerk, moet LPD een bestand uiteindelijk toch kopieëren van een lokale host naar een netwerkhost. De optie bespaart dus ruimte in een lokale wachtrijmap, niet in die van een host in een netwerk. Het blijft echter nuttig. -r Verwijder bestanden in een opdracht na ze naar een wachtrij gekopieerd te hebben of na ze te hebben afgedrukt als de optie is gebruikt. Wees voorzichtig met deze optie! Voorbladopties Deze opties voor &man.lpr.1; passen de tekst aan die gewoonlijk op het voorblad van een opdracht verschijnt. Deze opties hebben geen effect als het afdrukken van voorbladen wordt onderdrukt op een gebruikte printer. Zie Voorbladen voor meer informatie over het opzetten van voorbladen. -C tekst Vervang de hostnaam op het voorblad door tekst. De hostnaam is gewoonlijk de naam van de host waarvan de opdracht is verstuurd. -J tekst Vervang de naam van de opdracht op het voorblad door tekst. De naam van de opdracht is standaard de naam van het eerste bestand in de opdracht of stdin als de standaard uitvoer wordt afgedrukt. -h Druk geen voorblad af. Bij sommige installaties kan het zijn dat deze optie geen effect heeft door de manier waarop de voorbladen worden gegenereerd. Zie Voorbladen voor de details. Printers beheren De beheerder van de printers in een netwerk heeft deze moeten installeren, opzetten en testen. Met het commando &man.lpc.8; kan een beheerder op nog meer manieren communiceren met printers. Met &man.lpc.8; is het mogelijk om: Printers te starten en te stoppen; Wachtrijen aan en uit te zetten; De volgorde van opdrachten in elke wachtrij aan te passen. Ten eerste een opmerking over terminologie: als een printer is gestopt, drukt die niets uit een wachtrij af. Gebruikers kunnen nog steeds opdrachten geven, maar opdrachten wachten in een wachtrij totdat de bijbehorende printer is gestart of als de wachtrij vrij is. Als een wachtrij is uitgeschakeld, kan geen enkele gebruiker (behalve root) opdrachten naar een printer versturen. Een ingeschakelde wachtrij accepteert opdrachten. Een printer met een uitgeschakelde wachtrij kan worden gestart en drukt dan alle afdrukopdrachten in de wachtrij af tot deze leeg is. In het algemeen is het nodig root-rechten te hebben om het commando &man.lpc.8; te gebruiken. Gewone gebruikers kunnen het commando &man.lpc.8; gebruiken om een printerstatus op te vragen en om een vastgelopen printer te herstarten. Nu volgt een samenvatting van de &man.lpc.8; commando's. De meeste commando's accepteren een argument printernaam, om aan te geven op welke printer te werken. Om op alle printers te werken die in /etc/printcap genoemd worden, kan all worden gebruikt als printernaam. abort printernaam Annuleer de huidige opdracht en stop de printer. Gebruikers kunnen nog steeds opdrachten versturen als de wachtrij is ingeschakeld. clean printernaam Verwijder oude bestanden uit de wachtrijmap van de betreffende printer. Het kan wel eens gebeuren dat de bestanden waaruit een opdracht bestaat niet juist worden verwijderd door LPD. Dit gebeurt bijvoorbeeld wanneer er fouten zijn opgetreden tijdens het afdrukken of tijdens grote administratieve activiteit. Dit commando vindt en verwijdert bestanden die niet in de wachtrijmap thuishoren. disable printernaam Nieuwe opdrachten kunnen niet meer in de wachtrij worden geplaatst. Als de printer nog draait, drukt die de opdrachten die zich nog in de wachtrij bevinden af. De supergebruiker (root) kan altijd opdrachten versturen, ook naar een uitgeschakelde wachtrij. Dit commando is handig bij het testen van een nieuwe printer of een filterinstallatie: schakel de wachtrij uit en verstuur als root opdrachten. Andere gebruikers kunnen geen opdrachten versturen totdat het testen is voltooid en de wachtrij weer is ingeschakeld met het commando enable. down printernaam boodschap Schakel een printer uit. Equivalent aan disable gevolgd door stop. De boodschap verschijnt als de status van de printer als een gebruiker de wachtrij van de printer controleert met &man.lpq.1; of de status met lpc status. enable printernaam Schakel de wachtrij van een printer in. Gebruikers kunnen opdrachten versturen, maar de printer drukt ze pas af als deze is gestart. help commandonaam Geef hulp over het commando commandonaam. Zonder commandonaam, wordt een samenvatting van de beschikbare commando's getoond. restart printernaam Start de printer. Gewone gebruikers kunnen dit commando gebruiken als door een uitzonderlijke omstandigheid LPD hangt, maar ze kunnen een printer niet starten die gestopt is met een van de commando's stop of down. Het commando restart is equivalent aan abort gevolgd door start. start printernaam Start de printer. De printer drukt opdrachten in zijn wachtrij af. stop printernaam Stop de printer. De printer maakt de huidige opdracht af en drukt opdrachten in de wachtrij niet af. Gebruikers kunnen nog steeds opdrachten versturen naar een ingeschakelde wachtrij, ook al is de printer gestopt. topq printernaam opdracht-of-gebruikersnaam Herschik de wachtrij voor printernaam door de opdrachten met de opgegeven opdracht nummers of opdrachten van gebruikersnaam bovenaan de wachtrij te plaatsen. Voor dit commando is het niet mogelijk all te gebruiken als printernaam. up printernaam Schakel een printer in. Het omgekeerde van het commando down. Equivalent aan start gevolgd door enable. &man.lpc.8; accepteert bovenstaande commando's op de opdrachtregel. Als er geen commando's worden gegeven, schakelt &man.lpc.8; over op een interactieve modus, waar opdrachten gegeven kunnen worden totdat het commando exit, quit of einde-van-bestand wordt gegeven. Alternatieven voor het standaard wachtrijsysteem Na het lezen van deze handleiding, heeft de lezer zo'n beetje alles gelezen wat er te leren valt over het wachtrijsysteem LPD zoals het te vinden is in &os;. Er zijn veel tekortkomingen te onderkennen, wat vanzelf leidt tot de vraag: Welke andere wachtrijsystemen zijn er beschikbaar (en werken onder &os;)? LPRng LPRng LPRng, dat LPR: the Next Generation betekent, is een compleet herschreven PLP. Patrick Powell en Justin Mason (de voornaamste beheerder van PLP) hebben samengewerkt om LPRng te maken. De thuispagina voor LPRng is . CUPS CUPS CUPS, het Common UNIX Printing System, voorziet in een overzetbare printlaag voor &unix;-achtige besturingssystemen. Het is ontwikkeld door Easy Software Product, om een standaard afdrukoplossing voor alle &unix;-producenten en gebruikers te promoten. CUPS gebruikt het Internet Printing Protocol (IPP) als basis voor het beheren van afdrukopdrachten en wachtrijen. De protocollen Line Printer Daemon (LPD), Server Message Block (SMB) en AppSocket (ook bekend als JetDirect) worden ook ondersteund met minder functionaliteit. CUPS biedt bladeren naar netwerkprinters en &postscript; Printer Description (PPD) gebaseerde afdrukopties om echt printen onder &unix; te ondersteunen. De thuispagina voor CUPS is . HPLIP HPLIP HPLIP, het HP &linux; Imaging and Printing systeem, is een suite van programma's ontwikkeld door HP dat printen, scannen en faxen voor toepassingen van HP ondersteunt. Deze suite van programma's maakt gebruikt van het printsysteem CUPS als een backend voor sommige van de printmogelijkheden. De thuispagina voor HPLIP is . Problemen oplossen Na het uitvoeren van een simpele test met &man.lptest.1; is mogelijk een van onderstaande resultaten verkregen, in plaats van de juiste uitvoer: Het werkte na enige tijd of er kwam geen volle pagina. De printer drukte bovenstaande af, maar wachtte enige tijd zonder iets te doen. Het was zelfs nodig om een PRINT REMAINING, of FORM FEED-knop op te printer in te drukken om enig resultaat te krijgen. Als dit het geval is, dan stond de printer waarschijnlijk te wachten of er nog meer gegevens van de opdracht zouden komen, alvorens iets af te drukken. Om dit probleem op te lossen, kan het tekstfilter worden aangepast zodat deze een FORM FEED-karakter (of wat er ook nodig is) naar de printer stuurt. Dit is meestal voldoende om een printer zover te krijgen om tekst af te drukken die zich nog in de interne buffer bevindt. Het is ook nuttig om er zeker van te zijn dat elke afdrukopdracht eindigt op een hele pagina, zodat de volgende opdracht niet ergens midden op de laatste pagina van de vorige opdracht begint. De volgende vervanging voor het shellscript /usr/local/libexec/if-simple drukt een form feed af nadat de opdracht naar een printer is gestuurd: #!/bin/sh # # if-simple - Eenvoudige tekst invoerfilter voor lpd # Geïinstalleerd in /usr/local/libexec/if-simple # # Kopieert eenvoudig stdin naar stdout. Negeer alle filterargumenten. # Schrijft een form feed karakter (\f) na het afdrukken van de opdracht. /bin/cat && printf "\f" && exit 0 exit 2 De opdracht produceerde een getrapt effect. Het resultaat ziet er als volgt uit: !"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 MS-DOS OS/2 ASCII Dit krijgen slachtoffers van het trapeffect te zien. Het wordt veroorzaakt door conflicterende interpretaties van de karakters die een regeleinde aangeven. &unix;-achtige besturingssystemen gebruiken een enkel karakter: ASCII-code 10, de line feed (LF). &ms-dos;, &os2; en andere besturingssystemen gebruiken twee karakters: ASCII-code 10 en ASCII-code 13 (de carriage return, CR). Veel printers gebruiken de &ms-dos;-conventie voor het representeren van regeleinden. Als onder &os; wordt afgedrukt, bevat de tekst alleen het line feed-karakter. Na het zien van een line feed-karakter vervolgt de printer zijn werk op de volgende regel, maar behoudt dezelfde horizontale positie op de pagina voor het afdrukken van het volgende teken. Hier is de carriage return voor bedoeld: om het volgende karakter af te drukken aan de linkerkant van de pagina. Dit is wat &os; wil dat de printer doet: Printer ontvangt CR Printer drukt CR af Printer ontvangt LF Printer drukt CR + LF af Hier volgen een aantal manieren om dit te bereiken: Gebruik de instellingentoetsen of het bedieningspaneel van de printer om de interpretatie van deze karakters aan te passen. Controleer de handleiding van de printer om uit te vinden hoe dit moet. Als een systeem in een ander besturingssysteem dan &os; wordt opgestart, kan het nodig zijn een printer opnieuw in te stellen, zodat die een interpretatie voor CR- en LF-karakters gebruikt die bij dat andere besturingssysteem horen. Het kan de voorkeur genieten een van onderstaande oplossingen te gebruiken. Zorg dat het seriële lijnstuurprogramma van &os; automatisch LF naar CR+LF converteert. Dit werkt natuurlijk alleen voor printers op een seriële poort. Gebruik de optie ms# en zet de modus onlcr in het bestand /etc/printcap voor de printer om deze functionaliteit in te schakelen. Stuur een escape-code naar een printer om tijdelijk LF-karakters anders te behandelen. Raadpleeg hiervoor de handleiding van de printer om escape-codes te achterhalen die de printer ondersteunt. Als de juiste escape-code is gevonden, moet de tekstfilter worden aangepast zodat deze eerst de code stuurt en vervolgens de afdrukopdracht. PCL Hier volgt een eenvoudig tekstfilter voor printers die HP PCL-escape-codes begrijpen. Dit filter zorgt dat een printer LF-karakters behandelt als LF en CR, vervolgens verstuurt het de opdracht en tot slot een form feed om de laatste pagina in de opdracht uit te voeren. Het zou met alle HP printers moeten werken. #!/bin/sh # # hpif - Eenvoudig tekst invoerfilter voor lpd voor HP PCL-printers # Geïnstalleerd in /usr/local/libexec/hpif # # Kopieert eenvoudig stdin naar stdout. Negeert alle filterargumenten. # Vertelt de printer om LF te zien als CR+LF. # Werpt de pagina uit na voltooiing. printf "\033&k2G" && cat && printf "\033&l0H" && exit 0 exit 2 Nu volgt een voorbeeldbestand /etc/printcap voor host orchid. Er is een printer aangesloten op de eerste parallelle poort; een HP LaserJet 3Si, genaamd teak. Die gebruikt bovenstaand script als tekstfilter: # # /etc/printcap voor host orchid # teak|hp|laserjet|HP LaserJet 3Si:\ :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif: De regels zijn over elkaar afgedrukt. De printer is nooit een regel opgeschoven. Alle regels tekst lopen over elkaar en zijn op dezelfde regel afgedrukt. Dit probleem is het omgekeerde van het trapeffect, zoals boven beschreven, en is veel zeldzamer. Ergens worden de LF-karakters die &os; gebruikt om een regel te eindigen gezien als CR-karakters om de afdruklocatie te verplaatsen naar de linkerkant van het papier, zonder óók een regel naar beneden te gaan. Gebruik de instellingentoetsen, of het bedieningspaneel van de printer om de volgende interpretatie van LF en CR af te dwingen: Printer ontvangt Printer drukt af CR CR LF CR + LF De printer is karakters kwijt. Tijdens het afdrukken heeft de printer een paar karakters per regel niet afgedrukt. Het kan zijn dat het probleem erger werd naarmate de printer zijn werk deed, steeds meer karakters verliezend. Het probleem is dat de printer de snelheid waarmee de computer gegevens over een seriële lijn stuurt niet bij kan houden (dit probleem zou zich niet voor moeten doen met printers op een parallelle poort). Er zijn twee manieren om dit probleem te verhelpen: Als de printer XON/XOFF flow-control ondersteunt, zorg dan dat &os; dit gebruikt door de modus ixon in de optie ms# te specificeren. Als de printer de Request to Send / Clear to Send hardware-handshake ondersteunt, (ook bekend als RTS/CTS), specificeer dan de modus crtscts in de optie ms#. Zorg dat de bedrading van de kabel die printer met de computer verbindt juist is voor hardware flow-control. Er werd onzin afgedrukt. Het lijkt alsof de printer willekeurige onzin afdrukte en niet de gewenste tekst. Dit is meestal een ander symptoom van verkeerde communicatieparameters voor een seriële printer. Controleer de bps-snelheid in de optie br en de instelling voor pariteit in de optie ms#. Wees er zeker van dat de printer dezelfde instellingen gebruikt als in het bestand /etc/printcap worden opgegeven. Er gebeurde niets. Als er niets gebeurde, ligt het probleem waarschijnlijk bij &os; en niet bij de hardware. Voeg de optie logboekbestand (lf) toe in /etc/printcap voor de betreffende printer. Hier is bijvoorbeeld de definitie voor rattan met de optie lf: rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple:\ :lf=/var/log/rattan.log Probeer vervolgens nogmaals af te drukken. Controleer het logboekbestand (in dit voorbeeld /var/log/rattan.log) op mogelijke foutmeldingen. Probeer op basis van deze melding het probleem te verhelpen. Als er geen optie lf is opgegeven, gebruikt LPD /dev/console als standaard. diff --git a/nl_NL.ISO8859-1/books/handbook/security/chapter.xml b/nl_NL.ISO8859-1/books/handbook/security/chapter.xml index 498ae0dd24..d82c00785f 100644 --- a/nl_NL.ISO8859-1/books/handbook/security/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/security/chapter.xml @@ -1,4307 +1,4305 @@ Matthew Dillon Veel uit dit hoofdstuk is overgenomen uit de security(7) handleiding 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 en dergelijke 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 wachtwoordautenticatie opgezet kan worden. Hoe TCP Wrappers in te stellen voor gebruik met inetd. Hoe Kerberos5 op &os; 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 bestandssysteem-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; meergebruikerssystemen 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. 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 compromitteren 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 kennen 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 versus 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 autenticatiemethode 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. Om een account volledig op slot te zetten, dient het commando &man.pw.8; gebruikt te worden: &prompt.root; pw lock staff Dit voorkomt dat de gebruiker zich aanmeldt via enig mechanisme, inclusief &man.ssh.1;. Een andere manier om toegang tot accounts te blokkeren is om het versleutelde wachtwoord door een enkel *-karakter te vervangen. Dit karakter zal nooit overeenkomen met het versleutelde wachtwoord en dus gebruikerstoegang blokkeren. Het volgende medewerkersaccount bijvoorbeeld: foobar:R9DT/Fa1/LV9U:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh zou veranderd moeten worden in: foobar:*:1000:1000::0:0:Foo Bar:/home/foobar:/usr/local/bin/tcsh Dit voorkomt dat de gebruiker foobar zich aanmeldt met conventionele methoden. Deze methode om toegang te beperken werkt niet op sites die Kerberos gebruiken of in situaties waarin de gebruiker met &man.ssh.1; sleutels heeft geïnstalleerd. Deze 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. 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 gegevensstroom 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 versleuteld wachtwoordbestand. Beveiligen van het wachtwoordbestand De enige echte oplossing is zoveel mogelijk wachtwoorden wegsterren 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 ingebouwd pakketsnuffelstuurprogramma (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 veiligheidsniveau van de kernel kan op een aantal manieren worden ingesteld. De eenvoudigste manier om het veiligheidsniveau van een draaiende kernel te verhogen is met sysctl op de kernelvariabele kern.securelevel: &prompt.root; sysctl kern.securelevel=1 Standaard start de kernel van &os; op met een veiligheidsniveau van -1. Het veiligheidsniveau blijft -1 tenzij het is veranderd, òfwel door de beheerder òfwel door &man.init.8; vanwege een instelling in de opstartscripts. Het veiligheidsniveau kan tijdens het opstarten van het systeem verhoogd worden door de variabele kern_securelevel_enable op YES te zetten in het bestand /etc/rc.conf, en de waarde van de variabele kern_securelevel op het gewenste veiligheidsniveau in te stellen. Het standaard veiligheidsniveau van een &os;-systeem direct nadat de opstartscripts zijn uitgevoerd is -1. Dit wordt onveilige modus genoemd omdat de onveranderlijke bestandsvlag uitgezet kan worden, er van/naar alle apparaten mag worden gelezen en geschreven, enzovoorts. Als eenmaal het veiligheidsniveau op 1 of een hogere waarde is ingesteld, worden de alleen-toevoegen en onveranderlijke bestanden gehonoreerd, deze kunnen niet worden uitgezet, en wordt toegang tot rauwe apparaten ontzegd. Hogere niveaus beperken nog meer bewerkingen. Lees, voor een volledige beschrijving van het effect van de verschillende - veiligheidsniveaus, de handleidingpagina &man.security.7; (of de - handleidingpagina van &man.init.8; voor uitgaven ouder dan &os; - 7.0). + veiligheidsniveaus, de handleidingpagina &man.security.7;. Het ophogen van het veiligheidsniveau naar 1 of hoger kan enkele problemen met X11 (toegang tot /dev/io zal worden geblokkeerd), of met de installatie van &os; wanneer die vanaf de broncode is gebouwd (het gedeelte installword van het proces moet tijdelijk de alleen-toevoegen en onveranderlijke vlaggen van sommige bestanden uitzetten), en met enkele andere gevallen veroorzaken. Soms, zoals het geval is met X11, is het mogelijk om dit te omzeilen door &man.xdm.1; behoorlijk vroeg in het opstartproces te starten, wanneer het veiligheidsniveau nog laag genoeg is. Omzeilmethoden zoals deze zijn misschien niet voor alle veiligheidsniveaus of voor alle beperkingen die ze opleggen mogelijk. Wat vooruit plannen is een goed idee. Het is belangrijk om de beperkingen die door elk veiligheidsniveau worden opgelegd te begrijpen omdat ze het gebruiksgemak van het systeem sterk verminderen. Het vergemakkelijkt ook het kiezen van eens standaardinstelling en voorkomt allerlei verassingen. Als het veiligheidsniveau van de kernel naar 1 of hoger wordt verhoogd, kan het nuttig zijn om de vlag schg aan te zetten voor kritieke opstartprogramma's, mappen, en scriptbestanden (i.e., alles dat gedraaid wordt tot het punt waar het veiligheidsniveau wordt ingesteld). Dit kan overdreven zijn, en het bijwerken van het systeem is veel moeilijker wanneer het op een hoog veiligheidsniveau werkt. Een minder beperkend compromis is om het systeem op een hoger veiligheidsniveau te draaien maar het aanzetten van de vlag schg voor elk systeembestand en -map onder de zon over te slaan. Een andere mogelijkheid is om / en /usr simpelweg als alleen-lezen aan te koppelen. Het dient opgemerkt te worden dat het te draconisch zijn over wat is toegestaan het belangrijke detecteren van een inbraak kan verhinderen. 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 beveiliging) 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 hem op heterdaad te kunnen betrappen. De beste manier om te zoeken naar een inbraak is zoeken naar gewijzigde, ontbrekende 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 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 cliëntmachines vrijwel ongezien gemonitord worden. Als de server met beperkte toegang verbonden is met de cliëntmachines 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 cliëntsysteem dat het moet gaan monitoren, dan moeten scripts gemaakt worden om dat monitoren ook echt uit te voeren. Uitgaande van een NFS-koppeling, 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 cliëntmachine 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 cliënt 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-cliënt op de cliënt 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 koppelvlaggen zo in te stellen dat suid-binaire bestanden op die partities niet zijn toegestaan. Zie daarvoor de optie nosuid (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 inbraakpoging 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 zal proberen 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 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 door: Limiteren van server forks. Limiteren van springplank (springboard) aanvallen (ICMP response aanvallen, ping broadcast, etc.). De Kernel Route Cache overloaden. Een veelvoorkomende DoS-aanval is om een server aan te vallen door het zoveel kindprocessen aan te laten maken dat het hostsysteem uiteindelijk geen bestandsdescriptors, geheugen enzovoort meer heeft en het dan 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 gelimiteerd kan worden. De parameter MaxDaemonChildren moet zodanig ingesteld worden dat als sendmail start; deze 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 wachtrijmodus () 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. 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, dat wil zeggen 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). Een andere veelvoorkomende DoS-aanval is de springplankaanval: 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-pakketten 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 springplankaanval 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 laten verzadigen met ICMP-foutmeldingen. Dit type aanval kan een server ook laten crashen door te zorgen dat het geheugen ervan vol zit, zeker als de server de ICMP-antwoorden niet zo snel kwijt kan als dat het ze genereert. Gebruik de sysctl-variabele net.inet.icmp.icmplim om deze aanvallen te beperken. De laatste belangrijke klasse springplankaanvallen hangt samen met een aantal interne diensten van inetd zoals de UDP-echodienst. 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 poort chargen. Een competente systeembeheerder zal al deze interne inetd testdiensten 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 gecachede 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 gecachede 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 Er zijn een aantal aandachtspunten die in acht genomen moeten worden als Kerberos of ssh gebruikt worden. Kerberos 5 is een prima autenticatieprotocol, maar er zitten bugs in de Kerberos-versies van telnet en rlogin waardoor ze niet geschikt zijn voor binair verkeer. Kerberos codeert standaard de 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 DES, Blowfish, MD5, SHA256, SHA512 en crypt beveiliging crypt crypt Blowfish DES MD5 SHA256 SHA512 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 Verenigde Staten als aansluiting te houden bij alle andere varianten van &unix; die nog steeds DES gebruikten. De oplossing werd gevonden in het splitsen van de coderingsbibliotheken zodat gebruikers in de Verenigde Staten 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 Op dit moment ondersteunt de bibliotheek DES, MD5, Blowfish, SHA256 en SHA512 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-wachtwoordstrings 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. Zowel SHA256 als SHA512 beginnen met de tekens $6$. Het wachtwoordformaat voor nieuwe wachtwoorden wordt ingesteld met de passwd_format aanmeldinstelling in /etc/login.conf waar des, md5, blf, sha256 of sha512 in mag staan. Zie de &man.login.conf.5; handleiding voor meer informatie over aanmeldinstellingen. Eenmalige wachtwoorden eenmalige wachtwoorden beveiliging eenmalige wachtwoorden Standaard biedt &os; ondersteuning voor OPIE (Eenmalige Wachtwoorden in Alles - One-time Passwords In Everything), wat standaard een MD5-hash gebruikt. 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 OPIE-programma &man.opiekey.1; en dat wordt geaccepteerd door &man.opiepasswd.1; en de aanmeldprocedure. Dit heet het eenmalige wachtwoord. Het laatste type wachtwoord is het wachtwoord dat wordt opgegeven aan het programma opiekey (en soms aan het programma opiepasswd) dat gebruikt wordt 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. OPIE geheime wachtwoorden kennen niet de beperking van 8 karakters zoals de oude &unix; wachtwoorden. Bij &os; mag het wachtwoord voor aanmelden tot 128 karakters lang zijn. Ze mogen onbeperkt lang zijn. Wachtwoorden van een zes of zeven woorden lange zin zijn niet ongewoon. Voor het overgrote deel werkt het OPIE-systeem volledig onafhankelijk van het &unix; wachtwoordsysteem. Buiten het wachtwoord zijn er nog twee stukjes gegevens die van belang zijn voor OPIE. Het eerste wordt zaad (seed) of sleutel (key) genoemd en bestaat uit twee letters en vijf cijfers. Het tweede stukje gegevens heet de iteratieteller, een nummer tussen 1 en 100. OPIE maakt een eenmalig wachtwoord door het zaad en het geheime wachtwoord aaneen te schakelen en daarop het door de iteratieteller aangegeven keren MD5-hash toe te passen. Daarna wordt het resultaat omgezet in zes korte Engelse woorden. Deze zes woorden zijn een eenmalige wachtwoord. Het autenticatiesysteem (hoofdzakelijk PAM) houdt bij welk eenmalig wachtwoord het laatst is gebruikt en de gebruiker wordt geautenticeerd 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, moet OPIE opnieuw ingesteld worden. Er zijn enkele programma's bij ieder systeem betrokken die hieronder worden besproken. Het programma opiekey heeft een iteratieteller, zaad en een geheim wachtwoord nodig en maakt dan een eenmalig wachtwoord of een lijst van opeenvolgende eenmalige wachtwoorden. Het programma opiepasswd wordt gebruikt om OPIE te initialiseren en om wachtwoorden, iteratietellers en zaad te wijzigen. Het accepteert zowel wachtwoordzinnen als een iteratieteller, zaad en een eenmalig wachtwoord. Het programma opieinfo bekijkt de relevante bestanden waarin de eigenschappen staan (/etc/opiekeys) en toont de huidige iteratieteller en zaad van de gebruiker die het commando uitvoert. Nu worden vier verschillende acties besproken. Bij de eerste wordt 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 wordt opiepasswd gebruikt over een onbeveiligde verbinding samen met opiekey over een beveiligde verbinding om hetzelfde te bereiken. In een derde scenario wordt opiekey gebruikt om aan te melden over een onveilige verbinding. Het vierde scenario behandelt het gebruik van 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 Gebruik het commando opiepasswd om OPIE voor de eerste keer te initialiseren: &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 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 een wachtwoord te initialiseren of te wijzigen over een onveilige verbinding, moet er al ergens een veilige verbinding bestaan waar de gebruiker opiekey kan uitvoeren. Dit kan een shellprompt zijn op een machine die vertrouwd wordt. De gebruiker moet ook een iteratieteller verzinnen (100 is wellicht een prima getal) en een eigen zaad bedenken of er een laten fabriceren. Over de onveilige verbinding (naar de machine die de gebruiker wil initialiseren) wordt het commando opiepasswd gebruikt: &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 Druk op Return om het standaardzaad te accepteren. Voor een toegangswachtwoord wordt ingevoerd, dient eerst gewisseld te worden naar de veilige verbinding en dienen dezelfde parameters ingegeven te worden: &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 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: <gebruikersnaam> otp-md5 498 gr4269 ext Password: NB: de OPIE-prompt heeft een handige 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 opiekey beschikbaar is. Er zijn ook versies voor &ms-dos;, &windows; en &macos;. Voor het commando 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 zich wil aanmelden. Op het vertrouwde systeem: &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. Meerdere eenmalige wachtwoorden maken Soms moet een gebruiker ergens naar toe gaan waar er geen toegang is tot een vertrouwde machine of een beveiligde verbinding. In dat geval is het mogelijk om met het commando opiekey een aantal eenmalige wachtwoorden te maken om uit te printen en mee te nemen: &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: <geheim wachtwoord> 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 Met OPIE kan paal en perk gesteld worden aan het gebruik van &unix; wachtwoorden op basis van het IP-adres van een aanmeldsessie. Dat kan met het bestand /etc/opieaccess dat standaard aanwezig is. 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 TCP Wrappers TCP Wrapper 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 het niet kan, zoals tekst terugsturen naar de bron van een verbinding. De TCP Wrappers software kan dat en nog veel meer. In dit onderdeel worden de mogelijkheden van TCP Wrappers 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 configuratie 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 server 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: # Deze regel is nodig voor POP3-verbindingen qpopper : ALL : allow Nadat deze regel is toegevoegd moet inetd herstart worden door gebruik te maken van &man.service.8;: &prompt.root; service inetd restart 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 email 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 de optie 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 handleiding van &man.hosts.access.5; staat een volledige lijst. Wildcardopties 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. Met 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 de wildcard PARANOID kan nogal wat schade aanrichten als de cliënt of de server kapotte DNS-instellingen heeft. Voorzichtigheid van de beheerder is geboden. De handleiding 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. Tillman Hodgson Bijgedragen door Mark Murray Gebaseerd op een bijdrage van <application>Kerberos5</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. Kerberos kan omschrijven worden als identiteitbevestigend proxy systeem. Het kan ook omschreven worden als een vertrouwd autenticatiesysteem van een derde partij. Kerberos vervult maar één taak: het veilig autenticeren van gebruikers op het netwerk. Het vervult geen autorisatietaken (wat gebruikers mogen) en controleert ook niets (wat gebruikers hebben gedaan). Nadat een cliënt en server Kerberos hebben gebruikt om hun identiteit vast te stellen kunnen ze ook al hun communicatie coderen om hun privacy en gegevensintegriteit 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 handleiding. 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 cliënt 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 autenticatiedienst 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" 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 volledig gekwalificeerde hostnaam kerberos.example.org heeft. Als de KDC een andere hostnaam heeft, moet er nog een CNAME (alias) toegevoegd 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 het zonebestand 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 cliënten 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 service kerberos start en service 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 (gebruiker) die zojuist is aangemaakt vanaf de commandoregel van het KDC zelf: &prompt.user; kinit tillman tillman@EXAMPLE.ORG's Password: &prompt.user; klist 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 Het ticket kan worden ingenomen wanneer u klaar bent: &prompt.user; kdestroy <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 cliëntcomputer 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, bijvoorbeeld 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 service inetd restart: telnet stream tcp nowait root /usr/libexec/telnetd telnetd -a user Het belangrijkste is dat de typering -a (van autenticatie) op user staat. Meer details zijn in &man.telnetd.8; te vinden. <application>Kerberos</application> activeren op een cliënt met Heimdal Kerberos5 cliëntinstellingen Het opzetten van een cliëntcomputer is eigenlijk kinderlijk eenvoudig. Wat betreft de Kerberos instelling is alleen het Kerberos instellingenbestand (/etc/krb5.conf) nodig. Dat kan eenvoudigweg naar de cliëntcomputer gekopieerd worden vanaf de KDC. Test de cliënt met kinit, klist en kdestroy vanaf de cliënt 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 cliënt of de KDC. Bij het testen van een applicatie als telnet kan het beste een pakketsnuffelaar (bijvoorbeeld &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 gegevensstroom versleuteld (vergelijkbaar met ssh). Er worden standaard ook andere Kerberos applicaties op de cliënt geïnstalleerd. Hier komt de minimalistische natuur van de basisinstallatie van Heimdal boven drijven: telnet is de enige dienst waarvoor Kerberos geactiveerd is. De port Heimdal voegt een aantal ontbrekende cliëntapplicaties 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 cliëntapplicaties. 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 gebruikersaccount (bijvoorbeeld een lokale account met de naam tillman). Voor cliëntapplicaties 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 handleidingen voor deze commando's te lezen. Let op dat de ksu handleiding .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 cliëntapplicaties te tonen voor de systeemversies. Hebben alle computers in de wereld hun tijd gesynchroniseerd? Als dat niet zo is, dan slaagt de autenticatie 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 cliënten 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. Hostprincipals 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 een en ander niet zoals verwacht. Een krb5.dict bestand om het gebruik van bepaalde slechte wachtwoorden te voorkomen (dit wordt kort behandeld in de handleiding 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 symbolische 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 cliëntapplicaties 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 autenticatie zodat het op de juiste wijze eigenaarschap kan wijzigen voor de doorgegeven rechten. Het bestand rc.conf moet ook gewijzigd worden zodat het de volgende configuratie bevat: kerberos5_server="/usr/local/sbin/krb5kdc" kadmind5_server="/usr/local/sbin/kadmind" kerberos5_server_enable="YES" kadmind5_server_enable="YES" Dit is gedaan omdat de applicaties voor MIT-Kerberos binairen in de hiërarchie /usr/local installeren. 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 herbruikt. 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 meergebruikersomgeving 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 hoofdwachtwoorddatabase 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 mastersleutel 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 autenticatie 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 slaven) en een zorgvuldige implementatie van secundaire of fall-back autenticatie. PAM is hier uitermate geschikt voor. Tekortkomingen van <application>Kerberos</application> Kerberos stelt gebruikers, hosts en diensten in staat om elkaar te autenticeren. Maar het heeft geen mechanisme om de KDC te autenticeren 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 Autenticatiesysteem 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 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 autenticatie van mailcliënten, webgebaseerde transacties als creditcardbetalingen en nog veel meer. Veel ports zoals www/apache22 en mail/claws-mail 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) netwerkbeveiligingsprotocollen 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 Verenigde Staten. 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 versleutelingsalgoritmes, etc, beschikbaar. Een volledige lijst is na te lezen in de handleiding van &man.openssl.1;. Er horen nu twee bestanden te staan in de map waarin het voorgaande commando is uitgevoerd. Het certificaatverzoek, req.pem, kan naar een certificaat autoriteit gestuurd worden die de bijgevoegde gegevens kan valideren, het verzoek kan tekenen en het certificaat kan retourneren. Het tweede bestand heet cert.pem en is de geheime sleutel voor het certificaat. Deze dient zorgvuldig beschermd te worden. Als de geheime sleutel in de handen van anderen valt kan die gebruikt worden om de identiteit van de eigenaar (of server) aan te nemen. 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 certificaatautoriteit 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 autenticeren 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 make install waardoor de daemon Sendmail 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
Geschreven door
VPN via IPsec IPsec Een VPN opzetten met &os; gateways tussen twee netwerken die gescheiden zijn door Internet. Hiten M. Pandya
hmp@FreeBSD.org
Geschreven door
IPsec begrijpen Deze paragraaf is een gids in het proces van het opzetten van IPsec. 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 protocolfamilies IPv4 als de IPv6 ondersteunt. 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 versleutelingsalgoritmes (zoals 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 geautenticeerd 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 options IPSEC #IP-beveiliging device crypto 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 voor IP-beveiliging
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, de ene thuisgebaseerd en de andere bedrijfgebaseerd. Beide zijn verbonden met het Internet, en er wordt van verwacht dat ze zich via dit <acronym>VPN</acronym> als één gedragen. 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. Ze mogen alleen niet botsen; bijvoorbeeld: ze mogen niet beide 192.168.1.x gebruiken. Tom Rhodes
trhodes@FreeBSD.org
Geschreven door
IPsec configureren op &os; Om te beginnen moet de port security/ipsec-tools geïnstalleerd zijn vanuit de Portscollectie. Dit softwarepakket van een derde partij biedt een aantal applicaties die helpen de configuratie te ondersteunen. De volgende benodigdheid is om twee &man.gif.4; pseudo-apparaten aan te maken om de pakketten te tunnelen en beide netwerken in staat stellen om op een juiste wijze te communiceren. Draai als root de volgende commando's, waarbij de items intern en extern met de echte interne en externe gateways: &prompt.root; ifconfig gif0 create &prompt.root; ifconfig gif0 intern1 intern2 &prompt.root; ifconfig gif0 tunnel extern1 extern2 Het publieke IP van het LAN van de onderneming is bijvoorbeeld 172.16.5.4 en het heeft een privaat IP 10.246.38.1. Het publieke IP van het LAN van huis is 192.168.1.12 met een intern privaat IP 10.0.0.5. Dit kan verwarrend lijken, dus bekijk de volgende voorbeeld van het commando &man.ifconfig.8;: Gateway 1: gif0: flags=8051 mtu 1280 tunnel inet 172.16.5.4 --> 192.168.1.12 inet6 fe80::2e0:81ff:fe02:5881%gif0 prefixlen 64 scopeid 0x6 inet 10.246.38.1 --> 10.0.0.5 netmask 0xffffff00 Gateway 2: gif0: flags=8051 mtu 1280 tunnel inet 192.168.1.12 --> 172.16.5.4 inet 10.0.0.5 --> 10.246.38.1 netmask 0xffffff00 inet6 fe80::250:bfff:fe3a:c1f%gif0 prefixlen 64 scopeid 0x4 Eenmaal compleet zouden beide private IP's bereikbaar moeten zijn met het commando &man.ping.8; zoals de volgende uitvoer suggereert: priv-net# ping 10.0.0.5 PING 10.0.0.5 (10.0.0.5): 56 data bytes 64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=42.786 ms 64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=19.255 ms 64 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=20.440 ms 64 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=21.036 ms --- 10.0.0.5 ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max/stddev = 19.255/25.879/42.786/9.782 ms corp-net# ping 10.246.38.1 PING 10.246.38.1 (10.246.38.1): 56 data bytes 64 bytes from 10.246.38.1: icmp_seq=0 ttl=64 time=28.106 ms 64 bytes from 10.246.38.1: icmp_seq=1 ttl=64 time=42.917 ms 64 bytes from 10.246.38.1: icmp_seq=2 ttl=64 time=127.525 ms 64 bytes from 10.246.38.1: icmp_seq=3 ttl=64 time=119.896 ms 64 bytes from 10.246.38.1: icmp_seq=4 ttl=64 time=154.524 ms --- 10.246.38.1 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 28.106/94.594/154.524/49.814 ms Zoals verwacht hebben beide kanten de mogelijkheid om ICMP-pakketten te verzenden en te ontvangen van de privaat geconfigureerde adressen. Vervolgens dient aan beide gateways verteld te worden hoe pakketten te routeren om op de juiste wijze verkeer van een van de netwerken te versturen. Het volgende commando doet dit: &prompt.root; corp-net# route add 10.0.0.0 10.0.0.5 255.255.255.0 &prompt.root; corp-net# route add net 10.0.0.0: gateway 10.0.0.5 &prompt.root; priv-net# route add 10.246.38.0 10.246.38.1 255.255.255.0 &prompt.root; priv-net# route add host 10.246.38.0: gateway 10.246.38.1 Op dit moment dienen interne machines bereikbaar te zijn vanuit elke gateway alsook als vanuit machines achter de gateways. Dit is eenvoudig te zien aan het volgende voorbeeld: corp-net# ping 10.0.0.8 PING 10.0.0.8 (10.0.0.8): 56 data bytes 64 bytes from 10.0.0.8: icmp_seq=0 ttl=63 time=92.391 ms 64 bytes from 10.0.0.8: icmp_seq=1 ttl=63 time=21.870 ms 64 bytes from 10.0.0.8: icmp_seq=2 ttl=63 time=198.022 ms 64 bytes from 10.0.0.8: icmp_seq=3 ttl=63 time=22.241 ms 64 bytes from 10.0.0.8: icmp_seq=4 ttl=63 time=174.705 ms --- 10.0.0.8 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 21.870/101.846/198.022/74.001 ms priv-net# ping 10.246.38.107 PING 10.246.38.1 (10.246.38.107): 56 data bytes 64 bytes from 10.246.38.107: icmp_seq=0 ttl=64 time=53.491 ms 64 bytes from 10.246.38.107: icmp_seq=1 ttl=64 time=23.395 ms 64 bytes from 10.246.38.107: icmp_seq=2 ttl=64 time=23.865 ms 64 bytes from 10.246.38.107: icmp_seq=3 ttl=64 time=21.145 ms 64 bytes from 10.246.38.107: icmp_seq=4 ttl=64 time=36.708 ms --- 10.246.38.107 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 21.145/31.721/53.491/12.179 ms De tunnels opzetten is het eenvoudige deel. Het configureren van een veilige verbinding is een veel diepgaander proces. De volgende configuratie gebruikt vooraf gedeelde (PSK) RSA-sleutels. Afgezien van de IP-adressen zijn beide bestanden /usr/local/etc/racoon/racoon.conf identiek en zien ze er ongeveer als volgt uit: path pre_shared_key "/usr/lcoal/etc/racoon/psk.txt"; # plaats van bestand vooraf gedeelde sleutels log debug; # verbositeitsinstelling van loggen: op 'notify' zetten als testen en debuggen klaar is padding # opties moeten niet veranderd worden { maximum_length 20; randomize off; strict_check off; exclusive_tail off; } timer # timingopties, veranderen indien nodig { counter 5; interval 20 sec; persend 1; # natt_keepalive 15 sec; phase1 30 sec; phase2 15 sec; } listen # adres [poort] waarop racoon luistert { isakmp 172.16.5.4 [500]; isakmp_natt 172.16.5.4 [4500]; } remote 192.168.1.12 [500] { exchange_mode main,aggressive; doi ipsec_doi; situation identity_only; my_identifier address 172.16.5.4; peers_identifier address 192.168.1.12; lifetime time 8 hour; passive off; proposal_check obey; # nat_traversal off; generate_policy off; proposal { encryption_algorithm blowfish; hash_algorithm md5; authentication_method pre_shared_key; lifetime time 30 sec; dh_group 1; } } sainfo (address 10.246.38.0/24 any address 10.0.0.0/24 any) # adres $netwerk/$netmasker $type adres $netwerk/$netmasker $type ( $type is any of esp) { pfs_group 1; lifetime time 3600 sec; encryption_algorithm blowfish,3des,des; authentication_algorithm hmac_md5,hmac_sha1; compression_algorithm deflate; } Het uitleggen van elke beschikbare optie, samen met diegenen in deze voorbeelden valt buiten het bereik van dit document. De configuratiehandleiding van racoon staat vol relevante informatie. De SPD-beleiden moeten geconfigureerd worden zodat &os; en racoon in staat zijn om netwerkverkeer tussen hosts te versleutelen en te ontsleutelen. Deze taak kan met een eenvoudig shellscript zoals het volgende dat op de gateway van de onderneming staat worden uitgevoerd. Dit bestand wordt gebruikt tijdens de systeeminitialisatie en dient bewaard te worden als /usr/local/etc/racoon/setkey.conf. flush; spdflush; # Naar het thuisnetwerk spdadd 10.246.38.0/24 10.0.0.0/24 any -P out ipsec esp/tunnel/172.16.5.4-192.168.1.12/use; spdadd 10.0.0.0/24 10.246.38.0/24 any -P in esp/tunnel/192.168.1.12-172.16.5.4/use; Eenmaal aanwezig kan racoon op beide gateways gestart worden met het volgende commando: &prompt.root; /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log De uitvoer moet ongeveer gelijk zijn aan de volgende: corp-net# /usr/local/sbin/racoon -F -f /usr/local/etc/racoon/racoon.conf Foreground mode. 2006-01-30 01:35:47: INFO: begin Identity Protection mode. 2006-01-30 01:35:48: INFO: received Vendor ID: KAME/racoon 2006-01-30 01:35:55: INFO: received Vendor ID: KAME/racoon 2006-01-30 01:36:04: INFO: ISAKMP-SA established 172.16.5.4[500]-192.168.1.12[500] spi:623b9b3bd2492452:7deab82d54ff704a 2006-01-30 01:36:05: INFO: initiate new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0] 2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=28496098(0x1b2d0e2) 2006-01-30 01:36:09: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.2[0] spi=47784998(0x2d92426) 2006-01-30 01:36:13: INFO: respond new phase 2 negotiation: 172.16.5.4[0]192.168.1.12[0] 2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 192.168.1.12[0]->172.16.5.4[0] spi=124397467(0x76a279b) 2006-01-30 01:36:18: INFO: IPsec-SA established: ESP/Tunnel 172.16.5.4[0]->192.168.1.12[0] spi=175852902(0xa7b4d66) Om er zeker van te zijn dat de tunnel correct werkt, dient naar een ander console geschakeld te worden en &man.tcpdump.1; gebruikt te worden om hiermee het netwerkverkeer te bekijken. Vervang em0 door de netwerkinterfacekaart indien nodig. &prompt.root; tcpdump -i em0 host 172.16.5.4 and dst 192.168.1.12 Gegevens lijkend op de volgende zouden op het console moeten verschijnen. Indien niet, dan is er iets aan de hand, en is het nodig om de teruggegeven gegevens te debuggen. 01:47:32.021683 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xa) 01:47:33.022442 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xb) 01:47:34.024218 IP corporatenetwork.com > 192.168.1.12.privatenetwork.com: ESP(spi=0x02acbf9f,seq=0xc) Op dit punt zouden beide netwerken beschikbaar moeten zijn en deel lijken van hetzelfde netwerk. Waarschijnlijk zijn beide netwerken beschermt door een firewall, zoals het hoort. Om verkeer tussen hen toe te staan, moeten er regels worden toegevoegd om pakketten heen en terug door te laten. Voeg voor de firewall &man.ipfw.8; de volgende regels toe aan het instellingenbestand van de firewall: ipfw add 00201 allow log esp from any to any ipfw add 00202 allow log ah from any to any ipfw add 00203 allow log ipencap from any to any ipfw add 00204 allow log udp from any 500 to any Afhankelijk van de huidige hostconfiguratie dienen de regelnummers gewijzigd te worden. Voor gebruikers van &man.pf.4; of &man.ipf.8; zouden de volgende regels moeten volstaan: pass in quick proto esp form any to any pass in quick proto ah from any to any pass in quick proto ipencap from any to any pass in quick proto udp form any port = 500 to any port = 500 pass in quick on gif0 from any to any pass out quick proto esp from any to any pass out quick proto ah from any to any pass out quick ptoto ipencap from any to any pass out quick proto udp from any port = 500 to any port = 500 pass out quick on gif0 from any to any Ter afsluiting, voeg de volgende regels toe aan /etc/rc.conf om de machine toe te staan om ondersteuning voor het VPN te starten tijdens de systeeminitialisatie: ipsec_enable="YES" ipsec_program="/usr/local/sbin/setkey" ipsec_file="/usr/local/etc/racoon/setkey.conf" # staat toe om spd-beleiden tijdens het opstarten op te zetten racoon_enable="yes"
Chern Lee Bijgedragen 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 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. 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 cliënt 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 autenticatie en versleutelingsmethoden die het voorgaande voorkomen. <application>sshd</application> inschakelen OpenSSH inschakelen De sshd is een optie die wordt aangeboden tijdens een Standard-installatie van &os;. sshd is ingeschakeld als de volgende regel voorkomt in rc.conf: sshd_enable="YES" Hierdoor wordt &man.sshd.8; geladen, het daemonprogramma voor OpenSSH, als het systeem de volgende keer opstart. Als alternatief is het mogelijk om &man.rc.8; te gebruiken om OpenSSH te starten: &prompt.root; service sshd start SSH-cliënt OpenSSH cliënt &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 cliënt 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-cliënt 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. Recente OpenSSH servers staan standaard ingesteld om alleen SSH v2 connecties toe te staan. De cliënt gebruikt versie 2 als dat mogelijk is en valt anders terug op versie 1. De cliënt kan ook gedwongen worden om een van de twee protocollen te gebruiken door de optie of voor respectievelijk versie 1 en versie 2 aan te geven. De mogelijkheid versie 1 te gebruiken blijft in de cliënt bestaan om compatibiliteit met oudere versies te behouden. 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 cliënt staat in de map /etc/ssh. ssh_config bevat de instellingen voor de cliënt en sshd_config bevat ze voor de daemon. Daarnaast bieden het (standaard /usr/sbin/sshd) en rc.conf opties nog meer mogelijkheden voor instellingen. <application>ssh-keygen</application> In plaats van het gebruik van wachtwoorden kan &man.ssh-keygen.1; gebruikt worden om DSA en RSA sleutels te maken om een gebruiker te autenticeren: &prompt.user; ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/home/user/.ssh/id_dsa): Created directory '/home/user/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/id_dsa. Your public key has been saved in /home/user/.ssh/id_dsa.pub. The key fingerprint is: bb:48:db:f2:93:57:80:b6:aa:bc:f5:d5:ba:8f:79:17 user@host.example.com &man.ssh-keygen.1; maakt een publiek en privaat sleutelpaar aan dat gebruikt kan worden voor autenticatie. De private sleutel staat opgeslagen in ~/.ssh/id_dsa of ~/.ssh/id_rsa en de publieke sleutel staat in ~/.ssh/id_dsa.pub of ~/.ssh/id_rsa.pub voor respectievelijk sleuteltypen DSA en RSA. De publieke sleutel moet voor beide RSA- of DSA-sleutels in het bestand ~/.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 SSH sleutels in plaats van op wachtwoorden. 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. &man.ssh-agent.1; kan het ongemak van steeds opnieuw een lange wachtwoordzin moeten ingeven verlichten en wordt beschreven in het onderdeel . Afhankelijk van de gebruikte versie van OpenSSH kunnen opties en bestanden verschillen. Het is verstandig de handleiding &man.ssh-keygen.1; te raadplegen. <application>ssh-agent</application> en <application>ssh-add</application> De hulpprogramma's &man.ssh-agent.1; en &man.ssh-add.1; bieden de mogelijkheid om SSH in het geheugen te laden zodat niet iedere keer de wachtwoordzin ingegeven hoeft te worden. Het hulpprogramma &man.ssh-agent.1; handelt de autenticatie af voor de geheime sleutels die erin geladen zijn. &man.ssh-agent.1; wordt gebruikt om andere programma's te starten. Bij eenvoudig gebruik kan er een shell mee gestart worden of meer complex een schermbeheerprogramma. Voordat &man.ssh-agent.1; in een shell gebruikt kan worden dient het eerst gestart te worden met een shell als argument. Daarna kan de identiteit toegevoegd worden daar &man.ssh-add.1; aan te roepen en de wachtwoordzin voor de geheime sleutel op te geven. Als deze stappen zijn voltooid kan een gebruiker met &man.ssh.1; naar iedere host waar de corresponderende publieke sleutel is geïnstalleerd: &prompt.user; ssh-agent csh &prompt.user; ssh-add Enter passphrase for /home/user/.ssh/id_dsa: Identity added: /home/user/.ssh/id_dsa (/home/user/.ssh/id_dsa) &prompt.user; Om &man.ssh-agent.1; te gebruiken in X11 dient er een verwijzing naar &man.ssh-agent.1; in ~/.xinitrc te staan. Dan zijn de diensten van &man.ssh-agent.1; beschikbaar voor alle programma's die in X11 gestart worden. Een ~/.xinitrc zou er als volgt uit kunnen zien: exec ssh-agent startxfce4 Hiermee wordt &man.ssh-agent.1; gestart die op zijn beurt XFCE start, iedere keer dat X11 start. Als dat is gebeurd en X11 is herstart zodat de wijzigingen actief zijn, dan kan eenvoudigweg &man.ssh-add.1; gestart worden om alle beschikbare SSH sleutels te laden. 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 mailcliënt 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 netwerkgerelateerde) 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 streamingcliënt 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. De optie <varname>AllowUsers</varname> Vaak is het verstandig om beperkingen aan te brengen op het gebied van welke gebruikers kunnen aanmelden en van waar. De optie AllowUsers biedt deze mogelijkheid. Om bijvoorbeeld alleen root toe te staan zich aan te melden van 192.168.1.32, kan iets als de volgende regel worden opgenomen in het bestand /etc/ssh/sshd_config: AllowUsers root@192.168.1.32 Om de gebruiker admin het recht te geven zich van overal aan te melden hoeft alleen de gebruikersnaam vermeld te worden: AllowUsers admin Meerdere gebruikers met rechten of beperkingen horen op dezelfde regel te staan: AllowUsers root@192.168.1.32 admin Het is van belang dat iedere gebruiker die zich moet kunnen aanmelden wordt genoemd. De overige gebruikers worden buitengesloten. Nadat er wijzigingen zijn gemaakt aan /etc/ssh/sshd_config dienen de bestanden in &man.sshd.8; geladen te worden: &prompt.root; service sshd reload Meer informatie OpenSSH &man.ssh.1; &man.scp.1; &man.ssh-keygen.1; &man.ssh-agent.1; &man.ssh-add.1; &man.ssh.config.5; &man.sshd.8; &man.sftp-server.8; &man.sshd.config.5; Tom Rhodes Bijgedragen door Bestandssysteem toegangscontrolelijsten (<acronym>ACL</acronym>s) ACL In combinatie met verbeteringen als snapshots, biedt &os;  de veiligheid van Toegangscontrolelijsten voor Bestandssystemen (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 aan te koppelen 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 rompslomp 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 aankoppelen. Dit kan ook in /etc/fstab staan. De vlag op het moment van aankoppelen 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 aankoppelen kan niet gewijzigd worden bij opnieuw aankoppelen (&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 opstarten. Het betekent ook dat de aard van een bestandssysteem niet veranderd kan worden als het eenmaal in gebruik is. Het inschakelen van de superblokvlag zorgt ervoor dat het bestandssysteem altijd wordt aangekoppeld 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 aankoppelen 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 Monitoren van beveiligingsproblemen met andere software Portaudit 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 ports-mgmt/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/ports-mgmt/portaudit && make install clean Tijdens het installatieproces worden de instellingenbestanden voor &man.periodic.8; bijgewerkt, waardoor Portaudit uitvoer in de dagelijkse security runs meekomt. Het is van belang dat de emails die aan de emailaccount van root worden gezonden en uit de dagelijkse beveiligingsronde komen ook echt worden gelezen. Er zijn geen verdere instellingen nodig. Na de installatie kan de beheerder de database bijwerken en bekende kwetsbaarheden in geïnstalleerde pakketten bekijken met het volgende commando: &prompt.root; portaudit -Fda 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 Portscollectie is geïnstalleerd kan op elk moment door een beheerder ge-audit worden met: &prompt.root; portaudit -a Portaudit zal iets als het volgende produceren voor kwetsbare pakketten: 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 &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 uitgaven 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. ============================================================================= FreeBSD-SA-XX:XX.UTIL Security Advisory The FreeBSD Project Topic: denial of service due to some problem Category: core Module: sys Announced: 2003-09-23 Credits: Person 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) CVE Name: CVE-XXXX-XXXX 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 uitgaven 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; Subversion-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 uitgave die is aangepast. Gereserveerd voor de identificatie-informatie die gebruikt wordt om kwetsbaarheden in het Common Vulnerabilities Database System op te zoeken. 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 Subversion-takken of uitgavenamen, 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 web-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 te 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, commando's, 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 aanroepen 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 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.xml b/nl_NL.ISO8859-1/books/handbook/x11/chapter.xml index f05ad93fc2..d449eec5bb 100644 --- a/nl_NL.ISO8859-1/books/handbook/x11/chapter.xml +++ b/nl_NL.ISO8859-1/books/handbook/x11/chapter.xml @@ -1,1849 +1,1833 @@ Ken Tom Bijgewerkt voor X.Org's X11 server door Marc Fonvieille Erik Radder Vertaald door René Ladan Het X Window systeem Overzicht &os; gebruikt X11 om gebruikers een krachtige grafische gebruikersschil te bieden. X11 is een vrij beschikbare versie van het X Window System dat geïmplementeerd is in &xorg; &xfree86; (en andere softwarepakketten die hier niet worden besproken). De standaard en officiele smaak van X11 in &os; is &xorg;, de X11-server die is ontwikkeld door de X.Org Foundation onder een licentie die - veel lijkt op degene die door &os; wordt gebruikt. Er zijn ook - commerciële X-servers voor &os; beschikbaar. + veel lijkt op degene die door &os; wordt gebruikt. Meer informatie over de videohardware die X11 ondersteunt kan gevonden worden op de &xorg; website. 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 (). 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, en andere invoer- of uitvoerapparaten (i.e., een tablet kan als invoerapparaat worden gebruikt, en een videoprojector kan een alternatief uitvoerapparaat zijn). - Iedere X applicatie (zoals XTerm, of - &netscape;) is een + Iedere X applicatie (zoals XTerm of + Firefox) is een cliënt. Een cliënt 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. 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 + tientallen window managers + beschikbaar voor X. 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 gelijksoortig. 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 + Er zijn populaire widgetsets en variaties, inclusief Qt, gebruikt door KDE, of GTK+ van het GNOME project. Vanuit dit oogpunt lijkt het enigszins op de &unix; desktop, wat het makkelijker maakt voor de beginnende gebruiker. X11 installeren - &xorg; is de standaard X11 - implementatie voor &os;. &xorg; is + &xorg; is de 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 versie van &xorg; die momenteel beschikbaar is in de &os; Portscollectie is &xorg.version;. 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. X11 kan ook als pakket geïnstalleerd worden doordat er binaire pakketten 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 pakket voor &xorg; op te halen en te installeren: &prompt.root; pkg_add -r xorg Het voorbeeld hierboven installeert de complete X11 distributie inclusief de servers, clients, lettertypen enz. Er zijn ook afzonderlijke pakketten en ports beschikbaar voor verschillende delen van X11. Om een minimale X11-distributie te installeren kunt u als alternatief x11/xorg-minimal installeren. De rest van dit hoofdstuk licht toe hoe X11 wordt ingesteld en hoe een productieve desktopomgeving gebouwd kan worden. Christopher Shumway Geschreven door X11 instellen &xorg; X11 Voorbereiding In de meeste gevallen configureert X11 zichzelf. Voor degenen met oudere of ongebruikelijke apparatuur kan het nuttig zijn om informatie over de hardware te verzamelen voordat er met de configuratie wordt begonnen. Monitor synchronisatiefrequenties Chipset van de videokaart Geheugen van de videokaart horizontale synchronisatiefrequentie horizontale scansnelheid horizontale synchronisatiefrequentie ververssnelheid verticale synchronisatiefrequentie ververssnelheid verticale scansnelheid ververssnelheid De schermresolutie en ververssnelheid worden bepaald door de horizontale en verticale synchronisatiefrequenties. Bijna alle monitoren ondersteunen het automatisch elektronisch detecteren van deze waardes. Sommige monitoren geven deze waardes niet, dus moeten de specificaties worden bepaald uit de geprinte handleiding of van de website van de fabrikant. De chipset van de videokaart wordt ook automatisch gedetecteerd en gebruikt om het juiste videostuurprogramma te selecteren. Het kan handig voor de gebruiker zijn om te weten welke chipset is geïnstalleerd wanneer de automatische detectie niet het gewenste resultaat geeft. Het geheugen van de videokaart bepaalt de maximale resolutie en de kleurdiepte die afgebeeld kunnen worden. X11 instellen &xorg; gebruikt HAL om toetsenborden en muizen automatisch te detecteren. De ports sysutils/hal en devel/dbus worden als afhankelijkheden van x11/xorg geïnstalleerd, maar moeten met de volgende regels in het bestand /etc/rc.conf worden aangezet: hald_enable="YES" dbus_enable="YES" Deze diensten dienen gestart te worden (ofwel handmatig of door opnieuw op te starten) voordat er verder wordt gegaan met de configuratie of gebruik van &xorg;. &xorg; werkt vaak zonder enige verdere configuratie door het volgende op de prompt te typen: &prompt.user; startx De automatische configuratie kan met sommige hardware mislukken, of het kan dingen anders instellen dan gewenst is. In deze gevallen is handmatige configuratie nodig. Bureaubladomgevingen als GNOME, KDE, of Xfce hebben gereedschappen waarmee de gebruiker eenvoudig de schermparameters zoals de resolutie kan instellen. Dus als de standaardconfiguratie niet acceptabel is en u van plan bent om een bureaubladomgeving te installeren kunt u gewoon doorgaan met de installatie van de bureaubladomgeving en het juiste scherminstelgereedschap gebruiken. Het instellen van X11 bestaat uit meerdere stappen. De eerste stap is het bouwen van een instellingenbestand. Dit kan als de supergebruiker met: &prompt.root; Xorg -configure Dit genereert een kaal X11-instellingenbestand 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. Typ: &prompt.root; Xorg -config xorg.conf.new -retro Als er een zwart/grijs rooster en een X muis cursor verschijnen was de instelling succesvol. Om de test te stoppen dient naar de virtuele console waarmee de test werd gestart overgeschakeld te worden door op CtrlAltFn (F1 voor de eerste virtuele console) en CtrlC te drukken. De toetsencombinatie CtrlAltBackspace kan ook gebruikt worden om uit &xorg; te breken. Om het aan te zetten, kunt u òfwel het volgende commando uitvoeren vanaf elke X-terminal-emulator: &prompt.user; setxkbmap -option terminate:ctrl_alt_bksp òf een instellingenbestand voor het toetsenbord genaamd x11-input.fdi voor hald aanmaken en het in de map /usr/local/etc/hal/fdi/policy opslaan. Dit bestand dient het volgende te bevatten: <?xml version="1.0" encoding="iso-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.keyboard"> <merge key="input.x11_options.XkbOptions" type="string">terminate:ctrl_alt_bksp</merge> </match> </device> </deviceinfo> U moet uw machine opnieuw opstarten om hald te forceren om dit bestand te lezen. De volgende regel dient ook aan de sectie ServerLayout of ServerFlags van xorg.conf.new te worden toegevoegd: Option "DontZap" "off" Als de muis niet werkt, dan moet deze eerst ingesteld worden. Zie in het &os; installatiehoofdstuk. In recente versies van Xorg worden de secties InputDevice in xorg.conf genegeerd ten voorkeur van de automatisch gedetecteerde apparaten. Voeg de volgende regel aan de sectie ServerLayout of ServerFlags van dit bestand toe om het oude gedrag te herstellen: Option "AutoAddDevices" "false" Invoerapparaten kunnen dan zoals in vorige versies worden geconfigureerd, tezamen met eventuele andere benodigde opties (bijvoorbeeld omschakelen van toetsenbordindeling). Zoals al eerder is uitgelegd zal de daemon hald standaard automatisch uw toetsenbord detecteren. Het kan zijn dat de indeling of het model van uw toetsenbord niet juist zijn. Bureaubladomgevingen zoals GNOME, KDE of Xfce bieden gereedschappen om het toetsenbord in te stellen. Het is echter mogelijk om de eigenschappen direct in te stellen met behulp van het gereedschap &man.setxkbmap.1; of met een configuratieregel van hald. Als men bijvoorbeeld een PC-toetsenbord met 102 toetsen met een Franse indeling wilt gebruiken, dienen we een instellingenbestand voor het toestenbord voor hald aan te maken genaamd x11-input.fdi en het op te slaan in de map /usr/local/etc/hal/fdi/policy. Het dient de volgende regels te bevatten: <?xml version="1.0" encoding="iso-8859-1"?> <deviceinfo version="0.2"> <device> <match key="info.capabilities" contains="input.keyboard"> <merge key="input.x11_options.XkbModel" type="string">pc102</merge> <merge key="input.x11_options.XkbLayout" type="string">fr</merge> </match> </device> <deviceinfo> Als dit bestand al bestaat, kunt u de regels betreffende de configuratie van het toetsenbord kopiëren en aan uw bestand toevoegen. U dient uw machine opnieuw op te starten om hald te forceren om dit bestand te lezen. Het is mogelijk om hetzelfde te bereiken vanaf een X-terminal of een script met dit commando: &prompt.user; setxkbmap -model pc102 -layout fr Het bestand /usr/local/share/X11/xkb/rules/base.lst noemt de beschikbare toetsenborden, indelingen en opties. X11 optimaliseren Het bestand xorg.conf.new kan nu naar wens worden aangepast. Open het bestand in een tesktverwerker zoals &man.emacs.1; of &man.ee.1;. Indien de monitor een ouder of ongebruikelijk model is dat geen automatische detectie van de synchronisatiefrequenties ondersteunt, dan kunnen deze instellingen worden toegevoegd aan xorg.conf.new in de sectie "Monitor": Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection De meeste monitoren ondersteunen de automatische detectie van de synchronisatiefrequentie, wat het handmatig invoeren van deze waardes overbodig maakt. Voor de enkele monitoren die geen automatische detectie ondersteunen, dienen om mogelijke schade te voorkomen alleen waardes die door de fabrikant zijn opgegeven te worden ingevoerd. X kan DPMS (Energy Star) eigenschappen gebruiken bij monitoren die dit ondersteunen. &man.xset.1; regelt de timeouts 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 Als het instellingenbestand xorg.conf.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; 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 standaard kleurdiepte 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. 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; het kan vinden. Dit is meestal /etc/X11/xorg.conf of /usr/local/etc/X11/xorg.conf: &prompt.root; cp xorg.conf.new /etc/X11/xorg.conf Het instellen van X11 is nu gereed. &xorg; gestart worden met &man.startx.1;. De X11-server kan ook gestart worden met behulp van &man.xdm.1;. Bijzondere instellingen Instellen met de &intel; <literal>i810</literal> grafische chipset Intel i810 grafische chipset Instellen met &intel; i810 geïntegreerde chipsets vereist de agpgart AGP programmeerinterface voor X11 om de kaart aan te sturen. Zie de &man.agp.4; handleiding voor meer informatie. 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. Een Breedbeeld Flatpanel toevoegen breedbeeld flatpanelconfiguratie Deze sectie gaat uit van wat diepere configuratiekennis. Als pogingen om de bovenstaande standaard instelgereedschappen niet tot een werkende configuratie leidden, dan is er genoeg informatie in de logbestanden om de opstelling aan de praat te krijgen. Het gebruik van een tekstverwerker zal nodig zijn. Huidige breedbeeldformaten (zoals WSXGA, WSXGA+, WUXGA, WXGA en WXGA+) ondersteunen 16:10 en 10:9 formaten of aspectverhoudingen die problematisch kunnen zijn. Voorbeelden van enkele veelvoorkomende schermresoluties voor 16:10 aspectverhoudingen zijn: 2560x1600 1920x1200 1680x1050 1440x900 1280x800 Op een gegeven moment zal het toevoegen van een van deze resoluties net zo eenvoudig zijn als een mogelijke Mode in het Section "Screen": Section "Screen" Identifier "Screen 0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Viewport 0 0 Depth 24 Modes "1680x1050" EndSubSection EndSection &xorg; is slim genoeg om de resolutie-informatie via I2C/DDC-informtie uit het flatpanel te onttrekken zodat het weet wat de monitor aan kan wat betreft frequenties en resoluties. Als die ModeLines niet bestaan in de stuurprogramma's, dient men &xorg; een kleine hint te geven. Met behulp van /var/log/Xorg.0.log kan men genoeg informatie onttrekken om handmatig een werkende ModeLine aan te maken. Kijk naar informatie die op deze lijkt: (II) MGA(0): Supported additional Video Mode: (II) MGA(0): clock: 146.2 MHz Image Size: 433 x 271 mm (II) MGA(0): h_active: 1680 h_sync: 1784 h_sync_end 1960 h_blank_end 2240 h_border: 0 (II) MGA(0): v_active: 1050 v_sync: 1053 v_sync_end 1059 v_blanking: 1089 v_border: 0 (II) MGA(0): Ranges: V min: 48 V max: 85 Hz, H min: 30 H max: 94 kHz, PixClock max 170 MHz Deze informatie wordt EDID-informatie genoemd. Hiervan een ModeLine maken is gewoon een kwestie van de nummers in de juiste volgorde zetten: ModeLine <name> <clock> <4 horiz. timings> <4 vert. timings> Dus de ModeLine in Section "Monitor" zou er voor dit voorbeeld uitzien als: Section "Monitor" Identifier "Monitor1" VendorName "GroteNaam" ModelName "BesteModel" ModeLine "1680x1050" 146.2 1680 1784 1960 2240 1050 1053 1059 1089 Option "DPMS" EndSection Na het voltooien van deze eenvoudige stappen, zou X moeten starten op uw nieuwe breedbeeldmonitor. 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 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 aan het instellingenbestand van de X server (/etc/X11/xorg.conf): FontPath "/usr/local/lib/X11/fonts/URW/" Ook kan op de commando regel in de X sessie het volgende gestart worden: &prompt.user; xset fp+ /usr/local/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/local/etc/fonts/local.conf: zie hiervoor de paragraaf over Anti-aliasing. &truetype; lettertypen TrueType lettertypen lettertypen TrueType &xorg; heeft 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. Load "freetype" Hierna dient een map voor de &truetype; lettertypen gemaakt te worden (bijvoorbeeld /usr/local/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/local/lib/X11/fonts/TrueType &prompt.root; ttmkfdir -o fonts.dir Nu moet de &truetype; map toe aan het lettertypepad toegevoegd worden. Dit gebeurt op dezelfde wijze als boven is beschreven voor Type1 lettertypen: &prompt.user; xset fp+ /usr/local/lib/X11/fonts/TrueType &prompt.user; xset fp rehash of door een FontPath regel toe te voegen aan xorg.conf. 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 Antialias lettertypen antialias lettertypen lettertypen antialias Alle lettertypen die X11 in de mappen /usr/local/lib/X11/fonts/ en ~/.fonts/ staan zijn automatisch beschikbaar voor anti-aliasing in applicaties die Xft ondersteunen. De meeste recente applicaties ondersteunen Xft, inclusief KDE, GNOME, en Firefox. Om te kunnen regelen welke lettertypen gebruik maken van anti-alias of om de eigenschappen van anti-aliasing in te stellen kan /usr/local/etc/fonts/local.conf gemaakt of gewijzigd worden. In dit bestand kunnen speciale eigenschappen van het Xft lettertypesysteem aangepast worden. Deze paragraaf beschrijft 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/local/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/local/etc/fonts/local.conf toegevoegd te worden: <dir>/pad/naar/mijn/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 verticaal door midden lijkt gesneden. Op zijn ergst kan het applicaties 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. 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 scherm lettertypen LCD scherm 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. 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 autorisatie informatie (gebruikersnaam en wachtwoord) af. XDM levert de gebruiker dezelfde functionaliteit 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 Om XDM te gebruiken moet de port x11/xdm geïnstalleerd worden (het wordt in recente versies van &xorg; niet standaard geïnstalleerd). Het daemon-programma XDM is daarna beschikbaar in /usr/local/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 daemon XDM op een virtuele terminal te draaien: ttyv8 "/usr/local/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/local/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 Fouten die gegenereerd zijn door het serverprogramma. 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. Het wordt genegeerd, tenzij xdm-config is gewijzigd zodat er wordt geluisterd naar inkomende verbindingen. Standaard wordt het clients niet toegestaan te verbinden. 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 toegangscontrole aan te scherpen — hiervoor staan voorbeeldregels in Xaccess en lees de hulppagina &man.xdm.1; voor meer informatie. Alternatieven voor XDM Er bestaan diverse alternatieven voor het XDM programma. KDM (wordt geleverd bij KDE) wordt later in dit hoofdstuk behandeld. De beeldschermmanager KDM 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. De website bevat ook redelijk complete FAQ's over het installeren, instellen en beheren van GNOME. GNOME installeren De software kan eenvoudig worden geïnstalleerd vanuit een pakket of de Portscollectie: Om het GNOME pakket 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 Voor een correcte werking, vereist GNOME dat het /proc bestandssysteem gekoppeld is. Voeg proc /proc procfs rw 0 0 toe aan /etc/fstab om &man.procfs.5; automatisch te koppelen tijdens het opstarten. Zodra GNOME geïnstalleerd is, moet de X server verteld worden dat in plaats van de standaard window manager GNOME gebruikt moet worden. De meest eenvoudige manier om GNOME te starten is via GDM, de GNOME Display Manager. GDM wordt meegeïnstalleerd met de GNOME bureaubladomgeving, maar staat standaard uitgeschakeld. Dit programma kan ingeschakeld worden door het volgende toe te voegen aan /etc/rc.conf: gdm_enable="YES" Na een herstart zal GDM automatisch gestart worden. Meestal is het gewenst om alle GNOME applicaties tegelijkertijd met GDM te starten. Om dit te bereiken moet de volgende regel worden toegevoegd aan /etc/rc.conf: gnome_enable="YES" GNOME kan ook gestart worden vanaf de commandoregel door het bestand .xinitrc juist in te stellen. Als er al een .xinitrc is, dan hoeft alleen de regel die de huidige window manager start veranderd te worden in een regel die /usr/local/bin/gnome-session start. Als er niets speciaals met dit instellingenbestand is gedaan: &prompt.user; echo "/usr/local/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/local/bin/gnome-session: &prompt.user; echo "#!/bin/sh" > ~/.xsession &prompt.user; echo "/usr/local/bin/gnome-session" >> ~/.xsession &prompt.user; chmod +x ~/.xsession Het is ook mogelijk de beeldschermmanager 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. 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 55 talen; Gecentraliseerde, consistente, dialooggedreven bureaubladinstelling; Een grote hoeveelheid bruikbare KDE applicaties; KDE wordt geleverd met een webbrowser genaamd 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 website KDE/&os; initiatief. Er zijn twee versies van KDE beschikbaar op &os;. Versie 3 is sinds lange tijd aanwezig en is nog steeds beschikbaar in de Portscollectie alhoewel het nu onbeheerd en gedeeltelijk kapot is. Versie 4 wordt punctueel bijgewerkt en is de standaardkeuze voor gebruikers van KDE. Ze kunnen zelfs naast elkaar worden geïnstalleerd. KDE installeren Net als bij GNOME of iedere andere bureaubladomgeving kan de software eenvoudig geïnstalleerd met een pakket of uit de Portscollectie: Om het KDE 3 pakket van het netwerk te installeren: &prompt.root; pkg_add -r kde Om het KDE 4 pakket van het netwerk te installeren: &prompt.root; pkg_add -r kde4 &man.pkg.add.1; haalt automatisch de laatste versie van de applicatie op. Om KDE 3 vanuit de Portscollectie te bouwen en te installeren: &prompt.root; cd /usr/ports/x11/kde3 &prompt.root; make install clean Gebruik de Portscollectie om KDE 4 vanuit de broncode te bouwen: &prompt.root; cd /usr/ports/x11/kde4 &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: Voor KDE 3: &prompt.user; echo "exec startkde" > ~/.xinitrc Voor KDE 4: &prompt.user; echo "exec /usr/local/kde4/bin/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 applicaties 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 KDM te starten, moeten verschillende bestanden gewijzigd worden, afhankelijk van de versie van KDE. Voor KDE 3 dient de regel met ttyv8 als volgt aangepast te worden: ttyv8 "/usr/local/bin/kdm -nodaemon" xterm on secure Voor KDE 4 dient &man.procfs.5; te worden aangekoppeld en de volgende regel aan /etc/rc.conf te worden toegevoegd: kdm4_enable="YES" 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 efficiënt 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 meer zaken; Thema's (sinds het gebruik van GTK+); Snel, licht en efficiënt: 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 pakket 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/local/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/local/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.