PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : root check



Zico
03.09.2005, 19:20
Hi bin mal wieder dabei was kleines zu basteln:
einen simplen installer für ein programm.

dabei möchte ich gerne einen "check" einbaun, der erst die UID abfragt und wenn diese nicht der des rootes entspricht, als diesen einloggt und dann mit der instalation fortfährt.

Das ganze wollte ich mit su realisieren:


function UID_CHECK()
{
if [ $UID -gt 0 ]
then
printf 'The installation requires root permissions.\n'
/bin/su
fi
COPY_MENU
}

function COPY_MENU()
{
echo $UID
}

Hier das Problem:
Ist su einmal ausgeführt, so wird das Script gestoppt, bis ich mit exit wieder zum user zurückkehre. Dann läuft es weiter. Sicher könnte ich auch einen Abbruch setzen, und einfach sagen "bah! logg dich als root ein und dann nochma von vorne!" aber ich möchte es gerne als feature haben.
Ideen?

StyleWarZ
03.09.2005, 21:04
würde mich auch mal wunder nehmen.. wollte mal ein skript schreiben das chroot ausführt und dann weiter macht.. doch da hat es immer den geist aufgegeben.. schade.. mein auto gentoo installler :/

bert2002
03.09.2005, 21:45
Die Lösung würde mich auch interesieren!

MfG bert2002

qmasterrr
04.09.2005, 11:59
Mein Vorschlag wäre, das Script sich selber aufrufen zu lassen, oder es so zulösen wie es zb cedega (in der CVS-Version) gelöst hat.

StyleWarZ
04.09.2005, 12:51
im fall von de chroot müsst das skript ne neue konsole öffnen, in dieser chrooten und da sich neu (am richtigen punkt) wieder ausführen... richtig?

Schlaubi_fi.de
04.09.2005, 16:34
Mal davon abgesehen, dass es aus Sicherheitsgründen nicht sehr sinnvoll ist und außerdem es auch möglich ist, dass jemand keine Root-Rechte hat und diesen Installer ausführen kann, aber das steht ja hier nicht zur Debatte :D - probiers doch mal mit man expect.

Zico
04.09.2005, 16:40
ok danke für all die tipps.
ich werd mich mal umsehn wie ichs machen kann.
also dass man den installer als user starten kann und dann zum root einlogeloggt wird soll auf jeden fall reinkommen. darin seh ich noch keine sicherheitsgefährdungen... wenns eine gibt, bitte erklären :)

qmasterrr's idee, dass der su command das script nochmals neu startet, gefällt mir bisher am besten. so könnte ich mir es sparen einen zweiten UID check einzubaun der verhindert, dass bei einer falschen PW ingabe doch versucht wird zu kopieren, was am ende schief gehen würde.

Zico
04.09.2005, 19:25
Man möge mir den doppelpost verzeihen, aber dies ist ein kleiner erfolg für mich. :D
Habe mich nun mit qmasterrr's Idee weiter beschäftigt und meine Lösung gefunden.
Klappt wunderbar:


function START()
{
if [ $UID -gt 0 ]
then
printf 'The installation requires root permissions.\n'
/bin/su -c 'sh test-script.sh'
else
ECHO_UID
fi
}

function ECHO_UID()
{
echo $UID
}

START

Ist nutzer kein root, so wird script mit su neu gestartet. durch das verpacken des "echo $UID" in eine extra funktion wird auch verhindert, dass es zu einer erneuten ausgabe der UID kommt wenn es schon als root durchgelaufen ist.
ebenso bricht das scipt vollkommen ab, wenn das passwort falsch eingegeben wird - sprich, es kommt nicht zur ausgabe der UID.

Kritik, Vorschläge und allgemeines Feedback ausdrücklich erwünscht!

EDIT:
Ein neues Problem was sich mir allgemein stellt, ist dass der su aufruf des scriptes auch nur funzt (ebenso wie die späteren cp befehle die noch im installer folgen), wenn das script direkt vom aktuellen verzeichnis ausgeführt wird und nicht von einem anderen.
bsp: sh /tmp/test-script.sh
Ideen erlaubt :D

Wolfgang
05.09.2005, 10:03
Hallo
Dein Problem hängt mit der Umgebungsvariable PATH zusammen.
Die ist/sollte ja bei root bekanntlich das aktuelle Verzeichnis
nicht enthalten.
Du kannst diese natürlich in deinem Script selbst setzen und exportieren.
Gruß
Wolfgang