(Pierwotnie opublikowane na Stack Overflow. Sugerują, że spróbuję tutaj. Oto oryginalny post: /programming/3858208/sudo-is-there-a-command-to-check-if-i-have -sudo-i-lub-jak-ile czasu pozostało )
Zobacz tytuł. Chcę polecenia, które pozwoli mi na zapytanie sudo. Idealnie byłoby zwrócić sukces, jeśli nadal mam sudo, i fałsz, jeśli sudo wygasło. Przydałby się mi pozostały czas (chociaż gdybym się martwił, mógłbym po prostu zrobić sudo -v w celu rewalidacji). Och i nie powinienem prosić o hasło.
Najbliższą rzeczą, jaką znalazłem, jest „sudo -n prawda”, ale opcja -n jest obecna tylko na moim komputerze Centos 5 w pracy. -n kończy się niepowodzeniem, jeśli musi poprosić o hasło. Czy jest jakiś inny sposób na uzyskanie tej funkcjonalności? Załóżmy, że nie mam roota na wszystkich komputerach, z którymi pracuję, więc nie mogę instalować nowych wersji sudo według własnych upodobań.
Z tego powodu warto to zrobić, aby uzyskać monit o podanie statusu sudo. Lubię wiedzieć, które terminale są aktywne sudo. Mam również monit, który zmienia kolory, gdy jestem rootem, ale nie używam roota zbyt często, więc jest to ograniczone użycie.
Wiem, że to naprawdę stare pytanie, ale oto co zrobiłem dzisiaj w skrypcie:
źródło
Poniższe polecenie pokaże kolorowe oznaczenie przyznane przez sudo, więc pamiętaj, aby zrobić coś
sudo -k
przed odejściem od maszyny. Przydaje się również na nie kolorowych terminalach.Ponieważ możemy mieć sudo aktywne i nieaktywne na różnych sesjach terminalowych, stworzyłem to, co można umieścić na końcu ~ / .bashrc
Na typ terminala,
bash
aby go przetestować. Dodaje również cały wiersz za każdym razem, gdy wykonujesz polecenie, który zawiera informacje o czasie ostatniego polecenia, dzięki czemu możesz iść na lunch i wiedzieć, kiedy ostatnie polecenie się zakończyło :).Możesz grać z tym kodem, aby dopasować go do swoich potrzeb. Jest też zmienna PS1 (to jest tak naprawdę mała pojedyncza linia), ale myślę, że lepiej nie zadzierać z nią.
PS .: dla OS-X, poszukaj komentarza poniżej @nwinkler.
źródło
sudo -n
nie działa w systemie OS X. Zobacz moje pytanie tutaj: superuser.com/questions/902826/…sudo -n
czy uważasz, że mógłby istnieć inny test, który mógłby zostać użyty do ustalenia, czy użytkownik ma aktywny dostęp do sudo? a może OS-X wymaga aktualizacji? Nigdy nie korzystałem z OS-X btw.sudo -n
na BSD (na której oparty jest OS X) zachowuje się inaczej niż wersja GNU. Właśnie dodałem swój komentarz, aby poinformować ludzi, że ta wersja czeku wydaje się nie działać w systemie OS X. Użyłem czeku z innej odpowiedzi (sudo -n uptime 2>&1|grep "load"|wc -l
) i wydaje się, że działa dobrze w OS X. Nie jest tak elegancki, ale to działa.sudo -n
staje się buggy w sudo -V 1.7.9Aby uprościć odpowiedź udzieloną przez @ wags007
Jeśli jednak w Twojej https://www.sudo.ws/man/1.8.15/sudoers.man.html masz konfigurację,
defaults mail_badpass
za każdy test, który da wynik fałszywy (zostanie wyświetlony monit), zostanie wysłana wiadomość e-mail. Aby uniknąć takich uciążliwości, zmień tę część pliku sudoers naW rezultacie wysyłane są e-maile z ostrzeżeniem dotyczącym bezpieczeństwa dla wszystkich poleceń oprócz / bin / true. Cóż, tak, ktoś może teraz spróbować brutalnie wymusić hasło, dzwoniąc
sudo true
nieograniczoną liczbę razy bez wysyłania wiadomości z ostrzeżeniem bezpieczeństwa.Uwaga: Zawsze używaj
visudo
zamiast ulubionego edytora do edycji pliku sudoers. W przeciwnym razie możesz zostać zablokowany.źródło
Zgodnie z instrukcją sudo sesja sudo jest określana na podstawie pliku znacznika czasu (
/usr/lib/sudo/<username>
), więc możesz dowiedzieć się, ile czasu pozostało, sprawdzając datę / godzinę pliku znacznika czasu. Jednak w moim systemie plik znacznika czasu jest w rzeczywistości katalogiem i są w nim trzy pliki z tajemniczą zawartością (oraz niektóre dziwne znaczniki czasu, ale/usr/lib/sudo/<username>
wydaje się, że mają znacznik czasu, który pokrywa się z czasem, w którym podałem sudo moje hasło) Myślę, że/usr/lib/sudo/<username>/0
ma znacznik czasu ostatniejsudo
egzekucji.źródło
Ostrzeżenie
Zgodnie z Bugzilla sudo Bug ID = 590 wezwanie do
sudo -n true 2&>/dev/null ; echo $?
spowoduje błądsudo -V 1.7.10
Przeczytaj Bugzillę [tutaj] ( http://bugzilla.sudo.ws/show_bug.cgi?id=590 „Bug ID = 590”)
źródło
Przynajmniej w sudo 1.8.21p2 to podejście działa dobrze:
źródło
Jest to prawdopodobnie skrajna nadwyżka w stosunku do standardu większości ludzi, ale tutaj jest (pozornie poprawna) funkcja, której używam do sprawdzania, czy
sudo
jest odblokowana (funkcja nie marnuje czasu, jeśli uruchomi ją użytkownikroot
, ponieważ nie ma potrzeby odblokowywaniasudo
):źródło
prosta odpowiedź ...
źródło
Co powiesz na stronę man
Lista dostępnych poleceń:
samo sudo nie ma ograniczeń czasowych ani datowych ... patrz:
źródło