[OpenBSD]

[FAQ Index] [Naar Sectie 9 - Migreren naar OpenBSD] [Naar Sectie 11 - Het X Window System]

10 - Systeembeheer


Inhoudsopgave


10.1 - Waarom zegt hij dat ik in de verkeerde groep zit wanneer ik door su root probeer te worden?

Bestaande gebruikers moeten met de hand toegevoegd worden aan de "wheel" groep. Dit wordt gedaan om veiligheidsredenen, en u kan beter voorzichtig zijn met aan wie u toegang geeft. Op OpenBSD is het gebruikers die in de wheel groep zitten, toegelaten om het su(1) userland programma te gebruiken om root te worden. Gebruikers die niet in "wheel" zitten, kunnen su(1) niet gebruiken. Hier is een voorbeeld van een /etc/group entry om de gebruiker ericj in de "wheel" groep te plaatsen.

Als u een gebruiker aan het toevoegen bent met adduser(8), kan u ze in de wheel groep zetten door wheel te antwoorden op de vraag "Invite user into other groups:". Dit zal hen toevoegen aan /etc/group, dat er ongeveer als volgt zal uitzien:

wheel:*:0:root,ericj

Als u een manier zoekt om gebruikers beperkte toegang tot superuser privileges te geven zonder hen in de "wheel" groep te zetten, gebruik dan sudo(8).

10.2 - Hoe dupliceer ik een bestandssysteem?

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 - )

10.3 - Hoe start ik daemons op met het systeem? (Overzicht van rc(8))

OpenBSD gebruikt een rc(8) stijl startup. Deze gebruikt een aantal sleutelbestanden om op te starten.

Hoe werkt rc(8)?

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:

Daemons en Services Starten die bij OpenBSD zitten

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="-D"

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 te bewerken. Creëer 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. Het standaard upgrade proces 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.

Lokale daemons opstarten en configuratie

Voor andere daemons die u misschien op het systeem zou installeren via packages of andere manieren, gebruikt u best het /etc/rc.local bestand. Ik heb bijvoorbeeld een daemon geïnstalleerd op /usr/local/sbin/daemonx. Ik wil hem opstarten bij het booten. Ik zou een entry als deze in /etc/rc.local zetten:

if [ -x /usr/local/sbin/daemonx ]; then
             echo -n ' 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 local daemons: daemonx.

rc.shutdown

/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.

10.4 - Waarom krijgen gebruikers "relaying denied" wanneer ze van ergens anders mail versturen via mijn OpenBSD systeem?

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`

Verdere Leesvoer

10.5 - Ik heb POP ingesteld, maar gebruikers hebben problemen met mail opvragen via POP. Wat kan ik doen?

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 collectie. 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.

10.6 - Waarom negeert Sendmail het /etc/hosts bestand?

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.

10.7 - Een Secure HTTP server opzetten met SSL(8)

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 1024

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 1024

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 -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.

10.8 - Ik bewerkte /etc/passwd, maar de veranderingen leken geen effect te hebben. Waarom?

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.

10.9 - Wat is de beste manier om gebruikers toe te voegen en te verwijderen?

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
Reading /etc/login.conf
Check /etc/master.passwd
Check /etc/group

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username []: testuser
Enter full name []: Test FAQ User
Enter shell csh ksh nologin sh [sh]: ksh
Uid [1002]: Enter
Login group testuser [testuser]: guest
Login group is ``guest''. Invite testuser into other groups: guest no 
[no]: no
Login class auth-defaults auth-ftp-defaults 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.

Gebruikers toevoegen met user(8)

Deze tools zijn minder interactief dan het adduser(8) commando, wat ze gemakkelijker maakt om in scripts te gebruiken.

De volledige verzameling tools is:

Daadwerkelijk gebruikers toevoegen

Aangezien user(8) niet interactief is, is de gemakkelijkste manier om gebruikers efficiënt toe te voegen, het adduser(8) commando te gebruiken. Het eigenlijke commando /usr/sbin/user is gewoon 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, het is uw keuze zoals u wil, en het verandert het gebruik van de commando's helemaal niet.

In dit voorbeeld voegen we dezelfde gebruiker toe met dezelfde specificaties als de gebruiker die hierboven werd toegevoegd. useradd(8) is veel gemakkelijker om te gebruiken als u de standaard instelling kent alvorens een gebruiker toe te voegen. Deze instellingen staan in /etc/usermgmt.conf en kunnen als volgt gezien worden:

$ user add -D
group           users
base_dir        /home
skel_dir        /etc/skel
shell           /bin/csh
inactive        0
expire          Null (unset)
range           1000..60000

De bovenstaande instellingen zijn wat zal ingesteld worden tenzij u anders specificeert met commandoregelopties. In ons geval willen we de gebruiker bijvoorbeeld tot de groep guest, niet users laten horen. Nog een kleine hindernis bij het toevoegen van gebruikers, is dat wachtwoorden gespecificeerd moeten worden op de commandoregel. Het gaat om de vercijferde wachtwoorden, dus u moet eerst de encrypt(1) utility gebruiken om het wachtwoord aan te maken. Bijvoorbeeld: OpenBSD's wachtwoorden gebruiken standaard het Blowfish algoritme voor 6 rondes. Hier is een voorbeeldlijn 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 ons vercijferd wachtwoord hebben, zijn we klaar om de gebruiker toe te voegen.

# 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

Gebruikers verwijderen

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.

10.10 - Hoe maak ik een ftp-only account aan (niet anonymous FTP!)?

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.

10.11 - Quota's instellen

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

10.12 - KerberosV Clients en Servers instellen

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

10.13 - Anonymous FTP Diensten opzetten

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.

De FTP account toevoegen

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:

echo /usr/bin/false >> /etc/shells
Daarna bent u klaar om de ftp gebruiker toe te voegen:
# adduser
Use option ``-silent'' if you don't want to see all warnings and questions.

Reading /etc/shells
Reading /etc/login.conf
Check /etc/master.passwd
Check /etc/group

Ok, let's go.
Don't worry about mistakes. I will give you the chance later to correct any input.
Enter username []: ftp
Enter full name []: anonymous ftp
Enter shell csh false ksh nologin sh tcsh zsh [sh]: false
Uid [1002]: Enter
Login group ftp [ftp]: Enter
Login group is ``ftp''. Invite ftp into other groups: guest no 
[no]: no
Login class auth-defaults auth-ftp-defaults 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!

Directory Instelling

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 ..

De server opstarten en loggen

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 samen met de -D optie. 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="-DllUSA"           # for non-inetd use: ftpd_flags="-D"

Dit werkt natuurlijk alleen als u ftpd uit /etc/inetd.conf gehaald hebt en inetd zijn configuratiebestand opnieuw heeft laten lezen.

Andere relevante bestanden

10.14 - Gebruikers vastzetten in hun home directories in ftpd(8)

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.

10.15 - Patches aanbrengen in OpenBSD

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 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 gemaakt worden voor nieuwe toevoegingen aan OpenBSD, en dat dit alleen gedaan wordt 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:

Opnieuw, individuele bestanden patchen is niet altijd eenvoudig, dus denk ernstig na over het volgen van de -stable (of "patch") branch van OpenBSD. Het mengen en laten overeenstemmen van patch-oplossingen kan gedaan worden als u begrijpt hoe alles werkt, maar nieuwe gebruikers kiezen er best een methode uit en houden zich daaraan.

Hoe verschillen "errata" patches van wat er in de CVS tree zit?

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 aanbrengen.

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 om uw systeem te patchen, de broncode van de RELEASE versie van OpenBSD beschikbaar en klaar voor gebruik moet hebben. In het algemeen moet u de volledige source tree ter beschikking hebben. Als u een release van de officiële CD-ROM draait, zijn de source trees beschikbaar op schijf 3, ze zijn ook als bestanden 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, is het herstellen van gegevens van backups erg moeilijk. Mensen die een tape drive gebruiken hebben deze patch nodig, zij zonder tape drive hebben 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:
# 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
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 niet juist is, u de instructies niet nauwkeurig gevolgd hebt, of uw patch vermengd was. Patches zijn heel gevoelig aan "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.

Op dit punt kan u de kernel bouwen zoals normaal, hem installeren en het systeem herstarten.

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.

10.16 - Vertel me over die chroot(2) Apache?

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.

Wat is een chroot?

Een chroot(2)ed toepassing wordt opgesloten in een bepaalde directory en kan niet rondwaren in de rest van de directory tree, en ziet deze directory als zijn "/" (root) directory. In het geval van httpd(8), start het programma, opent zijn logbestanden, maakt zich vast aan zijn TCP poorten (het aanvaardt echter nog geen gegevens), en leest zijn configuratie. Vervolgens sluit het zichzelf op in /var/www en laat privileges vallen, daarna begint het aanvragen te aanvaarden. Dit betekent dat alle bestanden bediend en gebruikt door Apache in de /var/www directory moeten staan. In de standaardconfiguratie van OpenBSD kunnen alle bestanden in de /var/www directory alleen gelezen worden door de gebruiker die Apache draait, www. Dit helpt de veiligheid enorm -- als er een beveiligingsprobleem is met Apache, zal de schade beperkt blijven tot een enkele directory met slechts "read only" permissies en zonder middelen om onheil mee aan te richten.

Wat betekent dit voor de beheerder?

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".

In sommige gevallen kan de toepassing of configuratie aangepast worden om binnen de chroot(2) te draaien. In andere gevallen zal u deze functionaliteit gewoon moeten uitschakelen met de -u optie voor httpd(8) in /etc/rc.conf.local.

Voorbeeld van een toepassing chroot(2)en: wwwcount

Als voorbeeld van een proces dat kan gebruikt worden om een toepassing te chroot'en, zullen we kijken naar wwwcount, een eenvoudige webpagina teller beschikbaar via packages. Hoewel dit een heel effectief programma is, weet het niets over chroot(2)ed Apache, en zal niet chroot(2)ed werken in zijn standaardconfiguratie.

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.

# apachectl stop
/usr/sbin/apachectl stop: httpd stopped
# httpd -u
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

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.50.1
        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:
# mkdir -p /var/www/usr/lib /var/www/usr/libexec
# cp /usr/lib/libc.so.50.1 /var/www/usr/lib
# cp /usr/libexec/ld.so /var/www/usr/libexec
en proberen de teller opnieuw.

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:

# mkdir -p /var/www/var/www
# cd /var/www/var/www
# ln -s ../../wwwcount wwwcount
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.
# tar cf - /usr/local/lib/wwwcount | (cd /var/www; tar xpf - )
we testen opnieuw... en het werkt!

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.

Moet ik de chroot functionaliteit gebruiken?

In het bovenstaande voorbeeld is het programma vrij eenvoudig, en toch hebben we verschillende soorten problemen gezien.

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.

10.17 - Kan ik de root shell wijzigen?

Er wordt soms gezegd dat men de root shell best nooit verandert, hoewel daarvoor geen reden is in OpenBSD.

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.

10.18 - Wat kan ik nog doen met ksh?

In OpenBSD is ksh eigenlijk pdksh, de Public Domain Korn Shell, en is dezelfde binary als sh.

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:

export PS1='$PWD $ '
in uw /etc/profile geeft de volgende commandoprompt:
/home/nick $
Zie het bestand /etc/ksh.kshrc, dat veel nuttige functionaliteiten en voorbeelden bevat, en aangeroepen kan worden in de .profile van uw gebruiker.

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.
\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.
(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)

Men zou het volgende commando kunnen gebruiken:

export PS1="\n\u@\H\n\w \\$ "
om een heel uitgebreide maar ietwat nuttige prompt te geven.

10.19 - Directory diensten

OpenBSD kan worden gebruikt als server en client van databases met gegevens van gebruikers, informatie van groepen en andere netwerk gerelateerde gegevens.

10.19.1 - Welke directory diensten zijn beschikbaar?

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.

10.19.2 - YP veiligheidsoverwegingen

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.

10.19.3 - Het opzetten van een YP-server

  1. 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`
    
  2. Initialiseer de YP-server met het interactieve commando

    ypinit -m
    
    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.
  3. 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
    
  4. 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.

  5. 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.

  6. Creëer de initiële versies van uw YP-maps met de commando's

    cd /var/yp
    make
    
    Maak u op dit moment niet druk om foutmeldingen van yppush(8). De YP-server draait nog niet.
  7. 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=YES. Dit start de portmapper bij de volgende herstart. U kunt een herstart vermijden door het handmatig te starten:

    echo "portmap=YES" >> /etc/rc.conf.local
    portmap
    
  8. 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.

  9. Start tenslotte de YP-server daemon:

    ypserv
    
    Deze zal automatisch herstart worden bij het booten zolang de directory /var/yp/`domainname` blijft bestaan.
  10. 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
    
  11. Als u wilt toestaan dat gebruikers hun eigen wachtwoord wijzigen vanaf client machines, dan moet u yppasswdd(8) inschakelen:

    echo 'yppasswdd_flags="-d /etc/yp/src/puffynet"' >> /etc/rc.conf.local
    rpc.yppasswdd
    
    Indien u de brondirectory op de standaard /etc heeft laten staan, gebruik dan slechts yppasswdd_flags="".
  12. Denk eraan dat u uw YP-maps iedere keer moet regenereren als u een bestand aanpast dat als bron dient voor een YP-map.

    cd /var/yp
    make
    
    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.

10.19.4 - Het opzetten van een YP-client

Het opzetten van een YP-client omvat twee afzonderlijke delen. Ten eerste moet u de YP-client daemon zien te starten, die uw client verbindt met een YP-server. Het completeren van de volgende stappen stelt u in staat om de gegevens van de YP-server te halen, maar die data zal nog niet worden gebruikt door het systeem:
  1. Net als op de server moet u de domeinnaam instellen en de portmapper inschakelen:

    echo "puffynet" > /etc/defaultdomain
    domainname `cat /etc/defaultdomain`
    echo "portmap=YES" >> /etc/rc.conf.local
    portmap
    
  2. 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`.

  3. 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
    
  4. 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.

    ypcat passwd
    bob:*:5001:5000:Bob Nuggets:/home/bob:/usr/local/bin/zsh
    ...
    
    Andere nuttige hulpmiddelen om uw YP-opzet te ontdoen van fouten zijn ypmatch(1) en yptest(8).
Het tweede deel van het configureren van een YP-client betreft het aanpassen van lokale configuratiebestanden zodat bepaalde YP-maps worden gebruikt door de diverse systeemfaciliteiten. Niet alle server serveren alle standaard maps die worden ondersteund door het besturingssysteem, sommige servers serveren alleen additionele niet-standaard maps en u wordt in geen geval gedwongen om alle maps te gebruiken. Welke van de beschikbare maps u moet gebruiken en voor welk doel, wordt volledig bepaald door de systeembeheerder van de client.

Zie Makefile.yp(8). voor een lijst van standaard YP-maps en hun standaard gebruik. De meest voorkomende gevallen zijn:

[FAQ Index] [Naar Sectie 9 - Migreren naar OpenBSD] [Naar Sectie 11 - Het X Window System]


[terug] www@openbsd.org
$OpenBSD: faq10.html,v 1.38 2010/05/23 16:20:41 ajacoutot Exp $