Chciałbym uchwycić wszystkie polecenia napisane w systemie Unix/Linux przez dowolnego użytkownika. Istnieje kilka alternatyw, takich jak użycie polecenia skryptu lub narzędzia acct. Ale problem z nimi polega na tym, że odrzucają wszystko od terminala do pliku lub po prostu dostarczają podsumowanie poleceń. Szukam narzędzia, w którym dostarczy mi wszystkie polecenia wpisane przez dowolnego użytkownika z argumentami dla poleceń. Czy to możliwe? Czy istnieją jakieś alternatywy, takie jak wykonywanie haka w wywołaniach systemowych, aby to uzyskać?Jak przechwycić wszystkie polecenia napisane w systemie Unix/Linux przez dowolnego użytkownika?
Odpowiedz
Wydaje się, że istnieje całkiem dobry artykuł na temat kontroli powłoki pod numerem http://administratosphere.wordpress.com/2011/05/20/logging-every-shell-command/.
Uwzględnia takie elementy, jak niezawodność plików historii użytkownika (i dostarcza informacji na temat poprawy tego stanu), ale omawia także jawne funkcje inspekcji wbudowane w powłoki. Możliwe, że jakiekolwiek środowisko, z którego korzystasz, nie ma powłok skompilowanych z włączonymi opcjami inspekcji, ale jeśli masz dostępne źródło i konfigurację dla twoich kompilacji (tak jak zrobiłbyś to przynajmniej dla każdej dystrybucji Linuksa), to nie powinno. • zbyt trudne jest włączenie funkcji audytu przy zachowaniu reszty konfiguracji, ponieważ znajduje się ona w domyślnej dystrybucji.
To, co jeszcze pozostało do otwarcia, to polecenia wykonywane przez inne polecenia - lub funkcje systemu operacyjnego wywoływane z poziomu jakiegoś programu. Tak więc, np. jeśli masz perla lub inny interpreter języka programowania dostępny na maszynie, podczas gdy możesz kontrolować wykonanie perla, nie możesz powiedzieć tego, co użytkownik powiedział do interpretera perla. Z drugiej strony, nawet przy inspekcji powłoki, nie jestem pewien, czy wykonanie perl będzie widoczne, jeśli zostało wykonane, np. z poziomu edytora (np. vi) jako filtr do przetworzenia tego, co zostało napisane w edytorze.
Tak więc, podczas gdy inspekcja powłoki zapewni jedną warstwę kontroli, wzmocnienie nie jest zbyt duże, chyba że środowisko jest naprawdę zaostrzone względem innych ścieżek wykonywania niż powłoka.
Należy rozważyć, czy użytkownicy, którzy mają być poddani audytowi, faktycznie potrzebują dostępu do powłoki, a jeśli nie, powinni zapewnić im coś bardziej ograniczonego, z możliwością audytu. Może mały system menu oparty na tekście?
Grab /home/victim/.bash_history
lub /home/victim/.config/fish/fish_history
To pozwoli Ci zobaczyć wszystkie polecenia bash i skorupiaków z argumentami, że ws wprowadzonych przez użytkownika.
Twórca pytań wyraźnie chciał NIE używać historii. –
Najprostszym sposobem, aby rozwiązać ten problem, to jeśli korzeń i w stanie zmienić system plików przez przekierowanie samej konsoli w ten sposób:
Jeśli używasz na przykład /bin/sh
jako domyślny konsoli, przenieść go do /bin/hs
i utworzyć plik takiego pod /bin/sh
:
#!/bin/hs
ORIGSHELL=/bin/hs
LOGFILE=/var/log/whatyoulike
OPTIONS="[email protected]"
USER=`whoami`
WEBUSER=web
WILD=NO
WARN=NO
if [ "$USER" = "$WEBUSER" ]
then
#Ok then - are we doing something wild?
for ARG in [email protected]
do
case "$ARG" in
*\/lynx)
WILD=YES
;;
*\/wget)
WILD=YES
WARN=YES
;;
*\/curl)
WILD=YES
WARN=YES
;;
*\/links)
WILD=YES
WARN=YES
;;
*\/fetch)
WILD=YES
WARN=YES
;;
esac
done
#Are we wild?
if [ "$WILD" = "YES" ]
then
HOST=`hostname`
IPADDR=`resolveip -s $HOST`
NETSTAT=`/usr/bin/nighthawk -ape --numeric-hosts --numeric-ports --tcp | grep 'ESTABLISHED web'`
# Log it.
echo "`date` [$USER] $IPADDR "[email protected]"" >> $LOGFILE
echo "$NETSTAT" >> $LOGFILE
fi
#Are we REALLY wild?
if [ "$WARN" = "YES" ]
then
# Mail it!
mail -s 'HACKATTACK' [email protected] < $LOGFILE &
fi
fi
# Now, do it.
exec $OPERATION "[email protected]"
#we never come here...
exit 0
Jest to tylko przykład, w jaki sposób może być wykorzystywane do śledzenia wszystkiego przejrzysty. Możesz zrobić to, co chcesz, aby sprawdzić dane wejściowe. Powyższy skrypt służy do znajdowania nawet twórcy bieżącej powłoki, dzięki czemu można na nią reagować. Oczywiście powyższe sprawdzenia nie są tymi, których naprawdę używamy;) - ale dobra próbka.
nadzieję, że to pomaga, Jimmy
To wygląda na bardzo niebezpieczny pomysł, ponieważ zastępuje powłokę systemu. –
Grab źródłem bash. Dodaj rejestrator wokół wywołania exec. Skompiluj to. Uruchom to jako pierwsze polecenie po zalogowaniu.
Wszystko inne naprawdę chce mocy root.
Wiem, że to jest stare, ale myślę, że polecenie skryptu może być tym, czego szukał?
> script my_output_file
Script started, file is my_output_file
http://www-users.cs.umn.edu/~gini/1901-07s/files/script.html
Nie jest umożliwienie kontroli, nagrywanie tty, hacki i darmowe narzędzia do tego, co chcesz, jednak, w zależności od skali środowisku jesteś stara się kontrolować, może być lepiej za pomocą zarówno Audit, jak i produktów skoncentrowanych na radzeniu sobie z wyzwaniem, któremu chcesz sprostać. Niektóre dość popularne, używane na kilku klientów usług finansowych [Observe-IT, Centrify i PowerBroker
Nadzieja to pomaga
Można użyć Snoopy Logger
Co to jest: prosta biblioteka, która wstawia pomiędzy procesami a execv/e() dzięki wstępnemu załadowaniu LD. Loguje wszystkie wykonane polecenia do syslog.
Co to jest: Rozwiązanie bezpieczeństwa/audytu - można go łatwo obejść. Nie rejestruje wbudowanych poleceń powłoki (ponieważ są one wewnętrzne i po wywołaniu, powłoka nie tworzy nowego procesu - na przykład echo vs/bin/echo).
Ujawnienie: obecny opiekun snoopy tutaj.
Do sporadycznego nagrywania zwykle uruchamiam
ssh localhost | tee - zarejestrowana sesja.log
Działa to całkiem dobrze.
- 1. Jak przechwycić wszystkie zdarzenia dotyku?
- 2. Polecenia powłoki są napisane w jakim języku?
- 3. Jak przechwycić wszystkie wyjątki w kolbie?
- 4. Jak przechwycić stderr z lokalnego polecenia Fabric?
- 5. Jak przechwycić wejście klawiatury na najniższym poziomie w systemie Linux?
- 6. Github API: Jak zdobyć wszystkie repozytoria napisane w danym języku?
- 7. Usuń wszystkie pliki utworzone przez określonego użytkownika
- 8. Lista wszystkich zmiennych zdefiniowanych przez użytkownika w systemie
- 9. Jak mogę przechwycić wartość zwracaną przez shutil.copy() w Pythonie (w systemie DOS)?
- 10. Jak przechwycić naciśnięcia przycisków w zestawie słuchawkowym w systemie Android?
- 11. Jak przechwycić wszystkie zdarzenia myszy w JFrame/Swing?
- 12. Jak mogę przechwycić wszystkie wyjątki w aplikacji na iPhone'a
- 13. Jak przechwycić wszystkie wywołania metod w usłudze WCF .svc?
- 14. github: Jak usunąć wszystkie zatwierdzenia przez określoną nazwę użytkownika?
- 15. Jak uzyskać miniatury z dowolnego adresu URL w systemie iOS?
- 16. Mają przelotkę zaznacz wszystkie błędnie napisane słowa, nawet te, które nie zostały napisane podczas bieżącej sesji
- 17. Jak uzyskać nazwę użytkownika procesu przez PID w systemie Mac OS?
- 18. Jak zapobiec kradzieży okien emacsa przez polecenia?
- 19. Jak pobierać dane takie jak rozmiar wyjściowy i zapisy napisane w interfejsie użytkownika Spark?
- 20. Jak mogę przechodzić przez wszystkie trasy?
- 21. Jak można uciec z dowolnego ciągu znaków, aby użyć go jako argument wiersza polecenia w systemie Windows?
- 22. Jak przechwycić sygnał w QML?
- 23. jak przechwycić traceback w geenie
- 24. Zapobieganie wykonywaniu kodu przez użytkownika
- 25. Jak iterować przez wszystkie podektory w wektorze?
- 26. Jak przechwycić kliknięcie łącza w TextView?
- 27. Jak przechwycić wywołania metody instancji?
- 28. Wprowadzane przez użytkownika w messageDialog box
- 29. Jak jest napisane TypeScript 100.0% w TypeScript?
- 30. Jakieś IDE PHP napisane w C?
Czy historia powłoki jest realną opcją? – wei2912
Nie chcę używać historii dostarczonej przez bash lub jakąkolwiek inną powłokę. – vinayag
Doskonała odpowiedź na: http://serverfault.com/questions/470755/log-all-commands-run-by-admins-on-production-servers – IvanD