私はユーザーがsshを介してchroot jailに(うまくいけば)ログインするdebian etchサーバーを実行しています。実行するコマンドを、削除も防止もできない方法でログに記録するにはどうすればよいですか?
インストール スヌーピー 。 1人のユーザーのみをログに記録したい場合は、syslogフィルタリングfuを実行します。
パッチや特別な実行可能ツールを使用せずに、すべての「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
乾杯フランソワ・シューラー
ttyrpld を試してみてください。 tty全体をログに記録するため、必要以上に多くなります。
私自身は使用していませんが、(カーネルでの)動作により、ユーザーはログを変更できません。
システム監査を有効にすることができます。
grsecurity パッチを適用したカーネルを使用します。まさにこの目的のためのカーネルオプションがあります。