ssh가 로그인된 상태에서 명령을 실행하고 명령이 끝나면 로그아웃합니다.

ssh가 로그인된 상태에서 명령을 실행하고 명령이 끝나면 로그아웃합니다.

Centos7 시스템에서 사용자 활동을 추적하고 싶습니다. 이를 위해 경영진은 다음을 사용하기로 결정했습니다.스크립트그리고스크립트 재생기본적으로 사용자 활동을 기록하고 재생합니다. 디자인 방법에 대해 몇 가지 조사를 했지만 auditd에 의존하는 솔루션은 여기 관리에서 거부되었으며 사용자의 .profile에 스크립트를 넣으면 아래 설명된 것처럼 몇 가지 문제가 발생합니다.

예상되는 동작은 다음과 같습니다.

  1. 사용자가 SSH를 통해 서버에 로그인하면 스크립트 명령이 생성되고 사용자 활동을 파일에 기록하기 시작합니다.
  2. 사용자가 서버 작업을 마치면 로그아웃합니다(보통 종료 또는 CTRLD를 입력).
  3. 스크립트 프로세스가 중지되고 파일이 닫힙니다.

이제 질문은 다음과 같습니다.

  1. 내 연구에 따르면 스크립트가 실제로 다른 쉘을 생성하는 것으로 나타났습니다. 따라서 스크립트 script.log를 각 사용자(또는 skel)의 .bash_profile에 넣으면 로그인 후 사용자를 위한 새 셸이 실행되고 사용자는 쉽게 프로세스를 중단하고 실행을 시작할 수 있습니다. 그의 평소 SSH 세션. 사용자가 스크립트 명령으로 생성된 셸을 종료할 때 스크립트가 실제로 사용자를 쫓아내도록 하려면 어떻게 해야 합니까?

  2. 스크립트 출력(즉, 사용자 명령)은 sudo가 아닌 사용자가 R/W/E 권한 없이 어떤 작업도 수행할 수 없는 개인 위치에 저장되어야 합니다.사용자 자신에게 권한이 없을 때 사용자가 로그인할 때 높은 권한으로 스크립트를 어떻게 실행합니까?

답변1

강제 명령에는 다음과 같은 옵션이 sshd있습니다 ForceCommand.

클라이언트 및 ~/.ssh/rc(있는 경우)에서 제공하는 모든 명령을 무시하고 ForceCommand에서 지정한 명령을 강제로 실행합니다. 명령은 사용자의 로그인 쉘과 -c 옵션을 사용하여 호출됩니다.
이는 쉘, 명령 또는 하위 시스템 실행에 적용됩니다. Match 블록 내에서 가장 유용합니다. 클라이언트가 원래 제공한 명령은 SSH_ORIGINAL_COMMAND 환경 변수에서 찾을 수 있습니다.

그래서 제가 읽은 바에 따르면, ForceCommand로 설정하면 script대략적으로 원하는 결과를 얻을 수 있을 것입니다.

감사 추적을 안전하게 유지하기 위한 다중 서버 시스템의 한 가지 솔루션은 시스템 로그에서 학습하고 네트워크를 통해 항목을 다른 물리적 호스트로 보내는 것입니다. 이는 로그가 생성된 후 사용자가 로그에 액세스하는 것을 거의 방지합니다. 다른 모든 것이 실패하면 데몬이 로그를 수집하고 저장하는 localhost의 다른 포트로 로그를 보내도록 무언가를 구성할 수 있습니다. (당연한 방법을 시도한 후에는 bash로 처리해야 하기 script -f /dev/tcp/localhost/8888때문에 할 수 없으므로 다음과 같은 통신 경로가 직접 /dev/tcp/...필요할 것 같습니다.mkfifo맨페이지 예script -f)

관련 정보