aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/nl/books/handbook/users/_index.adoc
blob: ab9e92599773b87c91c37caee41383dff4683f13 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
---
title: Hoofdstuk 14. Gebruikers- en basisaccountbeheer
part: Deel III. Systeembeheer
prev: books/handbook/boot
next: books/handbook/security
---

[[users]]
= Gebruikers- en basisaccountbeheer
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:skip-front-matter:
:toc-title: Inhoudsopgave
:table-caption: Tabel
:figure-caption: Afbeelding
:example-caption: Voorbeeld
:xrefstyle: basic
:relfileprefix: ../
:outfilesuffix:
:sectnumoffset: 14

ifeval::["{backend}" == "html5"]
:imagesdir: ../../../images/books/handbook/users/
endif::[]

ifeval::["{backend}" == "pdf"]
:imagesdir: ../../../../static/images/books/handbook/users/
endif::[]

ifeval::["{backend}" == "epub3"]
:imagesdir: ../../../../static/images/books/handbook/users/
endif::[]

include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/nl/mailing-lists.adoc[]
include::shared/nl/teams.adoc[]
include::shared/nl/urls.adoc[]

toc::[]

[[users-synopsis]]
== Overzicht

Met FreeBSD is het mogelijk een computer met meerdere gebruikers tegelijkertijd te gebruiken. Natuurlijk kan er op een zeker moment maar één gebruiker achter het scherm en toetsenbord zitten  , maar er kan een groot aantal gebruikers zijn aangemeld via het netwerk om dingen met de computer te doen. Om een systeem te gebruiken moet een gebruiker een account hebben.

Na het lezen van dit hoofdstuk weet de lezer:

* De verschillen tussen de gebruikersaccounts op een FreeBSD systeem;
* Hoe gebruikersaccounts toe te voegen;
* Hoe gebruikersaccounts te verwijderen;
* Hoe eigenschappen van accounts te wijzigen, zoals de volledige naam van de gebruiker of de voorkeursshell;
* Hoe op een per account basis limieten in te stellen om het bronnengebruik van bijvoorbeeld geheugen en processortijd te reguleren voor accounts en accountgroepen;
* Hoe groepen te gebruiken om accountbeheer te vereenvoudigen.

Aangeraden voorkennis:

* Basisbegrip van UNIX(R) en FreeBSD (crossref:basics[basics,UNIX® beginselen]).

[[users-introduction]]
== Inleiding

Via accounts wordt alle toegang tot een systeem gegeven en alle processen worden door gebruikers gedraaid. Dus gebruikers en accountbeheer zijn van integraal belang op FreeBSD systemen.

Elke account op een FreeBSD systeem heeft een aantal informatievelden waarmee de account geïdentificeerd kan worden.

Gebruikersnaam::
De gebruikersnaam, zoals die ingevoerd wordt bij het prompt `login:`. Gebruikersnamen moeten uniek zijn op een computer. Er mogen geen twee gebruikers zijn met dezelfde gebruikersnaam. Er horen een aantal regels bij het maken van geldige gebruikersnamen, die in man:passwd[5] staan beschreven. Gebruikersnamen bestaan gewoonlijk uit acht of minder karakters (geen hoofdletters).

Wachtwoord::
Bij ieder account hoort een wachtwoord. Het wachtwoord kan leeg zijn. Er is dan geen wachtwoord nodig om toegang te krijgen tot een systeem. Dit is meestal een slecht idee. Ieder account hoort een wachtwoord te hebben.

Gebruikers ID (UID)::
Het UID is een nummer, traditioneel van 0 tot 65535  , dat wordt gebruikt om een gebruiker op een systeem uniek te identificeren. Intern gebruikt FreeBSD het UID om gebruikers te identificeren. Voor alle FreeBSD commando's waarin een gebruikersnaam wordt opgegeven, wordt eerst geconverteerd naar het UID voordat ermee gewerkt wordt. Dit betekent dat er verschillende accounts kunnen zijn met andere gebruikersnamen maar met hetzelfde UID. Wat FreeBSD betreft zijn al die accounts één gebruiker. Het is onwaarschijnlijk dat het ooit nodig is deze eigenschap te gebruiken.

Groep ID (GID)::
Het GID is een nummer, traditioneel van 0 tot 65535 , gebruikt om de primaire groep waartoe een gebruiker behoort, uniek te identificeren. Groepen zijn een methode waarmee toegang tot bronnen beheerst kan worden, gebaseerd op het GID van een gebruiker in plaats van op een UID. Hiermee kan het aantal instellingen in bepaalde bestanden aanzienlijk verkleind worden. Een gebruiker kan lid zijn van meer dan één groep.

Aanmeldklasse::
Aanmeldklassen zijn een uitbreiding op het groepenmechanisme waarmee additionele flexibiliteit wordt geboden bij het aanpassen van een systeem op verschillende gebruikers.

Wijzigingstijd wachtwoord::
Standaard dwingt FreeBSD gebruikers niet tot het periodiek wijzigen van hun wachtwoord. Dit kan wel per gebruiker afgedwongen worden, zodat sommige of alle gebruikers hun wachtwoord na een bepaalde periode moeten wijzigen.

Verloopdatum account::
Standaard verlopen accounts op FreeBSD niet. Als er accounts gemaakt worden waarvan bekend is dat ze maar een beperkte tijd nodig zijn, bijvoorbeeld op een school waar accounts bestaan voor studenten, dan kan er aangegeven worden wanneer een account verloopt. Nadat de verloopdatum is verstreken kan de account niet meer gebruikt worden om aan te melden op een systeem, hoewel de mappen en bestanden van de account nog wel blijven bestaan.

Volledige gebruikersnaam::
De gebruikersnaam identificeert de account uniek voor FreeBSD, maar die geeft niet zonder meer de echte naam van de gebruiker weer. Deze informatie kan aan de account gekoppeld worden.

Thuismap::
De thuismap is het volledige pad naar een map op een systeem waar de gebruiker start als die aanmeldt op een systeem. Het is de gewoonte dat alle thuismappen voor gebruikers onder [.filename]#/home/gebruikersnaam# of [.filename]#/usr/home/gebruikersnaam# staan. Gebruikers slaan hun persoonlijke bestanden op in hun thuismap en in mappen die daaronder worden gemaakt.

Gebruikersshell::
De shell biedt een standaardomgeving waarmee gebruikers met een systeem werken. Er zijn vele shells en ervaren gebruikers hebben hun eigen voorkeuren, die hun weerslag kunnen hebben in hun accountinstellingen.

Er zijn drie hoofdtypen accounts: de <<users-superuser,Superuser>>, <<users-system,systeemgebruikers>> en <<users-user,gebruikersaccounts>>. De Superuser account, die meestal `root` heet, wordt gebruikt om een systeem te beheren zonder beperkingen. Systeemgebruikers kunnen diensten draaien. Tenslotte kunnen gebruikersaccounts gebruikt worden door echte personen, die aanmelden, email lezen, enzovoort.

[[users-superuser]]
== Het superuser-account

De superuser account, die meestal `root` heet, is al ingesteld om gebruikt te worden voor systeembeheer en hoort niet gebruikt te worden voor dagelijkse werkzaamheden, zoals het sturen en ontvangen van email, het verkennen van het systeem of programmeren.

Dit omdat de Superuser, anders dan gewone gebruikersaccounts, zonder beperkingen kan opereren en misbruik van een Superuser account kan resulteren in spectaculaire problemen. Gebruikersaccounts kunnen niet per ongeluk een systeem vernielen, dus het is aan te raden om wanneer maar mogelijk gewone gebruikersaccounts te gebruiken, tenzij de extra privileges noodzakelijk zijn.

Commando's die als superuser worden uitgevoerd dienen altijd twee of drie keer gecontroleerd te worden voordat ze worden uitgevoerd, omdat een extra spatie of een missend karakter kan leiden tot niet terug te draaien dataverlies.

Als het niet al geregeld is, is het dus na het lezen van dit hoofdstuk aan te raden als eerste een gebruikersaccount zonder bijzondere rechten te maken voor de dagelijkse bezigheden. Dit geldt zowel als het gaat over een machine voor één gebruiker als wanneer het gaat over een machine voor meerdere gebruikers. Later in dit hoofdstuk wordt beschreven hoe additionele accounts gemaakt kunnen worden en hoe er tussen de normale gebruiker en de Superuser gewisseld kan worden.

[[users-system]]
== Systeemaccounts

Systeemgebruikers draaien diensten, zoals DNS, mailservers, webservers, enzovoort. De reden hiervoor is beveiliging. Als alle diensten als Superuser zouden draaien, dan zouden ze zonder beperkingen kunnen opereren.

Voorbeelden van systeemgebruikers zijn `daemon`, `operator`, `bind` (voor de Domain Name Service), `news` en `www`.

`nobody` is de generieke systeemgebruiker zonder bijzondere privileges. Het is wel belangrijk om ervan bewust te zijn dat hoe meer diensten `nobody` gebruiken, hoe meer bestanden en processen er bij die gebruiker horen en dat de gebruiker daardoor meer privileges kan krijgen.

[[users-user]]
== Gebruikersaccounts

Gebruikersaccounts zijn het primaire middel dat echte gebruikers gebruiken om toegang te krijgen tot een systeem en die account schermen de gebruiker en de omgeving af, waardoor die gebruikers het systeem of andere gebruikers niet kunnen beschadigen en waardoor gebruikers hun omgeving kunnen aanpassen zonder invloed te hebben op anderen.

Iedereen die toegang heeft tot een systeem hoort een unieke gebruikersaccount te hebben. Hierdoor is het mogelijk uit te vinden wie wat aan het doen is, te voorkomen dat mensen elkaars instellingen kunnen verpesten of elkaars email kunnen lezen, enzovoort.

Iedere gebruiker kan zijn eigen omgeving instellen op een systeem, door andere shells, editors, toetsenbordinstellingen en taal te kiezen.

[[users-modifying]]
== Accounts wijzigen

Er zijn vele commando's beschikbaar in de UNIX(R) omgeving om gebruikersaccounts te manipuleren. De meest gebruikte commando's worden hieronder beschreven, gevolgd door meer gedetailleerde voorbeelden van gebruik.

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Commando
| Samenvatting

|man:adduser[8]
|Het aanbevolen commandoregelprogramma voor het aanmaken van nieuwe gebruikers.

|man:rmuser[8]
|Het aanbevolen commandoregelprogramma voor het verwijderen van gebruikers.

|man:chpass[1]
|Een flexibel hulpprogramma voor het wijzigen van informatie in de gebruikersdatabase.

|man:passwd[1]
|Een eenvoudig commandoregelprogramma voor het wijzigen van wachtwoorden van gebruikers.

|man:pw[8]
|Een krachtig en flexibel hulpprogramma voor het wijzigen van alle aspecten van gebruikersaccounts.
|===

[[users-adduser]]
=== `adduser`

man:adduser[8] is een eenvoudig programma voor het aanmaken van nieuwe gebruikers. Er worden regels mee toegevoegd aan de systeembestanden [.filename]#passwd# en [.filename]#group#. Het maakt ook een thuismap voor de nieuwe gebruiker, kopieert de standaard instellingenbestanden ("dotfiles") uit [.filename]#/usr/shared/skel# en kan, optioneel, de nieuwe gebruiker een welkomstbericht mailen.

.Een gebruiker toevoegen aan FreeBSD
[example]
====

[source,shell]
....
# adduser
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
#
....

====

[NOTE]
====
Het wachtwoord wat ingegeven wordt, wordt niet getoond, er worden ook geen sterretjes getoond. Zorg ervoor dat het wachtwoord correct ingevuld wordt.
====

[[users-rmuser]]
=== `rmuser`

Met man:rmuser[8] kan een gebruiker volledig van een systeem verwijderd worden. man:rmuser[8] voert de volgende stappen uit:

[.procedure]
====
. Verwijdert de man:crontab[1] van de gebruiker (als die bestaat).
. Verwijdert bestaande man:at[1] taken van de gebruiker.
. Stopt alle processen van de gebruiker.
. Verwijdert de gebruiker uit het lokale wachtwoordbestand van een systeem.
. Verwijdert de thuismap van de gebruiker (als de gebruiker daar eigenaar van is).
. Verwijdert de inkomende email voor de gebruiker uit [.filename]#/var/mail#.
. Verwijdert alle bestanden waar de gebruiker eigenaar van is uit opslaggebieden voor tijdelijke bestanden als [.filename]#/tmp#.
. Als laatste wordt de gebruikersnaam uit alle groepen in [.filename]#/etc/group# waar die lid van was verwijderd.
+
[NOTE]
======
Als een groep leeg raakt en de groepsnaam is hetzelfde als de gebruikersnaam, dan wordt de groep verwijderd. Dit is het tegenovergestelde van wat man:adduser[8] met een unieke groep per gebruiker.
======
====

man:rmuser[8] kan niet gebruikt worden om superuser accounts te verwijderen, omdat dat vrijwel altijd leidt tot vreselijke verwoesting.

Standaard wordt een interactieve modus gebruikt, die ervoor zorgt dat alle stappen bewust worden genomen.

.Interactief accounts verwijderen met `rmuser`
[example]
====

[source,shell]
....
# rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Updating password file, updating databases, done.
Updating group file: trusted (removing group jru -- personal group is empty) done.
Removing user's incoming mail file /var/mail/jru: done.
Removing files belonging to jru from /tmp: done.
Removing files belonging to jru from /var/tmp: done.
Removing files belonging to jru from /var/tmp/vi.recover: done.
#
....

====

[[users-chpass]]
=== `chpass`

man:chpass[1] wijzigt informatie in de gebruikersdatabase, zoals wachtwoorden, shells en persoonlijke informatie.

Alleen systeembeheerders, zoals de Superuser, mogen de informatie en wachtwoorden voor andere gebruikers wijzigen met man:chpass[1].

Als er geen opties worden meegegeven, buiten de optionele gebruikersnaam, dan toont man:chpass[1] een editor waarin de gebruikersinformatie wordt weergegeven. Als de gebruiker de editor verlaat, dan wordt de gebruikersdatabase bijgewerkt met de nieuwe informatie.

[NOTE]
====
Er zal om uw wachtwoord gevraagd worden na het verlaten van de tekstverwerker, als de huidige gebruiker niet de superuser is.
====

.Interactieve `chpass` door superuser
[example]
====

[source,shell]
....
#Informatie in de gebruikersdatabase wijzigen voor jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:
....

====

Een normale gebruiker kan slechts een deel van de bovenstaande informatie wijzen en alleen voor zijn eigen account.

.Interactieve `chpass` door een gewone gebruiker
[example]
====

[source,shell]
....
#Informatie in de gebruikersdatabase wijzigen voor jru.
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:
....

====

[NOTE]
====
man:chfn[1] en man:chsh[1] zijn gewoon links naar man:chpass[1]. Dat geldt ook voor man:ypchpass[1], man:ypchfn[1] en man:ypchsh[1]. Ondersteuning voor NIS gaat automatisch; er hoeft dus geen `yp` voor het commando aangegeven te worden. NIS wordt behandeld in crossref:network-servers[network-servers,Netwerkdiensten].
====

[[users-passwd]]
=== `passwd`

Met man:passwd[1] wijzigt een gebruiker gewoonlijk zijn eigen wachtwoord of dat van een andere gebruiker als het door de Superuser wordt uitgevoerd.

[NOTE]
====
Om onbedoelde of ongeautoriseerde wijzigen te voorkomen moet het originele wachtwoord worden ingegeven voordat een nieuw wachtwoord kan worden ingesteld.
====

.Wachtwoord wijzigen
[example]
====

[source,shell]
....
% passwd
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done
....

====

.Als superuser het wachtwoord van een andere gebruiker wijzigen
[example]
====

[source,shell]
....
# passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done
....

====

[NOTE]
====
Net als bij man:chpass[1] is man:yppasswd[1] gewoon een link naar man:passwd[1], dus NIS werkt met beide commando's.
====

[[users-pw]]
=== `pw`

man:pw[8] is een commandoregelhulpprogramma om gebruikers en groepen te maken, verwijderen, aan te passen en weer te geven. Het werkt als een voorkant voor de systeembestanden met gebruikers en groepen. man:pw[8] heeft een zeer krachtige set commandoregelopties, waardoor het erg geschikt is om in shell scripts gebruikt te worden. Nieuwe gebruikers vinden het wellicht gecompliceerder dan de andere commando's die hier beschreven worden.

[[users-limiting]]
== Gebruikers beperken

Bij het hebben van gebruikers komt wellicht ook de gedachte aan het beperken van de mogelijkheden op een systeem. FreeBSD biedt een aantal mogelijkheden waarmee een beheerder de hoeveelheid systeembronnen die een gebruiker kan aanwenden kan beperken. Die beperkingen zijn onderverdeeld in twee onderdelen: schijfquota en andere beperkingen voor bronnen.

Schijfquota beperken het schijfgebruik voor gebruikers en ze bieden een mogelijkheid om dat gebruik snel te controleren zonder het iedere keer te hoeven berekenen. Quota worden besproken in crossref:disks[quotas,Bestandssysteemquota].

De overige beperking van bronnen omvat het beperken van het gebruik van CPU, geheugen en andere bronnen die gebruikers tot hun beschikking hebben. Die worden ingesteld in aanmeldklassen en worden hieronder beschreven.

Aanmeldklassen worden ingesteld in [.filename]#/etc/login.conf#. De precieze semantiek wordt niet behandeld in dit handboek, maar die staat beschreven in man:login.conf[5]. Hier is het voldoende aan te geven dat iedere gebruiker wordt toegewezen aan een aanmeldklasse (standaard `default`) en dat iedere aanmeldklasse verbonden is met een groep aanmeldmogelijkheden (login capability). Een aanmeldmogelijkheid is een `naam=waarde` paar, waar _naam_ een bekende eigenschap is en _waarde_ een arbitraire string is die wordt verwerkt afhankelijk van de naam. Het instellen van aanmeldklassen en -mogelijkheden is een redelijk eenvoudig proces en wordt ook beschreven in man:login.conf[5].

[NOTE]
====
Een systeem leest de instellingen uit normaal gesproken [.filename]#/etc/login.conf# niet direct, maar leest het databasebestand [.filename]#/etc/login.conf.db# welke snellere opzoekmogelijkheden biedt. [.filename]#/etc/login.conf.db# kan met het volgende commando gemaakt worden uit [.filename]#/etc/login.conf#:

[source,shell]
....
# cap_mkdb /etc/login.conf
....

====

Beperkingen van bronnen verschillen van standaard aanmeldmogelijkheden op twee manieren. Ten eerste is er voor iedere beperking een zachte en een harde limiet. Een zachte (huidige) limiet kan door een gebruiker of applicatie aangepast worden, maar mag niet hoger zijn dan de harde limiet. De laatste kan door een gebruiker verlaagd worden, maar nooit verhoogd. Deze verschillen worden veroorzaakt door de specifieke behandeling van de beperkingen, niet door de implementatie van het aanmeldmogelijkheden raamwerk, dat wil zeggen dat ze niet _echt_ bijzondere aanmeldmogelijkheden zijn.

Hieronder worden de meest gebruikte beperkingen op bronnen beschreven. De overige mogelijkheden, samen met alle andere aanmeldmogelijkheden, staat beschreven in man:login.conf[5].

`coredumpsize`::
De limiet op de grootte van een corebestand dat wordt gemaakt door een programma is, om verschillende redenen, ondergeschikt aan andere beperkingen op het gebied van schijfgebruik (bijvoorbeeld `filesize` of schijfquota). Desalniettemin wordt deze instelling vaak gebruikt als een minder zware methode voor het beheersen van het gebruik van schijfruimte. Omdat gebruikers niet hun eigen corebestanden maken en ze vaak niet verwijderen, kan deze instelling helpen te voorkomen dat een schijf vol loopt in het geval een groot programma (bijvoorbeeld emacs) zou crashen.

`cputime`::
Dit is de maximale hoeveelheid processortijd die een proces van een gebruiker mag gebruiken. Processen die meer bronnen gebruiken worden afgeschoten door de kernel.
+
[NOTE]
====
Dit is een beperking op de CPU _tijd_ die wordt gebruikt, niet op een percentage van de CPU, zoals wordt getoond in sommige velden door man:top[1] en man:ps[1]. Een limiet op de laatste is op het moment van schrijven niet mogelijk en zou ook redelijk waardeloos zijn: een compiler - waarschijnlijk een legitieme taak - kan makkelijk gedurende enige tijd bij 100% van een CPU gebruiken.
====

`filesize`::
Dit is de maximale grootte voor een bestand waar een gebruiker eigenaar van kan zijn. Anders dan bij crossref:disks[quotas,schijfquota] is deze limiet van toepassing op individuele bestanden en niet op alle bestanden samen waarvan een gebruiker eigenaar is.

`maxproc`::
Dit is het maximale aantal processen dat een gebruiker mag draaien. Hieronder vallen zowel processen die op de voorgrond draaien als op de achtergrond. Om duidelijke reden kan deze waarde niet groter zijn dan de ingestelde systeemlimiet voor `kern.maxproc` met man:sysctl[8]. Het te laag zetten van deze instelling kan de productiviteit van een gebruiker schaden: vaak is het zinvol om meerdere keren aangemeld te zijn of om pipelines uit te voeren. Sommige taken, zoals het compileren van een groot programma, brengen ook meerdere processen voort (bijvoorbeeld man:make[1], man:cc[1] en andere tussentijdse preprocessors).

`memorylocked`::
Dit is de maximale hoeveelheid geheugen die een proces mag claimen om te locken in het hoofdgeheugen (zie bijvoorbeeld man:mlock[2]). Sommige systeemkritische programma's, zoals man:amd[8], locken in het hoofdgeheugen, zodat in het geval dat ze uitgewisseld moeten worden, ze niet bijdragen aan dit uitwisselen indien er problemen zijn.

`memoryuse`::
Dit is de maximale hoeveelheid geheugen die een proces op enig moment mag gebruiken. Hieronder vallen zowel hoofdgeheugen als het gebruik van het wisselbestand. Deze limiet vangt niet al het geheugengebruik af, maar het is een prima begin.

`openfiles`::
Dit is het maximale aantal bestanden dat een proces open mag hebben. In FreeBSD representeren bestanden ook sockets en IPC kanalen. Deze limiet mag dus niet te laag gezet worden. De limiet voor het systeem staat ingesteld in `kern.maxfiles` van man:sysctl[8].

`sbsize`::
Dit is de limiet op de hoeveelheid netwerkgeheugen, en dus mbufs, die een gebruiker ter beschikking staan. Deze waarde komt voort uit het antwoord op een DoS aanval waarmee veel sockets werden gemaakt, maar het kan in het algemeen gebruikt worden om de hoeveelheid netwerkcommunicatie te limiteren.

`stacksize`::
Dit is de maximale grootte voor een stack van een proces. Deze instelling alleen is niet genoeg om de hoeveelheid geheugen die een programma mag gebruiken te beperken. Daarom moet deze limiet samen met andere limieten gebruikt worden.

Er zijn nog een aantal dingen belangrijk bij het instellen bronbeperkingen. Hierna worden een aantal algemene tips, suggesties en commentaren gegeven.

* Processen die bij het opstarten van een systeem gestart worden vanuit [.filename]#/etc/rc# worden toegewezen aan de aanmeldklasse `daemon`.
* Hoewel de [.filename]#/etc/login.conf# die bij een systeem zit een goede bron is voor redelijke waardes voor de meeste limieten, kan alleen de beheerder van een machine de echt juiste waarden kennen. Het te hoog instellen van een limiet kan een systeem kwetsbaar maken voor misbruik, terwijl het te laag instellen van limieten de productiviteit te veel kan hinderen.
* Gebruikers van het X Window systeem (X11) horen waarschijnlijk meer bronnen toegewezen te krijgen dan andere gebruikers. X11 gebruikt zelf al meer bronnen, maar het moedigt gebruikers ook aan om meerdere programma's tegelijkertijd te draaien.
* Het is belangrijk niet te vergeten dat veel limieten betrekking hebben op individuele processen en niet op een hele gebruiker. Het instellen van bijvoorbeeld `openfiles` op 50, betekent dat ieder proces dat een gebruiker draait 50 open bestanden mag hebben. Het totale aantal bestanden dat een gebruiker dus open kan hebben is het product van de waarde van `openfiles` en de waarde van `maxproc`. Dit geldt ook voor het gebruik van geheugen.

Meer informatie over bronbeperkingen en aanmeldklassen in het algemeen staan in de relevante hulppagina's: man:cap.mkdb[1], man:getrlimit[2], man:login.conf[5].

[[users-groups]]
== Groepen

Een groep is eenvoudigweg een lijst gebruikers. Groepen kunnen geïdentificeerd worden aan de hand van hun naam en GID (Groep ID). In FreeBSD (en de meeste andere UNIX(R) achtige systemen), worden besluiten door de kernel over of een proces iets wel of niet mag doen genomen op basis van het bijbehorende gebruikers ID en een lijst van groepen waar dat bij hoort. Anders dan bij een gebruikers ID, heeft een proces een lijst met bijbehorende groepen. Sommige programma's refereren wel eens aan het "groep ID" van een gebruiker of een proces. Meestal is dit gewoon de eerste groep in de hiervoor genoemde lijst.

De vertaling van groep ID naar groepsnaam staat in [.filename]#/etc/group#. Dit is een tekstbestand met vier velden die door het karakter `:` (dubbele punt) worden gescheiden. Het eerste veld is de groepsnaam, het tweede veld is het versleutelde wachtwoord, het derde het groep ID, het vierde een door komma's gescheiden lijst van leden van de groep. Het bestand kan zonder gevaar met de hand aangepast worden (aangenomen dat er geen fouten in de syntaxis worden gemaakt, natuurlijk). Een volledige beschrijving van de syntaxis staat in man:group[5].

Als het onwenselijk is om [.filename]#/etc/group# met de hand aan te passen, dan kan man:pw[8] gebruikt worden voor het toevoegen en wijzigen van groepen. Om bijvoorbeeld een groep met de naam `teamtwo` toe te voegen en daarna het bestaan van die groep te bevestigen:

.Groepen toevoegen met man:pw[8]
[example]
====

[source,shell]
....
# pw groupadd teamtwo
# pw groupshow teamtwo
teamtwo:*:1100:
....

====

Het getal `1100` hierboven is het groep ID van de groep `teamtwo`. Met de huidige instelling heeft `teamtwo` geen leden en is die redelijk waardeloos. Dat kan veranderen door `jru` aan de groep `teamtwo` toe te voegen.

.De lijst van groepsleden instellen met man:pw[8]
[example]
====

[source,shell]
....
# pw groupmod teamtwo -M jru
# pw groupshow teamtwo
teamtwo:*:1100:jru
....

====

Het argument voor de optie `-M` is een door komma's gescheiden lijst van gebruikers die in de aangegeven groep moeten komen. In de voorgaande paragrafen is al aangegeven dat het wachtwoordbestand ook voor iedere gebruiker een groep bevat. Een gebruiker wordt automatisch toegevoegd aan de groepenlijst door een systeem. De gebruiker wordt niet als lid getoond van die groep bij het gebruik van de optie `groupshow` van man:pw[8], maar wordt wel getoond als de informatie wordt opgevraagd via man:id[1] of met een soortgelijk programma. Met andere woorden: man:pw[8] wijzigt alleen het bestand [.filename]#/etc/group# en probeert nooit extra informatie te lezen uit [.filename]#/etc/passwd#.

.Een nieuw lid aan een groep toevoegen met man:pw[8]
[example]
====

[source,shell]
....
# pw groupmod teamtwo -m db
# pw groupshow teamtwo
teamtwo:*:1100:jru,db
....

====

Het argument voor de optie `-m` is een door komma's gescheiden lijst van gebruikers die aan de groep worden toegevoegd. In tegenstelling tot het vorige voorbeeld, worden deze gebruikers aan de groep toegevoegd en vervangen ze de lijst van gebruikers in de groep niet.

.man:id[1] gebruiken om groepslidmaatschap te bepalen
[example]
====

[source,shell]
....
% id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)
....

====

Hierboven is te zien dat `jru` lid is van de groepen `jru` en `teamtwo`.

Meer informatie over man:pw[8] staat in de hulppagina en meer informatie over de opmaak van [.filename]#/etc/group# staat in man:group[5].