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


10

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

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

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

답변:


4

연결하는 각 새 사용자 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명령을 찾아 파일에서 뒤로 볼 수 있지만 파일이 없으면 할 일이별로 없습니다.


그것은이 오류를 말합니다 grep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan

@ManuKMohan : 사용중인 시스템을 명시하지 않았습니다. RHEL / Fedora / Scientific Linux / etc.에서 관련 파일은 /var/log/secure입니다.
Daniel Andersson

Anderson 저는 우분투를 사용하고 있습니다
Manu K Mohan

@ManuKMohan : /var/log/auth.log.1등이있는 경우 정보가 포함되어 있는지 확인하십시오. 그런 다음 rsyslog( sudo service rsyslog restart)를 다시 시작 auth.log하고 이미 시작중인 채우기 시작하는지 확인하십시오 . 에 SSHD 로그 /var/log/auth.log우분투에서 기본적으로 사용자가 명시 적으로 통해 로깅 대상을 변경 한 그렇게하지 않는 한, /etc/ssh/ssd_config또는 /etc/syslog.conf(당신이 어떤 파일을 확인할 수 있습니다 auth, 그것은이 있어야 레벨이 여기에 기록됩니다). 그렇지 않은 경우 : 무언가가 작동합니다 :-).
Daniel Andersson 2013 년

1

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

이제는 syslog-ng개선되었으며 구성 파일은 /etc/syslog-ng/syslog-ng.conf 입니다.
Timo

1

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

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

공개 : 스누피 관리자.


0

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

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


아, 그리고 그들이 사악한 경우, 그들은 쉽게이 명령을 그들의 역사에서 지울 수있었습니다. 명령을 실행하는 상자에 활성화되어 있으면 다음과 같이 볼 수 있습니다.ps -aux | grep "cp file1.sh file2.sh"

모든 사용자가 ssh를 사용하여 서버의 동일한 사용자 이름에 원격으로 액세스하고 있습니다. 이 사용자에게 액세스 한 IP를 알고 명령을 실행하고 싶습니다.
Manu K Mohan

많은 사용자가 사용자 이름과 비밀번호를 공유하도록하는 것은 좋은 정책이 아닙니다.
pjc50
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.