Het wachtwoordbestand1 /etc/passwd is een tekstbestand dat informatie bevat over gebruikers die op een computer mogen inloggen2 en andere gebruikersidentiteiten van het besturingssysteem die eigenaar zijn van actieve processen. De naam van het bestand verwijst naar het feit dat dit bestand oorspronkelijk ook gegevens bevatte die gebruikt werden om wachtwoorden van gebruikersaccounts te valideren. Op moderne Unix-systemen worden de beveiligde gebruikersgegevens meestal in een ander bestand of in een afzonderlijke databank opgeslagen onder de vorm van schaduwwachtwoorden3. De permissies4 van het bestand /etc/passwd zijn meestal zo ingesteld dat alle gebruikers van het computersysteem het bestand kunnen lezen (world-readable), maar dat het enkel kan aangepast worden door de superuser5 of door een paar gepriviligeerde commando's voor specifieke doeleinden.

Het bestand /etc/passwd bevat één record per regel, die elk een gebruikersaccount beschrijven. Elke record bestaat uit zeven informatievelden, die van elkaar gescheiden worden door een dubbelpunt (:). Een record ziet er dan bijvoorbeeld als volgt uit:

passwd
Voorbeeld van een record uit het bestand /etc/passwd.

De informatievelden — van links naar rechts — zijn:

  1. user name: de gebruikersnaam6 die een gebruiker ingeeft bij het aanmelden op het besturinssysteem; moet unieke zijn voor alle gebruikers in het bestand

  2. password: informatie die gebruikt wordt om het wachtwoord7 van een gebruiker te valideren; voor de meeste moderne Unix-systemen is dit veld meestal ingevuld met x (of * een andere betekenisloze aanduiding) en wordt de eigenlijke wachtwoordinformatie opgeslagen in een afzonderlijk schaduwwachtwoordenbestand8; op Linux-systemen is het instellen van dit veld op een asterisk (*) een gebruikelijke manier om directe aanmeldingen met een gebruikersaccount uit te schakelen terwijl de loginnaam toch behouden blijft, terwijl een andere mogelijke waarde *NP* is om aan te geven dat een NIS9-server moet gebruikt worden om het wachtwoord te verkrijgen; als er geen schaduwwachtwoordenbestand gebruikt wordt dan bevat dit veld meestal een cryptografische hash van het gebruikerswachtwoord (vaak ook in combinatie met een salt10)

  3. user identifier11 (UID): aan elke gebruiker wordt door het besturingssysteem een user identifier (UID) toegekend die gebruikt wordt voor interne werking; de UID hoeft niet noodzakelijk uniek te zijn; UID 0 (nul) is gereserveerd voor root; UIDs 199 zijn gereserveerd voor andere voorgedefinieerde gebruikersaccounts; UIDs 100909 zijn door het computersysteem gereserveerd voor administratieve accounts en systeemaccounts

  4. group identifier12 (GID): identificeert de primaire groep (zoals opgeslagen in het bestand /etc/group) van de gebruiker; alle bestanden die aangemaakt worden door deze gebruiker zijn initieel toegankelijk voor deze groep

  5. GECOS-veld13: commentaarveld met een beschrijving van de persoon of de gebruikersaccount; wordt typisch ingesteld als een reeks velden die gescheiden worden door komma's, waaronder de volledige naam van de gebruiker en contactgegevens; dit veld wordt onder andere gebruikt door het commando finger

  6. home directory: absolute padnaam naar de home directory van de gebruiker (de directory waarin de gebruiker zich bevindt na het aanmelden); als deze directory niet bestaat dan wordt de root directory (/) de home directory van de gebruiker

  7. commando/shell: absolute padnaam van het programma dat elke keer opgestart wordt wanneer de gebruiker aanmeldt op het computersysteem; voor interactieve gebruikers is dit doorgaans één van de command line interpreters14 (shells) die op het computersysteem geïnstalleerd zijn

Opgave

De huidige directory bevat een kopie passwd15 van het wachtwoordbestand /etc/passwd. Gebruik de regel-georiënteerde teksteditor ed (of ex) om dit bestand te openen.

$ ed passwd
$ ex passwd

Als je nu een reguliere expressies ingeeft voorafgegaan door een slash of ingesloten tussen slashes en vervolgens op <ENTER> drukt, dan zoekt ed voorwaarts in het bestand naar de eerstvolgende regel die correspondeert met het patroon van de reguliere expressie en schrijft die regel uit. Zo zal het ed-commando

/stud1

de eerstvolgende regel uitschrijven waarin het patroon stud1 voorkomt. Om alle regels die stud1 bevatten uit te schrijven, moet het commando voorafgegaan worden door een 1,$g (of kortweg g).

g/stud1

Om de teksteditor ed af te sluiten geeft je het commando q (gevolgd door <ENTER>). Gevraagd wordt om ed-commando's te geven die de volgende regels uitschrijven (één ed-commando per opdracht):

Probeer de reguliere expressies zo kort mogelijk te houden en maak geen veronderstellingen over de lengte van de velden in het wachtwoordbestand.