Googlowałem trochę temu i zauważyłem kilka sposobów, ale domyślam się, że Google nie wie wszystkiego. Jak więc wykopać użytkowników z twojego Linuxa? także w jaki sposób widzisz, że są zalogowani? i powiązane ... czy twoja metoda działa, jeśli użytkownik jest zalogowany do X11 DE (nie jest to wymóg, jestem po prostu ciekawy)?
users
administration
ksenoterracid
źródło
źródło
who(1)
lubw(1)
. Jedynym niezawodnym sposobem na pozbycie się wszelkich potencjalnych rootkitów, które mogą być zainstalowane, jest całkowite wyczyszczenie i ponowna instalacja systemu.Odpowiedzi:
Jest prawdopodobnie łatwiejszy sposób, ale robię to:
Sprawdź, kto jest zalogowany na twoim komputerze - użyj
who
lubw
:Sprawdź identyfikator procesu powłoki, do której jest podłączony TTY:
Śmiej się z ich zbliżającego się rozłączenia (ten krok jest opcjonalny, ale zachęcany)
Zabij odpowiedni proces:
Właśnie odkryłem można łączyć kroki 1 i 2, dając
who
w-u
banderą; PID to liczba po prawej stronie:źródło
kill -9
co? Naprawdę jesteś w trybie BOFH na tym.kill -9
i zacznij od łagodniejszych sygnałów , ale przypuszczam, że w tym kontekście nie ma to większego znaczenia. Po prostu zostawiam komentarz na wypadek, gdyby ludzie przegapili dowcip.Jak już wskazał Micheal, możesz
who
dowiedzieć się, kto jest zalogowany. Jeśli jednak ma wiele procesów, istnieje wygodniejszy sposób niż zabijanie każdego procesu osobno: możesz użyćkillall -u username
do zabicia wszystkich procesów przez tego użytkownika.źródło
killall
będzie również nieco bardziej odpowiednie w środowiskach graficznych, ponieważ do zabicia jest coś więcej niż tylko powłoka.Nekromancja!
Doceniam humor przyjętej odpowiedzi, ale profesjonalnie nie mogę jej popierać.
Najbardziej wdzięczną metodą, jaką znam, jest wysłanie -HUP do powłoki w celu symulacji zawieszenia użytkownika. Możesz wysłać to do bezczynnego sshd użytkownika, aby zasymulować utratę połączenia, co wyzwala czyszczenie całego środowiska powłoki (w tym powłok potomnych), lub wysłać do określonych zagnieżdżonych powłok (powiedzmy, tych ustawionych wewnątrz odłączonego multipleksera terminali, który powstrzymują Cię przed odmontowaniem systemu plików), jeśli chcesz być bardzo precyzyjny.
Korzystanie
write
z wysyłania wiadomości do terminali bezczynnie przed uruchomieniem komputera to jednak fajne hobby.źródło
echo "Hasta la vista, baby" | write user_name pty_name && sleep 30 && killall -u user_name -HUP
(sen daje użytkownikowi możliwość zapisania i wylogowania, ale prawdopodobnie używasz tego tylko dla użytkownika, który i tak zapomniał się wylogować)Wyloguj użytkownika „nazwa użytkownika”:
Widzieć
man skill
źródło
Inne przydatne polecenie jest
pkill
tutajpkill -u username && pkill -9 -u username
.killall
mają tę wadę, że w Solaris IIRC oznacza to coś zupełnie innego -pkill
mają też nieco bardziej zaawansowane opcje.źródło
Przede wszystkim oznacza to większy problem. Jeśli masz użytkowników, którym nie ufasz w systemie, prawdopodobnie powinieneś go wyrównać i ponownie zobrazować.
Mając to na uwadze, możesz wykonać niektóre lub wszystkie z następujących czynności:
źródło
you have users that you don't trust on your system
... Lub może być tak, że zabijasz jednego jako wiadomość dla innych. W końcu, czy wyznanie sysadmina nie brzmi „Lepiej się bać niż być kochanym”? Pomijając wszystkie dowcipy, Machiavelli powinien napisać książkę O'Reilly.Rozejrzałem się dookoła i nie znalazłem ani jednego skryptu automatyzującego to zadanie.
Tak więc, w oparciu o zaproponowane tutaj rozwiązania, zmiksowałem wszystko w interaktywnym skrypcie Bash, który zawiera listę użytkowników i sesji, z
who -u
których użytkownik może wybrać, co ma robić.Następnie możesz:
killall -u <username> -HUP
kill <PID>
Wszystkie wymagane informacje pochodzą z,
who -u
a następnie są analizowane przy użyciumapfile
iawk
.Dodam możliwość wysłania wiadomości za pomocą
write
później (rozwiązywanie procesu z opóźnieniem).Prawdopodobnie dodam również opcję zabicia określonej sesji
kill -9
. Ale nie miałem problemów z sprawiedliwymikill
i jak wskazali inni,kill -9
należy unikać, jeśli to możliwe.Możesz sprawdzić kod na github, jeśli chcesz go wypróbować lub dowiedzieć się więcej o tym, jak to robię w sposób zautomatyzowany:
źródło
Ostatecznie sprowadza się to do identyfikacji i zakończenia procesów, które są własnością, są powiązane lub odradzają się na podstawie identyfikatora użytkownika. Jakiekolwiek polecenia użyjesz do osiągnięcia tego celu, niekoniecznie ma to znaczenie, dopóki tam dotrzesz.
Zasadniczo dwie odpowiedzi ...
Opcja A: spowodowanie wylogowania wspomnianego użytkownika, dla którego zawsze i bez względu na liczbę loginów. Oznaczałoby to więc identyfikację procesów, które są własnością użytkownika, identyfikowalne przez użytkownika i sklasyfikowane jako część procesu logowania dla danej dystrybucji Linuksa, którą prowadzisz. Zdaj sobie sprawę, że istnieją procesy nadrzędne, takie jak SSH lub VNC przed „logowaniem”, a procesy podrzędne, takie jak GDM po „logowaniu”. Zwykle zabicie procesu nadrzędnego zabije proces podrzędny, ale nie zawsze. Więc chcesz zabić te inne procesy, które oczywiście nie są już potrzebne po wylogowaniu. Robiąc to wszystko, utrzymałoby to działanie zadań w tle ... ponieważ jest to łagodny użytkownik i może po prostu chcesz je wylogować. O ile wiem
/usr/bin/w
i/usr/bin/who
poinformuję, kto przeszedł przez proces logowania.opcja B: całkowite zakończenie wszystkich procesów należących do określonego identyfikatora użytkownika, co oznaczałoby po prostu zabicie wszystkich procesów należących do tego użytkownika, to również wylogowałoby je, jeśli są zalogowane. Spowodowałoby to usunięcie ich z systemu . To musi być tylko proste,
ps -ef | grep <uid>
a następnie zakończenie wszystkich tych procesów w dowolny możliwy sposób.fwiw w SLES 11 zgłasza
kill -9
FTW!źródło
Moim zdaniem nie jest zbyt użyteczny,
killall -u username
ponieważ jeśli jest to ten sam użytkownik co Ty, zaczniesz się. Tak więckill
proces będzie lepszym rozwiązaniem.źródło
To polecenie działało świetnie dla GUI, mój „znaczący” odmawia wylogowania się z ...
Niektóre urozmaicenia, jeśli będziesz ich potrzebować.
źródło