유닉스 클라이언트와 서버 사이의 tty / pts ssh 세션 비교


1

tty / pts 정보와 로그인 및 로그 아웃 날짜가있는 ssh 세션을 클라이언트에 나열 할 수 있습니까? 서버의 마지막 명령과 동일합니다.

내 사용자는 프록시 SSH를 사용하여 서버에 연결하지만 프록시 서버에서는 일반 계정을 사용하여 서버에 연결합니다. 나는 클라이언트와 서버 사이의 tty / pts id를 비교할 것이다. 서버에서이 스크립트를 사용하여 현재 날짜에 대한 정보를 얻습니다.

#!/bin/bash
today="$(date '+%a %b %e')"
last | awk -v pattern="$today" '$0 ~ pattern && /pts/ {print $0 "#line#"}'
exit 0

감사


내가 잘 이해하면 고객 이 경우 프록시 서버입니다. 그리고 당신은 그것에 접근 할 수 있습니다. 그것을 확인할 수 있습니까? (그렇다면 클라이언트에서 동일한 스크립트를 실행할 수 있습니다). BTW 내가 프록시에 같은 계정에 모두 로그온하기 때문에 어떻게 든 귀하의 클라이언트의 활동을 제어하고자하는 것 같습니다. 그렇다면 직접 물어보십시오. Ps & gt; 수퍼 유저를 환영합니다.
Hastur

고마워, 네, 내 프록시는 내 고객이고 나는 그것에 접근 할 수있다. 프록시 (클라이언트)에서 동일한 스크립트를 실행하면 사용자 컴퓨터가 프록시에 연결되었지만 프록시는 서버에 연결되지 않은 내역이 있습니다. 그러나 나는 뭔가를 놓칠지도 모른다. 사용자 컴퓨터에서 프록시에 이르기까지 그들은 자신의 SSH 계정을 사용하지만 프록시에서 서버까지 일반 계정 (예 : oracle)을 사용합니다.
Nicolas

천만에요. 다시 진짜 (최종) 질문은 무엇입니까? ;)? 서버의 프로그램에 대한 액세스를 제어하려면 프로그램의 다른 사용자를 작성하십시오. 가능하지 않은 경우 서버에 다른 사용자를 만들고 허용 된 사용자에게 ID를 변경하거나 해당 사용자로 해당 프로그램을 실행하도록 허용합니다 ( 거룩한 sudo ). 이미징중인 경로의 경우 두 목록을 일치 시키거나 ssh 로깅을 활성화하고 두 목록을 일치시켜야합니다. 하지만 100 % 고유 한 성냥은 없습니다.
Hastur

컨텍스트는 다음과 같습니다. 고객이 DB 서버에서 액세스를 감사하도록 작업합니다. 데이터베이스 액티비티 모니터링 솔루션을 사용하지만, OS 레벨에서 사용자를 로깅합니다. 오늘날이 고객은 ssh 프록시를 사용하여 일반 계정으로 DB 서버에 연결합니다. 나는 그들의 업무 프로세스를 바꿀 수 없다, 나는 보안 관점에서 볼 때 매우 나쁜 습관이라고 동의한다. 내 진짜 질문은 : 나는 클라이언트 측에서 tty / pts를 서버 측과 비교하고 타임 스탬프를 서로 연관 짓고 싶습니다.
Nicolas

당신은 대답을 가지고 있습니다 ... 당신이 좋아할 지 모르겠지만 그것은 대답입니다 :-)
Hastur

답변:


0

몇 마디로

두 머신에서 ssh의 로그를 사용하십시오 : 생성 된 쉘의 PID를 제공합니다. 이렇게하면 셸의 PID를 프로그램 실행과 연결하고 tty와 특정 일치를 가질 수 있습니다. 더 깊은 감사를 위해 감사 도구를 사용할 수 있습니다.

다시 말하면

last

단순한 last 사용 된 tty와 관련된 연결 목록을 가질 수 있습니다.
당신은 당신의 대리 machine (나는 Gateway, GW라고 부르고 싶다.) 그리고 다른 하나는 섬기는 사람 . 명령 last 기본적으로 사용자 이름, pts / tty, IP / 호스트 이름을 제공합니다. 로그인 날짜 시간, 로그 아웃 날짜 시간. 형식 등을 수정할 수 있습니다.

그런 다음 기간의 오버레이에서 작업하고 누가 있었는지 추측해야합니다.

내가 보는이 문제는 가능한 모든 일치를 제공하는 도구 (스크립트)를 작성해야하며 동시에 일치하는 항목을 제거해야한다는 것입니다. 그럼에도 불구하고 이상한 상황이 발생할 수 있습니다.

사례 연구를 해보 죠. Nicolas라고하는 첫 번째 사용자는 GW에 로그온 할 수 있습니다. 그런 다음 그는 커피를 가져 가거나 전화를받습니다. 한편, 두 번째 사용자는 Hastur에 로그인하여 GW에 로그인 한 다음 1 사용자가 서버에 기록합니다. 이 순간 당신의 이중 기록은 복잡합니다. 이제 Hastur는 커피가 필요하다고 느끼고 Nicolas가 서버에 로그인합니다. 누가 커피를 마시고 프로그램과 처음으로 연결될 것입니까?

/var/log/auth (또는 ssh의 다른 로그 파일) [ 1 ] ..

각 시스템의 로그인 및 로그 아웃을 모니터하는 데 사용되는 로그 파일이 있습니다. 올바른 경로와 이름, 해당 ca 시스템을 검색하십시오. 와

sudo grep TheUsername /var/log/auth.log

당신은 비슷한 줄을 얻을 것이다.

May  1 16:17:43 owl sshd[9024]: Accepted publickey for root from 192.168.0.101 port 37384 ssh2
May  1 16:17:43 owl sshd[9024]: pam_unix(sshd:session): session opened for user root by (uid=0)

올바른 로그인 시간과 PID ( [9024] ), 그리고 IP. 이번에는이 파일의 데이터를 다음 중 하나와 일치시킬 수 있습니다. last 명령을 사용하여 tty를 알거나 프로그램 자체를 호출 한 셸의 PID를 프로그램 내부에 기록 할 수 있습니다 (셸에 대한 시스템 호출로 수행 할 수 있습니다).

이러한 파일을 작업 할 때마다 각 세션마다 고유 한 일치 항목을 가질 수 있습니다. 게이트웨이의 유사한 로그 파일의 경우 원래 IP와 사용자 이름을 갖습니다.

audit tools [ 2 ], [ ]

할 수있는 권한이 있고 그것이 합법적 인 경우, 감사 도구를 사용하고 호스트 시스템에서 쉘의 전체 로그를 작성할 수 있습니다.

참고 문헌

  • [ 1 ] SSH 액세스 시도 로깅
  • [ 2 ] 쉘 / ssh / tty 세션 로거
  • [ ] 원격 호스트에서의 BASH 셸 세션 로깅
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.