[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[Debian]: Verschieben von Packages



Hi!

ich spiele gerade an diversen Konzepten, um die Systemsicherheit zu
verbessern. Eines dieser Konzepte ist, "gefährliche" Tools wie gcc auf
eine zweite Platte auszulagern, die im Normalbetrieb umounted und
abgeschaltet ist und nur dann läuft, wenn wirklich damit gearbeitet
wird. Das macht erfolgreichen Angreifern schwerer, ihre Tools zu
compilieren, ohne physikalischen Zugriff auf die Kiste zu haben.

Als eine mögliche Lösung für diesen Ansatz wäre, die gefährlichen
dateien von /usr nach /usr/develdisk zu verschieben und stow zu
benutzen, um die Tools wieder an ihren ursprünglichen Ort
zurückzulinken. Ich bräuchte also zum Beispiel /usr/develdisk/bin/gcc
und ein symlink von /usr/bin/gcc auf /usr/develdisk/bin/gcc. Wenn die
develdisk nicht gemounted ist, zeigt der LInk natürlich ins Leere. Für
den Anfang wäre das OK, dauerhaft sollte man sich überlegen, ob man
die Symlinks nicht entfernt.

Könnte dieses Konzept funktionieren?

Zum Test gibt es das folgende Skript:
|#!/bin/bash
|
|# this script will aid in moving some files belonging to dpkg-packages
|# to different locations on the system. This is done by first learning
|# which files belong to a package, then passing all file names through
|# a sed script and executing appropriate mv commands.
|#
|# Example: Move all of gcc, stow and libreadlineg2 what is usually stored
|#          in /usr to /usr/devel:
|# dpkg-move -v -s "s|/usr|/usr/devel|" gcc stow libreadlineg2
|
|while getopts "s:vn" opt; do
|  case $opt in
|    s  ) sedscript=$OPTARG ;;
|    v  ) verbose=1 ;;
|    n  ) noop=1 ;;
|    \? ) echo 'usage: $0 [-v] [-n] -s sedscript packages...'
|         echo '           -v: verbose'
|         echo '           -n: do not actually execute the move commands'
|         exit 1
|  esac
|done
|shift $(($OPTIND - 1))
|
|if [ -z $sedscript ]; then
|  echo 'no script given'
|  exit 1
|fi
|
|[ $verbose ] && echo "entering verbose mode."
|
|while [ "$1" != "" ]; do
|  dpkg --listfiles $1 |
|  while read filename; do
|    if [ ! -d $filename ]; then
|      newname=`echo $filename | sed $sedscript`
|      if [ $filename != $newname ]; then
|        
|        # make sure that target directory exists
|        # not yet implemented
|        
|        [ $verbose ] && echo "mv $filename $newname"
|        [ $noop ] || echo "execmv $filename $newname"
|      else
|        [ $verbose ] && echo "$filename: not touched by script, skipping."
|      fi
|    else
|      [ $verbose ] && echo "$filename: directory, skipping."
|    fi
|  done
|  shift
|done

Ich bin übrigens nicht der Meister im schreiben von Shellscripts und
würde mich freuen, wenn ihr mich auf mögliche Bugs hinstoßen könntet.
Der Code stolpert derzeit noch, wenn symlinks verschoben werden
müssen, weil mv keine Symlinks über Dateisystemgrenzen verschieben
mag. Hier wird man auch das Ziel des Links bearbeiten müssen, weil es
ja gut sein kann, daß man das Ziel nicht verschoben hat. Und das wird
in einem Shellscript schon fast eklig. Auch bei hard links wird man
eine Sonderbehandlung fahren müssen.

Ich habe aber auch mit dem Packagesystem einige Punkte, über die ich
gerne mit Euch diskutieren würde:

(1)
Eine von diesem Skript behandelte Package wird sicherlich bei einem
Distributionsupdate Probleme verursachen. Ich vermute, daß apt-get
update die Symlinks schlicht überschreiben wird und die neue Package
natürlich nicht auf der "sicheren" Platte landet. Wie sollte man mit
dieser Situation umgehen?

(2)
Sollte mein Skript etwas mit der dpkg-Datenbank machen? Es wäre zum
Beispiel denkbar, daß das Skript die bewegte Package aus der
dpkg-Liste löscht.

Oder gibt es für mein Konzept einen anderen Ansatz? Über Eure Gedanken
würde ich mich freuen.

Grüße
Marc

-- 
-------------------------------------- !! No courtesy copies, please !! -----
Marc Haber          |   " Questions are the         | Mailadresse im Header
Karlsruhe, Germany  |     Beginning of Wisdom "     | Fon: *49 721 966 32 15
Nordisch by Nature  | Lt. Worf, TNG "Rightful Heir" | Fax: *49 721 966 31 29
------------------------------------------------
Um sich aus der Liste auszutragen schicken Sie
bitte eine E-Mail an majordomo@jfl.de die im Body
"unsubscribe debian-user-de <deine emailadresse>"
enthaelt.
Bei Problemen bitte eine Mail an: Jan.Otto@jfl.de
------------------------------------------------
Anzahl der eingetragenen Mitglieder:     739


Reply to: