Løsningsforslag. Eksamen vår 2005 Operativsystemer og UNIX

Oppgave 1

a) chmod 700 ./secret.pl

b) ln -s /usr/bin/emacs21 em

c) diff /tmp/bank.txt bank.txt (eventuelt med --brief, alt cmp)

d) echo "The End" >> ../film.txt

e) ifconfig (eventuelt /sbin/ifconfig) eller hostname -i

f) Fordi du som vanlig bruker ikke har skriverettigheter til /etc/passwd, det har bare root.

g) Siste linje av filen /etc/passwd

Oppgave 2

#! /bin/bash

if [ $# -ne 1 ]
then
        echo "Syntaks: $0 brukernavn"
        exit
fi
user=$1

if [ "`whoami`" != "root"  ]
then
        echo "Scriptet kan bare kjøres av root"
        exit
fi

IFS=:
while read username x uNr gNr name homedir shell
do
   if [ "$username" = "$user" ]
   then
        echo "Brukeren $user finnes fra før. Avslutter"
        exit
   fi
   userNr=$uNr  # $uNr er kun definert innen do-done løkken
   groupNr=$gNr
done < /etc/passwd

# Nå er $userNr og $groupNr de to siste og største

(( userNr++ ))
(( groupNr++ ))

echo -en "Fullt navn: "
read userName

mkdir /home/$user
chown $userNr:$groupNr /home/$user  # ikke eksplisitt spurt etter dette, men pluss om man har det med

echo "$user:x:$userNr:$groupNr:$userName:/home/$user:/bin/bash" >> /etc/passwd
echo "$user::::::::" >> /etc/shadow

Oppgave 3

a) Det er IP-adressen til maskinen www.nb.no.

b) www er host-navn og nb.no er domenenavn.

c) En gateway sørger på lag 3 i OSI-modellen for å videresende IP-pakker ett steg (hop) nærmere riktig adressat. Er IP-adressen den skal sende til en maskin på et nettverk den er tilkoblet, sender den rett til denne maskinen. Hvis ikke videresender gatewayen pakken til en annen gateway på Internett.

d) Med denne netmasken er de 24 første bit'ene nettverksnummeret, altså 128.39.16.0, og hostnummeret er 12.

e) Netmask 255.255.252.0 betyr at de 22 første bit'ene er nettverksnummeret, altså 129.18.72.0 og de 10 siste bit'ene er hostnummeret, altså 11.00001011 = 512 + 256 + 11 = 779

f) host www.nb.no eller nslookup www.nb.no

g) Nei, siden maskinene er koblet til en switch, vil geek.nb.no ikke kunne lese pakkene som går til www.nb.no (men det finnes mer eller mindre effektive metoder som kan brukes til å lure switchen til å gjøre det).

h) Ja, siden have.fun.no og join.fun.no er koblet til samme HUB, sendes alle pakkene til alle maskinene og en med root-rettigheter på have.fun.no vil kunne lese passordet i klartekst ved for eksempel å bruke etherreal.

i) En som kjører som root på have.fun.no vil kunne se pakkene som sendes til geek.nb.no, men siden ssh blir brukt er all kommunikasjon kryptert og passordet kan ikke snappes opp.

j) En som kjører som root på gateway.nb.no vil også kunne se alle pakker som sendes, men ikke kunne snappe opp passordet fordi all informasjon er kryptert.

k)

sender adresse 129.18.74.56 have.fun.no
mottager adresse 128.39.16.250 geek.nb.no
source port 3425 portnummer generert av ssh-client, større enn 1024
destination port 22 ønsker å kontakte tjeneste 22, ssh, på server
SYN 1 SYN-flagg settes i første pakke i handshakingen
ACK 0 ACK-flagg er ikke satt i første pakke

l)

sender adresse 128.39.16.250 geek.nb.no
mottager adresse 129.18.74.56 have.fun.no
source port 22 ssh-serverens portnummer
destination port 3425 portnummeret som client sendte i forrige pakke
SYN 1 SYN-flagg settes også i andre pakke i handshakingen
ACK 1 ACK-flagg settes i svarpakken (acknowledge)

m) Ja, siden all web-trafikk har source eller destination port lik 80, kan det gjøres ved å droppe alle andre pakker.

n) Firewall eller brannmur (også kalt netfilter)

o) Nei, hver gang en pakke passerer en gateway, endres MAC-adressene slik at den går til riktig maskin på det nye nettverket. Innenfor et lokalt nettverk er det lag 2 adressen som brukes. Det er kun lag 3 IP-adressene som sendes hele veien.

p) Når pakkene sendes nøyaktig samtidig ut på et nettverk koblet sammen med en HUB, vil det oppstå en fysisk kollisjon, slik at mottagerene ikke vil kunne lese pakkene. Ethernet-protokollen har Colission Detection og ethernet-kortene som sendte pakkene vil oppdage kollisjonen og sende pakkene på nytt etter å ha ventet et tidsintervall som begge velger med tilfeldig lengde.

Oppgave 4

#! /bin/perl

if ($#ARGV != 0)
  {
   die "Angi ett filnavn som argument!\n";
  }

$fil = $ARGV[0];
$filny = "/tmp/$fil";

open(FIL,$fil) or die "can't open $fil\n";
open(FILNY,">$filny") or die "can't open $filny\n";

while($line = <FIL>)
  {
    $line =~ s/\r$//;
    print FILNY $line;
  }

close(FIL);
close(FILNY);
`/bin/mv $filny $fil`;
# Alternativt: system("/bin/mv",$filny,$fil);



Hårek Haugerud 2005-12-01