Як я можу зареєструвати bash команди користувачів?


10

Я запускаю Debian-сервер etch, де користувачі будуть входити (сподіваємось) в'язницю chroot через ssh. Як я можу, щоб команди, які вони виконують, були записані таким чином, щоб вони не могли видалити і не запобігти?


дивіться це запитання serverfault.com/questions/8851/…
hayalci

Відповіді:


11

встановити snoopy . Якщо ви хочете зареєструвати лише одного користувача, виконайте кілька функцій фільтрації системного журналу.


Я хочу зареєструвати кожного користувача.
Мальфіст

Тоді просто встановіть його, воно буде "просто працювати" (TM)
Cian

чи можу я його встановити для входу десь окрім /var/log/auth.log?
Malfist

Він переходить у syslog, тому ви можете відфільтрувати його кудись звідти, iirc. Я тільки коли-небудь робив щось із системою syslog-ng, тому я не маю уявлення про фільтри з звичайним syslog.
Cian

4

Я написав метод для реєстрації всіх команд / вбудованих файлів 'bash' у текстовий файл або на сервері 'syslog', не використовуючи патч або спеціальний виконуваний інструмент.

Розгортати це дуже просто, оскільки це простий оболонка оболонки, яку потрібно викликати один раз при ініціалізації "bash". (просто "джерело" його, наприклад, .bashrc) Він заснований на ідеї використання bash DEBUG пасток. Дивіться також цю публікацію на 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  

див. детально описаний метод тут: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger

вітає Франсуа Шеюрер


2

Ви можете спробувати ttyrpld . Це більше, ніж ви хочете, тому що він запише цілий tty.
Я сам його не використовував, але спосіб його роботи (в ядрі) дозволяє користувачеві не змінювати журнали.


круто, я це перевірю. Якщо це буде добре грати з усім, то це буде те, що мені потрібно. Я можу змінити файли журналів для додавання лише для того, щоб переконатися
Malfist

Cian відповідь за допомогою snoopy здається більше схожою на те, що ви шукаєте.
радіус


-1

Ви можете активувати системний аудит.


1
і як це зробити?
Рорі

Почніть зі сторінок man для аудиту і перейдіть звідти. Це може бути не частиною базової установки Debian, але програма аудиту є компонентом ядра Linux, тому інструменти userland можна встановлювати та використовувати в будь-якому дистрибутиві.
Джефф Фріц

-3

bash зберігає історію команд заданого розміру. Ви, адміністратор, можете встановити цей розмір і легко написати сценарій, який надходить та витягує цю історію на кожного користувача через cron.


1
.bash_history - це для зручності, а не для безпеки. Для цього є ряд причин, не остання з яких полягає в тому, що це редагується користувачем (або принаймні додається).
Метт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.