이 질문은 자신의 세션을 기록하려는 개인이 요청했지만 다른 사용 사례는 다양한 사용자의 활동을 추적하려는 시스템 관리자 일 수 있습니다.
script
시스템 전체에서 실행하는 bashrc
것이 세션 사용자가 기록을 가지고 싶어하지 않는 경우에는 적합하지 않을 수 있습니다.
시크릿 상태를 유지하려는 사용자는 sshd에 다른 셸 (예 :)을 열거 zsh
나 로드 bash --rcfile ___
되지 않도록 실행 하여 로깅을 무시할 수 /etc/bash.bashrc
있습니다.
대체 접근법
2008 ( 보관 됨 ) 의이 안내서 는 사용자가 ssh로 로그인 할 때 다른 방법 을 script
사용하여 공개 / 개인 키로 로그인해야합니다.
이는 .ssh/authorized_keys
키 앞에 사용자 파일에 스크립트를 추가하여 수행됩니다 .
command="/usr/local/sbin/log-session" ssh-dss AAAAB3NzaC1kc3MAAAEBAMKr1HxJz.....
log-session
( 보관 ) 스크립트가 실행 여부 결정 /usr/bin/script
이 사용자의 세션을 기록 할 수 있습니다.
exec script -a -f -q -c "$SSH_ORIGINAL_COMMAND" $LOGFILE
사용자가 추가 된 명령을 제거하지 못하게하려면 관리자는 사용자 authorized_keys
파일 의 소유권을 가져야 합니다.
chown root:root ~user/.ssh/authorized_keys
불행히도, 이것은 사용자가 자신에게 추가 키를 추가하거나 기존 키가 손상되면 더 이상 중요한 키를 취소 할 수 없다는 것을 의미합니다. 이상적이지는 않습니다.
경고
sshd의 기본 구성은 사용자가 ssh 로그인을 통해 SFTP를 수행 할 수 있도록하는 것이 일반적입니다. 이를 통해 사용자는 변경 사항을 기록하지 않고 파일을 편집 할 수 있습니다. 관리자가 사용자가 그렇게하지 못하게하려면 SFTP에 대한 일부 로깅을 활성화하거나 서비스를 비활성화해야합니다. 그럼에도 불구하고 사용자는 터미널에서 다음과 같이 실행하여 파일을 보이지 않게 변경할 수 있습니다.
curl "http://users.own.server/server/new_data" > existing_file
모든 파일 히스토리를 기록하는 COW (Copy-On-Write) 파일 시스템을 사용하여 이와 같은 변경 사항을 모니터 할 수 있습니다.
그러나 비슷한 트릭을 통해 사용자는 명령을 기록하지 않고도 명령을 실행할 수 있습니다.
curl "http://users.own.server/server/secret_commands_824" | sh
나는 그것에 대한 쉬운 해결책을 모른다. 가능성은 다음과 같습니다.
- 모든 네트워크 데이터를 기록하고 나중에 연결 해제합니다.
- 모든 시스템 호출을 기록합니다.
이런 종류의 일은 감사를 통해 가능할 수 있습니다 .
어쨌든 ...
사용자 세션 로깅이 관리자에게 실질적인 보안을 제공하지는 않습니다. 기본적으로 사용자는 자신의 파일 만 조작 할 수 있으며 시스템을 손상시킬 수 없습니다. 악의적 인 사용자가 권한을 에스컬레이션 한 경우 관리자가 로그를 별도의 컴퓨터에 추가 전용 방식으로 저장하도록 구성하지 않은 경우 로깅을 비활성화하고 로그를 삭제할 수 있습니다.
사용자 세션을 자동으로 기록하는 관리자 는 사용자에게 이것이 완료되었음을 알려야합니다 . 일부 관할 지역에서는이 형식의 데이터 수집이 데이터 또는 개인 정보 보호법을 위반할 수 있습니다 . 그리고 최소한 사용자가이를 인식하게하는 것은 존중하는 일입니다.
관리자가 sudo
사용자 세션 기록에 관심이있을 가능성이 높습니다 . 그것은 아마도 다른 대답이나 실제로 다른 질문에서 다룰 수 있습니다.
exec
줄의 시작 부분에 앞에 씁니다 .script -f
동일한 쉘 PID에서 시작해야합니다 .