Ich verwende einen Debian-Ätzserver, auf dem sich Benutzer (hoffentlich) über ssh in ein Chroot-Gefängnis einloggen. Wie kann ich die von ihnen ausgeführten Befehle so protokollieren lassen, dass sie weder gelöscht noch verhindert werden können?
Ich verwende einen Debian-Ätzserver, auf dem sich Benutzer (hoffentlich) über ssh in ein Chroot-Gefängnis einloggen. Wie kann ich die von ihnen ausgeführten Befehle so protokollieren lassen, dass sie weder gelöscht noch verhindert werden können?
Antworten:
installiere snoopy . Wenn Sie nur einen Benutzer protokollieren möchten, führen Sie eine Syslog-Filterung durch.
Ich habe eine Methode geschrieben, um alle 'bash'-Befehle / eingebauten' in eine Textdatei oder einen 'syslog'-Server zu protokollieren, ohne einen Patch oder ein spezielles ausführbares Tool zu verwenden.
Die Bereitstellung ist sehr einfach, da es sich um ein einfaches Shellscript handelt, das bei der Initialisierung der 'Bash' einmal aufgerufen werden muss. (nur 'Quelle' von .bashrc zum Beispiel) Es basiert auf der Idee, Bash-DEBUG-Traps zu verwenden. Siehe auch diesen Beitrag auf 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
Weitere Informationen finden Sie hier: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger
Prost Francois Scheurer
Sie können ttyrpld versuchen . Es ist mehr als Sie wollen, weil es die ganze tty protokolliert.
Ich habe es selbst nicht verwendet, aber aufgrund der Funktionsweise (im Kernel) kann der Benutzer die Protokolle nicht ändern.
Verwenden Sie einen mit grsecurity gepatchten Kernel. Genau für diesen Zweck gibt es eine Kernel-Option.
Sie können die Systemüberwachung aktivieren.
bash behält einen Befehlsverlauf einer bestimmten Größe bei. Sie als Administrator können diese Größe festlegen und einfach ein Skript schreiben, das diesen Verlauf pro Benutzer über cron abruft.