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

Minimale Softwareverteilung (was: Mozilla Firefox und Sicherheitsupdates in stable)



Hallo Gerhard,

* Gerhard Wolfstieg <gw@wolfstieg.com> [20050726 17:09]:
> On Tue, 26 Jul 2005 16:30:12 +0200
> "Felix M. Palmen" <zirias@despammed.com> wrote:
> > zu dem Zweck habe ich mir jetzt aber einfache
> > Scripts zur Softwareverteilung im Netz geschrieben.
> 
> Oh, Spitze! Auf die Idee bin ich noch nicht gekommen. Mags Du das
> hierhin posten?

Ok, kurze Anleitung:

Voraussetzungen:
- perl
- rsync
- OpenSSH

1. Server einrichten:
~~~~~~~~~~~~~~~~~~~~~

Auf dem Server zunächst ein Verzeichnis unter /etc (für den SSH-Key) und
eines unter /opt (für die zu verteilende Software) anlegen. Ich hab
beide mal "global" genannt. Dann als erstes einen SSH-Key ohne
Passphrase erstellen:

ssh-keygen -t rsa -N "" -C global -f /etc/global/id.global

Den public key zu den authorized_keys von root hinzufügen (man kann
auch einen anderen Benutzer nehmen, wenn man der Sache nicht traut):

cat /etc/global/id.global.pub >>~/.ssh/authorized_keys

Dann ~/.ssh/authorized_keys editieren und vor den key (letzte Zeile)
folgendes schreiben:

from="*.localnet.example",command="/usr/local/bin/global-rsync.pl"

und mit einem Leerzeichen vom folgenden ssh-rsa abtrennen. In from
sollten natürlich die Rechner stehen, die später ihre Software in
/opt/global vom Server beziehen sollen.

Das Script /usr/local/bin/global-rsync.pl lässt nur das lesen von
/opt/global via rsync zu und sieht folgendermaßen aus:

---
#!/usr/bin/perl -w

use strict;

my $command = $ENV{'SSH_ORIGINAL_COMMAND'};

if (($command) &&
  ($command =~ /^rsync +--server +--sender +-[logDtprz]+ +\. +\/opt\/global$/ ))
{
  system $command;
}
else
{
  print STDERR "Dieser SSH-Key kann nur für die Synchronisation lokal ".
      "installierter Software im LAN benutzt werden.\n";
  exit 1;
}
---

Auf dem Server kann man dann eben Software in /opt/global installieren
und legt noch eine spezielle Textdatei /opt/global/symlinks.conf an, in
der alle Binaries (relativ zu /opt/global) aufgeführt sind, die auf den
Clients in /usr/local/bin verlinkt sein sollen. Sieht bei mir z.B. so
aus:

---
bin/firefox
j2re/bin/java
j2re/bin/java_vm
thunderbird/thunderbird
acrobat/bin/acroread
realplayer/realplay
---

2. Clients einrichten:
~~~~~~~~~~~~~~~~~~~~~~

/etc/global vom Server auf jeden Client kopieren. Überprüfen, dass
/etc/global/id.global nur von root gelesen werden kann (600).
(id.global.pub darf dagegen world-readable sein).

Die Clients brauchen dann folgendes init-Script /etc/init.d/syncglobal:

---
#!/bin/sh

KEY=/etc/global/id.global
HOST=server.lan.example
SSH="/usr/bin/ssh -oBatchMode=yes -i $KEY"
DAEMON=/usr/bin/rsync

case "$1" in
  start)
	echo -n "Synchronisiere /opt/global von $HOST: .."
	PID=`mktemp -t syncglobal.pid.XXXXXX`
	/sbin/start-stop-daemon -S -p $PID -m -x $DAEMON -b -- -aze "$SSH" \
	    --delete $HOST:/opt/global /opt/
	sleep .5
	while /sbin/start-stop-daemon -K -p $PID -t -x $DAEMON >/dev/null 2>&1
	do
	  echo -n .
	  sleep 1
	done
	echo fertig.
	rm -f $PID
	cd /usr/local/bin
	/usr/bin/find . -lname /opt/global/\* -exec rm -f \{\} \;
	test -r /opt/global/symlinks.conf || exit 0;
	echo -n "Verlinke Anwendungen:"
	for program in `cat /opt/global/symlinks.conf`
	do
	  progname=`basename $program`
	  echo -n " $progname"
	  ln -fs /opt/global/$program
	done
	echo .
	;;

  stop)
	;;

  restart)
	$0 start
	;;

  *)
	echo "Usage: $0 {start|stop|restart}"
	;;
esac

exit 0
---

HOST am Anfang vom Script auf den Namen (oder die IP-Adresse) des
Servers setzen. Falls man einen anderen User als root auf dem Server
benutzt hat, <user>@ davorschreiben. Ein Aufruf von

/etc/init.d/syncglobal start

erledigt alles automatisch. Also am besten in rc2.d bis rd5.d z.B.
unter S90 verlinken.

Das war's, ich hoffe es läuft bei dir genauso gut wie bei mir. Die
Option mit dem anderen User auf dem Server habe ich allerdings selbst
nicht ausprobiert, ich vertraue den Restriktionen in
~root/.ssh/authorized_keys.

Grüße, Felix

-- 
 | /"\   ASCII Ribbon   | Felix M. Palmen (Zirias)    http://zirias.ath.cx/ |
 | \ / Campaign Against | fmp@palmen.homeip.net      encrypted mail welcome |
 |  X    HTML In Mail   | PGP key: http://zirias.ath.cx/pub.txt             |
 | / \     And News     | ED9B 62D0 BE39 32F9 2488 5D0C 8177 9D80 5ECF F683 |

Attachment: signature.asc
Description: Digital signature


Reply to: