[FAQ Index] [Naar Sectie 9 - Migreren naar OpenBSD] [Naar Sectie 11 - Het X Window System]
Op OpenBSD is het gebruikers die in de wheel groep zitten, toegelaten om su(1) te gebruiken om root te worden. Zoniet, den krijgt de gebruiker een foutmelding.
Als u nieuwe gebruikers aanmaakt met adduser(8), dan kunt u ze aan de wheel groep toevoegen door "wheel" te antwoorden op de vraag "Invite user into other groups:". Bestaande gebruikers moeten met de hand aan de wheel groep worden toegevoegd. Hier is een voorbeeld van een regel uit /etc/group waarbij de gebruiker ericj is toegevoegd aan de wheel groep:
wheel:*:0:root,ericj
Als u toegang tot superuser privileges wilt geven zonder gebruikers in de wheel groep te zetten, gebruik dan sudo(8).
Om uw bestandssysteem te dupliceren, gebruikt u dump(8) en restore(8). Om bijvoorbeeld alles onder directory SRC naar directory DST te dupliceren, doet u:
# cd /SRC; dump 0f - . | (cd /DST; restore -rf - )
dump is ontworpen om u een waaier aan backup mogelijkheden te geven, en het kan overkill zijn als u gewoon een onderdeel van (of een volledig) bestanddsysteem wil dupliceren. Het commando tar(1) kan voor deze handeling sneller zijn. Het formaat ziet er heel gelijkaardig uit:
# cd /SRC; tar cf - . | (cd /DST; tar xpf - )
De hoofdbestanden waarop een systeembeheerder zich zou moeten concentreren, zijn /etc/rc.conf (als richtlijn), /etc/rc.conf.local (voor wijzigingen), /etc/rc.local en /etc/rc.shutdown. Om een zicht te krijgen op hoe de rc(8) procedure werkt, volgt hier het schema:
Nadat de kernel geboot is, wordt /etc/rc gestart:
De meeste daemons en services die bij OpenBSD zitten worden bij het opstarten bestuurd door variabelen, gedefinieerd in het /etc/rc.conf configuratiebestand. Neem een kijkje naar het /etc/rc.conf bestand. U zal lijnen zien gelijkaardig aan deze:
ftpd_flags=NO # for non-inetd use: ftpd_flags=""
Een lijn als deze toont dat ftpd(8) niet samen met het systeem moet opstarten (tenminste niet via rc(8); ftpd wordt meestal gestart vanuit inetd(8), lees de Anonymous FTP FAQ om hierover meer te lezen). Elke lijn heeft een stukje commentaar dat u de vlaggen toont voor normaal gebruik van die daemon of service. Dit betekent niet dat u die daemon of service met die vlaggen moet draaien. Lees de relevante manual page om te zien hoe u die daemon of service kan laten opstarten op gelijk welke manier die u graag hebt.
We raden sterk aan om nooit /etc/rc.conf zelf aan te passen. Creëer of bewerk in plaats daarvan het bestand /etc/rc.conf.local, kopieer alleen de regels die u moet veranderen vanuit /etc/rc.conf en pas ze aan zoals u wilt. Dit maakt toekomstige upgrades makkelijker -- alle wijzigingen staan in één enkel bestand dat niet wordt aangeraakt tijdens een upgrade. Het standaard upgradeproces gaat er in feite vanuit dat u /etc/rc.conf niet gewijzigd heeft en zal het overschrijven met de nieuwe versie.
Hier is bijvoorbeeld de standaard regel die hoort bij httpd(8).
httpd_flags=NO # for normal use: "" (or "-DSSL" after reading ssl(8))
Hier kunt u zien dat bij het normaal opstarten van httpd geen vlaggen nodig zijn, dus een lijn als httpd_flags="" toegevoegd aan /etc/rc.conf.local is voldoende. Maar om httpd op te starten met SSL ingeschakeld (raadpleeg de SSL FAQ of ssl(8)), zou u moeten beginnen met een lijn als httpd_flags="-DSSL", al kan het zijn dat u andere parameters moet toevoegen om andere redenen.
Voor andere daemons die u misschien op het systeem zou installeren via packages of andere manieren, kunt u het /etc/rc.local bestand gebruiken. Ik heb bijvoorbeeld een daemon geïnstalleerd op /usr/local/sbin/daemonx. Ik wil hem opstarten bij het booten. Ik kan een regel als deze in /etc/rc.local zetten:
if [ -x /usr/local/sbin/daemonx ]; then echo 'Starting daemonx'; /usr/local/sbin/daemonx fi
(Als de daemon zich niet automatisch losmaakt bij het opstarten, onthou dan om een "&" toe te voegen aan het uiteinde van de commandoregel.)
Van nu af zal deze daemon gestart worden bij het booten. U zal fouten kunnen zien bij het booten, een normale boot zonder errors zou een lijn als deze vertonen:
Starting daemonx
Deze scipts, één per daemon, worden aangeroepen door rc. De volgorde voor systeem daemons is geprogrammeerd in rc en de volgorde voor toegevoegde packages wordt bestuurd door de pkg_scripts omgevingsvariabele, die ingesteld zou moeten wirden in /etc/rc.conf.local. Merk op het simpelweg plaatsen van een script in deze directory niet leidt tot het draaien bij het opstarten; de naam moet worden opgegeven in de pkg_scripts variable om te worden gestart bij het booten.
Het starten van systeem scripts wordt bepaald door regels in het /etc/rc.conf.local bestand. Bijvoorbeeld, /etc/rc.d/httpd zal niet httpd(1) starten, tenzij /etc/rc.conf of /etc/rc.conf.local een regel bevat die de "httpd_flags" variable definieert. Om ervoor te zorgen dat uw systeem bij de volgende boot opstart zoals u verwacht, draaien de rc.d scripts hun daemon niet als de bijbehorende variabele niet gedefinieerd is. U kunt /usr/sbin/httpd uiteraard handmatig aanroepen met alle opties die u wenst, als u het programma handmatig wilt draaien.
Merk op dat de meeste rc.d scripts kunnen worden gereduceerd tot het specificeren van een klein aantal variabele en het aanroepen van het rc.subr script, dat de standaardmanier van de meesten taken omvat, in plaats van ieder script zijn eigen opstart, afsluit, herlaad, herstart en controle-operaties te laten beheersen.
Onze daemonx applicatie van hierboven bijvoorbeeld, kan worden gestart met een /etc/rc.d bestand dat bestaat uit:
en het toevoegen van de naam van de daemon aan de pkg_scripts variable in /etc/rc.conf.local.#!/bin/sh daemon="/usr/local/sbin/daemonx" . /etc/rc.d/rc.subr rc_cmd $1
/etc/rc.shutdown is een script dat uitgevoerd wordt bij het afsluiten. Al wat u wil dat er gedaan wordt alvorens het systeem afsluit, moet aan dit bestand toegevoegd worden. Als u apm hebt, kan u ook "powerdown=YES" instellen, wat u het equivalent van "shutdown -p" zal geven.
Probeer dit:
# grep relay-domains /etc/mail/sendmail.cf
De uitvoer kan er ongeveer zo uitzien:
FR-o /etc/mail/relay-domains
Als dit bestand niet bestaat, maak het dan aan. U zal de hosts moeten invoeren die vanop afstand mail versturen, met de volgende syntaxis:
.domain.com #Allow relaying for/to any host in domain.com sub.domain.com #Allow relaying for/to sub.domain.com and any host in that domain 10.2 #Allow relaying from all hosts in the IP net 10.2.*.*
Vergeet niet om een 'HangUP' signaal te sturen naar sendmail (een signaal dat de meeste daemons hun configuratiebestand opnieuw laat inlezen):
# kill -HUP `head -1 /var/run/sendmail.pid`
De meeste problemen die te maken hebben met POP, zijn problemen met tijdelijke bestanden en lock-bestanden. Als uw pop server een foutboodschap als deze stuurt:
-ERR Couldn't open temporary file, do you own it?
Probeer dan uw permissies als volgt in te stellen:
permissie in /var drwxrwxr-x 2 bin mail 512 May 26 20:08 mail permissies in /var/mail -rw------- 1 username username 0 May 26 20:08 username
Iets anders om na te gaan is dat de gebruiker werkelijk zijn/haar eigen /var/mail bestand bezit. Natuurlijk zou dit het geval moeten zijn (zoals /var/mail/joe bezit van joe zou moeten zijn) maar als dit niet correct is ingesteld, zou dat het probleem kunnen zijn!
Natuurlijk, /var/mail schrijfbaar maken voor de groep mail opent enkele vage en obscure beveiligingsproblemen. Het is waarschijnlijk dat u er nooit problemen mee zal hebben. Maar het zou kunnen (vooral als u een high profile site, ISP, ... bent)! Er zijn verscheidene POP servers die u meteen kan installeren vanuit de ports verzameling. Indien mogelijk, gebruik dan popa3d die beschikbaar is in de OpenBSD basisinstallatie. Of, u zou gewoon de verkeerde opties geselecteerd kunnen hebben voor uw pop daemon (zoals dot locking). Of, u moet misschien gewoon de directory veranderen waarin hij lockt (hoewel de locking dan alleen waardevol zou zijn voor de POP daemon.)
Opmerking: OpenBSD heeft geen groepnaam "mail". U moet deze aanmaken in uw /etc/group bestand als u hem nodig hebt. Een entry als:
mail:*:6:
zou volstaan.
Standaard gebruikt Sendmail DNS voor naamresolutie, niet het /etc/hosts bestand. Het gedrag kan veranderd worden door gebruik van het /etc/mail/service.switch bestand.
Indien u het hosts bestand wil raadplegen vóór DNS servers, maak dan een /etc/mail/service.switch bestand aan dat de volgende lijn bevat:
hosts files dns
Als u ENKEL het hosts bestand wenst te raadplegen, gebruik dan het volgende:
hosts files
Stuur Sendmail een HUP signaal:
# kill -HUP `head -1 /var/run/sendmail.pid`
en de veranderingen zullen resultaat hebben.
OpenBSD wordt verspreid met een SSL-ready httpd en RSA libraries. Voor gebruik met httpd(8), moet u eerst een certificaat laten aanmaken. Dit zal bewaard worden in /etc/ssl/ met de overeenkomstige sleutel in /etc/ssl/private/. De hier getoonde stappen zijn voor een deel overgenomen van de ssl(8) man pagina. Raadpleeg die voor verdere informatie. Deze FAQ entry schetst alleen hoe u een RSA certificaat aanmaakt voor web servers, niet een DSA server certificaat. Om te weten te komen hoe u dat doet, raadpleeg alstublieft de ssl(8) man pagina.
Om te beginnen, moet u uw server sleutel en certificaat maken met OpenSSL:
# openssl genrsa -out /etc/ssl/private/server.key 2048
Of, als u wenst dat de sleutel vercijferd wordt met een passphrase die u zal moeten intypen bij het starten van de servers
# openssl genrsa -des3 -out /etc/ssl/private/server.key 2048
De volgende stap is het genereren van een Certificate Signing Request dat gebruikt wordt om een Certifying Authority (CA) uw certificaat te laten ondertekenen. Om dit te doen, gebruikt u het commando:
# openssl req -new -key /etc/ssl/private/server.key -out /etc/ssl/private/server.csr
Dit server.csr bestand kan vervolgens aan een Certifying Authority gegeven worden die de sleutel zal ondertekenen. Eén zulke CA is Thawte Certification die u kan bereiken op http://www.thawte.com/.
Als u zich dat niet kan veroorloven, of gewoon zelf het certificaat wil ondertekenen, kan u het volgende gebruiken.
# openssl x509 -sha256 -req -days 365 -in /etc/ssl/private/server.csr \
-signkey /etc/ssl/private/server.key -out /etc/ssl/server.crt
Met /etc/ssl/server.crt en /etc/ssl/private/server.key op hun plaats, zou u httpd(8) moeten kunnen starten met de -DSSL vlag (zie de sectie over rc(8) in deze faq), wat https transacties met uw machine toelaat op poort 443.
Als u /etc/passwd rechtstreeks bewerkt, zullen uw wijzigingen verloren gaan. OpenBSD genereert /etc/passwd dynamisch met pwd_mkdb(8). Het hoofdwachtwoordbestand in OpenBSD is /etc/master.passwd. Volgens pwd_mkdb(8),
FILES
/etc/master.passwd current password file
/etc/passwd a 6th Edition-style password file
/etc/pwd.db insecure password database file
/etc/pwd.db.tmp temporary file
/etc/spwd.db secure password database file
/etc/spwd.db.tmp temporary file
In een traditioneel Unix wachtwoordbestand, zoals /etc/passwd, is alles, met inbegrip van het vercijferde wachtwoord van de gebruiker, beschikbaar voor gelijk wie op het systeem (en is een uitstekend doelwit voor programma's als Crack). 4.4BSD introduceerde het master.passwd bestand, dat een uitgebreid formaat heeft (met bijkomende opties bovenop die voorzien door /etc/passwd) en enkel door root leesbaar is. Voor snellere toegang tot gegevens, lezen de library aanroepen die deze gegevens opvragen, normaal gezien /etc/pwd.db en /etc/spwd.db.
OpenBSD voorziet een tool waarmee u uw wachtwoordbestand zou moeten bewerken. Het heet vipw(8). Vipw zal vi (of uw favoriete editor gedefinieerd door $EDITOR) gebruiken om /etc/master.passwd te bewerken. Nadat u gedaan hebt met bewerken, zal het /etc/passwd, /etc/pwd.db, en /etc/spwd.db opnieuw aanmaken met uw wijzigingen. Vipw zorgt ook voor het locken van deze bestanden, zodat als iemand anders probeert om ze terzelfdertijd te veranderen, hun de toegang geweigerd zal worden.
OpenBSD voorziet twee commando's om gemakkelijk gebruikers toe te voegen aan het systeem:
U kan ook met de hand gebruikers toevoegen met vipw(8), maar dit is moeilijker voor de meeste handelingen.De gemakkelijkste manier om een gebruiker toe te voegen in OpenBSD is door het adduser(8) script te gebruiken. U kan adduser(8) configureren door /etc/adduser.conf te bewerken. adduser(8) laat consistentiecontrole toe op /etc/passwd, /etc/group, en shell databanken. Het zal de entries en $HOME directories voor u maken. Het kan zelfs een bericht naar de gebruiker versturen om ze te verwelkomen. Hier is een voorbeeldgebruiker, testuser, die toegevoegd wordt aan het systeem. Hij/zij zal de $HOME directory /home/testuser krijgen, lid gemaakt worden van de groep guest, en de shell /bin/ksh krijgen.
# adduser Use option ``-silent'' if you don't want to see all warnings and questions. Reading /etc/shells Check /etc/master.passwd Check /etc/group Ok, let's go. Don't worry about mistakes. There will be a chance later to correct any input. Enter username []: testuser Enter full name []: Test FAQ User Enter shell csh ksh nologin sh [ksh]: ksh Uid [1002]: Enter Login group testuser [testuser]: guest Login group is ``guest''. Invite testuser into other groups: guest no [no]: no Login class authpf daemon default staff [default]: Enter Enter password []: Type password, then Enter Enter password again []: Type password, then Enter Name: testuser Password: **** Fullname: Test FAQ User Uid: 1002 Gid: 31 (guest) Groups: guest Login Class: default HOME: /home/testuser Shell: /bin/ksh OK? (y/n) [y]: y Added user ``testuser'' Copy files from /etc/skel to /home/testuser Add another user? (y/n) [y]: n Goodbye!
Om gebruikers te verwijderen zou u de rmuser(8) utility moeten gebruiken. Dit zal elk bestaan van een gebruiker verwijderen. Het zal crontab(1) entries, hun $HOME dir (als deze toebehoort aan de gebruiker in kwestie), en hun mail verwijderen. Natuurlijk zal het ook hun /etc/passwd en /etc/group entries verwijderen. Het volgende is een voorbeeld van het verwijderen van de gebruiker die hierboven werd toegevoegd. Merk op dat u gevraagd wordt om de naam, en of u al dan niet de home directory van de gebruiker wil verwijderen.
# rmuser Enter login name for user to remove: testuser Matching password entry: testuser:$2a$07$ZWnBOsbqMJ.ducQBfsTKUe3PL97Ve1AHWJ0A4uLamniLNXLeYrEie:1002 :31::0:0:Test FAQ User:/home/testuser:/bin/ksh Is this the entry you wish to remove? y Remove user's home directory (/home/testuser)? y Updating password file, updating databases, done. Updating group file: done. Removing user's home directory (/home/testuser): done.
Deze tools zijn minder interactief dan het adduser(8) commando, wat ze gemakkelijker maakt om in scripts te gebruiken.
De volledige verzameling tools is:
Het commando /usr/sbin/user is slechts een front-end voor de rest van de /usr/sbin/user* commando's. Daarom kunnen de volgende commando's toegevoegd worden door user add of useradd te gebruiken, de vorm die u kiest het verandert het resultaat helemaal niet. Denk eraan, dat aangezien user(8) niet interactief is, u met adduser(8) het eenvoudigst gebruikers toe kunt voegen.
useradd(8) is minder uitdagend in het gebruik als u de standaardinstellingen van te voren weet. Deze instellingen zijn opgeslagen in usermgmt.conf(5) en kunnen als volgt worden bekeken:
$ user add -D group users base_dir /home skel_dir /etc/skel shell /bin/csh inactive 0 expire Null (unset) range 1000..60000
Deze standaardinstellingen worden gebruikt tenzij u anders specificeert met commandoregelopties. We willen de gebruiker bijvoorbeeld toevoegen aan de groep guest, niet users. Nog een kleine hindernis bij het toevoegen van gebruikers, is dat wachtwoorden gespecificeerd moeten worden op de commandoregel. Het is belangrijk dat de wachtwoorden worden versleuteld, dus u moet de encrypt(1) utility gebruiken. Bijvoorbeeld: OpenBSD's wachtwoorden gebruiken standaard het Blowfish algoritme voor 6 rondes. Hier is een voorbeeld om een vercijferd wachtwoord aan te maken om op te geven aan useradd(8).
$ encrypt -p -b 6 Enter string: $2a$06$YOdOZM3.4m6MObBXjeZtBOWArqC2.uRJZXUkOghbieIvSWXVJRzlq
Nu we een vercijferd wachtwoord hebben, zijn we klaar om de gebruiker toe te voegen. We zullen de gebruiker toevoegen met dezelfde specificaties als de gebruiker die we hierboven hebben toegevoegd met adduser(8).
# user add -p '$2a$06$YOdOZM3.4m6MObBXjeZtBOWArqC2.uRJZXUkOghbieIvSWXVJRzlq' -u 1002 \ -s /bin/ksh -c "Test FAQ User" -m -g guest testuser
Opmerking: Zorg ervoor om ' ' (enkelvoudige aanhalingstekens) rond de wachtwoordstring te gebruiken, geen " " (dubbele aanhalingstekens) aangezien de shell deze zal interpreteren alvorens het naar user(8) te sturen. Zorg er bovendien voor dat u de -m optie specificeert als u wil dat de home directory van de gebruiker wordt aangemaakt en de bestanden vanuit /etc/skel overgekopieerd worden.
Om te zien of de gebruiker juist werd aangemaakt, kunnen we vele verschillende utilities gebruiken. Hieronder zijn een aantal commando's die u kan gebruiken om snel na te gaan of alles juist werd aangemaakt.
$ ls -la /home total 14 drwxr-xr-x 5 root wheel 512 May 12 14:29 . drwxr-xr-x 15 root wheel 512 Apr 25 20:52 .. drwxr-xr-x 24 ericj wheel 2560 May 12 13:38 ericj drwxr-xr-x 2 testuser guest 512 May 12 14:28 testuser $ id testuser uid=1002(testuser) gid=31(guest) groups=31(guest) $ finger testuser Login: testuser Name: Test FAQ User Directory: /home/testuser Shell: /bin/ksh Last login Sat Apr 22 16:05 (EDT) on ttyC2 No Mail. No Plan.
Bovenop deze commando's, voorziet user(8) zijn eigen utility om gebruikerseigenschappen te tonen, genaamd userinfo(8).
$ userinfo testuser login testuser passwd * uid 1002 groups guest change Wed Dec 31 19:00:00 1969 class gecos Test FAQ User dir /home/testuser shell /bin/ksh expire Wed Dec 31 19:00:00 1969
Om gebruikers te verwijderen met de user(8) hiërarchie van commando's, zal u userdel(8) gebruiken. Dit is een heel eenvoudig, maar bruikbaar commando. Om de gebruiker die in het laatste voorbeeld werd aangemaakt, te verwijderen, doet u gewoon
# userdel -r testuser
Bemerk de -r optie, die moet opgegeven worden als u wil dat de home directory van de gebruiker eveneens verwijderd wordt. Als alternatief kan u -p en niet -r specificeren en dit zal de account van de gebruiker locken, maar geen informatie verwijderen.
Er zijn een aantal manieren om dit te doen, maar een veel voorkomende manier om dit te doen is door "/usr/bin/false" toe te voegen aan "/etc/shells". Wanneer u vervolgens de shell van een gebruiker instelt op "/usr/bin/false", zullen ze niet interactief kunnen inloggen, maar wel ftp mogelijkheden kunnen gebruiken. U wil misschien ook de toegang beperken door gebruikers in hun home directory vast te zetten in ftpd.
Quota's worden gebruikt om ruimte voor gebruikers die ze voor zichzelf ter beschikking hebben, te beperken op uw schijven. Dit kan heel nuttig zijn in situaties waarin u beperkte middelen hebt. Quota's kunnen ingesteld worden per gebruiker en/of per groep.
De eerste stap om quota's in te stellen is er voor te zorgen dat "option QUOTA" in uw Kernel Configuratie staat. Deze optie staat in de GENERIC kernel. Daarna moet u in /etc/fstab de bestandssystemen aangeven waarbij quota's zullen ingeschakeld worden. De sleutelwoorden userquota en groupquota moeten gebruikt worden om elk bestandssysteem aan te duiden waarop u quota's zal gaan gebruiken. Standaard zullen de bestanden quota.user en quota.group aangemaakt worden in de root van dat bestandssysteem om de quota informatie te bewaren. Deze standaard kan overschreven worden door de bestandsnaam te specificeren bij de quota optie in /etc/fstab, zoals "userquota=/var/quotas/quota.user". Hier is een voorbeeld van /etc/fstab die één bestandssysteem heeft met userquota's ingeschakeld, en het quotabestand in een niet-standaard locatie:
/dev/wd0a / ffs rw,userquota=/var/quotas/quota.user 1 1
Nu is het tijd om de quota's voor de gebruiker in te stellen. Om dat te doen gebruikt u de utility edquota(8). Een eenvoudig gebruik is gewoon "edquota <user>". edquota(8) zal vi(1) gebruiken om de quota's aan te passen tenzij de omgevingsvariabele EDITOR ingesteld is op een andere editor. Bijvoorbeeld:
# edquota ericj
Dit zal uitvoer geven gelijkaardig aan deze:
Quotas for user ericj:
/: KBytes in use: 62, limits (soft = 0, hard = 0)
inodes in use: 25, limits (soft = 0, hard = 0)
Om limieten toe te voegen, bewerkt u het om resultaten als deze te geven:
Quotas for user ericj:
/: KBytes in use: 62, limits (soft = 1000, hard = 1050)
inodes in use: 25, limits (soft = 0, hard = 0)
Merk op dat de quota toekenning in 1k blokken gebeurt. In dit geval is de softlimit ingesteld op 1000k, en de hardlimit op 1050k. Een softlimit is een limiet waarbij de gebruikers gewoon gewaarschuwd worden als ze er over gaan en tot hun grace period voorbij is, de tijd hebben om hun schijfgebruik onder hun limiet te brengen. Grace periods kunnen ingesteld worden met de -t optie van edquota(8). Nadat de grace period voorbij is, wordt de softlimit behandeld als een hardlimit. Dit leidt gewoonlijk tot een allocatiefout.
Nu de quota's ingesteld zijn, moet u de quota's aanzetten. Om dit te doen gebruikt u quotaon(8). Bijvoorbeeld:
# quotaon -a
Dit loopt /etc/fstab af om de bestandssystemen met quota-opties aan te zetten. Nu de quota's goed en wel draaien, kan u ze zien met quota(1). Een commando "quota <user>" zal de informatie voor die gebruiker geven. Wanneer het opgeroepen wordt zonder argumenten, zal het quota(1) commando uw quota statistieken geven. Bijvoorbeeld:
# quota ericj
Zal leiden tot uitvoer gelijkaardig aan:
Disk quotas for user ericj (uid 1001):
Filesystem blocks quota limit grace files quota limit grace
/ 62 1000 1050 27 0 0
Standaard zullen quota's ingesteld in /etc/fstab opgestart worden bij het booten. Om ze uit te zetten, gebruikt u
# quotaoff -a
OpenBSD bevat KerberosV als een voorgeïnstalleerde component van het standaard systeem.
Gebruik voor meer informatie over KerberosV, vanaf uw OpenBSD systeem, het commando:
# info heimdal
Anonymous FTP laat gebruikers zonder account toe om bestanden op uw computer op te vragen via het File Transfer Protocol. Hier zal een overzicht gegeven worden van het instellen van de anonymous FTP server, zijn logging, enz.
Om te beginnen moet u een ftp account op uw systeem hebben. Deze account mag geen bruikbaar wachtwoord hebben. Hier zullen we de login directory op /home/ftp instellen, maar u kan deze zetten waar u maar wil. Bij gebruik van anonymous ftp, zal de daemon zichzelf chroot'en in de home directory van de ftp gebruiker. Om daarover meer te lezen, leest u de ftpd(8) en chroot(2) man pagina's. Hier is een voorbeeld van het toevoegen van de ftp gebruiker. Ik zal dit doen met adduser(8). We moeten ook /usr/bin/false toevoegen aan onze /etc/shells, dit is de "shell" die we aan de ftp gebruiker zullen geven. Dit zal hun niet toelaten in te loggen, ook al zullen we hen een leeg wachtwoord geven. Om dit te doen kan u gewoon het volgende doen:
Daarna bent u klaar om de ftp gebruiker toe te voegen:echo /usr/bin/false >> /etc/shells
# adduser Use option ``-silent'' if you don't want to see all warnings and questions. Reading /etc/shells Check /etc/master.passwd Check /etc/group Ok, let's go. Don't worry about mistakes. There will be a chance later to correct any input. Enter username []: ftp Enter full name []: anonymous ftp Enter shell csh false ksh nologin sh [ksh]: false Uid [1002]: Enter Login group ftp [ftp]: Enter Login group is ``ftp''. Invite ftp into other groups: guest no [no]: no Login class authpf daemon default staff [default]: Enter Enter password []: Enter Set the password so that user cannot logon? (y/n) [n]: y Name: ftp Password: **** Fullname: anonymous ftp Uid: 1002 Gid: 1002 (ftp) Groups: ftp Login Class: default HOME: /home/ftp Shell: /usr/bin/false OK? (y/n) [y]: y Added user ``ftp'' Copy files from /etc/skel to /home/ftp Add another user? (y/n) [y]: n Goodbye!
Samen met de gebruiker, heeft dit de directory /home/ftp aangemaakt. Dit is wat we willen, maar er zijn enkele veranderingen die we zullen moeten doen om het klaar te maken voor anonymous ftp. Opnieuw worden deze veranderingen uitgelegd in de ftpd(8) man pagina.
U moet NIET een /home/ftp/usr of /home/ftp/bin directory aanmaken.
Merk op dat al deze directories ''root'' als owner zouden moeten hebben. Hier is een lijst van hoe de directories er zouden moeten uitzien na het aanmaken.
# pwd /home # ls -laR ftp total 5 dr-xr-xr-x 5 root ftp 512 Jul 6 11:33 . drwxr-xr-x 7 root wheel 512 Jul 6 10:58 .. dr-x--x--x 2 root ftp 512 Jul 6 11:34 etc dr-xr-xr-x 2 root ftp 512 Jul 6 11:33 pub ftp/etc: total 43 dr-x--x--x 2 root ftp 512 Jul 6 11:34 . dr-xr-xr-x 5 root ftp 512 Jul 6 11:33 .. -r--r--r-- 1 root ftp 316 Jul 6 11:34 group -r--r--r-- 1 root ftp 40960 Jul 6 11:34 pwd.db ftp/pub: total 2 dr-xr-xr-x 2 root ftp 512 Jul 6 11:33 . dr-xr-xr-x 5 root ftp 512 Jul 6 11:33 ..
U kan kiezen of u ftpd laat opstarten door inetd(8) of via de rc scripts. Deze voorbeelden zullen tonen dat onze daemon opgestart wordt vanuit inetd.conf. Eerst moeten we vertrouwd raken met enkele van de opties van ftpd. De standaard lijn van /etc/inetd.conf is:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -US
Hier wordt ftpd aangeroepen met -US. Dit zal anonymous verbindingen loggen naar /var/log/ftpd en aan de gang zijnde sessies naar /var/run/utmp. Dat zal toelaten om deze sessies te zien met who(1). Voor sommigen wil u misschien alleen een anonymous server draaien, en ftp niet toestaan voor gebruikers. Om dat te doen moet u ftpd aanroepen met de -A optie. Hier is een lijn die ftpd opstart enkel voor anonymous verbindingen. Deze gebruikt ook -ll wat elke verbinding logt naar syslog, samen met de get, retrieve, enz., ftp commando's.
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -llUSA
Opmerking: Voor mensen die DRUK verkeer ftp servers gebruiken, wil u misschien ftpd niet aanroepen vanuit inetd.conf. De beste optie is om de ftpd lijn in inetd.conf te commentariëren en ftpd te starten vanuit rc.conf.local. Dit zal ftpd starten als een daemon, en heeft veel minder overhead dan ftp starten vanuit inetd. Hier is een voorbeeldlijn om het te starten vanuit rc.conf.local.
ftpd_flags="-llUSA" # for non-inetd use: ftpd_flags=""
Dit werkt natuurlijk alleen als u ftpd uit /etc/inetd.conf gehaald hebt en inetd zijn configuratiebestand opnieuw heeft laten lezen.
Het is niet nodig om extra opstartopties aan ftpd te geven om anonieme connecties toe te staan. De voorgaande stappen van het aanmaken van de 'ftp'-gebruiker en de relevante directories te configureren met de juiste permissies is voldoende. Echter, om anonieme connecties te stoppen is het niet nodig om alles ongedaan te maken. Herstart ftpd alleen maar inclusief de -n optie. Anonieme connecties zijn dan uitgeschakeld.
Standaard kunnen gebruikers, wanneer ze inloggen via ftp, naar gelijk welke directory gaan op het bestandssysteem waar ze toegang toe hebben. Dit kan in sommige gevallen niet gewenst zijn. Het is mogelijk om te beperken wat gebruikers kunnen zien via ftp sessies, door ze te chroot'en in hun home directory.
Als u alleen chrooted ftp logins wenst toe te laten, gebruik dan de -A optie van ftpd(8).
Als u ze nauwkeuriger wil toepassen, maken OpenBSD's login capability infrastructuur en ftpd(8) dit samen gemakkelijk.
Gebruikers in een login klasse met de ftp-chroot variabele ingesteld, worden automatisch gechroot. Bovendien kan u een gebruikersnaam toevoegen aan het bestand /etc/ftpchroot om die gebruikersnamen te chroot'en. Een gebruiker moet slechts op één van deze plaatsen vermeld staan.
Zelfs in OpenBSD komen er bugs voor. Sommige bugs kunnen tot betrouwbaarheidsproblemen leiden (dus iets kan ervoor zorgen dat het systeem ophoudt te functioneren zoals gewenst). Andere bugs kunnen tot beveiligingsproblemen leiden (wat anderen kan toelaten uw computer op onbedoelde en niet-geauthoriseerde manieren te "gebruiken"). Wanneer een kritieke bug gevonden wordt, zal de correctie gecommit worden in de -current source tree, en zullen patches verschijnen voor de ondersteunde versies van OpenBSD. Deze patches verschijnen op de errata webpagina, en worden onderverdeeld in "algemene" errata die alle platformen treffen, en errata die slechts individuele platformen treffen.
Merk echter op dat er geen patches uitgegeven worden voor nieuwe functies of ondersteuning van additionele hardware voor OpenBSD en dat deze alleen worden uitgegeven voor belangrijke betrouwbaarheids- of beveiligingsproblemen die best meteen worden aangepakt op getroffen systemen (wat vaak NIET alle systemen is, afhankelijk van hun doel).
Er zijn drie manieren om uw systeem te updaten met gepatchte code:
Alle patches vermeld op de errata webpagina zijn patches rechtstreeks tegen de source tree van de aangegeven release. Patches tegen de laatse CVS tree zouden ook andere veranderingen kunnen bevatten die niet gewenst zouden zijn op een release systeem. Dit is belangrijk: Als u een snapshot geïnstalleerd hebt, de source trees uitgecheckt hebt op het tijdstip wanneer u dat snapshot verkreeg en deze probeert te patchen met een gepubliceerde patch, kan u mogelijk vaststellen dat de patch niet werkt, aangezien de code kan veranderd zijn.
Patches voor het OpenBSD Besturingssysteem worden verspreid als "Unified diffs", dit zijn tekstbestanden die verschillen met de oorspronkelijke broncode bevatten. Ze worden NIET verspreid in binaire vorm. Dit betekent dat u de broncode van de RELEASE versie van OpenBSD beschikbaar moet hebben om de patch toe te passen. In het algemeen is het aan te raden om de volledige source tree beschikbaar te hebben voordat u een patch toepast. Als u een release van de officiële CD-ROM draait, is de broncode als bestanden beschikbaar op schijf 3, ze zijn ook beschikbaar via de FTP servers. We zullen veronderstellen dat u de volledige tree uitgecheckt hebt.
Voor ons voorbeeld hier, zullen we naar patch 001 voor OpenBSD 3.6 kijken, die te maken heeft met de st(4) driver, die tape drives afhandelt. Zonder deze patch, was het herstellen van gegevens van backups erg moeilijk. Mensen die een tape drive gebruiken hadden deze patch nodig, zij zonder tape drive hadden misschien niet bepaald de behoefte om deze te installeren. Laten we de patch bekijken:
# more 001_st.patch
Apply by doing:
cd /usr/src
patch -p0 < 001_st.patch
Rebuild your kernel.
Index: sys/scsi/st.c
===================================================================
RCS file: /cvs/src/sys/scsi/st.c,v
retrieving revision 1.41
retrieving revision 1.41.2.1
diff -u -p -r1.41 -r1.41.2.1
--- sys/scsi/st.c 1 Aug 2004 23:01:06 -0000 1.41
+++ sys/scsi/st.c 2 Nov 2004 01:05:50 -0000 1.41.2.1
@@ -1815,7 +1815,7 @@ st_interpret_sense(xs)
u_int8_t skey = sense->flags & SSD_KEY;
int32_t info;
- if (((sense->flags & SDEV_OPEN) == 0) ||
+ if (((sc_link->flags & SDEV_OPEN) == 0) ||
(serr != 0x70 && serr != 0x71))
return (EJUSTRETURN); /* let the generic code handle it */
Zoals u zal opmerken, bevat het bovenste deel van de patch korte instructies
omtrent het aanbrengen ervan.
We zullen aannemen dat u deze patch in de /usr/src directory gezet
hebt, in dat geval worden de volgende stappen gebruikt:
Let op de "Hunk #1 succeeded" boodschap hierboven. Dit geeft aan dat de patch met succes werd aangebracht. Vele patches zijn complexer dan deze, en zullen meerdere "hunks" en meerdere bestanden met zich meebrengen, in dat geval moet u verifiëren dat alle hunks gelukt zijn op alle bestanden. Als dat niet gelukt is, betekent het gewoonlijk dat uw source tree anders was dan de source tree van de release waarvan de patch is gemaakt, of dat u de instructies niet nauwkeurig gevolgd hebt, of dat uw patch verminkt is. Patches zijn heel gevoelig voor "white space" -- kopiëren en plakken vanuit uw browser zal vaak tab tekens veranderen naar spaties of op een andere manier de white space van een bestand veranderen, waardoor de patch ontoepasbaar wordt.# cd /usr/src # patch -p0 < 001_st.patch Hmm... Looks like a unified diff to me... The text leading up to this was: -------------------------- |Apply by doing: | cd /usr/src | patch -p0 < 001_st.patch | |Rebuild your kernel. | |Index: sys/scsi/st.c |=================================================================== |RCS file: /cvs/src/sys/scsi/st.c,v |retrieving revision 1.41 |retrieving revision 1.41.2.1 |diff -u -p -r1.41 -r1.41.2.1 |--- sys/scsi/st.c 1 Aug 2004 23:01:06 -0000 1.41 |+++ sys/scsi/st.c 2 Nov 2004 01:05:50 -0000 1.41.2.1 -------------------------- Patching file sys/scsi/st.c using Plan A... Hunk #1 succeeded at 1815. <-- Hou deze boodschap in de gaten! done
Op dit punt kunt u de kernel bouwen en installeren en vervolgens het systeem herstarten zoals normaal.
Niet alle patches zijn voor de kernel. In sommige gevallen zult u individuele utilities moeten herbouwen. Andere keren zal het vereist zijn dat u alle utilities hercompileert die statisch gelinkt zijn met een gepatchte library. Volg de begeleiding in de hoofding van de patch, en indien u onzeker bent, bouw dan het gehele systeem opnieuw.
Patches die irrelevant zijn voor uw bepaald systeem, hoeven niet aangebracht te worden -- gewoonlijk. Bijvoorbeeld, als u geen tape drive op uw systeem had, zou u geen voordeel hebben bij de bovenstaande patch. Patches worden echter verondersteld om "in volgorde" aangebracht te worden -- het is mogelijk dat een latere patch afhankelijk is van een vroegere. Wees u hiervan bewust als u verkiest om "uit te kiezen" welke patches u aanbrengt, en indien u twijfelt, breng ze dan allemaal aan, in volgorde.
In OpenBSD werd de Apache httpd(8) server standaard chroot(2)ed. Hoewel dit een enorme bevordering is voor de veiligheid, kan het problemen scheppen, als u zich niet voorbereidt.
Botweg gezegd, is Apache chroot(2)en iets dat niet standaard gebeurt in de meeste andere besturingssystemen. Vele toepassingen en systeemconfiguraties zullen niet werken in een chroot(2) zonder wat aanpassing. Verder moet onthouden worden dat veiligheid en gemak vaak geen compatibele doelstellingen zijn. OpenBSD's implementatie van Apache compromitteert veiligheid niet voor functionaliteit of "gemak".
# apachectl stop
hernoem uw logbestanden
# apachectl start ; sleep 10 ; apachectl start
Ja, de laatste lijn probeert onmiddelijk apache te herstarten, en indien
dat mislukt, wacht het enkele seconden en probeert opnieuw.
En ja, dat betekent dat gedurende enkele seconden telkens wanneer u uw
logs roteert, uw webserver niet beschikbaar zal zijn.
Terwijl dit vervelend kan zijn, is elke poging om httpd(8) toe te laten om
bestanden te heropenen na chroot(2)en, de doelstelling van de chroot
dwarsbomen!
Er zijn ook andere strategieën beschikbaar, waaronder het loggen naar een
pipe(2),
en het gebruik van een externe logroteerder aan het andere uiteinde van de
pipe(2).
Eerst installeren we de wwwcount package. We configureren en testen het, en we stellen vast dat het niet lijkt te werken, we krijgen een Apache boodschap die "Internal Server Error" zegt. De eerste stap is om Apache te stoppen en te herstarten met de -u vlag om te verifiëren dat het probleem in het chroot(2)en ligt, en niet in de systeemconfiguratie.
Hierna zien we dat de teller juist werkt, ten minste nadat we de eigenaar van een directory veranderen zodat Apache (en de CGI's die het draait) kan schrijven naar de bestanden die het bijhoudt. We hebben dus zeker een chroot probleem, dus we stoppen en herstarten Apache opnieuw, met de standaard chrooting:# apachectl stop /usr/sbin/apachectl stop: httpd stopped # httpd -u
# apachectl stop /usr/sbin/apachectl stop: httpd stopped # httpd
Een goed vertrekpunt zou zijn om te veronderstellen dat wwwcount enkele libraries en andere bestanden gebruikt die het niet kan vinden vanuit de chroot. We kunnen het ldd(1) commando gebruiken om dynamische object dependencies te weten te komen die de CGI nodig heeft:
# cd /var/www/cgi-bin/
# ldd Count.cgi
Count.cgi:
Start End Type Open Ref GrpRef Name
1c000000 3c007000 exe 1 0 0 /var/www/cgi-bin/Count.cgi
0c085000 2c0be000 rlib 0 1 0 /usr/lib/libc.so.57.0
08713000 08713000 rtld 0 1 0 /usr/libexec/ld.so
Ok, hier is een probleem, twee bestanden die niet beschikbaar zijn in de
chroot(2) omgeving.
We kopiëren ze dus:
en proberen de teller opnieuw.# mkdir -p /var/www/usr/lib /var/www/usr/libexec # cp /usr/lib/libc.so.57.0 /var/www/usr/lib # cp /usr/libexec/ld.so /var/www/usr/libexec
Wel, nu draait het programma ten minste, en het geeft ons rechtstreeks foutboodschappen: "Unable to open config file for reading". Vooruitgang geboekt, maar nog niet klaar. Het configuratiebestand staat normaal in /var/www/wwwcount/conf, maar binnen de chroot omgeving, lijkt dat /wwwcount/conf te zijn. Onze mogelijkheden zijn ofwel het programma te hercompileren om het te laten werken waar de bestanden nu staan, of de gegevensbestanden te verplaatsen. Aangezien we van een package installeerden, zullen we gewoon het gegevensbestand verplaatsen. Om dezelfde configuratie ofwel chroot(2)ed of niet te gebruiken, zullen we een symbolische link gebruiken:
Merk op dat de symbolische link gemaakt is om binnen de chroot te werken. Opnieuw testen we... en we stellen vast dat we nog een ander probleem hebben. Nu klaagt wwwcount dat het de "strip image" bestanden niet kan vinden die het gebruikt om boodschappen weer te geven. Na een beetje zoekwerk vinden we dat deze bewaard worden in /usr/local/lib/wwwcount, dus we moeten die ook nog in de chroot kopiëren.# mkdir -p /var/www/var/www # cd /var/www/var/www # ln -s ../../wwwcount wwwcount
we testen opnieuw... en het werkt!# tar cf - /usr/local/lib/wwwcount | (cd /var/www; tar xpf - )
Merk op dat we alleen bestanden hebben gekopieerd die absoluut vereist zijn voor de werking. In het algemeen moet alleen het minimum aan bestanden nodig om een toepassing te draaien, gekopieerd worden in de chroot.
Niet elke toepassing kan of moet ge-chroot(2)ed worden.
De doelstelling is een veilige webserver, chroot(2)en is gewoon een hulpmiddel om dit te verwezenlijken, het is niet de doelstelling zelf. Onthou dat de beginconfiguratie van OpenBSD's gechroot(2)ed Apache is dat de gebruiker die het httpd(8) programma draait, geen andere programma's kan draaien, geen bestanden kan wijzigen, en niet de identiteit van een andere gebruiker kan aannemen. Versoepel deze beperkingen, en u hebt de beveiliging verminderd, chroot of geen chroot.
Sommige toepassingen zijn vrij eenvoudig, en ze chroot(2)en houdt steek. Andere zijn heel complex, en ofwel zijn ze niet de moeite om ze in een chroot(2) te dwingen, ofwel hebt u, tegen de tijd dat u voldoende van het systeem in de chroot kopieert, het voordeel van de chroot(2) omgeving verloren. Het OpenWebMail programma vereist bijvoorbeeld de mogelijkheid om te lezen en te schrijven naar de mail directory, de home directory van de gebruiker, en moet als gelijk welke gebruiker kunnen werken op het systeem. Proberen om het in een chroot te duwen zou volledig zinloos zijn, aangezien u uiteindelijk al de voordelen van chroot(2)en zou uitschakelen. Zelfs met een toepassing zo eenvoudig als de bovenstaande teller, die naar de schijf moet schrijven (om zijn tellers bij te houden), gaat het voordeel van de chroot(2) voor een deel verloren.
Gelijk welke toepassing die root-privileges moet aannemen om te werken is zinloos om te proberen chroot(2)en, aangezien root in het algemeen uit een chroot(2) kan ontsnappen.
Vergeet niet dat, als het chroot-proces voor uw toepassing te ingewikkeld is, u misschien het systeem niet zo vaak zal upgraden of updaten als u zou moeten doen. Dit kan uiteindelijk uw systeem MINDER veilig maken dan een meer onderhoudbaar systeem met de chroot functionaliteit uitgeschakeld.
De standaard shell voor root op OpenBSD is ksh.
Een traditionele Unix richtlijn is om alleen statisch gecompileerde shells te gebruiken voor root, omdat wanneer uw systeem in single user modus start, niet-root partities niet gemount zullen worden en dynamisch gelinkte shells geen toegang zullen hebben tot libraries in de /usr partitie. Dit is eigenlijk geen aanzienlijk probleem voor OpenBSD, aangezien het systeem u zal vragen om een shell wanneer het in single user modus start, en de standaard is sh. De drie standaard shells in OpenBSD (csh, sh en ksh) zijn allemaal statisch gelinkt, en dus bruikbaar in single user modus.
Gebruikers die vertrouwd zijn met bash, vaak gebruikt op Linux systemen, zullen ksh waarschijnlijk heel vertrouwd vinden. Ksh(1) biedt de meeste van de veel gebruikte functionaliteiten in bash, inclusief tabvervollediging, commandoregelbewerking en geschiedenis via de pijltjestoetsen, en CTRL-A/CTRL-E om naar begin/einde van de commandoregel te springen. Als andere functionaliteiten van bash gewenst zijn, kan bash zelf geladen worden via ofwel packages of ports.
De commandoprompt van ksh kan makkelijk veranderd worden naar iets dat meer informatie biedt dan de standaard "$ " door de PS1 omgevingsvariable in te stellen. Bijvoorbeeld, het invoegen van de volgende lijn:
in uw /etc/profile geeft de volgende commandoprompt:export PS1='$PWD $ '
Zie het bestand /etc/ksh.kshrc, dat veel nuttige functionaliteiten en voorbeelden bevat, en aangeroepen kan worden in de .profile van uw gebruiker./home/nick $
OpenBSD's ksh(1) werd verbeterd met een aantal "speciale tekens" voor de primaire prompt string, PS1, gelijkaardig aan die die gebruikt worden in bash. Bijvoorbeeld:
\e - Voeg een ASCII escape karakter in.(zie de ksh(1) man pagina voor meer details, en nog veel meer speciale tekens! Merk ook op dat het "$" teken speciale betekenis heeft tussen dubbele aanhalingstekens, dus wees er voorzichtig mee)
\h - De hostname, min domeinnaam.
\H - De volledige hostname, inclusief domeinnaam.
\n - Voeg een newline karakter in.
\t - De huidige tijd, in 24-uur HH:MM:SS formaat.
\u - De gebruikersnaam van de huidige gebruiker.
\w - De huidige werkdirectory. $HOME wordt afgekort als `~'.
\W - De basisnaam van de huidige werkdirectory.
\$ - Vertoont "#" voor root gebruikers, "$" voor niet-root gebruikers.
Men zou het volgende commando kunnen gebruiken:
om een heel uitgebreide maar ietwat nuttige prompt te geven.export PS1="\n\u@\H\n\w \\$ "
OpenBSD kan worden gebruikt als server en client van databases met gegevens van gebruikers, informatie van groepen en andere netwerk gerelateerde gegevens.
U kunt uiteraard diverse directory diensten gebruiken onder OpenBSD. Maar YP is de enige die direct toegankelijk is met standaard functies uit de C-library zoals getpwent(3), getgrent(3), gethostbyname(3) enzovoorts. Dus als u uw gegevens in een YP database bewaart, dan hoeft u uw lokale configuratiebestandens als master.passwd(5) niet te kopiëren om ze te kunnen gebruiken, bijvoorbeeld om systeemgebruikers te authenticeren.
YP is een directory dienst die compatibel is met Sun Microsystems NIS (Network Information System). Zie yp(8) voor een overzicht van de beschikbare manual pagina's. Pas op, sommige besturingssystemen bevatten directory diensten die vergelijkbare namen hebben, maar toch incompatibel zijn, bijvoorbeeld NIS+.
Om andere directory diensten dan YP te gebruiken, moet u ofwel de lokale configuratiebestanden vullen vanuit de directory, ofwel heeft u een YP front-end nodig voor de directory. U kunt bijvoorbeeld de sysutils/login_ldap port gebruiken als u voor het eerste kiest, terwijl de ypldap(8) daemon voorziet in het laatste.
Voor eenvoudige toepassingen biedt het simpelweg synchroniseren van een klein aantal configuratiebestanden tussen een groep machines met hulpmiddelen als cron(8), scp(1) of rsync (beschikbaar vanuit ports) een makkelijk en robuust alternatief voor een volledige directory dienst.
Om redenen van compatibiliteit zijn alle veiligheidsaspecten van de YP-implementatie van OpenBSD standaard uitgeschakeld. Zelfs als ze zijn ingeschakeld is het NIS-prototol nog steeds inherent onveilig om de volgende redenen: Alle gegevens, inclusief gevoelige gegevens zoals hashes van wachtwoorden, wordt niet-versleuteld over het netwerk verzonden en noch de client, noch de server kunnen betrouwbaar elkaars identiteit verifiëren.
Overweeg dus voordat u een YP-server opzet of deze inherente zwakheden op het gebied van veiligheid acceptabel zijn in uw omgeving. In het bijzonder geldt dat YP niet adequaat is als potentiële hackers fysieke toegang tot uw netwerk hebben. Iedereen die root-toegang heeft tot een computer die is verbonden met uw netwerksegment met YP-verkeer kan aan uw YP-domein verbinden en de gegevens verkrijgen. In sommige gevallen kan het een optie zijn om het YP-verkeer door SSL of IPSec tunnels te leiden of u kunt overwegen om YP te combineren met kerberos(8) authenticatie.
Een YP-server bedient een groep clients die een "domein" worden genoemd. U moet als eerste een domeinnaam kiezen; dat kan een arbitraire string zijn en hoeft geen relatie te hebben met DNS domeinnamen. Een willekeurige naam als "Eepoo5vi" kan de veiligheid marginaal verbeteren, maar het effect zit hem vooral in veiligheid door obscuriteit. Indien u meerdere afzonderlijke YP-domeinen moet onderhouden, dan is het waarschijnlijk beter om beschrijvende namen te kiezen zoals "verkoop", "marketing" en "onderzoek" om beheersfouten te voorkomen, veroorzaakt door obscuriteit. Merk tevens op dat sommige versies van SunOS vereisen dat u de DNS domeinnaam van de host gebruikt, dus uw keuze kan beperkt zijn in een netwerk met dergelijke hosts.
Gebruik het domainname(1) commando om de domeinnaam in te stellen en zet deze in het bestand defaultdomain(5) om deze automatisch in te stellen bij het starten van het systeem.
echo "puffynet" > /etc/defaultdomain domainname `cat /etc/defaultdomain`
Initialiseer de YP-server met het interactieve commando
Op dit punt is het nog niet nodig om slave-servers te specificeren. Om slave-servers toe te voegen kunt u ypinit(8) later opnieuw draaien met de -u optie. Het opzetten van ten minste één slave-server voor ieder domain is zinvol om onderbrekingen van de service te voorkomen, mocht de master-server ooit plat gaan of de verbinding met het netwerk verliezen, in het bijzonder omdat client-processen die YP-maps willen benaderen oneindig lang kunnen blokkeren totdat ze de gevraagde informatie hebben ontvangen. Daarom zorgen onderbrekingen in de YP-service typisch voor vrijwel onbruikbare clients totdat YP weer in de lucht is.ypinit -m
Beslis waar u de bronbestanden wilt bewaren om uw YP-maps uit te genereren. Het gescheiden houden van de configuratie van de server van de te serveren configuratie helpt om te controleren welke informatie gedeeld wordt en welke niet, dus de standaard /etc is vaak niet de beste keuze.
Het enige ongemak van het wijzigen van de bron-directory is dat u gebruikers en groepen in het YP-domein niet kunt toevoegen, verwijderen en aanpassen met commando's als user(8) en group(8). In plaats daarvan moet u de configuratiebestanden bewerken met een teksteditor.
Om de brondirectory te definiëren, bewerkt u het bestand /var/yp/`domainname`/Makefile en past u de DIR variabele aan, bijv.
DIR=/etc/yp/src/puffynet
Overweeg om andere variabelen in /var/yp/`domainname`/Makefile aan te passen. Zie Makefile.yp(8) voor details.
Zelfs als u bijvoorbeeld de standaard brondirectory /etc gebruikt, dan heeft u meestal niet alle accounts en groepen die op de server bestaan nodig op de client-machines. In het bijzonder komt het de veiligheid ten goede om het root-account niet aan te bieden en daarmee de hash van het root-wachtwoord vertrouwlijk te houden. Bekijk de waarden van MINUID, MAXUID, MINGID en MAXGID en pas ze naar behoefte aan.
Als al uw YP-clients OpenBSD of FreeBSD draaien, sluit versleutelde wachtwoorden van de passwd-maps dan uit door UNSECURE="" te zetten in /var/yp/`domainname`/Makefile.
De voormalige praktijk om het sjabloonbestand /var/yp/Makefile.yp te bewerken wordt niet langer aangeraden. Wijzigingen in dat bestand hebben invloed op alle naderhand geïnitialiseerde domeinen, maar niet op domeinen die voor de wijziging geïnitialiseerd zijn, dus dit is foutgevoelig in twee richtingen: U riskeert zowel dat de bedoelde wijzigingen geen effect hebben als dat u de wijzigingen vergeet zodat ze effect hebben op andere domeinen waar ze nooit voor bedoeld waren.
Maak een brondirectory en vul deze met de configuratiebestanden die u nodig heeft. Zie Makefile.yp(8) om te leren welke YP-maps welke bronbestanden nodig hebben. Zie passwd(5), group(5), hosts(5) enzovoorts, voor het formaat van de individuele configuratiebestanden en kijk naar de voorbeelden in /etc.
Creëer de initiële versies van uw YP-maps met de commando's
Maak u op dit moment niet druk om foutmeldingen van yppush(8). De YP-server draait nog niet.cd /var/yp make
YP gebruikt rpc(3) (remote procedure calls) om met de clients te communiceren dus het is noodzakelijk om portmap(8) in te schakelen. Om dit te doen bewerkt u rc.conf.local(8) en zet portmap_flags="". Dit start de portmapper bij de volgende herstart. U kunt een herstart vermijden door het handmatig te starten:
echo 'portmap_flags=""' >> /etc/rc.conf.local portmap
Overweeg om ofwel de securenet(5) of de ypserv.acl(5) veiligheidsfunctie van de YP-server daemon te gebruiken. Maar wees ervan bewust dat beide slechts toegangscontrole op basis van IP bieden. Ze helpen dus alleen als potentiële aanvallers geen fysieke toegang tot de hardware van het netwerksegment met uw YP-verkeer hebben en geen root-toegang hebben op geen enkele host die met deze netwerksegmenten zijn verbonden.
Start tenslotte de YP-server daemon:
Deze zal automatisch herstart worden bij het booten zolang de directory /var/yp/`domainname` blijft bestaan.ypserv
Om de nieuwe server te testen kunt u overwegen om deze z'n eigen client te maken, door de instructies in het eerste deel van de volgende sectie te volgen. Indien u niet wilt dat de server zijn eigen maps gebruikt, kunt u het deel van de client uitschakelen na de test met de volgende commando's:
pkill ypbind rm -rf /var/yp/binding
Als u wilt toestaan dat gebruikers hun eigen wachtwoord wijzigen vanaf client machines, dan moet u yppasswdd(8) inschakelen:
Indien u de brondirectory op de standaard /etc heeft laten staan, gebruik dan slechts yppasswdd_flags="".echo 'yppasswdd_flags="-d /etc/yp/src/puffynet"' >> /etc/rc.conf.local rpc.yppasswdd
Denk eraan dat u uw YP-maps iedere keer moet regenereren als u een bestand aanpast dat als bron dient voor een YP-map.
Dit ververst alle databasebestanden in /var/yp/`domainname`, met één uitzondering: Het bestand ypservers.db, met alle YP-master en slave servers die zijn geassocieerd met het domein, wordt rechtstreeks vanuit ypinit -m gecreëerd en wordt alleen gewijzigd door ypinit -u. Als u het per ongeluk zou wissen, draai dan ypinit -u om het opnieuw aan te maken.cd /var/yp make
Net als op de server moet u de domeinnaam instellen en de portmapper inschakelen:
echo "puffynet" > /etc/defaultdomain domainname `cat /etc/defaultdomain` echo 'portmap_flags=""' >> /etc/rc.conf.local portmap
Het wordt aanbevolen om een lijst van YP-servers in het configuratiebestand /etc/yp/`domainname` te zetten. Zo niet, dan zal de YP-client daemon netwerk broadcasts gebruiken om YP-servers voor zijn domein te vinden. Het expliciet opgeven van servers is zowel meer robuust als marginaal minder gevoelig voor aanvallen. Als u nog geen slave servers heeft opgezet, vul dan slechts de hostname van de master server in in /etc/yp/`domainname`.
De YP-client daemon is genaamd ypbind(8). Door deze handmatig te starten wordt de directory /var/yp/binding aangemaakt, zodat deze automatisch wordt herstart bij het opstarten.
ypbind
Als alles goed is gegaan dan zou u de YP-server moeten kunnen bevragen met ypcat(1) en zou u uw password-map terug moeten krijgen.
Andere nuttige hulpmiddelen om uw YP-opzet te ontdoen van fouten zijn ypmatch(1) en yptest(8).ypcat passwd bob:*:5001:5000:Bob Nuggets:/home/bob:/usr/local/bin/zsh ...
Zie Makefile.yp(8). voor een lijst van standaard YP-maps en hun standaard gebruik. De meest voorkomende gevallen zijn:
Als u alle gebruikersaccounts van het YP-domein wilt invoegen, voeg dan het standaard YP-merkteken toe aan het master password-bestand and maak de password-database opnieuw aan:
Zie passwd(5) voor details over het selektief opnemen of uitsluiten van gebruikersaccounts. Gebruik het id(1) commande om te testen of het opnemen echt werkt.echo '+:*::::::::' >> /etc/master.passwd pwd_mkdb -p /etc/master.passwd
Als u alle groepen van het YP-domein wilt opnemen, voeg het standaard YP-merkteken dan toe aan het group-bestand:
Zie group(5) voor details over het selektief opnemen van groepen.echo '+:*::' >> /etc/group
Als u hostnamen distribueert via YP, dan zou u nu naar resolv.conf(5) moet kijken en controleren of de volgorde van het gebruik van de name service correct is. De meeste gebruikers hebben een regel als volgt nodig:
lookup file yp bind
Om één van de uitgebreide karaktersets te gebruiken moet de LC_CTYPE omgevingsvariabele worden ingesteld op de naam van een ondersteunde locale. LC_CTYPE heeft alleen invloed op de karakterset die beschikbaar is voor applicaties. Het verandert niet de taal die wordt gebruikt voor applicatieberichten.
De lijst van ondersteunde locales kan worden verkregen met het volgende commando:
De LC_CTYPE omgevingsvariabele kan worden ingesteld op de volgende wijze:ls /usr/share/locale
toe aan ~/.xsession voordat de window manager wordt gestart (zie de sectie in Aanpassen van X voor details). Dit voorbeeld zet de Unicode (UTF-8) karakterset aan en zorgt er tevens voor dat applicaties zoals xterm(1) standaard UTF-8 mode aanzetten.export LC_CTYPE="en_US.UTF-8"
Indien ingelogd via de tekst console, voeg dan een regel als
toe aan ~/.profile. Merk op dat de tekst console alleen ASCII en ISO-8859-1 ondersteunt. UTF-8 wordt niet ondersteund.export LC_CTYPE="en_US.ISO8859-1"
Enkele programma's van het basissysteem ondersteunen momenteel UTF-8. De meeste gebruiken ASCII in de UTF-8 locale. Echter, veel programma's uit de ports verzameling ondersteunen wel UTF-8.
UTF-8 kan ook worden alleen gebruikt door specifieke applicaties door deze applicaties te starten in uxterm(1). Dit werkt ook als de login-sessie een andere locale dan UTF-8 gebruikt.
Bij het inloggen op systemen op afstand met ssh(1), dan wordt de LC_CTYPE omgevingsvariabele niet doorgegeven en moet deze handmatig op dezelfde waarde worden gezet als op de lokale terminal.
De taal die wordt gebruikt voor applicatieberichten kan worden gewijzigd door de LC_MESSAGES omgevingsvariabele in te stellen op de naam van een ondersteunde locale. Dit kan op dezelfde wijze worden gedaan als beschreven voor LC_CTYPE hierboven. Zowel LC_MESSAGES als LC_CTYPE moeten op dezelfde waarde worden ingesteld.
Slechts enkele programma's in het basissysteem ondersteunen momenteel andere talen dan Engels. Echter, veel programma's uit de ports verzameling ondersteunen gelokaliseerde berichten in diverse talen. Ze vallen terug op Engels als de gewenste taal niet beschikbaar is.
[FAQ Index] [Naar Sectie 9 - Migreren naar OpenBSD] [Naar Sectie 11 - Het X Window System]