Wie verlasse ich den Superuser aus der Mitte des Shell-Skripts?


2

Ich habe ein Shell-Skript, in dem die meisten Befehle ausgeführt werden müssen sesu Benutzer und dann muss ich einige Befehle als aktueller Benutzer ausführen. Können Sie mir bitte dabei helfen?

Antworten:


1

Wenn Sie das Kennwort nicht jedes Mal angeben möchten, fügen Sie hinzu sesu zu sudoers gruppiere und führe den gewünschten Befehl folgendermaßen aus:

sudo su -c "command string"

Diesen Weg command string läuft als Superuser (root etc).


Ändern Sie die sudoers-Datei. In einigen Betriebssystemen ist eine "sudoers" -Gruppe bereits vorhanden und verfügt über einige Rechte. Sie können Benutzer dazu berechtigen, nur bestimmte Befehle auszuführen. Ein völlig anderer Ansatz kann darin bestehen, einen SSH-Schlüssel zu verwenden, der nur bestimmte Befehle ausführt. Diese Ansätze können kombiniert werden. (Dann auch verwenden MariusMatutiaes Antwort wie nötig.)
TOOGAM

1

Der Befehl

    exit

Schließt die aktuelle Shell. Wenn Sie eine Shell wie user ausführen X , dann zu einem Benutzer gewechselt Y. , Ausfahrt schließt die Shell, in der Sie waren Y. und bringt dich zum Sein zurück X


0

Sie können verwenden su zu einem anderen Benutzer wechseln und die -c Option zum Ausführen des Befehls, z.

 su anotherUser -c "ls /"

Überprüfen Sie, ob Sie haben sudo und überlegen Sie, ob Sie es in Ihrem Fall verwenden können. Das obige su-Beispiel fragt nach dem Passwort eines anderen Benutzers, was ärgerlich sein kann.


0

Ich war kürzlich in einer ähnlichen Situation. Folgendes habe ich getan, um sofort beim Aufruf eines Skripts auf die Superuser-Ebene zu wechseln und anschließend normale Benutzeraufgaben auszuführen. Ich denke, es kann Ihnen helfen, einen Weg zu finden, um zur gewünschten Lösung zu gelangen:

#!/bin/bash

# generic_sudo.sh
# Tool that demonstrates in-then-out of sudo
# This demo is pointless if called with 'sudo generic_sudo.sh'

# Need root priviledges for some superuser work
if (( EUID != 0 )); then # If the user is not "root":
# In general one should use ((..)) for testing numbers and integer variables, and [[..]] for testing strings and files.
    sudo $0                         # Relaunch it as "root".
    EXITCODE=$?
    printf "su mode OFF.\n"         # If we got here, we left superuser mode
    printf "EUID is: %d\n" $EUID
    printf "Exit code %d\n" $EXITCODE
    exit $EXITCODE                  # Once it finishes, exit gracefully.
else
  printf "su mode ON.\n"
fi                              # End if.

printf "EUID is: %d\n" $EUID

# Some superuser work

printf "Some superuser work was done.\n"
exit 0
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.