\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}