¿Cómo puedo registrar los comandos bash de los usuarios?

¿Cómo puedo registrar los comandos bash de los usuarios?

Estoy ejecutando un servidor debian etch donde los usuarios iniciarán sesión (con suerte) en una cárcel chroot a través de ssh. ¿Cómo puedo hacer que los comandos que ejecutan se registren de una manera que no puedan eliminarse ni impedirse?

Respuesta1

instalarfisgón. Si solo desea registrar a un usuario, realice un filtrado de syslog.

Respuesta2

Escribí un método para registrar todos los comandos/integrados 'bash' en un archivo de texto o en un servidor 'syslog' sin usar un parche o una herramienta ejecutable especial.

Es muy fácil de implementar, ya que es un script de shell simple que debe llamarse una vez durante la inicialización de 'bash'. (simplemente 'obténgalo' de .bashrc, por ejemplo) Se basa en la idea de usar trampas DEBUG de bash. Ver tambiénesta publicación en 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  

vea el método explicado en detalle aquí: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger

saludos François Scheurer

Respuesta3

Puedes intentarlotyrpld. Es más de lo que desea porque registrará todo el tty.
Yo no lo he usado, pero la forma en que funciona (en el kernel) hace que el usuario no pueda modificar los registros.

Respuesta4

Podría habilitar la auditoría del sistema.

información relacionada