[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?

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

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

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.

Lokale daemons opstarten en configuratie

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

De /etc/rc.d/ directory

Vanaf OpenBSD 5.0 worden systeem daemons ("services") gestart, gestopt en beheerd door /etc/rc.d. Alle systeem daemons gebruiken deze scripts en dat geldt ook voor de meeste toegevoegde packages.

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(8) 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:

#!/bin/sh

daemon="/usr/local/sbin/daemonx"

. /etc/rc.d/rc.subr

rc_cmd $1
en het toevoegen van de naam van de daemon aan de pkg_scripts variable in /etc/rc.conf.local.

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

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

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

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

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

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
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]: Enter
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]: Enter
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 (maar u kunt uiteraard ook een andere locatie gebruiken). 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.

Het is NIET nodig om een /home/ftp/usr of /home/ftp/bin directory aan te maken.

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. Over het algemeen wordt aangeraden om ftpd als daemon te draaien vanuit de rc scripts en dit zullen we hieronder laten zien. Een voorbeeldregel om ftpd te starten vanuit inetd(8) staat uitgecommentariŽerd in de standaard /etc/inetd.conf.

Hier is een voorbeeldregel om aan /etc/rc.conf.local toe te voegen om ftpd(8) te starten bij het booten:

ftpd_flags="-llUSA"
Hierbij zijn de volgende opties gebruikt:

Het is niet nodig om opstartopties aan ftpd te geven om anonieme connecties toe te staan; de voorgaande stappen van het aanmaken van de 'ftp'-gebruiker 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.

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

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

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.

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.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:
# 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
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_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
    
  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_flags=""' >> /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:

10.20 - Karaktersets en lokalisatie

OpenBSD gebruikt standaard de ASCII karakterset. Het ondersteunt ook de Latin (ISO-8859-*), KOI-8 en Unicode (UTF-8) karaktersets.

10.20.1 - Configureren van de aktieve karakterset

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 met het volgende commando worden getoond:

locale -a
De LC_CTYPE omgevingsvariabele kan worden ingesteld op de volgende wijze:

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) wordt de LC_CTYPE omgevingsvariabele niet doorgegeven en moet deze handmatig op dezelfde waarde worden gezet als op de lokale terminal.

10.20.2 - Wijzigen van de taal in applicatieberichten

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]


[terug] www@openbsd.org
$OpenBSD: faq10.html,v 1.64 2014/03/12 06:27:29 ajacoutot Exp $