ssh를 사용하여 Linux에서 특정 IP를 실행 한 IP를 확인하려면 사용자 목록을

많은 사용자가 ssh를 사용하여 액세스하는 서버가 있습니다. 어떤 사용자가 특정 명령을 실행했는지 파악하려고합니다.

현재 서버에 액세스하는 사용자 목록을 사용하여 who
알 수 history있습니다. 또한를 사용하여 실행되는 명령 목록을 알 수 있습니다.

그러나 cp file1.sh file2.sh서버에서 어떤 사용자가 명령을 실행했는지 아는 방법은 무엇 입니까? 사용자가 이미 명령을 실행하고 로그 아웃했습니다



답변

연결하는 각 새 사용자 sshd는 특정 PID를 사용하여 새 세션을 생성합니다 . 당신이 사용할 수 pstree있는 상속되는 명령 인쇄 sshd이 PID를 확인 크로스 다음 세션, 그리고 /var/log/auth.log.

예 (익명) : 동일한 원격 사용자로 3 개의 동시 세션을 사용하여 원격 서버에 로그인했습니다. 이제 클라이언트가 어느 IP에서 명령을 실행했는지 확인하고 싶습니다 watch date.

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log

pstree -pwatch명령은 sshdPID 15243으로 상속 되었음을 나타냅니다. grep이 PID를 /var/auth/auth.log표시하면이 세션을 시작한 IP 12.34.56.78임을 알 수 있습니다. 따라서이 또한 시작한 사용자입니다 watch.

history구체적 으로이 사용자 를 찾는 경우 모든 원격 사용자가 동일한 로컬 SSH 사용자를 사용하고있을 때 볼 수있는 것으로 수행 할 수 없습니다. 또한 쉽게 스푸핑 / 비활성화 될 수 있으므로 실제로 신뢰할 수는 없습니다. 히스토리 파일에 저장되면 cp명령을 찾아 파일에서 뒤로 볼 수 있지만 파일이 없으면 할 일이별로 없습니다.


답변

bash가 실행 한 모든 명령을 기록하기 위해이 두 줄을 / etc / profile 또는 / etc / bashrc에 추가 할 수 있습니다.

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

syslog를 사용하여 실행 한 모든 사용자와 함께 IP 주소를 다음과 같은 형식으로 기록합니다.

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

또한 아래 줄을 syslog 구성 (/etc/syslog.conf)에 추가하여 local3 메시지를 특정 파일로 리디렉션 할 수 있습니다.

local3.*                                                /var/log/prompt.log

답변

스누피 를 사용할 수 있습니다 .

로그 메시지 형식의 정의에서 IP = % {env : SSH_CLIENT}를 지정하여 사용자 정의 환경 변수 (SSH_CLIENT)를 로그하도록 구성해야합니다 (./configure 플래그 또는 2.x 버전 이후 snoopy.ini에서 구성 가능).

공개 : 스누피 관리자.


답변

당신이 떠들썩한 파티를 사용하고 있다고 가정하면, history단지 당신에게 보여줄 것이다 당신의 명령 행 역사를. 기본적으로 ~/.bash_history기록을 읽습니다 . 이와 같은 작업을 수행하면 (거의 가능성은 낮지 만) 변경할 수 있습니다 HISTFILE=/home/userFoo/.my_alt_history.

상자에 루트가 있다고 가정하면 모든 사용자 디렉토리를 스캔하고 해당 내역을 읽고 누가 해당 명령을 실행하고 있는지 확인할 수 있습니다.