<!-- DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook V4.1//EN" -->

<!-- Chapter: User Management -->
<chapter id="userinfo">
<title>Multi-user omgeving</title>
<para>
Linux is een echte multi-user omgeving. Dit betekent dat het systeem
verschillende gebruikers met verschillende
<firstterm>privileges</firstterm> kan ondersteunen. 
Elke gebruiker heeft toegang tot een voorgedefinieerde set 
systeemservices en zijn/haar eigen priv&eacute;-gegevens.
De priv&eacute;-gegevens kunnen op hun beurt weer worden gedeeld met
andere gebruikers door hun toegangsprivileges toe te kennen.
Het controleren van de privileges wordt bewerkstelligd met de hulp van
<firstterm>gebruikersaccounts</firstterm> die door het systeem worden
beheerd. Linux voorziet in een aantal opdrachten die kunnen worden
gebruikt om gebruikersaccounts aan te maken en te beheren.
Ze worden door een aantal bestanden en directory's onder
<filename class="directory">/etc</filename> ondersteund, welke worden
gebruikt om informatie over gebruikers te bewaren.
De faciliteiten waarin is voorzien kunnen in grote lijnen in twee
categori&euml;n worden geklassificeerd, t.w. gebruikersbeheer en groepsbeheer.
</para>

<!-- Section1: User accounts -->
<sect1 id="users">
<title>Gebruikersaccounts</title>
<para>
Traditioneel wordt de informatie met betrekking tot de gebruikers 
geplaatst in een bestand genaamd <filename>/etc/passwd</filename>. Hierin
staat de loginnaam, de volledige naam, homedirectory en andere info 
in standaardformaat. Hier kan ook het versleutelde wachtwoord 
van de gebruiker in staan, vandaar de naam van het bestand.
Maar tegenwoordig worden er betere manieren gebruikt voor de authenticatie,
waarbij het wachtwoord elders wordt opgeslagen.
</para>

<sect2 id="superuser">
<title>Superuser Account</title>
<para>
Standaard heeft elke Linux installatie een speciaal bevoorrecht
gebruikersaccount, genaamd de <firstterm>root</firstterm> of <firstterm>
superuser</firstterm>. Deze gebruiker heeft volledige toegang tot alle
services en bronnen die op het systeem aanwezig zijn. 
Normaal gesproken is het 't account van de systeembeheerder,
en het wordt gebruikt om speciale taken uit te voeren waarvoor speciale
privileges zijn vereist die niet beschikbaar zijn voor normale accounts.
Iemand die als root inlogt, kan elk bestand op het systeem aanpassen,
ongeacht de feitelijke eigenaar van het bestand en elk programma overal
op het systeem uitvoeren. Als zodanig is het 't krachtigste account
en moet het met de nodige voorzichtigheid worden gebruikt. Fouten die
worden gemaakt onderwijl als root ingelogd, kunnen 
erg gevaarlijk blijken te zijn voor het systeem; vandaar dat het
uiterst belangrijk is dat de gebruiker het gebruik van het rootaccount
vermijdt, tenzij het absoluut noodzakelijk is.
</para>

<para>
Van alle andere accounts wordt gezegd dat ze niet bevoorrecht zijn,
aangezien ze alleen toegang hebben tot een beperkte hoeveelheid services.
Hun privileges kunnen verder worden beheerst met behulp van het gebruik van
<link linkend="groups">groepen</link> die worden toegepast voor het
collectief beheren van gebruikersaccounts.
</para>
</sect2>

<sect2 id="useradd">
<title>Nieuwe gebruikers toevoegen</title>
<para>
De standaardopdracht <command>useradd</command> kan worden gebruikt voor
het aanmaken van een nieuwe gebruiker op het systeem. Het is &eacute;&eacute;n
van de opdrachten uit een familie opdrachten voor het gebruikersbeheer,
die alleen door een gebruiker met speciale privileges, d.w.z. de
<link linkend="superuser">root</link> kunnen worden aangeroepen. 
De meest gebruikelijke argumenten waarin de opdracht voorziet zijn:
</para>

<screen><command>adduser -g &lt;groep&gt; -m -p &lt;wachtwoord&gt; &lt;login&gt;</command></screen>

<para>
Het resultaat van deze opdracht is de aanmaak van een nieuwe gebruiker met
deze login. Tevens wordt onder de directory <filename class="directory">
/home</filename> een directory met dezelfde naam aangemaakt en worden er
een aantal standaardbestanden naar deze directory gekopieerd.
Tevens worden de nodige bestanden met gebruikersinformatie bijgewerkt,
overeenkomstig de informatie die door de superuser is aangeleverd.
Aan de nieuwe gebruiker wordt een uniek nummer toegekend genaamd de UID,
dwz zijn/haar <firstterm>User ID</firstterm>. 
Dit ID kan een waarde groter dan een bepaald getal hebben welke wordt
voorgesteld door een constante met de naam UID_MIN. Deze
constante is systeemspecifiek, gedefinieerd in het bestand <filename>
/etc/login.defs</filename>. Deze voorziening biedt de systeembeheerder
de mogelijkheid een minimum aantal ID's voor systeemaccounts te reserveren.
</para>

<note>
<title>Verder onderzoek</title>
<para>
In de manpages staat een opsomming van heel wat andere opties zoals de
levensduur van het gebruikersaccount, de standaardshell, enz. Een object van
belang is de directory <filename class="directory"> /etc/skel/</filename>
waarin de initi&euml;le inhoud van de homedirectory is te vinden en
<filename> /etc/default/useradd</filename> met de standaardwaarden
die door de opdracht worden gebruikt.
</para>
</note>

<important>
<title>Distributiespecifieke opties</title>
<para>
Een aantal distributies kan een eigen standaardfunctioneren specificeren
voor de opdracht useradd. Een voorbeeld is Redhat, waar de opdracht een
nieuwe groep zal aanmaken die standaard dezelfde naam heeft als de gebruiker.
Dit kan worden overschreven met de optie <option>-n</option>.
</para>
</important>

</sect2>

<sect2 id="userdel">
<title>Gebruikersaccounts verwijderen</title>
<para>
De opdracht <command>userdel</command> wordt gebruikt om een
bestaand gebruikersaccount van een systeem te verwijderen. Dit kan als volgt
worden aangeroepen:
</para>

<screen><command>userdel -r &lt;gebruikersnaam&gt;</command></screen>

<para>
Deze opdracht past alle systeembestanden aan, verwijdert alle informatie
over de opgegeven gebruikersnaam. De optie <option>-r</option>
zal ervoor zorgen dat de homedirectory van de gebruiker wordt verwijderd
met alle bestanden en subdirectory's die het bevat.
</para>
</sect2>

<sect2 id="usermod">
<title>Gebruikersinformatie aanpassen</title>
<para>
De opdracht <command>usermod</command> wordt gebruikt om informatie over
een bestaande gebruiker aan te passen. De argumenten die hierdoor worden
geaccepteerd zijn vrijwel hetzelfde als die worden geaccepteerd door
de opdracht <link linkend="useradd">
useradd</link>. Het enige verschil is dat er bestaande
records mee worden aangepast in plaats dat er nieuwe worden aangemaakt.
</para>
</sect2>
</sect1>

<!-- Section1: User groups -->
<sect1 id="groups">
<title>Het concept ``groepen'' onder Linux</title>
<para>
Onder Linux worden gebruikers ingedeeld in logische verzamelingen, genaamd
<firstterm>groepen</firstterm>. Deze worden gebruikt om diverse soorten
privileges aan systeemobjecten voor een groep gebruikers samen te verlenen.
Een gebruiker kan tot een aantal groepen behoren, maar hij/zij zal altijd
een standaardgroep hebben, in combinatie met andere groepen waarvan wordt
gezegd dat die aanvullend zijn. Wanneer een gebruiker aan een bepaalde
groep wordt toegevoegd, dan worden alle privileges verleend aan die groep
ook verleend aan die gebruiker.
</para>

<sect2 id="groupcmd">
<title>Groepen beheren</title>
<para>
De superuser kan gebruik maken van een set opdrachten analoog aan die
voor gebruikersbeheer. Dit zijn:
<simplelist>
<member><command>groupadd</command></member>
<member><command>groupdel</command></member>
<member><command>groupmod</command></member>
</simplelist>
Deze opdrachten hebben functies die vergelijkbaar zijn met de corresponderende
functies die worden gebruikt voor gebruikersaccounts. Nogmaals, aan elke
groep wordt een uniek nummer toegekend genaamd GID, dwz de
<firstterm> Group ID</firstterm>. De minimumwaarde die aan een groep kan
worden toegekend wordt gedefinieerd als
GID_MIN in het bestand <filename>/etc/login.defs</filename>. Dit is een
systeemspecifieke instelling, die de systeembeheerder toestaat
een set ID's voor systeemaccounts te reserveren.
</para>

<para>
In aanvulling gebruikt de superuser de opdrachten <link
linkend="usermod"> usermod</link> en <link linkend="useradd">
useradd</link> met de optie <option>-D</option> om voor diverse
gebruikers groepslidmaatschappen te specificeren.
</para>
</sect2>

<sect2 id="pdgroups">
<title>Voorgedefinieerde groepen</title>
<para>
Gebruikersgroepen kunnen effectief worden gebruikt om gebruikers
overeenkomstig de privileges die hun zijn toegekend af te zonderen.
Een aantal van dergelijke groepen wordt tijdens de systeeminstallatie
aangemaakt, die een bepaalde set privileges hebben voor de systeemservices
waarmee ze corresponderen. Wanneer een gebruiker deelnemer is gemaakt
van een dergelijke groep, dan verwerft die gebruiker toegang tot de
services die beschikbaar zijn voor die groep. Een paar van die groepen
worden hieronder opgesomd, een volledige lijst kan worden verkregen uit
het bestand <filename> /etc/group</filename>.
</para>

<variablelist>
<title>Voorgedefini&euml;erde groepen onder Linux</title>

<varlistentry>
<term>wheel</term>
<listitem>
 <para>
Dit is de set met bevoorrechte gebruikers aan wie speciale volmachten
op het systeem zijn verleend. Standaard is root de enige deelnemer van
deze groep.
 </para>
</listitem>
</varlistentry>

<varlistentry>
<term>users</term>
<listitem>
 <para>
  Dit is de vergaarbak groep waaraan alle nieuwe gebruikers worden
toegevoegd. Alle deelnemers van deze groep zijn voorzien van basisprivileges
op het systeem zoals gedefinieerd door de systeembeheerder.
 </para>
</listitem>
</varlistentry>

<varlistentry>
<term>pppusers</term>
<listitem>
 <para>
  Gebruikers die PPP (point-to-point) verbindingen met remote computers
kunnen opstarten en afbreken. Gewoonlijk brengt dit met zich mee het
recht de PPP Daemon (<command>pppd</command>) aan te roepen.
 </para>
</listitem>
</varlistentry>

</variablelist>

</sect2>
</sect1>

<!-- Section1: Access Privileges -->
<sect1 id="privileges">
<title>Toegangsprivileges</title>

<para>
Tot zoverre hebben we het gehad over het besturen van gebruikersacties
via het gebruik van privileges. Laten we snel gaan kijken naar de wijze
waarop Linux beveiliging op basisniveau implementeert,
tussen meerdere gebruikers op hetzelfde systeem.
Dezelfde principes vormen de basis voor het verder implementeren van 
beveiligingsmaatregels tegen buitenstaanders.
</para>

<para>
Een bestand is niet slechts samengesteld uit de inhoud en een verwijzer
in het bestandssysteem informerend waar het te vinden. Het heeft ook een
<firstterm>
eigenaar</firstterm> (een user id), een groep (een groeps-id), <firstterm>
permissies</firstterm>, diverse tijdregistraties en andere informatie.
Deze worden gezamelijk de <firstterm>
kenmerken</firstterm> ervan genoemd, welke in het bestandssysteem 
zijn opgeslagen.
</para>

<sect2 id="owner">
<title>Eigenaar en groep van bestand</title>
<para>
Voor het implementeren van toegangsprivileges, moet eerst een eigenaar en
groep voor het bestand worden gedefinieerd. Deze informatie bewerkstelligd
wie aanspraak kan maken op de controle van het bestand. Een bestand krijgt
een eigenaar en groep zodra het wordt aangemaakt. Gewoonlijk is de eigenaar
de huidige gebruiker en de groep de groep van de directory waarin het
bestand wordt aangemaakt; maar dit is systeemafhankelijk.
</para>

<screen><prompt>$ </prompt><command>ls -l NGL.sgml</command>
<computeroutput>
-rw-r--r-- 1 sameer users 10565 Jun 1 08:59 NGL.sgml
</computeroutput></screen>

<para>
In bovenstaande uitvoer zien we naast andere informatie de eigenaar
van het bestand. Dit bestand behoort toe aan de gebruiker
``sameer'' op het systeem en het is ook toegankelijk voor de groep ``users''.
</para>
</sect2>

<sect2 id="file-perms">
<title>Bestandspermissies</title>
<para>
Aan elk bestand is onder Linux een lijst met <firstterm>
permissies</firstterm> gekoppeld, die het type toegang specificeert
die de verschillende gebruikers voor dat bestand hebben. De bestandspermissies
worden ook de <firstterm>toegangsmodi</firstterm> ervan genoemd.
Hier is het voorbeeld dat we eerder gebruikte:
</para>

<screen><prompt>$ </prompt><command>ls -l NGL.sgml</command>
<computeroutput>
-rw-r--r-- 1 sameer users 10565 Jun 1 08:59 NGL.sgml
</computeroutput></screen>

<para>
De allereerste kolom in bovenstaande uitvoer definieert de toegangsmodi
voor het bestand. Hun betekenis wordt duidelijk wanneer we kijken naar
de wijze waarop toegangsmodi worden voorgesteld.
Deze kunnen worden uitgedrukt als octale getallen of een mnemonische naam.

<variablelist id="acc-modes">
<title>Toegangsmodi of permissies</title>
<varlistentry>
 <term>Leestoegang (mnemonische naam: r, binair gewicht: 4)</term>
 <listitem>
  <para>
	Permissie om het bestand te lezen; voor directory's betekent dit
de permissie om de inhoud van het bestand weer te geven.
  </para>
 </listitem>
</varlistentry>
<varlistentry>
 <term>Schrijftoegang (mnemonische naam: w, binair gewicht: 2)</term>
 <listitem>
  <para>
	Permissie om het bestand aan te passen; voor directory's betekent
de permissie om bestanden aan te maken of te verwijderen.
  </para>
 </listitem>
</varlistentry>
<varlistentry>
 <term>Uitvoertoegang (mnemonische naam: x, binair gewicht: 1)</term>
 <listitem>
  <para>
	Permissie om het bestand uit te voeren; voor directory's betekent
de permissie om bestanden in de directory te benaderen.
  </para>
 </listitem>
</varlistentry>
</variablelist>

In bovenstaande uitvoer verschijnen deze permissies in groepen van drie,
het allereerste teken verwerpend.  Dus elk drietal is samengesteld uit
``rwx'' en de afwezigheid van een permissie wordt gemarkeerd door het streepje
``-''. De drie drietallen stellen respectievelijk permissies voor de eigenaar 
van het bestand, de groep van het bestand en de overige groepen voor.
De volgende interpretaties kunnen dus over het bestand worden gemaakt:

<simplelist>
<member>
De eigenaar van het bestand ``sameer'' heeft lees- en schrijfpermissies.
</member>
<member>
De groep van het bestand ``users'' heeft alleen leespermissies.
</member>
<member>
De andere groepen hebben alleen leespermissies.
</member>
</simplelist>
</para>

<para>
Laat ons nu eens kijken naar het concept octale waarde. Bij het
manipuleren van de permissies geassocieerd met een bestand, is het
een algemeen gebruik om ze in octale getallen te specificeren. Hiervoor wordt
elk drietal ge&iuml;nterpreteerd als een octaal getal, met de drie modi
``r-w-x'' die hun respectieve binaire waarden hebben. In bijvoorbeeld
bovenstaande uitvoer zijn de permissies voor de eigenaar: `rw-'. Dit
heeft de octale waarde (4+2+0=)6. En alle permissies kunnen worden
uitgedrukt als het octale getal 644.
</para>
</sect2>

<sect2 id="fileutils">
<title>Bestandspermissies beheren</title>
<para>
Een set opdrachten is beschikbaar om de diverse permissies of
toegangsmodi geassocieerd met een bestand te manipuleren.
Een gedetailleerde behandeling van deze opdrachten zou overbodig zijn.
<!-- Dus we zullen verdergaan met alleen de belangrijkste op te sommen.-->
Deze worden allen gedistribueerd in een enkel package genaamd `fileutils'' wat
onderdeel uitmaakt van het GNU-systeem. Meer informatie kan worden 
verkregen uit de relevante documentatie zoals manpages en infopages.
</para>
</sect2>

</sect1>

</chapter>


<!-- Keep this comment at the end of the file
Local variables:
fill-column:75
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-namecase-general:t
sgml-general-insert-case:lower
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
sgml-parent-document:("NGL.sgml" "book" "chapter")
End:
-->
