Staram się postępować zgodnie z najlepszymi praktykami korzystania z sudo zamiast konta root.
Korzystam z prostej operacji pliku concat, takiej jak:
sudo echo 'clock_hctosys="YES"' >> /etc/conf.d/hwclock
Nie udaje się to po prawej stronie „>>”, działa jak zwykły użytkownik. Dodanie dodatkowych sudos również kończy się niepowodzeniem (oczekiwane zachowanie od pipowania do polecenia sudo, a nie do pliku).
Przykład jest właśnie taki, ale został zweryfikowany i przetestowany na koncie root.
shell
sudo
io-redirection
quoting
DarkSheep
źródło
źródło
tee
polecenia działają jako root, a nie główne polecenie, które może być złożone i podatne na niewłaściwe zachowanie. (nie przypadekecho
)Inną opcją, równie bezpieczne, jest użycie
sudo
„s-i
przełączyć się zalogować jako root:Nadal jest to zgodne z zasadami najlepszych praktyk, ponieważ konto root nie jest tak naprawdę włączone jako takie, ale umożliwia bezpieczne wykonywanie operacji root. Od
man sudo
:źródło
sudo bash
Jeśli wyrazisz swoje polecenie bez pojedynczych cudzysłowów, możesz umieścić je w pojedynczych cudzysłowach i wykonać je za pomocą powłoki pośredniej.
Aby wykonać to jako root:
Napisz polecenie w inny sposób, który nie używa
'
:Następnie wywołaj
sudo sh -c …
:Alternatywnie, aby zapisać dane wyjściowe w pliku, do którego tylko root może zapisywać, wywołaj
sudo tee
. Przekaż-a
opcjętee
dołączania do pliku docelowego, w przeciwnym razie plik zostanie obcięty.W przypadku bardziej skomplikowanych modyfikacji plików, można zadzwonić
sudo sed
,sudo ed
,sudo perl
, ...Alternatywnie, użyj porządnego edytora i spraw, aby zadzwonił do sudo. W Emacs otwórz
/sudo:/etc/conf.d/hwclock
. W Vimie wywołaj,:w !sudo tee %
aby zapisać do otwartego pliku jako root, lub użyj wtyczki sudo.vim . Lub przejdź od końca sudo i zadzwońsudoedit /etc/conf.d/hwclock
.Lub możesz poddać się ciemnej stronie i uruchomić powłokę jako root.
źródło
Polecenie kończy się niepowodzeniem z powodu uprawnień do przekierowanego pliku. Przekierowanie odbywa się nawet przed
sudo
wywołaniem polecenia.Musisz upewnić się, że to root faktycznie otwiera plik do zapisu.
Najprostszy sposób to zrobić:
echo
Można uruchomić jako zwykły użytkownik was jak to tylko wytwarza ciąg tekstowy.tee
Narzędzie to będzie musiał uruchomić jako root, choć itee -a
doda dane. Przekierowujemy dane wyjściowe,/dev/null
ponieważtee
domyślnie będą kopiować dane wejściowe na standardowe dane wyjściowe oprócz zapisu do wskazanych plików.Z
bash
lub jakąkolwiek powłoką, która rozumie „ciągi znaków”:Jest to identyczne z powyższym. Zmienia się tylko sposób produkcji łańcucha.
Kolejny, nieco okrężny sposób:
Przekierowanie odbywa się w ramach
sh -c
powłoki podrzędnej działającej jako root.źródło
sudo dd of=
Aby dołączyć, jak chcesz:
lub aby odtworzyć plik od zera:
Zalety:
tee
bez/dev/null
przekierowaniash
odkąd brak podpowłokidd
ma wiele zaawansowanych opcji, np.status=progress
aby zobaczyć postęp transferuDziała, ponieważ sudo przekazuje stdin do polecenia.
źródło