기본적으로 각 세션의 모든 터미널 입력 및 출력을 로컬 파일에 기록하려면 어떻게 해야 합니까?

기본적으로 각 세션의 모든 터미널 입력 및 출력을 로컬 파일에 기록하려면 어떻게 해야 합니까?

script이 명령을 사용하여 모든 키보드 입력과 화면 출력을 파일에 기록할 수 있다는 것을 알고 있지만 터미널 세션을 시작할 때마다 이 명령을 호출해야 합니다. $HISTSIZE에 도달한 후에도 이전 명령이 손실되지 않도록 .bash_history 파일의 타임스탬프 버전을 유지합니다. .bashrc의 내 $HISTFILE 문은 입니다 HISTFILE=~/.bash_history_$(date '+%Y%m%d_%H_%M_%S_%N').txt. 이는 실행된 명령의 로그를 생성해야 하는 요구 사항을 충족하지만 출력을 파일에 기록하지는 않습니다. 모든 stdin 입력과 stdout 및 stderr 출력을 타임스탬프 파일에 기록하기 위해 .bashrc 또는 .profile에 무언가를 넣을 수 있습니까? 이는 사용자 활동을 모니터링하는 데에도 유용하지만 나중에 참조할 목적으로만 필요합니다.

편집하다: 내가 넣으면

script /ramdisk/consoleOutput_$(whoami)_$(date +'%Y_%m_%d_%H_%M_%S_%N').txt ; exit

~/.profile의 끝에서 이는 테스트 사용자에게 내가 원하는 것과 같습니다.

명령이 터미널에서 종료된 ;exit후의 추가 내용입니다 . script사용자가 로그인한 상태에서 "exit"를 입력하면 script세션이 종료됩니다. 추가 "종료"는 ~/.profile에서 종료될 때 SSH/터미널 세션을 종료합니다. 루트만 읽을 수 있도록 chown파일을 루트로 보내는 추가 기능을 만들 계획입니다 . chmod 600이후 안전한 장소로 이동됩니다.

cat또한 및 를 사용하여 색상을 볼 수 있습니다 more. 편집기에서 열면 색상을 생성하는 데 사용되는 제어 문자가 표시됩니다. 나는 동의한다.

답변1

목표가 시스템을 모니터링하는 것이라면 이름에서 알 수 있듯이 pam_tty_audit.pam_tty_audit팸 모듈올바르게 구성되면 사용자가 세션을 열고 TTY를 얻을 때마다 호출됩니다. 이 모듈은 모든 입력 및 출력을 기록하고 기록된 모든 내용을 전송합니다.심사악마. 그런 다음 auditd 데몬을 쿼리하여 로그를 볼 수 있습니다.

RedHat은 좋은 시작 가이드를 제공합니다 pam_tty_audit:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Security_Guide/sec-Configuring_PAM_for_Auditing.html
RedHat 또는 Fedora를 기반으로 하지 않는 배포판의 경우 이 지침은 여전히 ​​유효하지만 /etc/pam.d/.

이것이 완전히 안전한 것은 아니라는 점에 유의하십시오. TTY 없이 명령을 실행하는 방법에는 여러 가지가 있습니다. 예를 들어 SSH를 통해 연결하는 경우 실행할 수 ssh foo.example.com bash -i있으며 명령이 지정되어 있으므로 TTY가 할당되지 않습니다. 이런 일이 발생하는 것을 방지하기 위해 할 수 있는 일이 몇 가지 있습니다.

또한 로그에 대한 액세스가 안전한지 확인해야 합니다. pam_tty_audit기록모두TTY 활동에는 입력한 비밀번호가 포함됩니다.

답변2

만약 너라면진짜script원하는 경우 타임스탬프가 있는 "typescript" 파일 작성을 호출하는(그리고 실제 쉘을 호출하는) 프로그램(또는 쉘 스크립트)을 만들고 수행할 수 있습니다.저것기본 쉘을 /etc/passwd.

몇 가지 함정이 있습니다:

  • 이 프로그램을 추가해야 할 수도 있습니다./etc/shells
  • 이렇게 하면 SHELL여러 가지 방법으로 사용할 수 있는 환경 변수가 설정됩니다. 루프(및 기타 잘못된 동작)를 방지하려면 이를 재정의하세요.
    #!/bin/sh
    쉘=/bin/bash
    인클로저 종료
    스크립트 -c "$SHELL" $HOME/consoleOutput_$(whoami)_$(날짜 +'%Y_%m_%d_%H_%M_%S_%N').txt

관련 정보