21.02.2010

SSH-Authentifizierung durch Schl├╝sseldatei

Ich habe eine kleine Anleitung (hier als PDF) geschrieben, wie man einen SSH-Server so betreibt, dass die Authentifizierung nicht mehr mit mit Benutzer:Passwort sondern mit Public-Key und Privat-Key funktioniert.

18.02.2010

killall firefox;killall npviewer.bin (Firefox h├Ąngt...)


Einige Plugins, (zu) oft das propriet├Ąre Adobe-Flash-Player-Plugin, sorgen daf├╝r, dass der Firefox unter Linux stehen bleibt.

Da hilft der Hammer.

Bei einem Neustart versucht der Firefox geladene Fenster und die darin gezeigten Webseiten wieder herzustellen.

13.02.2010

├ťber den richtigen Umgang mit wget

Aufgabe: N├Ąchtliches Abholen einer gro├čen Datei von einem Webserver.
Problem: Der Webserver hustet, die DSL-Leitung m├Âchte gerade nicht - also alle m├Âglichen Arten von St├Ârungen. Wer will daneben sitzen bleiben?

Ein einfaches wget [URL] kam nicht in Betracht... L├Âsung: Man baue wget in eine Schleife ein. Diese ├╝berpr├╝fe den R├╝ckgabewert, warte im Falle eines (beliebigen) Fehlers und versuche das ganze erneut:
while ! wget http://example.org/; do sleep 600; done
Da aber auch eine begonnene ├ťbertragung abbrechen kann macht es Sinn, diese wieder aufzunehmen. Daf├╝r gibt es die Option -c:
while ! wget -c http://example.org/;
do sleep 600;
done
So sieht das aus und ist, da es ein "Einzeiler" ist, auch als Cron-Job oder at-Job gut zu verwenden. M├Âglicherweise sollten Ausgaben noch nach /dev/null umgeleitet werden.
while ! wget -c http://example.org/ 1> /dev/null 2> /dev/null;
do sleep 600;
done
Der Wert hinter sleep gibt die Anzahl der Sekunden an, die gewartet wird. Ich hielt 600, also 10 Minuten, f├╝r sinnvoll. Gelegentlich macht es Sinn, den Speicherort festzulegen. Dies besorgt die Option -O
while ! wget -cO /tmp/example.org_index \
http://example.org/ 1> /dev/null 2> /dev/null;
do sleep 600;
done
Verwendung als Batch-Datei: (hole_url, am besten in ~/bin/hole_url):
#! /bin/sh
echo -e "\n\n";

if ! test -n "$1"; then
echo "Fatal: Keine Quelle angegeben.
Rufen Sie das Skript mit der Angabe einer Dateiquelle auf.
Beispiel: $0 \"http://example.org/\"
Sie k├Ânnen auch ein Ziel angeben.
Beispiel: $0 \"http://example.org/\" \"/tmp/index\"
";
exit;
fi

username=`whoami`;
skriptname=`echo $0 | tr -d '[:cntrl:]' | tr -d './|'`;
lockfile="/tmp/$username-$skriptname-lockfile";

if ! test -f $lockfile;
then touch $lockfile;
fi

aktiv=`grep "$1" $lockfile|wc -l`;

if test "0" != "$aktiv"; then
echo "Fatal: F├╝r die Ressorce \"$1\" besteht bereits ein Auftrag.
Wenn Sie der Auffassung sind, dass dies nicht zutreffend ist,
dann l├Âschen Sie den Eintrag in $lockfile.

Das Programm wird mit Fehlercode 1 beendet.
";
exit 1;
fi

if test -z "$2"; then
echo $1 >> $lockfile;
while ! wget -c "$1" 1>> ~/wget.log 2>> ~/wget.log; do
sleep 600;
done
echo -e "Die Ressource \"$1\" wurde geholt und gespeichert.\n\n";
lockfileInhhalt=`grep -v "$1" $lockfile`;
echo $lockfileInhhalt > $lockfile;
exit 0;
fi

if test -x "$2"; then
echo "Fatal: Das Ziel \"$2\" existiert bereits und ist ausf├╝hrbar.
Dieses Programm weigert sich aus gutem Grund ausf├╝hrbare Dateien zu
├╝berschreiben.

Das Programm wird mit Fehlercode 2 beendet.
";
exit 2;
fi

if test -f "$2" ;then
if test ! -w "$2"; then
echo "Fatal: Das Ziel \"$2\" kann nicht geschrieben werden.
L├Âsung: ├ťberpr├╝fen Sie die Rechte.

Das Programm wird mit Fehlercode 3 beendet.
";

fi
fi

if test "force" != "$3" -a "continue" != "$3"; then
if test -f $2; then
echo "Fatal: Das Ziel \"$2\" existiert bereits.
* Wenn Sie das Ziel ├╝berschreiben wollen geben sie als drittes
Argument \"force\" an.
* Wenn Sie einen abgebrochenen Download fortsetzen wollen,
geben sie als drittes Argument \"continue\" an.
Beispiel: \"$0 $1 $2 force\"

Das Programm wird mit Fehlercode 4 beendet.
";
exit 4;
fi

else

if test -f "$2" -a "force" = "$3"; then
echo "Das Ziel \"$2\" wird gel├Âscht.";
rm -- "$2";
fi

echo -e "Die Ressource \"$1\" wurde geholt und
als \"$2\" gespeichert.\n\n";
fi

echo $1 >> $lockfile;

while ! wget -cO "$2" "$1" 1>> ~/wget.log 2>> ~/wget.log;
do
sleep 600;
done
lockfileInhhalt=`grep -v "$1" $lockfile`;
echo $lockfileInhhalt > $lockfile;
exit 0;

Letzte Aufgabe: bestimmter Zeitpunkt:

Ist der at-Dienst aktiv (feststellbar mit ps -C atd) kann nat├╝rlich mit
echo "hole_url http://example.org/" | at 0400
auch am n├Ąchsten Morgen ab 4 Uhr versucht werden die Datei zu holen.

08.02.2010

Benutzerrechte: Filesystem Access-Control-List (FACL) unter Linux

Immer wieder h├Âre ich, dass Linux bei der Vergabe von Benutzerrechten Windows nachstehe.

Der Grund hierf├╝r ist jedoch nicht, dass Linux Benutzerrechte an Dateien nicht genau so genau vergeben kann wie Windows, der Grund ist, dass zu viele nicht wissen wie das geht. Und zugegeben: es gibt derzeit f├╝r einiges hiervon keine grafische Oberfl├Ąche.

Der Mangel an , nennen wir es „klickablen“ war es dann aber auch schon, f├╝r Administratoren d├╝rfte schon wesentlich interessanter sein, dass sich Vorlagen f├╝r Benutzerrechte in menschen- und maschinenlesbaren Textdateien speichern und also auch verarbeiten lassen. Diese Dimension bietet Windows nicht.

Da ich damit rechnen muss das diesen Artikel auch (k├╝nftige) Systemadministratoren lesen werden die bisher nur wenig mit Linux zu tun hatten beginne ich mit einem Exkurs in die „gew├Âhnlichen“ Rechteverwaltung unter Unix.

Benutzerrechte_Access-Control-Lists_ACL_unter_Linux.pdf

07.02.2010

SuSE-Linux / Seltsamer Fehler / Platte voll

Vor ein paar Tagen meldete mir Yast anl├Ąsslich einer Softwareinstallation (ich wei├č), dass die Festplatte voll sei. Da ich System-Partition und Datenpartition (Home-Verzeichnise, srv-Verzeichnisse und dergleichen) strikt getrennt hatte wunderte mich das nicht wenig, denn die System-Partition hatte runde 40 Giga-Byte und damit reichlich Platz, temp-Verzeichnisse werden bei jedem Reboot gel├Âscht. (Desktop) Da sollte eigentlich nichts ├╝berlaufen.

Also: Nachsehen...
cd /
sudo du -xm | sort -n | tail -n5
brachte mich ganz schnell zum Verzeichnis /var/log
cd /var/log
ls -l
mit dem ├ťbelt├Ąter zypper.log-20100203.
sudo rm zypper.log-20100203
Das schuf mal eben reichlich 30 Gigabyte Platz auf der Festplatte. Wof├╝r diese Datenmenge gebraucht wurde? Keine Ahnung, ist aber ohnehin ein Backup. OpenSuSe 11 mit zypper 0.11.11 ist auf dem System.