Gibt es eine möglichkeit, den benutzer währen eines shell-skriptes mehrfach zu wechseln (su passwort eingabe simulieren)?

... komplette Frage anzeigen

5 Antworten

Die Bash kennt sogenannte Here Documents in verschiedenen Notationen, z.B. so:

su username <<<'12345'

Als Alternative kannst Du dein Script als root ausführen (sudo aufgabe1.sh). Dann fragt su nicht mehr nach einem Passwort.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Javanoob
07.04.2016, 10:10

wenn ich es als sudo ausführe liefert $USER mir root zurück... wenn ichs mit Here Docs mache dann sagt die Shell: su must be run from a Terminal 

D: das kann doch nicht so schwer sein...

0
Kommentar von guenterhalt
07.04.2016, 16:12

in der Frage lese ich nichts von Ubuntu oder den Ablegern. Wie kannst du also sicher sein, dass in seiner Distribution sudo installiert und auch noch  für den betreffenden User konfiguriert ist?

0

Zweiter Versuch: Deinen Kommentaren entnehme ich, dass Du so etwas machen wolltest:

su user1 
#Befehle als user1 ausführen...
exit

Wie qugart schon sagte, geht das natürlich nicht. Schreib stattdessen:

# einen einzelnen Befehl ($USER bist Du)
sudo -iu user1 -- ls -l


# mehrere Befehle
# mit IO-Umleitung
# $USER=user1:
sudo -iu user1 -- sh -c '

ls -l
echo "$(USER) ist fertig!"

'

echo "Hallo $USER: alles fertig!"

Beim ersten Ausführen von aufgabe1.sh wird sudo am Terminal nach Deinem eigenen Passwort fragen. Das ist wesentlich besser als ein Passwort im Script.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Javanoob
07.04.2016, 12:14

ich weiß ich stelle michmehr als nur dumm an und ich bin auch sehr dankbar für die ganze hilfe die ich hier bekomme.

ich werde meine Intension hier nochmal schriftlich festhalten.

ich habe nächsten mittwoch ein testat an der uni und statt meine 1millionen befehle von hand zu tippen und unter dem druck zu versagen möchte ich lieber ein skript schreiben das alle gegebenen aufgaben automatisch ausführt. dafür ist es notwendig das ich keinem user extra rechte zuweise. deswegen möchte ich im skript eine reihe von befehlen für user A ausführen, danach für user B und danach für user C. natürlich muss ich dafür immer wieder die user wechseln:

Von hand mache ich das immer mit "EXIT" und dann wieder als anderer User einloggen mit "su USERNAME"

also root umgeht dabei schonmal jegliche passwortabfragen jedoch muss ich aktuell noch exit jedes mal von hand eingeben, was natürlich sehr kontraproduktiv ist

der aktuelle code sieht vor das die User: 

alice , bob & carl

 jeweilsmit cd ins Verzeichniss

 /tmp 

wechseln und dort mit dem befehl

echo ' nahricht '>> nachr-USERNAME 

eine nachricht hinterlassen

ich hoffe das war dieses mal ein bisschen verständlicher. 

der code den ich aktuell nutze (also der der mich zum manuellen eingeben von exit zwingt) sieht folgendermaßen aus:

echo "Schritt 1 von 12"

su alice

cd /tmp

echo 'nachricht' >> nachr-alice

exit

su bob

cd /tmp

echo ' nachricht ' >> nachr-bob

exit

su carl

cd /tmp

echo 'nachricht' >> nachr-bob

echo "Schritt 2 von 12"

...

...

...

etc.

0

Warum arbeitest du nicht mit mehreren „screen“, die über Nachrichten kommunizieren?

jeder einzelne „screen“ wird von einen anderen Benutzer gestartet und koordinieren kannst du die über einen Bereich, auf den alle Benutzer zugreifen können.

Mach dich mal schlau über „semaphoren“ und die Technik der „Signale“!

So wie du einen Prozeß mit „kill -9 PID“ töten kannst, kannst du auch mit anderen Signalen arbeiten ...

ein „kill -hup PID“ veranlaßt den Prozeß mit der Prozeß-ID=PID seine Konfigurations-Datei neu zu lesen (z.B. der „apache“).

Achte nur darauf, daß du keine Endlos-Schleifen baust! Also warten auf ein Ereignis mit „sleep“!

Antwort bewerten Vielen Dank für Deine Bewertung

so etwas ist nicht ungefährlich, muss man doch die Login-Passwörter im Klartext im Script ablegen.

so eine Zeile könnte wie folgt aussehen:

echo -e <Passwort-User1> | su <User1> -c "Befehl-1 ; Befehl-2 ; Befehl-3 ... "

Die Befehle-1 ... können natürlich auch in einem weiteren Script abgelegt sein.

echo -e <Passwort-User1> | su <User1>  -c Script-mit-Befehl-1-bis-3 
echo -e <Passwort-User1> | su <User1> 
  Befehl-1
  Befehl-2
  ....

würde aber nicht funktionieren, den nach der ersten Zeile echo ....
werden die Befehle Befehl-1 ; Befehl-2 ... wieder von "alten" User ausgeführt.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Javanoob
07.04.2016, 13:13

klingt jetzt nicht so berrauschend... also sicherheitstechnisch hab ich keine bedenken da es ja nur ein versuchsaufbau sein soll.. sog. prüfen der machbarkeit. da ich aber auf diverse echos angewiesen bin werde ich es wohl mühseelig von hand machen müssen :'(

0

Mach sudo -u anstatt su


Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Javanoob
07.04.2016, 10:00

geht leider nicht... man muss auch erwähnen das die anderen user wirklich nur standart recht haben.. wenn ich echo $USER ins skript einbaue dann seh ich ja das sich nichts geändert habe

0
Kommentar von guenterhalt
07.04.2016, 16:20

1. sudo kann nicht jeder beliebe User benutzen. Das muss von root vorher konfiguriert werden.

2. Wer das Superuser-Passwort kennt, muss doch nicht einzelne User bemühen, wenn in deren Home-Bereich etwas zu ändern ist.

3. sudo verlangt u.U. auch wieder ein Passwort, womit das Problem nur verschoben ist.

0