ฉันจะบันทึกคำสั่ง bash ของผู้ใช้ได้อย่างไร


10

ฉันใช้เซิร์ฟเวอร์จำหลัก debian ที่ผู้ใช้จะเข้าสู่ระบบ (หวังว่า) คุก chroot ผ่าน ssh ฉันจะมีคำสั่งที่ดำเนินการบันทึกในวิธีที่พวกเขาไม่สามารถลบหรือป้องกันได้อย่างไร


ดูคำถามนี้serverfault.com/questions/8851/...
hayalci

คำตอบ:


11

ติดตั้งสนูปปี้ หากคุณต้องการบันทึกผู้ใช้เพียงคนเดียวให้ทำ syslog filter fu


ฉันต้องการบันทึกผู้ใช้ทุกคน
Malfist

จากนั้นเพียงแค่ติดตั้งมันก็จะ "เพิ่งจะทำงาน" (TM)
Cian

ฉันสามารถตั้งค่าให้เข้าสู่ระบบที่อื่นนอกเหนือจาก /var/log/auth.log ได้หรือไม่
Malfist

มันจะไปที่ syslog เพื่อให้คุณสามารถกรองไปยังที่ใดก็ได้จากที่นั่น iirc ฉันเคยทำอะไรกับ syslog-ng ดังนั้นฉันจึงไม่ทราบเกี่ยวกับตัวกรองที่มี syslog ปกติที่ฉันกลัว
Cian

4

ฉันเขียนวิธีการบันทึกคำสั่ง / builtins 'bash' ทั้งหมดลงในไฟล์ข้อความหรือเซิร์ฟเวอร์ 'syslog' โดยไม่ต้องใช้โปรแกรมปะแก้หรือเครื่องมือปฏิบัติการพิเศษ

มันง่ายในการปรับใช้เพราะเป็น shellscript ง่าย ๆ ที่ต้องถูกเรียกใช้ครั้งเดียวเมื่อเริ่มต้น '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

ไชโย Francois Scheurer


2

คุณอาจลองttyrpld มันมากกว่าที่คุณต้องการเพราะมันจะบันทึก tty ทั้งหมด
ฉันไม่ได้ใช้ด้วยตนเอง แต่วิธีการทำงาน (ในเคอร์เนล) ทำให้ผู้ใช้ไม่สามารถแก้ไขบันทึกได้


เจ๋งฉันจะลองดู ถ้ามันเล่นดีกับทุกสิ่งมันจะเป็นสิ่งที่ฉันต้องการ ฉันสามารถเปลี่ยนเป็นล็อกไฟล์เพื่อต่อท้ายเพียงเพื่อให้แน่ใจว่า
: 23419

คำตอบเซียนที่ใช้สนูปปี้ดูเหมือนจะเป็นสิ่งที่คุณต้องการมากขึ้น
รัศมี


-1

คุณสามารถเปิดใช้งานการตรวจสอบระบบ


1
และคนเราทำอย่างนั้นได้อย่างไร?
Rory

เริ่มต้นด้วย man pages สำหรับ auditd แล้วเริ่มจากตรงนั้น มันอาจไม่ได้เป็นส่วนหนึ่งของการติดตั้ง Debian ฐาน แต่สิ่งอำนวยความสะดวกการตรวจสอบเป็นองค์ประกอบเคอร์เนล Linux ดังนั้นเครื่องมือ userland สามารถติดตั้งและใช้ในการกระจายใด ๆ
Geoff Fritz

-3

bash เก็บประวัติคำสั่งตามขนาดที่ระบุ คุณผู้ดูแลระบบสามารถกำหนดขนาดนั้นและเขียนสคริปต์ที่จะไปและดึงประวัตินั้นต่อผู้ใช้ผ่าน cron


1
.bash_history มีไว้เพื่อความสะดวกไม่ใช่เพื่อความปลอดภัย มีสาเหตุหลายประการไม่ใช่อย่างน้อยก็สามารถแก้ไขได้โดยผู้ใช้ (หรือต่อท้ายอย่างน้อย)
Matt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.