Eksamen våren 2007 Operativsystemer og UNIX
Les nøye gjennom oppgavene før du begynner og pass på å besvare alle spørsmålene. Alle trykte og skrevne hjelpemidler er tillatt. Oppgavene vil ikke bli vektlagt likt ved sensur. En sannsynlig fordeling er at oppgave 1 teller 10%, oppgave 2 teller 30%, oppgave 3 teller 30% og oppgave 4 teller 30%. De som ønsker det kan besvare oppgavene eller deler av oppgavene på engelsk. Sett gjerne egne forutsetninger dersom du synes oppgaveteksten er uklar. Beskriv forutsetningene og løs oppgaven utifra dem.

Oppgave 1

I denne oppgaven skal du i delspørsmålene der du blir bedt om å gi en kommando, angi en kommando på en linje, slik du ville ha tastet den inn til bash på en Linux-maskin fra tastaturet (du svarer for eksempel mkdir kat hvis du blir spurt: Opprett en katalog med navn kat).

a) Gå til din egen hjemmekatalog.

b) Lag en symbolsk link threads i katalogen du står i til katalogen undervisning/forelesning/threads.

c) Sett rettighetene for scriptet run i katalogen du står i slik at du får skrive, lese og kjøre-rettigheter, mens ingen andre får noen rettigheter.

d) Sett rettighetene for web-området ditt ~/www med alle filer og underkataloger slik at alle filene som er der kan leses av alle brukere og at du som eier i tillegg kan skrive til alle filene.

e) Sett variabelen $user lik ditt eget brukernavn.

Studer manualsiden for kommandoen ssh-keygen:

NAME
     ssh-keygen - authentication key generation, management and conversion

SYNOPSIS
     ssh-keygen [-q] [-b bits] -t type [-N new_passphrase] [-C comment] [-f output_keyfile]

DESCRIPTION
     ssh-keygen generates, manages and converts authentication keys for ssh(1).  ssh-keygen can create RSA 
     keys for use by SSH protocol version 1 and RSA or DSA keys for use by SSH protocol version 2.  
     The type of key to be generated is specified with the -t option.
     Normally each user wishing to use SSH with RSA or DSA authentication runs this once to create 
     the authentication key in $HOME/.ssh/id_dsa or $HOME/.ssh/id_rsa. 
     Normally this program generates the key and asks for a file in which to store the private key. The 
     public key is stored in a file with the same name but '.pub' appended. 

     -g      Use generic DNS resource record format.
     -f filename
             Specifies the filename of the key file.
     -i      This option will read an unencrypted private (or public) key file in SSH2-compatible format 
             and print an OpenSSH compatible private (or public) key to stdout. 
     -y      This option will read a private OpenSSH format file and print an OpenSSH public key to stdout.
     -t type
             Specifies the type of the key to create.  The possible values are 'rsa1' for protocol version 1 
             and 'rsa' or 'dsa' for protocol version 2.
     -N new_passphrase
             Provides the new passphrase.
     -U reader
             Upload an existing RSA private key into the smartcard in reader.
     -r hostname
             Print DNS resource record with the specified hostname.

f) Gi en kommando som lager en DSA key med en tom passphrase (tom streng) og legger key filen i ~/.ssh/id_dsa. (Ved å spesifisere hvor den skal ligge unngås at man blir spurt om en bekreftelse, slik at kommandoen er bedre egnet for bruk i script, se oppgave 2)

g) Hva vil filen som inneholder public key hete og hvor blir den lagt?

h) Hva er hensikten med disse key filene og hva kan de brukes til? Forklar kort hvordan de brukes.

Oppgave 2

Gjør de 3 siste deloppgavene i oppgave 1 om ssh-keygen før du gjør denne oppgaven. Når man bruker ssh-keygen for å generere private og public key må man gjøre flere kommandoer og kopieringer for å få alt til å virke. Hvis det er ofte man får tilgang tilgang til en ny maskin med ssh er det veldig nyttig å samle hele operasjonen i et script, slik at det går raskt og man ikke trenger å huske alle operasjonene.

a) Lag et slikt script med navn slogin. Det tar som eneste argument navnet eller IP-adressen til en host-maskin. Scriptet skal oppfylle følgende:

b) Det er ikke alltid man har samme brukernavn på den maskinen man sitter på som på den maskinen man ønsker å logge seg inn på. Likevel kan opplegget med public key forenkle innloggingen på den andre maskinen. I denne deloppgaven skal du utvide scriptet i forrige deloppgave, slik at det også takler å bli gitt to argumenter. Det første er som før host'en man ønsker å logge inn på og det andre argumentet er brukernavnet som man ønsker å logge inn som, på den andre maskinen. I tillegg til å virke som før skal den utvidede versjonen av scriptet oppfylle følgende:

Du trenger ikke skrive all koden på nytt, men kan angi hvilke endringer som må gjøres og hvor nye kodelinjer må settes inn i scripet i forrige deloppgave. Hint: DNS-oppslag til en host som finnes ser slik ut:
$ host nix.iu.hio.no
nix.iu.hio.no has address 128.39.74.71
mens oppslag til en som ikke finnes ser slik ut:
$ host niks.iu.hio.no
Host niks.iu.hio.no not found: 3(NXDOMAIN)
Hvis man ønsker å utføre en kommando på en annen maskin for et annet brukernavn bruker, kan man gjøre det med ssh bruker@host.

Oppgave 3

I denne oppgaven skal vi se på nettverkstrafikk med utgangspunkt i figuren som viser tre nettverk som er koblet til Internett.

\includegraphics[width=13cm]{n.eps}

a) Hva er 128.39.74.16 og hvor mange bits brukes for å lagre det?

b) Forklar kort forskjellen på MAC-adresse og IP-adresse.

Følgende er output fra en Linux-kommando utført på en av maskinene i figuren:

eth1      Link encap:Ethernet  HWaddr 00:0F:1F:8D:70:2A
          inet addr:128.39.74.71  Bcast:128.39.75.255  Mask:255.255.254.0

c) Hva er navnet til maskinen kommandoen er utført på og hvilken Linux-kommando er det?

d) Hva er IP-adressen, MAC-adressen og netmask for denne maskinen?

e) Når cube(128.39.74.16) sender en nettverkspakke til nix(128.39.74.71), går pakken innom gatewayen cadeler30-gw.uninett.no? Forklar kort.

f) Når cube(128.39.74.16) sender en nettverkspakke til nexus(128.39.89.10), går pakken innom gatewayen cadeler30-gw.uninett.no? Forklar kort.

g) En nettverkspakke sendes fra cube(128.39.74.16) til nexus(128.39.89.10). Vil denne pakken under normale forhold sendes til alle maskinene på 128.39.89.0 nettet eller bare til nexus? Forklar kort.

h) En nettverkspakke sendes fra cube(128.39.74.16) til sfinx(158.36.89.34). Vil denne pakken under normale forhold sendes til alle maskinene på 158.36.89.0 nettet eller bare til sfinx? Forklar kort.

i) IP-adressen til en av host'ene i figuren er ugyldig og må være feil. Hvilken? Forklar kort.

j) Hvordan kan både cube(128.39.74.16) og gandalf(128.39.75.245) være på samme nettverk 128.39.74.0? Hvorfor tilhører ikke gandalf nettverket 128.39.75.0? Forklar kort.

k) Når en bruker på nero(158.36.89.12) logger seg inn på cube(128.39.74.16) med telnet, startes opprettelsen av forbindelsen ved at det sendes en nettverkspakke til cube. Som svar på denne pakken, returneres det en pakke fra cube til nero. Figuren viser noen av feltene i IP og TCP-headeren for en slik pakke. Skriv ned verdien for følgende felt i svarpakken fra cube: sender adresse, mottager adresse, source port, destination port, SYN og ACK. Ett av dem kan du ikke vite nøyaktig, men skriv ned en typisk verdi.

\includegraphics[width=9cm]{i.eps}

l) Neste pakke som sendes går fra nero som startet forbindelsen tilbake til cube igjen. Skriv ned verdien for de samme feltene som i forrige delspørsmål for denne pakken også.

m) I løpet av denne telnet-forbindelsen Vil brukeren på nero sende sitt passord til cube for å bli pålogget. Er det mulig å lese dette passordet hvis man har tilgang til nettverkstrafikken på pil52-gw.uninett.no? Forklar kort.

n) Med tanke på sikkerhet, vil du anbefale brukeren på nero som ønsker å logge seg på cube en annen måte å logge seg inn på? Forklar kort hvorfor.

o) Hvor mange bit består et portnummer av og hva er dermed det høyest mulige portnummeret?

Oppgave 4

Brukerne på en Unix-maskin er vanligvis definert i filen /etc/passwd. Starten på denne filen kan se ut som følger

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
ftp:x:99:99:Anonymous FTP:/local/iu/ftp:/bin/sync
snort:x:10004:1005:Snort IDS:/var/log/snort:/bin/false
nobody4:x:65534:65534:SunOS 4.x Nobody:/:/bin/sync
mroot:x:0:0:Tcsh Root account:/local/iu:/bin/bash
studwww:x:24:24:web server daemon:/:/bin/bash
snort:x:10044:1005:Snort IDS:/var/log/snort:/bin/false
Skriv et perl-script med navn check.pl som kontrollerer /etc/passwd og melder ifra om følgende: Anvendt på passordfilen vist over skal scriptet gi:
$ check.pl /etc/passwd
Scriptet kjører på rex under OS'et Linux
-rw-------  1 haugerud drift 453 Jan 31 20:56 /etc/passwd
Det er 10  brukere i passordfilen

Følgende brukere har UID = 0:
   root (root)
   mroot (Tcsh Root account)

Følgende brukere har samme brukernavn:
Brukernavn snort:
   UID 10004 (Snort IDS)
   UID 10044 (Snort IDS)

Følgende brukere har samme userID:
Uid 0:
   Brukernavn root (root)
   Brukernavn mroot (Tcsh Root account)
Uid 65534:
   Brukernavn nobody (nobody)
   Brukernavn nobody4 (SunOS 4.x Nobody)
Hvis det for eksempel ikke finnes brukere med samme brukernavn, skal scriptet ikke skrive ut linjen "Følgende brukere har samme brukernavn:".

-SLUTT-



haugerud 2009-03-23