Niedawno wyłączyłem funkcję sudo
buforowania uwierzytelniania, aby teraz za każdym razem monitował mnie o hasło.
I chociaż jest to dobre dla bezpieczeństwa, spowodowało jeden niewielki problem, dla którego nie byłem w stanie znaleźć rozwiązania, nie jestem w stanie uruchamiać poleceń zgodnych z:
sudo <command> &
W przeszłości uruchamiałem sudo
wcześniej polecenie, buforowałoby moje hasło i pozwalało mi na uruchamianie sudo
poleceń bez monitowania przez kilka następnych minut, a zatem pozwalało mi na uruchamianie polecenia.
Ale kiedy uruchomię go teraz, ponieważ nie ma wcześniej buforowania, a ponieważ natychmiast rozpoczyna on nowy wątek i sudo
nawet nie monituje o hasło, nie jestem w stanie uruchomić go w ten sposób.
Więc dopóki nie ucieknę sudo -i
go wcześniej, nie będę mógł uruchomić polecenia w tym formacie, co staje się dość denerwujące.
Zastanawiałem się więc, czy jest jakiś sposób na obejście tego i nadal uruchamianie programów i poleceń w ten sposób?
Używam Ubuntu GNOME 15.10 z GNOME 3.18, a konkretnie program, który chcę uruchamiać w ten sposób, to etherape
czy to robi jakąkolwiek różnicę, ale naprawdę chciałbym, aby rozwiązanie działało dla wszystkich programów i poleceń.
&
nie da się przeszukiwać, zmieniam to na… sudo command in the background
.Odpowiedzi:
Zamiast uruchamiać się
sudo
w tle, powiedz,sudo
aby uruchomić polecenie w tle. Odman sudo
:Na przykład:
Innym sposobem byłoby po prostu użycie powłoki do uruchomienia polecenia:
Inną opcją byłoby określenie programu graficznego do uzyskiwania hasła i wysłanie
sudo
go mimo to do tła:Programy SSH są zwykle używane w SSH. Jednym z nich jest
ssh-askpass-gnome
pakiet, który jest instalowany domyślnie, przynajmniej na Ubuntu 15.10.źródło
Jeśli chcesz ustawić
timestamp_timeout
przynajmniej coś takiego0.02
(1,2 sekundy, powiedziałbym, że jest równie bezpieczny jak0
) w/etc/sudoers
(potrzebne w twoim przypadku, ale z ustawieniami domyślnymi lub ztimestamp_timeout
ustawieniem na cokolwiek innego niż0
tylko można wykonać następujące czynności) , możesz ustawić alias taki jak ten~/.bashrc
, który nie będzie wymagał, aby pamiętać o zrobieniu czegoś przed uruchomieniem polecenia, i który pozwoli ci zachować kontrolę nad procesem:Sztuką jest średnik, który sprawi, że Bash parsuje
sudo -v
najpierw i osobno, uwierzytelniając użytkownika, i ogranicza potencjalną część tła do[ $? ] && sudo
polecenia, które sprawdzi, czy sięsudo -v
powiodło, i uruchomisudo
ponownie (potencjalnie w tle), gdyby tak było.źródło
sudo -v
rozszerza buforowanie poświadczeń, nawet jeśli buforowanie jest wyłączone? I, IIRC <dla aliasów do rozszerzenia, przestrzeń powinna znajdować się na końcu polecenia, a nie na początku.timestamp_timeout
ustawił0
. I tak, całkowicie zawiodłem w kwestii rozszerzenia aliasu, alias nie powinien się rozwijać. Dzięki.alias sudo='sudo -v && sudo'
byłoby tak dobrze?;
sprawia, że Bash parsujesudo -v
najpierw i osobno; użycie&&
Bash parsowałoby je zarówno jako pojedyncze polecenie, jak i działało w tle natychmiast.Nie możesz
&
Natychmiast wysyła polecenia do tła. Oznacza to, że w tle tworzona jest podpowłoka i tam wykonywana jest komenda. Gdy to polecenie wydaje monit, jak w przypadkusudo
, monit jest wyświetlany w tle i nigdy go nie widzisz.Jedynym sposobem jest przeniesienie polecenia z powrotem na pierwszy plan, podanie hasła i odesłanie go w tło. Na przykład:
Teraz wprowadź hasło, naciśnij, Entera następnie naciśnij, CtrlZaby odesłać je z powrotem do tła i
bg
powiedzieć mu, aby kontynuowało działanie.Prostszym podejściem byłoby nigdy nie używać,
&
a zamiast tego wysyłać zadania do tła ręcznie za ich pomocą CtrlZibg
po ich uruchomieniu.Na koniec warto rozważyć ustawienie limitu czasu hasła sudo na około 1 lub 2 sekundy. To wciąż zapewniłoby ci wystarczające bezpieczeństwo (chyba, że próbujesz się chronić przed Flashem) i pozwoliło ci uruchamiać takie polecenia zgodnie z oczekiwaniami.
źródło
man sudoers
mówitimestamp_timeout
, że wartość powinna określać minuty z możliwą częścią ułamkową (która, nawiasem mówiąc, powodujesudo
błąd, jeśli próbuję podać jedną, nie wiem dlaczego).2.5
działa tutaj dobrze (Arch,sudo
wersja 1.8.15).