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