Para esto hay varias formas de resolverlo
En centos 7 tenermos el siguiente comando (variable)
[root@localhost ~]# shopt -s syslog_history
paradeshabilitara
podemos usar : useshopt -u syslog_history
-
Para hacer el cambio persistente en todas las sesiones de bash es necesario agregar al final del archivo
/etc/bashrc
file:shopt -s syslog_history
Hay otro método para copiar todos los comandos ejecutados por los usuarios a
syslog
.La cual es utilizar "trap" como parte de la programación de bash, personalmente es mi metodo preferido
- Hay que agregar las siguientes lineas ya sea en el
bash profile; ~/.bash_profile
y/o en/etc/profile
para que sea de forma global, personalmente lo realice cree el archivo dentro en /etc/profile.d/user-activity.sh a manera de script y se agregan las siguentes lineas:
PORT=`who am i | awk '{ print $5 }' | sed 's/(//g' | sed 's/)//g'`
logger -p local7.notice -t "bash $LOGNAME $$" User $LOGNAME logged from $PORT
function history_to_syslog
{
declare cmd
declare p_dir
declare LOG_NAME
cmd=$(history 1)
cmd=$(echo $cmd |awk '{print substr($0,length($1)+2)}')
p_dir=$(pwd)
LOG_NAME=$(echo $LOGNAME)
if [ "$cmd" != "$old_command" ]; then
logger -p local7.notice -- SESSION = $$, from_remote_host = $PORT, USER = $LOG_NAME, PWD = $p_dir, CMD = "${cmd}"
fi
old_command=$cmd
}
trap history_to_syslog DEBUG || EXIT
o
bien otra forma seria la siguiente donde cambia el orden de los eventos
function bash_syslog { declare COMMAND declare HOSTNAME declare IP_ADDR COMMAND=\$(fc -ln -0) HOSTNAME=\$(hostname) IP_ADDR=\$(ip addr show | grep "inet " | grep -v 127.0.0. | head -1 | cut -d" " -f6 | cut -d/ -f1) logger -p local4.info -t
-i -- "\$HOSTNAME:\$IP_ADDR:\${USER}:\${SUDO_USER}:\${COMMAND}" } trap
bash_syslog
bash_syslog
DEBUG
un nuevo proceso
por cada comando que se ejecute por lo cual pudiera afectar ligeramente el perfomance del servidor, para salvar el log messages
en un archivo de log particular , agregaremos la siguiente linea en /etc/syslog.conf (para RHEL4/5)
o /etc/rsyslog.conf (para RHEL6)
:local7.notice /var/log/cmd.log
- Esto tambien manda a log todos los comandos a
/var/log/messages
. - To para evitar que los comandos se vayan a
/var/log/messages
, agrega la siguiente linea a /etc/syslog.conf(para RHEL4/5)
or /etc/rsyslog.conf(para RHEL6/7)
:
*.info;mail.none;authpriv.none;cron.none;local7.!notice /var/log/messages
-
esto evitara que los mensajes con prioridad
notice
o mas altar se vayan al log/var/log/messages
.
# service syslog restart
- Centos 6
# service rsyslog restart
articulo original y traducido de :
https://access.redhat.com/solutions/20707
license GPL