Oppgave 1
I denne oppgaven skal du i delspørsmål a) til d) løse problemet ved å 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) Gi en kommando som sletter filen fil.txt
som ligger i katalogen /tmp
..
b) Gi en kommando som setter rettighetene til din fil /tmp/open
slik at
eieren (du) har alle rettigheter mens gruppen og alle andre bare kan lese filen.
c) Gi en kommando som laster ned siden http://www.vg.no/index.html
til katalogen du står i.
d) Gi en kommando som gir antall linjer i filen index.html
som inneholder ordet 'sport'
e) Du utfører følgende:
$ PATH="" $ lsHva blir output?
f) Hva skjer når du utfører følgende script?
#! /bin/bash $0 &
g) Hva skjer når du utfører følgende script og hvorfor bør du IKKE kjøre dette scriptet?
#! /bin/bash $0 & $0 &
Oppgave 2
a)
Et "Network Intrusion Detection System" er et system som prøver å oppdage om noen forsøker
å bryte seg inn på et nettverk. Et meget utbredt slikt system heter snort
og oppdager
innbruddsforsøk ved å sammenligne nettverkstrafikk med en rekke regler for hvordan kjente innbrudd
ser ut. Dette settet med regler oppdateres jevnlig og ligger i en fil på web-adressen
http://www.snort.org/dl/rules/snortrules-snapshot-2_1.tar.gz
. I denne deloppgaven skal du lage et
bash-script som henter denne filen og pakker den ut. Du kan tenke deg at f. eks. cron
sørger for
at scriptet kjøres en gang i døgnet og at det blir kjørt av root
.
Når du pakker ut tar.gz-filen, lages det en katalog med navn rules
som
inneholder alle filene som snort
trenger.
Scriptet skal oppfylle følgende:
tar.gz
-filen og rules
-katalogen skal legges i /etc/snort
tar.gz
-filen skal beholdes helt til en ny tar.gz
-fil lastes ned. Da skal den gamle slettes først.
tar.gz
-filen pakkes ut, skal den gamle rules
-katalogen flyttes til en med navn rules.old
rules.old
må slettes før flyttingen i forrige punkt
rules
-katalogen skal settes til root
b) Skriv et bash-script rename
som endrer filendelse på filer i katalogen det kjøres.
Brukeren angir en filendelse og hva den skal endres til med to argumenter. Hvis man bruker rename
som følger:
$ rename wav mp3 Endrer fil.wav til fil.mp3 Endrer fil2.wav til fil2.mp3skal alle filer i katalogen som har filendelse
wav
endres til mp3
.
En opplysning om hver endring skal gis som i eksempelet.
Hvis brukeren ikke angir to argumenter skal scriptet avslutte og oppgi
riktig syntaks. Hvis det ikke finnes filer med den filendelsen brukeren angir som første
argument, skal scriptet gi en melding om det. Manualsiden for kommandoen basename
kan
være til hjelp for å løse denne oppgaven.
NAME basename - strip directory and suffix from filenames SYNOPSIS basename NAME [SUFFIX] basename OPTION DESCRIPTION Print NAME with any leading directory components removed. If specified, also remove a trailing SUFFIX.
Oppgave 3
I denne oppgaven skal vi se på forskjellene mellom programmer skrevet i Java, C og bash og deres
avhengighet av hvilken maskinplattform og hvilket operativsystem man kjører dem på.
På din x86-PC som kjører Linux har du kildekoden til et Java-program med navn Hello.java
.
Du gjør følgende:
$ javac Hello.java $ java Hello Hello world!
a) Forklar kort de to kommandoene, hva som skjer og hva filen Hello.class
er.
b) Du kopierer Hello.class
til en Sun Unix-maskin som kjører Solaris og kjører det med
$ java HelloVil programmet kunne kjøre her? Forklar kort. Krever det eventuelt spesielle forutsetninger?
c) Du kopierer Hello.class
til en Windows 2000 PC og kjører det fra
Command Prompt
med
C:\>java HelloVil programmet kunne kjøre her? Forklar kort. Krever det eventuelt spesielle forutsetninger?
d)
På din Linux-PC kompilerer du C-programmet Hello.c
og får den eksekverbare filen a.out
.
Du gjør følgende:
$ a.out Hello world!Forklar kort hva som skjer.
e) Du kopierer a.out
til en Sun Unix-maskin som kjører Solaris og kjører det med
$ a.outVil programmet kunne kjøre her? Forklar kort. Krever det eventuelt spesielle forutsetninger?
f) Du kopierer a.out
til en Windows 2000 PC (som kjører på nøyaktig samme hardware som din
Linux-PC) og kjører det fra
Command Prompt
med
C:\>a.outVil programmet kunne kjøre her? Forklar kort. Krever det eventuelt spesielle forutsetninger?
g)
På din Linux-PC kjører du bash-scriptet Hello.bash
som ser slik ut
#! /bin/bash echo "Hello world!"Forklar kort hva som skjer når du kjører det (ikke bare hva output blir, men også litt om hvordan maskinen utfører koden).
h) Du kopierer Hello.bash
til en Sun Unix-maskin som kjører Solaris og kjører det med
$ Hello.bashVil programmet kunne kjøre her? Forklar kort. Krever det eventuelt spesielle forutsetninger?
i) Du kopierer Hello.bash
til en Windows 2000 PC og kjører det fra
Command Prompt
med
C:\>Hello.bashVil programmet kunne kjøre her? Forklar kort. Krever det eventuelt spesielle forutsetninger?
Oppgave 4
Programmet traceroute
gir deg en mulig rute som en nettverkspakke følger når man
sender noe til en annen host. Fra en maskin på skolen kan det f. eks. se slik ut:
$ /usr/sbin/traceroute anyon.uio.no traceroute to anyon.uio.no (129.240.86.20), 30 hops max, 40 byte packets 1 cadeler30-gw.uninett.no (128.39.89.1) 1 ms 1 ms 1 ms 2 pil52-gw.uninett.no (158.36.84.21) 4 ms 1 ms 1 ms 3 stolav-gw.uninett.no (128.39.0.73) 2 ms 1 ms 1 ms 4 oslo-gw1.uninett.no (128.39.46.249) 1 ms 1 ms 1 ms 5 uio-gw7.uio.no (128.39.3.94) 1 ms 1 ms 1 ms 6 abel-gw.uio.no (129.240.100.126) 1 ms 1 ms 1 ms 7 fys-gw.uio.no (129.240.100.138) 1 ms 1 ms 1 ms 8 anyon.uio.no (129.240.86.20) 1 ms 1 ms 2 msI denne oppgaven skal du skrive ditt eget
traceroute
program i Perl.
Generelt lagres det ikke informasjon om hvilke gateways en
pakke er innom. Men man kan finne det ut ved hjelp av et lite triks. I IP-headeren er
det et felt som kalles "Time To Live" (ttl
) og som inneholder et tall. Hver gang en pakke er
innom en gateway, senkes dette tallet med en. Hvis det blir null, droppes pakken og gatewayen sender
en melding til avsender om at pakken har blitt droppet. Dette gjøres for å være sikker på at en pakke ikke går
i en evig løkke. Du skal i scriptet utnytte dette. Hvis man sender en pakke med ttl
= 1,
vil den droppes av den første gatewayen pakken kommer til. Kommandoen ping
har en opsjon
-t
som gjør at man kan sette ttl
-verdien. Dermed får man følgende resultat:
$ ping -w 1 -c 1 -t 1 anyon.uio.no PING anyon.uio.no (129.240.86.20) from 128.39.89.9 : 56(84) bytes of data. From cadeler30-gw.uninett.no (128.39.89.1) icmp_seq=1 Time to live exceeded(Opsjonen
-w 1
angir at man bare skal vente ett sekund på svar på den opprinnelige
pakken. Opsjonen -c 1
angir at det kun skal sendes en pakke.)
Dermed vet man at når man sender en pakke til anyon.uio.no
, er cadeler30-gw.uninett.no
den første gatewayen pakken går til. Neste steg
blir å sende en ping-pakke med ttl
= 2. Først går den til cadeler30-gw.uninett.no
som senker
ttl
fra 2 til 1 og sender den videre i riktig retning. Neste gateway senker så ttl
fra 1 til 0 og
sier ifra til avsender om at pakken er droppet:
$ ping -w 1 -c 1 -t 2 anyon.uio.no PING anyon.uio.no (129.240.86.20) from 128.39.89.9 : 56(84) bytes of data. From pil52-gw.uninett.no (158.36.84.21) icmp_seq=1 Time to live exceededSlik kan man fortsette å øke
ttl
-verdier helt til man kommer helt fram. I vårt eksempel
må vi øke ttl
helt til 8 og da får vi en anderledes tilbakemelding:
$ ping -w 1 -c 1 -t 8 anyon.uio.no PING anyon.uio.no (129.240.86.20) from 128.39.89.9 : 56(84) bytes of data. 64 bytes from anyon.uio.no (129.240.86.20): icmp_seq=1 ttl=248 time=1.51 msLag et Perl-program
ttl.pl
som bruker output fra ping
og denne strategien til å
finne veien en pakke sannsynligvis vil ta. Output fra programmet skal i vårt eksempel
være:
$ ttl.pl anyon.uio.no 1 cadeler30-gw.uninett.no (128.39.89.1) 2 pil52-gw.uninett.no (158.36.84.21) 3 stolav-gw.uninett.no (128.39.0.73) 4 oslo-gw1.uninett.no (128.39.46.249) 5 uio-gw7.uio.no (128.39.3.94) 6 abel-gw.uio.no (129.240.100.126) 7 fys-gw.uio.no (129.240.100.138) 8 anyon.uio.no (129.240.86.20)Scriptet skal avsluttes hvis
ttl
blir over 100. Feilmelding skal gis om ikke
nøyaktig ett argument blir brukt. Hvis man sender ping
til en host som
ikke finnes, får man følgende tilbakemelding:
$ ping -w 1 -c 1 -t 2 finnes.ikke.no ping: unknown host finnes.ikke.noBrukeren skal da få en melding fra scriptet om at angitt host ikke finnes. (NB! Vær oppmerksom på at
ping
sender "unknown host"-meldingen til stderr
, men
at konstruksjonen 2>&1
videresender stderr
til stdout
.)
-SLUTT-