Homepage des Authors: www.staschke.de Author: Arnim Staschke 11.12.2000 last Update: 12.11.2001 v 0.3


shutdown -h now   kindgerecht

am Beispiel auf meinem Rechner


outdated!
Ich habe noch nicht so die Ahnung von Scripten und so weiter. Deswegen ist es möglich, dass ich einige Fehler, oder etwas grundsätzlich falsches eingebaut habe. Naja, aber funktionieren tut es bestens. Deswegen bitte ich, mir evenuelle Fehler mitzuteilen. Danke:-)

A. Copyright

1 Einleitung

2 Vorbereitungen

3 Das Script

4 Nachwort




shutdown -h now   kindgerecht

am Beispiel auf meinem Rechner


1 Einleitung


1.3 Der Grundgedanke

Ich habe eine 7 Jährige Tochter, die auch gerne unter Linux rumtüddelt. Sie Spielt zB gerne Mahjongg oder Tron. Das Booten mit anschliessendem Einloggen an der Konsole klappt bestens. Dann ein startx eingetippt, und es kann losgehen. Das Problem ist halt das ordnugsgemässe runterfahren der Linux-Kiste, wenn sie nicht mehr Spielen möchte. Sie beendet zwar KDE, fährt den X-Server runter, dann ist es vorbei. Sie meint, wenn sie wieder an der Konsole angekommen ist, ist der Rechner runtergefahren, und kann ausgeschlaltet werden. Das ist nicht so im Sinne des Erfinders. Ich möchte ihr auch kein root-Passwort geben, zumal es noch zu schwierig währe, ein shutdown -h now einzutippen.
Deswegen habe ich ein Textbasiertes Menü zusammengebastelt. Es wird durch die Eingabe von aus gestartet. Hier kann meine Lütte auswählen zwischen Abbrechen, Runterfahren und Reboot. Die Navigation erfolgt mit den Cursortasten, bestätigt wird mit Return. Das hat sie sofort verstanden. Von nun an wird der Rechner wieder ordnungsgemäss runtergefahren:-)
Wenn schon denn schon: Auch meine Frau und die grosse Tochter nutzen nun das Menü.



2 Vorbereitungen


2.1 Installation von dialog

Zu aller erst muss Dialog installiert werden. Am besten geschieht das mit Hilfe der Distributionseigenen Installationstools. Nach der Installation muss geprüft werden, wo dialog installiert wurde. Durch Eingabe von locate dialog lässt sich das schnell feststellen. In meinem Beispiel verwende ich /usr/bin/dialog als Pathangabe. Diese ist jeweil individuell anzupassen.


2.2 Hilfe zu dialog

Wie nicht anders zu erwarten, bringt man dialog schon alles was man wissen sollte.
Desweiteren sollten einige Beispiele und Readmes den Paketbeschreibungen der Distribution beiligen. Zu finden sind diese je nach Distribution zB. unter /usr/doc/packages/dialog oder /usr/share/doc/packages/dialog.


2.3 Das Problem

Es soll erreicht werden, dass normale User einen shutdown ausführen können. Den shutdown-Befehl darf aber nur Root ausführen, aus Sicherheisgründen. Nicht jeder Dahergelaufene sollte einen Server runterfahren dürfen, das nur als Beispiel;-)
Wir müssen es als normalen Usern erlauben, diesen Befehl zum Runterfahren des Rechner ausführen zu dürfen. Jeder sollte sich bewusst sein, das sowas die Ausnahme sein sollte. Immerhin wird damit die Sicherheit des Systems gelockert. Man sollte also schon wissen, was man tut. Wenn man es nicht weiss, sollte man die im Folgenden beschriebenen Schritte nicht durchführen.

Zur Lösung des Problems gibt es das Paket sudo. Ich verzichte an dieser Stelle auf weitere Erläuterungen dazu. Das würde den Rahmen dieser Seite sprengen. Jeder sollte die Man-Pages zu sudo gelesen haben, dann kann nichts schief gehen;-)
Im einzelnen sind es folgende man pages:

man
    sudo
    sudoers
    visudo
    su

Es muss ja nicht alles gleich auf einmal gelesen werden;-)


3 Das Script


3.1 Script für dialog erstellen


#! /bin/bash
#
# Kiste runterfahren bzw rebooten
#
#! /bin/bash
#
# Kiste runterfahren bzw rebooten
#

if test $UID -ne 0; then
   exec sudo $0 $*
fi

DIALOG=${DIALOG=/usr/bin/dialog}
$DIALOG --clear --title "Arnim's MENUE BOX" \
        --menu "\n\
Bitte auswaehlen \n\
Navigation mit UP/DOWN Tasten, oder den \n\
ersten Buchstaben druecken (Hotkey), oder mit \n\
den Zifferntasten 1-3 eine Auswahl treffen. \n\
Try it now!\n\
 " 18 50 3 \
"Aus"  "Linux runterfahren" \
"Reboot" "Linux neu starten" \
"Cancel" "Menue abbrechen" 2> /tmp/menu.tmp.$$

       retval=$?

       choice=`cat /tmp/menu.tmp.$$`
       rm -f /tmp/menu.tmp.$$
       setterm -clear

       case $retval in
         1)
           echo "Cancel pressed.";;
         255)
           echo "ESC pressed.";;
       esac

if      [ "$choice" = "Aus" ];    then /sbin/shutdown -h now
exit 1
elif    [ "$choice" = "Reboot" ]; then /sbin/shutdown -r now
exit 1
elif    [ "$choice" = "Cancel" ]; then echo "Vorgang abgebrochen."
exit 1
fi

exit 0

--------------------------------------------------
Obriges Script einfach abtippen (copy und paste), und als aus abspeichern.
Bitte im Script die Pfade mit denen im eigenen System abgleichen, wenn nötig.
Auf das Leerzeichen nach der öffnenden Klammer [ und vor der schliessenden Klammer ] achten!
Das Script aus wird nun nach /usr/local/bin kopiert.
Den Besitzer und Gruppe auf root.users abaendern.und die Rechte auf -rwxr-x--- setzen
Also so solls aussehen:

arnim@grizzly:~ > ls -l /usr/local/bin/aus
-rwxr-x--- 1 root users 1074 Nov 26 19:33 /usr/local/bin/aus


3.2 Script für User ausführbar machen

Es gibt eine Datei im System, in der einigen wenigen zuverlässigen Usern vom Systemadministrator Sonderrechte eingeräumt. Und so ein Sonderrecht sollen nun alle User bekommen, die unser Script ausführen dürfen sollen. Dazu als root einloggen, und das Komando visudoeintippen. Nun wird die Datei /etc/sudoers zum bearbeiten geöffnet. Die /etc/sudoers darf nur mit dem Kommando visudo bearbeitet werden! Nicht benuzten darf man einen belibigen anderen Editor! Man sei hiermit gewarnt!
Über das Kommando visudo wird diese Datei mit dem Editor vim (vi) bearbeitet. Man sollte sich in der Grund-Bedienung des vim auskennen. Dieser Editor ist etwas eigenartig in der Handhabung, wird nur durch Tastenkombinationen gesteuert. Die wichtigsten Tastenkombinationen habe ich hier noch einmal aufgelistet.

Der Editor Vim ist ein abkömmling des Editors Vi. Der alte Editor Vi wird nicht mehr weiterentwickelt. Da Vim ein Abkömmling ist, kann er mit vim oder mit vi gestartet werden. Beides ruft den Vim auf.

Das Öffnen einer Datei erfolgt mit:
vi /path/dateiname
Beim Aufruf von visudo wird Vim natürlich automatisch aufgerufen. Jedoch sind die Tastenkombinationen in beiden Fällen gleich. Hier die wichtigsten:

Cursortasten .......................... Cursor bewegen
Bild auf-ab ............................ Bildschirm scrollen
ESC-Taste ............................ In den Kommandomodus wechseln
i ................................................ insert, Zeichen eingeben, vor dem Cursor
a ............................................... insert, Zeichen nach dem Cursor eingeben
x ............................................... markiertes Zeichen löschen
dd ............................................ aktuelle Zeile Löschen
:w Dateiname ........................ speichern
:wq ........................................... Datei speichern, und Vim beenden
:q! ............................................. Vim sofort verlassen, Datei wird nicht gespeichert
:help ........................................ Hilfe zu Vim anzeigen


Alles klar?
Wenn also visudo aufgerufen wurde,
i
für Insert drücken, und man kann schreiben
Insertmodus wird mit
ESC -Taste ausgeschaltet. Nun kann durch :wq die eben geschriebene Datei gespeichert werden.

Oder gewaltsames Beenden, ohne Speichern, wenn man doch nichts ändern will, oder sich total verfranzt hat;-), durch:
ESC -Taste
:q!


So, nun aber fix, ich habe Kaffeedurst;-)
Wenn noch nicht geschehen, das Kommando visudo eintippen.
Es erönnet sich in etwa sowetwas auf unserem Bildschirm:


# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification
# Cmnd alias specification
# User privilege specification
root    ALL=(ALL) ALL


Diese Datei nun wie folgt abändern, bzw folgendes hinzufügen.


# sudoers file.
#
# This file MUST be edited with the 'visudo' command as root.
#
# See the sudoers man page for the details on how to write a sudoers file.
#
# Host alias specification
# User alias specification

# HIER DIE USER-NAMEN ANPASSEN
User_Alias      ALLE = hans, klaus, oma, silke
 
# Cmnd alias specification
# User privilege specification
root    ALL=(ALL) ALL
ALLE    ALL=NOPASSWD:   /usr/local/bin/aus



Der User_Alias ALLE wird definiert. Anschliesend wir dem User_Alias ALLE der mit rootrechen auszuführende Befehl zugewiesen.
Dabei ist zu beachten, das zB zwischen User_Aliasund ALLE keineLeerzeichen sondern Tabulatoren verwendet werden. Das selbe gillt für die Abstände in der letzten Zeile, nach ALLEt und nach ALL=NOPASSWD:!

Mit ESC
: wq

abspeichern. Das war es schon.


3.3 Script ausprobieren

Als User einloggen, und aus eintippen, mit Return bestätigen.
Und? Klappts? Ich hoffe doch!:-)


4 Nachwort


4.1 Haftungsausschluss

Diese Dokumentation richtet sich an den schon etwas erfahrenen Linux Anwender. Man sollte sich bewusst sein, was man hier tut, und vor allem wissen was man tut und es auch verstehen, was man getan hat. Das ist wichtig, um eventuelle Sicherheitsrisiken richtig abschätzen zu können. Hier aufgeführt sind nur im groben die wichtigsten Schritte, auf die Systemsicherheit wird hier nicht weiter eingegangen.
Diese Dokumentation ist als grobe Richtlinie gedacht, als Denkanstoss, nicht als Anleitung! Die Verfeinerung und Verbesserung der Konfiguration muss jeder selbst vornehmen, an sein eigenes System anpassen.

Alles geschieht in eigener Verantwortung. Der Author haftet nicht für eventuelle Schäden am System oder sonst wo!
Wer damit nicht einverstanden ist, der möge bitte nicht weiterlesen.


4.2 Thanks to

Als Grundstock für mein Menü dient das Programm dialog. Dieses Programm kenen wir schon, ohne es zu wissen. Während der Linuxinstallation meldet sich linuxrc, dessen Menüs auf dialog basieren. Das Kernelkonfigurationsmenü basiert auch auf einer speziellen Version von dialog, lxdialog. Den Authoren dieses Programms möchte ich hiermit danken:

   Savio Lam (lam836@cs.cuhk.hk) - version 0.3
   Stuart Herbert (S.Herbert@sheffield.ac.uk) - patch for version 0.4



Copyright
Das Copyright für diese Seiten liegt bei Arnim Staschke, Flensburg, Germany. Für die Nutzung dieser Seiten auf anderen Rechnern oder die Verbreitung dieser Seiten gilt folgendes: Die Seiten duerfen in ihrer Ursprungsform unveraendert kostenlos weiterverbreitet werden, solange dieser Copyrighthinweis, der Name des Authors und die Herkunft erhalten bleibt. Die Weitergabe, die komerzielle Nutzung, auch in schriftlicher Form, gegen Gebühr oder gegen Entgelt ist untersagt, bzw. bedarf der ausdrücklichen schriftlichen Zustimmung des Authors. Links auf diese Dokumentation sowie das Kopieren auf Resourcen im Internet sind ausdruecklich erlaubt, solange ein deutlicher Hinweis auf die Herkunft und das Copyright, sowie ein Link auf die Originalseiten enthalten bleibt.


Homepage des Authors
www.staschke.de
eMail an den Author
Arnim Staschke

made by staschke 11.12.2000