[linux-support] Backup Script in Ubuntu mit root Rechten laufen lassen

Stefan Haller sh at grep.ch
Sun Nov 13 12:45:43 CET 2005


Hallo Philipp

On Sun, 2005-11-13 at 11:35 +0100, Philipp Sury wrote:
> Hier also meine Fragen:
> 
> 1) Wie kann man in Ubuntu ein Script so mit root Rechten versehen, dass
> es alles tun kann, was ein "richtiger root" kann, ohne dass ich den
> Umweg über sudo und Passwortabfrage machen muss?

Generell, aber für Dich wenig nützlich:
Executables können mit dem setuid-bit (man chmod) so konfiguriert
werden, dass diese mit dem Benutzer des Eigentümers ausgeführt werden.
z.B. chmod u+s /root/script

Das gleiche bit erlaubt es z.B. auch, dass ein normaler User ping
ausführen kann... siehe ls -l /bin/ping

Du wirst allerdings feststellen, dass dies für fast alle Executables
auch funktioniert, aber nicht für shell scripts. Dies ist aus
Sicherheitsgründen so, da es relativ einfach ist über ein setuid-root
shellscript zu einer root shell zu kommen.

Ich verstehe nicht, wieso du dein script nicht mit sudo startest (z.B.
sudo /root/script). So kannst du das gut testen bis Du das in der
crontab eingetragen hast. sudo kann im übrigen so konfiguriert werden,
dass kein passwort mehr eingegeben werden muss (NOPASSWD option).


> 2) Es wäre vermutlich intelligent, noch einen Test einzubauen, der
> überprüft, ob die Partitionen auch korrekt gemounted wurden, bevor rsync
> gestartet wird. Wie geht das?

Variante 1:
Den returncode von mount auswerten. z.B.
die () {
	echo $*
	exit 1
}
mount xy
[ $? = 0 ] || die "mount failed. Aborting."

Problem: vielleicht war die partition ja schon gemounted und es gibt
auch noch den return code 64 (some mount successful?).

Variante 2:
Die mounttab auswerten. z.B.
x=`mount | cut -f 3 -d " " | grep ^/backup/daten$`
[ x$x = x/backup/daten ] || die "not mounted. Aborting."


> 3) Ich möchte auch alle Unterordner von / (mit Ausnahme von /backup und
> /home) mit /backup/system rsyncen. Jetzt könnte ich natürlich für jeden
> Ordner im Script eine Zeile schreiben, aber das geht doch sicher
> eleganter... wie lauten die entsprechenden Befehle? Vermutlich müsste
> ich irgendwie ein ls von / machen und dies dann als Variable an rsync
> übergeben, aber wie könnte man dann /backup und /home wieder
> ausschliessen? (shellscript newbie here!)

z.B.
for file in `find / -maxdepth 1 -type d`; do
	[ x$file = x/home ] && continue  # skip
	[ x$file = x/backup ] && continue # skip

	rsync ... $file  ... etc
done

> 
> 4) Ich habe ja auf der zweiten Platte noch eine zweite swap Partition,
> welche bisher ungenutzt herumliegt. Kann ich einfach einen zweiten swap
> Eintrag in /etc/fstab machen und sie wird vom System genutzt?

Ja, das sollte gehen. Du kannst sie auch manuell einbinden mit
swapon /dev/hdd2

oder wieder lösen mit swapoff. swapon kann übrigens auch auf Dateien im
Filesystem angewendet werden. Wenn Du mal temporär mehr swap brauchst,
als du hast -> mach dir eine grosse Datei irgendwo im filesystem und
benutze swapon...

Ich hoffe, das hat Dir weitergeholfen. Teilweise kann man es wohl noch
etwas eleganter machen....

Gruss
Stefan



More information about the Linux-support mailing list