Jak sprawić, aby uprawnienia superużytkownika działały dłużej niż używanie sudo?

25

Czy istnieje sposób, w jaki mogę sprawić, aby sudopolecenie dawało mi uprawnienia na okres dłuższy niż domyślny?

sudoWymaganie instalacji wielu pakietów może być uciążliwe z powodu konieczności wprowadzania hasła, więc byłoby miło, gdyby istniało polecenie lub konfiguracja, które można wykonać, aby wpłynąć na okres użytkowania.

Powiedz mi dlaczego
źródło
3
Więc nikt już nie używa su? Zawsze?
Pan Lister,
9
@MrLister, sudo -ia masz skorupę korzenia, gotową dla każdego, aby pomóc sobie stopić się w stopach przez tak długi czas jak ktoś taki ...
Rmano
1
@DevRobot, czy masz na to źródło? Trudno mi uwierzyć, że Canonical usunąłby tak ważne polecenie i nie mogę nic na ten temat znaleźć w Google.
DJMcMayhem,
9
@DevRobot supotrzebuje roota, aby mieć hasło. Domyślnie użytkownik root Ubuntu nie ma hasła. Dlatego nie możesz surootować. sudziała tutaj zgodnie z przeznaczeniem. Spróbuj z każdym użytkownikiem, który ma hasło.
muru
3
@muru sudo sudziała dobrze, choć trochę powtarzalnie.
coteyr

Odpowiedzi:

27

Zachowanie sudo jest skonfigurowane w /etc/sudoerspliku. Istnieje timestamp_timeoutopcja odpowiedzialna za ponowne monitowanie użytkownika o hasło po określonym czasie.

Od ludzi sudoers

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.

Aby zmienić to ustawienie, wykonaj następujące czynności:

  1. W biegu terminalowym sudo visudo. visudojest używany specjalnie do edycji/etc/sudoers pliku i domyślnie używa nanoedytora tekstu.
  2. Znajdź linie zaczynające się od Defaults. Dodaj następujący wiersz

    Defaults        timestamp_timeout=x
    

    gdzie x to liczba minut między kolejnymi monitami

  3. Zapisz plik za pomocą Ctrl+O

Sergiy Kolodyazhnyy
źródło
12

Od man sudoers:

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.  This
                       can be used to allow users to create or delete their
                       own time stamps via “sudo -v” and “sudo -k” respec‐
                       tively.

Jak widać, domyślny limit czasu sudoto 15 minut. Możesz zmienić tę wartość w /etc/sudoers.

Nie edytujesz bezpośrednio /etc/sudoers, zamiast tego użyj, visudoaby to zrobić.

Od man visudo:

     visudo edits the sudoers file in a safe fashion, analogous to vipw(8).
     visudo locks the sudoers file against multiple simultaneous edits, pro‐
     vides basic sanity checks, and checks for parse errors.  If the sudoers
     file is currently being edited you will receive a message to try again
     later.

Więc wpisz sudo visudoterminal, który otworzy /etc/sudoersplik w nanoedytorze tekstu.

Poszukaj tej linii:

Defaults    env_reset

I dodaj, gdzie X to czas, który chcesz ustawić w minutach.timestamp_timeout=X

Jako przykład:

Defaults    env_reset,timestamp_timeout=5

Jeśli podasz 0, zawsze będziesz pytany o hasło. Jeśli podasz wartość ujemną, limit czasu nigdy nie wygaśnie.

Po zakończeniu zapisz i wyjdź.

Zobacz RootSudoTimeout

Ron
źródło
Pokonaj mnie o 29 sekund =)
Sergiy Kolodyazhnyy,
1
Jesteś dobry -_- b Jestem na laptopie. . . może potrzebuję więcej kawy
Sergiy Kolodyazhnyy,
Możesz także ustawić na przykład -1 na przekroczenie limitu czasu - jeśli nie chcesz, aby monit o hasło był wyzwalany.
Michał Żywiecki,
8

Spróbuj tego .

  1. Uruchom następujące polecenie w terminalu:

    sudo visudo
    
  2. Przewiń w dół do linii, która wygląda następująco:

    Defaults        env_reset
    
  3. Zmień to na na przykład:

    Defaults        env_reset,timestamp_timeout=30
    

Zmień 30 na czas (w minutach), który ma poczekać, aż upłynie limit czasu. Możesz również zmienić go na 0, jeśli chcesz, aby hasło było wyświetlane przy każdym uruchomieniu sudo, lub -1, jeśli nie chcesz, aby hasło było wyświetlane. Naciśnij Ctrl+, Xaby zakończyć edycję, Y, aby zapisać zmiany i Enter, aby wyjść.

Oto źródło: http://lifehacker.com/make-sudo-sessions-last-longer-in-linux-1221545774

Michał Żywiecki
źródło
5

Możesz edytować /etc/sudoersplik (za pomocą sudo visudo: bądź ostrożny) i dodać linię podobną do

Defaults:myname timestamp_timeout=15 

gdzie mynamejest twój identyfikator użytkownika. Wartość limitu czasu jest w minutach. Możesz użyć wartości -1, aby nigdy nie wygasać, a następnie wpisać, sudo -kaby zabić uwierzytelnianie, więc ponownie potrzebujesz hasła.

Możesz też dodać wpis, że określone polecenie w ogóle nie potrzebuje hasła.

meuh
źródło
1
+1 za wzmiankę sudo -ko ręcznym unieważnieniu buforowanego uwierzytelnienia.
Bajt Dowódca
5

Nie mogę uwierzyć, że najprostsze polecenie:

sudo -s

nie jest tu wymienione. Przełącznik „-s” daje konsolę z uprawnieniami roota, które działają do momentu wyjścia z niej. Nie ma potrzeby przeczesywania ustawień domyślnych.

Oliver Friedrich
źródło
1
Dlaczego jest to przegłosowane?
coteyr
3
Nie przegłosowałem, ale pokonuje to jedną zaletę używania sudo: każde polecenie jest rejestrowane (abyś mógł zobaczyć, co zrobiłeś). Tracisz to logowanie po otwarciu powłoki roota.
guntbert
1
@ guntbert na pewno jest rejestrowane każde polecenie, ale w historii użytkownika root.
Oliver Friedrich,
@ BeowulfOF niekoniecznie - historia bash jest czymś zupełnie innym niż dziennik systemowy.
guntbert
1
Naprawdę, @guntbert, jeśli używasz dziennika uwierzytelniania w ten sposób, masz różne problemy.
Oliver Friedrich,
1

Wydaje się, że wszystkie pozostałe odpowiedzi koncentrują się na zmianie domyślnego limitu czasu, po upływie którego należy ponownie wpisać hasło sudo. Jeśli jednak chcesz po prostu móc uruchamiać polecenia jako root bez wcześniejszego wprowadzania wszystkich poleceń sudo, możesz uzyskać powłokę root z:

sudo -i

lub

sudo bash

lub

sudo <your preferred shell here>

Chociaż wszystkie z nich po prostu uruchamiają pojedynczy proces jako root, ten pojedynczy proces, o którym mowa, tak się składa, że ​​jest powłoką, która pozwoli ci uruchomić tyle innych procesów, ile chcesz jako root bez dalszej potrzeby wpisywania sudolub hasła. :)

Oczywiście, z wielką mocą wiąże się wielka odpowiedzialność, nie rób głupot itp.

reirab
źródło
1
Zachowaj przy tym szczególną ostrożność. W efekcie uruchomisz powłokę root.
hmayag
4
Dlaczego jest to zaniżone?
coteyr
@hmayag Tak, jeśli uruchomisz powłokę roota, faktycznie uruchomisz powłokę roota. Stąd powód ostrzeżenia na końcu.
reirab
@coteyr Prawdopodobnie z tego samego powodu, co odpowiedź BeoWulfa.
guntbert
1

Po wyświetleniu jednego zbyt wielu pytań od użytkowników, którzy zmodyfikowali pliki konfiguracyjne i byli zdezorientowani, dlaczego ich zmiany zostały zastąpione po aktualizacji pakietu, zauważę, że jeśli chcesz zmodyfikować timestamp_timeout , lepiej zrobić to, tworząc plik /etc/sudoers.dzamiast modyfikować /etc/sudoersbezpośrednio.

Więc powinieneś to zrobić

sudo visudo -f /etc/sudoers.d/timeout

(nazwa pliku może być dowolna, o ile nie zawiera kropki ( .) ani końcówki tyldy ( ~)). Zamiast otwierać/etc/sudoers w wybranym edytorze, otworzy się /etc/sudoers.d/timeout, zwykle jako pusty plik, ponieważ nie istnieje. Połóż swój

Defaults timestamp_timeout=X

i zapisz jak zwykle. Jeśli więc pojawi się nowa wersja /etc/sudoers, nie musisz wybierać między instalacją nowszej wersji lub zachowaniem zmian - automatycznie będziesz mieć obie te opcje.

fkraiem
źródło
1

Jeśli szukasz rozwiązania, które nie zmienia pliku konfiguracyjnego , na przykład gdy chcesz, aby token działał dłużej dla określonej sesji lub jeśli ma zastosowanie tylko po wyraźnym działaniu, możesz spróbować:

# Work as is with Bash 4.1.2(1)-release and later, this might require some adaptation for other shells
(while [ true ]; do sudo -v; sleep $((60*4)); done)&

Zasadniczo poprzedni kod odświeżał token sudo co 4 minuty , poprzez proces uruchamiany w tle.

Rzeczywiście, zgodnie z sudoinstrukcją: „domyślny limit czasu hasła dla zasad bezpieczeństwa sudoers wynosi 5 minut ”. Zatem w zależności od zasad specyficznych dla systemu, możesz dostosować ilość czasu, przez który pętla przechodzi w tryb uśpienia między dwoma cyklami.

psychoslave
źródło