\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 4}
\begin{enumerate}
\item  Erzeugt zunächst auf dem Client und auf dem Server einen Benutzer (auf gleiche UID und GID achten!)

Server:

\begin{verbatim}
# adduser aoel
Adding user `aoel'...
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
# /etc/init.d/nis start
# Starting NIS services: ypserv yppasswdd ypxfrd ypbind
# su - aoel
>
\end{verbatim}

Client:

\begin{verbatim}
# echo -e "domain aoedomain server 192.168.3.44\nypserver 192.168.3.44" \
   > /etc/yp.conf
# echo aoedomain > /etc/defaultdomain
# echo '+:*:::::' >> /etc/passwd
# echo '+:*::' >> /etc/group
# portmap
# ypbind
# finger aoel
Login: aoel                             Name: Alexander Oelzant
Directory: /home/aoe                    Shell: /bin/tcsh
Office: -, -                            Home Phone: -
\end{verbatim}

\item Gebe das /home-Verzeichnis auf dem Server nur für diesen Client frei (dazu musst Du {\tt /etc/exports} editieren; {\tt man 5 exports} erklärt dieses File). Setze sinnvolle Optionen! Anschliessend startest Du NFS auf dem Server.

\begin{verbatim}
# echo '/home 192.168.2.10(rw,sync,no_subtree_check)' >> /etc/exports
# /etc/init.d/nfs-kernel-server start
\end{verbatim}

\item Versuche, das Home-Directory auf dem Client nun vom Server zu mounten: {\tt mount server:/home/ /home/}. Welche UID/GID erhältst Du auf dem Server, wenn Du auf dem Client als Root arbeitest?

\begin{verbatim}
# mount server:/home /home
# touch /home/asd
touch: /home/asd: Permission denied
# touch /home/tmp/asd
df# ls -ld /home/tmp/asd
-rw-r--r--  1 nobody  nobody  0 May  4 13:24 /home/tmp/asd
\end{verbatim}

Mit {\tt no\_root\_squash} w\"are das nicht passiert ... ;)

\item Ändert nun die Konfiguration dahingehend, dass Du auf dem Server auch Root-Rechte hast. Warum ist das im Regelfall keine gute Idee?

Siehe vorige Frage. Wenn Root am (potentiell) unsicheren Client UID-0-Files
anlegen kann, steht einem SUID-File und damit root am Server (so es
dort einen Login gibt) nichts im Weg (ein {\tt mount -o nosuid} bzw evtl
sogar {\tt noexec} kann das allerdings ebenfalls verhindern; der 
Sicherheitsaspekt am Client (Zugriff auf fremde BenutzerInnenaccounts)
hat hier jedenfalls {\bf keine} Relevanz, da {\tt root} ja
jederzeit ein {\tt su - user} machen und diese Dateien auf jeden Fall
lesen/schreiben kann!)

\item Nun wirst du den Automounter automount so konfigurieren, dass er das Mounten eines (lokalen) Verzeichnisses automatisiert. Die Manpages die Du benötigen könntest sind {\tt man 5 auto.master} und {\tt man 5 autofs}: Lege zunächst im Master Map File {\tt /etc/auto.master} einen Verweis auf das Mapfile {\tt auto.mnt} für das Verzeichnis {\tt /mnt/} ab. Wähle ein Timeout, das Dir vernünftig erscheint (nicht vergessen, das Du einfach eine lokale Partition mounten wirst!)

\begin{verbatim}
# echo /home_old
# apt-get install autofs
# echo '/mnt    /etc/auto.mntmap --timeout=10' >> /etc/auto.master
# echo 'old     -fstype=ext3            :/dev/hda14' > /etc/auto.mntmap
# /etc/init.d/autofs start
Starting automounter: loading autofs4 kernel module, done.
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/hda12             9605444   6383608   2733896  71% /
tmpfs                   257560         8    257552   1% /dev/shm
/dev/hda15             5505268   3753424   1472184  72% /home
tmpfs                   257560       132    257428   1% /dev
# ls /mnt/old
^C
# ps axuw|rep hda14
root      9549  3.6  1.0   7600  5196 ?        R    14:11   0:07 /sbin/fsck.ext3 -p /dev/hda14
\end{verbatim}

NB: {\tt autofs(4)} ist also sehr \lq{}brav\rq{}, was fsck betrifft.

\begin{verbatim}
# ls /mnt/old
bin    doc     include     lost+found  root   sys  vmlinux
boot   etc     initrd      mnt         sbin   tmp  vmlinux.hang
cdrom  floppy  initrd.old  opt         slice  usr  vmlinux.old
dev    home    lib         proc        SWAP   var  vmlinux.orig
# df /mnt/old
/dev/hda14            12689892  12032468     12808 100% /mnt/old
\end{verbatim}

\item Dein Rechner besitzt eine Windows-Partition. Diese wirst Du über den Automounter als {\tt /mnt/winhd/} zugänglich machen. Finde heraus, welche Partition und welches Dateisystem benutzt wird und lege das Map File {\tt /etc/auto.mntmap} entsprechend an. Du benötigst NTFS Treiber, die im Fedora Kern nicht enthalten sind - lade sie Dir von {\tt http://linux-ntfs.org/}  herunter.

\begin{verbatim}
# cat /etc/redhat-release
Fedora Core release 4 (Stentz)
# uname -r
2.4.18-3
# wget -q http://ovh.dl.sourceforge.net/sourceforge/linux-ntfs/ntfsprogs-1.13.0-1.i586.rpm
# wget -q http://surfnet.dl.sourceforge.net/sourceforge/linux-ntfs/kernel-ntfs-2.4.18-14.i686.rpm
# rpm --quiet -i ntfsprogs-1.13.0-1.i586.rpm
# rpm -ihv kernel-ntfs-2.4.18-14.i686.rpm

  Preparing...      ############################### [100%]
     1:kernel-ntfs  ############################### [100%]
# /sbin/modprobe ntfs
# dmesg | grep NTFS
    NTFS driver v1.1.22 [Flags: R/O MODULE]
# echo 'winhd   -fstype=ntfs            :/dev/hda5' >> /etc/auto.mntmap
\end{verbatim}

\item Überprüfe nun mittels {\tt ls /mnt/winhd}, ob die Konfiguration funktioniert (vorher {\tt service automounter restart} durchführen, oder SIGHUP an den automounter schicken!)

\begin{verbatim}
# /etc/init.d/autofs restart
Stopping automounter: done.
Starting automounter: done.
# ls /mnt/winhd
...
-r-xr--r-- 1 root root  9719 Aug 24 1996 ansi.sys
-r-xr--r-- 1 root root 15252 Aug 24 1996 attrib.exe
-r-xr--r-- 1 root root 28096 Aug 24 1996 chkdsk.exe
-r-xr--r-- 1 root root  5175 Aug 24 1996 choice.com
...
\end{verbatim}

\item Wie kannst du den Automounter-ohne das Timeout abzuwarten-dazu zwingen, alle Verzeichnisse zu unmounten?

\begin{verbatim}
$ man automount|grep -B 1 "unmount "       
Reformatting automount(8), please wait...
NOTES
       If the automount daemon catches signal USR1, it will unmount  all  cur-
       rently  unused  autofs-mounted filesystems and continue running (forced
       expire).  If it catches
\end{verbatim}

\item Installiere einen Portscanner, zB {\tt nmap} (erhältlich von www.insecure.org, es gibt auch Fedora RPMs). Schreibe ein Script {\tt chkalive} welches folgendes tut: Im Verzeichnis {\tt etc/chkalive/} sind Files der Form {\tt xxx.xxx.xxx.xxx} die eine Liste der Ports, die auf dem Rechner mit dieser IP Addresse gescannt werden sollen, enthalten. Das Script soll für jede der Maschinen die in {\tt /etc/chkalive} angegeben sind und für jeden der angegebenen Ports einen Scan ausführen und ausgeben, ob der Port offen oder zu ist.

\fbox{
{\tt chkalive}
}

\begin{verbatim}
#!/bin/sh

for host in /etc/chkalive/*.*.*.*; do
  for port in `cat $host`; do
	  nmap -p $port $host
  done
done
\end{verbatim}



\end{enumerate}

\end{document}
