Как я могу регистрировать пользовательские команды bash?
10
Я использую сервер Debian etch, где пользователи будут входить (надеюсь) в chroot-тюрьму через ssh. Как я могу записать команды, которые они выполняют, таким образом, что они не могут ни удалить, ни предотвратить?
Затем просто установите его, он будет «просто работать» (ТМ)
Cian
я могу установить его для входа где-нибудь кроме /var/log/auth.log?
Малфист
Он идет в системный журнал, так что вы можете отфильтровать его оттуда, 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
Вы можете попробовать ttyrpld . Это больше, чем вы хотите, потому что будет записывать весь TTY.
Я не использовал его сам, но то, как он работает (в ядре), позволяет пользователю не изменять журналы.
круто, я проверю это. Если со всем будет хорошо, это будет то, что мне нужно. Я могу изменить его лог-файлы на добавление только для того, чтобы убедиться
Malfist
Ответ Cian с использованием Snoopy больше похож на то, что вы ищете.
радиус
0
Используйте исправленное ядро grsecurity . Для этого есть опция ядра.
Начните с man-страниц для audd и перейдите оттуда. Возможно, он не является частью базовой установки Debian, но средство аудита является компонентом ядра Linux, поэтому инструменты пользовательского интерфейса могут быть установлены и использованы в любом дистрибутиве.
Джефф Фриц
-3
bash хранит историю команд указанного размера. Администратор может установить этот размер и легко написать скрипт, который отправляет и извлекает эту историю для каждого пользователя через cron.
.bash_history для удобства, а не для безопасности. Для этого есть ряд причин, не последним из которых является то, что он редактируется пользователем (или, по крайней мере, добавляется).
Ответы:
установить Snoopy . Если вы хотите авторизовать только одного пользователя, выполните некоторую фильтрацию системного журнала.
источник
Я написал метод для записи всех команд / встроенных команд bash в текстовый файл или сервер 'syslog' без использования патча или специального исполняемого инструмента.
Его очень легко развернуть, поскольку это простой сценарий оболочки, который нужно вызывать один раз при инициализации bash. (просто 'источник' его из .bashrc, например). Он основан на идее использования ловушек bash DEBUG. Смотрите также этот пост на superuser.com
см. метод, подробно описанный здесь: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger
ура Франсуа Шойрер
источник
Вы можете попробовать ttyrpld . Это больше, чем вы хотите, потому что будет записывать весь TTY.
Я не использовал его сам, но то, как он работает (в ядре), позволяет пользователю не изменять журналы.
источник
Используйте исправленное ядро grsecurity . Для этого есть опция ядра.
источник
Вы можете включить аудит системы.
источник
bash хранит историю команд указанного размера. Администратор может установить этот размер и легко написать скрипт, который отправляет и извлекает эту историю для каждого пользователя через cron.
источник