저는 우리 팀의 시스템 관리자가 로그인한 다른 사용자를 위해 다른 터미널에서 무슨 일이 일어나고 있는지 모니터링하는 데 도움이 되는 스크립트를 작성 중입니다.
지금 제가 겪고 있는 문제 중 하나는 입력된 명령을 보는 방법입니다. 사용자가 종료하거나 입력할 때까지 기록이 저장되지 않는다는 것을 알고 있지만 history -a
콘텐츠를 볼 수 있는 방법이 있어야 합니다.지금메모리 어딘가에 저장되어 있더라도 기록에 남습니다.
혹시 어딘가에 저장되어 있나요 /proc/${pid_of_users_bash}
? 고유한 문자열(EG:, echo "foobarbaz"
그런 다음 grep for) 을 에코하는 명령을 입력해 보았습니다.푸바즈/proc/PID
디렉토리의 플랫 파일을 연결했지만 운이 좋지 않았습니다.
PROMPT_COMMAND
설정 또는 설정과 관련되지 않은 솔루션을 가진 사람이 있는 경우 histappend
(예:이것들), 정말 감사하겠습니다.
답변1
Bash는 원하는 정보를 제공하지 않습니다. 사용자가 설정을 재정의하기 쉽기 COMMAND_PROMPT
때문에 설정을 피하고 싶다고 생각합니다 . histappend
그러나 사용자가 각 명령 앞에 공백을 설정하고 삽입하면 HISTCONTROL="ignorespace"
명령이 기록에 저장되는 것을 완전히 비활성화하는 것이 가능할 수 있습니다. 따라서 모니터링을 원하지 않는 사용자는 bash 기록을 통해 안정적으로 모니터링할 수 없습니다.
개별 세션을 임시로 모니터링할 수 있습니다 strace
. 사용자 bash의 PID를 검색한 다음 를 호출하면 strace -p <bash-pid> 2>&1 |grep "read(0,"
철자 오류 및 편집 명령을 포함하여 사용자가 입력한 모든 문자를 볼 수 있습니다.
소프트웨어 패키지는 대부분의 Linux 배포판과 함께 제공됩니다 auditd
. 관리자가 과거 시스템 활동에 대한 정보를 얻을 수 있도록 시스템 구성 요소를 모니터링하고 감사합니다. PAM 모듈은 pam_tty_audit
TTY 활동 감사와 함께 작동하며 auditd
TTY 활동 감사를 활성화하거나 비활성화합니다. 바퀴를 다시 발명하고 pam_tty_audit
.