Der Befehl sudo wird nicht vom Skript ausgeführt

1

Linux Mint.

Ok, das wird ernsthaft grundlegend sein, aber aus irgendeinem Grund verstehe ich falsch, wie das funktioniert.

Wenn ich die folgenden Befehle eingebe, funktioniert alles einwandfrei:

cd home/user/folder1/folder1/

sudo openvpn --auth-nocache --config /home/user/folder2/folder2/config-file.ovpn 

Ich gebe das sudo Passwort ein und alles ist gut.

Wenn ich diese Befehle in eine Skriptdatei lege, erhalte ich nichts als "Befehl nicht gefunden".

Ich habe die Skriptdatei in einem Ordner abgelegt und dem Pfad sowohl das Skript- als auch die OPVN-Ordner hinzugefügt.

Ich habe ein neues Skript (ohne die Pfade) im selben Ordner wie die ovpn-Dateien erstellt, habe es von dort ausgeführt und bin fehlgeschlagen.

sudo opvn-script.sh 
[sudo] password for <user>: 
sudo: opvn-script.sh: command not found

Was ich nicht verstehe ist, dass die Skriptdatei selbst nicht gefunden werden kann, da sie automatisch vervollständigt wird, nachdem ich die ersten Zeichen eingegeben und die Tabulatortaste gedrückt habe. openvpn kann nicht 'nicht gefunden' werden, da ich die Befehle direkt ausführen kann.

Die Skriptdatei wird als ausführbar markiert.

echo $PATH Zeigt beide Ordner im Pfad an.

Was zum Teufel ist übrig?

DragonDon
quelle
2
Verschiedene Benutzer haben unterschiedliche Pfade. Es scheint so opvn-script.sh ist im PATH für den aktuellen Benutzer, aber nicht für root. Versuchen: sudo /path/to/opvn-script.sh
John1024
Ja, das hat es geschafft! Also, was ist dann am besten? Fügen Sie den Pfad zu su hinzu, indem Sie zu su wechseln. Pfad exportieren?
DragonDon
Es gibt viele Lösungen. Eine Möglichkeit besteht darin, einen Shell-Alias ​​zu erstellen, der abgeschrieben wird sudo /path/to/opvn-script.sh für dich. Ein anderer könnte nur sein, sich zu bewegen opvn-script.sh an eine geeignete Stelle im aktuellen Pfad von root.
John1024
Danke noch einmal. Der Alias ​​scheint weniger sicher zu sein, als das Skript einfach irgendwohin zu verschieben.
DragonDon

Antworten:

1

Betrachten Sie diese Fehlermeldung:

sudo: opvn-script.sh: command not found

Dies ist aufgetreten, nachdem Sie das Kennwort eingegeben haben, und weist darauf hin, dass das Skript unter dem Pfad des neuen Benutzers (root) nicht gefunden wurde.

Eine Lösung ist:

sudo /path/to/opvn-script.sh 

Wenn das funktioniert, dann beweg dich opvn-script.sh an einen geeigneten Ort irgendwo auf dem Pfad von root.

Stellen Sie aus Sicherheitsgründen sicher, dass die Berechtigungen so festgelegt sind, dass nur Root-Benutzer Änderungen vornehmen können (Schreiben). opvn-script.sh.

John1024
quelle
1

Ah, ich glaube ich sehe es. (Natürlich aus der Ferne schwer zu sagen, und ich habe keine Linux-Box zur Hand.)

Wenn Sie einen Befehl über sudo ausführen, z

$ sudo blah

Es gibt eine potenzielle Sicherheitslücke - prüfen Sie beispielsweise, ob jemand Ihr Skript bearbeitet und hinzugefügt hat vi /etc/passwd dazu. ich glaube Linux ändert den Pfad, um dies zu verhindern.

Um dies zu überprüfen, schreiben Sie ein Skript, das nur widerhallt $PATH und starte es von sudo. Wenn der Pfad nicht Ihren Erwartungen entspricht, haben Sie Ihr Problem gefunden.

Charlie Martin
quelle
1
Danke Charlie! Anscheinend sind Sie und @ John1024 zu demselben Ergebnis gekommen, weil ich dasselbe "nicht gefunden" habe, als ich ein anderes Skript ausprobiert habe. Obwohl deine meistens anders bestätigt hat :)
DragonDon
1

Der Pfad zum Skript war nicht im SUDO-Benutzerprofil. Das Skript wurde in einen SUDO-Pfad verschoben

DragonDon
quelle
Bitte markieren Sie dies als akzeptiert, damit diese Frage nicht mehr als ungelöst erscheint. Vielen Dank.
tripleee
Äh, wie macht man das in der Android App? Nichts ist offensichtlich .....
DragonDon
Ah, ich habe es gerade herausgefunden, aber ich kann meine eigene Antwort akzeptieren, bis zwei Tage vergangen sind.
DragonDon