\documentclass[a4paper,11pt]{article}
\usepackage[german]{babel}
\usepackage[latin1]{inputenc}
\usepackage{epsfig}
\usepackage{verbatim}
\newcommand{\url}[1]{\nobreak{\it#1}}
\newcommand{\tilda}{\def\~{}}
\newcommand{\grad}{\ensuremath{^\circ}}
\usepackage{german}
\selectlanguage{\austrian}

\setlength{\oddsidemargin}{-10mm}
\setlength{\evensidemargin}{-10mm}


\begin{document}
\title{Technische Praxis der Computersysteme 2 Ausarbeitung UE 1 - 2 Sommersemester 2006 Bernhard Lamel, Roland Steinbauer, Gerald Teschl}
\section{\"Ubung 1}
\begin{enumerate}
\item  Erzeuge mit Hilfe von adduser einEn neuEn BenutzerIn für Dich selber. (Hinweis: {\tt man (8) adduser}) Logge Dich als Root aus, logge Dich in Deinen Account ein, und werde von nun an über {\tt su}  Root.
\begin{verbatim}
# adduser aoe
Adding user `aoe'...
Creating home directory `/home/aoel'.
Copying files from `/etc/skel'
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for aoel
Enter the new value, or press ENTER for the default
        Full Name []: Alexander Oelzant
				Room Number []: 822
				Work Phone []: 
				Home Phone []:
				Other []: 
Is the information correct? [y/N] y
# su - aoel
>
\end{verbatim}

\item Finde den Eintrag in der Logdatei /var/log/messages über dein su.

\begin{verbatim}
# zgrep -E "su.*root" /var/log/messages
Apr  1 23:19:36 comitan su[8769]: (pam_unix) session opened for user root 
by aoe(uid=822)
\end{verbatim}

\item Erzeuge (von Hand) einen neuen BenutzerInnenaccount für den/die BenutzerIn {\tt user}. Die Syntax eines Konfigurationsfiles mit Name filename kann (meist) mit Hilfe von man 5 filename abgerufen werden.
\begin{enumerate}
\item Füge eine neue Zeile zu {\tt /etc/passwd} hinzu (verwende eine UID die noch nicht vergeben ist). Mit welchem Editor editierst Du diese Datei?
\hskip-5em
\begin{verbatim}
# nuid=$[`cut -f3 -d: /etc/passwd | sort -n | grep -v "655.." | tail -n1` + 1]
# echo "user:$nuid:500:,,,:/home/user:/bin/bash" >> /etc/passwd
\end{verbatim}
\item Erzeuge das Homedirectory für den neuen User (auf Owner und Berechtigungen achten!).
\hskip-5em
\begin{verbatim}
# mkdir -m 755 /home/user
# chown user.users /home/user
\end{verbatim}
\item Füge eine entsprechende Zeile zu {\tt /etc/shadow} hinzu.
\item Setze das Passwort für den User user.
\hskip-5em
\begin{verbatim}
# perl -e 'print STDERR "password: ";print "user:",crypt(<>,"\$1\$salt"),
  "13243:0:99999:7:::\n"; print STDERR "\n"'  \
  >> /etc/shadow
# password: asd
\end{verbatim}

\end{enumerate}

\item Erzeuge nun eine eigene Gruppe für den neuen User {\tt user}:
\begin{enumerate}
\item Editiere die Datei /etc/group um eine neue Gruppe hinzuzufügen, und trage bei den Mitgliedern user ein.
\hskip-5em
\begin{verbatim}
# ngid=$[`cut -f3 -d: /etc/group | sort -n | grep -v "655.." | tail -n1` + 1]
# echo "userg:x:$ngid:" >> /etc/group
# sed -ie 's/^userg:.*/&user/' /etc/group
# grep "^userg:" /etc/group
userg:x:1825:user
\end{verbatim}
\item Füge in dem entsprechenden Feld in /etc/passwd die GID ein.
\begin{verbatim}
# sed -ie 's/^user:
# sed -ie 's/^\(user:[^:]*:[^:]*:\)[^:]*/\1'$guid'/p' /etc/passwd
\end{verbatim}
\end{enumerate}

\item Wie kannst du sämtliche Files, die der User {\tt user} besitzt, finden? (Hint: {\tt man (1) find}) Diesen Vorgang musst Du zum Beispiel durchführen, wenn Du den User user entfernst. Wirst Du die Suche nach diesen Files vor oder nach dem Löschen des entsprechenden Eintrags in {\tt /etc/passwd} durchführen?
\begin{verbatim}
# # vor entfernen:
# find / -user user
# # nach entfernen:
# find / -uid $nuid
\end{verbatim}

\item Sperre das Login für den User user unter Ausgabe einer entsprechenden Meldung.
\begin{enumerate}
\item Erstelle ein Script, das die Meldung ausgibt und kurze Zeit wartet (dafür eignet sich {\tt sleep (1)}).

/home/aoel/no\_login 

\hline

\begin{verbatim}
#!/bin/bash
trap "" 2 3 15
echo "you suck. go away."
sleep 2
exit 1
\end{verbatim}
\hline

\tt{\# chmod a+x /home/aoel/no\_login}

\item Ersetze die Login-Shell für {\tt user} durch das Skript.
\hskip-5em
\begin{verbatim}
# sed -ie 's#^\(aoel:.*:\)[^:]*$#\1/home/aoel/no_login#p' /etc/passwd
\end{verbatim}

\item Teste indem Du dich als {\tt user} einloggst.
\begin{verbatim}
# su - aoel
you suck. go away.
#
\end{verbatim}
\end{enumerate}

\item{Erstelle 40 BenutzerInnenaccounts mit den Namen {\tt besucher1,
besucher2,..., besucher40}. JedEr dieser BenutzerInnen soll zur Gruppe {\tt
besucher}
gehören; weiters soll beim Login auf der Textkonsole eine Mitteilung (der
Inhalt der Datei {\tt /etc/message}) ausgegeben werden. (Dafür eignet sich zB
ein
geeignetes Bash-Loginfile in jedem Homedirectory). Setze das Passwort für diese
User auf Gast. Verwende für diese Aufgabe {\tt adduser} in einem von Dir
erstellten Skript:}
\begin{enumerate}
\item{Erzeuge in {\tt /etc/skelbesucher} ein Bash-Loginfile, welches die Nachricht ausgibt.}
\hskip-5em \begin{verbatim}
# es=/etc/skelbesucherIn; mkdir $es; echo "cat /etc/message" > $es/.bash_profile
\end{verbatim}

\item Finde die richtige Syntax für den benötigten {\tt adduser} Befehl.
\item {Schreibe ein Skript, welches {\tt adduser(8)} für jeden der neuen Accounts durchführt.}
\noindent
\begin{verbatim}
# for i in `seq 1 40`; do
   useradd -m -k $es -g besucherin besucherin$i;
  done
#
\end{verbatim}
\end{enumerate}

\item Finde mit Hilfe von {\tt find} (verwende {\tt -perm}) alle Files in den Verzeichnissen {\tt /bin} und {\tt /sbin}, auf denen das SUID-Bit gesetzt ist, und finde eine Erklärung warum diese Programme SUID sind.

\hskip-5em
\begin{verbatim}
# find /bin /sbin -perm -4000 -ls
975560   24 -rwsr-xr-x   1 root     root        23416 May 18  2005 /bin/su
975559   36 -rwsr-xr-x   1 root     root        35512 May 18  2005 /bin/login
973482   16 -rwSr--r--   1 root     root        15520 Jun 16  1997 /bin/sulogin
975679   72 -rwsr-xr-x   1 root     root        68440 Sep 18  2005 /bin/mount
975875   40 -rwsr-xr-x   1 root     root        40920 Sep 18  2005 /bin/umount
973494   32 -rwsr-xr-x   1 root     root        30764 Dec 22  2003 /bin/ping
975689   28 -rwsr-xr-x   1 root     root        26604 Dec 22  2003 /bin/ping6
908591   12 -rwsr-xr-x   1 root     root        11444 Feb 26  1998 /sbin/cardctl
908660   28 -r-sr-xr-x   1 root     root        26503 Sep 24  1999 /sbin/pwdb_chkpwd
908743   16 -r-sr-xr-x   1 root     root        15000 Jun 28  2004 /sbin/unix_chkpwd

su, login: set uid, log in
sulogin: maintenance (single user mode)
mount/umount: benutzerInnen sollen platten mounten/unmounten koennen, wenn
	das entsprechende "user" flag gesetzt ist
ping, ping6: ip-stack
cardctl: pccard-stack
pwdb_chkpwd, unix_chkpwd: pam intrinsics
\end{verbatim}

\item Schreibe ein Shellskript, dass nach passwortlosen Logins (dh leeren Passwortfeldern in {\tt /etc/passwd}) sucht.

\begin{verbatim}
$ grep -iE '^[^:]+::' /etc/passwd
besucherin40::1864:1825::/home/besucherin40:/bin/bash
\end{verbatim}

\item  Schreibe (als Root) einen at-Job, der in einer Minute reinstall.sh aufruft. Warte, bis die Installationsroutine gestartet hat. Schönen Abend!

\begin{verbatim}
# echo "reinstall.sh" | at `date -d "now +1min" +%R`
warning: commands will be executed using /bin/sh
job 4 at 2006-04-05 16:07
# shutting down for system reboot now!
\end{verbatim}

\end{enumerate}

\section{\"Ubung 2: Kernel}

\begin{enumerate}
\item{Finde den neuesten 2.6er Kernel auf http://www.kernel.org. Lade den vollen Kernelquellcode herunter (dazu solltest Du einen Mirror verwenden) und entpacke ihn (in /usr/src). Lege einen symbolischen Link namens /usr/src/linux auf das soeben entstandene Verzeichnis an.}

\begin{verbatim}
# all=`lynx -dump kernel.org`; ver=`echo $all|grep prepatch|cut
# latest_version=`echo "$all" | \
                  grep -A 1 prepatch | \
                  head -n 2 | \tail -n 1 | \
                  sed -e 's/.*\(2.6[^ ]*\) .*/\1/'`
# echo $latest_version 
2.6.17-rc1
# cd /usr/src
# $base_url=http://kernel.org/pub/linux/kernel/v2.6/testing/
# curl $base_url/linux-$latest_version.tar.bz2 | tar -xjf
# ln -s linux-$latest_version linux
\end{verbatim}

\item Hole Dir eine 2.6-config aus {\tt /boot/} und konfiguriere ausgehend
von ihr einen Kernel mit der nötigen Hardwareunterstützung (dh schau mit {\tt
lspci} nach, was Du eigentlich brauchst), ext3-Unterstützung in den Kernel
compiliert (nicht als Modul gebaut), Framebuffer-Konsole mit Vesa-Treiber.
Entferne insbesondere den RAID-Support, den Support für nicht im Rechner
befindliche IDE-Controller, den Support für sich nicht im Rechner befindende
Ethernet-Karten, IrDA-Support, usw; ja, auch die Unterstützung für das
XBox-Gamepad darf entfernt werden!

\begin{verbatim}
# cd linux
# cp /boot/2.6-config .config
# sed -ie 's/.*RAID/#&/' .config
# sed -ie 's/.*XBOX/#&/' .config
# make oldconfig
...
# make menuconfig
...
# 
\end{verbatim}

\item Kompiliere und installiere Deinen neuen Kernel.
\begin{verbatim}
# make bzImage >World.log 2>&1
# tail World.log
  OBJCOPY arch/i386/boot/vmlinux.bin
  HOSTCC  arch/i386/boot/tools/build
  BUILD   arch/i386/boot/bzImage
Root device is (3, 2)
Boot sector 512 bytes.
Setup is 4879 bytes.
System is 2102 kB
Kernel: arch/i386/boot/bzImage is ready
# make modules modules_install  >>World.log 2>&1
# cp arch/i386/boot/bzImage /boot/bzImage.$latest_version
# echo "image = /boot/bzImage.$latest_version
  root = /dev/hda2
	label = l-$latest_version
	read-only" >> /etc/lilo.conf
# lilo
...
adding l-2.6.17-rc1
#
\end{verbatim}

\item Boote Deinen neuen Kernel. Lies die Logeinträge Deines neuen Kernels. Gibt es Probleme? Wenn ja, welche? Wie kannst Du sie beheben?

...

\item Informationssammlung: {\it (Notiere die Antworten für späteren Gebrauch!)}
\begin{enumerate}
\item Wieviel Platz ist in Deiner Root-Partition frei? Wieviel GB sind belegt? Wie gross ist sie insgesamt?
\begin{verbatim}
$ df /
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/ide/host0/bus0/target0/lun0/part2
                      10080520   9456544    111908  99% /
\end{verbatim}
\item Welches Device entspricht Deiner Root-Partition?

{\tt hda2}

\item Welches Device entspricht Deiner Swap-Partition?
\item Wie gross ist Deine Swap-Partition? Ist sie aktiv? Wird sie benutzt?

\begin{verbatim}
#cat /proc/swaps
Filename                               Type       Size    Used    Priority
/dev/ide/host0/bus0/target0/lun0/part1 partition  2097136 358528  -1
/dev/ide/host0/bus1/target0/lun0/part1 partition  2097136 0       -2
\end{verbatim}

\item Welches Filesystem verwaltet Deine Root-Partition?
\begin{verbatim}
$ grep " / " /proc/mounts 
rootfs / rootfs rw 0 0
/dev/root / ext3 rw 0 0
\end{verbatim}

\end{enumerate}

\item Ist der Swapspeicher belegt? Wenn ja, fahre genügend Prozesse herunter um ihn abschalten zu könen. Schalte den Swapspeicher ab.

... {\tt swapoff -a} ...

\item Verwende {\tt fdisk (8)}, um die Partitionierung Deines Systems wie folgt
zu verändern: Die Swappartition wird in zwei gleich grosse Partitionen zerlegt,
eine Partition soll ein {\tt ext3}-Filesystem beherbergen, die andere wiederum
Swapspeicher. Welche Devices entspricht Deinen neuen Partitionen?

... fdisk ... d 1 n p 1 +500M t 1 82 n +500M t 5 83 w ...

\item Formatiere die im vorigen Beispiel erstellten Partitionen (als ext3-Filesystem und als Swap). Wieviele inodes hat das neu formatierte Filesystem? Wieviele Blockgruppen hat es? Was ist die Blockgrösse? Schalte die Swappartition wieder an.

\begin{verbatim}
# mkswap /dev/hda1
Setting up swapspace version 1, size = 5247688 kB
no label, UUID=280bdbb1-ef0f-430f-9089-ea0219d3fb0d
# mke2fs -n -j  /dev/hda5
mke2fs 1.37 (21-Mar-2005)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
641280 inodes, 1281175 blocks
64058 blocks (5.00%) reserved for the super user
First data block=0
40 block groups
32768 blocks per group, 32768 fragments per group
16032 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736
\end{verbatim}

\item{Verwende {\tt cpio (1)}, um das Verzeichnis {\tt /home} auf das im
vorigen Beispiel erstellte Filesystem zu migrieren. Das heisst (die folgenden
Schritte und ihre Reihenfolge sind ein Vorschlag, über den sich an mancher
Stelle diskutieren liesse; mach Dir Gedanken, was hier wirklich zu tun ist!):}

\begin{enumerate}
\item{Gehe sicher, dass niemand eine Datei in {\tt /home} benutzt. (Jetzt ist ein guter Zeitpunkt, um das System in Single User Mode zu bringen; egal wie Du's machst, Du solltest sicher sein, dass niemand während der nächsten Schritte eine Datei in {\tt /home} verändert!)}

\begin{verbatim}
# telinit 1
...
login: root
password:
#
\end{verbatim}

\item{Erstelle ein cpio-Backup des Inhalts von {/home}. (Wo erstellst Du das Backup? Wieviel Platz benötigst Du dafür?)}


\item Spiele das cpio-Backup auf Dein neues Filesystem (Du kannst um die beiden letzten Schritte zusammenzufassen auch den copy-pass mode von cpio verwenden).

\begin{verbatim}
# (cd /home;  find . -print0 | cpio -p0dmu /home_new)
191641 blocks
\end{verbatim}

\item Mounte Dein neues Filesystem nach {\tt /home} (falls es nicht schon dort gemountet ist) und teste.

\begin{verbatim}
# umount /home
# umount /home_new
# mount /dev/hda5 /home/new
# su - user
$
\end{verbatim}

\item Editiere /etc/fstab (Eintrag für die Swappartition nicht vergessen!)

\begin{verbatim}
sed -ie 's#^.*[^ \t]*\([ \t].*swap.*\)#/dev/hda1\1#' /etc/fstab
\end{verbatim}

\end{enumerate}

\item   10. Mach die Änderungen an der Partitionierung rückgängig (dh vergrössere mit Hilfe von fdisk die Rootpartition auf die vorherige Groesse), bevor du reinstall.sh aufrufst.

... swapoff -a ... fdisk d 1 d 5 w q ...

\end{enumerate}

\section{3. Übung}

\begin{enumerate}

\item 
\begin{enumerate}
\item Welche Netzwerkadresse besitzt Dein Rechner?

\begin{verbatim}
# addr=`ifconfig | sed -ne '/.*addr:\(.*\) .*/!d; 
                            s/.*addr:\([^ ]*\) .*/\1/p; q'`
# echo $addr
192.168.2.10
\end{verbatim}

\item{Was ist die Netzmaske des Netzwerks?}

\begin{verbatim}
# netmask=`ifconfig | sed -ne '/Mask:/!d; s/.*Mask:\([^ ]*\)/\1/p; q'`
# echo $netmask
255.255.255.0
\end{verbatim}

\item{Was ist der Hostname Deines Rechners?}
\begin{verbatim}
$ perl -le 'use Sys::Hostname; print hostname()'
df.aoe
\end{verbatim}

\item{Was ist die IP-Adresse und der Hostname des benutzten Gateways?}

\begin{verbatim}
$ netstat -rn|grep default
default            192.168.2.100      UG          0    12600    em0
default                           2001:1408:2011:ffff::1        UGS         em0
# router=`netstat -rn|grep ^0.0.0.0|cut -c17-32`
\end{verbatim}

\item{Welchen Nameserver benutzt Dein Rechner?}

\begin{verbatim}
$ grep names /etc/resolv.conf
nameserver 192.168.2.99
\end{verbatim}

\end{enumerate}

\item{Fahre das Interface eth0 mit Hilfe von ifdown eth0 herunter. Konfiguriere es nun mithilfe der im letzten Beispiel gefundenen Informationen ,,von Hand'' neu (also ohne dhcp, unter Verwendung der Kommandos ifconfig, route, oder mit Hilfe von ip).}
\begin{verbatim}
# ifconfig eth0 down
# ifconfig eth0 $addr netmask $netmask
# route add default gw $router
\end{verbatim}

\item{Teste Deine Netzwerkverbindung - kannst Du Deinen Rechner pingen, den Gateway pingen, einen Rechner im Internet pingen?}

\begin{verbatim}
# ping -qc1 $addr                                  \
  && ping -qc1 $router                             \ 
  && ping -qc1 www.univie.ac.at) >/dev/null 2>&1   \
  && echo success                                  \
  || echo fail
success
\end{verbatim}

\item{Lösche alle iptables-Regeln, alle userdefinierten Chains, und setze die Zähler auf 0 zurück. Schreibe nun ein Shellscript, dass eine einfache Firewall implementiert: alle Verbindungen, die von Deinem Rechner aus aufgebaut werden, sollen zugelassen werden, alle Verbindungen, die zu Deinem Rechner aufgebaut werden, sollen abgeblockt werden. Teste bis es funktioniert!}

\begin{verbatim}
bash# iptables-restore 
\end{verbatim}
\hline
\begin{verbatim}
# Generated by iptables-save v1.3.3 on Thu Apr  6 14:19:07 2006
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A PREROUTING -m state --state INVALID,NEW,UNTRACKED -j DROP 
COMMIT
# Completed on Thu Apr  6 14:19:07 2006
# Generated by iptables-save v1.3.3 on Thu Apr  6 14:19:07 2006
*filter
:INPUT ACCEPT [708:118192]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [722:84431]
COMMIT
# Completed on Thu Apr  6 14:19:07 2006
\end{verbatim}
\hline
\begin{verbatim}
$ ssh server
Password:
Last login: Thu Apr  6 14:11:10 2006 from 2001:1408:2011:fffe:230:65ff:fe2a:81c6
MANPATH: Undefined variable.
server> ping -c1 client
PING client (192.168.3.44) 56(84) bytes of data.

--- client ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
\end{verbatim}

\item{Installiere einen Portscanner (zB nmap) und verwende ihn, um die offenen Ports auf dem Rechner eines Deiner Nachbarn aufzufinden.}

\begin{verbatim}
# apt-get install nmap
Reading Package Lists... Done
Building Dependency Tree... Done
Sorry, nmap is already the newest version.
0 packages upgraded, 0 newly installed, 0 to remove and 27  not upgraded.
# nmap df

Starting nmap V. 2.00 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
Interesting ports on df.aoe (192.168.2.10):
Port    State       Protocol  Service
11      filtered    tcp        systat          
22      open        tcp        ssh             
70      filtered    tcp        gopher          
88      filtered    tcp        kerberos        
111     open        tcp        sunrpc          
113     open        tcp        auth            
150     filtered    tcp        unknown         
154     filtered    tcp        unknown         
255     filtered    tcp        unknown         
301     filtered    tcp        unknown         
310     filtered    tcp        unknown         
338     filtered    tcp        unknown         
437     filtered    tcp        unknown         
446     filtered    tcp        unknown         
448     filtered    tcp        unknown         
454     filtered    tcp        unknown         
489     filtered    tcp        unknown         
511     filtered    tcp        unknown         
515     filtered    tcp        printer         
534     filtered    tcp        unknown         
559     filtered    tcp        unknown         
616     filtered    tcp        unknown         
631     open        tcp        ipp             
672     filtered    tcp        unknown         
728     filtered    tcp        unknown         
739     filtered    tcp        unknown         
842     filtered    tcp        unknown         
853     filtered    tcp        unknown         
936     filtered    tcp        unknown         
1006    filtered    tcp        unknown         

Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds
\end{verbatim}

\item {Stoppe alle nicht unbedingt notwendigen Dienste (es ist Teil dieser Aufgabe, die laufenden Dienste ausfindig zu machen und sich Gedanken darüber zu machen ob man sie braucht). Starte auf jeden Fall {\tt ssh}, und modifiziere Dein Firewall Skript so, dass {\tt ssh}-Verbindungen aus Deinem Subnetz akzeptiert werden.}

\begin{verbatim}
# rcdir=/etc/init.d
# for i in apache mysql ntp cups inetd; do
    $rcdir/$i stop
  done
# iptables -t nat -I PREROUTING -s $addr/24 --dport 22 -j ACCEPT
\end{verbatim}

\item{Installiere einen FTP-Server (zB vsftpd) auf Deinem System. Konfiguriere ihn so, dass er anonymes FTP zulässt sowie das Login von lokalen Benutzern. Bohre ein Loch in Deine Firewall sodass eingehende FTP-Verbindungen aus Deinem Subnetz akzeptiert werden.}

Durch die {\tt ESTABLISHED/RELATED} Regel im Zusammenhang mit Connection
Tracking werden auch die Datenverbindungen zugelassen.

\begin{verbatim}
# iptables -I PREROUTING -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# iptables -t nat -I PREROUTING -s $addr/21 --dport 22 -j ACCEPT
# apt-get install vsftpd
...
Starting FTP server: vsftpd.
# echo anon_root=/ftp >> /etc/vsftpd.conf; killall -HUP vsftpd
# mkdir -p /ftp/dir1/dir2; curl -s ftp://localhost/dir1/
drwxr-xr-x    2 0        0            4096 Jul 06 11:49 dir2
# echo xyz > /ftp/jkl; curl -s ftp://localhost/jkl
xyz
# curl -v  ftp://localhost/ 2>&1 | grep 230
< 230-Hello World
< 230 Login successful.
\end{verbatim}

\item{Installiere ngrep auf Deinem Rechner. Für die nächsten Aufgaben benötigst Du einen ,,Nachbarn'', der natürlich nicht physisch neben Dir sitzen muss. Finde einen!}

\begin{verbatim}
# apt-get install ngrep
Reading Package Lists... Done
Building Dependency Tree... Done
Sorry, ngrep is already the newest version.
0 packages upgraded, 0 newly installed, 0 to remove and 27  not upgraded.
\end{verbatim}

\item{Initiiere eine FTP-Sitzung als lokaler User von Deinem Rechner aus auf dem Rechner Deines Nachbarn. Dieser soll diese Verbindungsaufnahme mit Hilfe von ngrep mitverfolgen. Beachtet, wie ihr das Passwort mitlesen könnt. (Versucht das in beide Richtungen!)}

\hline
\begin{verbatim}
# ngrep -s 132 port 21
interface: eth0 (192.168.2.0/255.255.255.0)
filter: ip and ( port 21 )
####
T 192.169.2.100:21 -> 192.168.2.99:33924 [AP]
  220-- D -- FTP Server ...
##
...
T 192.168.2.99:33924 -> 192.35.244.50:21 [AP]
  USER anonymous..                                                           
##
T 192.35.244.50:21 -> 192.168.2.99:33924 [AP]
  331 Please specify the password...                                         
#
T 192.168.2.99:33924 -> 192.35.244.50:21 [AP]
  PASS curl_by_daniel@haxx.se..                                              
#
T 192.35.244.50:21 -> 192.168.2.99:33924 [AP]
  230 Login successful...                                                    
#
...
\end{verbatim}

\item{Starte einen ssh-Server, der auf Port 24 lauscht, nur Root-Logins
zulässt, kein X- oder TCP-Forwarding erlaubt, und bohre wieder ein
entsprechendes Loch in Deine Firewall.  }

\begin{verbatim}
# sed -e 's/Port 22/Port 24/'  \
      -e 's/.*PermitRootLogin.*//' \
      -e 's/.*X11Forwarding.*//' \
      -e 's/.*AllowTcpForwarding.*//' \
      /etc/ssh/sshd_config \
   > /etc/ssh/sshd_config_24
# echo "AllowUsers root" >> /etc/ssh/sshd_config_24
# echo "PermitRootLogin yes" >> /etc/ssh/sshd_config_24
# echo "X11Forwarding no" >> /etc/ssh/sshd_config_24
# echo "AllowTcpForwarding no" >> /etc/ssh/sshd_config_24
# iptables -t nat -I PREROUTING --dport 24 -j ACCEPT
# sshd -f /etc/ssh/sshd_config_24
\end{verbatim}

\end{enumerate}

\end{document}
