• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Shell-Skript mit Rechten für root

neoent

Newbie
Ich habe zwei Fragen.
Ich möchte ein Skript schreiben, welches ich als user starten kann aber ein root-Befehl hat. Wenn ich als user das Skript starte und der ifconfig-Befehl kommt sagt er, syntax error. Wie umgehe ich das?
Und die zweit Frage: ich möchte nicht zehn Skripte schreiben. Ich möchte das ich bein Aufruf auch -abcd usw. nutzen kann. Wie mache ich das? Also wenn ich skript1 -a setze was muss ich dafür im Skript schreiben? Mit If "-a" .. then geht leider nicht.
 

docdray

Newbie
Unter Linux gibt es ein suid Bit für Dateien. Wenn dieses gesetzt ist, wird das Programm mit den Rechten seines Eigentümers gestartet.
Also wenn zb der Eigentümer root ist, das suid Bit ist gesetzt, dann wird das Programm als root gestartet.
Aber
für Scripte ist das absichtlich nicht möglich.
Man muss das Script schon als root starten, oder man baut sich eine shell drum rum, oder man macht die Binarys die von dem Script gestartet werden auch für nicht-roots ausführbar. Wobei das letzte nur im Ausnahmefall gemacht werden sollte, also nie.


Nun zu deiner 2ten Frage:
hab ich das richtig verstanden, dass du wissen willst wie man in einem Script die Parameter entgegen nimmt?
Also das ist recht einfach

$1 hat den ersten Parameter
$2 den 2ten
.
$9 den 9ten
$* hat alle
$# hat die Anzahl der Parameter
mit shift kann man die Parameter von in Richtung $1 rücken lassen
Also
was erst in $2 steht, steht hinterher in $1
und was in $3 steht, steht hinterher in $2
usw

So nun noch zu dem Test ob -a eingegeben wurde
Hier mal ein simples Beispiel
es geht davon aus, dass -a als erster Parameter verwendet wird

Code:
#!/bin/sh
if [ $1 = -a ]
then
	echo "es wurde ein -a eingegeben"
fi

und hier mal noch ein kleines Beispiel, wie man sich durch die Parameter "hangelt".
Code:
#!/bin/sh
for v in $*
do
	echo $v
done

$v durchläuft hierbei jeden Parameter einmal


Ich hoffe das hilft dir
 
OP
N

neoent

Newbie
Das letzte es genau das was ich gesucht habe. Danke! Schade das mit den Skripten. Auch wenn es blöd ist , mach ich das so dass das Skript auch von non-root-user gestartet werden darf.
 

Snubnose

Hacker
sudo ist dein Stichwort, dass user Befehle ausführen können mit root-Rechten. Aber man fängt sich mit sowas sehr schnell Sicherheitslücken -> aufpassen :!:
 
OP
N

neoent

Newbie
Die Syntax ist doch, denke ich, so. if ...fi und for..do ...done, oder?
Wenn ja, warum geht das nicht?
Code:
#! /bin/bash
 for p in $*
  do 
    if  $p  = -a or $p = -b 
     then 
        ........
   else
    .......
 fi
done
Er sagt, dass etwas mit done nicht stimmt.
 

Snubnose

Hacker
hmm, das mit den ganzen ifs finde ich ein wenig unglücklich...
such mal ein wenig bei google
das hier habe ich zum Beispiel gefunden:
http://linuxsig.org/files/bash_scripting.html (gaaanz unten schauen)
 
Oben