Podgląd na żywo poleceń powłoki Linux wykonywanych przez innego użytkownika?

27

Czy użytkownik root w Linuksie może mieć w czasie rzeczywistym (lub zbliżony do czasu rzeczywistego) widok poleceń powłoki uruchamianych przez innego użytkownika zalogowanego przez terminal lub SSH? Oczywiście są one przechowywane w .bash_history, ale jest to zapisywane tylko wtedy, gdy użytkownik się wylogowuje i można je również wyłączyć.

Edycja: idealnie coś, co można łatwo włączać i wyłączać.

EMP
źródło
ttyrpldbrzmi dobrze. zalecane w tym pytaniu. serverfault.com/questions/40011/…
hayalci

Odpowiedzi:

16

jako root możesz zastąpić ich powłokę prostym skryptem opakowującym, który zarejestrował ich polecenia przed przekazaniem ich do prawdziwej powłoki. Działa to tylko przed zalogowaniem się.

Tim Howland
źródło
20
Zrobiliśmy to, aby monitorować zhakowane konto u poprzedniego pracodawcy. Utworzono „/ bin / bash” (zwróć uwagę na spację), która była opakowaniem wokół polecenia skryptowego. Działa jak urok :)
Komandor Keen
Bardzo mądry! +1
EMP
9

Użyj sniffy, jeśli chcesz włamać się do sesji użytkownika lub screen -xwspółpracujesz.

Pamiętaj jednak, że szpiegowanie użytkowników może podlegać przepisom lub wręcz być nielegalne w zależności od lokalnych przepisów.

David Schmitt
źródło
7

Zmiana powłoki jest bardzo łatwa do obejścia, łatanie samej powłoki jest lepsze, ale musisz załatać wszystkie powłoki. Nasz ulubiony cracker wykorzystuje to, jako bonus, że nie przejmuje się wyłączaniem historii bash.

ssh host /bin/sh -i  

Snoopy jest opakowaniem wokół funkcji exec i rejestruje każdy zewnętrzny plik binarny, który jest wykonywany (nie wbudowane powłoki)

@David Schmitt sugeruje, że wąchanie wykorzystuje lepszą metodę, stukając pseudoterminal.

ttysnoop używa tej samej metody, ale nie jest utrzymywane. (Prawdopodobnie miałem problemy z rejestrowaniem połączeń ssh, nie pamiętam)

Możesz spróbować załatać ssh, aby zarejestrować sesję, ale ta łatka jest stara .

pseudopod i rootsh mogą być używane do rejestrowania legalnych sudos. A shwatcr to kolejna rzecz do monitorowania logowania.

Hayalci
źródło
Co dokładnie ssh host /bin/sh -ima zrobić?
Mike Pennington
+1 za snoopy, nie doskonałe, ale zrobiliśmy to, co potrzebowaliśmy.
skinp
4

Jeśli współpracujesz, możesz używać ekranu GNU między dwoma użytkownikami - jeden z nich ustanowi sesję ekranową, a drugi będzie mógł użyć drugiego screen -x.

Jeśli chcesz, aby root „szpiegował” innych użytkowników bez ich wiedzy, najlepszym i najbardziej wydajnym rozwiązaniem może być oprogramowanie / sprzęt keyloggera.

Tim
źródło
4

Sysdig to potężne narzędzie do eksploracji na poziomie systemu - tego właśnie chcesz;)

przykład:

sysdig -i spy_users

Kategoria: Bezpieczeństwo

spy_users Wyświetla interaktywną aktywność użytkownika

wyświetla każdą komendę uruchamianą interaktywnie przez użytkownika (np. z bash) i każdą wizytę użytkowników katalogu

Andrzej Chabierski
źródło
2

Możesz wypróbować łatkę bash-BOFH. Szukaj łaty.

squillman
źródło
1

Napisałem metodę rejestrowania wszystkich poleceń / wbudowanych „bash” w pliku tekstowym lub na serwerze „syslog” bez użycia łaty lub specjalnego narzędzia wykonywalnego.

Jest bardzo łatwy do wdrożenia, ponieważ jest to prosty skrypt powłoki, który należy wywołać raz podczas inicjowania „bash”.

Zobacz metodę tutaj: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger

Francois Scheurer
źródło
Witaj w Server Fault! Naprawdę wolimy, aby odpowiedzi zawierały treść, a nie wskaźniki do treści. Zapewnia to, że odpowiedź pozostanie dostępna, nawet jeśli łącze przestanie działać. Chociaż teoretycznie może to odpowiedzieć na pytanie, lepiej byłoby zawrzeć tutaj istotne części odpowiedzi i podać odnośnik.
user9517 obsługuje GoFundMonica
Witaj w Server Fault! Prosimy o zapoznanie się z naszym FAQ zwłaszcza May I promowania produktów lub stron internetowych powiązanych ze jestem tutaj? .
user9517 obsługuje GoFundMonica
1
function spy() { 
   ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; 
   /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
        | grep -Poi 'write\(...\"[[:print:]]{1,2}\"[.][.][.][,]..\)' ; 
}

[436] klikevil@epiphany ~ $ w<br>
 09:36:43 up 12:06,  6 users,  load average: 0.46, 0.29, 0.20<br>
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br>
klikevil pts/0    75.125.126.8     23:05    2:19m 10:33   0.18s cmd                                      <br>
klikevil pts/1    75.125.126.8     00:18    6:50m  0.06s  0.04s sshd: klikevil [priv]<br>
klikevil tty7     :0               09:02   17:07m  2:02   0.32s x-session-manager<br>
klikevil pts/2    :0.0             09:03    3:30   0.08s  0.08s bash<br>
klikevil pts/3    :0.0             09:03    0.00s  0.76s  0.00s w<br>
klikevil pts/4    :0.0             09:06    3:13   0.46s  0.00s /bin/sh /usr/bin/thunder<br>
[437] klikevil@epiphany ~ $ spy 2<br>
write(2, "e"..., 1)<br>
write(2, "c"..., 1)<br>
write(2, "h"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "s"..., 1)<br>
write(2, "u"..., 1)<br>
write(2, "p"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "d"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, "g"..., 1)<br>
write(2, "\n"..., 1)<br>
^C<br>

Wygląda na to, że działa całkiem dobrze, jeśli nie przeszkadza ci sortowanie wielu podziałów linii.

Jessica Parker
źródło
1

Snoopy jest przeznaczony do lekkiego rejestrowania poleceń.

Jeśli chcesz podgląd na żywo poleceń wykonywanych w systemie, może to być to. Ostrzeżenie: snoopy nie jest właściwym rozwiązaniem audytu i można go łatwo obejść.

Jeśli jednak chcesz zobaczyć każdą postać wpisaną w terminalu, będziesz musiał użyć innego narzędzia.

Ujawnienie: Jestem obecnym opiekunem snoopy.

Bostjan Skufca
źródło
-3

spróbuj tego eksportu HISTTIMEFORMAT = „% T” uruchom kilka poleceń i „historię” później ...

masber
źródło