Korzystam z serwera debian etch, na którym użytkownicy będą logować się (mam nadzieję) do więzienia chroot przez ssh. Jak mogę zarejestrować polecenia, które wykonują, w sposób uniemożliwiający ich usunięcia lub uniemożliwienia?
Więc po prostu zainstaluj, to „po prostu zadziała” (TM)
Cian
czy mogę ustawić rejestrowanie w innym miejscu niż /var/log/auth.log?
Malfist
Przechodzi do syslog, więc możesz go filtrować do dowolnego miejsca stamtąd, iirc. Nigdy nie robiłem nic z syslog-ng, więc obawiam się, że nie mam pojęcia o filtrach z regularnym syslog.
Cian,
4
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 przy inicjalizacji „bash”. (po prostu „źródło” na przykład z .bashrc). Opiera się na pomyśle użycia pułapek DEBUG bash. Zobacz także ten post na superuser.com
declare -rx HISTCONTROL="" #does not ignore spaces or duplicates
declare -rx HISTIGNORE="" #does not ignore patterns
declare -rx AUDIT_LOGINUSER="$(who -mu | awk '{print $1}')"
declare -rx AUDIT_LOGINPID="$(who -mu | awk '{print $6}')"
declare -rx AUDIT_USER="$USER" #defined by pam during su/sudo
declare -rx AUDIT_PID="$$"
declare -rx AUDIT_TTY="$(who -mu | awk '{print $2}')"
declare -rx AUDIT_SSH="$([ -n "$SSH_CONNECTION" ] && echo "$SSH_CONNECTION" | awk '{print $1":"$2"->"$3":"$4}')"
declare -rx AUDIT_STR="[audit $AUDIT_LOGINUSER/$AUDIT_LOGINPID as $AUDIT_USER/$AUDIT_PID on $AUDIT_TTY/$AUDIT_SSH]"
set +o functrace #disable trap DEBUG inherited in functions, command substitutions or subshells, normally the default setting already
shopt -s extglob #enable extended pattern matching operators
function audit_DEBUG() {
if [ "$BASH_COMMAND" != "$PROMPT_COMMAND" ] #avoid logging unexecuted commands after 'ctrl-c or 'empty+enter'
then
local AUDIT_CMD="$(history 1)" #current history command
if ! logger -p user.info -t "$AUDIT_STR $PWD" "${AUDIT_CMD##*( )?(+([0-9])[^0-9])*( )}"
then
echo error "$AUDIT_STR $PWD" "${AUDIT_CMD##*( )?(+([0-9])[^0-9])*( )}"
fi
fi
}
function audit_EXIT() {
local AUDIT_STATUS="$?"
logger -p user.info -t "$AUDIT_STR" "#=== bash session ended. ==="
exit "$AUDIT_STATUS"
}
declare -fr +t audit_DEBUG
declare -fr +t audit_EXIT
logger -p user.info -t "$AUDIT_STR" "#=== New bash session started. ===" #audit the session openning
#when a bash command is executed it launches first the audit_DEBUG(),
#then the trap DEBUG is disabled to avoid a useless rerun of audit_DEBUG() during the execution of pipes-commands;
#at the end, when the prompt is displayed, re-enable the trap DEBUG
declare -rx PROMPT_COMMAND="trap 'audit_DEBUG; trap DEBUG' DEBUG"
declare -rx BASH_COMMAND #current command executed by user or a trap
declare -rx SHELLOPT #shell options, like functrace
trap audit_EXIT EXIT
Możesz spróbować ttyrpld . To więcej niż chcesz, ponieważ rejestruje cały tty.
Sam go nie używałem, ale sposób, w jaki działa (w jądrze) sprawia, że użytkownik nie może zmieniać dzienników.
Zacznij od stron podręcznika dla auditd i stamtąd. Może nie być częścią podstawowej instalacji Debiana, ale narzędziem kontroli jest jądro Linuksa, więc narzędzia użytkownika można instalować i wykorzystywać w dowolnej dystrybucji.
Geoff Fritz
-3
bash przechowuje historię poleceń o określonym rozmiarze. Ty, administrator, możesz ustawić ten rozmiar i łatwo napisać skrypt, który przechodzi i pobiera tę historię na użytkownika za pośrednictwem crona.
.bash_history jest dla wygody, a nie dla bezpieczeństwa. Istnieje wiele powodów, z których nie mniej ważne jest to, że można go edytować (lub przynajmniej dołączać).
Odpowiedzi:
zainstaluj snoopy . Jeśli chcesz zalogować tylko jednego użytkownika, wykonaj fu filtrowania syslog.
źródło
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 przy inicjalizacji „bash”. (po prostu „źródło” na przykład z .bashrc). Opiera się na pomyśle użycia pułapek DEBUG bash. Zobacz także ten post na superuser.com
zobacz opisaną szczegółowo metodę: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger
na zdrowie Francois Scheurer
źródło
Możesz spróbować ttyrpld . To więcej niż chcesz, ponieważ rejestruje cały tty.
Sam go nie używałem, ale sposób, w jaki działa (w jądrze) sprawia, że użytkownik nie może zmieniać dzienników.
źródło
Użyj łatanego jądra grsecurity . W tym celu istnieje opcja jądra.
źródło
Możesz włączyć kontrolę systemu.
źródło
bash przechowuje historię poleceń o określonym rozmiarze. Ty, administrator, możesz ustawić ten rozmiar i łatwo napisać skrypt, który przechodzi i pobiera tę historię na użytkownika za pośrednictwem crona.
źródło