Ich habe ein kleines Bash-Skript:
#!/bin/bash
touch dummy.txt
Wenn ich dieses Skript mit ausführe sudo
, wird es erstellt, dummy.txt
das root-geschützt ist .
Was ich tun möchte ist:
Unabhängig davon , ob dieses Skript ausgeführt wird , unter Verwendung sudo
oder ein normaler Benutzer, die Datei dummy.txt
sollte nicht root geschützt werden.
chown
undchmod
in Ihrem Skript verwenden, um den Besitz und die Berechtigungen wie gewünscht festzulegen.Antworten:
Sie können testen, ob das Skript
sudo
mithilfe der VariablenEUID
und ausgeführtSUDO_USER
wird, und dann ausführen,touch
alsSUDO_USER
ob es wahr wäre - so etwas wiequelle
==
für den Zeichenfolgenvergleich verwendet. Da ein$EUID
ganzzahliger Wert zurückgegeben werden soll, würde ich empfehlen, den-ed
Vergleich zu verwenden. Leerzeichen sind in Benutzernamen zulässig , zitieren Sie also wahrscheinlich die$SUDO_USER
Variable. Ansonsten gute Antwort - das würde ich persönlich nutzen.sudo -u
wenn es feststellt, dass es als Root ausgeführt wird. Das OP sprach davon, mehrere Befehle in einem Skript zu haben. Vermeiden Sie jedoch eine Endlosschleife bei Fehlern.[[...]]
Wortaufteilung innerhalb, daher ist es nicht unbedingt erforderlich, die Variable in der if-Anweisung zu zitieren. @Serg und ich-ed
waren ein Tippfehler für-eq
-eq
. Wusste nicht, dass[[
es keine Wortaufteilung gibt. Vielen Dank. Persönlich würde ich immer noch aus Gründen der gutenWenn Ihr Skript nicht als ausgeführt werden soll
root
, können Sie das Problem am sichersten lösen, indem Sie die Ausführung des Skripts ganz am Anfang abbrechen:Optional können Sie Ihr Skript als Fallback-Benutzer (z. B.
sudo -u FALLBACK_USER "$0"
) erneut ausführen, anstatt es einfach abzubrechen.Der Versuch, die Macken einzelner Befehle zu beheben, macht Ihr Skript unnötig komplex und schwer zu debuggen. Jedes Mal, wenn Sie es ändern, müssen Sie alle Tests zweimal durchführen (als normaler Benutzer, dann als
root
) und alle auftretendenroot
Fehler beheben . Es ist sozusagen keine zukunftssichere Lösung.quelle
Standardmäßig haben Dateien, die mit root accound erstellt wurden, folgende Berechtigungen:
Hier gehört die Datei zum Root-Benutzer und zur Root-Gruppe und kann von root gelesen und beschrieben werden, aber nur von anderen.
Der einfachste Ansatz wäre, nur
chown
die Datei an den ursprünglichen Benutzer zurückzugeben.Sie können eine
$SUDO_USER
Variable verwenden, auf die nur zugegriffen werden kann , wenn siesudo
aufgerufen wird.Wenn Sie das Skript als normaler Benutzer ausführen , wird das
chown
Teil überhaupt nicht benötigt. Daher sollten Sie die Verwendung der if-Anweisung oder des&&
Tests in Betracht ziehen, um den Fall zu testen, in dem das Skript als root ausgeführt wird, und Folgendes tun:Der obige Ansatz wird empfohlen. Es gibt andere, z. B.
chmod
zum Ändern der Lese-, Schreib- und Ausführungsberechtigungen für Benutzer und Gruppen, dies wird jedoch nicht empfohlen.quelle
sudo
, dann nein - Sie können es nicht ignorieren. Sie können entweder das Skript als regulärer Benutzer ausführen (was ich nicht verstehe, warum Sie dies nicht tun, da Sie hier einfach eine Datei für Ihren Benutzer erstellen) oder den Dateibesitz ändern, wie in meiner Antwort gezeigt.