Làm cách nào tôi có thể đăng nhập các lệnh bash của người dùng?


10

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:


11

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 muốn đăng nhập mọi người dùng.
Malfist

Sau đó, chỉ cần cài đặt nó, nó sẽ "chỉ hoạt động" (TM)
Cian

Tôi có thể đặt nó để đăng nhập ở đâu đó ngoài /var/log/auth.log không?
Malfist

Nó đi đến syslog, vì vậy bạn có thể lọc nó đến bất cứ nơi nào từ đó, iirc. Tôi chỉ từng làm bất cứ điều gì với syslog-ng, vì vậy tôi không biết gì về các bộ lọc với syslog thông thường mà tôi sợ.
Cian

4

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


2

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ý.


tuyệt, tôi sẽ kiểm tra nó Nếu nó chơi tốt với mọi thứ thì đó sẽ là thứ tôi cần. Tôi có thể thay đổi các tệp nhật ký của nó thành chỉ để thêm vào để đảm bảo
Malfist

Câu trả lời của Cian bằng cách sử dụng snoopy dường như giống với những gì bạn đang tìm kiếm.
bán kính

0

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.


-1

Bạn có thể kích hoạt kiểm toán hệ thống.


1
và làm thế nào để làm điều đó?
Rory

Bắt đầu với các trang man cho audd và đi từ đó. Nó có thể không phải là một phần của bản cài đặt Debian cơ bản, nhưng cơ sở kiểm toán là một thành phần hạt nhân Linux, vì vậy các công cụ người dùng có thể được cài đặt và sử dụng trên bất kỳ bản phân phối nào.
Geoff Fritz

-3

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.


1
.bash_history là để thuận tiện, không phải để bảo mật. Có một số lý do cho việc này, không phải là ít nhất trong số đó là do người dùng có thể chỉnh sửa (hoặc ít nhất là có thể nối thêm).
Matt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.