Kullanıcıların bash komutlarını nasıl kaydedebilirim?


10

Kullanıcıların (umarım) ssh aracılığıyla bir chroot hapishanesinde oturum açacağı bir debian etch sunucusu çalıştırıyorum. Yürüttükleri komutları silemeyecekleri veya engelleyemeyecekleri şekilde nasıl kaydedebilirim?


Yanıtlar:


11

snoopy yükleyin . Yalnızca bir kullanıcıyı günlüğe kaydetmek istiyorsanız, bazı syslog filtreleme fuları yapın.


Her kullanıcıyı günlüğe kaydetmek istiyorum.
Malfist

Sonra sadece yükleyin, "sadece işe yarayacak" (TM)
Cian

/var/log/auth.log dışında bir yere giriş yapacak şekilde ayarlayabilir miyim?
Malfist

Syslog'a gider, böylece oradan her yere filtreleyebilirsiniz, iirc. Ben sadece syslog-ng ile herhangi bir şey yaptım, bu yüzden korkuyorum düzenli syslog filtreler hakkında hiçbir fikrim yok.
Cian

4

Bir yama veya özel bir yürütülebilir araç kullanmadan tüm 'bash' komutlarını / yerleşiklerini bir metin dosyasına veya 'syslog' sunucusuna kaydetmek için bir yöntem yazdım.

'Bash' başlangıcında bir kez çağrılması gereken basit bir kabuk komut dosyası olduğu için dağıtımı çok kolaydır. (sadece .bashrc'den 'kaynak') Bash DEBUG tuzaklarını kullanma fikrine dayanır. Ayrıca bu yazıya bakı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  

burada ayrıntılı olarak açıklanan yönteme bakınız: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger

şerefe Francois Scheurer


2

Ttyrpld deneyebilirsiniz . İstediğinizden daha fazla çünkü tüm tty'yi kaydedecek.
Kendim kullanmadım ama çalışma şekli (çekirdekte) kullanıcının günlükleri değiştirememesini sağlıyor.


Havalı, kontrol edeceğim. Her şeyle güzel oynarsa ihtiyacım olan şey olur. Ben sadece emin olmak için günlük dosyalarını sadece ek olarak değiştirebilirsiniz
Malfist

Snoopy kullanarak Cian cevap daha çok aradığınıza benziyor.
yarıçap

0

Grsecurity yamalı bir çekirdek kullanın . Tam olarak bu amaç için bir çekirdek seçeneği vardır.


-1

Sistem denetimini etkinleştirebilirsiniz.


1
ve bunu nasıl yapar?
Rory

Audd için man sayfaları ile başlayın ve oradan gidin. Temel Debian kurulumunun bir parçası olmayabilir, ancak denetim tesisi bir Linux çekirdek bileşenidir, bu nedenle kullanıcı alanı araçları herhangi bir dağıtımda kurulabilir ve kullanılabilir.
Geoff Fritz

-3

bash, belirtilen boyutta bir komut geçmişi tutar. Yönetici bu boyutu ayarlayabilir ve cron üzerinden kullanıcı başına bu geçmişi alan ve getiren bir komut dosyası yazabilirsiniz.


1
.bash_history kolaylık sağlamak içindir, güvenlik için değildir. Bunun birkaç nedeni var, bunların en azından kullanıcı tarafından düzenlenebilir (veya en azından eklenebilir) olması değil.
Matt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.