41111111111Rating 4.00 (1 Vote)

Логированием вводимых команд в Linux терминале можно преследовать ряд целей, например отправка такого рода логов на syslog сервер, для аудита, исторической хронологии... Типичная ситуация - на одном сервере работает несколько админов, программеров, просто людей. Все эти люди выполняют различные команды, что-то делают, а потом с удивленным лицом говорят - я этого не делал :)

Включение логирования

Логирование вводимых команд можно настроить индивидуально для каждого пользователя в файле ~/.bash_profile или глобально для всех в файле /etc/profile, для этого достаточно поместить в файл настроек профиля скрипт (допустим это файл настроек конкретного пользователя ~/.bash_profile)

# Determine remote user IP
IP=$(who am i | awk '{ print $5 }' | sed 's/(//g' | sed 's/)//g')
# Put to log logged user notiify
logger -p local7.notice -t "bash $LOGNAME $$" User $LOGNAME logged from $IP
# Prefix for messages filtering (if messages logged to /var/log/messages)
PREF="usrlog"

# Logger
function h2log
{
  declare CMD
  declare _PWD
  CMD=$(history 1)
  CMD=$(echo $CMD |awk '{print substr($0,length($1)+2)}')
  _PWD=$(pwd)
  if [ "$CMD" != "$pCMD" ]; then
   logger -p local7.notice -t bash -i -- "${PREF} : SESSION=$$ : ${IP} : ${USER} : ${_PWD} : ${CMD}"
  fi
  pCMD=$CMD
}
trap h2log DEBUG || EXIT

Далее необходимо добавить строку с указанием в какой файл сливать логи в настройках rsyslog.conf (ниже регулярка):

sed -i '/log\/boot.log/a local7.notice /var/log/users.log' /etc/rsyslog.conf

Перезапустить rsyslog:

systemctl restart rsyslog

Применить параметры профиля к пользователю:

. ~/.bash_profile

Отключение логов в messages

Логи будут собираться и в users.log и messages, для отключения дублирования логов в messages достаточно добавить / изменить в rsyslog.conf параметр исключения для local7.notice в найстроках messages (я использую регулярку):

sed -i 's/cron.none\b/&;local7.!notice/' /etc/rsyslog.conf

Ротация логов

Для ротации с годовым интервалом /размером в 100Мб положим файл users в /etc/logrotate.d с параметрами:

/var/log/users.log {
  yearly
  rotate 10
  size 100M
  compress
  missingok
}

Результат

Теперь смотрим как выглядит итоговый результат:

...User root logged from xxx.xxx.xx.x
...xxx.xxx.xx.x : root : /root : 11/01/19 19:58:38 exit
...xxx.xxx.xx.x : root : /root : 11/01/19 19:59:00 echo "Hello from Sys-Adm.in"
...xxx.xxx.xx.x : root : /root : 11/01/19 19:59:11 cat /var/log/users.log

 

Добавить комментарий


Защитный код
Обновить

Сейчас 293 гостей и ни одного зарегистрированного пользователя на сайте

Вверх
Вниз