Tôi đang chạy một máy chủ debian etch nơi người dùng sẽ đăng nhập (hy vọng) một nhà tù chroot thông qua ssh. Làm thế nào tôi có thể có các lệnh họ thực hiện được đăng nhập theo cách họ không thể xóa, cũng không thể ngăn chặn?
Tôi đang chạy một máy chủ debian etch nơi người dùng sẽ đăng nhập (hy vọng) một nhà tù chroot thông qua ssh. Làm thế nào tôi có thể có các lệnh họ thực hiện được đăng nhập theo cách họ không thể xóa, cũng không thể ngăn chặn?
Câu trả lời:
cài đặt snoopy . Nếu bạn chỉ muốn đăng nhập một người dùng, hãy thực hiện một số lọc syslog.
Tôi đã viết một phương pháp để ghi nhật ký tất cả các lệnh / bash 'vào tệp văn bản hoặc máy chủ' syslog 'mà không cần sử dụng bản vá hoặc công cụ thực thi đặc biệt.
Nó rất dễ triển khai, vì nó là một shellscript đơn giản cần được gọi một lần khi khởi tạo 'bash'. (chỉ là 'nguồn' nó từ .bashrc chẳng hạn) Nó dựa trên ý tưởng sử dụng bẫy DEBUG bash. Xem thêm bài đăng này trên 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
xem phương pháp được giải thích chi tiết tại đây: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger
chúc mừng Francois Scheurer
Bạn có thể thử ttyrpld . Đó là nhiều hơn bạn muốn bởi vì nó sẽ đăng nhập toàn bộ tty.
Tôi đã không sử dụng nó cho mình nhưng cách nó hoạt động (trong kernel) khiến người dùng đó không thể thay đổi nhật ký.
Sử dụng một grsecurity kernel vá. Có một tùy chọn kernel chính xác cho mục đích này.
Bạn có thể kích hoạt kiểm toán hệ thống.
bash giữ một lịch sử lệnh của một kích thước được chỉ định. Quản trị viên của bạn có thể đặt kích thước đó và dễ dàng viết một tập lệnh đi và tìm nạp lịch sử đó cho mỗi người dùng thông qua cron.