Skript, das als anderer Benutzer von root ausgeführt wird, erstellt Dateien in einem falschen Verzeichnis (root)

383
NaturalBornCamper

Ich verwende ein Bash-Skript aus einer Root-Perspektive, die dann ein Programm im Skript startet

su -c "sh /home/user2/script.sh" -m user2 

Das Problem ist, dass das mit diesem Skript gestartete Programm, während es als Benutzer2 ausgeführt wird, immer noch versucht, Dateien in /root/.config/ zu erstellen, was natürlich fehlschlägt, da es von Benutzer2 nicht zulässig ist .

Mache ich etwas falsch? Gibt es eine andere Möglichkeit, den Benutzer tatsächlich im Skript zu ändern, das Kennwort des Benutzers einzugeben und das Programm zu starten?

0
Der `-m`-Parameter behält die Umgebung der aufrufenden Shell bei, also bleibt $ HOME auf` / root`, wenn von einer Root-Shell aufgerufen. Warum hast du es benutzt? Und warum rufst du die Bourne-Shell an, um ein `bash'-Skript auszuführen? AFH vor 6 Jahren 2
Oh wow, danke .. Ich dachte, der Parameter "m" sei zu genau für den Benutzer, völlig missverstanden, als ich diesen Befehl aus einer anderen Überlauffrage übernahm. NaturalBornCamper vor 6 Jahren 0
Über die Bourne-Shell ... das war alles, was ich je benutzt habe, wusste nicht, dass ich es nicht immer benutzen sollte NaturalBornCamper vor 6 Jahren 0
Ihre Frage ist mit `[bash]` gekennzeichnet und beginnt mit "Ich führe ein Bash-Skript aus ...". Heutzutage ist es ungewöhnlich, Bash nicht zu verwenden, da dies bei den meisten Linux-Distributionen die Standard-Shell ist. Wenn Ihr Skript mit "#! / Bin / bash" oder "#! / Bin / sh" beginnt, bestimmt das, welche Shell verwendet wird, unabhängig von der Shell, von der es gestartet wurde. Im Übrigen ist es üblich, dass `sh` und` bash` dasselbe Programm sind, mit Schaltern, welche Syntax verwendet werden soll. Ich beantworte deine Frage, damit andere sehen können, dass es eine Antwort gibt, AFH vor 6 Jahren 0

1 Antwort auf die Frage

2
AFH

Wenn Sie den -mParameter mit verwenden su, wird Ihre aktuelle Umgebung an den Befehl oder die Shell übergeben, die gerade ausgeführt wird. Insbesondere wird die $HOMEVariable in der aufrufenden Shell auf ihren Wert gesetzt und nicht vom aufgerufenen Benutzer bestimmt.

Wenn Sie also als angemeldet sind root, $HOMEwerden /rootund bleiben Sie bei der Ausführung script.shunter su -m. Wenn keine anderen Bereiche der Umgebung vorhanden sind, die Sie beibehalten möchten, können Sie -mden suAnruf einfach weglassen .

Wow, vielen Dank! +1 für die vollständigen Erklärungen, hoffe, jemand kann das verwenden. Ich benutze Linux seit einiger Zeit, aber als Amateur, daher kenne ich die Details nicht, sehr hilfreich! NaturalBornCamper vor 6 Jahren 0