jak ostrzec, jeśli terminal ma uprawnienia sudo, a także pokazać, ile czasu pozostało?

10

Jak sprawdzić w terminalu, że masz uprawnienia sudo? (więc wiedząc, że mam te uprawnienia, mogę po prostu pisać sudo -k) Lepiej nie dodawać zbyt wiele informacji do terminala, po prostu jakiś prosty i mały alert!

POZOSTAŁY CZAS JEST NIEMOŻLIWY, prawda?

Ponadto, jak sprawdzić, ile mam jeszcze czasu z tymi uprawnieniami na tym konkretnym terminalu? (więc mogę pozwolić, żeby to się skończyło zamiast pisać sudo -k). Myślę, że pozostały czas może pojawić się za każdym razem, gdy naciskam klawisz Enter.

EDYCJA: /var/lib/sudo/$USER/$nPtsZbadałem więcej i odkryłem, że (gdzie $ nPts jest obecnym terminalem pts od teraz ps -p $$) jego znacznik czasu jest aktualizowany za każdym razem, gdy wydawane jest polecenie sudo, i jest dostępny tylko wtedy, gdy używasz polecenia sudo, więc pozostały czas zawsze będzie skonfigurowany jeden ...

PS .: Alternatywnie, próbowałem, alias sudo='sudo -k'ale nie lubię wpisywać hasła do każdego polecenia ... A także to alias sudos='sudo -k'(lub alias ssudo='sudo -k', dobrze, jeśli wpisałeś długą linię, po prostu naciśnij Home i wpisz 's') działa, jeśli chcesz wydać tylko jedno polecenie, pisząc sudos. Ale wciąż brakuje mi informacji, kiedy mam normalne uprawnienia sudo, aby wiedzieć, że muszę działać ...

Moc Wodnika
źródło
2
Dlaczego zostało to odrzucone? Chociaż nie jest to najjaśniejszy post, pytanie tytułowe nadal wydaje mi się ważnym pytaniem (i całkiem przydatnym pytaniem)
DaimyoKirby
czy możesz powiedzieć, co można wyjaśnić? mój niezredagowany początkowy post był 3 razy większy i znacznie go wyczyściłem, aby był bardziej zwięzły :)
Aquarius Power
Myślę, że było już późno - przeczytałem go ponownie i ma to większy sens.
DaimyoKirby

Odpowiedzi:

5

[Nadal chciałbym wiedzieć, czy istnieje lepsze rozwiązanie.]

Znalazłem sposób, który działa, a monit będzie przechowywany w jednym wierszu:

na końcu ~/.bashrcdodaj:

function FUNCsudoOn() { 
    if sudo -n uptime 2>/dev/null 1>/dev/null; then 
        echo -ne "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"; 
        #echo #without newline, the terminal seems to bugout with lines that are too big... discomment this if you find any problems...
    fi; 
}
function FUNCpromptCommand () { 
    FUNCsudoOn
}
export PROMPT_COMMAND=FUNCpromptCommand
#export PS1="\`FUNCsudoOn\`$PS1" #this also works, use instead of PROMPT_COMMAND

EDYCJA: Odkryłem, że sudo -n uptimezaktualizuje limit czasu sudo, więc za każdym razem, gdy naciśniesz klawisz Enter, ten czas sudo zostanie zaktualizowany ... To sprawia, że ​​znajomość pozostałego czasu jest bezużyteczna, ponieważ zawsze będzie skonfigurowany, domyślnie 15 minut .. .

i aby znaleźć najlepsze formatowanie kolorów dla swojego gustu, możesz użyć ScriptEchoColor z --escapedcharsopcją:

echoc --escapedchars "@{nRlyo} SUDO " #that outputs below...
echo -e "\E[0m\E[93m\E[41m\E[1m\E[5m SUDO \E[0m"

aby po prostu przestać migać usuń \E[5mjak w\E[0m\E[93m\E[41m\E[1m SUDO \E[0m

Moc Wodnika
źródło
4

Twój terminal nie ma „uprawnień sudo”, chyba że zrobisz coś głupiego, np. sudo bash NIE Rób tego!

Wszystko, co musisz zrobić, aby „mieć normalne uprawnienia sudo”, to powstrzymać się od pisania sudoprzed poleceniem.

/usr/bin/idto dobry sposób, aby zobaczyć, co sudorobi. Na przykład:

id -a        # returns my UID info
sudo id -a   # returns root's info
id -a        # me again
sudo id -a   # root again

sudoStrona człowiek mówi „Polityka sudoers buforuje poświadczeń przez 15 minut, chyba że zostaną zamienione w sudoers (5)”. Oznacza to, że domyślnie po wydaniu sudopolecenia (i wprowadzeniu hasła), a następnie odczekaniu 14,9 minuty przed wydaniem drugiego sudopolecenia, nie trzeba będzie ponownie wpisywać hasła. Jeśli zaczekasz 15,1 minuty, będziesz musiał ponownie wprowadzić hasło. sudo -kpo prostu natychmiast wygaśnie 15-minutowy timer. Jedyne, co widzę, sudo -kto to, że masz zamiar oddać odblokowany terminal komuś, komu nie ufasz UID 0.

waltinator
źródło
Powiedziałeś „powstrzymaj się od pisania sudoprzed poleceniem”. Ale jeśli chcę sprawdzić reguły zapory, iptables -Lnie będzie działać, chyba że piszę sudo iptables -L. Chodzi mi o to, jak właściwie możemy uniknąć używania sudo?
Wodnik Moc
Również o pozostałym czasie chcę wiedzieć, ile czasu pozostało po każdym naciśnięciu klawisza Enter na terminalu. O sudo -k, martwię się o włamywacze próbujące uzyskać zdalny dostęp do mojego komputera (tak naprawdę nie wiem, czy i tak mogą to zrobić ...), lub w przypadku gdy zostawię moją maszynę otwartą bez zamykania jej na kilka chwil ... cóż, prawda jest taka: chcę to zrobić w ten sposób! Nie dbam o to, aby pisać sudo -ki moje hasło ponownie tyle razy, ile muszę, czuję się dobrze, gdy robię to w ten sposób! :)
Aquarius Power
„Unikać używania sudo”? Sudo było rozwiązaniem do dystrybucji hasła roota, ustawiania binariów w konfiguracji setuid lub używania /bin/su. Czy na pewno chcesz to odrzucić? „Zdalny dostęp do mojej maszyny ...” i, jak sądzę, przejęcie /proc/YourPID/fd/{0,1,2}. Nie. Jeśli twój komputer jest dostępny zdalnie, Bad Guy ma łatwiejszy sposób na UID 0. Powinieneś zwiększyć swój Linux-foo przed tym poziomem obaw.
waltinator,
Przepraszamy za rant, to brzmi jak należy alias k=/usr/bin/sudo -kwymienić sudopolecenie z funkcją alias lub bash, który owija wezwanie do /usr/bin/sudoz /usr/bin/touch $HOME/tmp/$$/sudotime, i wreszcie, coś dodać do print $ {{czasu (teraz) - czas ($ HOME / tmp / $ $ / sudotime))) w wierszu polecenia Bash. Nie trywialne, ale jeśli to sprawi, że poczujesz się dobrze, idź na całość.
waltinator,
co ciekawe, logowałbym się również, gdy nastąpiła próba, a nawet lepiej, wyłączałby wszelką komunikację sieciową, super! ale nawet jeśli ukrywam się sudoz aliasem dowolnego losowego słowa, mogą one /usr/bin/sudozamiast tego pisać sudoi nadal działałyby tak, jak sudo :(. W każdym razie podoba mi się ten pomysł .. Zastanawiam się, czy zmienię rzeczywiste, /usr/bin/sudoto złamie coś innego niż wszystkie moje skrypty, które go używają .. nawet jeśli to zrobię, mogą, czytając skrypty, odgadnąć, czym stało się sudo ..
Aquarius Power