Ich versuche, die Best Practices für die Verwendung von sudo anstelle des Root-Kontos zu befolgen.
Ich führe eine einfache Concat-Datei aus, wie zum Beispiel:
sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
Dies schlägt fehl, da rechts neben ">>" der normale Benutzer ausgeführt wird. Das Hinzufügen zusätzlicher Sudos schlägt ebenfalls fehl (erwartetes Verhalten seit dem Weiterleiten an den Befehl sudo und nicht an die Datei).
Beispiel ist nur das, aber es wurde überprüft und unter dem Root-Konto getestet.
shell
sudo
io-redirection
quoting
DarkSheep
quelle
quelle
tee
Befehle als root ausgeführt werden und nicht der Hauptbefehl, der komplex und anfällig für Fehlverhalten sein kann. (nicht der Fall vonecho
)Eine andere, ebenso sichere Möglichkeit besteht darin, sich mit
sudo
dem-i
Schalter von 's als root anzumelden:Dies folgt weiterhin den Best-Practice-Regeln, da das Root-Konto nicht als solches aktiviert ist, sondern Sie als Root sicher vorgehen können. Von
man sudo
:quelle
sudo bash
Wenn Sie Ihren Befehl ohne einfache Anführungszeichen ausdrücken, können Sie ihn in einfache Anführungszeichen setzen und über eine Zwischen-Shell ausführen.
Um dies als root auszuführen:
Schreiben Sie den Befehl auf eine andere Art und Weise, die nicht verwendet wird
'
:Dann rufen Sie auf
sudo sh -c …
:Um die Ausgabe in eine Datei zu schreiben, in die nur Root schreiben kann, rufen Sie auf
sudo tee
. Übergeben Sie die-a
Option zumtee
Anhängen an die Zieldatei, andernfalls wird die Datei abgeschnitten.Für komplexere Dateiänderungen, können Sie anrufen
sudo sed
,sudo ed
,sudo perl
, ...Verwenden Sie alternativ einen anständigen Editor und rufen Sie sudo auf. Öffnen Sie in Emacs
/sudo:/etc/conf.d/hwclock
. Rufen Sie:w !sudo tee %
in Vim auf, um als root in die geöffnete Datei zu schreiben, oder verwenden Sie das Plugin sudo.vim . Oder geh vom sudo ende und ruf ansudoedit /etc/conf.d/hwclock
.Oder Sie können sich der dunklen Seite hingeben und eine Shell als root ausführen.
quelle
Der Befehl schlägt aufgrund der Berechtigungen für die Datei fehl, zu der umgeleitet wird. Die Umleitung erfolgt noch bevor der
sudo
Befehl aufgerufen wird.Sie müssen sicherstellen, dass es der Root ist, der die Datei zum Schreiben öffnet.
Das geht am einfachsten:
Das
echo
Programm kann als normaler Benutzer ausgeführt werden, da nur eine Textzeichenfolge erstellt wird. Dastee
Dienstprogramm muss jedoch als root ausgeführt werden undtee -a
hängt Daten an. Wir leiten die Ausgabe um zu,/dev/null
datee
standardmäßig die Eingabedaten auf die Standardausgabe dupliziert werden, zusätzlich zum Schreiben in die angegebenen Dateien.Mit
bash
oder jeder Shell, die "Here-Strings" versteht:Dies ist in der Wirkung identisch mit dem obigen. Nur die Art und Weise, wie wir die Zeichenfolge produzieren, wird geändert.
Eine andere, etwas umstrittene Art, es zu tun:
In diesem Fall erfolgt die Umleitung in einer
sh -c
untergeordneten Shell, die als Root ausgeführt wird.quelle
sudo dd of=
So hängen Sie an, wie Sie möchten:
oder um die Datei von Grund auf neu zu erstellen:
Vorteile:
tee
da keine/dev/null
umleitungsh
da keine subshelldd
hat viele leistungsstarke Optionen, z. B.status=progress
um den Übertragungsfortschritt zu sehenFunktioniert, weil sudo stdin an den Befehl weiterleitet.
quelle