Bagaimana saya bisa mencatat perintah bash pengguna?


10

Saya menjalankan server debian etch di mana pengguna akan masuk ke (semoga) jail chroot melalui ssh. Bagaimana saya bisa membuat perintah yang mereka jalankan dicatat dengan cara yang tidak bisa mereka hapus, atau cegah?


Jawaban:


11

instal snoopy . Jika Anda hanya ingin mencatat satu pengguna, lakukan beberapa syslog filtering fu.


Saya ingin mencatat setiap pengguna.
Malfist

Kemudian instal saja, itu akan "hanya berfungsi" (TM)
Cian

dapatkah saya mengaturnya untuk masuk ke suatu tempat selain /var/log/auth.log?
Malfist

Ia pergi ke syslog, sehingga Anda dapat memfilternya ke mana saja dari sana, iirc. Saya hanya pernah melakukan sesuatu dengan syslog-ng, jadi saya tidak tahu tentang filter dengan syslog biasa.
Cian

4

Saya menulis sebuah metode untuk mencatat semua perintah / built 'bash' ke dalam file teks atau server 'syslog' tanpa menggunakan patch atau alat yang dapat dieksekusi khusus.

Sangat mudah untuk digunakan, karena ini adalah shellscript sederhana yang perlu dipanggil sekali pada inisialisasi 'bash'. (cukup 'sumber' dari .bashrc misalnya) Hal ini didasarkan pada ide menggunakan perangkap DEBUG bash. Lihat juga posting ini di 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  

lihat metode yang dijelaskan secara rinci di sini: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger

sorakan Francois Scheurer


2

Anda dapat mencoba ttyrpld . Ini lebih dari yang Anda inginkan karena akan mencatat seluruh tty.
Saya belum menggunakannya sendiri tetapi cara kerjanya (dalam kernel) membuat pengguna tidak dapat mengubah log.


keren, aku akan memeriksanya. Jika itu bermain bagus dengan semua itu akan menjadi apa yang saya butuhkan. Saya dapat mengubah file-file log untuk menambahkan-hanya untuk memastikan
Malfist

Jawaban cian menggunakan snoopy sepertinya lebih seperti apa yang Anda cari.
radius


-1

Anda dapat mengaktifkan audit sistem.


1
dan bagaimana seseorang melakukannya?
Rory

Mulailah dengan halaman manual untuk auditd dan pergi dari sana. Ini mungkin bukan bagian dari instalasi dasar Debian, tetapi fasilitas audit adalah komponen kernel Linux, sehingga alat-alat pengguna dapat diinstal dan digunakan pada distribusi apa pun.
Geoff Fritz

-3

bash menyimpan riwayat perintah dengan ukuran tertentu. Anda admin dapat mengatur ukuran itu, dan dengan mudah menulis skrip yang berjalan dan mengambil histori itu per pengguna melalui cron.


1
.bash_history adalah untuk kenyamanan, bukan untuk keamanan. Ada sejumlah alasan untuk ini, tidak sedikit yang dapat diedit pengguna (atau setidaknya ditambahkan).
Matt
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.