Pracuję nad skryptem, który uruchamia polecenie jako sudo i wyświetla wiersz tekstu TYLKO, jeśli upłynęły limity czasu moich uprawnień sudo, więc tylko wtedy, gdy uruchomienie polecenia z sudo wymagałoby od mojego użytkownika (nie roota) ponownego wpisania hasła.
Jak to zweryfikować? Pamiętaj, że $(id -u)
nawet podczas działania jako sudo zwróci mój bieżący identyfikator użytkownika, aby nie można było sprawdzić, czy pasuje do 0 ...
Potrzebuję metody, która sprawdziłaby to po cichu.
sudo -n true
i faktycznym ich użyciem”: Dokumentacja jest nieco niejasna w tym punkcie, ale myślę, że uruchomieniesudo
polecenia, nawet po prostusudo -n true
, ponownie ustawi limit czasu zegar. Tak czy inaczej,-v
jest to wyraźnie udokumentowane isudo -n -v
prawdopodobnie jest bardziej odpowiednie niżsudo -n true
do tego celu.hostname sudo[8870]: username : a password is required ; TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/usr/bin/true
. Jeśli użyjesz go np. W monicie bash, spowoduje to pojawienie się wielu komunikatów o błędach.Biegać:
Jeśli twoje uprawnienia sudo wygasły, nastąpi koniec z kodem wyjścia 1 i wyjście:
Jeśli masz poprawne poświadczenia zapisane w pamięci podręcznej, to polecenie się powiedzie i nic nie wyświetli.
Podsumowując, oto skryptlet, który po cichu sprawdzi, czy masz poprawne poświadczenia w pamięci podręcznej:
Jak wspomniano w innych odpowiedziach / komentarzach,
-v
opcja („sprawdzanie poprawności”) sudo po cichu odnawia buforowane poświadczenia, jeśli istnieją jakieś monity o uwierzytelnienie w celu wygenerowania buforowanych poświadczeń, a-n
opcja („nieinteraktywna”) zapobiega generowaniu sudo wszelkie interaktywne monity, takie jak monit o uwierzytelnienie.źródło
sudo -nv
działa dobrze, ale zanieczyszcza logi systemowe błędami sudo i informacjami uwierzytelniającymi pam. Musiałem sprawdzić uprawnienia sudo pod kątem mojego polecenia bash, więc było ono wykonywane dość często, a moje logi składały się prawie wyłącznie z tego hałasu.Możliwe jest bezpośrednie parsowanie pliku znacznika czasu sudo - napisałem dla niego małe C:
źródło