나는 sudo
10명의 사용자에게 또 다른 유사한 사용자가 되도록 제안했습니다 nsup
.
가 된 후 어떤 사용자가 어떤 명령을 실행했는지 추적하고 싶습니다 nsup
. 로그 파일을 공용 파일에 저장할 수 있는 방법이 있으면 좋을 것 같습니다.
찾아보았지만 /var/log/secure
거기에서는 어떤 사용자가 가 된 후 어떤 명령을 실행했는지 구별할 수 없습니다 nsup
. 어떤 사용자가 명령을 실행했는지만 표시됩니다.~이 되다 nsup
, 다른 것은 없습니다.
답변1
사용자가 bash를 사용하는 경우 /etc/bash.bash_logout 스크립트를 사용하여 기록의 추가 복사본을 타임스탬프 형식으로 저장할 수 있습니다.
예를 들어, 누가 언제 무엇을 했는지에 대한 감사 추적을 제공하고(여러 sudo 사용자가 있는 서버에서) 시스템이 손상된 경우 기록을 보존하기 위해 다음을 작성했습니다.
#! /bin/bash
# /etc/bash.bash_logout
#
# Time-stamped bash history logging
# by Craig Sanders <[email protected]> 2008
#
# This script is public domain. Do whatever you want with it.
exec >& /dev/null
# LOGDIR must already exist and must be mode 1777 (same as /tmp)
# put it somewhere easily overlooked by script-kiddies. /var/log
# is a bad location because slightly-brighter-than-average SK's will
# often 'rm -rf /var/log' to cover their tracks.
LOGDIR='/var/tmp/.history'
[ -d "$LOGDIR" ] || exit 0
# Get current user name and who they logged in as.
CNAME=$(id -u -n)
LNAME=$(who am i | awk '{print $1}')
NAME="$LNAME--$CNAME"
# Get the TTY
TTY=$(tty)
# get the hostname and ip they logged in from
# short (non-fqdn) hostname:
RHOST_NAME=$(who -m | awk '{print $5}' | sed -r -e 's/[()]|\..*//g')
# or full hostname:
#RHOST_NAME=$(who -m | awk '{print $5}' | sed -r -e 's/[()]//g')
# if no RHOST_NAME, then login was on the console.
echo "$RHOST_NAME" | grep -q '[:/]' && RHOST_NAME="console"
# get the IP address
RHOST_IP=$(who -m --ips | awk '{print $5}')
echo "$RHOST_IP" | grep -q '[:/]' && RHOST_IP="console"
RHOST=$(echo "$RHOST_NAME--$RHOST_IP")
WHERE="$RHOST--$TTY"
WHERE=$(echo "$WHERE" | sed -e 's/\//-/g' -e 's/^-//')
# Filenames will be of the form:
# $LOGDIR/cas--root--localhost--127.0.0.1---dev-pts-1
# Ugly, but useful/informative. This example shows I logged in as cas
# from localhost, sudo-ed to root, and my tty was /dev/pts/1
HISTLOG="$LOGDIR/$NAME--$WHERE"
# Optionally rotate HISTLOG on each logout, otherwise new history
# sessions just get appended.
#[ -e "$HISTLOG" ] && savelog -l -c 21 -q $HISTLOG > /dev/null 2>&1
# Log some easily parseable info as a prelude, including the current
# history settings (an unusual HISTFILE or zero HISTSIZE setting is
# suspicious and worthy of investigation)
cat <<__EOF__ >> "$HISTLOG"
### TIME ### $(date +'%a,%Y-%m-%d,%H:%M:%S')
### FROM ### $RHOST_NAME,$RHOST_IP,$TTY
### USER ### $LNAME,$CNAME
### WHOM ### $(who -m)
### HIST ### $HISTFILE,$HISTSIZE
__EOF__
# Setting HISTTIMEFORMAT seems to be buggy. bash man page says it uses
# strftime, but all it seems to care about is whether it's set or not -
# 'history -a' always uses seconds since epoch, regardless of what it is
# set to.
HISTTIMEFORMAT="%s"
history -a "$HISTLOG"
# Now write history as normal (this seems buggy too. bash used to always
# write $HISTFILE anyway, but now it won't do it if you've already run
# 'history -a')
unset HISTTIMEFORMAT
history -w
답변2
이것이 내가 달성한 방법입니다.
rsyslog.conf
파일 에서 추적할 다음 줄을 추가했습니다.
$umask 0000
$FileCreateMode 0666
local2.info /var/log/usercommands
$umask 0077
/etc/skel/.bashrc
파일 에 다음 줄을 추가했습니다.
myname=`who am i | awk '{print $1}'`
PROMPT_COMMAND='history -a >(logger -p local2.info -i "$myname $USER[$PWD] $SSH_CONNECTION")'
이것이 도움이 되기를 바랍니다
답변3
11년 1개월 전에 질문함
RHEL 6을 가리키지만, 그게 중요하다면 최신 버전을 찾아보세요.감사 로그 파일 이해레드햇에서.
감사 uid이고 프로세스를 시작하는 데 유효한 uid를 uid
확인 하려고 합니다 . 하지만 이를 효과적으로 캡처하려면 적절하게 정의된 파일이 필요 합니다 . 이 게시물의 제목 줄에 질문하신 질문에 대해 예, 추적 가능하지만(사람이 쉽게 읽을 수는 없음) audit.log에 존재합니다. 11년 전 RHEL/CentOS 7은 아마도 그렇지 않을 것입니다. 오늘날과 마찬가지로 RHEL 8+ 이전의 auditd 버전만큼 좋습니다.auid
euid
/var/log/audit/audit.log
systemctl enable auditd
/etc/audit/rules.d/audit.rules